Name: series-workflowvb9c6 Phase: Succeeded StartedAt: 2026-08-31 12:02:34 +0000 UTC FinishedAt: 2026-08-31 15:59:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb9c6[0] Phase: Succeeded StartedAt: 2026-08-31 12:02:34 +0000 UTC FinishedAt: 2026-08-31 12:20:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb9c6[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 12:02:34 +0000 UTC FinishedAt: 2026-08-31 12:20:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a8455260b2e9c024d1872ac1c094793d55a7e537", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_CFM", "BRIDGE_MRP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a8455260b2e9c024d1872ac1c094793d55a7e537", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_CFM", "BRIDGE_MRP" ], "series_id": "475c2863-94ae-452e-81c6-a35c7155bcce" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "br_cfm_frame_rx", "br_mrp_process", "br_cfm_mep_create", "br_cfm_mep_delete", "br_mrp_add", "br_mrp_del" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfQ0ZNJiMzNDssCiAgICAmIzM0O0JSSURHRV9NUlAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticl9jZm1fZnJhbWVfcngmIzM0OywKICAgICYjMzQ7YnJfbXJwX3Byb2Nlc3MmIzM0OywKICAgICYjMzQ7YnJfY2ZtX21lcF9jcmVhdGUmIzM0OywKICAgICYjMzQ7YnJfY2ZtX21lcF9kZWxldGUmIzM0OywKICAgICYjMzQ7YnJfbXJwX2FkZCYjMzQ7LAogICAgJiMzNDticl9tcnBfZGVsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBicmlkZ2Ugc3Vic3lzdGVtJiMzOTtzIENGTSAoQ29ubmVjdGl2aXR5IEZhdWx0IE1hbmFnZW1lbnQpIGFuZCBNUlAgKE1lZGlhIFJlZHVuZGFuY3kgUHJvdG9jb2wpIGZyYW1lIGRpc3BhdGNoIG1lY2hhbmlzbSBieSByZXBsYWNpbmcgdGhlIGR5bmFtaWMgZnJhbWUtdHlwZSBsaW5rZWQgbGlzdCAoYGZyYW1lX3R5cGVfbGlzdGApIHdpdGggYml0IGZsYWdzIGluIHRoZSBleGlzdGluZyBicmlkZ2Ugb3B0aW9ucyBiaXRtYXNrIChgQlJPUFRfQ0ZNX0VOQUJMRURgIGFuZCBgQlJPUFRfTVJQX0VOQUJMRURgKS4gXG5cbk5vIG5ldyBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgZGF0YSBidWZmZXJzIGFyZSBjcmVhdGVkIG9yIGV4cG9ydGVkIHRvIHVzZXIgc3BhY2UuIFRoZSBsb2dpYyByZWxpZXMgb24gYWxyZWFkeS1hbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGJyaWRnZSBzdHJ1Y3R1cmVzIChgc3RydWN0IG5ldF9icmlkZ2VgKSwgdG9nZ2xpbmcgYW5kIGNoZWNraW5nIGV4aXN0aW5nIGJpdCBmbGFncy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBjb25maWd1cmF0aW9ucyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcmVncmVzc2lvbi4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGJyaWRnZSBmcmFtZSBoYW5kbGluZyBsb2dpYyBmb3IgQ0ZNICg4MDIuMVEgQ0ZNKSBhbmQgTVJQIHByb3RvY29scyBieSByZXBsYWNpbmcgdGhlIGR5bmFtaWMgZnJhbWVfdHlwZV9saXN0IHdpdGggYnJpZGdlIG9wdGlvbiBmbGFncyAoQlJPUFRfQ0ZNX0VOQUJMRUQgYW5kIEJST1BUX01SUF9FTkFCTEVEKSBhbmQgZGlyZWN0IGNhbGxzIHRvIGJyX2NmbV9mcmFtZV9yeCBhbmQgYnJfbXJwX3Byb2Nlc3MuIEl0IG1vZGlmaWVzIGJvdGggdGhlIGZyYW1lIHJlY2VpdmUgcGF0aCBhbmQgdGhlIG5ldGxpbmstdHJpZ2dlcmVkIGluc3RhbmNlIGNyZWF0aW9uL2RlbGV0aW9uIHBhdGhzLiBUaGlzIGFmZmVjdHMgY29yZSBicmlkZ2UgbmV0d29ya2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWwgZW52aXJvbm1lbnRzIHdpdGhvdXQgc3BlY2lhbGl6ZWQgaGFyZHdhcmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmMjgyYTYxODI5YTZiZTdmNTFjYTllYTc2ZDBjNjg3MzFjZTJkMzdiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTI6MTc6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9jZm0uYyBiL25ldC9icmlkZ2UvYnJfY2ZtLmNcbmluZGV4IGRlYTU2ZmZmYTFjMTkuLjlkY2M5N2Q2M2E2ZmMgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX2NmbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX2NmbS5jXG5AQCAtMzY3LDcgJiM0MzszNjcsNyBAQCBzdGF0aWMgdTMyIGNjbV90bHZfZXh0cmFjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5kZXgsXG4gfVxuIFxuIC8qIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayAqL1xuLXN0YXRpYyBpbnQgYnJfY2ZtX2ZyYW1lX3J4KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO2ludCBicl9jZm1fZnJhbWVfcngoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHR1MzIgbWRsZXZlbCwgaW50ZXJ2YWwsIHNpemUsIGluZGV4LCBtYXg7XG4gXHRjb25zdCBzdHJ1Y3QgYnJfY2ZtX2NvbW1vbl9oZHIgKmhkcjtcbkBAIC00ODksMTEgJiM0Mzs0ODksNiBAQCBzdGF0aWMgaW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSBjZm1fZnJhbWVfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xuLVx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9DRk0pLFxuLVx0LmZyYW1lX2hhbmRsZXIgPSBicl9jZm1fZnJhbWVfcngsXG4tfTtcbi1cbiBpbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0XHQgICAgICBjb25zdCB1MzIgaW5zdGFuY2UsXG4gXHRcdCAgICAgIHN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZSAqY29uc3QgY3JlYXRlLFxuQEAgLTU1OSw3ICYjNDM7NTU0LDcgQEAgaW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm1lcC1cdTAwM2VjY21fdHhfZHdvcmssIGNjbV90eF93b3JrX2V4cGlyZWQpO1xuIFxuIFx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1lcF9saXN0KSlcbi1cdFx0YnJfYWRkX2ZyYW1lKGJyLCBcdTAwMjZjZm1fZnJhbWVfdHlwZSk7XG4mIzQzO1x0XHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9DRk1fRU5BQkxFRCwgdHJ1ZSk7XG4gXG4gXHRobGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2bWVwLVx1MDAzZWhlYWQsIFx1MDAyNmJyLVx1MDAzZW1lcF9saXN0KTtcbiBcbkBAIC01ODgsNyAmIzQzOzU4Myw3IEBAIHN0YXRpYyB2b2lkIG1lcF9kZWxldGVfaW1wbGVtZW50YXRpb24oc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0a2ZyZWVfcmN1KG1lcCwgcmN1KTtcbiBcbiBcdGlmIChobGlzdF9lbXB0eShcdTAwMjZici1cdTAwM2VtZXBfbGlzdCkpXG4tXHRcdGJyX2RlbF9mcmFtZShiciwgXHUwMDI2Y2ZtX2ZyYW1lX3R5cGUpO1xuJiM0MztcdFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfQ0ZNX0VOQUJMRUQsIGZhbHNlKTtcbiB9XG4gXG4gaW50IGJyX2NmbV9tZXBfZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuaW5kZXggZmY1NWRhYjczNjMyNi4uZTAxYzQ0YTkwZDg0YiAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfZGV2aWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmNcbkBAIC01MDMsNyAmIzQzOzUwMyw2IEBAIHZvaWQgYnJfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZici1cdTAwM2Vsb2NrKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmJyLVx1MDAzZXBvcnRfbGlzdCk7XG4gXHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2YnItXHUwMDNlZmRiX2xpc3QpO1xuLVx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNmJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCk7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApXG4gXHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2YnItXHUwMDNlbXJwX2xpc3QpO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaW5wdXQuYyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xuaW5kZXggZDg3YTVmOWZhOTJiNy4uNzI4OTJlNWI0MDQzOSAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jXG5AQCAtMzE3LDIwICYjNDM7MzE3LDMzIEBAIHN0YXRpYyBpbnQgbmZfaG9va19icmlkZ2VfcHJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmICoqcHNrYilcbiBcdHJldHVybiBSWF9IQU5ETEVSX0NPTlNVTUVEO1xuIH1cbiBcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9DRk0pIHx8IElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApXG4mIzQzOy8qIENGTS9NUlAgYXJlIHVuY29tbW9uOyB0ZXN0IGJvdGggZW5hYmxlIGJpdHMgdG9nZXRoZXIgZmlyc3QuICovXG4mIzQzOyNkZWZpbmUgQlJfQ0ZNX01SUF9PUFRTIFxcXG4mIzQzO1x0KChJU19FTkFCTEVEKENPTkZJR19CUklER0VfQ0ZNKSA/IEJJVChCUk9QVF9DRk1fRU5BQkxFRCkgOiAwVUwpIHwgXFxcbiYjNDM7XHQgKElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApID8gQklUKEJST1BUX01SUF9FTkFCTEVEKSA6IDBVTCkpXG4mIzQzO1xuIC8qIFJldHVybiAwIGlmIHRoZSBmcmFtZSB3YXMgbm90IHByb2Nlc3NlZCBvdGhlcndpc2UgMVxuICAqIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9ja1xuICAqL1xuIHN0YXRpYyBpbnQgYnJfcHJvY2Vzc19mcmFtZV90eXBlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4gXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqdG1wO1xuLVxuLVx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHRtcCwgXHUwMDI2cC1cdTAwM2Vici1cdTAwM2VmcmFtZV90eXBlX2xpc3QsIGxpc3QpXG4tXHRcdGlmICh1bmxpa2VseSh0bXAtXHUwMDNldHlwZSA9PSBza2ItXHUwMDNlcHJvdG9jb2wpKVxuLVx0XHRcdHJldHVybiB0bXAtXHUwMDNlZnJhbWVfaGFuZGxlcihwLCBza2IpO1xuJiM0MztcdHN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHAtXHUwMDNlYnI7XG4gXG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfQ0ZNKVxuJiM0MztcdGlmIChza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfQ0ZNKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgYnJfb3B0X2dldChiciwgQlJPUFRfQ0ZNX0VOQUJMRUQpKVxuJiM0MztcdFx0cmV0dXJuIGJyX2NmbV9mcmFtZV9yeChwLCBza2IpO1xuJiM0MzsjZW5kaWZcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApXG4mIzQzO1x0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9NUlApIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9NUlBfRU5BQkxFRCkpXG4mIzQzO1x0XHRyZXR1cm4gYnJfbXJwX3Byb2Nlc3MocCwgc2tiKTtcbiYjNDM7I2VuZGlmXG4gXHRyZXR1cm4gMDtcbiB9XG4mIzQzOyNlbmRpZlxuIFxuIC8qXG4gICogUmV0dXJuIE5VTEwgaWYgc2tiIGlzIGhhbmRsZWRcbkBAIC00MjUsOCAmIzQzOzQzOCwxMSBAQCBzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBicl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAodW5saWtlbHkoYnJfcHJvY2Vzc19mcmFtZV90eXBlKHAsIHNrYikpKVxuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX0NGTSkgfHwgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX01SUClcbiYjNDM7XHRpZiAodW5saWtlbHkoKHAtXHUwMDNlYnItXHUwMDNlb3B0aW9ucyBcdTAwMjYgQlJfQ0ZNX01SUF9PUFRTKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAgYnJfcHJvY2Vzc19mcmFtZV90eXBlKHAsIHNrYikpKVxuIFx0XHRyZXR1cm4gUlhfSEFORExFUl9QQVNTO1xuJiM0MzsjZW5kaWZcbiBcbiBmb3J3YXJkOlxuIFx0aWYgKGJyX21zdF9pc19lbmFibGVkKHApKVxuQEAgLTQ2NywxOSAmIzQzOzQ4MywzIEBAIHJ4X2hhbmRsZXJfZnVuY190ICpicl9nZXRfcnhfaGFuZGxlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0cmV0dXJuIGJyX2hhbmRsZV9mcmFtZTtcbiB9XG4tXG4tdm9pZCBicl9hZGRfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQpXG4te1xuLVx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNmZ0LVx1MDAzZWxpc3QsIFx1MDAyNmJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCk7XG4tfVxuLVxuLXZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KVxuLXtcbi1cdHN0cnVjdCBicl9mcmFtZV90eXBlICp0bXA7XG4tXG4tXHRobGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsIFx1MDAyNmJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdClcbi1cdFx0aWYgKGZ0ID09IHRtcCkge1xuLVx0XHRcdGhsaXN0X2RlbF9yY3UoXHUwMDI2ZnQtXHUwMDNlbGlzdCk7XG4tXHRcdFx0cmV0dXJuO1xuLVx0XHR9XG4tfVxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXJwLmMgYi9uZXQvYnJpZGdlL2JyX21ycC5jXG5pbmRleCBlZjE2ZDA3MDM5MjQxLi5kY2U2ZWZhOTZjNGM2IDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9tcnAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9tcnAuY1xuQEAgLTYsMTMgJiM0Mzs2LDYgQEBcbiBzdGF0aWMgY29uc3QgdTggbXJwX3Rlc3RfZG1hY1tFVEhfQUxFTl0gPSB7IDB4MSwgMHgxNSwgMHg0ZSwgMHgwLCAweDAsIDB4MSB9O1xuIHN0YXRpYyBjb25zdCB1OCBtcnBfaW5fdGVzdF9kbWFjW0VUSF9BTEVOXSA9IHsgMHgxLCAweDE1LCAweDRlLCAweDAsIDB4MCwgMHgzIH07XG4gXG4tc3RhdGljIGludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi1cbi1zdGF0aWMgc3RydWN0IGJyX2ZyYW1lX3R5cGUgbXJwX2ZyYW1lX3R5cGUgX19yZWFkX21vc3RseSA9IHtcbi1cdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfTVJQKSxcbi1cdC5mcmFtZV9oYW5kbGVyID0gYnJfbXJwX3Byb2Nlc3MsXG4tfTtcbi1cbiBzdGF0aWMgYm9vbCBicl9tcnBfaXNfcmluZ19wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBfcG9ydCxcbiBcdFx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnNfcG9ydCxcbiBcdFx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG5AQCAtNDg2LDcgJiM0Mzs0NzksNyBAQCBzdGF0aWMgdm9pZCBicl9tcnBfZGVsX2ltcGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnApXG4gXHRrZnJlZV9yY3UobXJwLCByY3UpO1xuIFxuIFx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1ycF9saXN0KSlcbi1cdFx0YnJfZGVsX2ZyYW1lKGJyLCBcdTAwMjZtcnBfZnJhbWVfdHlwZSk7XG4mIzQzO1x0XHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NUlBfRU5BQkxFRCwgZmFsc2UpO1xuIH1cbiBcbiAvKiBBZGRzIGEgbmV3IE1SUCBpbnN0YW5jZS5cbkBAIC01MzYsNyAmIzQzOzUyOSw3IEBAIGludCBicl9tcnBfYWRkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycF9pbnN0YW5jZSAqaW5zdGFuY2UpXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIobXJwLVx1MDAzZXNfcG9ydCwgcCk7XG4gXG4gXHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2YnItXHUwMDNlbXJwX2xpc3QpKVxuLVx0XHRicl9hZGRfZnJhbWUoYnIsIFx1MDAyNm1ycF9mcmFtZV90eXBlKTtcbiYjNDM7XHRcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01SUF9FTkFCTEVELCB0cnVlKTtcbiBcbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm1ycC1cdTAwM2V0ZXN0X3dvcmssIGJyX21ycF90ZXN0X3dvcmtfZXhwaXJlZCk7XG4gXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZtcnAtXHUwMDNlaW5fdGVzdF93b3JrLCBicl9tcnBfaW5fdGVzdF93b3JrX2V4cGlyZWQpO1xuQEAgLTEyNDEsNyAmIzQzOzEyMzQsNyBAQCBzdGF0aWMgaW50IGJyX21ycF9yY3Yoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbiAgKiBub3JtYWwgZm9yd2FyZGluZy5cbiAgKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2tcbiAgKi9cbi1zdGF0aWMgaW50IGJyX21ycF9wcm9jZXNzKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO2ludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdC8qIElmIHRoZXJlIGlzIG5vIE1SUCBpbnN0YW5jZSBkbyBub3JtYWwgZm9yd2FyZGluZyAqL1xuIFx0aWYgKGxpa2VseSghdGVzdF9iaXQoQlJfTVJQX0FXQVJFX0JJVCwgXHUwMDI2cC1cdTAwM2VmbGFncykpKVxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcbmluZGV4IGQzMzdiMWNmYjk4MGQuLmFmZTdjMGI0ZjhmYTcgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcbkBAIC00OTUsMTIgJiM0Mzs0OTUsMTMgQEAgZW51bSBuZXRfYnJpZGdlX29wdHMge1xuIFx0QlJPUFRfTVNUX0VOQUJMRUQsXG4gXHRCUk9QVF9NREJfT0ZGTE9BRF9GQUlMX05PVElGSUNBVElPTixcbiBcdEJST1BUX0ZEQl9MT0NBTF9WTEFOXzAsXG4mIzQzO1x0QlJPUFRfQ0ZNX0VOQUJMRUQsXG4mIzQzO1x0QlJPUFRfTVJQX0VOQUJMRUQsXG4gfTtcbiBcbiBzdHJ1Y3QgbmV0X2JyaWRnZSB7XG4gXHRzcGlubG9ja190XHRcdFx0bG9jaztcbiBcdHNwaW5sb2NrX3RcdFx0XHRoYXNoX2xvY2s7XG4tXHRzdHJ1Y3QgaGxpc3RfaGVhZFx0XHRmcmFtZV90eXBlX2xpc3Q7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZVx0XHQqZGV2O1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdG9wdGlvbnM7XG4gXHQvKiBUaGVzZSBmaWVsZHMgYXJlIGFjY2Vzc2VkIG9uIGVhY2ggcGFja2V0ICovXG5AQCAtOTMyLDE2ICYjNDM7OTMzLDYgQEAgaW50IG5icF9iYWNrdXBfY2hhbmdlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBuZXRfZGV2aWNlICpiYWNrdXBfZGV2KTtcbiBpbnQgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gcnhfaGFuZGxlcl9mdW5jX3QgKmJyX2dldF9yeF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIFxuLXN0cnVjdCBicl9mcmFtZV90eXBlIHtcbi1cdF9fYmUxNlx0XHRcdHR5cGU7XG4tXHRpbnRcdFx0XHQoKmZyYW1lX2hhbmRsZXIpKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXG4tXHRcdFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpO1xuLVx0c3RydWN0IGhsaXN0X25vZGVcdGxpc3Q7XG4tfTtcbi1cbi12b2lkIGJyX2FkZF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdCk7XG4tdm9pZCBicl9kZWxfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQpO1xuLVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBicl9yeF9oYW5kbGVyX2NoZWNrX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHJldHVybiByY3VfZGVyZWZlcmVuY2UoZGV2LVx1MDAzZXJ4X2hhbmRsZXIpID09IGJyX2dldF9yeF9oYW5kbGVyKGRldik7XG5AQCAtMjA4MCw2ICYjNDM7MjA3MSw3IEBAIGludCBicl9tcnBfcGFyc2Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuIGJvb2wgYnJfbXJwX2VuYWJsZWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcbiB2b2lkIGJyX21ycF9wb3J0X2RlbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApO1xuIGludCBicl9tcnBfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG4mIzQzO2ludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGJyX21ycF9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKmF0dHIsIGludCBjbWQsXG5AQCAtMjExMSw2ICYjNDM7MjEwMyw3IEBAIGludCBicl9jZm1fcGFyc2Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuIFx0XHQgc3RydWN0IG5sYXR0ciAqYXR0ciwgaW50IGNtZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiBib29sIGJyX2NmbV9jcmVhdGVkKHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG4gdm9pZCBicl9jZm1fcG9ydF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKTtcbiYjNDM7aW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBpbnQgYnJfY2ZtX2NvbmZpZ19maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcbiBpbnQgYnJfY2ZtX3N0YXR1c19maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgICAgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfQ0ZNJiMzNDssCiAgICAmIzM0O0JSSURHRV9NUlAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticl9jZm1fZnJhbWVfcngmIzM0OywKICAgICYjMzQ7YnJfbXJwX3Byb2Nlc3MmIzM0OywKICAgICYjMzQ7YnJfY2ZtX21lcF9jcmVhdGUmIzM0OywKICAgICYjMzQ7YnJfY2ZtX21lcF9kZWxldGUmIzM0OywKICAgICYjMzQ7YnJfbXJwX2FkZCYjMzQ7LAogICAgJiMzNDticl9tcnBfZGVsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYnJpZGdlIGZyYW1lIGhhbmRsaW5nIGxvZ2ljIGZvciBDRk0gKDgwMi4xUSBDRk0pIGFuZCBNUlAgcHJvdG9jb2xzIGJ5IHJlcGxhY2luZyB0aGUgZHluYW1pYyBmcmFtZV90eXBlX2xpc3Qgd2l0aCBicmlkZ2Ugb3B0aW9uIGZsYWdzIChCUk9QVF9DRk1fRU5BQkxFRCBhbmQgQlJPUFRfTVJQX0VOQUJMRUQpIGFuZCBkaXJlY3QgY2FsbHMgdG8gYnJfY2ZtX2ZyYW1lX3J4IGFuZCBicl9tcnBfcHJvY2Vzcy4gSXQgbW9kaWZpZXMgYm90aCB0aGUgZnJhbWUgcmVjZWl2ZSBwYXRoIGFuZCB0aGUgbmV0bGluay10cmlnZ2VyZWQgaW5zdGFuY2UgY3JlYXRpb24vZGVsZXRpb24gcGF0aHMuIFRoaXMgYWZmZWN0cyBjb3JlIGJyaWRnZSBuZXR3b3JraW5nIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbCBlbnZpcm9ubWVudHMgd2l0aG91dCBzcGVjaWFsaXplZCBoYXJkd2FyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYyODJhNjE4MjlhNmJlN2Y1MWNhOWVhNzZkMGM2ODczMWNlMmQzN2IKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxMjoxNzoyMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfY2ZtLmMgYi9uZXQvYnJpZGdlL2JyX2NmbS5jCmluZGV4IGRlYTU2ZmZmYTFjMTkuLjlkY2M5N2Q2M2E2ZmMgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfY2ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9jZm0uYwpAQCAtMzY3LDcgJiM0MzszNjcsNyBAQCBzdGF0aWMgdTMyIGNjbV90bHZfZXh0cmFjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5kZXgsCiB9CiAKIC8qIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayAqLwotc3RhdGljIGludCBicl9jZm1fZnJhbWVfcngoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztpbnQgYnJfY2ZtX2ZyYW1lX3J4KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJdTMyIG1kbGV2ZWwsIGludGVydmFsLCBzaXplLCBpbmRleCwgbWF4OwogCWNvbnN0IHN0cnVjdCBicl9jZm1fY29tbW9uX2hkciAqaGRyOwpAQCAtNDg5LDExICYjNDM7NDg5LDYgQEAgc3RhdGljIGludCBicl9jZm1fZnJhbWVfcngoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHN0cnVjdCBicl9mcmFtZV90eXBlIGNmbV9mcmFtZV90eXBlIF9fcmVhZF9tb3N0bHkgPSB7Ci0JLnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9DRk0pLAotCS5mcmFtZV9oYW5kbGVyID0gYnJfY2ZtX2ZyYW1lX3J4LAotfTsKLQogaW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKIAkJICAgICAgY29uc3QgdTMyIGluc3RhbmNlLAogCQkgICAgICBzdHJ1Y3QgYnJfY2ZtX21lcF9jcmVhdGUgKmNvbnN0IGNyZWF0ZSwKQEAgLTU1OSw3ICYjNDM7NTU0LDcgQEAgaW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKIAlJTklUX0RFTEFZRURfV09SSygmYW1wO21lcC0mZ3Q7Y2NtX3R4X2R3b3JrLCBjY21fdHhfd29ya19leHBpcmVkKTsKIAogCWlmIChobGlzdF9lbXB0eSgmYW1wO2JyLSZndDttZXBfbGlzdCkpCi0JCWJyX2FkZF9mcmFtZShiciwgJmFtcDtjZm1fZnJhbWVfdHlwZSk7CiYjNDM7CQlicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9DRk1fRU5BQkxFRCwgdHJ1ZSk7CiAKIAlobGlzdF9hZGRfdGFpbF9yY3UoJmFtcDttZXAtJmd0O2hlYWQsICZhbXA7YnItJmd0O21lcF9saXN0KTsKIApAQCAtNTg4LDcgJiM0Mzs1ODMsNyBAQCBzdGF0aWMgdm9pZCBtZXBfZGVsZXRlX2ltcGxlbWVudGF0aW9uKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKIAlrZnJlZV9yY3UobWVwLCByY3UpOwogCiAJaWYgKGhsaXN0X2VtcHR5KCZhbXA7YnItJmd0O21lcF9saXN0KSkKLQkJYnJfZGVsX2ZyYW1lKGJyLCAmYW1wO2NmbV9mcmFtZV90eXBlKTsKJiM0MzsJCWJyX29wdF90b2dnbGUoYnIsIEJST1BUX0NGTV9FTkFCTEVELCBmYWxzZSk7CiB9CiAKIGludCBicl9jZm1fbWVwX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuYwppbmRleCBmZjU1ZGFiNzM2MzI2Li5lMDFjNDRhOTBkODRiIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMKQEAgLTUwMyw3ICYjNDM7NTAzLDYgQEAgdm9pZCBicl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2JyLSZndDtsb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2JyLSZndDtwb3J0X2xpc3QpOwogCUlOSVRfSExJU1RfSEVBRCgmYW1wO2JyLSZndDtmZGJfbGlzdCk7Ci0JSU5JVF9ITElTVF9IRUFEKCZhbXA7YnItJmd0O2ZyYW1lX3R5cGVfbGlzdCk7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX01SUCkKIAlJTklUX0hMSVNUX0hFQUQoJmFtcDtici0mZ3Q7bXJwX2xpc3QpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKaW5kZXggZDg3YTVmOWZhOTJiNy4uNzI4OTJlNWI0MDQzOSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwpAQCAtMzE3LDIwICYjNDM7MzE3LDMzIEBAIHN0YXRpYyBpbnQgbmZfaG9va19icmlkZ2VfcHJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmICoqcHNrYikKIAlyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDsKIH0KIAomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfQ0ZNKSB8fCBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTVJQKQomIzQzOy8qIENGTS9NUlAgYXJlIHVuY29tbW9uOyB0ZXN0IGJvdGggZW5hYmxlIGJpdHMgdG9nZXRoZXIgZmlyc3QuICovCiYjNDM7I2RlZmluZSBCUl9DRk1fTVJQX09QVFMgXAomIzQzOwkoKElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9DRk0pID8gQklUKEJST1BUX0NGTV9FTkFCTEVEKSA6IDBVTCkgfCBcCiYjNDM7CSAoSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX01SUCkgPyBCSVQoQlJPUFRfTVJQX0VOQUJMRUQpIDogMFVMKSkKJiM0MzsKIC8qIFJldHVybiAwIGlmIHRoZSBmcmFtZSB3YXMgbm90IHByb2Nlc3NlZCBvdGhlcndpc2UgMQogICogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrCiAgKi8KIHN0YXRpYyBpbnQgYnJfcHJvY2Vzc19mcmFtZV90eXBlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCiAJCQkJIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGJyX2ZyYW1lX3R5cGUgKnRtcDsKLQotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0bXAsICZhbXA7cC0mZ3Q7YnItJmd0O2ZyYW1lX3R5cGVfbGlzdCwgbGlzdCkKLQkJaWYgKHVubGlrZWx5KHRtcC0mZ3Q7dHlwZSA9PSBza2ItJmd0O3Byb3RvY29sKSkKLQkJCXJldHVybiB0bXAtJmd0O2ZyYW1lX2hhbmRsZXIocCwgc2tiKTsKJiM0MzsJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gcC0mZ3Q7YnI7CiAKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX0NGTSkKJiM0MzsJaWYgKHNrYi0mZ3Q7cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfQ0ZNKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9DRk1fRU5BQkxFRCkpCiYjNDM7CQlyZXR1cm4gYnJfY2ZtX2ZyYW1lX3J4KHAsIHNrYik7CiYjNDM7I2VuZGlmCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApCiYjNDM7CWlmIChza2ItJmd0O3Byb3RvY29sID09IGh0b25zKEVUSF9QX01SUCkgJmFtcDsmYW1wOwomIzQzOwkgICAgYnJfb3B0X2dldChiciwgQlJPUFRfTVJQX0VOQUJMRUQpKQomIzQzOwkJcmV0dXJuIGJyX21ycF9wcm9jZXNzKHAsIHNrYik7CiYjNDM7I2VuZGlmCiAJcmV0dXJuIDA7CiB9CiYjNDM7I2VuZGlmCiAKIC8qCiAgKiBSZXR1cm4gTlVMTCBpZiBza2IgaXMgaGFuZGxlZApAQCAtNDI1LDggJiM0Mzs0MzgsMTEgQEAgc3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgYnJfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYikKIAkJfQogCX0KIAotCWlmICh1bmxpa2VseShicl9wcm9jZXNzX2ZyYW1lX3R5cGUocCwgc2tiKSkpCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9DRk0pIHx8IElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApCiYjNDM7CWlmICh1bmxpa2VseSgocC0mZ3Q7YnItJmd0O29wdGlvbnMgJmFtcDsgQlJfQ0ZNX01SUF9PUFRTKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShwLCBza2IpKSkKIAkJcmV0dXJuIFJYX0hBTkRMRVJfUEFTUzsKJiM0MzsjZW5kaWYKIAogZm9yd2FyZDoKIAlpZiAoYnJfbXN0X2lzX2VuYWJsZWQocCkpCkBAIC00NjcsMTkgJiM0Mzs0ODMsMyBAQCByeF9oYW5kbGVyX2Z1bmNfdCAqYnJfZ2V0X3J4X2hhbmRsZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogCXJldHVybiBicl9oYW5kbGVfZnJhbWU7CiB9Ci0KLXZvaWQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KQotewotCWhsaXN0X2FkZF9oZWFkX3JjdSgmYW1wO2Z0LSZndDtsaXN0LCAmYW1wO2JyLSZndDtmcmFtZV90eXBlX2xpc3QpOwotfQotCi12b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdCkKLXsKLQlzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqdG1wOwotCi0JaGxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAmYW1wO2JyLSZndDtmcmFtZV90eXBlX2xpc3QsIGxpc3QpCi0JCWlmIChmdCA9PSB0bXApIHsKLQkJCWhsaXN0X2RlbF9yY3UoJmFtcDtmdC0mZ3Q7bGlzdCk7Ci0JCQlyZXR1cm47Ci0JCX0KLX0KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXJwLmMgYi9uZXQvYnJpZGdlL2JyX21ycC5jCmluZGV4IGVmMTZkMDcwMzkyNDEuLmRjZTZlZmE5NmM0YzYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbXJwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9tcnAuYwpAQCAtNiwxMyAmIzQzOzYsNiBAQAogc3RhdGljIGNvbnN0IHU4IG1ycF90ZXN0X2RtYWNbRVRIX0FMRU5dID0geyAweDEsIDB4MTUsIDB4NGUsIDB4MCwgMHgwLCAweDEgfTsKIHN0YXRpYyBjb25zdCB1OCBtcnBfaW5fdGVzdF9kbWFjW0VUSF9BTEVOXSA9IHsgMHgxLCAweDE1LCAweDRlLCAweDAsIDB4MCwgMHgzIH07CiAKLXN0YXRpYyBpbnQgYnJfbXJwX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0KLXN0YXRpYyBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSBtcnBfZnJhbWVfdHlwZSBfX3JlYWRfbW9zdGx5ID0gewotCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfTVJQKSwKLQkuZnJhbWVfaGFuZGxlciA9IGJyX21ycF9wcm9jZXNzLAotfTsKLQogc3RhdGljIGJvb2wgYnJfbXJwX2lzX3JpbmdfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwX3BvcnQsCiAJCQkJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqc19wb3J0LAogCQkJCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpCkBAIC00ODYsNyAmIzQzOzQ3OSw3IEBAIHN0YXRpYyB2b2lkIGJyX21ycF9kZWxfaW1wbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnAgKm1ycCkKIAlrZnJlZV9yY3UobXJwLCByY3UpOwogCiAJaWYgKGhsaXN0X2VtcHR5KCZhbXA7YnItJmd0O21ycF9saXN0KSkKLQkJYnJfZGVsX2ZyYW1lKGJyLCAmYW1wO21ycF9mcmFtZV90eXBlKTsKJiM0MzsJCWJyX29wdF90b2dnbGUoYnIsIEJST1BUX01SUF9FTkFCTEVELCBmYWxzZSk7CiB9CiAKIC8qIEFkZHMgYSBuZXcgTVJQIGluc3RhbmNlLgpAQCAtNTM2LDcgJiM0Mzs1MjksNyBAQCBpbnQgYnJfbXJwX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnBfaW5zdGFuY2UgKmluc3RhbmNlKQogCXJjdV9hc3NpZ25fcG9pbnRlcihtcnAtJmd0O3NfcG9ydCwgcCk7CiAKIAlpZiAoaGxpc3RfZW1wdHkoJmFtcDtici0mZ3Q7bXJwX2xpc3QpKQotCQlicl9hZGRfZnJhbWUoYnIsICZhbXA7bXJwX2ZyYW1lX3R5cGUpOwomIzQzOwkJYnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTVJQX0VOQUJMRUQsIHRydWUpOwogCiAJSU5JVF9ERUxBWUVEX1dPUksoJmFtcDttcnAtJmd0O3Rlc3Rfd29yaywgYnJfbXJwX3Rlc3Rfd29ya19leHBpcmVkKTsKIAlJTklUX0RFTEFZRURfV09SSygmYW1wO21ycC0mZ3Q7aW5fdGVzdF93b3JrLCBicl9tcnBfaW5fdGVzdF93b3JrX2V4cGlyZWQpOwpAQCAtMTI0MSw3ICYjNDM7MTIzNCw3IEBAIHN0YXRpYyBpbnQgYnJfbXJwX3JjdihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAogICogbm9ybWFsIGZvcndhcmRpbmcuCiAgKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sKICAqLwotc3RhdGljIGludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO2ludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCS8qIElmIHRoZXJlIGlzIG5vIE1SUCBpbnN0YW5jZSBkbyBub3JtYWwgZm9yd2FyZGluZyAqLwogCWlmIChsaWtlbHkoIXRlc3RfYml0KEJSX01SUF9BV0FSRV9CSVQsICZhbXA7cC0mZ3Q7ZmxhZ3MpKSkKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKaW5kZXggZDMzN2IxY2ZiOTgwZC4uYWZlN2MwYjRmOGZhNyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKQEAgLTQ5NSwxMiAmIzQzOzQ5NSwxMyBAQCBlbnVtIG5ldF9icmlkZ2Vfb3B0cyB7CiAJQlJPUFRfTVNUX0VOQUJMRUQsCiAJQlJPUFRfTURCX09GRkxPQURfRkFJTF9OT1RJRklDQVRJT04sCiAJQlJPUFRfRkRCX0xPQ0FMX1ZMQU5fMCwKJiM0MzsJQlJPUFRfQ0ZNX0VOQUJMRUQsCiYjNDM7CUJST1BUX01SUF9FTkFCTEVELAogfTsKIAogc3RydWN0IG5ldF9icmlkZ2UgewogCXNwaW5sb2NrX3QJCQlsb2NrOwogCXNwaW5sb2NrX3QJCQloYXNoX2xvY2s7Ci0Jc3RydWN0IGhsaXN0X2hlYWQJCWZyYW1lX3R5cGVfbGlzdDsKIAlzdHJ1Y3QgbmV0X2RldmljZQkJKmRldjsKIAl1bnNpZ25lZCBsb25nCQkJb3B0aW9uczsKIAkvKiBUaGVzZSBmaWVsZHMgYXJlIGFjY2Vzc2VkIG9uIGVhY2ggcGFja2V0ICovCkBAIC05MzIsMTYgJiM0Mzs5MzMsNiBAQCBpbnQgbmJwX2JhY2t1cF9jaGFuZ2Uoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IG5ldF9kZXZpY2UgKmJhY2t1cF9kZXYpOwogaW50IGJyX2hhbmRsZV9mcmFtZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwogcnhfaGFuZGxlcl9mdW5jX3QgKmJyX2dldF9yeF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCi1zdHJ1Y3QgYnJfZnJhbWVfdHlwZSB7Ci0JX19iZTE2CQkJdHlwZTsKLQlpbnQJCQkoKmZyYW1lX2hhbmRsZXIpKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsCi0JCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0Jc3RydWN0IGhsaXN0X25vZGUJbGlzdDsKLX07Ci0KLXZvaWQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KTsKLXZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KTsKLQogc3RhdGljIGlubGluZSBib29sIGJyX3J4X2hhbmRsZXJfY2hlY2tfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZShkZXYtJmd0O3J4X2hhbmRsZXIpID09IGJyX2dldF9yeF9oYW5kbGVyKGRldik7CkBAIC0yMDgwLDYgJiM0MzsyMDcxLDcgQEAgaW50IGJyX21ycF9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCiBib29sIGJyX21ycF9lbmFibGVkKHN0cnVjdCBuZXRfYnJpZGdlICpicik7CiB2b2lkIGJyX21ycF9wb3J0X2RlbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApOwogaW50IGJyX21ycF9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyKTsKJiM0MztpbnQgYnJfbXJwX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgYnJfbXJwX3BhcnNlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwKIAkJCSAgICAgICBzdHJ1Y3QgbmxhdHRyICphdHRyLCBpbnQgY21kLApAQCAtMjExMSw2ICYjNDM7MjEwMyw3IEBAIGludCBicl9jZm1fcGFyc2Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAogCQkgc3RydWN0IG5sYXR0ciAqYXR0ciwgaW50IGNtZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIGJvb2wgYnJfY2ZtX2NyZWF0ZWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTsKIHZvaWQgYnJfY2ZtX3BvcnRfZGVsKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCk7CiYjNDM7aW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGludCBicl9jZm1fY29uZmlnX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpOwogaW50IGJyX2NmbV9zdGF0dXNfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgc3RydWN0IG5ldF9icmlkZ2UgKmJyLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDE2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnJpZGdlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggZm9yIGZ1enppbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSB0byB0aGUgYnJpZGdlIGNvZGUgaW4gdGhlIGtlcm5lbCBpcyBldmVuIHdvcnRoIHRoZSBlZmZvcnQuIFdlIG5lZWQgdG8gYXNzZXNzIHRoZSBhdHRhY2sgc3VyZmFjZSBhbmQgcG90ZW50aWFsIGZvciBpbnRlcmVzdGluZyBidWdzLiBJIGNhbiBzZWUgdGhlIHBhdGNoIHRvdWNoZXMgYSBmZXcgZmlsZXMgd2l0aGluIGBuZXQvYnJpZGdlYDogYGJyX2NmbS5jYCwgYGJyX2RldmljZS5jYCwgYGJyX2lucHV0LmNgLCBgYnJfbXJwLmNgLCBhbmQgYGJyX3ByaXZhdGUuaGAuCgpOb3csIGxldCYjMzk7cyB1bmRlcnN0YW5kIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgb3B0aW1pemluZyB0aGUgZnJhbWUgaGFuZGxpbmcuIEluc3RlYWQgb2YgaXRlcmF0aW5nIHRocm91Z2ggYSBsaW5rZWQgbGlzdCBvZiBgc3RydWN0IGJyX2ZyYW1lX3R5cGVgIG9iamVjdHMgd2hlbiBwcm9jZXNzaW5nIGZyYW1lcyBpbiB0aGUgZmFzdCByeCBwYXRoIChgYnJfaGFuZGxlX2ZyYW1lKClgIC0mZ3Q7IGBicl9wcm9jZXNzX2ZyYW1lX3R5cGUoKWApLCB0aGV5JiMzOTtyZSBkaXRjaGluZyB0aGUgZHluYW1pYyBsaXN0IGxvb2t1cC4gVGhleSYjMzk7dmUgcmVwbGFjZWQgaXQgd2l0aCBkaXJlY3QgY2hlY2tzIG9mIGJyaWRnZSBvcHRpb24gZmxhZ3MgKGBCUk9QVF9DRk1fRU5BQkxFRGAgYW5kIGBCUk9QVF9NUlBfRU5BQkxFRGApIHdpdGhpbiBgYnJfcHJvY2Vzc19mcmFtZV90eXBlKClgLiBGdXJ0aGVybW9yZSwgaXQgc2VlbXMgdGhleSYjMzk7dmUgcmVtb3ZlZCBgYnJfYWRkX2ZyYW1lYCBhbmQgYGJyX2RlbF9mcmFtZWAsIHRoZSBgZnJhbWVfdHlwZV9saXN0YCBmcm9tIHRoZSBgc3RydWN0IG5ldF9icmlkZ2VgLCBhbmQgbm93IGNhbGwgYGJyX2NmbV9mcmFtZV9yeGAgYW5kIGBicl9tcnBfcHJvY2Vzc2AgZGlyZWN0bHkgaWYgdGhlIHJlc3BlY3RpdmUgZmxhZ3MgYXJlIGVuYWJsZWQuIFRoaXMgbG9va3MgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLCB3ZSBub3cgaGF2ZSBjb250cm9sIGZsb3cgYmFzZWQgb24gYnJpZGdlIGZsYWdzLgoKVGhpcyBmbGFnLWJhc2VkIGFwcHJvYWNoIGlzIHBvdGVudGlhbGx5IG1vcmUgZWZmaWNpZW50IGJ1dCBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlIHZ1bG5lcmFiaWxpdGllcyBpZiBub3QgaGFuZGxlZCBjYXJlZnVsbHkuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHBvdGVudGlhbCBmb3IgZmxhZyByYWNlcyBhbmQgb2ZmLWJ5LW9uZSBlcnJvcnMgaW4gdGhlaXIgaW1wbGVtZW50YXRpb24uCgpOZXh0IHVwLCBJIHNob3VsZCB2ZXJpZnkgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGluIGBuZXQvYnJpZGdlL0tjb25maWdgLiBXZSBtdXN0IHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGVudmlyb25tZW50IHRvIGVuc3VyZSB0aGF0IHRoaXMgcGF0Y2ggaXMgZXZlbiBlbmFibGVkIGluIHRoZSBjb25maWd1cmF0aW9ucyB3ZSYjMzk7cmUgdGFyZ2V0aW5nIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUklER0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnLTUtXG5uZXQvYnJpZGdlL0tjb25maWc6Njpjb25maWcgQlJJREdFXG5uZXQvYnJpZGdlL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0OzgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1wmIzM0O1xuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy0zNS1cbm5ldC9icmlkZ2UvS2NvbmZpZzozNjpjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNy1cdGJvb2wgXCYjMzQ7SUdNUC9NTEQgc25vb3BpbmdcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNDktXG5uZXQvYnJpZGdlL0tjb25maWc6NTA6Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xubmV0L2JyaWRnZS9LY29uZmlnLTUxLVx0Ym9vbCBcJiMzNDtWTEFOIGZpbHRlcmluZ1wmIzM0O1xuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy02My1cbm5ldC9icmlkZ2UvS2NvbmZpZzo2NDpjb25maWcgQlJJREdFX01SUFxubmV0L2JyaWRnZS9LY29uZmlnLTY1LVx0Ym9vbCBcJiMzNDtNUlAgcHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNzUtXG5uZXQvYnJpZGdlL0tjb25maWc6NzY6Y29uZmlnIEJSSURHRV9DRk1cbm5ldC9icmlkZ2UvS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7Q0ZNIHByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQwMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBuZXQvYnJpZGdlL0tjb25maWdgIHRob3VnaHQgcHJvY2VzcywgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRlbHZpbmcgaW50byB0aGUgQnJpZGdlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGNvcmUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIExpbnV4IGJyaWRnaW5nIGNvZGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBhbmQgaG93IHRoZXkmIzM5O3JlIHN0cnVjdHVyZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgZmlyc3QgOTAgbGluZXMgb2YgYG5ldC9icmlkZ2UvS2NvbmZpZ2AuIFRoaXMgc2hvdWxkIGNvdmVyIHRoZSBiYXNpYyBmZWF0dXJlcywgZGVwZW5kZW5jaWVzLCBhbmQgcGVyaGFwcyBzb21lIGRlZmF1bHQgYmVoYXZpb3IgZGVjbGFyYXRpb25zLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIHNldCB0aGUgc3RhZ2UgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG1vcmUgbnVhbmNlZCBhc3BlY3RzIGZ1cnRoZXIgZG93biB0aGUgZmlsZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyAtIHRoZSBjb3JlIGVuYWJsZS9kaXNhYmxlIHN3aXRjaGVzIGZvciB0aGUgYnJpZGdlIGl0c2VsZiwgbWF5YmUgc29tZSBlc3NlbnRpYWwgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGZlYXR1cmVzIChpZiBwcmVzZW50KSwgYW5kIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMuIEkgYWxzbyB3YW50IHRvIGlkZW50aWZ5IGFueSBkZWZhdWx0IHNldHRpbmdzIHRoYXQgbWlnaHQgc2lnbmlmaWNhbnRseSBpbmZsdWVuY2UgaG93IGEgYnJpZGdlIG9wZXJhdGVzIG91dC1vZi10aGUtYm94LiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZSBtb2R1bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyA4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIEJSSURHRVxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7ODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nXCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgTExDXG4gICA5Olx0XHRzZWxlY3QgU1RQXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgTGludXggYm94IHdpbGwgYmUgYWJsZSB0byBhY3QgYXMgYW5cbiAgMTI6XHRcdCAgRXRoZXJuZXQgYnJpZGdlLCB3aGljaCBtZWFucyB0aGF0IHRoZSBkaWZmZXJlbnQgRXRoZXJuZXQgc2VnbWVudHMgaXRcbiAgMTM6XHRcdCAgaXMgY29ubmVjdGVkIHRvIHdpbGwgYXBwZWFyIGFzIG9uZSBFdGhlcm5ldCB0byB0aGUgcGFydGljaXBhbnRzLlxuICAxNDpcdFx0ICBTZXZlcmFsIHN1Y2ggYnJpZGdlcyBjYW4gd29yayB0b2dldGhlciB0byBjcmVhdGUgZXZlbiBsYXJnZXJcbiAgMTU6XHRcdCAgbmV0d29ya3Mgb2YgRXRoZXJuZXRzIHVzaW5nIHRoZSBJRUVFIDgwMi4xIHNwYW5uaW5nIHRyZWUgYWxnb3JpdGhtLlxuICAxNjpcdFx0ICBBcyB0aGlzIGlzIGEgc3RhbmRhcmQsIExpbnV4IGJyaWRnZXMgd2lsbCBjb29wZXJhdGUgcHJvcGVybHkgd2l0aFxuICAxNzpcdFx0ICBvdGhlciB0aGlyZCBwYXJ0eSBicmlkZ2UgcHJvZHVjdHMuXG4gIDE4Olx0XG4gIDE5Olx0XHQgIEluIG9yZGVyIHRvIHVzZSB0aGUgRXRoZXJuZXQgYnJpZGdlLCB5b3UmIzM5O2xsIG5lZWQgdGhlIGJyaWRnZVxuICAyMDpcdFx0ICBjb25maWd1cmF0aW9uIHRvb2xzOyBzZWUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnJzdFx1MDAzZVxuICAyMTpcdFx0ICBmb3IgbG9jYXRpb24uIFBsZWFzZSByZWFkIHRoZSBCcmlkZ2UgbWluaS1IT1dUTyBmb3IgbW9yZVxuICAyMjpcdFx0ICBpbmZvcm1hdGlvbi5cbiAgMjM6XHRcbiAgMjQ6XHRcdCAgSWYgeW91IGVuYWJsZSBpcHRhYmxlcyBzdXBwb3J0IGFsb25nIHdpdGggdGhlIGJyaWRnZSBzdXBwb3J0IHRoZW4geW91XG4gIDI1Olx0XHQgIHR1cm4geW91ciBicmlkZ2UgaW50byBhIGJyaWRnaW5nIElQIGZpcmV3YWxsLlxuICAyNjpcdFx0ICBpcHRhYmxlcyB3aWxsIHRoZW4gc2VlIHRoZSBJUCBwYWNrZXRzIGJlaW5nIGJyaWRnZWQsIHNvIHlvdSBuZWVkIHRvXG4gIDI3Olx0XHQgIHRha2UgdGhpcyBpbnRvIGFjY291bnQgd2hlbiBzZXR0aW5nIHVwIHlvdXIgZmlyZXdhbGwgcnVsZXMuXG4gIDI4Olx0XHQgIEVuYWJsaW5nIGFycHRhYmxlcyBzdXBwb3J0IHdoZW4gYnJpZGdpbmcgd2lsbCBsZXQgYXJwdGFibGVzIHNlZVxuICAyOTpcdFx0ICBicmlkZ2VkIEFSUCB0cmFmZmljIGluIHRoZSBhcnB0YWJsZXMgRk9SV0FSRCBjaGFpbi5cbiAgMzA6XHRcbiAgMzE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgMzI6XHRcdCAgd2lsbCBiZSBjYWxsZWQgYnJpZGdlLlxuICAzMzpcdFxuICAzNDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzNTpcdFxuICAzNjpcdGNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1xuICAzNzpcdFx0Ym9vbCBcJiMzNDtJR01QL01MRCBzbm9vcGluZ1wmIzM0O1xuICAzODpcdFx0ZGVwZW5kcyBvbiBCUklER0VcbiAgMzk6XHRcdGRlcGVuZHMgb24gSU5FVFxuICA0MDpcdFx0ZGVmYXVsdCB5XG4gIDQxOlx0XHRoZWxwXG4gIDQyOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHNlbGVjdGl2ZWx5XG4gIDQzOlx0XHQgIGZvcndhcmQgbXVsdGljYXN0IHRyYWZmaWMgYmFzZWQgb24gSUdNUC9NTEQgdHJhZmZpYyByZWNlaXZlZCBmcm9tXG4gIDQ0Olx0XHQgIGVhY2ggcG9ydC5cbiAgNDU6XHRcbiAgNDY6XHRcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXG4gIDQ3Olx0XG4gIDQ4Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDQ5Olx0XG4gIDUwOlx0Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xuICA1MTpcdFx0Ym9vbCBcJiMzNDtWTEFOIGZpbHRlcmluZ1wmIzM0O1xuICA1MjpcdFx0ZGVwZW5kcyBvbiBCUklER0VcbiAgNTM6XHRcdGRlcGVuZHMgb24gVkxBTl84MDIxUVxuICA1NDpcdFx0ZGVmYXVsdCBuXG4gIDU1Olx0XHRoZWxwXG4gIDU2Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHNlbGVjdGl2ZWx5XG4gIDU3Olx0XHQgIHJlY2VpdmUgYW5kIGZvcndhcmQgdHJhZmZpYyBiYXNlZCBvbiBWTEFOIGluZm9ybWF0aW9uIGluIHRoZSBwYWNrZXRcbiAgNTg6XHRcdCAgYW55IFZMQU4gaW5mb3JtYXRpb24gY29uZmlndXJlZCBvbiB0aGUgYnJpZGdlIHBvcnQgb3IgYnJpZGdlIGRldmljZS5cbiAgNTk6XHRcbiAgNjA6XHRcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXG4gIDYxOlx0XG4gIDYyOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDYzOlx0XG4gIDY0Olx0Y29uZmlnIEJSSURHRV9NUlBcbiAgNjU6XHRcdGJvb2wgXCYjMzQ7TVJQIHByb3RvY29sXCYjMzQ7XG4gIDY2Olx0XHRkZXBlbmRzIG9uIEJSSURHRVxuICA2NzpcdFx0ZGVmYXVsdCBuXG4gIDY4Olx0XHRoZWxwXG4gIDY5Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHRvIHJ1biBNUlBcbiAgNzA6XHRcdCAgcHJvdG9jb2wgdG8gZGV0ZWN0IGxvb3BzXG4gIDcxOlx0XG4gIDcyOlx0XHQgIFNheSBOIHRvIGV4Y2x1ZGUgdGhpcyBzdXBwb3J0IGFuZCByZWR1Y2UgdGhlIGJpbmFyeSBzaXplLlxuICA3MzpcdFxuICA3NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA3NTpcdFxuICA3NjpcdGNvbmZpZyBCUklER0VfQ0ZNXG4gIDc3Olx0XHRib29sIFwmIzM0O0NGTSBwcm90b2NvbFwmIzM0O1xuICA3ODpcdFx0ZGVwZW5kcyBvbiBCUklER0VcbiAgNzk6XHRcdGhlbHBcbiAgODA6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgdG8gcnVuIENGTVxuICA4MTpcdFx0ICBwcm90b2NvbCBhY2NvcmRpbmcgdG8gODAyLjFRIHNlY3Rpb24gMTIuMTRcbiAgODI6XHRcbiAgODM6XHRcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXG4gIDg0Olx0XG4gIDg1Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc3MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDU3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbml0aWFsIEFzc2Vzc21lbnQgb2YgQnJpZGdlIENvZGUgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSB0aGUgYnJpZGdlIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgaW50ZWdyYXRpb24gb2YgQlJJREdFXF9NUlAgYW5kIEJSSURHRVxfQ0ZNLCB0byBzZWUgaWYgd2UgY2FuIHRyaWdnZXIgc29tZXRoaW5nIGludGVyZXN0aW5nLiBJIHdhbnQgdG8gY2hlY2sgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBjb21waWxlZCBpbiwgd2hpY2ggYm9pbHMgZG93biB0byBsb29raW5nIGF0IGBDT05GSUdfQlJJREdFYCwgYENPTkZJR19CUklER0VfTVJQYCwgYW5kIGBDT05GSUdfQlJJREdFX0NGTWAuIElzIGl0IGdvaW5nIHRvIGJlIHdvcnRoIHRoZSBlZmZvcnQgdG8gZnV6eiB0aGlzPyBBYnNvbHV0ZWx5LCB0aGlzIGlzIGNvcmUgbmV0d29yayBicmlkZ2UgZnJhbWUgcHJvY2Vzc2luZyBhbmQgY29uZmlndXJhdGlvbiBsb2dpYywgaW5jbHVkaW5nIENGTSAoQ29ubmVjdGl2aXR5IEZhdWx0IE1hbmFnZW1lbnQpIGFuZCBNUlAgKE1lZGlhIFJlZHVuZGFuY3kgUHJvdG9jb2wpLgoKSSBzZWUgdGhhdCBgYnJfaGFuZGxlX2ZyYW1lYCwgdGhlIGJyaWRnZSBSWCBoYW5kbGVyLCBkaXJlY3RseSBjYWxscyBgYnJfcHJvY2Vzc19mcmFtZV90eXBlYCwgd2hpY2ggbm93IGluY29ycG9yYXRlcyBgQlJPUFRfQ0ZNX0VOQUJMRURgIGFuZCBgQlJPUFRfTVJQX0VOQUJMRURgIG9wdGlvbiBiaXRzLiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBhbHNvIG5vdGUgbW9kaWZpY2F0aW9ucyB0byBgYnJfY2ZtX21lcF9jcmVhdGVgLCBgYnJfY2ZtX21lcF9kZWxldGVgLCBgYnJfbXJwX2FkZGAsIGFuZCBgYnJfbXJwX2RlbF9pbXBsYC4KClRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoZXNlIHByb3RvY29scyBhbmQgdGhlaXIgZnJhbWUgaGFuZGxpbmcgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCBicmlkZ2UgbmV0bGluayBjb25maWd1cmF0aW9uIChydG5ldGxpbmsgLyBicmlkZ2UgbmV0bGluaykgYW5kIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbi9yZWNlcHRpb24gKHR1bi90YXAsIHZldGgsIHJhdyBzb2NrZXRzLCBldGMuKSBpbiBhIHN0YW5kYXJkIExpbnV4IGVudmlyb25tZW50IGxpa2UgUUVNVS4gTm8gc3BlY2lhbCBoYXJkd2FyZSByZXF1aXJlZCDigJMgdGhhdCBtYWtlcyB0aGlzIGV2ZW4gbW9yZSBhdHRyYWN0aXZlIGFzIGEgdGFyZ2V0LgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gSSYjMzk7bSBub3RpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgZWl0aGVyIGNoYW5nZWQgb3IgZXhwb3J0ZWQgZnJvbSBzdGF0aWMgc2NvcGU6IHNwZWNpZmljYWxseSBgYnJfY2ZtX2ZyYW1lX3J4YCwgYGJyX21ycF9wcm9jZXNzYCAoYm90aCB3ZXJlIHN0YXRpYyBiZWZvcmUpLCBgYnJfY2ZtX21lcF9jcmVhdGVgLCBgYnJfY2ZtX21lcF9kZWxldGVgLCBhbmQgYGJyX21ycF9hZGRgLiBBbHRob3VnaCBgYnJfaGFuZGxlX2ZyYW1lYCBpcyBvbiB0aGF0IGxpc3QsIEkmIzM5O20gbW9yZSBpbnRlcmVzdGVkIGluIHRoZSBub24taG90LXBhdGgga2VybmVsIGZ1bmN0aW9uczogYGJyX2NmbV9mcmFtZV9yeGAsIGBicl9tcnBfcHJvY2Vzc2AsIGBicl9jZm1fbWVwX2NyZWF0ZWAsIGBicl9jZm1fbWVwX2RlbGV0ZWAsIGFuZCBgYnJfbXJwX2FkZGAuCgpPa2F5LCBkb3VibGUtY2hlY2tpbmfigKYgSSBzZWUgdGhhdCBgYnJfY2ZtX2ZyYW1lX3J4YCBpcyBub3cgYW4gYGludCBicl9jZm1fZnJhbWVfcngoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYilgIGluIGBuZXQvYnJpZGdlL2JyX2NmbS5jYCwgYW5kIGBicl9tcnBfcHJvY2Vzc2AgaXMgYGludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKWAgaW4gYG5ldC9icmlkZ2UvYnJfbXJwLmNgLiBHb29kLiBOZXh0LCBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgYGJyX2NmbV9tZXBfY3JlYXRlYCwgYGJyX2NmbV9tZXBfZGVsZXRlYCwgYW5kIGBicl9tcnBfYWRkYCBhcmUgYWN0dWFsbHkgY2FsbGVkIGZyb20sIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGNhbGwgcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfY2ZtX21lcF9jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfY2ZtLmM9MzcwPWludCBicl9jZm1fZnJhbWVfcngoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvYnJpZGdlL2JyX2NmbS5jLTQ5MS1cbm5ldC9icmlkZ2UvYnJfY2ZtLmM6NDkyOmludCBicl9jZm1fbWVwX2NyZWF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5uZXQvYnJpZGdlL2JyX2NmbS5jLTQ5My1cdFx0ICAgICAgY29uc3QgdTMyIGluc3RhbmNlLFxubmV0L2JyaWRnZS9icl9jZm0uYzo0OTQ6XHRcdCAgICAgIHN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZSAqY29uc3QgY3JlYXRlLFxubmV0L2JyaWRnZS9icl9jZm0uYy00OTUtXHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM9OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYzo5OmJyX2NmbV9tZXBfY3JlYXRlX3BvbGljeVtJRkxBX0JSSURHRV9DRk1fTUVQX0NSRUFURV9NQVggJiM0MzsgMV0gPSB7XG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTAtXHRbSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVfVU5TUEVDXVx0PSB7IC50eXBlID0gTkxBX1JFSkVDVCB9LFxuLS1cbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYz03Mj1icl9jZm1fcG9saWN5W0lGTEFfQlJJREdFX0NGTV9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTc0LVx0W0lGTEFfQlJJREdFX0NGTV9NRVBfQ1JFQVRFXVx0XHQ9XG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM6NzU6XHRcdFx0XHROTEFfUE9MSUNZX05FU1RFRChicl9jZm1fbWVwX2NyZWF0ZV9wb2xpY3kpLFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTc2LVx0W0lGTEFfQlJJREdFX0NGTV9NRVBfREVMRVRFXVx0XHQ9XG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jPTkyPXN0YXRpYyBpbnQgYnJfbWVwX2NyZWF0ZV9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTk1LVx0c3RydWN0IG5sYXR0ciAqdGJbSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVfTUFYICYjNDM7IDFdO1xubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjk2Olx0c3RydWN0IGJyX2NmbV9tZXBfY3JlYXRlIGNyZWF0ZTtcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy05Ny1cdHUzMiBpbnN0YW5jZTtcbi0tXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTAwLVx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVfTUFYLCBhdHRyLFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjEwMTpcdFx0XHQgICAgICAgYnJfY2ZtX21lcF9jcmVhdGVfcG9saWN5LCBleHRhY2spO1xubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTEwMi1cdGlmIChlcnIpXG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTEyOC1cbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYzoxMjk6XHRyZXR1cm4gYnJfY2ZtX21lcF9jcmVhdGUoYnIsIGluc3RhbmNlLCBcdTAwMjZjcmVhdGUsIGV4dGFjayk7XG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTMwLX1cbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtOC1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaDo5OnN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZSB7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTAtXHRlbnVtIGJyX2NmbV9kb21haW4gZG9tYWluOyAvKiBEb21haW4gZm9yIHRoaXMgTUVQICovXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oLTE0LVxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oOjE1OmludCBicl9jZm1fbWVwX2NyZWF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTYtXHRcdCAgICAgIGNvbnN0IHUzMiBpbnN0YW5jZSxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaDoxNzpcdFx0ICAgICAgc3RydWN0IGJyX2NmbV9tZXBfY3JlYXRlICpjb25zdCBjcmVhdGUsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTgtXHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oPTExNz1zdHJ1Y3QgYnJfY2ZtX21lcCB7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oLTEyMC1cdHUzMlx0XHRcdFx0aW5zdGFuY2U7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmg6MTIxOlx0c3RydWN0IGJyX2NmbV9tZXBfY3JlYXRlXHRjcmVhdGU7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTIyLVx0c3RydWN0IGJyX2NmbV9tZXBfY29uZmlnXHRjb25maWc7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwOTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIFdlYWsgUG9pbnRzKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGZvciB2dWxuZXJhYmlsaXRpZXMsIGFuZCBiYXNlZCBvbiB0aGUgcmVjZW50IGZpbmRpbmdzLCBJIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaC4gVGhlIHVzdWFsIHN1c3BlY3RzIGhhdmUgYWxyZWFkeSBiZWVuIHNjcnV0aW5pemVkLCBzbyBJJiMzOTttIHRoaW5raW5nLi4uIGxldCYjMzk7cyBub3Qgb3Zlcmxvb2sgYGJyX21ycF9hZGRgLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiBbbWVudGlvbiB0aGUgcmVsZXZhbnQgc3lzdGVtL2FyZWEgdGhpcyBmdW5jdGlvbiBpcyBpbl0sIGFuZCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBwcmV2aW91cyBpc3N1ZXMsIGl0JiMzOTtzIGRlZmluaXRlbHkgd2l0aGluIHRoZSBzY29wZSBvZiB3aGVyZSB3ZSBzaG91bGQgYmUgbG9va2luZy4gTXkgaW5pdGlhbCBmb2N1cyB3YXMgW21lbnRpb24gYSBwcmV2aW91cyBhcmVhIG9mIGZvY3VzLCBpZiBhbnldLCBidXQgSSBoYXZlIHRvIGJlIHRob3JvdWdoLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgb25lIGFsc28gbmVlZHMgdG8gYmUgZXhwbG9yZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX21ycF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXJwLmM9NDE5PXN0YXRpYyB2b2lkIGJyX21ycF9kZWxfaW1wbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnAgKm1ycClcbi0tXG5uZXQvYnJpZGdlL2JyX21ycC5jLTQ4Ny0gKi9cbm5ldC9icmlkZ2UvYnJfbXJwLmM6NDg4OmludCBicl9tcnBfYWRkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycF9pbnN0YW5jZSAqaW5zdGFuY2UpXG5uZXQvYnJpZGdlL2JyX21ycC5jLTQ4OS17XG4tLVxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jPTMxPXN0YXRpYyBpbnQgYnJfbXJwX2luc3RhbmNlX3BhcnNlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5sYXR0ciAqYXR0cixcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9uZXRsaW5rLmMtNjEtXHRpZiAoY21kID09IFJUTV9TRVRMSU5LKVxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jOjYyOlx0XHRyZXR1cm4gYnJfbXJwX2FkZChiciwgXHUwMDI2aW5zdCk7XG5uZXQvYnJpZGdlL2JyX21ycF9uZXRsaW5rLmMtNjMtXHRlbHNlXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlX21ycC5oPTU5PWVudW0gYnJfbXJwX2h3X3N1cHBvcnQge1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9tcnAuaC02NS0vKiBicl9tcnAuYyAqL1xubmV0L2JyaWRnZS9icl9wcml2YXRlX21ycC5oOjY2OmludCBicl9tcnBfYWRkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycF9pbnN0YW5jZSAqaW5zdGFuY2UpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlX21ycC5oLTY3LWludCBicl9tcnBfZGVsKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycF9pbnN0YW5jZSAqaW5zdGFuY2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY5NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipSZXZpZXdpbmcgRGVsZXRpb24gUHJvY2Vzc2VzKioKCk9rYXksIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgZGVsZXRpb24gcHJvY2Vzc2VzLCBwYXJ0aWN1bGFybHkgYXMgdGhleSByZWxhdGUgdG8gYGJyX2NmbV9tZXBfZGVsZXRlYCBhbmQgYGJyX21ycF9kZWxgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSByZW1vdmFsIG9mIHRoZXNlIG9iamVjdHMgaXMgZnVuY3Rpb25pbmcgcHJvcGVybHksIGVzcGVjaWFsbHkgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgb3RoZXIgbW9kdWxlcy4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gb3JwaGFuZWQgcmVjb3JkcywgY2FzY2FkZSBkZWxldGlvbnMgYXJlIHdvcmtpbmcgYXMgZXhwZWN0ZWQsIGFuZCB0aGF0IGFsbCByZWxhdGVkIHRhYmxlcyBhcmUgYmVpbmcgaGFuZGxlZCBncmFjZWZ1bGx5LiBMZXQgbWUgYmVnaW4gYnkgY2hlY2tpbmcgdGhlIG1vc3QgcmVjZW50IGxvZ3MsIHRoZW4gSSBjYW4gcnVuIGEgZmV3IHRhcmdldGVkIHF1ZXJpZXMgdG8gY29uZmlybSB0aGUgaW50ZWdyaXR5IG9mIHRoZSBkYXRhYmFzZSBhZnRlciBhIGRlbGV0aW9uIGlzIHRyaWdnZXJlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdW5leHBlY3RlZCBzaWRlIGVmZmVjdHM7IHRoaXMgaXMgYSBjcml0aWNhbCBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfY2ZtX21lcF9kZWxldGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfY2ZtLmM9NTY0PXN0YXRpYyB2b2lkIG1lcF9kZWxldGVfaW1wbGVtZW50YXRpb24oc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfY2ZtLmMtNTg4LVxubmV0L2JyaWRnZS9icl9jZm0uYzo1ODk6aW50IGJyX2NmbV9tZXBfZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbm5ldC9icmlkZ2UvYnJfY2ZtLmMtNTkwLVx0XHQgICAgICBjb25zdCB1MzIgaW5zdGFuY2UsXG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jPTE3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjE4OmJyX2NmbV9tZXBfZGVsZXRlX3BvbGljeVtJRkxBX0JSSURHRV9DRk1fTUVQX0RFTEVURV9NQVggJiM0MzsgMV0gPSB7XG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTktXHRbSUZMQV9CUklER0VfQ0ZNX01FUF9ERUxFVEVfVU5TUEVDXVx0PSB7IC50eXBlID0gTkxBX1JFSkVDVCB9LFxuLS1cbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYz03Mj1icl9jZm1fcG9saWN5W0lGTEFfQlJJREdFX0NGTV9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTc2LVx0W0lGTEFfQlJJREdFX0NGTV9NRVBfREVMRVRFXVx0XHQ9XG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM6Nzc6XHRcdFx0XHROTEFfUE9MSUNZX05FU1RFRChicl9jZm1fbWVwX2RlbGV0ZV9wb2xpY3kpLFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTc4LVx0W0lGTEFfQlJJREdFX0NGTV9NRVBfQ09ORklHXVx0XHQ9XG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jPTEzMj1zdGF0aWMgaW50IGJyX21lcF9kZWxldGVfcGFyc2Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy0xMzktXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBJRkxBX0JSSURHRV9DRk1fTUVQX0RFTEVURV9NQVgsIGF0dHIsXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM6MTQwOlx0XHRcdCAgICAgICBicl9jZm1fbWVwX2RlbGV0ZV9wb2xpY3ksIGV4dGFjayk7XG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTQxLVx0aWYgKGVycilcbi0tXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTUxLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjE1MjpcdHJldHVybiBicl9jZm1fbWVwX2RlbGV0ZShiciwgaW5zdGFuY2UsIGV4dGFjayk7XG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTUzLX1cbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmg9MTU9aW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTktXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmg6MjA6aW50IGJyX2NmbV9tZXBfZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaC0yMS1cdFx0ICAgICAgY29uc3QgdTMyIGluc3RhbmNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYzOAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBgYnJfbXJwX2RlbGAqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0LCBpbW1lZGlhdGVseSBjZW50ZXJzIG9uIHRoZSBjb250ZXh0LiAmIzM0O0xldCYjMzk7cyBjaGVjayBgYnJfbXJwX2RlbGAmIzM0OyAtIHRoaXMgaW1wbGllcyBhIHZlcnkgc3BlY2lmaWMgYXJlYSBvZiBjb25jZXJuLiBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSBzeXN0ZW1zIGFuZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBgYnJfbXJwX2RlbGAgaXMgbGlrZWx5IGFzc29jaWF0ZWQgd2l0aC4gSXMgaXQgYSB0YWJsZSBuYW1lPyBBIHN0b3JlZCBwcm9jZWR1cmU/IEEgdmFyaWFibGUgd2l0aGluIGEgbGFyZ2VyIHNjcmlwdCBvciBtb2R1bGU/IEtub3dpbmcgdGhpcyB3aWxsIGRyYW1hdGljYWxseSBhZmZlY3QgbXkgYXBwcm9hY2guCgpJJiMzOTttIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBlaXRoZXIgYSBkYXRhIGlzc3VlLCBhIGNvZGUgZXhlY3V0aW9uIHByb2JsZW0sIG9yIHBlcmhhcHMgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBUaGUgdGVybSAmIzM0O01SUCYjMzQ7IChNYXRlcmlhbCBSZXF1aXJlbWVudHMgUGxhbm5pbmcpIGlzIGEgc3Ryb25nIGluZGljYXRvciB0aGF0IEkmIzM5O20gbGlrZWx5IGRlYWxpbmcgd2l0aCBzdXBwbHkgY2hhaW4sIG1hbnVmYWN0dXJpbmcsIG9yIGRpc3RyaWJ1dGlvbiBwcm9jZXNzZXMuICYjMzQ7RGVsJiMzNDsgc3VnZ2VzdHMgZGVsZXRpb24sIHJlbW92YWwsIG9yIHBlcmhhcHMgZGVsaXZlcnkuIENvbWJpbmluZyB0aG9zZSwgbXkgbWluZCBpcyBpbW1lZGlhdGVseSB3b3JraW5nIHRocm91Z2ggdGhlIHBvdGVudGlhbCBzY2VuYXJpb3MsIHNvbWV0aGluZyBsaWtlOgoKKiAgICoqRGF0YSBJbnRlZ3JpdHk6KiogSXMgdGhpcyByZWxhdGVkIHRvIGRlbGV0aW5nIHBsYW5uZWQgb3JkZXJzLCBkZWxldGluZyByZWNvcmRzIG9mIGRlbGl2ZXJpZXMsIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBBcmUgdGhlcmUgY29uc3RyYWludHMgb3IgdHJpZ2dlcnMgaW52b2x2ZWQgdGhhdCBtaWdodCBjYXVzZSBlcnJvcnM/CiogICAqKlByb2Nlc3MgQXV0b21hdGlvbjoqKiBJcyB0aGlzIGEgc2NyaXB0IHRoYXQmIzM5O3Mgc3VwcG9zZWQgdG8gaGFuZGxlIHRoZXNlIGRlbGV0aW9ucyBhdXRvbWF0aWNhbGx5PyBJZiBzbywgd2hhdCYjMzk7cyBpdHMgaGlzdG9yeSBvZiBzdWNjZXNzIGFuZCBmYWlsdXJlPyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGNvbnNlcXVlbmNlcyBvZiBhIG1hbGZ1bmN0aW9uPwoqICAgKipQZXJmb3JtYW5jZSBJbXBhY3Q6KiogQXJlIHdlIHRhbGtpbmcgYWJvdXQgbGFyZ2UgZGF0YXNldHM/IENvdWxkIGEgcG9vcmx5IG9wdGltaXplZCBkZWxldGUgb3BlcmF0aW9uIGJlIHNsb3dpbmcgZG93biBvdGhlciBjcnVjaWFsIHByb2Nlc3Nlcz8gQXJlIHRoZXJlIGxvY2tzIHRoYXQgbWlnaHQgYmUgYW4gaXNzdWU/CgpCZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gYW55IGNvZGUgb3IgZGF0YSwgSSBuZWVkIHRvIGtub3cgKndoYXQqIEkmIzM5O20gbG9va2luZyBmb3Igc3BlY2lmaWNhbGx5IGFuZCB3aGF0IHRoZSBnb2FsIGlzLiBUaGlzIGlzIGFsbCBqdXN0IGFuIGluaXRpYWwgbWVudGFsIGZyYW1ld29yayB0byBzdHJ1Y3R1cmUgdGhlIGludmVzdGlnYXRpb24uIExldCBtZSBkZXRlcm1pbmUgdGhlIG5leHQgc3RlcHMgSSBzaG91bGQgdGFrZSB0byBnYWluIGdyZWF0ZXIgY29udGV4dCBvbiB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfbXJwX2RlbFxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tcnAuYz01NTM9dm9pZCBicl9tcnBfcG9ydF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXJwLmMtNTY2LSAqL1xubmV0L2JyaWRnZS9icl9tcnAuYzo1Njc6aW50IGJyX21ycF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSlcbm5ldC9icmlkZ2UvYnJfbXJwLmMtNTY4LXtcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9uZXRsaW5rLmM9MzE9c3RhdGljIGludCBicl9tcnBfaW5zdGFuY2VfcGFyc2Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXJwX25ldGxpbmsuYy02My1cdGVsc2Vcbm5ldC9icmlkZ2UvYnJfbXJwX25ldGxpbmsuYzo2NDpcdFx0cmV0dXJuIGJyX21ycF9kZWwoYnIsIFx1MDAyNmluc3QpO1xubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jLTY1LVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9tcnAuaD02Nj1pbnQgYnJfbXJwX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnBfaW5zdGFuY2UgKmluc3RhbmNlKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9tcnAuaDo2NzppbnQgYnJfbXJwX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnBfaW5zdGFuY2UgKmluc3RhbmNlKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9tcnAuaC02OC1pbnQgYnJfbXJwX3NldF9wb3J0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDM0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEJyaWRnZSBNYWtlZmlsZSoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgdGhlIG5ldHdvcmtpbmcgYnJpZGdlIGltcGxlbWVudGF0aW9uLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzIHdpdGggdGhlc2Uga2luZHMgb2YgaW52ZXN0aWdhdGlvbnMsIGlzIHRoZSBgTWFrZWZpbGVgIGluIHRoZSBgbmV0L2JyaWRnZS9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB0aGUgaGVhcnQgb2YgaG93IHRoaW5ncyBhcmUgYnVpbHQgaW4gdGhpcyBtb2R1bGUsIGl0IGhvbGRzIHRoZSBzZWNyZXRzLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBwcmVjaXNlbHkgd2hpY2ggc291cmNlIGZpbGVzIGFyZSBjb21waWxlZCwgd2hhdCBjb21waWxlciBmbGFncyBhcmUgdXNlZCwgYW5kIG1vc3QgY3JpdGljYWxseSwgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW5mbHVlbmNlIHRoZSBidWlsZCBwcm9jZXNzLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgZGVwZW5kZW5jaWVzIG9uIHZhcmlvdXMga2VybmVsIGNvbmZpZ3VyYXRpb24gc3ltYm9scyByZWxhdGVkIHRvIGJyaWRnaW5nIGZ1bmN0aW9uYWxpdHk7IHRoaW5ncyBsaWtlIFZMQU4gc3VwcG9ydCwgU1RQLCBhbmQgdGhlIHZhcmlvdXMgYnJpZGdlIHByb3RvY29scy4gVW5kZXJzdGFuZGluZyB0aGlzIE1ha2VmaWxlIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIElFRUUgODAyLjFkIGV0aGVybmV0IGJyaWRnaW5nIGxheWVyLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmotJChDT05GSUdfQlJJREdFKSAmIzQzOz0gYnJpZGdlLm9cbiAgIDc6XHRcbiAgIDg6XHRicmlkZ2UteVx0Oj0gYnIubyBicl9kZXZpY2UubyBicl9mZGIubyBicl9mb3J3YXJkLm8gYnJfaWYubyBicl9pbnB1dC5vIFxcXG4gICA5Olx0XHRcdFx0YnJfaW9jdGwubyBicl9zdHAubyBicl9zdHBfYnBkdS5vIFxcXG4gIDEwOlx0XHRcdFx0YnJfc3RwX2lmLm8gYnJfc3RwX3RpbWVyLm8gYnJfbmV0bGluay5vIFxcXG4gIDExOlx0XHRcdFx0YnJfbmV0bGlua190dW5uZWwubyBicl9hcnBfbmRfcHJveHkub1xuICAxMjpcdFxuICAxMzpcdGJyaWRnZS0kKENPTkZJR19TWVNGUykgJiM0Mzs9IGJyX3N5c2ZzX2lmLm8gYnJfc3lzZnNfYnIub1xuICAxNDpcdFxuICAxNTpcdGJyaWRnZS0kKHN1YnN0IG0seSwkKENPTkZJR19CUklER0VfTkVURklMVEVSKSkgJiM0Mzs9IGJyX25mX2NvcmUub1xuICAxNjpcdFxuICAxNzpcdGJyX25ldGZpbHRlci15IDo9IGJyX25ldGZpbHRlcl9ob29rcy5vXG4gIDE4Olx0YnJfbmV0ZmlsdGVyLSQoc3Vic3QgbSx5LCQoQ09ORklHX0lQVjYpKSAmIzQzOz0gYnJfbmV0ZmlsdGVyX2lwdjYub1xuICAxOTpcdG9iai0kKENPTkZJR19CUklER0VfTkVURklMVEVSKSAmIzQzOz0gYnJfbmV0ZmlsdGVyLm9cbiAgMjA6XHRcbiAgMjE6XHRicmlkZ2UtJChDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkcpICYjNDM7PSBicl9tdWx0aWNhc3QubyBicl9tZGIubyBicl9tdWx0aWNhc3RfZWh0Lm9cbiAgMjI6XHRcbiAgMjM6XHRicmlkZ2UtJChDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HKSAmIzQzOz0gYnJfdmxhbi5vIGJyX3ZsYW5fdHVubmVsLm8gYnJfdmxhbl9vcHRpb25zLm8gYnJfbXN0Lm9cbiAgMjQ6XHRcbiAgMjU6XHRicmlkZ2UtJChDT05GSUdfTkVUX1NXSVRDSERFVikgJiM0Mzs9IGJyX3N3aXRjaGRldi5vXG4gIDI2Olx0XG4gIDI3Olx0b2JqLSQoQ09ORklHX05FVEZJTFRFUikgJiM0Mzs9IG5ldGZpbHRlci9cbiAgMjg6XHRcbiAgMjk6XHRicmlkZ2UtJChDT05GSUdfQlJJREdFX01SUClcdCYjNDM7PSBicl9tcnBfc3dpdGNoZGV2Lm8gYnJfbXJwLm8gYnJfbXJwX25ldGxpbmsub1xuICAzMDpcdFxuICAzMTpcdGJyaWRnZS0kKENPTkZJR19CUklER0VfQ0ZNKVx0JiM0Mzs9IGJyX2NmbS5vIGJyX2NmbV9uZXRsaW5rLm9cbiAgMzI6XHRcbiAgMzM6XHRpZmRlZiBDT05GSUdfR0NPVl9QUk9GSUxFX05FVEZJTFRFUlxuICAzNDpcdEdDT1ZfUFJPRklMRV9icl9uZl9jb3JlLm8gOj0geVxuICAzNTpcdEdDT1ZfUFJPRklMRV9icl9uZXRmaWx0ZXJfaG9va3MubyA6PSB5XG4gIDM2Olx0R0NPVl9QUk9GSUxFX2JyX25ldGZpbHRlcl9pcHY2Lm8gOj0geVxuICAzNzpcdGVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzU2CgkJCQkJCQlvdXRwdXQ6IDIxMgoJCQkJCQkJdGhvdWdodHM6IDg3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEV0aGVybmV0IEJyaWRnZSBDRk0gYW5kIE1SUCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczogYEJSSURHRWAsIGBCUklER0VfQ0ZNYCwgYW5kIGBCUklER0VfTVJQYC4gIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgS2NvbmZpZyBmb3IgZGVwZW5kZW5jaWVzOyBpdCBsb29rcyBsaWtlIGBCUklER0VfQ0ZNYCBhbmQgYEJSSURHRV9NUlBgIGJvdGggZGVwZW5kIG9uIGBCUklER0VgLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIHdlIG5lZWQgdGhlIGJhc2ljIGJyaWRnaW5nIGZ1bmN0aW9uYWxpdHkgZmlyc3QuIGBCUklER0VgIGl0c2VsZiBpcyBhIHRyaXN0YXRlIGNvbmZpZyBlbmFibGluZyA4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmcsIGFuZCBzZWxlY3RzIExMQyBhbmQgU1RQLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRpZmYgYWN0dWFsbHkgdG91Y2hlcy4gSSBzZWUgZmlsZXMgbGlrZSBgYnJfY2ZtLmNgLCBgYnJfZGV2aWNlLmNgLCBgYnJfaW5wdXQuY2AsIGBicl9tcnAuY2AsIGFuZCBgYnJfcHJpdmF0ZS5oYC4gIFRoaXMgY29uZmlybXMgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIENvbm5lY3Rpdml0eSBGYXVsdCBNYW5hZ2VtZW50IChDRk0pIGFuZCBNZWRpYSBSZWR1bmRhbmN5IFByb3RvY29sIChNUlApIGhhbmRsaW5nIHdpdGhpbiB0aGUgYnJpZGdlLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhlIGNoYW5nZXMgYXJlIGFib3V0IGJyaWRnZSBkZXZpY2Ugc2V0dXAsIHBhY2tldCBpbnB1dCwgYW5kIHRoZSBjcmVhdGlvbi9kZWxldGlvbiBvZiBDRk0gTUVQcyBhbmQgTVJQIGluc3RhbmNlcy4KCk5leHQsIEkmIzM5O2xsIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyBtb2RpZmllZDogYGJyX2NmbV9mcmFtZV9yeGAsIGBicl9tcnBfcHJvY2Vzc2AsIGBicl9jZm1fbWVwX2NyZWF0ZWAsIGBicl9jZm1fbWVwX2RlbGV0ZWAsIGBicl9tcnBfYWRkYCwgYW5kIGBicl9tcnBfZGVsYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGV5IGFyZSB0aGUgY29ycmVjdCBzeW1ib2xzLCBhbmQgdGhhdCB0aGVpciB2aXNpYmlsaXR5IGlzIGNvcnJlY3QuIGBicl9jZm1fZnJhbWVfcnhgIGFuZCBgYnJfbXJwX3Byb2Nlc3NgIGFyZSBub3cgbm9uLXN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IGluZGljYXRlcyB0aGV5IG1pZ2h0IGJlIGdldHRpbmcgdXNlZCBvdXRzaWRlIG9mIHRoZWlyIG9yaWdpbmFsIHNjb3BlLiBUaGUgcmVtYWluaW5nIGFyZSBub24tc3RhdGljIGFzIHdlbGwuCgpJJiMzOTtsbCBxdWlja2x5IHNjYW4gZm9yIG90aGVyIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSW4gYGJyX2RldmljZS5jYCwgdGhlcmUmIzM5O3MgYGJyX2Rldl9zZXR1cGAgKGluaXRpYWxpemF0aW9uKSwgd2hpY2ggc2VlbXMgcmVhc29uYWJsZS4gSW4gYGJyX2lucHV0LmNgLCBgYnJfcHJvY2Vzc19mcmFtZV90eXBlYCBpcyBzdGF0aWMgYnV0IGBicl9oYW5kbGVfZnJhbWVgIGlzIHByZXNlbnQsIGFsb25nIHdpdGggdGhlIGRlbGV0aW9ucyBvZiBgYnJfYWRkX2ZyYW1lYCBhbmQgYGJyX2RlbF9mcmFtZWAuIEluIGBicl9jZm0uY2AsIGBtZXBfZGVsZXRlX2ltcGxlbWVudGF0aW9uYCBpcyBzdGF0aWMgYW5kIGNhbGxlZCBieSBgYnJfY2ZtX21lcF9kZWxldGVgIGFuZCBgYnJfY2ZtX3BvcnRfZGVsYC4gSW4gYGJyX21ycC5jYCwgdGhlcmUmIzM5O3MgYGJyX21ycF9kZWxfaW1wbGAsIHN0YXRpYyB0b28sIGFuZCBjYWxsZWQgYnkgYGJyX21ycF9kZWxgIGFuZCBgYnJfbXJwX3BvcnRfZGVsYC4KClNvLCB0byBzdW1tYXJpemUsIHRoZSByZWxldmFudCBzeW1ib2xzIGFyZTogYGJyX2NmbV9mcmFtZV9yeGAsIGBicl9tcnBfcHJvY2Vzc2AsIGBicl9jZm1fbWVwX2NyZWF0ZWAsIGBicl9jZm1fbWVwX2RlbGV0ZWAsIGBicl9tcnBfYWRkYCwgYW5kIGBicl9tcnBfZGVsYC4gIFRoZSBjb25maWd1cmF0aW9ucyB3ZSYjMzk7cmUgdHJhY2tpbmcgYXJlOiBgQlJJREdFYCwgYEJSSURHRV9DRk1gLCBhbmQgYEJSSURHRV9NUlBgLgoKQmFzZWQgb24gdGhpcywgaXQgc2VlbXMgdGhlIHBhdGNoIGlzIG9wdGltaXppbmcgRXRoZXJuZXQgQnJpZGdlIGZyYW1lIHR5cGUgaGFuZGxpbmcgZm9yIENGTSBhbmQgTVJQLiAgSW5zdGVhZCBvZiBkeW5hbWljIG1hbmFnZW1lbnQgb2YgYGZyYW1lX3R5cGVfbGlzdGAsIGl0JiMzOTtzIHJlcGxhY2luZyBpdCB3aXRoIGRpcmVjdCBmbGFnIGNoZWNrcyAoYEJST1BUX0NGTV9FTkFCTEVEYCBhbmQgYEJST1BUX01SUF9FTkFCTEVEYCkgaW4gdGhlIHJlY2VpdmUgcGF0aCAoYGJyX2hhbmRsZV9mcmFtZWAgLyBgYnJfcHJvY2Vzc19mcmFtZV90eXBlYCkuICBUaGlzIGlzIGxpa2VseSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLiBUaGUgY29kZSBhbHNvIGV4cG9ydHMgYGJyX2NmbV9mcmFtZV9yeGAgYW5kIGBicl9tcnBfcHJvY2Vzc2AsIGFuZCB1cGRhdGVzIHRoZSBpbnN0YW5jZSBjcmVhdGlvbi9kZWxldGlvbiBwYXRocy4gVGhpcyBjaGFuZ2UgaXMgY2VydGFpbmx5IHRlc3RhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZCBhcyBhIG1hdHRlciBvZiBjb3Vyc2UuCgpPa2F5LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O0JSSURHRV9DRk0mIzM0OywKICAgICYjMzQ7QlJJREdFX01SUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX2NmbV9mcmFtZV9yeCYjMzQ7LAogICAgJiMzNDticl9tcnBfcHJvY2VzcyYjMzQ7LAogICAgJiMzNDticl9jZm1fbWVwX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDticl9jZm1fbWVwX2RlbGV0ZSYjMzQ7LAogICAgJiMzNDticl9tcnBfYWRkJiMzNDssCiAgICAmIzM0O2JyX21ycF9kZWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBicmlkZ2UgZnJhbWUgaGFuZGxpbmcgbG9naWMgZm9yIENGTSAoODAyLjFRIENGTSkgYW5kIE1SUCBwcm90b2NvbHMgYnkgcmVwbGFjaW5nIHRoZSBkeW5hbWljIGZyYW1lX3R5cGVfbGlzdCB3aXRoIGJyaWRnZSBvcHRpb24gZmxhZ3MgKEJST1BUX0NGTV9FTkFCTEVEIGFuZCBCUk9QVF9NUlBfRU5BQkxFRCkgYW5kIGRpcmVjdCBjYWxscyB0byBicl9jZm1fZnJhbWVfcnggYW5kIGJyX21ycF9wcm9jZXNzLiBJdCBtb2RpZmllcyBib3RoIHRoZSBmcmFtZSByZWNlaXZlIHBhdGggYW5kIHRoZSBuZXRsaW5rLXRyaWdnZXJlZCBpbnN0YW5jZSBjcmVhdGlvbi9kZWxldGlvbiBwYXRocy4gVGhpcyBhZmZlY3RzIGNvcmUgYnJpZGdlIG5ldHdvcmtpbmcgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsIGVudmlyb25tZW50cyB3aXRob3V0IHNwZWNpYWxpemVkIGhhcmR3YXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7QlJJREdFX0NGTSYjMzQ7LAogICAgJiMzNDtCUklER0VfTVJQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfY2ZtX2ZyYW1lX3J4JiMzNDssCiAgICAmIzM0O2JyX21ycF9wcm9jZXNzJiMzNDssCiAgICAmIzM0O2JyX2NmbV9tZXBfY3JlYXRlJiMzNDssCiAgICAmIzM0O2JyX2NmbV9tZXBfZGVsZXRlJiMzNDssCiAgICAmIzM0O2JyX21ycF9hZGQmIzM0OywKICAgICYjMzQ7YnJfbXJwX2RlbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGJyaWRnZSBmcmFtZSBoYW5kbGluZyBsb2dpYyBmb3IgQ0ZNICg4MDIuMVEgQ0ZNKSBhbmQgTVJQIHByb3RvY29scyBieSByZXBsYWNpbmcgdGhlIGR5bmFtaWMgZnJhbWVfdHlwZV9saXN0IHdpdGggYnJpZGdlIG9wdGlvbiBmbGFncyAoQlJPUFRfQ0ZNX0VOQUJMRUQgYW5kIEJST1BUX01SUF9FTkFCTEVEKSBhbmQgZGlyZWN0IGNhbGxzIHRvIGJyX2NmbV9mcmFtZV9yeCBhbmQgYnJfbXJwX3Byb2Nlc3MuIEl0IG1vZGlmaWVzIGJvdGggdGhlIGZyYW1lIHJlY2VpdmUgcGF0aCBhbmQgdGhlIG5ldGxpbmstdHJpZ2dlcmVkIGluc3RhbmNlIGNyZWF0aW9uL2RlbGV0aW9uIHBhdGhzLiBUaGlzIGFmZmVjdHMgY29yZSBicmlkZ2UgbmV0d29ya2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWwgZW52aXJvbm1lbnRzIHdpdGhvdXQgc3BlY2lhbGl6ZWQgaGFyZHdhcmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGJyaWRnZSBzdWJzeXN0ZW0mIzM5O3MgQ0ZNIChDb25uZWN0aXZpdHkgRmF1bHQgTWFuYWdlbWVudCkgYW5kIE1SUCAoTWVkaWEgUmVkdW5kYW5jeSBQcm90b2NvbCkgZnJhbWUgZGlzcGF0Y2ggbWVjaGFuaXNtIGJ5IHJlcGxhY2luZyB0aGUgZHluYW1pYyBmcmFtZS10eXBlIGxpbmtlZCBsaXN0IChgZnJhbWVfdHlwZV9saXN0YCkgd2l0aCBiaXQgZmxhZ3MgaW4gdGhlIGV4aXN0aW5nIGJyaWRnZSBvcHRpb25zIGJpdG1hc2sgKGBCUk9QVF9DRk1fRU5BQkxFRGAgYW5kIGBCUk9QVF9NUlBfRU5BQkxFRGApLiBcblxuTm8gbmV3IHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIGJ1ZmZlcnMgYXJlIGNyZWF0ZWQgb3IgZXhwb3J0ZWQgdG8gdXNlciBzcGFjZS4gVGhlIGxvZ2ljIHJlbGllcyBvbiBhbHJlYWR5LWFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYnJpZGdlIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgbmV0X2JyaWRnZWApLCB0b2dnbGluZyBhbmQgY2hlY2tpbmcgZXhpc3RpbmcgYml0IGZsYWdzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCBvbiwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGNvbmZpZ3VyYXRpb25zIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSByZWdyZXNzaW9uLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYyODJhNjE4MjlhNmJlN2Y1MWNhOWVhNzZkMGM2ODczMWNlMmQzN2IKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxMjoxNzoyMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfY2ZtLmMgYi9uZXQvYnJpZGdlL2JyX2NmbS5jCmluZGV4IGRlYTU2ZmZmYTFjMTkuLjlkY2M5N2Q2M2E2ZmMgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfY2ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9jZm0uYwpAQCAtMzY3LDcgJiM0MzszNjcsNyBAQCBzdGF0aWMgdTMyIGNjbV90bHZfZXh0cmFjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5kZXgsCiB9CiAKIC8qIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayAqLwotc3RhdGljIGludCBicl9jZm1fZnJhbWVfcngoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztpbnQgYnJfY2ZtX2ZyYW1lX3J4KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJdTMyIG1kbGV2ZWwsIGludGVydmFsLCBzaXplLCBpbmRleCwgbWF4OwogCWNvbnN0IHN0cnVjdCBicl9jZm1fY29tbW9uX2hkciAqaGRyOwpAQCAtNDg5LDExICYjNDM7NDg5LDYgQEAgc3RhdGljIGludCBicl9jZm1fZnJhbWVfcngoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHN0cnVjdCBicl9mcmFtZV90eXBlIGNmbV9mcmFtZV90eXBlIF9fcmVhZF9tb3N0bHkgPSB7Ci0JLnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9DRk0pLAotCS5mcmFtZV9oYW5kbGVyID0gYnJfY2ZtX2ZyYW1lX3J4LAotfTsKLQogaW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKIAkJICAgICAgY29uc3QgdTMyIGluc3RhbmNlLAogCQkgICAgICBzdHJ1Y3QgYnJfY2ZtX21lcF9jcmVhdGUgKmNvbnN0IGNyZWF0ZSwKQEAgLTU1OSw3ICYjNDM7NTU0LDcgQEAgaW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKIAlJTklUX0RFTEFZRURfV09SSygmYW1wO21lcC0mZ3Q7Y2NtX3R4X2R3b3JrLCBjY21fdHhfd29ya19leHBpcmVkKTsKIAogCWlmIChobGlzdF9lbXB0eSgmYW1wO2JyLSZndDttZXBfbGlzdCkpCi0JCWJyX2FkZF9mcmFtZShiciwgJmFtcDtjZm1fZnJhbWVfdHlwZSk7CiYjNDM7CQlicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9DRk1fRU5BQkxFRCwgdHJ1ZSk7CiAKIAlobGlzdF9hZGRfdGFpbF9yY3UoJmFtcDttZXAtJmd0O2hlYWQsICZhbXA7YnItJmd0O21lcF9saXN0KTsKIApAQCAtNTg4LDcgJiM0Mzs1ODMsNyBAQCBzdGF0aWMgdm9pZCBtZXBfZGVsZXRlX2ltcGxlbWVudGF0aW9uKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKIAlrZnJlZV9yY3UobWVwLCByY3UpOwogCiAJaWYgKGhsaXN0X2VtcHR5KCZhbXA7YnItJmd0O21lcF9saXN0KSkKLQkJYnJfZGVsX2ZyYW1lKGJyLCAmYW1wO2NmbV9mcmFtZV90eXBlKTsKJiM0MzsJCWJyX29wdF90b2dnbGUoYnIsIEJST1BUX0NGTV9FTkFCTEVELCBmYWxzZSk7CiB9CiAKIGludCBicl9jZm1fbWVwX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuYwppbmRleCBmZjU1ZGFiNzM2MzI2Li5lMDFjNDRhOTBkODRiIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMKQEAgLTUwMyw3ICYjNDM7NTAzLDYgQEAgdm9pZCBicl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2JyLSZndDtsb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2JyLSZndDtwb3J0X2xpc3QpOwogCUlOSVRfSExJU1RfSEVBRCgmYW1wO2JyLSZndDtmZGJfbGlzdCk7Ci0JSU5JVF9ITElTVF9IRUFEKCZhbXA7YnItJmd0O2ZyYW1lX3R5cGVfbGlzdCk7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX01SUCkKIAlJTklUX0hMSVNUX0hFQUQoJmFtcDtici0mZ3Q7bXJwX2xpc3QpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKaW5kZXggZDg3YTVmOWZhOTJiNy4uNzI4OTJlNWI0MDQzOSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwpAQCAtMzE3LDIwICYjNDM7MzE3LDMzIEBAIHN0YXRpYyBpbnQgbmZfaG9va19icmlkZ2VfcHJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmICoqcHNrYikKIAlyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDsKIH0KIAomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfQ0ZNKSB8fCBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTVJQKQomIzQzOy8qIENGTS9NUlAgYXJlIHVuY29tbW9uOyB0ZXN0IGJvdGggZW5hYmxlIGJpdHMgdG9nZXRoZXIgZmlyc3QuICovCiYjNDM7I2RlZmluZSBCUl9DRk1fTVJQX09QVFMgXAomIzQzOwkoKElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9DRk0pID8gQklUKEJST1BUX0NGTV9FTkFCTEVEKSA6IDBVTCkgfCBcCiYjNDM7CSAoSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX01SUCkgPyBCSVQoQlJPUFRfTVJQX0VOQUJMRUQpIDogMFVMKSkKJiM0MzsKIC8qIFJldHVybiAwIGlmIHRoZSBmcmFtZSB3YXMgbm90IHByb2Nlc3NlZCBvdGhlcndpc2UgMQogICogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrCiAgKi8KIHN0YXRpYyBpbnQgYnJfcHJvY2Vzc19mcmFtZV90eXBlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCiAJCQkJIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGJyX2ZyYW1lX3R5cGUgKnRtcDsKLQotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0bXAsICZhbXA7cC0mZ3Q7YnItJmd0O2ZyYW1lX3R5cGVfbGlzdCwgbGlzdCkKLQkJaWYgKHVubGlrZWx5KHRtcC0mZ3Q7dHlwZSA9PSBza2ItJmd0O3Byb3RvY29sKSkKLQkJCXJldHVybiB0bXAtJmd0O2ZyYW1lX2hhbmRsZXIocCwgc2tiKTsKJiM0MzsJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gcC0mZ3Q7YnI7CiAKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX0NGTSkKJiM0MzsJaWYgKHNrYi0mZ3Q7cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfQ0ZNKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9DRk1fRU5BQkxFRCkpCiYjNDM7CQlyZXR1cm4gYnJfY2ZtX2ZyYW1lX3J4KHAsIHNrYik7CiYjNDM7I2VuZGlmCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApCiYjNDM7CWlmIChza2ItJmd0O3Byb3RvY29sID09IGh0b25zKEVUSF9QX01SUCkgJmFtcDsmYW1wOwomIzQzOwkgICAgYnJfb3B0X2dldChiciwgQlJPUFRfTVJQX0VOQUJMRUQpKQomIzQzOwkJcmV0dXJuIGJyX21ycF9wcm9jZXNzKHAsIHNrYik7CiYjNDM7I2VuZGlmCiAJcmV0dXJuIDA7CiB9CiYjNDM7I2VuZGlmCiAKIC8qCiAgKiBSZXR1cm4gTlVMTCBpZiBza2IgaXMgaGFuZGxlZApAQCAtNDI1LDggJiM0Mzs0MzgsMTEgQEAgc3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgYnJfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYikKIAkJfQogCX0KIAotCWlmICh1bmxpa2VseShicl9wcm9jZXNzX2ZyYW1lX3R5cGUocCwgc2tiKSkpCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9DRk0pIHx8IElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApCiYjNDM7CWlmICh1bmxpa2VseSgocC0mZ3Q7YnItJmd0O29wdGlvbnMgJmFtcDsgQlJfQ0ZNX01SUF9PUFRTKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShwLCBza2IpKSkKIAkJcmV0dXJuIFJYX0hBTkRMRVJfUEFTUzsKJiM0MzsjZW5kaWYKIAogZm9yd2FyZDoKIAlpZiAoYnJfbXN0X2lzX2VuYWJsZWQocCkpCkBAIC00NjcsMTkgJiM0Mzs0ODMsMyBAQCByeF9oYW5kbGVyX2Z1bmNfdCAqYnJfZ2V0X3J4X2hhbmRsZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogCXJldHVybiBicl9oYW5kbGVfZnJhbWU7CiB9Ci0KLXZvaWQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KQotewotCWhsaXN0X2FkZF9oZWFkX3JjdSgmYW1wO2Z0LSZndDtsaXN0LCAmYW1wO2JyLSZndDtmcmFtZV90eXBlX2xpc3QpOwotfQotCi12b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdCkKLXsKLQlzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqdG1wOwotCi0JaGxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAmYW1wO2JyLSZndDtmcmFtZV90eXBlX2xpc3QsIGxpc3QpCi0JCWlmIChmdCA9PSB0bXApIHsKLQkJCWhsaXN0X2RlbF9yY3UoJmFtcDtmdC0mZ3Q7bGlzdCk7Ci0JCQlyZXR1cm47Ci0JCX0KLX0KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXJwLmMgYi9uZXQvYnJpZGdlL2JyX21ycC5jCmluZGV4IGVmMTZkMDcwMzkyNDEuLmRjZTZlZmE5NmM0YzYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbXJwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9tcnAuYwpAQCAtNiwxMyAmIzQzOzYsNiBAQAogc3RhdGljIGNvbnN0IHU4IG1ycF90ZXN0X2RtYWNbRVRIX0FMRU5dID0geyAweDEsIDB4MTUsIDB4NGUsIDB4MCwgMHgwLCAweDEgfTsKIHN0YXRpYyBjb25zdCB1OCBtcnBfaW5fdGVzdF9kbWFjW0VUSF9BTEVOXSA9IHsgMHgxLCAweDE1LCAweDRlLCAweDAsIDB4MCwgMHgzIH07CiAKLXN0YXRpYyBpbnQgYnJfbXJwX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0KLXN0YXRpYyBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSBtcnBfZnJhbWVfdHlwZSBfX3JlYWRfbW9zdGx5ID0gewotCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfTVJQKSwKLQkuZnJhbWVfaGFuZGxlciA9IGJyX21ycF9wcm9jZXNzLAotfTsKLQogc3RhdGljIGJvb2wgYnJfbXJwX2lzX3JpbmdfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwX3BvcnQsCiAJCQkJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqc19wb3J0LAogCQkJCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpCkBAIC00ODYsNyAmIzQzOzQ3OSw3IEBAIHN0YXRpYyB2b2lkIGJyX21ycF9kZWxfaW1wbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnAgKm1ycCkKIAlrZnJlZV9yY3UobXJwLCByY3UpOwogCiAJaWYgKGhsaXN0X2VtcHR5KCZhbXA7YnItJmd0O21ycF9saXN0KSkKLQkJYnJfZGVsX2ZyYW1lKGJyLCAmYW1wO21ycF9mcmFtZV90eXBlKTsKJiM0MzsJCWJyX29wdF90b2dnbGUoYnIsIEJST1BUX01SUF9FTkFCTEVELCBmYWxzZSk7CiB9CiAKIC8qIEFkZHMgYSBuZXcgTVJQIGluc3RhbmNlLgpAQCAtNTM2LDcgJiM0Mzs1MjksNyBAQCBpbnQgYnJfbXJwX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnBfaW5zdGFuY2UgKmluc3RhbmNlKQogCXJjdV9hc3NpZ25fcG9pbnRlcihtcnAtJmd0O3NfcG9ydCwgcCk7CiAKIAlpZiAoaGxpc3RfZW1wdHkoJmFtcDtici0mZ3Q7bXJwX2xpc3QpKQotCQlicl9hZGRfZnJhbWUoYnIsICZhbXA7bXJwX2ZyYW1lX3R5cGUpOwomIzQzOwkJYnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTVJQX0VOQUJMRUQsIHRydWUpOwogCiAJSU5JVF9ERUxBWUVEX1dPUksoJmFtcDttcnAtJmd0O3Rlc3Rfd29yaywgYnJfbXJwX3Rlc3Rfd29ya19leHBpcmVkKTsKIAlJTklUX0RFTEFZRURfV09SSygmYW1wO21ycC0mZ3Q7aW5fdGVzdF93b3JrLCBicl9tcnBfaW5fdGVzdF93b3JrX2V4cGlyZWQpOwpAQCAtMTI0MSw3ICYjNDM7MTIzNCw3IEBAIHN0YXRpYyBpbnQgYnJfbXJwX3JjdihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAogICogbm9ybWFsIGZvcndhcmRpbmcuCiAgKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sKICAqLwotc3RhdGljIGludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO2ludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCS8qIElmIHRoZXJlIGlzIG5vIE1SUCBpbnN0YW5jZSBkbyBub3JtYWwgZm9yd2FyZGluZyAqLwogCWlmIChsaWtlbHkoIXRlc3RfYml0KEJSX01SUF9BV0FSRV9CSVQsICZhbXA7cC0mZ3Q7ZmxhZ3MpKSkKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKaW5kZXggZDMzN2IxY2ZiOTgwZC4uYWZlN2MwYjRmOGZhNyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKQEAgLTQ5NSwxMiAmIzQzOzQ5NSwxMyBAQCBlbnVtIG5ldF9icmlkZ2Vfb3B0cyB7CiAJQlJPUFRfTVNUX0VOQUJMRUQsCiAJQlJPUFRfTURCX09GRkxPQURfRkFJTF9OT1RJRklDQVRJT04sCiAJQlJPUFRfRkRCX0xPQ0FMX1ZMQU5fMCwKJiM0MzsJQlJPUFRfQ0ZNX0VOQUJMRUQsCiYjNDM7CUJST1BUX01SUF9FTkFCTEVELAogfTsKIAogc3RydWN0IG5ldF9icmlkZ2UgewogCXNwaW5sb2NrX3QJCQlsb2NrOwogCXNwaW5sb2NrX3QJCQloYXNoX2xvY2s7Ci0Jc3RydWN0IGhsaXN0X2hlYWQJCWZyYW1lX3R5cGVfbGlzdDsKIAlzdHJ1Y3QgbmV0X2RldmljZQkJKmRldjsKIAl1bnNpZ25lZCBsb25nCQkJb3B0aW9uczsKIAkvKiBUaGVzZSBmaWVsZHMgYXJlIGFjY2Vzc2VkIG9uIGVhY2ggcGFja2V0ICovCkBAIC05MzIsMTYgJiM0Mzs5MzMsNiBAQCBpbnQgbmJwX2JhY2t1cF9jaGFuZ2Uoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IG5ldF9kZXZpY2UgKmJhY2t1cF9kZXYpOwogaW50IGJyX2hhbmRsZV9mcmFtZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwogcnhfaGFuZGxlcl9mdW5jX3QgKmJyX2dldF9yeF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCi1zdHJ1Y3QgYnJfZnJhbWVfdHlwZSB7Ci0JX19iZTE2CQkJdHlwZTsKLQlpbnQJCQkoKmZyYW1lX2hhbmRsZXIpKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsCi0JCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0Jc3RydWN0IGhsaXN0X25vZGUJbGlzdDsKLX07Ci0KLXZvaWQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KTsKLXZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KTsKLQogc3RhdGljIGlubGluZSBib29sIGJyX3J4X2hhbmRsZXJfY2hlY2tfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZShkZXYtJmd0O3J4X2hhbmRsZXIpID09IGJyX2dldF9yeF9oYW5kbGVyKGRldik7CkBAIC0yMDgwLDYgJiM0MzsyMDcxLDcgQEAgaW50IGJyX21ycF9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCiBib29sIGJyX21ycF9lbmFibGVkKHN0cnVjdCBuZXRfYnJpZGdlICpicik7CiB2b2lkIGJyX21ycF9wb3J0X2RlbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApOwogaW50IGJyX21ycF9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyKTsKJiM0MztpbnQgYnJfbXJwX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgYnJfbXJwX3BhcnNlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwKIAkJCSAgICAgICBzdHJ1Y3QgbmxhdHRyICphdHRyLCBpbnQgY21kLApAQCAtMjExMSw2ICYjNDM7MjEwMyw3IEBAIGludCBicl9jZm1fcGFyc2Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAogCQkgc3RydWN0IG5sYXR0ciAqYXR0ciwgaW50IGNtZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIGJvb2wgYnJfY2ZtX2NyZWF0ZWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTsKIHZvaWQgYnJfY2ZtX3BvcnRfZGVsKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCk7CiYjNDM7aW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGludCBicl9jZm1fY29uZmlnX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpOwogaW50IGJyX2NmbV9zdGF0dXNfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgc3RydWN0IG5ldF9icmlkZ2UgKmJyLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQxMwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDk2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZhY3RvcmluZyBDRk0vTVJQIEZyYW1lIEhhbmRsaW5nIGluIHRoZSBCcmlkZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3Jpbmcgb2YgaG93IENGTSAoQ29ubmVjdGl2aXR5IEZhdWx0IE1hbmFnZW1lbnQpIGFuZCBNUlAgKE11bHRpcGxlIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgZnJhbWUgaGFuZGxlcnMgYXJlIG1hbmFnZWQgd2l0aGluIHRoZSBicmlkZ2UgY29kZSAoYG5ldC9icmlkZ2UvYCkuICBQcmV2aW91c2x5LCB3ZSB3ZXJlIHVzaW5nIGEgbGlua2VkIGxpc3QgKGBmcmFtZV90eXBlX2xpc3RgKSBvbiB0aGUgYG5ldF9icmlkZ2VgIHN0cnVjdCB0byBkeW5hbWljYWxseSByZWdpc3RlciB0aGVzZSBmcmFtZSB0eXBlcyB2aWEgYGJyX2FkZF9mcmFtZWAgYW5kIGBicl9kZWxfZnJhbWVgIHVzaW5nIGBjZm1fZnJhbWVfdHlwZWAgYW5kIGBtcnBfZnJhbWVfdHlwZWAgc3RydWN0cy4gIE5vdywgdGhlIGFwcHJvYWNoIGlzIGJlaW5nIHNpbXBsaWZpZWQgYW5kIG9wdGltaXplZC4KClRoZSBrZXkgY2hhbmdlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYml0IGZsYWdzIHdpdGhpbiBgbmV0X2JyaWRnZS0mZ3Q7b3B0aW9uc2A6IGBCUk9QVF9DRk1fRU5BQkxFRGAgYW5kIGBCUk9QVF9NUlBfRU5BQkxFRGAuIEluc3RlYWQgb2YgdGhlIGxpbmtlZCBsaXN0LCBgYnJfcHJvY2Vzc19mcmFtZV90eXBlYCBpcyBub3cgdGhlIGNvcmUuIFRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgY2hlY2tzIHRoZXNlIG9wdGlvbiBiaXRzIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGNhbGwgdGhlIGFwcHJvcHJpYXRlIGhhbmRsZXJzOiBgYnJfY2ZtX2ZyYW1lX3J4YCBvciBgYnJfbXJwX3Byb2Nlc3NgLiBUaGUgYGZyYW1lX3R5cGVfbGlzdGAgYW5kIHRoZSBgc3RydWN0IGJyX2ZyYW1lX3R5cGVgIGFyZSBiZWluZyByZW1vdmVkIGFsdG9nZXRoZXIsIHN0cmVhbWxpbmluZyB0aGUgY29kZS4gSW4gYGJyX2hhbmRsZV9mcmFtZWAsIGl0IGNoZWNrcyBgKHAtJmd0O2JyLSZndDtvcHRpb25zICZhbXA7IEJSX0NGTV9NUlBfT1BUUykgJmFtcDsmYW1wOyBicl9wcm9jZXNzX2ZyYW1lX3R5cGUocCwgc2tiKWAuCgpMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgaW5kaXZpZHVhbCBmaWxlczoKCiogICBJbiBgYnJfY2ZtLmNgLCBgYnJfY2ZtX2ZyYW1lX3J4YCBpcyBubyBsb25nZXIgYHN0YXRpY2AuIFRoZSBgY2ZtX2ZyYW1lX3R5cGVgIHN0cnVjdCBpcyBnb25lLiBUaGUgcmVnaXN0cmF0aW9uIGFuZCBkZS1yZWdpc3RyYXRpb24gb2YgQ0ZNIGZ1bmN0aW9uYWxpdHkgaXMgbm93IGhhbmRsZWQgd2l0aCBgYnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfQ0ZNX0VOQUJMRUQsIHRydWUvZmFsc2UpYCBpbnN0ZWFkIG9mIGBicl9hZGRfZnJhbWVgIGFuZCBgYnJfZGVsX2ZyYW1lYC4KKiAgIGBicl9kZXZpY2UuY2Agc2VlcyB0aGUgcmVtb3ZhbCBvZiBgSU5JVF9ITElTVF9IRUFEKCZhbXA7YnItJmd0O2ZyYW1lX3R5cGVfbGlzdCk7YCBzaW5jZSB0aGUgbGlzdCBpcyBubyBsb25nZXIgcmVxdWlyZWQuCiogICBJbiBgYnJfaW5wdXQuY2AsIHdlJiMzOTt2ZSBnb3QgdGhlIGRlZmluaXRpb24gZm9yIGBCUl9DRk1fTVJQX09QVFNgIGFzIGEgYml0bWFzay4gVGhlIGBicl9wcm9jZXNzX2ZyYW1lX3R5cGVgIGZ1bmN0aW9uIGlzIG5vdyBjcnVjaWFsLCBjaGVja2luZyBmb3IgdGhlIGNvcnJlY3QgRXRoZXJuZXQgcHJvdG9jb2wgdHlwZXMgKGBFVEhfUF9DRk1gIGFuZCBgRVRIX1BfTVJQYCkgYW5kIHRoZSBjb3JyZXNwb25kaW5nIG9wdGlvbiBmbGFncyBiZWZvcmUgY2FsbGluZyB0aGUgc3BlY2lmaWMgaGFuZGxlci4gIEFnYWluLCBgYnJfYWRkX2ZyYW1lYCBhbmQgYGJyX2RlbF9mcmFtZWAgYXJlIHJlbW92ZWQuCiogICBgYnJfbXJwLmNgIG1pcnJvcnMgdGhlc2UgY2hhbmdlcy4gVGhlIGBtcnBfZnJhbWVfdHlwZWAgaXMgcmVtb3ZlZCwgYW5kIHJlZ2lzdHJhdGlvbiBpcyBkb25lIHZpYSBgYnJfb3B0X3RvZ2dsZWAgYXMgd2VsbC4gYGJyX21ycF9wcm9jZXNzYCBpcyBtYWRlIG5vbi1zdGF0aWMuCiogICBMYXN0bHksIGluIGBicl9wcml2YXRlLmhgLCB3ZSBoYXZlIHRoZSBuZXcgb3B0aW9uIGZsYWdzIGFkZGVkIHRvIGBlbnVtIG5ldF9icmlkZ2Vfb3B0c2AsIGFuZCB0aGUgcmVtb3ZhbCBvZiB0aGUgb2xkIGRhdGEgc3RydWN0dXJlcy4gVGhlIHJlbGV2YW50IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBhcmUgYWRkZWQuCgpOb3csIGEgcXVpY2ssIGJ1dCBpbXBvcnRhbnQsIHNlY3VyaXR5IGF1ZGl0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3Qgb3BlbiBhbnkgdnVsbmVyYWJpbGl0aWVzLgoKKiAgIE5vIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkOyBpdCYjMzk7cyBhbGwgYWJvdXQgcGFja2V0IHJlY2VwdGlvbiBwcm9jZXNzaW5nIGFuZCBpbnRlcm5hbCBvcHRpb24gZmxhZ3MuCiogICBUaGVyZSYjMzk7cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLiBUaGUgYGJyLSZndDtvcHRpb25zYCBzdHJ1Y3QgbWVtYmVyIGlzIHBhcnQgb2YgYHN0cnVjdCBuZXRfYnJpZGdlYCBhbmQgaW5pdGlhbGl6ZWQgdmlhIGBremFsbG9jYC4KKiAgIFdlJiMzOTtyZSBub3QgcGFzc2luZyB1bmluaXRpYWxpemVkIGRhdGEgYW55d2hlcmUuCiogICBObyBjb25kaXRpb25hbCBicmFuY2hlcyByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4KKiAgIFRoZSBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgaGFuZGxpbmcgZG9uJiMzOTt0IHNlZW0gdG8gaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgYnl0ZSBpc3N1ZXMuCgpJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYGJyX29wdF90b2dnbGVgIGFuZCBgYnJfb3B0X2dldGAgZnVuY3Rpb25zIHRvIG1ha2Ugc3VyZSB0aGV5JiMzOTtyZSB3b3JraW5nIGFzIGV4cGVjdGVkLCBidXQgdGhpcyBsb29rcyBsaWtlIGEgd2VsbC1zdHJ1Y3R1cmVkIGFuZCBwb3RlbnRpYWxseSBtb3JlIGVmZmljaWVudCBhcHByb2FjaCB0byBtYW5hZ2luZyB0aGVzZSBmcmFtZSBoYW5kbGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfb3B0XyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDc2OSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubmV0L2JyaWRnZS9ici5jPTI2OD1icl90b2dnbGVfZmRiX2xvY2FsX3ZsYW5fMChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG4tLVxubmV0L2JyaWRnZS9ici5jLTI3Mi1cbm5ldC9icmlkZ2UvYnIuYzoyNzM6XHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfRkRCX0xPQ0FMX1ZMQU5fMCkgPT0gb24pXG5uZXQvYnJpZGdlL2JyLmMtMjc0LVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvYnJpZGdlL2JyLmMtMjc5LVxubmV0L2JyaWRnZS9ici5jOjI4MDpcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX0ZEQl9MT0NBTF9WTEFOXzAsIG9uKTtcbm5ldC9icmlkZ2UvYnIuYy0yODEtXHRyZXR1cm4gMDtcbi0tXG5uZXQvYnJpZGdlL2JyLmM9Mjk0PWludCBicl9ib29sb3B0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGVudW0gYnJfYm9vbG9wdF9pZCBvcHQsIGJvb2wgb24sXG4tLVxubmV0L2JyaWRnZS9ici5jLTMwMC1cdGNhc2UgQlJfQk9PTE9QVF9OT19MTF9MRUFSTjpcbm5ldC9icmlkZ2UvYnIuYzozMDE6XHRcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX05PX0xMX0xFQVJOLCBvbik7XG5uZXQvYnJpZGdlL2JyLmMtMzAyLVx0XHRicmVhaztcbi0tXG5uZXQvYnJpZGdlL2JyLmMtMzA5LVx0Y2FzZSBCUl9CT09MT1BUX01EQl9PRkZMT0FEX0ZBSUxfTk9USUZJQ0FUSU9OOlxubmV0L2JyaWRnZS9ici5jOjMxMDpcdFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTURCX09GRkxPQURfRkFJTF9OT1RJRklDQVRJT04sIG9uKTtcbm5ldC9icmlkZ2UvYnIuYy0zMTEtXHRcdGJyZWFrO1xuLS1cbm5ldC9icmlkZ2UvYnIuYz0zMjQ9aW50IGJyX2Jvb2xvcHRfZ2V0KGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpiciwgZW51bSBicl9ib29sb3B0X2lkIG9wdClcbi0tXG5uZXQvYnJpZGdlL2JyLmMtMzI3LVx0Y2FzZSBCUl9CT09MT1BUX05PX0xMX0xFQVJOOlxubmV0L2JyaWRnZS9ici5jOjMyODpcdFx0cmV0dXJuIGJyX29wdF9nZXQoYnIsIEJST1BUX05PX0xMX0xFQVJOKTtcbm5ldC9icmlkZ2UvYnIuYy0zMjktXHRjYXNlIEJSX0JPT0xPUFRfTUNBU1RfVkxBTl9TTk9PUElORzpcbm5ldC9icmlkZ2UvYnIuYzozMzA6XHRcdHJldHVybiBicl9vcHRfZ2V0KGJyLCBCUk9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HX0VOQUJMRUQpO1xubmV0L2JyaWRnZS9ici5jLTMzMS1cdGNhc2UgQlJfQk9PTE9QVF9NU1RfRU5BQkxFOlxubmV0L2JyaWRnZS9ici5jOjMzMjpcdFx0cmV0dXJuIGJyX29wdF9nZXQoYnIsIEJST1BUX01TVF9FTkFCTEVEKTtcbm5ldC9icmlkZ2UvYnIuYy0zMzMtXHRjYXNlIEJSX0JPT0xPUFRfTURCX09GRkxPQURfRkFJTF9OT1RJRklDQVRJT046XG5uZXQvYnJpZGdlL2JyLmM6MzM0Olx0XHRyZXR1cm4gYnJfb3B0X2dldChiciwgQlJPUFRfTURCX09GRkxPQURfRkFJTF9OT1RJRklDQVRJT04pO1xubmV0L2JyaWRnZS9ici5jLTMzNS1cdGNhc2UgQlJfQk9PTE9QVF9GREJfTE9DQUxfVkxBTl8wOlxubmV0L2JyaWRnZS9ici5jOjMzNjpcdFx0cmV0dXJuIGJyX29wdF9nZXQoYnIsIEJST1BUX0ZEQl9MT0NBTF9WTEFOXzApO1xubmV0L2JyaWRnZS9ici5jLTMzNy1cdGRlZmF1bHQ6XG4tLVxubmV0L2JyaWRnZS9ici5jPTM3NT12b2lkIGJyX2Jvb2xvcHRfbXVsdGlfZ2V0KGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyLmMtMzg4LS8qIHByaXZhdGUgYnJpZGdlIG9wdGlvbnMsIGNvbnRyb2xsZWQgYnkgdGhlIGtlcm5lbCAqL1xubmV0L2JyaWRnZS9ici5jOjM4OTp2b2lkIGJyX29wdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBlbnVtIG5ldF9icmlkZ2Vfb3B0cyBvcHQsIGJvb2wgb24pXG5uZXQvYnJpZGdlL2JyLmMtMzkwLXtcbm5ldC9icmlkZ2UvYnIuYzozOTE6XHRib29sIGN1ciA9ICEhYnJfb3B0X2dldChiciwgb3B0KTtcbm5ldC9icmlkZ2UvYnIuYy0zOTItXG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYz0yNz12b2lkIGJyX3JlY2FsY3VsYXRlX25laWdoX3N1cHByZXNzX2VuYWJsZWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxuLS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMzgtXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jOjM5Olx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTkVJR0hfU1VQUFJFU1NfRU5BQkxFRCwgbmVpZ2hfc3VwcHJlc3MpO1xubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy00MC19XG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYz0xMjU9dm9pZCBicl9kb19wcm94eV9zdXBwcmVzc19hcnAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMTYwLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzoxNjE6XHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTkVJR0hfU1VQUFJFU1NfRU5BQkxFRCkpIHtcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMTYyLVx0XHRpZiAoYnJfaXNfbmVpZ2hfc3VwcHJlc3NfZW5hYmxlZChwLCB2aWQpKVxuLS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMTg2LVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzoxODc6XHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTkVJR0hfU1VQUFJFU1NfRU5BQkxFRCkgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTE4OC1cdCAgICBicl9pc19sb2NhbF9pcCh2bGFuZGV2LCB0aXApKSB7XG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy0yMjktXHRcdFx0aWYgKHJlcGxpZWQgfHxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM6MjMwOlx0XHRcdCAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9ORUlHSF9TVVBQUkVTU19FTkFCTEVEKSlcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMjMxLVx0XHRcdFx0QlJfSU5QVVRfU0tCX0NCKHNrYiktXHUwMDNlcHJveHlhcnBfcmVwbGllZCA9IDE7XG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYz00MTU9dm9pZCBicl9kb19zdXBwcmVzc19uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy01MDMtXHRcdFx0aWYgKHJlcGxpZWQgfHxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM6NTA0Olx0XHRcdCAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9ORUlHSF9TVVBQUkVTU19FTkFCTEVEKSlcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtNTA1LVx0XHRcdFx0QlJfSU5QVVRfU0tCX0NCKHNrYiktXHUwMDNlcHJveHlhcnBfcmVwbGllZCA9IDE7XG4tLVxubmV0L2JyaWRnZS9icl9jZm0uYz00OTI9aW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX2NmbS5jLTU1Ni1cdGlmIChobGlzdF9lbXB0eShcdTAwMjZici1cdTAwM2VtZXBfbGlzdCkpXG5uZXQvYnJpZGdlL2JyX2NmbS5jOjU1NzpcdFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfQ0ZNX0VOQUJMRUQsIHRydWUpO1xubmV0L2JyaWRnZS9icl9jZm0uYy01NTgtXG4tLVxubmV0L2JyaWRnZS9icl9jZm0uYz01NjQ9c3RhdGljIHZvaWQgbWVwX2RlbGV0ZV9pbXBsZW1lbnRhdGlvbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9jZm0uYy01ODUtXHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2YnItXHUwMDNlbWVwX2xpc3QpKVxubmV0L2JyaWRnZS9icl9jZm0uYzo1ODY6XHRcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX0NGTV9FTkFCTEVELCBmYWxzZSk7XG5uZXQvYnJpZGdlL2JyX2NmbS5jLTU4Ny19XG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0zMD1uZXRkZXZfdHhfdCBicl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtNzQtXHQgICAgIGV0aF9oZHIoc2tiKS1cdTAwM2VoX3Byb3RvID09IGh0b25zKEVUSF9QX1JBUlApKSBcdTAwMjZcdTAwMjZcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6NzU6XHQgICAgYnJfb3B0X2dldChiciwgQlJPUFRfTkVJR0hfU1VQUFJFU1NfRU5BQkxFRCkpIHtcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtNzYtXHRcdGJyX2RvX3Byb3h5X3N1cHByZXNzX2FycChza2IsIGJyLCB2aWQsIE5VTEwpO1xuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtNzgtXHRcdCAgIHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSBcdTAwMjZcdTAwMjZcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6Nzk6XHRcdCAgIGJyX29wdF9nZXQoYnIsIEJST1BUX05FSUdIX1NVUFBSRVNTX0VOQUJMRUQpIFx1MDAyNlx1MDAyNlxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy04MC1cdFx0ICAgcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgJiM0Mztcbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTE2ND1zdGF0aWMgaW50IGJyX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNzItXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE3MzpcdGlmIChicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE3NC1cdFx0YnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMoYnIpO1xuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM9MTg5PXN0YXRpYyBpbnQgYnJfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE5NS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MTk2Olx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSlcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTk3LVx0XHRicl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnMoYnIpO1xuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM9MjA0PXN0YXRpYyBpbnQgYnJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTIxMC1cdC8qIHRoaXMgZmxhZyB3aWxsIGJlIGNsZWFyZWQgaWYgdGhlIE1UVSB3YXMgYXV0b21hdGljYWxseSBhZGp1c3RlZCAqL1xubmV0L2JyaWRnZS9icl9kZXZpY2UuYzoyMTE6XHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NVFVfU0VUX0JZX1VTRVIsIHRydWUpO1xubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0yMTItI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG4tLVxubmV0L2JyaWRnZS9icl9mZGIuYz00NjA9dm9pZCBicl9mZGJfY2hhbmdlYWRkcihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXdhZGRyKVxuLS1cbm5ldC9icmlkZ2UvYnJfZmRiLmMtNDY3LVxubmV0L2JyaWRnZS9icl9mZGIuYzo0Njg6XHRsb2NhbF92bGFuXzAgPSBicl9vcHRfZ2V0KGJyLCBCUk9QVF9GREJfTE9DQUxfVkxBTl8wKTtcbm5ldC9icmlkZ2UvYnJfZmRiLmMtNDY5LVxuLS1cbm5ldC9icmlkZ2UvYnJfZmRiLmM9NTA2PXZvaWQgYnJfZmRiX2NoYW5nZV9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGNvbnN0IHU4ICpuZXdhZGRyKVxuLS1cbm5ldC9icmlkZ2UvYnJfZmRiLmMtNTEyLVxubmV0L2JyaWRnZS9icl9mZGIuYzo1MTM6XHRsb2NhbF92bGFuXzAgPSBicl9vcHRfZ2V0KGJyLCBCUk9QVF9GREJfTE9DQUxfVkxBTl8wKTtcbm5ldC9icmlkZ2UvYnJfZmRiLmMtNTE0LVxuLS1cbm5ldC9icmlkZ2UvYnJfaWYuYz01MjA9dm9pZCBicl9tdHVfYXV0b19hZGp1c3Qoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxuLS1cbm5ldC9icmlkZ2UvYnJfaWYuYy01MjQtXHQvKiBpZiB0aGUgYnJpZGdlIE1UVSB3YXMgbWFudWFsbHkgY29uZmlndXJlZCBkb24mIzM5O3QgbWVzcyB3aXRoIGl0ICovXG5uZXQvYnJpZGdlL2JyX2lmLmM6NTI1Olx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01UVV9TRVRfQllfVVNFUikpXG5uZXQvYnJpZGdlL2JyX2lmLmMtNTI2LVx0XHRyZXR1cm47XG4tLVxubmV0L2JyaWRnZS9icl9pZi5jLTUzMS1cdGRldl9zZXRfbXR1KGJyLVx1MDAzZWRldiwgYnJfbXR1X21pbihicikpO1xubmV0L2JyaWRnZS9icl9pZi5jOjUzMjpcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01UVV9TRVRfQllfVVNFUiwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl9pZi5jLTUzMy19XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTc2PWludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xNzQtXHRcdCAgIHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSBcdTAwMjZcdTAwMjZcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzoxNzU6XHRcdCAgIGJyX29wdF9nZXQoYnIsIEJST1BUX05FSUdIX1NVUFBSRVNTX0VOQUJMRUQpIFx1MDAyNlx1MDAyNlxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTE3Ni1cdFx0ICAgcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgJiM0Mztcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMjA1LVx0XHRpZiAodW5saWtlbHkoIWRzdCBcdTAwMjZcdTAwMjYgdmlkIFx1MDAyNlx1MDAyNlxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjIwNjpcdFx0XHQgICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX0ZEQl9MT0NBTF9WTEFOXzApKSkge1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTIwNy1cdFx0XHRkc3QgPSBicl9mZGJfZmluZF9yY3UoYnIsIGV0aF9oZHIoc2tiKS1cdTAwM2VoX2Rlc3QsIDApO1xuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz0yNDU9c3RhdGljIHZvaWQgX19icl9oYW5kbGVfbG9jYWxfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTI1Mi1cdCAgICBuYnBfc3RhdGVfc2hvdWxkX2xlYXJuKHApIFx1MDAyNlx1MDAyNlxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjI1MzpcdCAgICAhYnJfb3B0X2dldChwLVx1MDAzZWJyLCBCUk9QVF9OT19MTF9MRUFSTikgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMjU0LVx0ICAgIGJyX3Nob3VsZF9sZWFybihwLCBza2IsIFx1MDAyNnZpZCkpXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTMyOT1zdGF0aWMgaW50IGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMzUtXHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0NGTSkgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MzM2Olx0ICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX0NGTV9FTkFCTEVEKSlcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMzctXHRcdHJldHVybiBicl9jZm1fZnJhbWVfcngocCwgc2tiKTtcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzQwLVx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9NUlApIFx1MDAyNlx1MDAyNlxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjM0MTpcdCAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9NUlBfRU5BQkxFRCkpXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzQyLVx0XHRyZXR1cm4gYnJfbXJwX3Byb2Nlc3MocCwgc2tiKTtcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jPTcwOD1fX2JyX21kYl9jaG9vc2VfY29udGV4dChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy03MTQtXG5uZXQvYnJpZGdlL2JyX21kYi5jOjcxNTpcdGlmICghYnJfb3B0X2dldChiciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSkge1xubmV0L2JyaWRnZS9icl9tZGIuYy03MTYtXHRcdGJybWN0eCA9IFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9jdHg7XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz0xMjMxPXN0YXRpYyBpbnQgYnJfbWRiX2NvbmZpZ19pbml0KHN0cnVjdCBicl9tZGJfY29uZmlnICpjZmcsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy0xMjQ4LVxubmV0L2JyaWRnZS9icl9tZGIuYzoxMjQ5Olx0aWYgKCFicl9vcHRfZ2V0KGNmZy1cdTAwM2ViciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpKSB7XG5uZXQvYnJpZGdlL2JyX21kYi5jLTEyNTAtXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0JyaWRnZSYjMzk7cyBtdWx0aWNhc3QgcHJvY2Vzc2luZyBpcyBkaXNhYmxlZFwmIzM0Oyk7XG4tLVxubmV0L2JyaWRnZS9icl9tcnAuYz00MTk9c3RhdGljIHZvaWQgYnJfbXJwX2RlbF9pbXBsKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycCAqbXJwKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXJwLmMtNDgxLVx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1ycF9saXN0KSlcbm5ldC9icmlkZ2UvYnJfbXJwLmM6NDgyOlx0XHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NUlBfRU5BQkxFRCwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl9tcnAuYy00ODMtfVxuLS1cbm5ldC9icmlkZ2UvYnJfbXJwLmM9NDg4PWludCBicl9tcnBfYWRkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycF9pbnN0YW5jZSAqaW5zdGFuY2UpXG4tLVxubmV0L2JyaWRnZS9icl9tcnAuYy01MzEtXHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2YnItXHUwMDNlbXJwX2xpc3QpKVxubmV0L2JyaWRnZS9icl9tcnAuYzo1MzI6XHRcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01SUF9FTkFCTEVELCB0cnVlKTtcbm5ldC9icmlkZ2UvYnJfbXJwLmMtNTMzLVxuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmM9MTY9Ym9vbCBicl9tc3RfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjAtXG5uZXQvYnJpZGdlL2JyX21zdC5jOjIxOlx0cmV0dXJuIGJyX29wdF9nZXQobmV0ZGV2X3ByaXYoZGV2KSwgQlJPUFRfTVNUX0VOQUJMRUQpO1xubmV0L2JyaWRnZS9icl9tc3QuYy0yMi19XG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYz0yNT12b2lkIGJyX21zdF91bmluaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxubmV0L2JyaWRnZS9icl9tc3QuYy0yNi17XG5uZXQvYnJpZGdlL2JyX21zdC5jOjI3Olx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01TVF9FTkFCTEVEKSlcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjgtXHRcdHN0YXRpY19icmFuY2hfZGVjKFx1MDAyNmJyX21zdF91c2VkKTtcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jPTMxPWludCBicl9tc3RfZ2V0X2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IG1zdGksIHVuc2lnbmVkIGxvbmcgKnZpZHMpXG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYy00Mi1cdGJyID0gbmV0ZGV2X3ByaXYoZGV2KTtcbm5ldC9icmlkZ2UvYnJfbXN0LmM6NDM6XHRpZiAoIWJyX29wdF9nZXQoYnIsIEJST1BUX01TVF9FTkFCTEVEKSlcbm5ldC9icmlkZ2UvYnJfbXN0LmMtNDQtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmM9NTc9aW50IGJyX21zdF9nZXRfc3RhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IG1zdGksIHU4ICpzdGF0ZSlcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTY1LVx0cCA9IGJyX3BvcnRfZ2V0X2NoZWNrX3J0bmwoZGV2KTtcbm5ldC9icmlkZ2UvYnJfbXN0LmM6NjY6XHRpZiAoIXAgfHwgIWJyX29wdF9nZXQocC1cdTAwM2ViciwgQlJPUFRfTVNUX0VOQUJMRUQpKVxubmV0L2JyaWRnZS9icl9tc3QuYy02Ny1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYz0yMDM9aW50IGJyX21zdF9zZXRfZW5hYmxlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYy0yMjUtXG5uZXQvYnJpZGdlL2JyX21zdC5jOjIyNjpcdGlmIChicl9vcHRfZ2V0KGJyLCBCUk9QVF9NU1RfRU5BQkxFRCkgPT0gb24pXG5uZXQvYnJpZGdlL2JyX21zdC5jLTIyNy1cdFx0cmV0dXJuIDA7XG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYy0yMzctXG5uZXQvYnJpZGdlL2JyX21zdC5jOjIzODpcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01TVF9FTkFCTEVELCBvbik7XG5uZXQvYnJpZGdlL2JyX21zdC5jLTIzOS1cdHJldHVybiAwO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmM9MzM0PWludCBicl9tc3RfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICptc3RfYXR0cixcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTM0MC1cbm5ldC9icmlkZ2UvYnJfbXN0LmM6MzQxOlx0aWYgKCFicl9vcHRfZ2V0KHAtXHUwMDNlYnIsIEJST1BUX01TVF9FTkFCTEVEKSkge1xubmV0L2JyaWRnZS9icl9tc3QuYy0zNDItXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0NhbiYjMzk7dCBtb2RpZnkgTVNUIHN0YXRlIHdoZW4gTVNUIGlzIGRpc2FibGVkXCYjMzQ7KTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTE0OT1icl9tZGJfZW50cnlfc2tiX2dldChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTU0LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxNTU6XHRpZiAoIWJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSB8fFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNTYtXHQgICAgYnJfbXVsdGljYXN0X2N0eF92bGFuX2dsb2JhbF9kaXNhYmxlZChicm1jdHgpKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjEwPWJyX211bHRpY2FzdF9wZ190b19wb3J0X2N0eChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwZylcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxOC1cdGlmICghcGctXHUwMDNla2V5LmFkZHIudmlkIHx8XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIxOTpcdCAgICAhYnJfb3B0X2dldChwZy1cdTAwM2VrZXkucG9ydC1cdTAwM2ViciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIwLVx0XHRnb3RvIG91dDtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTkyND1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmJyX2lwNF9tdWx0aWNhc3RfYWxsb2NfcXVlcnkoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTk5NS1cdGlwaC1cdTAwM2Vwcm90b2NvbCA9IElQUFJPVE9fSUdNUDtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6OTk2Olx0aXBoLVx1MDAzZXNhZGRyID0gYnJfb3B0X2dldChicm1jdHgtXHUwMDNlYnIsIEJST1BUX01VTFRJQ0FTVF9RVUVSWV9VU0VfSUZBRERSKSA/XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTk5Ny1cdFx0ICAgICBpbmV0X3NlbGVjdF9hZGRyKGJybWN0eC1cdTAwM2Vici1cdTAwM2VkZXYsIDAsIFJUX1NDT1BFX0xJTkspIDogMDtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTEwNjg9c3RhdGljIHN0cnVjdCBza19idWZmICpicl9pcDZfbXVsdGljYXN0X2FsbG9jX3F1ZXJ5KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xMTQzLVx0XHRrZnJlZV9za2Ioc2tiKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTE0NDpcdFx0YnJfb3B0X3RvZ2dsZShicm1jdHgtXHUwMDNlYnIsIEJST1BUX0hBU19JUFY2X0FERFIsIGZhbHNlKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTE0NS1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xMTQ3LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxMTQ4Olx0YnJfb3B0X3RvZ2dsZShicm1jdHgtXHUwMDNlYnIsIEJST1BUX0hBU19JUFY2X0FERFIsIHRydWUpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xMTQ5LVx0aXB2Nl9ldGhfbWNfbWFwKFx1MDAyNmlwNmgtXHUwMDNlZGFkZHIsIGV0aC1cdTAwM2VoX2Rlc3QpO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTI2OT1zdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKmJyX211bHRpY2FzdF9uZXdfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTI4MS1cdFx0YnJfbWNfZGlzYWJsZWRfdXBkYXRlKGJyLVx1MDAzZWRldiwgZmFsc2UsIE5VTEwpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxMjgyOlx0XHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xMjgzLVx0XHRyZXR1cm4gRVJSX1BUUigtRTJCSUcpO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTcyMz1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfcXVlcmllcl9leHBpcmVkKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNzI4LVx0ICAgIGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoYnJtY3R4KSB8fFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxNzI5Olx0ICAgICFicl9vcHRfZ2V0KGJybWN0eC1cdTAwM2ViciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNzMwLVx0XHRnb3RvIG91dDtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTE4OTk9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3NlbmRfcXVlcnkoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE5MDgtXHRpZiAoIWJyX211bHRpY2FzdF9jdHhfc2hvdWxkX3VzZShicm1jdHgsIHBtY3R4KSB8fFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxOTA5Olx0ICAgICFicl9vcHRfZ2V0KGJybWN0eC1cdTAwM2ViciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpIHx8XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE5MTAtXHQgICAgIWJybWN0eC1cdTAwM2VtdWx0aWNhc3RfcXVlcmllcilcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTE5ODc9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfcmV4bWl0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTk5OC1cdGlmICghbmV0aWZfcnVubmluZyhici1cdTAwM2VkZXYpIHx8IGhsaXN0X3VuaGFzaGVkKFx1MDAyNnBnLVx1MDAzZW1nbGlzdCkgfHxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTk5OTpcdCAgICAhYnJfb3B0X2dldChiciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMDAwLVx0XHRnb3RvIG91dDtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxMDM9aW50IGJyX211bHRpY2FzdF9hZGRfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjExMC1cdGVyciA9IGJyX21jX2Rpc2FibGVkX3VwZGF0ZShwb3J0LVx1MDAzZWRldixcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjExMTpcdFx0XHRcdCAgICBicl9vcHRfZ2V0KHBvcnQtXHUwMDNlYnIsXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxMTItXHRcdFx0XHRcdCAgICAgICBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCksXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTQ5PXN0YXRpYyB2b2lkIF9fYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNTQtXHRicm1jdHggPSBicl9tdWx0aWNhc3RfcG9ydF9jdHhfZ2V0X2dsb2JhbChwbWN0eCk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIxNTU6XHRpZiAoIWJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSB8fFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTU2LVx0ICAgICFuZXRpZl9ydW5uaW5nKGJyLVx1MDAzZWRldikpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMjIxPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBib29sIG9uKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIyMy0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjI0Olx0aWYgKGJyX29wdF9nZXQocG9ydC1cdTAwM2ViciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSkge1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjI1LVx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2Zztcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIyOTE9c3RhdGljIHZvaWQgX19ncnBfc3JjX3F1ZXJ5X21hcmtlZF9hbmRfcmV4bWl0KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMzAwLVx0aWYgKCFuZXRpZl9ydW5uaW5nKGJybWN0eC1cdTAwM2Vici1cdTAwM2VkZXYpIHx8XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIzMDE6XHQgICAgIWJyX29wdF9nZXQoYnJtY3R4LVx1MDAzZWJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIzMDItXHRcdHJldHVybjtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIzMzg9c3RhdGljIHZvaWQgX19ncnBfc2VuZF9xdWVyeV9hbmRfcmV4bWl0KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMzQ1LVx0aWYgKCFuZXRpZl9ydW5uaW5nKGJybWN0eC1cdTAwM2Vici1cdTAwM2VkZXYpIHx8XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIzNDY6XHQgICAgIWJyX29wdF9nZXQoYnJtY3R4LVx1MDAzZWJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIzNDctXHRcdHJldHVybjtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTMyNDQ9aW50IGJyX211bHRpY2FzdF9kdW1wX3F1ZXJpZXJfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTMyNTEtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjMyNTI6XHRpZiAoIWJyX29wdF9nZXQoYnJtY3R4LVx1MDAzZWJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkgfHxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzI1My1cdCAgICBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKGJybWN0eCkpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0zODY4PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9lcnJfY291bnQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzg3NC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6Mzg3NTpcdGlmICghYnJfb3B0X2dldChiciwgQlJPUFRfTVVMVElDQVNUX1NUQVRTX0VOQUJMRUQpKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zODc2LVx0XHRyZXR1cm47XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MDU3PWludCBicl9tdWx0aWNhc3RfcmN2KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICoqYnJtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDA2Ni1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDA2NzpcdGlmICghYnJfb3B0X2dldCgoKmJybWN0eCktXHUwMDNlYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDA2OC1cdFx0cmV0dXJuIDA7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQwNjktXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQwNzA6XHRpZiAoYnJfb3B0X2dldCgoKmJybWN0eCktXHUwMDNlYnIsIEJST1BUX01DQVNUX1ZMQU5fU05PT1BJTkdfRU5BQkxFRCkgXHUwMDI2XHUwMDI2IHZsYW4pIHtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDA3MS1cdFx0Y29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqbWFzdGVydjtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQyMDY9dm9pZCBicl9tdWx0aWNhc3RfaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjExLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MjEyOlx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQsIHRydWUpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MjEzOlx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfSEFTX0lQVjZfQUREUiwgdHJ1ZSk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQyMTQtXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MjgzPXN0YXRpYyB2b2lkIF9fYnJfbXVsdGljYXN0X29wZW5fcXVlcnkoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDI4Ny1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDI4ODpcdGlmICghYnJfb3B0X2dldChiciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Mjg5LVx0XHRyZXR1cm47XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MzAyPXZvaWQgYnJfbXVsdGljYXN0X29wZW4oc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDMwNS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDMwNjpcdGlmIChicl9vcHRfZ2V0KGJyLCBCUk9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HX0VOQUJMRUQpKSB7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzMDctXHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDM0MD12b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTggc3RhdGUpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzUyLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzUzOlx0aWYgKCFicl9vcHRfZ2V0KGJyLCBCUk9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HX0VOQUJMRUQpKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzU0LVx0XHRyZXR1cm47XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NDMxPWludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQzNy1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQzODpcdGlmIChicl9vcHRfZ2V0KGJyLCBCUk9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HX0VOQUJMRUQpID09IG9uKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDM5LVx0XHRyZXR1cm4gMDtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQ0MC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQ0MTpcdGlmIChvbiBcdTAwMjZcdTAwMjYgIWJyX29wdF9nZXQoYnIsIEJST1BUX1ZMQU5fRU5BQkxFRCkpIHtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQ0Mi1cdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7Q2Fubm90IGVuYWJsZSBtdWx0aWNhc3QgdmxhbiBzbm9vcGluZyB3aXRoIHZsYW4gZmlsdGVyaW5nIGRpc2FibGVkXCYjMzQ7KTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0NDktXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0NTA6XHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HX0VOQUJMRUQsIG9uKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQ1MS1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ0ODY9dm9pZCBicl9tdWx0aWNhc3Rfc3RvcChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDg5LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDkwOlx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01DQVNUX1ZMQU5fU05PT1BJTkdfRU5BQkxFRCkpIHtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQ5MS1cdFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NzA4PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9lbmFibGVfYWxsX3BvcnRzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ3MTEtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ3MTI6XHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDcxMy1cdFx0cmV0dXJuO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDcxOT1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9hbGxfcG9ydHMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDcyMi1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDcyMzpcdGlmIChicl9vcHRfZ2V0KGJyLCBCUk9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HX0VOQUJMRUQpKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzI0LVx0XHRyZXR1cm47XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NzMwPWludCBicl9tdWx0aWNhc3RfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzM2LVx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDczNzpcdGlmICghIWJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSA9PSAhIXZhbClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDczOC1cdFx0Z290byB1bmxvY2s7XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzQ1LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NzQ2Olx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQsICEhdmFsKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDc0NzpcdGlmICghYnJfb3B0X2dldChiciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpKSB7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ3NDgtXHRcdGNoYW5nZV9zbm9vcGVycyA9IHRydWU7XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Nzc2LVx0aWYgKGNoYW5nZV9zbm9vcGVycykge1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0Nzc3Olx0XHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Nzc4LVx0XHRcdGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzKGJyKTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ3ODY9Ym9vbCBicl9tdWx0aWNhc3RfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDc4OS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDc5MDpcdHJldHVybiAhIWJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDc5MS19XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz01MjA3PXZvaWQgYnJfbXVsdGljYXN0X2NvdW50KHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTUyMTMtXHQvKiBpZiBtdWx0aWNhc3RfZGlzYWJsZWQgaXMgdHJ1ZSB0aGVuIGlnbXAgdHlwZSBjYW4mIzM5O3QgYmUgc2V0ICovXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjUyMTQ6XHRpZiAoIXR5cGUgfHwgIWJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9TVEFUU19FTkFCTEVEKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTIxNS1cdFx0cmV0dXJuO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9NDgzPXN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfcHJlX3JvdXRpbmcodm9pZCAqcHJpdixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTUwNC1cdFx0aWYgKCFicm5ldC1cdTAwM2VjYWxsX2lwNnRhYmxlcyBcdTAwMjZcdTAwMjZcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NTA1Olx0XHQgICAgIWJyX29wdF9nZXQoYnIsIEJST1BUX05GX0NBTExfSVA2VEFCTEVTKSlcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTA2LVx0XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MTUtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjUxNjpcdGlmICghYnJuZXQtXHUwMDNlY2FsbF9pcHRhYmxlcyBcdTAwMjZcdTAwMjYgIWJyX29wdF9nZXQoYnIsIEJST1BUX05GX0NBTExfSVBUQUJMRVMpKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MTctXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz03Mjg9c3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9mb3J3YXJkX2FycChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzQxLVx0YnJuZXQgPSBuZXRfZ2VuZXJpYyhzdGF0ZS1cdTAwM2VuZXQsIGJybmZfbmV0X2lkKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NzQyOlx0aWYgKCFicm5ldC1cdTAwM2VjYWxsX2FycHRhYmxlcyBcdTAwMjZcdTAwMjYgIWJyX29wdF9nZXQoYnIsIEJST1BUX05GX0NBTExfQVJQVEFCTEVTKSlcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzQzLVx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTQ1OD1zdGF0aWMgaW50IGJyX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNTk0LVx0aWYgKChmaWx0ZXJfbWFzayBcdTAwMjYgUlRFWFRfRklMVEVSX01TVCkgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzo1OTU6XHQgICAgYnJfb3B0X2dldChiciwgQlJPUFRfTVNUX0VOQUJMRUQpIFx1MDAyNlx1MDAyNiBwb3J0KSB7XG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy01OTYtXHRcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnID0gbmJwX3ZsYW5fZ3JvdXAocG9ydCk7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9MTI5NT1zdGF0aWMgaW50IGJyX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmJyZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE0MjQtXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZWxvY2spO1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTQyNTpcdFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfR1JPVVBfQUREUl9TRVQsIHRydWUpO1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTQyNi1cdFx0YnJfcmVjYWxjdWxhdGVfZndkX21hc2soYnIpO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE0NTgtXHRcdHZhbCA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0JSX01DQVNUX1FVRVJZX1VTRV9JRkFERFJdKTtcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE0NTk6XHRcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01VTFRJQ0FTVF9RVUVSWV9VU0VfSUZBRERSLCAhIXZhbCk7XG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNDYwLVx0fVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE1MjktXHRcdG1jYXN0X3N0YXRzID0gbmxhX2dldF91OChkYXRhW0lGTEFfQlJfTUNBU1RfU1RBVFNfRU5BQkxFRF0pO1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTUzMDpcdFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTVVMVElDQVNUX1NUQVRTX0VOQUJMRUQsICEhbWNhc3Rfc3RhdHMpO1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTUzMS1cdH1cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNTU4LVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTU1OTpcdFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTkZfQ0FMTF9JUFRBQkxFUywgISF2YWwpO1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTU2MC1cdH1cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNTY0LVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTU2NTpcdFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTkZfQ0FMTF9JUDZUQUJMRVMsICEhdmFsKTtcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE1NjYtXHR9XG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTU3MC1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE1NzE6XHRcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX05GX0NBTExfQVJQVEFCTEVTLCAhIXZhbCk7XG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNTcyLVx0fVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTE2Nzg9c3RhdGljIGludCBicl9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmJyZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE3MzQtXHQgICAgbmxhX3B1dF91OChza2IsIElGTEFfQlJfVkxBTl9TVEFUU19FTkFCTEVELFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTczNTpcdFx0ICAgICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX1ZMQU5fU1RBVFNfRU5BQkxFRCkpIHx8XG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNzM2LVx0ICAgIG5sYV9wdXRfdTgoc2tiLCBJRkxBX0JSX1ZMQU5fU1RBVFNfUEVSX1BPUlQsXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxNzM3Olx0XHQgICAgICAgYnJfb3B0X2dldChiciwgQlJPUFRfVkxBTl9TVEFUU19QRVJfUE9SVCkpKVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTczOC1cdFx0cmV0dXJuIC1FTVNHU0laRTtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNzQzLVx0ICAgIG5sYV9wdXRfdTgoc2tiLCBJRkxBX0JSX01DQVNUX1NOT09QSU5HLFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTc0NDpcdFx0ICAgICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSkgfHxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE3NDUtXHQgICAgbmxhX3B1dF91OChza2IsIElGTEFfQlJfTUNBU1RfUVVFUllfVVNFX0lGQUREUixcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE3NDY6XHRcdCAgICAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfUVVFUllfVVNFX0lGQUREUikpIHx8XG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNzQ3LVx0ICAgIG5sYV9wdXRfdTgoc2tiLCBJRkxBX0JSX01DQVNUX1FVRVJJRVIsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTc0OS1cdCAgICBubGFfcHV0X3U4KHNrYiwgSUZMQV9CUl9NQ0FTVF9TVEFUU19FTkFCTEVELFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTc1MDpcdFx0ICAgICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9TVEFUU19FTkFCTEVEKSkgfHxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE3NTEtXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX0JSX01DQVNUX0hBU0hfRUxBU1RJQ0lUWSwgUkhUX0VMQVNUSUNJVFkpIHx8XG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTc5My1cdGlmIChubGFfcHV0X3U4KHNrYiwgSUZMQV9CUl9ORl9DQUxMX0lQVEFCTEVTLFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTc5NDpcdFx0ICAgICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX05GX0NBTExfSVBUQUJMRVMpID8gMSA6IDApIHx8XG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNzk1LVx0ICAgIG5sYV9wdXRfdTgoc2tiLCBJRkxBX0JSX05GX0NBTExfSVA2VEFCTEVTLFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTc5NjpcdFx0ICAgICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX05GX0NBTExfSVA2VEFCTEVTKSA/IDEgOiAwKSB8fFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTc5Ny1cdCAgICBubGFfcHV0X3U4KHNrYiwgSUZMQV9CUl9ORl9DQUxMX0FSUFRBQkxFUyxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE3OTg6XHRcdCAgICAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9ORl9DQUxMX0FSUFRBQkxFUykgPyAxIDogMCkpXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNzk5LVx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTc1Nz1zdGF0aWMgaW5saW5lIGludCBicl9hZnNwZWNfY21kX3RvX3J0bShpbnQgY21kKVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTc2OC1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjc2OTpzdGF0aWMgaW5saW5lIGludCBicl9vcHRfZ2V0KGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTc3MC1cdFx0XHQgICAgIGVudW0gbmV0X2JyaWRnZV9vcHRzIG9wdClcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD03ODE9dm9pZCBicl9ib29sb3B0X211bHRpX2dldChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC03ODItXHRcdFx0ICBzdHJ1Y3QgYnJfYm9vbG9wdF9tdWx0aSAqYm0pO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NzgzOnZvaWQgYnJfb3B0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGVudW0gbmV0X2JyaWRnZV9vcHRzIG9wdCwgYm9vbCBvbik7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC03ODQtXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTE1OD1fX2JyX211bHRpY2FzdF9xdWVyaWVyX2V4aXN0cyhzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTExNjQtXHRpZiAoYnJtY3R4LVx1MDAzZW11bHRpY2FzdF9xdWVyaWVyKSB7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMTY1Olx0XHRpZiAoaXNfaXB2NiBcdTAwMjZcdTAwMjYgIWJyX29wdF9nZXQoYnJtY3R4LVx1MDAzZWJyLCBCUk9QVF9IQVNfSVBWNl9BRERSKSlcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTExNjYtXHRcdFx0b3duX3F1ZXJpZXJfZW5hYmxlZCA9IGZhbHNlO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTEyNjM9YnJfbXVsdGljYXN0X2N0eF92bGFuX2dsb2JhbF9kaXNhYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4KVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEyNjUtXHRyZXR1cm4gYnJfbXVsdGljYXN0X2N0eF9pc192bGFuKGJybWN0eCkgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMjY2Olx0ICAgICAgICghYnJfb3B0X2dldChicm1jdHgtXHUwMDNlYnIsIEJST1BUX01DQVNUX1ZMQU5fU05PT1BJTkdfRU5BQkxFRCkgfHxcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgwMAoJCQkJCQkJb3V0cHV0OiAxODIKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogQSBDbGVhbiBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIHRoaXMgb3ZlciwgYW5kIGl0JiMzOTtzIHByZXR0eSBjbGVhci1jdXQuIFRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IHRpZHlpbmcgdXAgdGhlIGJyaWRnZSYjMzk7cyBwYWNrZXQgaW5wdXQgcGF0aC4gVGhlIGdpc3QgaXMgcmVtb3ZpbmcgdGhlIG9sZCBkeW5hbWljIGZyYW1lIGhhbmRsZXIgc3lzdGVtIChgYnJfZnJhbWVfdHlwZWAgYW5kIHRoZSBsaW5rZWQgbGlzdCkgYW5kIHJlcGxhY2luZyBpdCB3aXRoIGRpcmVjdCwgc3RhdGljIGNoZWNrcyBhZ2FpbnN0IHRoZSBicmlkZ2UmIzM5O3MgYG9wdGlvbnNgIGJpdG1hc2suIFdlJiMzOTtyZSB0YWxraW5nIGBCUk9QVF9DRk1fRU5BQkxFRGAgYW5kIGBCUk9QVF9NUlBfRU5BQkxFRGAgZmxhZ3MsIG5vdGhpbmcgZmFuY3kuCgpGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGlzIGlzIGEgcHVyZSByZWZhY3RvcmluZyBhbmQgb3B0aW1pemF0aW9uIGVmZm9ydC4gVGhlcmUgYXJlbiYjMzk7dCBhbnkgbmV3IHN0cnVjdHMgYmVpbmcgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2QgdGhpbmcuIEkgY2FuJiMzOTt0IHNwb3QgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGJyYW5jaGVzLCBhbmQgZGVmaW5pdGVseSBubyBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBHaXZlbiB0aGF0LCBLTVNBTiBpcyBjb21wbGV0ZWx5IHVubmVjZXNzYXJ5IGhlcmUuIFdlIGNhbiBzYWZlbHkgc2V0IGBOZWVkc0tNU0FOYCB0byBmYWxzZS4gCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IHRoYXQgYHNldC1yZXN1bHRzYCBjYWxsIHByZXBwZWQgYW5kIG1vdmUgb24gdG8gdGhlIG5leHQgb25lLiBUaGlzIHdhcyBhIHByZXR0eSBzaW1wbGUgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBicmlkZ2Ugc3Vic3lzdGVtJiMzOTtzIENGTSAoQ29ubmVjdGl2aXR5IEZhdWx0IE1hbmFnZW1lbnQpIGFuZCBNUlAgKE1lZGlhIFJlZHVuZGFuY3kgUHJvdG9jb2wpIGZyYW1lIGRpc3BhdGNoIG1lY2hhbmlzbSBieSByZXBsYWNpbmcgdGhlIGR5bmFtaWMgZnJhbWUtdHlwZSBsaW5rZWQgbGlzdCAoYGZyYW1lX3R5cGVfbGlzdGApIHdpdGggYml0IGZsYWdzIGluIHRoZSBleGlzdGluZyBicmlkZ2Ugb3B0aW9ucyBiaXRtYXNrIChgQlJPUFRfQ0ZNX0VOQUJMRURgIGFuZCBgQlJPUFRfTVJQX0VOQUJMRURgKS4gXG5cbk5vIG5ldyBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgZGF0YSBidWZmZXJzIGFyZSBjcmVhdGVkIG9yIGV4cG9ydGVkIHRvIHVzZXIgc3BhY2UuIFRoZSBsb2dpYyByZWxpZXMgb24gYWxyZWFkeS1hbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGJyaWRnZSBzdHJ1Y3R1cmVzIChgc3RydWN0IG5ldF9icmlkZ2VgKSwgdG9nZ2xpbmcgYW5kIGNoZWNraW5nIGV4aXN0aW5nIGJpdCBmbGFncy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBjb25maWd1cmF0aW9ucyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcmVncmVzc2lvbi4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBicmlkZ2Ugc3Vic3lzdGVtJiMzOTtzIENGTSAoQ29ubmVjdGl2aXR5IEZhdWx0IE1hbmFnZW1lbnQpIGFuZCBNUlAgKE1lZGlhIFJlZHVuZGFuY3kgUHJvdG9jb2wpIGZyYW1lIGRpc3BhdGNoIG1lY2hhbmlzbSBieSByZXBsYWNpbmcgdGhlIGR5bmFtaWMgZnJhbWUtdHlwZSBsaW5rZWQgbGlzdCAoYGZyYW1lX3R5cGVfbGlzdGApIHdpdGggYml0IGZsYWdzIGluIHRoZSBleGlzdGluZyBicmlkZ2Ugb3B0aW9ucyBiaXRtYXNrIChgQlJPUFRfQ0ZNX0VOQUJMRURgIGFuZCBgQlJPUFRfTVJQX0VOQUJMRURgKS4gXG5cbk5vIG5ldyBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgZGF0YSBidWZmZXJzIGFyZSBjcmVhdGVkIG9yIGV4cG9ydGVkIHRvIHVzZXIgc3BhY2UuIFRoZSBsb2dpYyByZWxpZXMgb24gYWxyZWFkeS1hbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGJyaWRnZSBzdHJ1Y3R1cmVzIChgc3RydWN0IG5ldF9icmlkZ2VgKSwgdG9nZ2xpbmcgYW5kIGNoZWNraW5nIGV4aXN0aW5nIGJpdCBmbGFncy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBjb25maWd1cmF0aW9ucyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcmVncmVzc2lvbi4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjoxNzoyNC4zMTcxOTI5MjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODkzODk5NDU4NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJCUklER0VfQ0ZNXCIsXG4gICAgXCJCUklER0VfTVJQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJfY2ZtX2ZyYW1lX3J4XCIsXG4gICAgXCJicl9tcnBfcHJvY2Vzc1wiLFxuICAgIFwiYnJfY2ZtX21lcF9jcmVhdGVcIixcbiAgICBcImJyX2NmbV9tZXBfZGVsZXRlXCIsXG4gICAgXCJicl9tcnBfYWRkXCIsXG4gICAgXCJicl9tcnBfZGVsXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGJyaWRnZSBzdWJzeXN0ZW0ncyBDRk0gKENvbm5lY3Rpdml0eSBGYXVsdCBNYW5hZ2VtZW50KSBhbmQgTVJQIChNZWRpYSBSZWR1bmRhbmN5IFByb3RvY29sKSBmcmFtZSBkaXNwYXRjaCBtZWNoYW5pc20gYnkgcmVwbGFjaW5nIHRoZSBkeW5hbWljIGZyYW1lLXR5cGUgbGlua2VkIGxpc3QgKGBmcmFtZV90eXBlX2xpc3RgKSB3aXRoIGJpdCBmbGFncyBpbiB0aGUgZXhpc3RpbmcgYnJpZGdlIG9wdGlvbnMgYml0bWFzayAoYEJST1BUX0NGTV9FTkFCTEVEYCBhbmQgYEJST1BUX01SUF9FTkFCTEVEYCkuIFxcblxcbk5vIG5ldyBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgZGF0YSBidWZmZXJzIGFyZSBjcmVhdGVkIG9yIGV4cG9ydGVkIHRvIHVzZXIgc3BhY2UuIFRoZSBsb2dpYyByZWxpZXMgb24gYWxyZWFkeS1hbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGJyaWRnZSBzdHJ1Y3R1cmVzIChgc3RydWN0IG5ldF9icmlkZ2VgKSwgdG9nZ2xpbmcgYW5kIGNoZWNraW5nIGV4aXN0aW5nIGJpdCBmbGFncy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBjb25maWd1cmF0aW9ucyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcmVncmVzc2lvbi4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYnJpZGdlIGZyYW1lIGhhbmRsaW5nIGxvZ2ljIGZvciBDRk0gKDgwMi4xUSBDRk0pIGFuZCBNUlAgcHJvdG9jb2xzIGJ5IHJlcGxhY2luZyB0aGUgZHluYW1pYyBmcmFtZV90eXBlX2xpc3Qgd2l0aCBicmlkZ2Ugb3B0aW9uIGZsYWdzIChCUk9QVF9DRk1fRU5BQkxFRCBhbmQgQlJPUFRfTVJQX0VOQUJMRUQpIGFuZCBkaXJlY3QgY2FsbHMgdG8gYnJfY2ZtX2ZyYW1lX3J4IGFuZCBicl9tcnBfcHJvY2Vzcy4gSXQgbW9kaWZpZXMgYm90aCB0aGUgZnJhbWUgcmVjZWl2ZSBwYXRoIGFuZCB0aGUgbmV0bGluay10cmlnZ2VyZWQgaW5zdGFuY2UgY3JlYXRpb24vZGVsZXRpb24gcGF0aHMuIFRoaXMgYWZmZWN0cyBjb3JlIGJyaWRnZSBuZXR3b3JraW5nIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbCBlbnZpcm9ubWVudHMgd2l0aG91dCBzcGVjaWFsaXplZCBoYXJkd2FyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MTc6MjQuMzE3MTk4NzEzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTE1MzAwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmMjgyYTYxODI5YTZiZTdmNTFjYTllYTc2ZDBjNjg3MzFjZTJkMzdiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDEyOjE3OjIzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfY2ZtLmMgYi9uZXQvYnJpZGdlL2JyX2NmbS5jXFxuaW5kZXggZGVhNTZmZmZhMWMxOS4uOWRjYzk3ZDYzYTZmYyAxMDA2NDRcXG4tLS0gYS9uZXQvYnJpZGdlL2JyX2NmbS5jXFxuKysrIGIvbmV0L2JyaWRnZS9icl9jZm0uY1xcbkBAIC0zNjcsNyArMzY3LDcgQEAgc3RhdGljIHUzMiBjY21fdGx2X2V4dHJhY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluZGV4LFxcbiB9XFxuIFxcbiAvKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgKi9cXG4tc3RhdGljIGludCBicl9jZm1fZnJhbWVfcngoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4raW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdHUzMiBtZGxldmVsLCBpbnRlcnZhbCwgc2l6ZSwgaW5kZXgsIG1heDtcXG4gXFx0Y29uc3Qgc3RydWN0IGJyX2NmbV9jb21tb25faGRyICpoZHI7XFxuQEAgLTQ4OSwxMSArNDg5LDYgQEAgc3RhdGljIGludCBicl9jZm1fZnJhbWVfcngoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0cmV0dXJuIDE7XFxuIH1cXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSBjZm1fZnJhbWVfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xcbi1cXHQudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX0NGTSksXFxuLVxcdC5mcmFtZV9oYW5kbGVyID0gYnJfY2ZtX2ZyYW1lX3J4LFxcbi19O1xcbi1cXG4gaW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4gXFx0XFx0ICAgICAgY29uc3QgdTMyIGluc3RhbmNlLFxcbiBcXHRcXHQgICAgICBzdHJ1Y3QgYnJfY2ZtX21lcF9jcmVhdGUgKmNvbnN0IGNyZWF0ZSxcXG5AQCAtNTU5LDcgKzU1NCw3IEBAIGludCBicl9jZm1fbWVwX2NyZWF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuIFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZtZXAtXFx1MDAzZWNjbV90eF9kd29yaywgY2NtX3R4X3dvcmtfZXhwaXJlZCk7XFxuIFxcbiBcXHRpZiAoaGxpc3RfZW1wdHkoXFx1MDAyNmJyLVxcdTAwM2VtZXBfbGlzdCkpXFxuLVxcdFxcdGJyX2FkZF9mcmFtZShiciwgXFx1MDAyNmNmbV9mcmFtZV90eXBlKTtcXG4rXFx0XFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfQ0ZNX0VOQUJMRUQsIHRydWUpO1xcbiBcXG4gXFx0aGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZtZXAtXFx1MDAzZWhlYWQsIFxcdTAwMjZici1cXHUwMDNlbWVwX2xpc3QpO1xcbiBcXG5AQCAtNTg4LDcgKzU4Myw3IEBAIHN0YXRpYyB2b2lkIG1lcF9kZWxldGVfaW1wbGVtZW50YXRpb24oc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbiBcXHRrZnJlZV9yY3UobWVwLCByY3UpO1xcbiBcXG4gXFx0aWYgKGhsaXN0X2VtcHR5KFxcdTAwMjZici1cXHUwMDNlbWVwX2xpc3QpKVxcbi1cXHRcXHRicl9kZWxfZnJhbWUoYnIsIFxcdTAwMjZjZm1fZnJhbWVfdHlwZSk7XFxuK1xcdFxcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX0NGTV9FTkFCTEVELCBmYWxzZSk7XFxuIH1cXG4gXFxuIGludCBicl9jZm1fbWVwX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMgYi9uZXQvYnJpZGdlL2JyX2RldmljZS5jXFxuaW5kZXggZmY1NWRhYjczNjMyNi4uZTAxYzQ0YTkwZDg0YiAxMDA2NDRcXG4tLS0gYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jXFxuKysrIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xcbkBAIC01MDMsNyArNTAzLDYgQEAgdm9pZCBicl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmJyLVxcdTAwM2Vsb2NrKTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmJyLVxcdTAwM2Vwb3J0X2xpc3QpO1xcbiBcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNmJyLVxcdTAwM2VmZGJfbGlzdCk7XFxuLVxcdElOSVRfSExJU1RfSEVBRChcXHUwMDI2YnItXFx1MDAzZWZyYW1lX3R5cGVfbGlzdCk7XFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTVJQKVxcbiBcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNmJyLVxcdTAwM2VtcnBfbGlzdCk7XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmNcXG5pbmRleCBkODdhNWY5ZmE5MmI3Li43Mjg5MmU1YjQwNDM5IDEwMDY0NFxcbi0tLSBhL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xcbisrKyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xcbkBAIC0zMTcsMjAgKzMxNywzMyBAQCBzdGF0aWMgaW50IG5mX2hvb2tfYnJpZGdlX3ByZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuIFxcdHJldHVybiBSWF9IQU5ETEVSX0NPTlNVTUVEO1xcbiB9XFxuIFxcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX0NGTSkgfHwgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX01SUClcXG4rLyogQ0ZNL01SUCBhcmUgdW5jb21tb247IHRlc3QgYm90aCBlbmFibGUgYml0cyB0b2dldGhlciBmaXJzdC4gKi9cXG4rI2RlZmluZSBCUl9DRk1fTVJQX09QVFMgXFxcXFxcbitcXHQoKElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9DRk0pID8gQklUKEJST1BUX0NGTV9FTkFCTEVEKSA6IDBVTCkgfCBcXFxcXFxuK1xcdCAoSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX01SUCkgPyBCSVQoQlJPUFRfTVJQX0VOQUJMRUQpIDogMFVMKSlcXG4rXFxuIC8qIFJldHVybiAwIGlmIHRoZSBmcmFtZSB3YXMgbm90IHByb2Nlc3NlZCBvdGhlcndpc2UgMVxcbiAgKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2tcXG4gICovXFxuIHN0YXRpYyBpbnQgYnJfcHJvY2Vzc19mcmFtZV90eXBlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuLVxcdHN0cnVjdCBicl9mcmFtZV90eXBlICp0bXA7XFxuLVxcbi1cXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodG1wLCBcXHUwMDI2cC1cXHUwMDNlYnItXFx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdClcXG4tXFx0XFx0aWYgKHVubGlrZWx5KHRtcC1cXHUwMDNldHlwZSA9PSBza2ItXFx1MDAzZXByb3RvY29sKSlcXG4tXFx0XFx0XFx0cmV0dXJuIHRtcC1cXHUwMDNlZnJhbWVfaGFuZGxlcihwLCBza2IpO1xcbitcXHRzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBwLVxcdTAwM2VicjtcXG4gXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfQ0ZNKVxcbitcXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9DRk0pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9DRk1fRU5BQkxFRCkpXFxuK1xcdFxcdHJldHVybiBicl9jZm1fZnJhbWVfcngocCwgc2tiKTtcXG4rI2VuZGlmXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTVJQKVxcbitcXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9NUlApIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9NUlBfRU5BQkxFRCkpXFxuK1xcdFxcdHJldHVybiBicl9tcnBfcHJvY2VzcyhwLCBza2IpO1xcbisjZW5kaWZcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4rI2VuZGlmXFxuIFxcbiAvKlxcbiAgKiBSZXR1cm4gTlVMTCBpZiBza2IgaXMgaGFuZGxlZFxcbkBAIC00MjUsOCArNDM4LDExIEBAIHN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGJyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHVubGlrZWx5KGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShwLCBza2IpKSlcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9DRk0pIHx8IElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApXFxuK1xcdGlmICh1bmxpa2VseSgocC1cXHUwMDNlYnItXFx1MDAzZW9wdGlvbnMgXFx1MDAyNiBCUl9DRk1fTVJQX09QVFMpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAgYnJfcHJvY2Vzc19mcmFtZV90eXBlKHAsIHNrYikpKVxcbiBcXHRcXHRyZXR1cm4gUlhfSEFORExFUl9QQVNTO1xcbisjZW5kaWZcXG4gXFxuIGZvcndhcmQ6XFxuIFxcdGlmIChicl9tc3RfaXNfZW5hYmxlZChwKSlcXG5AQCAtNDY3LDE5ICs0ODMsMyBAQCByeF9oYW5kbGVyX2Z1bmNfdCAqYnJfZ2V0X3J4X2hhbmRsZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIFxcdHJldHVybiBicl9oYW5kbGVfZnJhbWU7XFxuIH1cXG4tXFxuLXZvaWQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KVxcbi17XFxuLVxcdGhsaXN0X2FkZF9oZWFkX3JjdShcXHUwMDI2ZnQtXFx1MDAzZWxpc3QsIFxcdTAwMjZici1cXHUwMDNlZnJhbWVfdHlwZV9saXN0KTtcXG4tfVxcbi1cXG4tdm9pZCBicl9kZWxfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQpXFxuLXtcXG4tXFx0c3RydWN0IGJyX2ZyYW1lX3R5cGUgKnRtcDtcXG4tXFxuLVxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgXFx1MDAyNmJyLVxcdTAwM2VmcmFtZV90eXBlX2xpc3QsIGxpc3QpXFxuLVxcdFxcdGlmIChmdCA9PSB0bXApIHtcXG4tXFx0XFx0XFx0aGxpc3RfZGVsX3JjdShcXHUwMDI2ZnQtXFx1MDAzZWxpc3QpO1xcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdH1cXG4tfVxcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX21ycC5jIGIvbmV0L2JyaWRnZS9icl9tcnAuY1xcbmluZGV4IGVmMTZkMDcwMzkyNDEuLmRjZTZlZmE5NmM0YzYgMTAwNjQ0XFxuLS0tIGEvbmV0L2JyaWRnZS9icl9tcnAuY1xcbisrKyBiL25ldC9icmlkZ2UvYnJfbXJwLmNcXG5AQCAtNiwxMyArNiw2IEBAXFxuIHN0YXRpYyBjb25zdCB1OCBtcnBfdGVzdF9kbWFjW0VUSF9BTEVOXSA9IHsgMHgxLCAweDE1LCAweDRlLCAweDAsIDB4MCwgMHgxIH07XFxuIHN0YXRpYyBjb25zdCB1OCBtcnBfaW5fdGVzdF9kbWFjW0VUSF9BTEVOXSA9IHsgMHgxLCAweDE1LCAweDRlLCAweDAsIDB4MCwgMHgzIH07XFxuIFxcbi1zdGF0aWMgaW50IGJyX21ycF9wcm9jZXNzKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBza19idWZmICpza2IpO1xcbi1cXG4tc3RhdGljIHN0cnVjdCBicl9mcmFtZV90eXBlIG1ycF9mcmFtZV90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XFxuLVxcdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfTVJQKSxcXG4tXFx0LmZyYW1lX2hhbmRsZXIgPSBicl9tcnBfcHJvY2VzcyxcXG4tfTtcXG4tXFxuIHN0YXRpYyBib29sIGJyX21ycF9pc19yaW5nX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcF9wb3J0LFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpzX3BvcnQsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxuQEAgLTQ4Niw3ICs0NzksNyBAQCBzdGF0aWMgdm9pZCBicl9tcnBfZGVsX2ltcGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnApXFxuIFxcdGtmcmVlX3JjdShtcnAsIHJjdSk7XFxuIFxcbiBcXHRpZiAoaGxpc3RfZW1wdHkoXFx1MDAyNmJyLVxcdTAwM2VtcnBfbGlzdCkpXFxuLVxcdFxcdGJyX2RlbF9mcmFtZShiciwgXFx1MDAyNm1ycF9mcmFtZV90eXBlKTtcXG4rXFx0XFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTVJQX0VOQUJMRUQsIGZhbHNlKTtcXG4gfVxcbiBcXG4gLyogQWRkcyBhIG5ldyBNUlAgaW5zdGFuY2UuXFxuQEAgLTUzNiw3ICs1MjksNyBAQCBpbnQgYnJfbXJwX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnBfaW5zdGFuY2UgKmluc3RhbmNlKVxcbiBcXHRyY3VfYXNzaWduX3BvaW50ZXIobXJwLVxcdTAwM2VzX3BvcnQsIHApO1xcbiBcXG4gXFx0aWYgKGhsaXN0X2VtcHR5KFxcdTAwMjZici1cXHUwMDNlbXJwX2xpc3QpKVxcbi1cXHRcXHRicl9hZGRfZnJhbWUoYnIsIFxcdTAwMjZtcnBfZnJhbWVfdHlwZSk7XFxuK1xcdFxcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01SUF9FTkFCTEVELCB0cnVlKTtcXG4gXFxuIFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZtcnAtXFx1MDAzZXRlc3Rfd29yaywgYnJfbXJwX3Rlc3Rfd29ya19leHBpcmVkKTtcXG4gXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNm1ycC1cXHUwMDNlaW5fdGVzdF93b3JrLCBicl9tcnBfaW5fdGVzdF93b3JrX2V4cGlyZWQpO1xcbkBAIC0xMjQxLDcgKzEyMzQsNyBAQCBzdGF0aWMgaW50IGJyX21ycF9yY3Yoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4gICogbm9ybWFsIGZvcndhcmRpbmcuXFxuICAqIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9ja1xcbiAgKi9cXG4tc3RhdGljIGludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbitpbnQgYnJfbXJwX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHQvKiBJZiB0aGVyZSBpcyBubyBNUlAgaW5zdGFuY2UgZG8gbm9ybWFsIGZvcndhcmRpbmcgKi9cXG4gXFx0aWYgKGxpa2VseSghdGVzdF9iaXQoQlJfTVJQX0FXQVJFX0JJVCwgXFx1MDAyNnAtXFx1MDAzZWZsYWdzKSkpXFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcXG5pbmRleCBkMzM3YjFjZmI5ODBkLi5hZmU3YzBiNGY4ZmE3IDEwMDY0NFxcbi0tLSBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXFxuKysrIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcXG5AQCAtNDk1LDEyICs0OTUsMTMgQEAgZW51bSBuZXRfYnJpZGdlX29wdHMge1xcbiBcXHRCUk9QVF9NU1RfRU5BQkxFRCxcXG4gXFx0QlJPUFRfTURCX09GRkxPQURfRkFJTF9OT1RJRklDQVRJT04sXFxuIFxcdEJST1BUX0ZEQl9MT0NBTF9WTEFOXzAsXFxuK1xcdEJST1BUX0NGTV9FTkFCTEVELFxcbitcXHRCUk9QVF9NUlBfRU5BQkxFRCxcXG4gfTtcXG4gXFxuIHN0cnVjdCBuZXRfYnJpZGdlIHtcXG4gXFx0c3BpbmxvY2tfdFxcdFxcdFxcdGxvY2s7XFxuIFxcdHNwaW5sb2NrX3RcXHRcXHRcXHRoYXNoX2xvY2s7XFxuLVxcdHN0cnVjdCBobGlzdF9oZWFkXFx0XFx0ZnJhbWVfdHlwZV9saXN0O1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZVxcdFxcdCpkZXY7XFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRcXHRcXHRvcHRpb25zO1xcbiBcXHQvKiBUaGVzZSBmaWVsZHMgYXJlIGFjY2Vzc2VkIG9uIGVhY2ggcGFja2V0ICovXFxuQEAgLTkzMiwxNiArOTMzLDYgQEAgaW50IG5icF9iYWNrdXBfY2hhbmdlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBuZXRfZGV2aWNlICpiYWNrdXBfZGV2KTtcXG4gaW50IGJyX2hhbmRsZV9mcmFtZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbiByeF9oYW5kbGVyX2Z1bmNfdCAqYnJfZ2V0X3J4X2hhbmRsZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuIFxcbi1zdHJ1Y3QgYnJfZnJhbWVfdHlwZSB7XFxuLVxcdF9fYmUxNlxcdFxcdFxcdHR5cGU7XFxuLVxcdGludFxcdFxcdFxcdCgqZnJhbWVfaGFuZGxlcikoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpO1xcbi1cXHRzdHJ1Y3QgaGxpc3Rfbm9kZVxcdGxpc3Q7XFxuLX07XFxuLVxcbi12b2lkIGJyX2FkZF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdCk7XFxuLXZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KTtcXG4tXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBicl9yeF9oYW5kbGVyX2NoZWNrX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuIFxcdHJldHVybiByY3VfZGVyZWZlcmVuY2UoZGV2LVxcdTAwM2VyeF9oYW5kbGVyKSA9PSBicl9nZXRfcnhfaGFuZGxlcihkZXYpO1xcbkBAIC0yMDgwLDYgKzIwNzEsNyBAQCBpbnQgYnJfbXJwX3BhcnNlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4gYm9vbCBicl9tcnBfZW5hYmxlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xcbiB2b2lkIGJyX21ycF9wb3J0X2RlbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApO1xcbiBpbnQgYnJfbXJwX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xcbitpbnQgYnJfbXJwX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgaW50IGJyX21ycF9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuIFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICphdHRyLCBpbnQgY21kLFxcbkBAIC0yMTExLDYgKzIxMDMsNyBAQCBpbnQgYnJfY2ZtX3BhcnNlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4gXFx0XFx0IHN0cnVjdCBubGF0dHIgKmF0dHIsIGludCBjbWQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuIGJvb2wgYnJfY2ZtX2NyZWF0ZWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcXG4gdm9pZCBicl9jZm1fcG9ydF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKTtcXG4raW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gaW50IGJyX2NmbV9jb25maWdfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfYnJpZGdlICpicik7XFxuIGludCBicl9jZm1fc3RhdHVzX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjoxNzoyNC43MDk0MTAyODZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEzMDAyODU4NzA2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIixcbiAgICBcIkJSSURHRV9DRk1cIixcbiAgICBcIkJSSURHRV9NUlBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9jZm1fZnJhbWVfcnhcIixcbiAgICBcImJyX21ycF9wcm9jZXNzXCIsXG4gICAgXCJicl9jZm1fbWVwX2NyZWF0ZVwiLFxuICAgIFwiYnJfY2ZtX21lcF9kZWxldGVcIixcbiAgICBcImJyX21ycF9hZGRcIixcbiAgICBcImJyX21ycF9kZWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGJyaWRnZSBmcmFtZSBoYW5kbGluZyBsb2dpYyBmb3IgQ0ZNICg4MDIuMVEgQ0ZNKSBhbmQgTVJQIHByb3RvY29scyBieSByZXBsYWNpbmcgdGhlIGR5bmFtaWMgZnJhbWVfdHlwZV9saXN0IHdpdGggYnJpZGdlIG9wdGlvbiBmbGFncyAoQlJPUFRfQ0ZNX0VOQUJMRUQgYW5kIEJST1BUX01SUF9FTkFCTEVEKSBhbmQgZGlyZWN0IGNhbGxzIHRvIGJyX2NmbV9mcmFtZV9yeCBhbmQgYnJfbXJwX3Byb2Nlc3MuIEl0IG1vZGlmaWVzIGJvdGggdGhlIGZyYW1lIHJlY2VpdmUgcGF0aCBhbmQgdGhlIG5ldGxpbmstdHJpZ2dlcmVkIGluc3RhbmNlIGNyZWF0aW9uL2RlbGV0aW9uIHBhdGhzLiBUaGlzIGFmZmVjdHMgY29yZSBicmlkZ2UgbmV0d29ya2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWwgZW52aXJvbm1lbnRzIHdpdGhvdXQgc3BlY2lhbGl6ZWQgaGFyZHdhcmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYyODJhNjE4MjlhNmJlN2Y1MWNhOWVhNzZkMGM2ODczMWNlMmQzN2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMjoxNzoyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfY2ZtLmMgYi9uZXQvYnJpZGdlL2JyX2NmbS5jXG5pbmRleCBkZWE1NmZmZmExYzE5Li45ZGNjOTdkNjNhNmZjIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9jZm0uY1xuKysrIGIvbmV0L2JyaWRnZS9icl9jZm0uY1xuQEAgLTM2Nyw3ICszNjcsNyBAQCBzdGF0aWMgdTMyIGNjbV90bHZfZXh0cmFjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5kZXgsXG4gfVxuIFxuIC8qIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayAqL1xuLXN0YXRpYyBpbnQgYnJfY2ZtX2ZyYW1lX3J4KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHN0cnVjdCBza19idWZmICpza2IpXG4raW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHUzMiBtZGxldmVsLCBpbnRlcnZhbCwgc2l6ZSwgaW5kZXgsIG1heDtcbiBcdGNvbnN0IHN0cnVjdCBicl9jZm1fY29tbW9uX2hkciAqaGRyO1xuQEAgLTQ4OSwxMSArNDg5LDYgQEAgc3RhdGljIGludCBicl9jZm1fZnJhbWVfcngoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHJldHVybiAxO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IGJyX2ZyYW1lX3R5cGUgY2ZtX2ZyYW1lX3R5cGUgX19yZWFkX21vc3RseSA9IHtcbi1cdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfQ0ZNKSxcbi1cdC5mcmFtZV9oYW5kbGVyID0gYnJfY2ZtX2ZyYW1lX3J4LFxuLX07XG4tXG4gaW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiBcdFx0ICAgICAgY29uc3QgdTMyIGluc3RhbmNlLFxuIFx0XHQgICAgICBzdHJ1Y3QgYnJfY2ZtX21lcF9jcmVhdGUgKmNvbnN0IGNyZWF0ZSxcbkBAIC01NTksNyArNTU0LDcgQEAgaW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm1lcC1cdTAwM2VjY21fdHhfZHdvcmssIGNjbV90eF93b3JrX2V4cGlyZWQpO1xuIFxuIFx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1lcF9saXN0KSlcbi1cdFx0YnJfYWRkX2ZyYW1lKGJyLCBcdTAwMjZjZm1fZnJhbWVfdHlwZSk7XG4rXHRcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX0NGTV9FTkFCTEVELCB0cnVlKTtcbiBcbiBcdGhsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZtZXAtXHUwMDNlaGVhZCwgXHUwMDI2YnItXHUwMDNlbWVwX2xpc3QpO1xuIFxuQEAgLTU4OCw3ICs1ODMsNyBAQCBzdGF0aWMgdm9pZCBtZXBfZGVsZXRlX2ltcGxlbWVudGF0aW9uKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiBcdGtmcmVlX3JjdShtZXAsIHJjdSk7XG4gXG4gXHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2YnItXHUwMDNlbWVwX2xpc3QpKVxuLVx0XHRicl9kZWxfZnJhbWUoYnIsIFx1MDAyNmNmbV9mcmFtZV90eXBlKTtcbitcdFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfQ0ZNX0VOQUJMRUQsIGZhbHNlKTtcbiB9XG4gXG4gaW50IGJyX2NmbV9tZXBfZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuaW5kZXggZmY1NWRhYjczNjMyNi4uZTAxYzQ0YTkwZDg0YiAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfZGV2aWNlLmNcbisrKyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmNcbkBAIC01MDMsNyArNTAzLDYgQEAgdm9pZCBicl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmJyLVx1MDAzZWxvY2spO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2YnItXHUwMDNlcG9ydF9saXN0KTtcbiBcdElOSVRfSExJU1RfSEVBRChcdTAwMjZici1cdTAwM2VmZGJfbGlzdCk7XG4tXHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2YnItXHUwMDNlZnJhbWVfdHlwZV9saXN0KTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX01SUClcbiBcdElOSVRfSExJU1RfSEVBRChcdTAwMjZici1cdTAwM2VtcnBfbGlzdCk7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jXG5pbmRleCBkODdhNWY5ZmE5MmI3Li43Mjg5MmU1YjQwNDM5IDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmNcbkBAIC0zMTcsMjAgKzMxNywzMyBAQCBzdGF0aWMgaW50IG5mX2hvb2tfYnJpZGdlX3ByZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4gXHRyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDtcbiB9XG4gXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9DRk0pIHx8IElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApXG4rLyogQ0ZNL01SUCBhcmUgdW5jb21tb247IHRlc3QgYm90aCBlbmFibGUgYml0cyB0b2dldGhlciBmaXJzdC4gKi9cbisjZGVmaW5lIEJSX0NGTV9NUlBfT1BUUyBcXFxuK1x0KChJU19FTkFCTEVEKENPTkZJR19CUklER0VfQ0ZNKSA/IEJJVChCUk9QVF9DRk1fRU5BQkxFRCkgOiAwVUwpIHwgXFxcbitcdCAoSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX01SUCkgPyBCSVQoQlJPUFRfTVJQX0VOQUJMRUQpIDogMFVMKSlcbitcbiAvKiBSZXR1cm4gMCBpZiB0aGUgZnJhbWUgd2FzIG5vdCBwcm9jZXNzZWQgb3RoZXJ3aXNlIDFcbiAgKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2tcbiAgKi9cbiBzdGF0aWMgaW50IGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IGJyX2ZyYW1lX3R5cGUgKnRtcDtcbi1cbi1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0bXAsIFx1MDAyNnAtXHUwMDNlYnItXHUwMDNlZnJhbWVfdHlwZV9saXN0LCBsaXN0KVxuLVx0XHRpZiAodW5saWtlbHkodG1wLVx1MDAzZXR5cGUgPT0gc2tiLVx1MDAzZXByb3RvY29sKSlcbi1cdFx0XHRyZXR1cm4gdG1wLVx1MDAzZWZyYW1lX2hhbmRsZXIocCwgc2tiKTtcbitcdHN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHAtXHUwMDNlYnI7XG4gXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9DRk0pXG4rXHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0NGTSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgYnJfb3B0X2dldChiciwgQlJPUFRfQ0ZNX0VOQUJMRUQpKVxuK1x0XHRyZXR1cm4gYnJfY2ZtX2ZyYW1lX3J4KHAsIHNrYik7XG4rI2VuZGlmXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApXG4rXHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX01SUCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgYnJfb3B0X2dldChiciwgQlJPUFRfTVJQX0VOQUJMRUQpKVxuK1x0XHRyZXR1cm4gYnJfbXJwX3Byb2Nlc3MocCwgc2tiKTtcbisjZW5kaWZcbiBcdHJldHVybiAwO1xuIH1cbisjZW5kaWZcbiBcbiAvKlxuICAqIFJldHVybiBOVUxMIGlmIHNrYiBpcyBoYW5kbGVkXG5AQCAtNDI1LDggKzQzOCwxMSBAQCBzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBicl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAodW5saWtlbHkoYnJfcHJvY2Vzc19mcmFtZV90eXBlKHAsIHNrYikpKVxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfQ0ZNKSB8fCBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTVJQKVxuK1x0aWYgKHVubGlrZWx5KChwLVx1MDAzZWJyLVx1MDAzZW9wdGlvbnMgXHUwMDI2IEJSX0NGTV9NUlBfT1BUUykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAgYnJfcHJvY2Vzc19mcmFtZV90eXBlKHAsIHNrYikpKVxuIFx0XHRyZXR1cm4gUlhfSEFORExFUl9QQVNTO1xuKyNlbmRpZlxuIFxuIGZvcndhcmQ6XG4gXHRpZiAoYnJfbXN0X2lzX2VuYWJsZWQocCkpXG5AQCAtNDY3LDE5ICs0ODMsMyBAQCByeF9oYW5kbGVyX2Z1bmNfdCAqYnJfZ2V0X3J4X2hhbmRsZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBcdHJldHVybiBicl9oYW5kbGVfZnJhbWU7XG4gfVxuLVxuLXZvaWQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KVxuLXtcbi1cdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZmdC1cdTAwM2VsaXN0LCBcdTAwMjZici1cdTAwM2VmcmFtZV90eXBlX2xpc3QpO1xuLX1cbi1cbi12b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdClcbi17XG4tXHRzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqdG1wO1xuLVxuLVx0aGxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCBcdTAwMjZici1cdTAwM2VmcmFtZV90eXBlX2xpc3QsIGxpc3QpXG4tXHRcdGlmIChmdCA9PSB0bXApIHtcbi1cdFx0XHRobGlzdF9kZWxfcmN1KFx1MDAyNmZ0LVx1MDAzZWxpc3QpO1xuLVx0XHRcdHJldHVybjtcbi1cdFx0fVxuLX1cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX21ycC5jIGIvbmV0L2JyaWRnZS9icl9tcnAuY1xuaW5kZXggZWYxNmQwNzAzOTI0MS4uZGNlNmVmYTk2YzRjNiAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfbXJwLmNcbisrKyBiL25ldC9icmlkZ2UvYnJfbXJwLmNcbkBAIC02LDEzICs2LDYgQEBcbiBzdGF0aWMgY29uc3QgdTggbXJwX3Rlc3RfZG1hY1tFVEhfQUxFTl0gPSB7IDB4MSwgMHgxNSwgMHg0ZSwgMHgwLCAweDAsIDB4MSB9O1xuIHN0YXRpYyBjb25zdCB1OCBtcnBfaW5fdGVzdF9kbWFjW0VUSF9BTEVOXSA9IHsgMHgxLCAweDE1LCAweDRlLCAweDAsIDB4MCwgMHgzIH07XG4gXG4tc3RhdGljIGludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi1cbi1zdGF0aWMgc3RydWN0IGJyX2ZyYW1lX3R5cGUgbXJwX2ZyYW1lX3R5cGUgX19yZWFkX21vc3RseSA9IHtcbi1cdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfTVJQKSxcbi1cdC5mcmFtZV9oYW5kbGVyID0gYnJfbXJwX3Byb2Nlc3MsXG4tfTtcbi1cbiBzdGF0aWMgYm9vbCBicl9tcnBfaXNfcmluZ19wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBfcG9ydCxcbiBcdFx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnNfcG9ydCxcbiBcdFx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG5AQCAtNDg2LDcgKzQ3OSw3IEBAIHN0YXRpYyB2b2lkIGJyX21ycF9kZWxfaW1wbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnAgKm1ycClcbiBcdGtmcmVlX3JjdShtcnAsIHJjdSk7XG4gXG4gXHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2YnItXHUwMDNlbXJwX2xpc3QpKVxuLVx0XHRicl9kZWxfZnJhbWUoYnIsIFx1MDAyNm1ycF9mcmFtZV90eXBlKTtcbitcdFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTVJQX0VOQUJMRUQsIGZhbHNlKTtcbiB9XG4gXG4gLyogQWRkcyBhIG5ldyBNUlAgaW5zdGFuY2UuXG5AQCAtNTM2LDcgKzUyOSw3IEBAIGludCBicl9tcnBfYWRkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycF9pbnN0YW5jZSAqaW5zdGFuY2UpXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIobXJwLVx1MDAzZXNfcG9ydCwgcCk7XG4gXG4gXHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2YnItXHUwMDNlbXJwX2xpc3QpKVxuLVx0XHRicl9hZGRfZnJhbWUoYnIsIFx1MDAyNm1ycF9mcmFtZV90eXBlKTtcbitcdFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTVJQX0VOQUJMRUQsIHRydWUpO1xuIFxuIFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2bXJwLVx1MDAzZXRlc3Rfd29yaywgYnJfbXJwX3Rlc3Rfd29ya19leHBpcmVkKTtcbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm1ycC1cdTAwM2Vpbl90ZXN0X3dvcmssIGJyX21ycF9pbl90ZXN0X3dvcmtfZXhwaXJlZCk7XG5AQCAtMTI0MSw3ICsxMjM0LDcgQEAgc3RhdGljIGludCBicl9tcnBfcmN2KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4gICogbm9ybWFsIGZvcndhcmRpbmcuXG4gICogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrXG4gICovXG4tc3RhdGljIGludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK2ludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdC8qIElmIHRoZXJlIGlzIG5vIE1SUCBpbnN0YW5jZSBkbyBub3JtYWwgZm9yd2FyZGluZyAqL1xuIFx0aWYgKGxpa2VseSghdGVzdF9iaXQoQlJfTVJQX0FXQVJFX0JJVCwgXHUwMDI2cC1cdTAwM2VmbGFncykpKVxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcbmluZGV4IGQzMzdiMWNmYjk4MGQuLmFmZTdjMGI0ZjhmYTcgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxuKysrIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcbkBAIC00OTUsMTIgKzQ5NSwxMyBAQCBlbnVtIG5ldF9icmlkZ2Vfb3B0cyB7XG4gXHRCUk9QVF9NU1RfRU5BQkxFRCxcbiBcdEJST1BUX01EQl9PRkZMT0FEX0ZBSUxfTk9USUZJQ0FUSU9OLFxuIFx0QlJPUFRfRkRCX0xPQ0FMX1ZMQU5fMCxcbitcdEJST1BUX0NGTV9FTkFCTEVELFxuK1x0QlJPUFRfTVJQX0VOQUJMRUQsXG4gfTtcbiBcbiBzdHJ1Y3QgbmV0X2JyaWRnZSB7XG4gXHRzcGlubG9ja190XHRcdFx0bG9jaztcbiBcdHNwaW5sb2NrX3RcdFx0XHRoYXNoX2xvY2s7XG4tXHRzdHJ1Y3QgaGxpc3RfaGVhZFx0XHRmcmFtZV90eXBlX2xpc3Q7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZVx0XHQqZGV2O1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdG9wdGlvbnM7XG4gXHQvKiBUaGVzZSBmaWVsZHMgYXJlIGFjY2Vzc2VkIG9uIGVhY2ggcGFja2V0ICovXG5AQCAtOTMyLDE2ICs5MzMsNiBAQCBpbnQgbmJwX2JhY2t1cF9jaGFuZ2Uoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IG5ldF9kZXZpY2UgKmJhY2t1cF9kZXYpO1xuIGludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiByeF9oYW5kbGVyX2Z1bmNfdCAqYnJfZ2V0X3J4X2hhbmRsZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gXG4tc3RydWN0IGJyX2ZyYW1lX3R5cGUge1xuLVx0X19iZTE2XHRcdFx0dHlwZTtcbi1cdGludFx0XHRcdCgqZnJhbWVfaGFuZGxlcikoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcbi1cdFx0XHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4tXHRzdHJ1Y3QgaGxpc3Rfbm9kZVx0bGlzdDtcbi19O1xuLVxuLXZvaWQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KTtcbi12b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdCk7XG4tXG4gc3RhdGljIGlubGluZSBib29sIGJyX3J4X2hhbmRsZXJfY2hlY2tfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0cmV0dXJuIHJjdV9kZXJlZmVyZW5jZShkZXYtXHUwMDNlcnhfaGFuZGxlcikgPT0gYnJfZ2V0X3J4X2hhbmRsZXIoZGV2KTtcbkBAIC0yMDgwLDYgKzIwNzEsNyBAQCBpbnQgYnJfbXJwX3BhcnNlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbiBib29sIGJyX21ycF9lbmFibGVkKHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG4gdm9pZCBicl9tcnBfcG9ydF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKTtcbiBpbnQgYnJfbXJwX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xuK2ludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGJyX21ycF9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKmF0dHIsIGludCBjbWQsXG5AQCAtMjExMSw2ICsyMTAzLDcgQEAgaW50IGJyX2NmbV9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4gXHRcdCBzdHJ1Y3QgbmxhdHRyICphdHRyLCBpbnQgY21kLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIGJvb2wgYnJfY2ZtX2NyZWF0ZWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcbiB2b2lkIGJyX2NmbV9wb3J0X2RlbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApO1xuK2ludCBicl9jZm1fZnJhbWVfcngoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gaW50IGJyX2NmbV9jb25maWdfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG4gaW50IGJyX2NmbV9zdGF0dXNfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0ICAgIHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjE3OjI0LjcwOTQxMTU5NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMTAxNTQ5NTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQnJpZGdlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoIGZvciBmdXp6aW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgdG8gdGhlIGJyaWRnZSBjb2RlIGluIHRoZSBrZXJuZWwgaXMgZXZlbiB3b3J0aCB0aGUgZWZmb3J0LiBXZSBuZWVkIHRvIGFzc2VzcyB0aGUgYXR0YWNrIHN1cmZhY2UgYW5kIHBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgYnVncy4gSSBjYW4gc2VlIHRoZSBwYXRjaCB0b3VjaGVzIGEgZmV3IGZpbGVzIHdpdGhpbiBgbmV0L2JyaWRnZWA6IGBicl9jZm0uY2AsIGBicl9kZXZpY2UuY2AsIGBicl9pbnB1dC5jYCwgYGJyX21ycC5jYCwgYW5kIGBicl9wcml2YXRlLmhgLlxuXG5Ob3csIGxldCdzIHVuZGVyc3RhbmQgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIG9wdGltaXppbmcgdGhlIGZyYW1lIGhhbmRsaW5nLiBJbnN0ZWFkIG9mIGl0ZXJhdGluZyB0aHJvdWdoIGEgbGlua2VkIGxpc3Qgb2YgYHN0cnVjdCBicl9mcmFtZV90eXBlYCBvYmplY3RzIHdoZW4gcHJvY2Vzc2luZyBmcmFtZXMgaW4gdGhlIGZhc3QgcnggcGF0aCAoYGJyX2hhbmRsZV9mcmFtZSgpYCAtXHUwMDNlIGBicl9wcm9jZXNzX2ZyYW1lX3R5cGUoKWApLCB0aGV5J3JlIGRpdGNoaW5nIHRoZSBkeW5hbWljIGxpc3QgbG9va3VwLiBUaGV5J3ZlIHJlcGxhY2VkIGl0IHdpdGggZGlyZWN0IGNoZWNrcyBvZiBicmlkZ2Ugb3B0aW9uIGZsYWdzIChgQlJPUFRfQ0ZNX0VOQUJMRURgIGFuZCBgQlJPUFRfTVJQX0VOQUJMRURgKSB3aXRoaW4gYGJyX3Byb2Nlc3NfZnJhbWVfdHlwZSgpYC4gRnVydGhlcm1vcmUsIGl0IHNlZW1zIHRoZXkndmUgcmVtb3ZlZCBgYnJfYWRkX2ZyYW1lYCBhbmQgYGJyX2RlbF9mcmFtZWAsIHRoZSBgZnJhbWVfdHlwZV9saXN0YCBmcm9tIHRoZSBgc3RydWN0IG5ldF9icmlkZ2VgLCBhbmQgbm93IGNhbGwgYGJyX2NmbV9mcmFtZV9yeGAgYW5kIGBicl9tcnBfcHJvY2Vzc2AgZGlyZWN0bHkgaWYgdGhlIHJlc3BlY3RpdmUgZmxhZ3MgYXJlIGVuYWJsZWQuIFRoaXMgbG9va3MgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLCB3ZSBub3cgaGF2ZSBjb250cm9sIGZsb3cgYmFzZWQgb24gYnJpZGdlIGZsYWdzLlxuXG5UaGlzIGZsYWctYmFzZWQgYXBwcm9hY2ggaXMgcG90ZW50aWFsbHkgbW9yZSBlZmZpY2llbnQgYnV0IGNvdWxkIGludHJvZHVjZSBzdWJ0bGUgdnVsbmVyYWJpbGl0aWVzIGlmIG5vdCBoYW5kbGVkIGNhcmVmdWxseS4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcG90ZW50aWFsIGZvciBmbGFnIHJhY2VzIGFuZCBvZmYtYnktb25lIGVycm9ycyBpbiB0aGVpciBpbXBsZW1lbnRhdGlvbi5cblxuTmV4dCB1cCwgSSBzaG91bGQgdmVyaWZ5IHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBpbiBgbmV0L2JyaWRnZS9LY29uZmlnYC4gV2UgbXVzdCB1bmRlcnN0YW5kIHRoZSBidWlsZCBlbnZpcm9ubWVudCB0byBlbnN1cmUgdGhhdCB0aGlzIHBhdGNoIGlzIGV2ZW4gZW5hYmxlZCBpbiB0aGUgY29uZmlndXJhdGlvbnMgd2UncmUgdGFyZ2V0aW5nIGZvciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDE2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MTc6MzcuODEwOTY0ODA1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MDQ1NTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUklER0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvS2NvbmZpZy01LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo2OmNvbmZpZyBCUklER0VcXG5uZXQvYnJpZGdlL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nXFxcIlxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTM1LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzozNjpjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcXG5uZXQvYnJpZGdlL0tjb25maWctMzctXFx0Ym9vbCBcXFwiSUdNUC9NTEQgc25vb3BpbmdcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctNDktXFxubmV0L2JyaWRnZS9LY29uZmlnOjUwOmNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcXG5uZXQvYnJpZGdlL0tjb25maWctNTEtXFx0Ym9vbCBcXFwiVkxBTiBmaWx0ZXJpbmdcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctNjMtXFxubmV0L2JyaWRnZS9LY29uZmlnOjY0OmNvbmZpZyBCUklER0VfTVJQXFxubmV0L2JyaWRnZS9LY29uZmlnLTY1LVxcdGJvb2wgXFxcIk1SUCBwcm90b2NvbFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZy03NS1cXG5uZXQvYnJpZGdlL0tjb25maWc6NzY6Y29uZmlnIEJSSURHRV9DRk1cXG5uZXQvYnJpZGdlL0tjb25maWctNzctXFx0Ym9vbCBcXFwiQ0ZNIHByb3RvY29sXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjoxNzozNy44NjcwMTk4NzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDE3MDEyMzM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGBuZXQvYnJpZGdlL0tjb25maWdgIHRob3VnaHQgcHJvY2VzcywgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRGVsdmluZyBpbnRvIHRoZSBCcmlkZ2UgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHRoZSBMaW51eCBicmlkZ2luZyBjb2RlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgYW5kIGhvdyB0aGV5J3JlIHN0cnVjdHVyZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgZmlyc3QgOTAgbGluZXMgb2YgYG5ldC9icmlkZ2UvS2NvbmZpZ2AuIFRoaXMgc2hvdWxkIGNvdmVyIHRoZSBiYXNpYyBmZWF0dXJlcywgZGVwZW5kZW5jaWVzLCBhbmQgcGVyaGFwcyBzb21lIGRlZmF1bHQgYmVoYXZpb3IgZGVjbGFyYXRpb25zLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIHNldCB0aGUgc3RhZ2UgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG1vcmUgbnVhbmNlZCBhc3BlY3RzIGZ1cnRoZXIgZG93biB0aGUgZmlsZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIC0gdGhlIGNvcmUgZW5hYmxlL2Rpc2FibGUgc3dpdGNoZXMgZm9yIHRoZSBicmlkZ2UgaXRzZWxmLCBtYXliZSBzb21lIGVzc2VudGlhbCBoYXJkd2FyZSBhY2NlbGVyYXRpb24gZmVhdHVyZXMgKGlmIHByZXNlbnQpLCBhbmQgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gSSBhbHNvIHdhbnQgdG8gaWRlbnRpZnkgYW55IGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBtaWdodCBzaWduaWZpY2FudGx5IGluZmx1ZW5jZSBob3cgYSBicmlkZ2Ugb3BlcmF0ZXMgb3V0LW9mLXRoZS1ib3guIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIG1vZHVsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQwMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjE3OjQ4LjAzNzE0NTEzOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyA4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIEJSSURHRVxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIjgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1xcXCJcXG4gICA4OlxcdFxcdHNlbGVjdCBMTENcXG4gICA5OlxcdFxcdHNlbGVjdCBTVFBcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4geW91ciBMaW51eCBib3ggd2lsbCBiZSBhYmxlIHRvIGFjdCBhcyBhblxcbiAgMTI6XFx0XFx0ICBFdGhlcm5ldCBicmlkZ2UsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGRpZmZlcmVudCBFdGhlcm5ldCBzZWdtZW50cyBpdFxcbiAgMTM6XFx0XFx0ICBpcyBjb25uZWN0ZWQgdG8gd2lsbCBhcHBlYXIgYXMgb25lIEV0aGVybmV0IHRvIHRoZSBwYXJ0aWNpcGFudHMuXFxuICAxNDpcXHRcXHQgIFNldmVyYWwgc3VjaCBicmlkZ2VzIGNhbiB3b3JrIHRvZ2V0aGVyIHRvIGNyZWF0ZSBldmVuIGxhcmdlclxcbiAgMTU6XFx0XFx0ICBuZXR3b3JrcyBvZiBFdGhlcm5ldHMgdXNpbmcgdGhlIElFRUUgODAyLjEgc3Bhbm5pbmcgdHJlZSBhbGdvcml0aG0uXFxuICAxNjpcXHRcXHQgIEFzIHRoaXMgaXMgYSBzdGFuZGFyZCwgTGludXggYnJpZGdlcyB3aWxsIGNvb3BlcmF0ZSBwcm9wZXJseSB3aXRoXFxuICAxNzpcXHRcXHQgIG90aGVyIHRoaXJkIHBhcnR5IGJyaWRnZSBwcm9kdWN0cy5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBJbiBvcmRlciB0byB1c2UgdGhlIEV0aGVybmV0IGJyaWRnZSwgeW91J2xsIG5lZWQgdGhlIGJyaWRnZVxcbiAgMjA6XFx0XFx0ICBjb25maWd1cmF0aW9uIHRvb2xzOyBzZWUgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3RcXHUwMDNlXFxuICAyMTpcXHRcXHQgIGZvciBsb2NhdGlvbi4gUGxlYXNlIHJlYWQgdGhlIEJyaWRnZSBtaW5pLUhPV1RPIGZvciBtb3JlXFxuICAyMjpcXHRcXHQgIGluZm9ybWF0aW9uLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIElmIHlvdSBlbmFibGUgaXB0YWJsZXMgc3VwcG9ydCBhbG9uZyB3aXRoIHRoZSBicmlkZ2Ugc3VwcG9ydCB0aGVuIHlvdVxcbiAgMjU6XFx0XFx0ICB0dXJuIHlvdXIgYnJpZGdlIGludG8gYSBicmlkZ2luZyBJUCBmaXJld2FsbC5cXG4gIDI2OlxcdFxcdCAgaXB0YWJsZXMgd2lsbCB0aGVuIHNlZSB0aGUgSVAgcGFja2V0cyBiZWluZyBicmlkZ2VkLCBzbyB5b3UgbmVlZCB0b1xcbiAgMjc6XFx0XFx0ICB0YWtlIHRoaXMgaW50byBhY2NvdW50IHdoZW4gc2V0dGluZyB1cCB5b3VyIGZpcmV3YWxsIHJ1bGVzLlxcbiAgMjg6XFx0XFx0ICBFbmFibGluZyBhcnB0YWJsZXMgc3VwcG9ydCB3aGVuIGJyaWRnaW5nIHdpbGwgbGV0IGFycHRhYmxlcyBzZWVcXG4gIDI5OlxcdFxcdCAgYnJpZGdlZCBBUlAgdHJhZmZpYyBpbiB0aGUgYXJwdGFibGVzIEZPUldBUkQgY2hhaW4uXFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDMyOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgYnJpZGdlLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzNTpcXHRcXG4gIDM2OlxcdGNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1xcbiAgMzc6XFx0XFx0Ym9vbCBcXFwiSUdNUC9NTEQgc25vb3BpbmdcXFwiXFxuICAzODpcXHRcXHRkZXBlbmRzIG9uIEJSSURHRVxcbiAgMzk6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICA0MDpcXHRcXHRkZWZhdWx0IHlcXG4gIDQxOlxcdFxcdGhlbHBcXG4gIDQyOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgc2VsZWN0aXZlbHlcXG4gIDQzOlxcdFxcdCAgZm9yd2FyZCBtdWx0aWNhc3QgdHJhZmZpYyBiYXNlZCBvbiBJR01QL01MRCB0cmFmZmljIHJlY2VpdmVkIGZyb21cXG4gIDQ0OlxcdFxcdCAgZWFjaCBwb3J0LlxcbiAgNDU6XFx0XFxuICA0NjpcXHRcXHQgIFNheSBOIHRvIGV4Y2x1ZGUgdGhpcyBzdXBwb3J0IGFuZCByZWR1Y2UgdGhlIGJpbmFyeSBzaXplLlxcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuICA0OTpcXHRcXG4gIDUwOlxcdGNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcXG4gIDUxOlxcdFxcdGJvb2wgXFxcIlZMQU4gZmlsdGVyaW5nXFxcIlxcbiAgNTI6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0VcXG4gIDUzOlxcdFxcdGRlcGVuZHMgb24gVkxBTl84MDIxUVxcbiAgNTQ6XFx0XFx0ZGVmYXVsdCBuXFxuICA1NTpcXHRcXHRoZWxwXFxuICA1NjpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHNlbGVjdGl2ZWx5XFxuICA1NzpcXHRcXHQgIHJlY2VpdmUgYW5kIGZvcndhcmQgdHJhZmZpYyBiYXNlZCBvbiBWTEFOIGluZm9ybWF0aW9uIGluIHRoZSBwYWNrZXRcXG4gIDU4OlxcdFxcdCAgYW55IFZMQU4gaW5mb3JtYXRpb24gY29uZmlndXJlZCBvbiB0aGUgYnJpZGdlIHBvcnQgb3IgYnJpZGdlIGRldmljZS5cXG4gIDU5OlxcdFxcbiAgNjA6XFx0XFx0ICBTYXkgTiB0byBleGNsdWRlIHRoaXMgc3VwcG9ydCBhbmQgcmVkdWNlIHRoZSBiaW5hcnkgc2l6ZS5cXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgNjM6XFx0XFxuICA2NDpcXHRjb25maWcgQlJJREdFX01SUFxcbiAgNjU6XFx0XFx0Ym9vbCBcXFwiTVJQIHByb3RvY29sXFxcIlxcbiAgNjY6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0VcXG4gIDY3OlxcdFxcdGRlZmF1bHQgblxcbiAgNjg6XFx0XFx0aGVscFxcbiAgNjk6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSB0byBydW4gTVJQXFxuICA3MDpcXHRcXHQgIHByb3RvY29sIHRvIGRldGVjdCBsb29wc1xcbiAgNzE6XFx0XFxuICA3MjpcXHRcXHQgIFNheSBOIHRvIGV4Y2x1ZGUgdGhpcyBzdXBwb3J0IGFuZCByZWR1Y2UgdGhlIGJpbmFyeSBzaXplLlxcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA3NTpcXHRcXG4gIDc2OlxcdGNvbmZpZyBCUklER0VfQ0ZNXFxuICA3NzpcXHRcXHRib29sIFxcXCJDRk0gcHJvdG9jb2xcXFwiXFxuICA3ODpcXHRcXHRkZXBlbmRzIG9uIEJSSURHRVxcbiAgNzk6XFx0XFx0aGVscFxcbiAgODA6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSB0byBydW4gQ0ZNXFxuICA4MTpcXHRcXHQgIHByb3RvY29sIGFjY29yZGluZyB0byA4MDIuMVEgc2VjdGlvbiAxMi4xNFxcbiAgODI6XFx0XFxuICA4MzpcXHRcXHQgIFNheSBOIHRvIGV4Y2x1ZGUgdGhpcyBzdXBwb3J0IGFuZCByZWR1Y2UgdGhlIGJpbmFyeSBzaXplLlxcbiAgODQ6XFx0XFxuICA4NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjE3OjQ4LjAzNzIxMDUxOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MjE0MzQxMDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBCcmlkZ2UgQ29kZSBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSB0aGUgYnJpZGdlIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgaW50ZWdyYXRpb24gb2YgQlJJREdFXFxfTVJQIGFuZCBCUklER0VcXF9DRk0sIHRvIHNlZSBpZiB3ZSBjYW4gdHJpZ2dlciBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIEkgd2FudCB0byBjaGVjayBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGNvbXBpbGVkIGluLCB3aGljaCBib2lscyBkb3duIHRvIGxvb2tpbmcgYXQgYENPTkZJR19CUklER0VgLCBgQ09ORklHX0JSSURHRV9NUlBgLCBhbmQgYENPTkZJR19CUklER0VfQ0ZNYC4gSXMgaXQgZ29pbmcgdG8gYmUgd29ydGggdGhlIGVmZm9ydCB0byBmdXp6IHRoaXM/IEFic29sdXRlbHksIHRoaXMgaXMgY29yZSBuZXR3b3JrIGJyaWRnZSBmcmFtZSBwcm9jZXNzaW5nIGFuZCBjb25maWd1cmF0aW9uIGxvZ2ljLCBpbmNsdWRpbmcgQ0ZNIChDb25uZWN0aXZpdHkgRmF1bHQgTWFuYWdlbWVudCkgYW5kIE1SUCAoTWVkaWEgUmVkdW5kYW5jeSBQcm90b2NvbCkuXG5cbkkgc2VlIHRoYXQgYGJyX2hhbmRsZV9mcmFtZWAsIHRoZSBicmlkZ2UgUlggaGFuZGxlciwgZGlyZWN0bHkgY2FsbHMgYGJyX3Byb2Nlc3NfZnJhbWVfdHlwZWAsIHdoaWNoIG5vdyBpbmNvcnBvcmF0ZXMgYEJST1BUX0NGTV9FTkFCTEVEYCBhbmQgYEJST1BUX01SUF9FTkFCTEVEYCBvcHRpb24gYml0cy4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgYWxzbyBub3RlIG1vZGlmaWNhdGlvbnMgdG8gYGJyX2NmbV9tZXBfY3JlYXRlYCwgYGJyX2NmbV9tZXBfZGVsZXRlYCwgYGJyX21ycF9hZGRgLCBhbmQgYGJyX21ycF9kZWxfaW1wbGAuXG5cblRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoZXNlIHByb3RvY29scyBhbmQgdGhlaXIgZnJhbWUgaGFuZGxpbmcgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCBicmlkZ2UgbmV0bGluayBjb25maWd1cmF0aW9uIChydG5ldGxpbmsgLyBicmlkZ2UgbmV0bGluaykgYW5kIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbi9yZWNlcHRpb24gKHR1bi90YXAsIHZldGgsIHJhdyBzb2NrZXRzLCBldGMuKSBpbiBhIHN0YW5kYXJkIExpbnV4IGVudmlyb25tZW50IGxpa2UgUUVNVS4gTm8gc3BlY2lhbCBoYXJkd2FyZSByZXF1aXJlZCDigJMgdGhhdCBtYWtlcyB0aGlzIGV2ZW4gbW9yZSBhdHRyYWN0aXZlIGFzIGEgdGFyZ2V0LlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gZm9jdXMgb24uIEknbSBub3RpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgZWl0aGVyIGNoYW5nZWQgb3IgZXhwb3J0ZWQgZnJvbSBzdGF0aWMgc2NvcGU6IHNwZWNpZmljYWxseSBgYnJfY2ZtX2ZyYW1lX3J4YCwgYGJyX21ycF9wcm9jZXNzYCAoYm90aCB3ZXJlIHN0YXRpYyBiZWZvcmUpLCBgYnJfY2ZtX21lcF9jcmVhdGVgLCBgYnJfY2ZtX21lcF9kZWxldGVgLCBhbmQgYGJyX21ycF9hZGRgLiBBbHRob3VnaCBgYnJfaGFuZGxlX2ZyYW1lYCBpcyBvbiB0aGF0IGxpc3QsIEknbSBtb3JlIGludGVyZXN0ZWQgaW4gdGhlIG5vbi1ob3QtcGF0aCBrZXJuZWwgZnVuY3Rpb25zOiBgYnJfY2ZtX2ZyYW1lX3J4YCwgYGJyX21ycF9wcm9jZXNzYCwgYGJyX2NmbV9tZXBfY3JlYXRlYCwgYGJyX2NmbV9tZXBfZGVsZXRlYCwgYW5kIGBicl9tcnBfYWRkYC5cblxuT2theSwgZG91YmxlLWNoZWNraW5n4oCmIEkgc2VlIHRoYXQgYGJyX2NmbV9mcmFtZV9yeGAgaXMgbm93IGFuIGBpbnQgYnJfY2ZtX2ZyYW1lX3J4KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHN0cnVjdCBza19idWZmICpza2IpYCBpbiBgbmV0L2JyaWRnZS9icl9jZm0uY2AsIGFuZCBgYnJfbXJwX3Byb2Nlc3NgIGlzIGBpbnQgYnJfbXJwX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilgIGluIGBuZXQvYnJpZGdlL2JyX21ycC5jYC4gR29vZC4gTmV4dCwgSSBuZWVkIHRvIHRyYWNlIHdoZXJlIGBicl9jZm1fbWVwX2NyZWF0ZWAsIGBicl9jZm1fbWVwX2RlbGV0ZWAsIGFuZCBgYnJfbXJwX2FkZGAgYXJlIGFjdHVhbGx5IGNhbGxlZCBmcm9tLCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBjYWxsIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzcyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTc4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MTg6MTQuMjUxNTUzNzk5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzE5NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX2NmbV9tZXBfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9jZm0uYz0zNzA9aW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2JyaWRnZS9icl9jZm0uYy00OTEtXFxubmV0L2JyaWRnZS9icl9jZm0uYzo0OTI6aW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG5uZXQvYnJpZGdlL2JyX2NmbS5jLTQ5My1cXHRcXHQgICAgICBjb25zdCB1MzIgaW5zdGFuY2UsXFxubmV0L2JyaWRnZS9icl9jZm0uYzo0OTQ6XFx0XFx0ICAgICAgc3RydWN0IGJyX2NmbV9tZXBfY3JlYXRlICpjb25zdCBjcmVhdGUsXFxubmV0L2JyaWRnZS9icl9jZm0uYy00OTUtXFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jPTg9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjk6YnJfY2ZtX21lcF9jcmVhdGVfcG9saWN5W0lGTEFfQlJJREdFX0NGTV9NRVBfQ1JFQVRFX01BWCArIDFdID0ge1xcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy0xMC1cXHRbSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVfVU5TUEVDXVxcdD0geyAudHlwZSA9IE5MQV9SRUpFQ1QgfSxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYz03Mj1icl9jZm1fcG9saWN5W0lGTEFfQlJJREdFX0NGTV9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy03NC1cXHRbSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVdXFx0XFx0PVxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYzo3NTpcXHRcXHRcXHRcXHROTEFfUE9MSUNZX05FU1RFRChicl9jZm1fbWVwX2NyZWF0ZV9wb2xpY3kpLFxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy03Ni1cXHRbSUZMQV9CUklER0VfQ0ZNX01FUF9ERUxFVEVdXFx0XFx0PVxcbi0tXFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jPTkyPXN0YXRpYyBpbnQgYnJfbWVwX2NyZWF0ZV9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtOTUtXFx0c3RydWN0IG5sYXR0ciAqdGJbSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVfTUFYICsgMV07XFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjk2OlxcdHN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZSBjcmVhdGU7XFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTk3LVxcdHUzMiBpbnN0YW5jZTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy0xMDAtXFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVfTUFYLCBhdHRyLFxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYzoxMDE6XFx0XFx0XFx0ICAgICAgIGJyX2NmbV9tZXBfY3JlYXRlX3BvbGljeSwgZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTAyLVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTI4LVxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYzoxMjk6XFx0cmV0dXJuIGJyX2NmbV9tZXBfY3JlYXRlKGJyLCBpbnN0YW5jZSwgXFx1MDAyNmNyZWF0ZSwgZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTMwLX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaC04LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaDo5OnN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZSB7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oLTEwLVxcdGVudW0gYnJfY2ZtX2RvbWFpbiBkb21haW47IC8qIERvbWFpbiBmb3IgdGhpcyBNRVAgKi9cXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaC0xNC1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmg6MTU6aW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTYtXFx0XFx0ICAgICAgY29uc3QgdTMyIGluc3RhbmNlLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaDoxNzpcXHRcXHQgICAgICBzdHJ1Y3QgYnJfY2ZtX21lcF9jcmVhdGUgKmNvbnN0IGNyZWF0ZSxcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTgtXFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaD0xMTc9c3RydWN0IGJyX2NmbV9tZXAge1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oLTEyMC1cXHR1MzJcXHRcXHRcXHRcXHRpbnN0YW5jZTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmg6MTIxOlxcdHN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZVxcdGNyZWF0ZTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTIyLVxcdHN0cnVjdCBicl9jZm1fbWVwX2NvbmZpZ1xcdGNvbmZpZztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MTg6MTQuMzA1MjgxNDc3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc3NjY0MjcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBXZWFrIFBvaW50cyoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgZm9yIHZ1bG5lcmFiaWxpdGllcywgYW5kIGJhc2VkIG9uIHRoZSByZWNlbnQgZmluZGluZ3MsIEkgbmVlZCB0byBleHBhbmQgbXkgc2VhcmNoLiBUaGUgdXN1YWwgc3VzcGVjdHMgaGF2ZSBhbHJlYWR5IGJlZW4gc2NydXRpbml6ZWQsIHNvIEknbSB0aGlua2luZy4uLiBsZXQncyBub3Qgb3Zlcmxvb2sgYGJyX21ycF9hZGRgLiBJdCdzIGEga2V5IGZ1bmN0aW9uIGluIFttZW50aW9uIHRoZSByZWxldmFudCBzeXN0ZW0vYXJlYSB0aGlzIGZ1bmN0aW9uIGlzIGluXSwgYW5kIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIHByZXZpb3VzIGlzc3VlcywgaXQncyBkZWZpbml0ZWx5IHdpdGhpbiB0aGUgc2NvcGUgb2Ygd2hlcmUgd2Ugc2hvdWxkIGJlIGxvb2tpbmcuIE15IGluaXRpYWwgZm9jdXMgd2FzIFttZW50aW9uIGEgcHJldmlvdXMgYXJlYSBvZiBmb2N1cywgaWYgYW55XSwgYnV0IEkgaGF2ZSB0byBiZSB0aG9yb3VnaC4gTGV0J3Mgc2VlIGlmIHRoaXMgb25lIGFsc28gbmVlZHMgdG8gYmUgZXhwbG9yZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDk4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MTg6MTcuMDgxOTI3NzE4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjIxMTUyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9tcnBfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9tcnAuYz00MTk9c3RhdGljIHZvaWQgYnJfbXJwX2RlbF9pbXBsKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycCAqbXJwKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnAuYy00ODctICovXFxubmV0L2JyaWRnZS9icl9tcnAuYzo0ODg6aW50IGJyX21ycF9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSlcXG5uZXQvYnJpZGdlL2JyX21ycC5jLTQ4OS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycF9uZXRsaW5rLmM9MzE9c3RhdGljIGludCBicl9tcnBfaW5zdGFuY2VfcGFyc2Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jLTYxLVxcdGlmIChjbWQgPT0gUlRNX1NFVExJTkspXFxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jOjYyOlxcdFxcdHJldHVybiBicl9tcnBfYWRkKGJyLCBcXHUwMDI2aW5zdCk7XFxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jLTYzLVxcdGVsc2VcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9tcnAuaD01OT1lbnVtIGJyX21ycF9od19zdXBwb3J0IHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9tcnAuaC02NS0vKiBicl9tcnAuYyAqL1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9tcnAuaDo2NjppbnQgYnJfbXJwX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnBfaW5zdGFuY2UgKmluc3RhbmNlKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfbXJwLmgtNjctaW50IGJyX21ycF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjE4OjE3LjEyODE0MTczNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTY5MzgwNDk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqUmV2aWV3aW5nIERlbGV0aW9uIFByb2Nlc3NlcyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgZGVsZXRpb24gcHJvY2Vzc2VzLCBwYXJ0aWN1bGFybHkgYXMgdGhleSByZWxhdGUgdG8gYGJyX2NmbV9tZXBfZGVsZXRlYCBhbmQgYGJyX21ycF9kZWxgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSByZW1vdmFsIG9mIHRoZXNlIG9iamVjdHMgaXMgZnVuY3Rpb25pbmcgcHJvcGVybHksIGVzcGVjaWFsbHkgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgb3RoZXIgbW9kdWxlcy4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gb3JwaGFuZWQgcmVjb3JkcywgY2FzY2FkZSBkZWxldGlvbnMgYXJlIHdvcmtpbmcgYXMgZXhwZWN0ZWQsIGFuZCB0aGF0IGFsbCByZWxhdGVkIHRhYmxlcyBhcmUgYmVpbmcgaGFuZGxlZCBncmFjZWZ1bGx5LiBMZXQgbWUgYmVnaW4gYnkgY2hlY2tpbmcgdGhlIG1vc3QgcmVjZW50IGxvZ3MsIHRoZW4gSSBjYW4gcnVuIGEgZmV3IHRhcmdldGVkIHF1ZXJpZXMgdG8gY29uZmlybSB0aGUgaW50ZWdyaXR5IG9mIHRoZSBkYXRhYmFzZSBhZnRlciBhIGRlbGV0aW9uIGlzIHRyaWdnZXJlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdW5leHBlY3RlZCBzaWRlIGVmZmVjdHM7IHRoaXMgaXMgYSBjcml0aWNhbCBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2OTUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjoxODozMi44MjE5NDg3MTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMzMwOTE2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9jZm1fbWVwX2RlbGV0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfY2ZtLmM9NTY0PXN0YXRpYyB2b2lkIG1lcF9kZWxldGVfaW1wbGVtZW50YXRpb24oc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9jZm0uYy01ODgtXFxubmV0L2JyaWRnZS9icl9jZm0uYzo1ODk6aW50IGJyX2NmbV9tZXBfZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG5uZXQvYnJpZGdlL2JyX2NmbS5jLTU5MC1cXHRcXHQgICAgICBjb25zdCB1MzIgaW5zdGFuY2UsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM9MTc9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjE4OmJyX2NmbV9tZXBfZGVsZXRlX3BvbGljeVtJRkxBX0JSSURHRV9DRk1fTUVQX0RFTEVURV9NQVggKyAxXSA9IHtcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTktXFx0W0lGTEFfQlJJREdFX0NGTV9NRVBfREVMRVRFX1VOU1BFQ11cXHQ9IHsgLnR5cGUgPSBOTEFfUkVKRUNUIH0sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM9NzI9YnJfY2ZtX3BvbGljeVtJRkxBX0JSSURHRV9DRk1fTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtNzYtXFx0W0lGTEFfQlJJREdFX0NGTV9NRVBfREVMRVRFXVxcdFxcdD1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM6Nzc6XFx0XFx0XFx0XFx0TkxBX1BPTElDWV9ORVNURUQoYnJfY2ZtX21lcF9kZWxldGVfcG9saWN5KSxcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtNzgtXFx0W0lGTEFfQlJJREdFX0NGTV9NRVBfQ09ORklHXVxcdFxcdD1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYz0xMzI9c3RhdGljIGludCBicl9tZXBfZGVsZXRlX3BhcnNlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy0xMzktXFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgSUZMQV9CUklER0VfQ0ZNX01FUF9ERUxFVEVfTUFYLCBhdHRyLFxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYzoxNDA6XFx0XFx0XFx0ICAgICAgIGJyX2NmbV9tZXBfZGVsZXRlX3BvbGljeSwgZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTQxLVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTUxLVxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYzoxNTI6XFx0cmV0dXJuIGJyX2NmbV9tZXBfZGVsZXRlKGJyLCBpbnN0YW5jZSwgZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTUzLX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaD0xNT1pbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oLTE5LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaDoyMDppbnQgYnJfY2ZtX21lcF9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaC0yMS1cXHRcXHQgICAgICBjb25zdCB1MzIgaW5zdGFuY2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjE4OjMzLjE1NTI2MjU4MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDUyNTQ1NDM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIGBicl9tcnBfZGVsYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MsIGFzIGFuIGV4cGVydCwgaW1tZWRpYXRlbHkgY2VudGVycyBvbiB0aGUgY29udGV4dC4gXCJMZXQncyBjaGVjayBgYnJfbXJwX2RlbGBcIiAtIHRoaXMgaW1wbGllcyBhIHZlcnkgc3BlY2lmaWMgYXJlYSBvZiBjb25jZXJuLiBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHN5c3RlbXMgYW5kIGRhdGEgc3RydWN0dXJlcyB0aGF0IGBicl9tcnBfZGVsYCBpcyBsaWtlbHkgYXNzb2NpYXRlZCB3aXRoLiBJcyBpdCBhIHRhYmxlIG5hbWU/IEEgc3RvcmVkIHByb2NlZHVyZT8gQSB2YXJpYWJsZSB3aXRoaW4gYSBsYXJnZXIgc2NyaXB0IG9yIG1vZHVsZT8gS25vd2luZyB0aGlzIHdpbGwgZHJhbWF0aWNhbGx5IGFmZmVjdCBteSBhcHByb2FjaC5cblxuSSdtIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBlaXRoZXIgYSBkYXRhIGlzc3VlLCBhIGNvZGUgZXhlY3V0aW9uIHByb2JsZW0sIG9yIHBlcmhhcHMgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBUaGUgdGVybSBcIk1SUFwiIChNYXRlcmlhbCBSZXF1aXJlbWVudHMgUGxhbm5pbmcpIGlzIGEgc3Ryb25nIGluZGljYXRvciB0aGF0IEknbSBsaWtlbHkgZGVhbGluZyB3aXRoIHN1cHBseSBjaGFpbiwgbWFudWZhY3R1cmluZywgb3IgZGlzdHJpYnV0aW9uIHByb2Nlc3Nlcy4gXCJEZWxcIiBzdWdnZXN0cyBkZWxldGlvbiwgcmVtb3ZhbCwgb3IgcGVyaGFwcyBkZWxpdmVyeS4gQ29tYmluaW5nIHRob3NlLCBteSBtaW5kIGlzIGltbWVkaWF0ZWx5IHdvcmtpbmcgdGhyb3VnaCB0aGUgcG90ZW50aWFsIHNjZW5hcmlvcywgc29tZXRoaW5nIGxpa2U6XG5cbiogICAqKkRhdGEgSW50ZWdyaXR5OioqIElzIHRoaXMgcmVsYXRlZCB0byBkZWxldGluZyBwbGFubmVkIG9yZGVycywgZGVsZXRpbmcgcmVjb3JkcyBvZiBkZWxpdmVyaWVzLCBvciBzb21ldGhpbmcgc2ltaWxhcj8gQXJlIHRoZXJlIGNvbnN0cmFpbnRzIG9yIHRyaWdnZXJzIGludm9sdmVkIHRoYXQgbWlnaHQgY2F1c2UgZXJyb3JzP1xuKiAgICoqUHJvY2VzcyBBdXRvbWF0aW9uOioqIElzIHRoaXMgYSBzY3JpcHQgdGhhdCdzIHN1cHBvc2VkIHRvIGhhbmRsZSB0aGVzZSBkZWxldGlvbnMgYXV0b21hdGljYWxseT8gSWYgc28sIHdoYXQncyBpdHMgaGlzdG9yeSBvZiBzdWNjZXNzIGFuZCBmYWlsdXJlPyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGNvbnNlcXVlbmNlcyBvZiBhIG1hbGZ1bmN0aW9uP1xuKiAgICoqUGVyZm9ybWFuY2UgSW1wYWN0OioqIEFyZSB3ZSB0YWxraW5nIGFib3V0IGxhcmdlIGRhdGFzZXRzPyBDb3VsZCBhIHBvb3JseSBvcHRpbWl6ZWQgZGVsZXRlIG9wZXJhdGlvbiBiZSBzbG93aW5nIGRvd24gb3RoZXIgY3J1Y2lhbCBwcm9jZXNzZXM/IEFyZSB0aGVyZSBsb2NrcyB0aGF0IG1pZ2h0IGJlIGFuIGlzc3VlP1xuXG5CZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gYW55IGNvZGUgb3IgZGF0YSwgSSBuZWVkIHRvIGtub3cgKndoYXQqIEknbSBsb29raW5nIGZvciBzcGVjaWZpY2FsbHkgYW5kIHdoYXQgdGhlIGdvYWwgaXMuIFRoaXMgaXMgYWxsIGp1c3QgYW4gaW5pdGlhbCBtZW50YWwgZnJhbWV3b3JrIHRvIHN0cnVjdHVyZSB0aGUgaW52ZXN0aWdhdGlvbi4gTGV0IG1lIGRldGVybWluZSB0aGUgbmV4dCBzdGVwcyBJIHNob3VsZCB0YWtlIHRvIGdhaW4gZ3JlYXRlciBjb250ZXh0IG9uIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYzOCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjE4OjUzLjY4MDcxOTgwNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ5MjYzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfbXJwX2RlbFxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9tcnAuYz01NTM9dm9pZCBicl9tcnBfcG9ydF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnAuYy01NjYtICovXFxubmV0L2JyaWRnZS9icl9tcnAuYzo1Njc6aW50IGJyX21ycF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSlcXG5uZXQvYnJpZGdlL2JyX21ycC5jLTU2OC17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycF9uZXRsaW5rLmM9MzE9c3RhdGljIGludCBicl9tcnBfaW5zdGFuY2VfcGFyc2Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jLTYzLVxcdGVsc2VcXG5uZXQvYnJpZGdlL2JyX21ycF9uZXRsaW5rLmM6NjQ6XFx0XFx0cmV0dXJuIGJyX21ycF9kZWwoYnIsIFxcdTAwMjZpbnN0KTtcXG5uZXQvYnJpZGdlL2JyX21ycF9uZXRsaW5rLmMtNjUtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfbXJwLmg9NjY9aW50IGJyX21ycF9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlX21ycC5oOjY3OmludCBicl9tcnBfZGVsKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycF9pbnN0YW5jZSAqaW5zdGFuY2UpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9tcnAuaC02OC1pbnQgYnJfbXJwX3NldF9wb3J0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjE4OjUzLjczNTY1MjI0MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1Mjc4MjA5OTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQnJpZGdlIE1ha2VmaWxlKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgdGhlIG5ldHdvcmtpbmcgYnJpZGdlIGltcGxlbWVudGF0aW9uLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzIHdpdGggdGhlc2Uga2luZHMgb2YgaW52ZXN0aWdhdGlvbnMsIGlzIHRoZSBgTWFrZWZpbGVgIGluIHRoZSBgbmV0L2JyaWRnZS9gIGRpcmVjdG9yeS4gVGhhdCdzIHRoZSBoZWFydCBvZiBob3cgdGhpbmdzIGFyZSBidWlsdCBpbiB0aGlzIG1vZHVsZSwgaXQgaG9sZHMgdGhlIHNlY3JldHMuIEknbGwgbmVlZCB0byBzZWUgcHJlY2lzZWx5IHdoaWNoIHNvdXJjZSBmaWxlcyBhcmUgY29tcGlsZWQsIHdoYXQgY29tcGlsZXIgZmxhZ3MgYXJlIHVzZWQsIGFuZCBtb3N0IGNyaXRpY2FsbHksIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGluZmx1ZW5jZSB0aGUgYnVpbGQgcHJvY2Vzcy4gSSdtIGV4cGVjdGluZyB0byBzZWUgZGVwZW5kZW5jaWVzIG9uIHZhcmlvdXMga2VybmVsIGNvbmZpZ3VyYXRpb24gc3ltYm9scyByZWxhdGVkIHRvIGJyaWRnaW5nIGZ1bmN0aW9uYWxpdHk7IHRoaW5ncyBsaWtlIFZMQU4gc3VwcG9ydCwgU1RQLCBhbmQgdGhlIHZhcmlvdXMgYnJpZGdlIHByb3RvY29scy4gVW5kZXJzdGFuZGluZyB0aGlzIE1ha2VmaWxlIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDM0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MTg6NTkuMDEzODY0NDg2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgSUVFRSA4MDIuMWQgZXRoZXJuZXQgYnJpZGdpbmcgbGF5ZXIuXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai0kKENPTkZJR19CUklER0UpICs9IGJyaWRnZS5vXFxuICAgNzpcXHRcXG4gICA4OlxcdGJyaWRnZS15XFx0Oj0gYnIubyBicl9kZXZpY2UubyBicl9mZGIubyBicl9mb3J3YXJkLm8gYnJfaWYubyBicl9pbnB1dC5vIFxcXFxcXG4gICA5OlxcdFxcdFxcdFxcdGJyX2lvY3RsLm8gYnJfc3RwLm8gYnJfc3RwX2JwZHUubyBcXFxcXFxuICAxMDpcXHRcXHRcXHRcXHRicl9zdHBfaWYubyBicl9zdHBfdGltZXIubyBicl9uZXRsaW5rLm8gXFxcXFxcbiAgMTE6XFx0XFx0XFx0XFx0YnJfbmV0bGlua190dW5uZWwubyBicl9hcnBfbmRfcHJveHkub1xcbiAgMTI6XFx0XFxuICAxMzpcXHRicmlkZ2UtJChDT05GSUdfU1lTRlMpICs9IGJyX3N5c2ZzX2lmLm8gYnJfc3lzZnNfYnIub1xcbiAgMTQ6XFx0XFxuICAxNTpcXHRicmlkZ2UtJChzdWJzdCBtLHksJChDT05GSUdfQlJJREdFX05FVEZJTFRFUikpICs9IGJyX25mX2NvcmUub1xcbiAgMTY6XFx0XFxuICAxNzpcXHRicl9uZXRmaWx0ZXIteSA6PSBicl9uZXRmaWx0ZXJfaG9va3Mub1xcbiAgMTg6XFx0YnJfbmV0ZmlsdGVyLSQoc3Vic3QgbSx5LCQoQ09ORklHX0lQVjYpKSArPSBicl9uZXRmaWx0ZXJfaXB2Ni5vXFxuICAxOTpcXHRvYmotJChDT05GSUdfQlJJREdFX05FVEZJTFRFUikgKz0gYnJfbmV0ZmlsdGVyLm9cXG4gIDIwOlxcdFxcbiAgMjE6XFx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HKSArPSBicl9tdWx0aWNhc3QubyBicl9tZGIubyBicl9tdWx0aWNhc3RfZWh0Lm9cXG4gIDIyOlxcdFxcbiAgMjM6XFx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklORykgKz0gYnJfdmxhbi5vIGJyX3ZsYW5fdHVubmVsLm8gYnJfdmxhbl9vcHRpb25zLm8gYnJfbXN0Lm9cXG4gIDI0OlxcdFxcbiAgMjU6XFx0YnJpZGdlLSQoQ09ORklHX05FVF9TV0lUQ0hERVYpICs9IGJyX3N3aXRjaGRldi5vXFxuICAyNjpcXHRcXG4gIDI3OlxcdG9iai0kKENPTkZJR19ORVRGSUxURVIpICs9IG5ldGZpbHRlci9cXG4gIDI4OlxcdFxcbiAgMjk6XFx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9NUlApXFx0Kz0gYnJfbXJwX3N3aXRjaGRldi5vIGJyX21ycC5vIGJyX21ycF9uZXRsaW5rLm9cXG4gIDMwOlxcdFxcbiAgMzE6XFx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9DRk0pXFx0Kz0gYnJfY2ZtLm8gYnJfY2ZtX25ldGxpbmsub1xcbiAgMzI6XFx0XFxuICAzMzpcXHRpZmRlZiBDT05GSUdfR0NPVl9QUk9GSUxFX05FVEZJTFRFUlxcbiAgMzQ6XFx0R0NPVl9QUk9GSUxFX2JyX25mX2NvcmUubyA6PSB5XFxuICAzNTpcXHRHQ09WX1BST0ZJTEVfYnJfbmV0ZmlsdGVyX2hvb2tzLm8gOj0geVxcbiAgMzY6XFx0R0NPVl9QUk9GSUxFX2JyX25ldGZpbHRlcl9pcHY2Lm8gOj0geVxcbiAgMzc6XFx0ZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MTg6NTkuMDEzOTIyNzI2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1NjQ3NDUwMTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRXRoZXJuZXQgQnJpZGdlIENGTSBhbmQgTVJQIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczogYEJSSURHRWAsIGBCUklER0VfQ0ZNYCwgYW5kIGBCUklER0VfTVJQYC4gIEknbGwgcXVpY2tseSBjaGVjayBLY29uZmlnIGZvciBkZXBlbmRlbmNpZXM7IGl0IGxvb2tzIGxpa2UgYEJSSURHRV9DRk1gIGFuZCBgQlJJREdFX01SUGAgYm90aCBkZXBlbmQgb24gYEJSSURHRWAsIHdoaWNoIG1ha2VzIHNlbnNlIGJlY2F1c2Ugd2UgbmVlZCB0aGUgYmFzaWMgYnJpZGdpbmcgZnVuY3Rpb25hbGl0eSBmaXJzdC4gYEJSSURHRWAgaXRzZWxmIGlzIGEgdHJpc3RhdGUgY29uZmlnIGVuYWJsaW5nIDgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZywgYW5kIHNlbGVjdHMgTExDIGFuZCBTVFAuXG5cbk5vdywgbGV0J3Mgc2VlIHdoYXQgdGhlIGRpZmYgYWN0dWFsbHkgdG91Y2hlcy4gSSBzZWUgZmlsZXMgbGlrZSBgYnJfY2ZtLmNgLCBgYnJfZGV2aWNlLmNgLCBgYnJfaW5wdXQuY2AsIGBicl9tcnAuY2AsIGFuZCBgYnJfcHJpdmF0ZS5oYC4gIFRoaXMgY29uZmlybXMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggQ29ubmVjdGl2aXR5IEZhdWx0IE1hbmFnZW1lbnQgKENGTSkgYW5kIE1lZGlhIFJlZHVuZGFuY3kgUHJvdG9jb2wgKE1SUCkgaGFuZGxpbmcgd2l0aGluIHRoZSBicmlkZ2UuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGUgY2hhbmdlcyBhcmUgYWJvdXQgYnJpZGdlIGRldmljZSBzZXR1cCwgcGFja2V0IGlucHV0LCBhbmQgdGhlIGNyZWF0aW9uL2RlbGV0aW9uIG9mIENGTSBNRVBzIGFuZCBNUlAgaW5zdGFuY2VzLlxuXG5OZXh0LCBJJ2xsIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyBtb2RpZmllZDogYGJyX2NmbV9mcmFtZV9yeGAsIGBicl9tcnBfcHJvY2Vzc2AsIGBicl9jZm1fbWVwX2NyZWF0ZWAsIGBicl9jZm1fbWVwX2RlbGV0ZWAsIGBicl9tcnBfYWRkYCwgYW5kIGBicl9tcnBfZGVsYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGV5IGFyZSB0aGUgY29ycmVjdCBzeW1ib2xzLCBhbmQgdGhhdCB0aGVpciB2aXNpYmlsaXR5IGlzIGNvcnJlY3QuIGBicl9jZm1fZnJhbWVfcnhgIGFuZCBgYnJfbXJwX3Byb2Nlc3NgIGFyZSBub3cgbm9uLXN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IGluZGljYXRlcyB0aGV5IG1pZ2h0IGJlIGdldHRpbmcgdXNlZCBvdXRzaWRlIG9mIHRoZWlyIG9yaWdpbmFsIHNjb3BlLiBUaGUgcmVtYWluaW5nIGFyZSBub24tc3RhdGljIGFzIHdlbGwuXG5cbkknbGwgcXVpY2tseSBzY2FuIGZvciBvdGhlciBtb2RpZmllZCBmdW5jdGlvbnMuIEluIGBicl9kZXZpY2UuY2AsIHRoZXJlJ3MgYGJyX2Rldl9zZXR1cGAgKGluaXRpYWxpemF0aW9uKSwgd2hpY2ggc2VlbXMgcmVhc29uYWJsZS4gSW4gYGJyX2lucHV0LmNgLCBgYnJfcHJvY2Vzc19mcmFtZV90eXBlYCBpcyBzdGF0aWMgYnV0IGBicl9oYW5kbGVfZnJhbWVgIGlzIHByZXNlbnQsIGFsb25nIHdpdGggdGhlIGRlbGV0aW9ucyBvZiBgYnJfYWRkX2ZyYW1lYCBhbmQgYGJyX2RlbF9mcmFtZWAuIEluIGBicl9jZm0uY2AsIGBtZXBfZGVsZXRlX2ltcGxlbWVudGF0aW9uYCBpcyBzdGF0aWMgYW5kIGNhbGxlZCBieSBgYnJfY2ZtX21lcF9kZWxldGVgIGFuZCBgYnJfY2ZtX3BvcnRfZGVsYC4gSW4gYGJyX21ycC5jYCwgdGhlcmUncyBgYnJfbXJwX2RlbF9pbXBsYCwgc3RhdGljIHRvbywgYW5kIGNhbGxlZCBieSBgYnJfbXJwX2RlbGAgYW5kIGBicl9tcnBfcG9ydF9kZWxgLlxuXG5TbywgdG8gc3VtbWFyaXplLCB0aGUgcmVsZXZhbnQgc3ltYm9scyBhcmU6IGBicl9jZm1fZnJhbWVfcnhgLCBgYnJfbXJwX3Byb2Nlc3NgLCBgYnJfY2ZtX21lcF9jcmVhdGVgLCBgYnJfY2ZtX21lcF9kZWxldGVgLCBgYnJfbXJwX2FkZGAsIGFuZCBgYnJfbXJwX2RlbGAuICBUaGUgY29uZmlndXJhdGlvbnMgd2UncmUgdHJhY2tpbmcgYXJlOiBgQlJJREdFYCwgYEJSSURHRV9DRk1gLCBhbmQgYEJSSURHRV9NUlBgLlxuXG5CYXNlZCBvbiB0aGlzLCBpdCBzZWVtcyB0aGUgcGF0Y2ggaXMgb3B0aW1pemluZyBFdGhlcm5ldCBCcmlkZ2UgZnJhbWUgdHlwZSBoYW5kbGluZyBmb3IgQ0ZNIGFuZCBNUlAuICBJbnN0ZWFkIG9mIGR5bmFtaWMgbWFuYWdlbWVudCBvZiBgZnJhbWVfdHlwZV9saXN0YCwgaXQncyByZXBsYWNpbmcgaXQgd2l0aCBkaXJlY3QgZmxhZyBjaGVja3MgKGBCUk9QVF9DRk1fRU5BQkxFRGAgYW5kIGBCUk9QVF9NUlBfRU5BQkxFRGApIGluIHRoZSByZWNlaXZlIHBhdGggKGBicl9oYW5kbGVfZnJhbWVgIC8gYGJyX3Byb2Nlc3NfZnJhbWVfdHlwZWApLiAgVGhpcyBpcyBsaWtlbHkgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS4gVGhlIGNvZGUgYWxzbyBleHBvcnRzIGBicl9jZm1fZnJhbWVfcnhgIGFuZCBgYnJfbXJwX3Byb2Nlc3NgLCBhbmQgdXBkYXRlcyB0aGUgaW5zdGFuY2UgY3JlYXRpb24vZGVsZXRpb24gcGF0aHMuIFRoaXMgY2hhbmdlIGlzIGNlcnRhaW5seSB0ZXN0YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgYXMgYSBtYXR0ZXIgb2YgY291cnNlLlxuXG5Pa2F5LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzU2LCJPdXRwdXRUb2tlbnMiOjIxMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjE5OjM0LjY2MTM3NTUyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY2MTg0ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX0NGTVwiLFxuICAgIFwiQlJJREdFX01SUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX2NmbV9mcmFtZV9yeFwiLFxuICAgIFwiYnJfbXJwX3Byb2Nlc3NcIixcbiAgICBcImJyX2NmbV9tZXBfY3JlYXRlXCIsXG4gICAgXCJicl9jZm1fbWVwX2RlbGV0ZVwiLFxuICAgIFwiYnJfbXJwX2FkZFwiLFxuICAgIFwiYnJfbXJwX2RlbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYnJpZGdlIGZyYW1lIGhhbmRsaW5nIGxvZ2ljIGZvciBDRk0gKDgwMi4xUSBDRk0pIGFuZCBNUlAgcHJvdG9jb2xzIGJ5IHJlcGxhY2luZyB0aGUgZHluYW1pYyBmcmFtZV90eXBlX2xpc3Qgd2l0aCBicmlkZ2Ugb3B0aW9uIGZsYWdzIChCUk9QVF9DRk1fRU5BQkxFRCBhbmQgQlJPUFRfTVJQX0VOQUJMRUQpIGFuZCBkaXJlY3QgY2FsbHMgdG8gYnJfY2ZtX2ZyYW1lX3J4IGFuZCBicl9tcnBfcHJvY2Vzcy4gSXQgbW9kaWZpZXMgYm90aCB0aGUgZnJhbWUgcmVjZWl2ZSBwYXRoIGFuZCB0aGUgbmV0bGluay10cmlnZ2VyZWQgaW5zdGFuY2UgY3JlYXRpb24vZGVsZXRpb24gcGF0aHMuIFRoaXMgYWZmZWN0cyBjb3JlIGJyaWRnZSBuZXR3b3JraW5nIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbCBlbnZpcm9ubWVudHMgd2l0aG91dCBzcGVjaWFsaXplZCBoYXJkd2FyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIixcbiAgICBcIkJSSURHRV9DRk1cIixcbiAgICBcIkJSSURHRV9NUlBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9jZm1fZnJhbWVfcnhcIixcbiAgICBcImJyX21ycF9wcm9jZXNzXCIsXG4gICAgXCJicl9jZm1fbWVwX2NyZWF0ZVwiLFxuICAgIFwiYnJfY2ZtX21lcF9kZWxldGVcIixcbiAgICBcImJyX21ycF9hZGRcIixcbiAgICBcImJyX21ycF9kZWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGJyaWRnZSBmcmFtZSBoYW5kbGluZyBsb2dpYyBmb3IgQ0ZNICg4MDIuMVEgQ0ZNKSBhbmQgTVJQIHByb3RvY29scyBieSByZXBsYWNpbmcgdGhlIGR5bmFtaWMgZnJhbWVfdHlwZV9saXN0IHdpdGggYnJpZGdlIG9wdGlvbiBmbGFncyAoQlJPUFRfQ0ZNX0VOQUJMRUQgYW5kIEJST1BUX01SUF9FTkFCTEVEKSBhbmQgZGlyZWN0IGNhbGxzIHRvIGJyX2NmbV9mcmFtZV9yeCBhbmQgYnJfbXJwX3Byb2Nlc3MuIEl0IG1vZGlmaWVzIGJvdGggdGhlIGZyYW1lIHJlY2VpdmUgcGF0aCBhbmQgdGhlIG5ldGxpbmstdHJpZ2dlcmVkIGluc3RhbmNlIGNyZWF0aW9uL2RlbGV0aW9uIHBhdGhzLiBUaGlzIGFmZmVjdHMgY29yZSBicmlkZ2UgbmV0d29ya2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWwgZW52aXJvbm1lbnRzIHdpdGhvdXQgc3BlY2lhbGl6ZWQgaGFyZHdhcmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjE5OjM0LjczODAwMDE3N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg5NjkxMjg5ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjoxOTozNC43Mzg0NTI3MTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1ODk2ODY3MjE2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBicmlkZ2Ugc3Vic3lzdGVtJ3MgQ0ZNIChDb25uZWN0aXZpdHkgRmF1bHQgTWFuYWdlbWVudCkgYW5kIE1SUCAoTWVkaWEgUmVkdW5kYW5jeSBQcm90b2NvbCkgZnJhbWUgZGlzcGF0Y2ggbWVjaGFuaXNtIGJ5IHJlcGxhY2luZyB0aGUgZHluYW1pYyBmcmFtZS10eXBlIGxpbmtlZCBsaXN0IChgZnJhbWVfdHlwZV9saXN0YCkgd2l0aCBiaXQgZmxhZ3MgaW4gdGhlIGV4aXN0aW5nIGJyaWRnZSBvcHRpb25zIGJpdG1hc2sgKGBCUk9QVF9DRk1fRU5BQkxFRGAgYW5kIGBCUk9QVF9NUlBfRU5BQkxFRGApLiBcXG5cXG5ObyBuZXcgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGRhdGEgYnVmZmVycyBhcmUgY3JlYXRlZCBvciBleHBvcnRlZCB0byB1c2VyIHNwYWNlLiBUaGUgbG9naWMgcmVsaWVzIG9uIGFscmVhZHktYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBicmlkZ2Ugc3RydWN0dXJlcyAoYHN0cnVjdCBuZXRfYnJpZGdlYCksIHRvZ2dsaW5nIGFuZCBjaGVja2luZyBleGlzdGluZyBiaXQgZmxhZ3MuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIG9uLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBTdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgY29uZmlndXJhdGlvbnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHJlZ3Jlc3Npb24uIERlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMjgyYTYxODI5YTZiZTdmNTFjYTllYTc2ZDBjNjg3MzFjZTJkMzdiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTI6MTc6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2NmbS5jIGIvbmV0L2JyaWRnZS9icl9jZm0uY1xuaW5kZXggZGVhNTZmZmZhMWMxOS4uOWRjYzk3ZDYzYTZmYyAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfY2ZtLmNcbisrKyBiL25ldC9icmlkZ2UvYnJfY2ZtLmNcbkBAIC0zNjcsNyArMzY3LDcgQEAgc3RhdGljIHUzMiBjY21fdGx2X2V4dHJhY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluZGV4LFxuIH1cbiBcbiAvKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgKi9cbi1zdGF0aWMgaW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK2ludCBicl9jZm1fZnJhbWVfcngoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHR1MzIgbWRsZXZlbCwgaW50ZXJ2YWwsIHNpemUsIGluZGV4LCBtYXg7XG4gXHRjb25zdCBzdHJ1Y3QgYnJfY2ZtX2NvbW1vbl9oZHIgKmhkcjtcbkBAIC00ODksMTEgKzQ4OSw2IEBAIHN0YXRpYyBpbnQgYnJfY2ZtX2ZyYW1lX3J4KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBicl9mcmFtZV90eXBlIGNmbV9mcmFtZV90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XG4tXHQudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX0NGTSksXG4tXHQuZnJhbWVfaGFuZGxlciA9IGJyX2NmbV9mcmFtZV9yeCxcbi19O1xuLVxuIGludCBicl9jZm1fbWVwX2NyZWF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gXHRcdCAgICAgIGNvbnN0IHUzMiBpbnN0YW5jZSxcbiBcdFx0ICAgICAgc3RydWN0IGJyX2NmbV9tZXBfY3JlYXRlICpjb25zdCBjcmVhdGUsXG5AQCAtNTU5LDcgKzU1NCw3IEBAIGludCBicl9jZm1fbWVwX2NyZWF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZtZXAtXHUwMDNlY2NtX3R4X2R3b3JrLCBjY21fdHhfd29ya19leHBpcmVkKTtcbiBcbiBcdGlmIChobGlzdF9lbXB0eShcdTAwMjZici1cdTAwM2VtZXBfbGlzdCkpXG4tXHRcdGJyX2FkZF9mcmFtZShiciwgXHUwMDI2Y2ZtX2ZyYW1lX3R5cGUpO1xuK1x0XHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9DRk1fRU5BQkxFRCwgdHJ1ZSk7XG4gXG4gXHRobGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2bWVwLVx1MDAzZWhlYWQsIFx1MDAyNmJyLVx1MDAzZW1lcF9saXN0KTtcbiBcbkBAIC01ODgsNyArNTgzLDcgQEAgc3RhdGljIHZvaWQgbWVwX2RlbGV0ZV9pbXBsZW1lbnRhdGlvbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gXHRrZnJlZV9yY3UobWVwLCByY3UpO1xuIFxuIFx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1lcF9saXN0KSlcbi1cdFx0YnJfZGVsX2ZyYW1lKGJyLCBcdTAwMjZjZm1fZnJhbWVfdHlwZSk7XG4rXHRcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX0NGTV9FTkFCTEVELCBmYWxzZSk7XG4gfVxuIFxuIGludCBicl9jZm1fbWVwX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9kZXZpY2UuYyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmNcbmluZGV4IGZmNTVkYWI3MzYzMjYuLmUwMWM0NGE5MGQ4NGIgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX2RldmljZS5jXG5AQCAtNTAzLDcgKzUwMyw2IEBAIHZvaWQgYnJfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZici1cdTAwM2Vsb2NrKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmJyLVx1MDAzZXBvcnRfbGlzdCk7XG4gXHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2YnItXHUwMDNlZmRiX2xpc3QpO1xuLVx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNmJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCk7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApXG4gXHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2YnItXHUwMDNlbXJwX2xpc3QpO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaW5wdXQuYyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xuaW5kZXggZDg3YTVmOWZhOTJiNy4uNzI4OTJlNWI0MDQzOSAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xuKysrIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jXG5AQCAtMzE3LDIwICszMTcsMzMgQEAgc3RhdGljIGludCBuZl9ob29rX2JyaWRnZV9wcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuIFx0cmV0dXJuIFJYX0hBTkRMRVJfQ09OU1VNRUQ7XG4gfVxuIFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfQ0ZNKSB8fCBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTVJQKVxuKy8qIENGTS9NUlAgYXJlIHVuY29tbW9uOyB0ZXN0IGJvdGggZW5hYmxlIGJpdHMgdG9nZXRoZXIgZmlyc3QuICovXG4rI2RlZmluZSBCUl9DRk1fTVJQX09QVFMgXFxcbitcdCgoSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX0NGTSkgPyBCSVQoQlJPUFRfQ0ZNX0VOQUJMRUQpIDogMFVMKSB8IFxcXG4rXHQgKElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApID8gQklUKEJST1BUX01SUF9FTkFCTEVEKSA6IDBVTCkpXG4rXG4gLyogUmV0dXJuIDAgaWYgdGhlIGZyYW1lIHdhcyBub3QgcHJvY2Vzc2VkIG90aGVyd2lzZSAxXG4gICogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrXG4gICovXG4gc3RhdGljIGludCBicl9wcm9jZXNzX2ZyYW1lX3R5cGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbiBcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBicl9mcmFtZV90eXBlICp0bXA7XG4tXG4tXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodG1wLCBcdTAwMjZwLVx1MDAzZWJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdClcbi1cdFx0aWYgKHVubGlrZWx5KHRtcC1cdTAwM2V0eXBlID09IHNrYi1cdTAwM2Vwcm90b2NvbCkpXG4tXHRcdFx0cmV0dXJuIHRtcC1cdTAwM2VmcmFtZV9oYW5kbGVyKHAsIHNrYik7XG4rXHRzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBwLVx1MDAzZWJyO1xuIFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfQ0ZNKVxuK1x0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9DRk0pIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX0NGTV9FTkFCTEVEKSlcbitcdFx0cmV0dXJuIGJyX2NmbV9mcmFtZV9yeChwLCBza2IpO1xuKyNlbmRpZlxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTVJQKVxuK1x0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9NUlApIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX01SUF9FTkFCTEVEKSlcbitcdFx0cmV0dXJuIGJyX21ycF9wcm9jZXNzKHAsIHNrYik7XG4rI2VuZGlmXG4gXHRyZXR1cm4gMDtcbiB9XG4rI2VuZGlmXG4gXG4gLypcbiAgKiBSZXR1cm4gTlVMTCBpZiBza2IgaXMgaGFuZGxlZFxuQEAgLTQyNSw4ICs0MzgsMTEgQEAgc3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgYnJfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKHVubGlrZWx5KGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShwLCBza2IpKSlcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX0NGTSkgfHwgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX01SUClcbitcdGlmICh1bmxpa2VseSgocC1cdTAwM2Vici1cdTAwM2VvcHRpb25zIFx1MDAyNiBCUl9DRk1fTVJQX09QVFMpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShwLCBza2IpKSlcbiBcdFx0cmV0dXJuIFJYX0hBTkRMRVJfUEFTUztcbisjZW5kaWZcbiBcbiBmb3J3YXJkOlxuIFx0aWYgKGJyX21zdF9pc19lbmFibGVkKHApKVxuQEAgLTQ2NywxOSArNDgzLDMgQEAgcnhfaGFuZGxlcl9mdW5jX3QgKmJyX2dldF9yeF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRyZXR1cm4gYnJfaGFuZGxlX2ZyYW1lO1xuIH1cbi1cbi12b2lkIGJyX2FkZF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdClcbi17XG4tXHRobGlzdF9hZGRfaGVhZF9yY3UoXHUwMDI2ZnQtXHUwMDNlbGlzdCwgXHUwMDI2YnItXHUwMDNlZnJhbWVfdHlwZV9saXN0KTtcbi19XG4tXG4tdm9pZCBicl9kZWxfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQpXG4te1xuLVx0c3RydWN0IGJyX2ZyYW1lX3R5cGUgKnRtcDtcbi1cbi1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgXHUwMDI2YnItXHUwMDNlZnJhbWVfdHlwZV9saXN0LCBsaXN0KVxuLVx0XHRpZiAoZnQgPT0gdG1wKSB7XG4tXHRcdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZmdC1cdTAwM2VsaXN0KTtcbi1cdFx0XHRyZXR1cm47XG4tXHRcdH1cbi19XG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tcnAuYyBiL25ldC9icmlkZ2UvYnJfbXJwLmNcbmluZGV4IGVmMTZkMDcwMzkyNDEuLmRjZTZlZmE5NmM0YzYgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX21ycC5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX21ycC5jXG5AQCAtNiwxMyArNiw2IEBAXG4gc3RhdGljIGNvbnN0IHU4IG1ycF90ZXN0X2RtYWNbRVRIX0FMRU5dID0geyAweDEsIDB4MTUsIDB4NGUsIDB4MCwgMHgwLCAweDEgfTtcbiBzdGF0aWMgY29uc3QgdTggbXJwX2luX3Rlc3RfZG1hY1tFVEhfQUxFTl0gPSB7IDB4MSwgMHgxNSwgMHg0ZSwgMHgwLCAweDAsIDB4MyB9O1xuIFxuLXN0YXRpYyBpbnQgYnJfbXJwX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4tXG4tc3RhdGljIHN0cnVjdCBicl9mcmFtZV90eXBlIG1ycF9mcmFtZV90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XG4tXHQudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX01SUCksXG4tXHQuZnJhbWVfaGFuZGxlciA9IGJyX21ycF9wcm9jZXNzLFxuLX07XG4tXG4gc3RhdGljIGJvb2wgYnJfbXJwX2lzX3JpbmdfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwX3BvcnQsXG4gXHRcdFx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpzX3BvcnQsXG4gXHRcdFx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxuQEAgLTQ4Niw3ICs0NzksNyBAQCBzdGF0aWMgdm9pZCBicl9tcnBfZGVsX2ltcGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnApXG4gXHRrZnJlZV9yY3UobXJwLCByY3UpO1xuIFxuIFx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1ycF9saXN0KSlcbi1cdFx0YnJfZGVsX2ZyYW1lKGJyLCBcdTAwMjZtcnBfZnJhbWVfdHlwZSk7XG4rXHRcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01SUF9FTkFCTEVELCBmYWxzZSk7XG4gfVxuIFxuIC8qIEFkZHMgYSBuZXcgTVJQIGluc3RhbmNlLlxuQEAgLTUzNiw3ICs1MjksNyBAQCBpbnQgYnJfbXJwX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnBfaW5zdGFuY2UgKmluc3RhbmNlKVxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKG1ycC1cdTAwM2VzX3BvcnQsIHApO1xuIFxuIFx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1ycF9saXN0KSlcbi1cdFx0YnJfYWRkX2ZyYW1lKGJyLCBcdTAwMjZtcnBfZnJhbWVfdHlwZSk7XG4rXHRcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01SUF9FTkFCTEVELCB0cnVlKTtcbiBcbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm1ycC1cdTAwM2V0ZXN0X3dvcmssIGJyX21ycF90ZXN0X3dvcmtfZXhwaXJlZCk7XG4gXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZtcnAtXHUwMDNlaW5fdGVzdF93b3JrLCBicl9tcnBfaW5fdGVzdF93b3JrX2V4cGlyZWQpO1xuQEAgLTEyNDEsNyArMTIzNCw3IEBAIHN0YXRpYyBpbnQgYnJfbXJwX3JjdihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuICAqIG5vcm1hbCBmb3J3YXJkaW5nLlxuICAqIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9ja1xuICAqL1xuLXN0YXRpYyBpbnQgYnJfbXJwX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbitpbnQgYnJfbXJwX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHQvKiBJZiB0aGVyZSBpcyBubyBNUlAgaW5zdGFuY2UgZG8gbm9ybWFsIGZvcndhcmRpbmcgKi9cbiBcdGlmIChsaWtlbHkoIXRlc3RfYml0KEJSX01SUF9BV0FSRV9CSVQsIFx1MDAyNnAtXHUwMDNlZmxhZ3MpKSlcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaCBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXG5pbmRleCBkMzM3YjFjZmI5ODBkLi5hZmU3YzBiNGY4ZmE3IDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcbisrKyBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXG5AQCAtNDk1LDEyICs0OTUsMTMgQEAgZW51bSBuZXRfYnJpZGdlX29wdHMge1xuIFx0QlJPUFRfTVNUX0VOQUJMRUQsXG4gXHRCUk9QVF9NREJfT0ZGTE9BRF9GQUlMX05PVElGSUNBVElPTixcbiBcdEJST1BUX0ZEQl9MT0NBTF9WTEFOXzAsXG4rXHRCUk9QVF9DRk1fRU5BQkxFRCxcbitcdEJST1BUX01SUF9FTkFCTEVELFxuIH07XG4gXG4gc3RydWN0IG5ldF9icmlkZ2Uge1xuIFx0c3BpbmxvY2tfdFx0XHRcdGxvY2s7XG4gXHRzcGlubG9ja190XHRcdFx0aGFzaF9sb2NrO1xuLVx0c3RydWN0IGhsaXN0X2hlYWRcdFx0ZnJhbWVfdHlwZV9saXN0O1xuIFx0c3RydWN0IG5ldF9kZXZpY2VcdFx0KmRldjtcbiBcdHVuc2lnbmVkIGxvbmdcdFx0XHRvcHRpb25zO1xuIFx0LyogVGhlc2UgZmllbGRzIGFyZSBhY2Nlc3NlZCBvbiBlYWNoIHBhY2tldCAqL1xuQEAgLTkzMiwxNiArOTMzLDYgQEAgaW50IG5icF9iYWNrdXBfY2hhbmdlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBuZXRfZGV2aWNlICpiYWNrdXBfZGV2KTtcbiBpbnQgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gcnhfaGFuZGxlcl9mdW5jX3QgKmJyX2dldF9yeF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIFxuLXN0cnVjdCBicl9mcmFtZV90eXBlIHtcbi1cdF9fYmUxNlx0XHRcdHR5cGU7XG4tXHRpbnRcdFx0XHQoKmZyYW1lX2hhbmRsZXIpKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXG4tXHRcdFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpO1xuLVx0c3RydWN0IGhsaXN0X25vZGVcdGxpc3Q7XG4tfTtcbi1cbi12b2lkIGJyX2FkZF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdCk7XG4tdm9pZCBicl9kZWxfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQpO1xuLVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBicl9yeF9oYW5kbGVyX2NoZWNrX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHJldHVybiByY3VfZGVyZWZlcmVuY2UoZGV2LVx1MDAzZXJ4X2hhbmRsZXIpID09IGJyX2dldF9yeF9oYW5kbGVyKGRldik7XG5AQCAtMjA4MCw2ICsyMDcxLDcgQEAgaW50IGJyX21ycF9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4gYm9vbCBicl9tcnBfZW5hYmxlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xuIHZvaWQgYnJfbXJwX3BvcnRfZGVsKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCk7XG4gaW50IGJyX21ycF9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcbitpbnQgYnJfbXJwX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBicl9tcnBfcGFyc2Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICphdHRyLCBpbnQgY21kLFxuQEAgLTIxMTEsNiArMjEwMyw3IEBAIGludCBicl9jZm1fcGFyc2Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuIFx0XHQgc3RydWN0IG5sYXR0ciAqYXR0ciwgaW50IGNtZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiBib29sIGJyX2NmbV9jcmVhdGVkKHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG4gdm9pZCBicl9jZm1fcG9ydF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKTtcbitpbnQgYnJfY2ZtX2ZyYW1lX3J4KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHN0cnVjdCBza19idWZmICpza2IpO1xuIGludCBicl9jZm1fY29uZmlnX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xuIGludCBicl9jZm1fc3RhdHVzX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjoxOTozNC43Mzg0NTM2NzdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIxNzYzMDA5NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgQ0ZNL01SUCBGcmFtZSBIYW5kbGluZyBpbiB0aGUgQnJpZGdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBhIHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIG9mIGhvdyBDRk0gKENvbm5lY3Rpdml0eSBGYXVsdCBNYW5hZ2VtZW50KSBhbmQgTVJQIChNdWx0aXBsZSBSZWdpc3RyYXRpb24gUHJvdG9jb2wpIGZyYW1lIGhhbmRsZXJzIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUgYnJpZGdlIGNvZGUgKGBuZXQvYnJpZGdlL2ApLiAgUHJldmlvdXNseSwgd2Ugd2VyZSB1c2luZyBhIGxpbmtlZCBsaXN0IChgZnJhbWVfdHlwZV9saXN0YCkgb24gdGhlIGBuZXRfYnJpZGdlYCBzdHJ1Y3QgdG8gZHluYW1pY2FsbHkgcmVnaXN0ZXIgdGhlc2UgZnJhbWUgdHlwZXMgdmlhIGBicl9hZGRfZnJhbWVgIGFuZCBgYnJfZGVsX2ZyYW1lYCB1c2luZyBgY2ZtX2ZyYW1lX3R5cGVgIGFuZCBgbXJwX2ZyYW1lX3R5cGVgIHN0cnVjdHMuICBOb3csIHRoZSBhcHByb2FjaCBpcyBiZWluZyBzaW1wbGlmaWVkIGFuZCBvcHRpbWl6ZWQuXG5cblRoZSBrZXkgY2hhbmdlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYml0IGZsYWdzIHdpdGhpbiBgbmV0X2JyaWRnZS1cdTAwM2VvcHRpb25zYDogYEJST1BUX0NGTV9FTkFCTEVEYCBhbmQgYEJST1BUX01SUF9FTkFCTEVEYC4gSW5zdGVhZCBvZiB0aGUgbGlua2VkIGxpc3QsIGBicl9wcm9jZXNzX2ZyYW1lX3R5cGVgIGlzIG5vdyB0aGUgY29yZS4gVGhpcyBmdW5jdGlvbiBkaXJlY3RseSBjaGVja3MgdGhlc2Ugb3B0aW9uIGJpdHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gY2FsbCB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlcnM6IGBicl9jZm1fZnJhbWVfcnhgIG9yIGBicl9tcnBfcHJvY2Vzc2AuIFRoZSBgZnJhbWVfdHlwZV9saXN0YCBhbmQgdGhlIGBzdHJ1Y3QgYnJfZnJhbWVfdHlwZWAgYXJlIGJlaW5nIHJlbW92ZWQgYWx0b2dldGhlciwgc3RyZWFtbGluaW5nIHRoZSBjb2RlLiBJbiBgYnJfaGFuZGxlX2ZyYW1lYCwgaXQgY2hlY2tzIGAocC1cdTAwM2Vici1cdTAwM2VvcHRpb25zIFx1MDAyNiBCUl9DRk1fTVJQX09QVFMpIFx1MDAyNlx1MDAyNiBicl9wcm9jZXNzX2ZyYW1lX3R5cGUocCwgc2tiKWAuXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIGluZGl2aWR1YWwgZmlsZXM6XG5cbiogICBJbiBgYnJfY2ZtLmNgLCBgYnJfY2ZtX2ZyYW1lX3J4YCBpcyBubyBsb25nZXIgYHN0YXRpY2AuIFRoZSBgY2ZtX2ZyYW1lX3R5cGVgIHN0cnVjdCBpcyBnb25lLiBUaGUgcmVnaXN0cmF0aW9uIGFuZCBkZS1yZWdpc3RyYXRpb24gb2YgQ0ZNIGZ1bmN0aW9uYWxpdHkgaXMgbm93IGhhbmRsZWQgd2l0aCBgYnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfQ0ZNX0VOQUJMRUQsIHRydWUvZmFsc2UpYCBpbnN0ZWFkIG9mIGBicl9hZGRfZnJhbWVgIGFuZCBgYnJfZGVsX2ZyYW1lYC5cbiogICBgYnJfZGV2aWNlLmNgIHNlZXMgdGhlIHJlbW92YWwgb2YgYElOSVRfSExJU1RfSEVBRChcdTAwMjZici1cdTAwM2VmcmFtZV90eXBlX2xpc3QpO2Agc2luY2UgdGhlIGxpc3QgaXMgbm8gbG9uZ2VyIHJlcXVpcmVkLlxuKiAgIEluIGBicl9pbnB1dC5jYCwgd2UndmUgZ290IHRoZSBkZWZpbml0aW9uIGZvciBgQlJfQ0ZNX01SUF9PUFRTYCBhcyBhIGJpdG1hc2suIFRoZSBgYnJfcHJvY2Vzc19mcmFtZV90eXBlYCBmdW5jdGlvbiBpcyBub3cgY3J1Y2lhbCwgY2hlY2tpbmcgZm9yIHRoZSBjb3JyZWN0IEV0aGVybmV0IHByb3RvY29sIHR5cGVzIChgRVRIX1BfQ0ZNYCBhbmQgYEVUSF9QX01SUGApIGFuZCB0aGUgY29ycmVzcG9uZGluZyBvcHRpb24gZmxhZ3MgYmVmb3JlIGNhbGxpbmcgdGhlIHNwZWNpZmljIGhhbmRsZXIuICBBZ2FpbiwgYGJyX2FkZF9mcmFtZWAgYW5kIGBicl9kZWxfZnJhbWVgIGFyZSByZW1vdmVkLlxuKiAgIGBicl9tcnAuY2AgbWlycm9ycyB0aGVzZSBjaGFuZ2VzLiBUaGUgYG1ycF9mcmFtZV90eXBlYCBpcyByZW1vdmVkLCBhbmQgcmVnaXN0cmF0aW9uIGlzIGRvbmUgdmlhIGBicl9vcHRfdG9nZ2xlYCBhcyB3ZWxsLiBgYnJfbXJwX3Byb2Nlc3NgIGlzIG1hZGUgbm9uLXN0YXRpYy5cbiogICBMYXN0bHksIGluIGBicl9wcml2YXRlLmhgLCB3ZSBoYXZlIHRoZSBuZXcgb3B0aW9uIGZsYWdzIGFkZGVkIHRvIGBlbnVtIG5ldF9icmlkZ2Vfb3B0c2AsIGFuZCB0aGUgcmVtb3ZhbCBvZiB0aGUgb2xkIGRhdGEgc3RydWN0dXJlcy4gVGhlIHJlbGV2YW50IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBhcmUgYWRkZWQuXG5cbk5vdywgYSBxdWljaywgYnV0IGltcG9ydGFudCwgc2VjdXJpdHkgYXVkaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IG9wZW4gYW55IHZ1bG5lcmFiaWxpdGllcy5cblxuKiAgIE5vIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkOyBpdCdzIGFsbCBhYm91dCBwYWNrZXQgcmVjZXB0aW9uIHByb2Nlc3NpbmcgYW5kIGludGVybmFsIG9wdGlvbiBmbGFncy5cbiogICBUaGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQuIFRoZSBgYnItXHUwMDNlb3B0aW9uc2Agc3RydWN0IG1lbWJlciBpcyBwYXJ0IG9mIGBzdHJ1Y3QgbmV0X2JyaWRnZWAgYW5kIGluaXRpYWxpemVkIHZpYSBga3phbGxvY2AuXG4qICAgV2UncmUgbm90IHBhc3NpbmcgdW5pbml0aWFsaXplZCBkYXRhIGFueXdoZXJlLlxuKiAgIE5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHJlbHkgb24gdW5pbml0aWFsaXplZCBkYXRhLlxuKiAgIFRoZSBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgaGFuZGxpbmcgZG9uJ3Qgc2VlbSB0byBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBieXRlIGlzc3Vlcy5cblxuSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYGJyX29wdF90b2dnbGVgIGFuZCBgYnJfb3B0X2dldGAgZnVuY3Rpb25zIHRvIG1ha2Ugc3VyZSB0aGV5J3JlIHdvcmtpbmcgYXMgZXhwZWN0ZWQsIGJ1dCB0aGlzIGxvb2tzIGxpa2UgYSB3ZWxsLXN0cnVjdHVyZWQgYW5kIHBvdGVudGlhbGx5IG1vcmUgZWZmaWNpZW50IGFwcHJvYWNoIHRvIG1hbmFnaW5nIHRoZXNlIGZyYW1lIGhhbmRsZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDEzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MjA6MDYuOTE0NzU4NTAxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzI0MDUyNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfb3B0X1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzY5IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5uZXQvYnJpZGdlL2JyLmM9MjY4PWJyX3RvZ2dsZV9mZGJfbG9jYWxfdmxhbl8wKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYy0yNzItXFxubmV0L2JyaWRnZS9ici5jOjI3MzpcXHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfRkRCX0xPQ0FMX1ZMQU5fMCkgPT0gb24pXFxubmV0L2JyaWRnZS9ici5jLTI3NC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYy0yNzktXFxubmV0L2JyaWRnZS9ici5jOjI4MDpcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9GREJfTE9DQUxfVkxBTl8wLCBvbik7XFxubmV0L2JyaWRnZS9ici5jLTI4MS1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYz0yOTQ9aW50IGJyX2Jvb2xvcHRfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgZW51bSBicl9ib29sb3B0X2lkIG9wdCwgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYy0zMDAtXFx0Y2FzZSBCUl9CT09MT1BUX05PX0xMX0xFQVJOOlxcbm5ldC9icmlkZ2UvYnIuYzozMDE6XFx0XFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTk9fTExfTEVBUk4sIG9uKTtcXG5uZXQvYnJpZGdlL2JyLmMtMzAyLVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2JyaWRnZS9ici5jLTMwOS1cXHRjYXNlIEJSX0JPT0xPUFRfTURCX09GRkxPQURfRkFJTF9OT1RJRklDQVRJT046XFxubmV0L2JyaWRnZS9ici5jOjMxMDpcXHRcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NREJfT0ZGTE9BRF9GQUlMX05PVElGSUNBVElPTiwgb24pO1xcbm5ldC9icmlkZ2UvYnIuYy0zMTEtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvYnJpZGdlL2JyLmM9MzI0PWludCBicl9ib29sb3B0X2dldChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGVudW0gYnJfYm9vbG9wdF9pZCBvcHQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyLmMtMzI3LVxcdGNhc2UgQlJfQk9PTE9QVF9OT19MTF9MRUFSTjpcXG5uZXQvYnJpZGdlL2JyLmM6MzI4OlxcdFxcdHJldHVybiBicl9vcHRfZ2V0KGJyLCBCUk9QVF9OT19MTF9MRUFSTik7XFxubmV0L2JyaWRnZS9ici5jLTMyOS1cXHRjYXNlIEJSX0JPT0xPUFRfTUNBU1RfVkxBTl9TTk9PUElORzpcXG5uZXQvYnJpZGdlL2JyLmM6MzMwOlxcdFxcdHJldHVybiBicl9vcHRfZ2V0KGJyLCBCUk9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HX0VOQUJMRUQpO1xcbm5ldC9icmlkZ2UvYnIuYy0zMzEtXFx0Y2FzZSBCUl9CT09MT1BUX01TVF9FTkFCTEU6XFxubmV0L2JyaWRnZS9ici5jOjMzMjpcXHRcXHRyZXR1cm4gYnJfb3B0X2dldChiciwgQlJPUFRfTVNUX0VOQUJMRUQpO1xcbm5ldC9icmlkZ2UvYnIuYy0zMzMtXFx0Y2FzZSBCUl9CT09MT1BUX01EQl9PRkZMT0FEX0ZBSUxfTk9USUZJQ0FUSU9OOlxcbm5ldC9icmlkZ2UvYnIuYzozMzQ6XFx0XFx0cmV0dXJuIGJyX29wdF9nZXQoYnIsIEJST1BUX01EQl9PRkZMT0FEX0ZBSUxfTk9USUZJQ0FUSU9OKTtcXG5uZXQvYnJpZGdlL2JyLmMtMzM1LVxcdGNhc2UgQlJfQk9PTE9QVF9GREJfTE9DQUxfVkxBTl8wOlxcbm5ldC9icmlkZ2UvYnIuYzozMzY6XFx0XFx0cmV0dXJuIGJyX29wdF9nZXQoYnIsIEJST1BUX0ZEQl9MT0NBTF9WTEFOXzApO1xcbm5ldC9icmlkZ2UvYnIuYy0zMzctXFx0ZGVmYXVsdDpcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYz0zNzU9dm9pZCBicl9ib29sb3B0X211bHRpX2dldChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyLmMtMzg4LS8qIHByaXZhdGUgYnJpZGdlIG9wdGlvbnMsIGNvbnRyb2xsZWQgYnkgdGhlIGtlcm5lbCAqL1xcbm5ldC9icmlkZ2UvYnIuYzozODk6dm9pZCBicl9vcHRfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgZW51bSBuZXRfYnJpZGdlX29wdHMgb3B0LCBib29sIG9uKVxcbm5ldC9icmlkZ2UvYnIuYy0zOTAte1xcbm5ldC9icmlkZ2UvYnIuYzozOTE6XFx0Ym9vbCBjdXIgPSAhIWJyX29wdF9nZXQoYnIsIG9wdCk7XFxubmV0L2JyaWRnZS9ici5jLTM5Mi1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM9Mjc9dm9pZCBicl9yZWNhbGN1bGF0ZV9uZWlnaF9zdXBwcmVzc19lbmFibGVkKHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMzgtXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzozOTpcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9ORUlHSF9TVVBQUkVTU19FTkFCTEVELCBuZWlnaF9zdXBwcmVzcyk7XFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy00MC19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jPTEyNT12b2lkIGJyX2RvX3Byb3h5X3N1cHByZXNzX2FycChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTE2MC1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jOjE2MTpcXHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTkVJR0hfU1VQUFJFU1NfRU5BQkxFRCkpIHtcXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTE2Mi1cXHRcXHRpZiAoYnJfaXNfbmVpZ2hfc3VwcHJlc3NfZW5hYmxlZChwLCB2aWQpKVxcbi0tXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy0xODYtXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzoxODc6XFx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX05FSUdIX1NVUFBSRVNTX0VOQUJMRUQpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy0xODgtXFx0ICAgIGJyX2lzX2xvY2FsX2lwKHZsYW5kZXYsIHRpcCkpIHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMjI5LVxcdFxcdFxcdGlmIChyZXBsaWVkIHx8XFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzoyMzA6XFx0XFx0XFx0ICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX05FSUdIX1NVUFBSRVNTX0VOQUJMRUQpKVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMjMxLVxcdFxcdFxcdFxcdEJSX0lOUFVUX1NLQl9DQihza2IpLVxcdTAwM2Vwcm94eWFycF9yZXBsaWVkID0gMTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM9NDE1PXZvaWQgYnJfZG9fc3VwcHJlc3NfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy01MDMtXFx0XFx0XFx0aWYgKHJlcGxpZWQgfHxcXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jOjUwNDpcXHRcXHRcXHQgICAgYnJfb3B0X2dldChiciwgQlJPUFRfTkVJR0hfU1VQUFJFU1NfRU5BQkxFRCkpXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy01MDUtXFx0XFx0XFx0XFx0QlJfSU5QVVRfU0tCX0NCKHNrYiktXFx1MDAzZXByb3h5YXJwX3JlcGxpZWQgPSAxO1xcbi0tXFxubmV0L2JyaWRnZS9icl9jZm0uYz00OTI9aW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfY2ZtLmMtNTU2LVxcdGlmIChobGlzdF9lbXB0eShcXHUwMDI2YnItXFx1MDAzZW1lcF9saXN0KSlcXG5uZXQvYnJpZGdlL2JyX2NmbS5jOjU1NzpcXHRcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9DRk1fRU5BQkxFRCwgdHJ1ZSk7XFxubmV0L2JyaWRnZS9icl9jZm0uYy01NTgtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbS5jPTU2ND1zdGF0aWMgdm9pZCBtZXBfZGVsZXRlX2ltcGxlbWVudGF0aW9uKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfY2ZtLmMtNTg1LVxcdGlmIChobGlzdF9lbXB0eShcXHUwMDI2YnItXFx1MDAzZW1lcF9saXN0KSlcXG5uZXQvYnJpZGdlL2JyX2NmbS5jOjU4NjpcXHRcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9DRk1fRU5BQkxFRCwgZmFsc2UpO1xcbm5ldC9icmlkZ2UvYnJfY2ZtLmMtNTg3LX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM9MzA9bmV0ZGV2X3R4X3QgYnJfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtNzQtXFx0ICAgICBldGhfaGRyKHNrYiktXFx1MDAzZWhfcHJvdG8gPT0gaHRvbnMoRVRIX1BfUkFSUCkpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYzo3NTpcXHQgICAgYnJfb3B0X2dldChiciwgQlJPUFRfTkVJR0hfU1VQUFJFU1NfRU5BQkxFRCkpIHtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTc2LVxcdFxcdGJyX2RvX3Byb3h5X3N1cHByZXNzX2FycChza2IsIGJyLCB2aWQsIE5VTEwpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy03OC1cXHRcXHQgICBza2ItXFx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYzo3OTpcXHRcXHQgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9ORUlHSF9TVVBQUkVTU19FTkFCTEVEKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtODAtXFx0XFx0ICAgcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgK1xcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0xNjQ9c3RhdGljIGludCBicl9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNzItXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYzoxNzM6XFx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSlcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE3NC1cXHRcXHRicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhicik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTE4OT1zdGF0aWMgaW50IGJyX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE5NS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE5NjpcXHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpKVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTk3LVxcdFxcdGJyX211bHRpY2FzdF9sZWF2ZV9zbm9vcGVycyhicik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTIwND1zdGF0aWMgaW50IGJyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTIxMC1cXHQvKiB0aGlzIGZsYWcgd2lsbCBiZSBjbGVhcmVkIGlmIHRoZSBNVFUgd2FzIGF1dG9tYXRpY2FsbHkgYWRqdXN0ZWQgKi9cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjIxMTpcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NVFVfU0VUX0JZX1VTRVIsIHRydWUpO1xcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMjEyLSNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbi0tXFxubmV0L2JyaWRnZS9icl9mZGIuYz00NjA9dm9pZCBicl9mZGJfY2hhbmdlYWRkcihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXdhZGRyKVxcbi0tXFxubmV0L2JyaWRnZS9icl9mZGIuYy00NjctXFxubmV0L2JyaWRnZS9icl9mZGIuYzo0Njg6XFx0bG9jYWxfdmxhbl8wID0gYnJfb3B0X2dldChiciwgQlJPUFRfRkRCX0xPQ0FMX1ZMQU5fMCk7XFxubmV0L2JyaWRnZS9icl9mZGIuYy00NjktXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2ZkYi5jPTUwNj12b2lkIGJyX2ZkYl9jaGFuZ2VfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBjb25zdCB1OCAqbmV3YWRkcilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZmRiLmMtNTEyLVxcbm5ldC9icmlkZ2UvYnJfZmRiLmM6NTEzOlxcdGxvY2FsX3ZsYW5fMCA9IGJyX29wdF9nZXQoYnIsIEJST1BUX0ZEQl9MT0NBTF9WTEFOXzApO1xcbm5ldC9icmlkZ2UvYnJfZmRiLmMtNTE0LVxcbi0tXFxubmV0L2JyaWRnZS9icl9pZi5jPTUyMD12b2lkIGJyX210dV9hdXRvX2FkanVzdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lmLmMtNTI0LVxcdC8qIGlmIHRoZSBicmlkZ2UgTVRVIHdhcyBtYW51YWxseSBjb25maWd1cmVkIGRvbid0IG1lc3Mgd2l0aCBpdCAqL1xcbm5ldC9icmlkZ2UvYnJfaWYuYzo1MjU6XFx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01UVV9TRVRfQllfVVNFUikpXFxubmV0L2JyaWRnZS9icl9pZi5jLTUyNi1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lmLmMtNTMxLVxcdGRldl9zZXRfbXR1KGJyLVxcdTAwM2VkZXYsIGJyX210dV9taW4oYnIpKTtcXG5uZXQvYnJpZGdlL2JyX2lmLmM6NTMyOlxcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01UVV9TRVRfQllfVVNFUiwgZmFsc2UpO1xcbm5ldC9icmlkZ2UvYnJfaWYuYy01MzMtfVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTc2PWludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTE3NC1cXHRcXHQgICBza2ItXFx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjE3NTpcXHRcXHQgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9ORUlHSF9TVVBQUkVTU19FTkFCTEVEKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xNzYtXFx0XFx0ICAgcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgK1xcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTIwNS1cXHRcXHRpZiAodW5saWtlbHkoIWRzdCBcXHUwMDI2XFx1MDAyNiB2aWQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MjA2OlxcdFxcdFxcdCAgICAgYnJfb3B0X2dldChiciwgQlJPUFRfRkRCX0xPQ0FMX1ZMQU5fMCkpKSB7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTIwNy1cXHRcXHRcXHRkc3QgPSBicl9mZGJfZmluZF9yY3UoYnIsIGV0aF9oZHIoc2tiKS1cXHUwMDNlaF9kZXN0LCAwKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz0yNDU9c3RhdGljIHZvaWQgX19icl9oYW5kbGVfbG9jYWxfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMjUyLVxcdCAgICBuYnBfc3RhdGVfc2hvdWxkX2xlYXJuKHApIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjI1MzpcXHQgICAgIWJyX29wdF9nZXQocC1cXHUwMDNlYnIsIEJST1BUX05PX0xMX0xFQVJOKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0yNTQtXFx0ICAgIGJyX3Nob3VsZF9sZWFybihwLCBza2IsIFxcdTAwMjZ2aWQpKVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTMyOT1zdGF0aWMgaW50IGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTMzNS1cXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9DRk0pIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjMzNjpcXHQgICAgYnJfb3B0X2dldChiciwgQlJPUFRfQ0ZNX0VOQUJMRUQpKVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMzctXFx0XFx0cmV0dXJuIGJyX2NmbV9mcmFtZV9yeChwLCBza2IpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTM0MC1cXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9NUlApIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjM0MTpcXHQgICAgYnJfb3B0X2dldChiciwgQlJPUFRfTVJQX0VOQUJMRUQpKVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zNDItXFx0XFx0cmV0dXJuIGJyX21ycF9wcm9jZXNzKHAsIHNrYik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTcwOD1fX2JyX21kYl9jaG9vc2VfY29udGV4dChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jLTcxNC1cXG5uZXQvYnJpZGdlL2JyX21kYi5jOjcxNTpcXHRpZiAoIWJyX29wdF9nZXQoYnIsIEJST1BUX01DQVNUX1ZMQU5fU05PT1BJTkdfRU5BQkxFRCkpIHtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTcxNi1cXHRcXHRicm1jdHggPSBcXHUwMDI2YnItXFx1MDAzZW11bHRpY2FzdF9jdHg7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTEyMzE9c3RhdGljIGludCBicl9tZGJfY29uZmlnX2luaXQoc3RydWN0IGJyX21kYl9jb25maWcgKmNmZywgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTI0OC1cXG5uZXQvYnJpZGdlL2JyX21kYi5jOjEyNDk6XFx0aWYgKCFicl9vcHRfZ2V0KGNmZy1cXHUwMDNlYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSkge1xcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTI1MC1cXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiQnJpZGdlJ3MgbXVsdGljYXN0IHByb2Nlc3NpbmcgaXMgZGlzYWJsZWRcXFwiKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwLmM9NDE5PXN0YXRpYyB2b2lkIGJyX21ycF9kZWxfaW1wbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnAgKm1ycClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwLmMtNDgxLVxcdGlmIChobGlzdF9lbXB0eShcXHUwMDI2YnItXFx1MDAzZW1ycF9saXN0KSlcXG5uZXQvYnJpZGdlL2JyX21ycC5jOjQ4MjpcXHRcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NUlBfRU5BQkxFRCwgZmFsc2UpO1xcbm5ldC9icmlkZ2UvYnJfbXJwLmMtNDgzLX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwLmM9NDg4PWludCBicl9tcnBfYWRkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycF9pbnN0YW5jZSAqaW5zdGFuY2UpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycC5jLTUzMS1cXHRpZiAoaGxpc3RfZW1wdHkoXFx1MDAyNmJyLVxcdTAwM2VtcnBfbGlzdCkpXFxubmV0L2JyaWRnZS9icl9tcnAuYzo1MzI6XFx0XFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTVJQX0VOQUJMRUQsIHRydWUpO1xcbm5ldC9icmlkZ2UvYnJfbXJwLmMtNTMzLVxcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYz0xNj1ib29sIGJyX21zdF9lbmFibGVkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTIwLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MjE6XFx0cmV0dXJuIGJyX29wdF9nZXQobmV0ZGV2X3ByaXYoZGV2KSwgQlJPUFRfTVNUX0VOQUJMRUQpO1xcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjItfVxcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYz0yNT12b2lkIGJyX21zdF91bmluaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjYte1xcbm5ldC9icmlkZ2UvYnJfbXN0LmM6Mjc6XFx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01TVF9FTkFCTEVEKSlcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTI4LVxcdFxcdHN0YXRpY19icmFuY2hfZGVjKFxcdTAwMjZicl9tc3RfdXNlZCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jPTMxPWludCBicl9tc3RfZ2V0X2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IG1zdGksIHVuc2lnbmVkIGxvbmcgKnZpZHMpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTQyLVxcdGJyID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG5uZXQvYnJpZGdlL2JyX21zdC5jOjQzOlxcdGlmICghYnJfb3B0X2dldChiciwgQlJPUFRfTVNUX0VOQUJMRUQpKVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtNDQtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jPTU3PWludCBicl9tc3RfZ2V0X3N0YXRlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBtc3RpLCB1OCAqc3RhdGUpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTY1LVxcdHAgPSBicl9wb3J0X2dldF9jaGVja19ydG5sKGRldik7XFxubmV0L2JyaWRnZS9icl9tc3QuYzo2NjpcXHRpZiAoIXAgfHwgIWJyX29wdF9nZXQocC1cXHUwMDNlYnIsIEJST1BUX01TVF9FTkFCTEVEKSlcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTY3LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYz0yMDM9aW50IGJyX21zdF9zZXRfZW5hYmxlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTIyNS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jOjIyNjpcXHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTVNUX0VOQUJMRUQpID09IG9uKVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjI3LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYy0yMzctXFxubmV0L2JyaWRnZS9icl9tc3QuYzoyMzg6XFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTVNUX0VOQUJMRUQsIG9uKTtcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTIzOS1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM9MzM0PWludCBicl9tc3RfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICptc3RfYXR0cixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzQwLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MzQxOlxcdGlmICghYnJfb3B0X2dldChwLVxcdTAwM2ViciwgQlJPUFRfTVNUX0VOQUJMRUQpKSB7XFxubmV0L2JyaWRnZS9icl9tc3QuYy0zNDItXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkNhbid0IG1vZGlmeSBNU1Qgc3RhdGUgd2hlbiBNU1QgaXMgZGlzYWJsZWRcXFwiKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTQ5PWJyX21kYl9lbnRyeV9za2JfZ2V0KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE1NC1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjE1NTpcXHRpZiAoIWJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSB8fFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTU2LVxcdCAgICBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKGJybWN0eCkpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxMD1icl9tdWx0aWNhc3RfcGdfdG9fcG9ydF9jdHgoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcGcpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxOC1cXHRpZiAoIXBnLVxcdTAwM2VrZXkuYWRkci52aWQgfHxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIxOTpcXHQgICAgIWJyX29wdF9nZXQocGctXFx1MDAzZWtleS5wb3J0LVxcdTAwM2ViciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMC1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9OTI0PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYnJfaXA0X211bHRpY2FzdF9hbGxvY19xdWVyeShzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy05OTUtXFx0aXBoLVxcdTAwM2Vwcm90b2NvbCA9IElQUFJPVE9fSUdNUDtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjk5NjpcXHRpcGgtXFx1MDAzZXNhZGRyID0gYnJfb3B0X2dldChicm1jdHgtXFx1MDAzZWJyLCBCUk9QVF9NVUxUSUNBU1RfUVVFUllfVVNFX0lGQUREUikgP1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtOTk3LVxcdFxcdCAgICAgaW5ldF9zZWxlY3RfYWRkcihicm1jdHgtXFx1MDAzZWJyLVxcdTAwM2VkZXYsIDAsIFJUX1NDT1BFX0xJTkspIDogMDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTA2OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmJyX2lwNl9tdWx0aWNhc3RfYWxsb2NfcXVlcnkoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTE0My1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjExNDQ6XFx0XFx0YnJfb3B0X3RvZ2dsZShicm1jdHgtXFx1MDAzZWJyLCBCUk9QVF9IQVNfSVBWNl9BRERSLCBmYWxzZSk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xMTQ1LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xMTQ3LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTE0ODpcXHRicl9vcHRfdG9nZ2xlKGJybWN0eC1cXHUwMDNlYnIsIEJST1BUX0hBU19JUFY2X0FERFIsIHRydWUpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTE0OS1cXHRpcHY2X2V0aF9tY19tYXAoXFx1MDAyNmlwNmgtXFx1MDAzZWRhZGRyLCBldGgtXFx1MDAzZWhfZGVzdCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTEyNjk9c3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICpicl9tdWx0aWNhc3RfbmV3X2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTI4MS1cXHRcXHRicl9tY19kaXNhYmxlZF91cGRhdGUoYnItXFx1MDAzZWRldiwgZmFsc2UsIE5VTEwpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTI4MjpcXHRcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCwgZmFsc2UpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTI4My1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRTJCSUcpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xNzIzPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9xdWVyaWVyX2V4cGlyZWQoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTcyOC1cXHQgICAgYnJfbXVsdGljYXN0X2N0eF92bGFuX2dsb2JhbF9kaXNhYmxlZChicm1jdHgpIHx8XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxNzI5OlxcdCAgICAhYnJfb3B0X2dldChicm1jdHgtXFx1MDAzZWJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNzMwLVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xODk5PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9zZW5kX3F1ZXJ5KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE5MDgtXFx0aWYgKCFicl9tdWx0aWNhc3RfY3R4X3Nob3VsZF91c2UoYnJtY3R4LCBwbWN0eCkgfHxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjE5MDk6XFx0ICAgICFicl9vcHRfZ2V0KGJybWN0eC1cXHUwMDNlYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSB8fFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTkxMC1cXHQgICAgIWJybWN0eC1cXHUwMDNlbXVsdGljYXN0X3F1ZXJpZXIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTE5ODc9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfcmV4bWl0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xOTk4LVxcdGlmICghbmV0aWZfcnVubmluZyhici1cXHUwMDNlZGV2KSB8fCBobGlzdF91bmhhc2hlZChcXHUwMDI2cGctXFx1MDAzZW1nbGlzdCkgfHxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjE5OTk6XFx0ICAgICFicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMDAwLVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTAzPWludCBicl9tdWx0aWNhc3RfYWRkX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjExMC1cXHRlcnIgPSBicl9tY19kaXNhYmxlZF91cGRhdGUocG9ydC1cXHUwMDNlZGV2LFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjExMTpcXHRcXHRcXHRcXHQgICAgYnJfb3B0X2dldChwb3J0LVxcdTAwM2VicixcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxMTItXFx0XFx0XFx0XFx0XFx0ICAgICAgIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjE0OT1zdGF0aWMgdm9pZCBfX2JyX211bHRpY2FzdF9lbmFibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNTQtXFx0YnJtY3R4ID0gYnJfbXVsdGljYXN0X3BvcnRfY3R4X2dldF9nbG9iYWwocG1jdHgpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjE1NTpcXHRpZiAoIWJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSB8fFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE1Ni1cXHQgICAgIW5ldGlmX3J1bm5pbmcoYnItXFx1MDAzZWRldikpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIyMjE9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIGJvb2wgb24pXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMjMtI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklORylcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMjQ6XFx0aWYgKGJyX29wdF9nZXQocG9ydC1cXHUwMDNlYnIsIEJST1BUX01DQVNUX1ZMQU5fU05PT1BJTkdfRU5BQkxFRCkpIHtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMjUtXFx0XFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIyOTE9c3RhdGljIHZvaWQgX19ncnBfc3JjX3F1ZXJ5X21hcmtlZF9hbmRfcmV4bWl0KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIzMDAtXFx0aWYgKCFuZXRpZl9ydW5uaW5nKGJybWN0eC1cXHUwMDNlYnItXFx1MDAzZWRldikgfHxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIzMDE6XFx0ICAgICFicl9vcHRfZ2V0KGJybWN0eC1cXHUwMDNlYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIzMDItXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMzM4PXN0YXRpYyB2b2lkIF9fZ3JwX3NlbmRfcXVlcnlfYW5kX3JleG1pdChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMzQ1LVxcdGlmICghbmV0aWZfcnVubmluZyhicm1jdHgtXFx1MDAzZWJyLVxcdTAwM2VkZXYpIHx8XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMzQ2OlxcdCAgICAhYnJfb3B0X2dldChicm1jdHgtXFx1MDAzZWJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMzQ3LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MzI0ND1pbnQgYnJfbXVsdGljYXN0X2R1bXBfcXVlcmllcl9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zMjUxLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MzI1MjpcXHRpZiAoIWJyX29wdF9nZXQoYnJtY3R4LVxcdTAwM2ViciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpIHx8XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zMjUzLVxcdCAgICBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKGJybWN0eCkpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTM4Njg9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Vycl9jb3VudChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM4NzQtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozODc1OlxcdGlmICghYnJfb3B0X2dldChiciwgQlJPUFRfTVVMVElDQVNUX1NUQVRTX0VOQUJMRUQpKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzg3Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQwNTc9aW50IGJyX211bHRpY2FzdF9yY3Yoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKipicm1jdHgsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQwNjYtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MDY3OlxcdGlmICghYnJfb3B0X2dldCgoKmJybWN0eCktXFx1MDAzZWJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MDY4LVxcdFxcdHJldHVybiAwO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDA2OS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQwNzA6XFx0aWYgKGJyX29wdF9nZXQoKCpicm1jdHgpLVxcdTAwM2ViciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSBcXHUwMDI2XFx1MDAyNiB2bGFuKSB7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MDcxLVxcdFxcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnY7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQyMDY9dm9pZCBicl9tdWx0aWNhc3RfaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQyMTEtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MjEyOlxcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVELCB0cnVlKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQyMTM6XFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfSEFTX0lQVjZfQUREUiwgdHJ1ZSk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjE0LVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MjgzPXN0YXRpYyB2b2lkIF9fYnJfbXVsdGljYXN0X29wZW5fcXVlcnkoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Mjg3LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDI4ODpcXHRpZiAoIWJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQyODktXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MzAyPXZvaWQgYnJfbXVsdGljYXN0X29wZW4oc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzA1LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDMwNjpcXHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSkge1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDMwNy1cXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZztcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDM0MD12b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTggc3RhdGUpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNTItXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzUzOlxcdGlmICghYnJfb3B0X2dldChiciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNTQtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NDMxPWludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDM3LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQzODpcXHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSA9PSBvbilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MzktXFx0XFx0cmV0dXJuIDA7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDQwLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQ0MTpcXHRpZiAob24gXFx1MDAyNlxcdTAwMjYgIWJyX29wdF9nZXQoYnIsIEJST1BUX1ZMQU5fRU5BQkxFRCkpIHtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0NDItXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkNhbm5vdCBlbmFibGUgbXVsdGljYXN0IHZsYW4gc25vb3Bpbmcgd2l0aCB2bGFuIGZpbHRlcmluZyBkaXNhYmxlZFxcXCIpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDQ5LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQ1MDpcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HX0VOQUJMRUQsIG9uKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0NTEtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ0ODY9dm9pZCBicl9tdWx0aWNhc3Rfc3RvcChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0ODktXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDkwOlxcdGlmIChicl9vcHRfZ2V0KGJyLCBCUk9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HX0VOQUJMRUQpKSB7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDkxLVxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NzA4PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9lbmFibGVfYWxsX3BvcnRzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDcxMS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ3MTI6XFx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01DQVNUX1ZMQU5fU05PT1BJTkdfRU5BQkxFRCkpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzEzLVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDcxOT1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9hbGxfcG9ydHMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzIyLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDcyMzpcXHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ3MjQtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NzMwPWludCBicl9tdWx0aWNhc3RfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ3MzYtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDczNzpcXHRpZiAoISFicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkgPT0gISF2YWwpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzM4LVxcdFxcdGdvdG8gdW5sb2NrO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzQ1LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDc0NjpcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCwgISF2YWwpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDc0NzpcXHRpZiAoIWJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSkge1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDc0OC1cXHRcXHRjaGFuZ2Vfc25vb3BlcnMgPSB0cnVlO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Nzc2LVxcdGlmIChjaGFuZ2Vfc25vb3BlcnMpIHtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ3Nzc6XFx0XFx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ3NzgtXFx0XFx0XFx0YnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMoYnIpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00Nzg2PWJvb2wgYnJfbXVsdGljYXN0X2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDc4OS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ3OTA6XFx0cmV0dXJuICEhYnJfb3B0X2dldChiciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDc5MS19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTUyMDc9dm9pZCBicl9tdWx0aWNhc3RfY291bnQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy01MjEzLVxcdC8qIGlmIG11bHRpY2FzdF9kaXNhYmxlZCBpcyB0cnVlIHRoZW4gaWdtcCB0eXBlIGNhbid0IGJlIHNldCAqL1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NTIxNDpcXHRpZiAoIXR5cGUgfHwgIWJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9TVEFUU19FTkFCTEVEKSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTUyMTUtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz00ODM9c3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9wcmVfcm91dGluZyh2b2lkICpwcml2LFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MDQtXFx0XFx0aWYgKCFicm5ldC1cXHUwMDNlY2FsbF9pcDZ0YWJsZXMgXFx1MDAyNlxcdTAwMjZcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjUwNTpcXHRcXHQgICAgIWJyX29wdF9nZXQoYnIsIEJST1BUX05GX0NBTExfSVA2VEFCTEVTKSlcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTUwNi1cXHRcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MTUtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo1MTY6XFx0aWYgKCFicm5ldC1cXHUwMDNlY2FsbF9pcHRhYmxlcyBcXHUwMDI2XFx1MDAyNiAhYnJfb3B0X2dldChiciwgQlJPUFRfTkZfQ0FMTF9JUFRBQkxFUykpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MTctXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9NzI4PXN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfZm9yd2FyZF9hcnAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzQxLVxcdGJybmV0ID0gbmV0X2dlbmVyaWMoc3RhdGUtXFx1MDAzZW5ldCwgYnJuZl9uZXRfaWQpO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NzQyOlxcdGlmICghYnJuZXQtXFx1MDAzZWNhbGxfYXJwdGFibGVzIFxcdTAwMjZcXHUwMDI2ICFicl9vcHRfZ2V0KGJyLCBCUk9QVF9ORl9DQUxMX0FSUFRBQkxFUykpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy03NDMtXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTQ1OD1zdGF0aWMgaW50IGJyX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy01OTQtXFx0aWYgKChmaWx0ZXJfbWFzayBcXHUwMDI2IFJURVhUX0ZJTFRFUl9NU1QpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6NTk1OlxcdCAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9NU1RfRU5BQkxFRCkgXFx1MDAyNlxcdTAwMjYgcG9ydCkge1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTU5Ni1cXHRcXHRjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZyA9IG5icF92bGFuX2dyb3VwKHBvcnQpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9MTI5NT1zdGF0aWMgaW50IGJyX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmJyZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTQyNC1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YnItXFx1MDAzZWxvY2spO1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE0MjU6XFx0XFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfR1JPVVBfQUREUl9TRVQsIHRydWUpO1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE0MjYtXFx0XFx0YnJfcmVjYWxjdWxhdGVfZndkX21hc2soYnIpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTQ1OC1cXHRcXHR2YWwgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9CUl9NQ0FTVF9RVUVSWV9VU0VfSUZBRERSXSk7XFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTQ1OTpcXHRcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NVUxUSUNBU1RfUVVFUllfVVNFX0lGQUREUiwgISF2YWwpO1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE0NjAtXFx0fVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTUyOS1cXHRcXHRtY2FzdF9zdGF0cyA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0JSX01DQVNUX1NUQVRTX0VOQUJMRURdKTtcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxNTMwOlxcdFxcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01VTFRJQ0FTVF9TVEFUU19FTkFCTEVELCAhIW1jYXN0X3N0YXRzKTtcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNTMxLVxcdH1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE1NTgtXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTU1OTpcXHRcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9ORl9DQUxMX0lQVEFCTEVTLCAhIXZhbCk7XFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTU2MC1cXHR9XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNTY0LVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE1NjU6XFx0XFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTkZfQ0FMTF9JUDZUQUJMRVMsICEhdmFsKTtcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNTY2LVxcdH1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE1NzAtXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTU3MTpcXHRcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9ORl9DQUxMX0FSUFRBQkxFUywgISF2YWwpO1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE1NzItXFx0fVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9MTY3OD1zdGF0aWMgaW50IGJyX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqYnJkZXYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNzM0LVxcdCAgICBubGFfcHV0X3U4KHNrYiwgSUZMQV9CUl9WTEFOX1NUQVRTX0VOQUJMRUQsXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTczNTpcXHRcXHQgICAgICAgYnJfb3B0X2dldChiciwgQlJPUFRfVkxBTl9TVEFUU19FTkFCTEVEKSkgfHxcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNzM2LVxcdCAgICBubGFfcHV0X3U4KHNrYiwgSUZMQV9CUl9WTEFOX1NUQVRTX1BFUl9QT1JULFxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE3Mzc6XFx0XFx0ICAgICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX1ZMQU5fU1RBVFNfUEVSX1BPUlQpKSlcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNzM4LVxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNzQzLVxcdCAgICBubGFfcHV0X3U4KHNrYiwgSUZMQV9CUl9NQ0FTVF9TTk9PUElORyxcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxNzQ0OlxcdFxcdCAgICAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpIHx8XFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTc0NS1cXHQgICAgbmxhX3B1dF91OChza2IsIElGTEFfQlJfTUNBU1RfUVVFUllfVVNFX0lGQUREUixcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxNzQ2OlxcdFxcdCAgICAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfUVVFUllfVVNFX0lGQUREUikpIHx8XFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTc0Ny1cXHQgICAgbmxhX3B1dF91OChza2IsIElGTEFfQlJfTUNBU1RfUVVFUklFUixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE3NDktXFx0ICAgIG5sYV9wdXRfdTgoc2tiLCBJRkxBX0JSX01DQVNUX1NUQVRTX0VOQUJMRUQsXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTc1MDpcXHRcXHQgICAgICAgYnJfb3B0X2dldChiciwgQlJPUFRfTVVMVElDQVNUX1NUQVRTX0VOQUJMRUQpKSB8fFxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE3NTEtXFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9CUl9NQ0FTVF9IQVNIX0VMQVNUSUNJVFksIFJIVF9FTEFTVElDSVRZKSB8fFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTc5My1cXHRpZiAobmxhX3B1dF91OChza2IsIElGTEFfQlJfTkZfQ0FMTF9JUFRBQkxFUyxcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxNzk0OlxcdFxcdCAgICAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9ORl9DQUxMX0lQVEFCTEVTKSA/IDEgOiAwKSB8fFxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE3OTUtXFx0ICAgIG5sYV9wdXRfdTgoc2tiLCBJRkxBX0JSX05GX0NBTExfSVA2VEFCTEVTLFxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE3OTY6XFx0XFx0ICAgICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX05GX0NBTExfSVA2VEFCTEVTKSA/IDEgOiAwKSB8fFxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE3OTctXFx0ICAgIG5sYV9wdXRfdTgoc2tiLCBJRkxBX0JSX05GX0NBTExfQVJQVEFCTEVTLFxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE3OTg6XFx0XFx0ICAgICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX05GX0NBTExfQVJQVEFCTEVTKSA/IDEgOiAwKSlcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNzk5LVxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD03NTc9c3RhdGljIGlubGluZSBpbnQgYnJfYWZzcGVjX2NtZF90b19ydG0oaW50IGNtZClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTc2OC1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo3Njk6c3RhdGljIGlubGluZSBpbnQgYnJfb3B0X2dldChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNzcwLVxcdFxcdFxcdCAgICAgZW51bSBuZXRfYnJpZGdlX29wdHMgb3B0KVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9NzgxPXZvaWQgYnJfYm9vbG9wdF9tdWx0aV9nZXQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTc4Mi1cXHRcXHRcXHQgIHN0cnVjdCBicl9ib29sb3B0X211bHRpICpibSk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NzgzOnZvaWQgYnJfb3B0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGVudW0gbmV0X2JyaWRnZV9vcHRzIG9wdCwgYm9vbCBvbik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNzg0LVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTE1OD1fX2JyX211bHRpY2FzdF9xdWVyaWVyX2V4aXN0cyhzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTE2NC1cXHRpZiAoYnJtY3R4LVxcdTAwM2VtdWx0aWNhc3RfcXVlcmllcikge1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjExNjU6XFx0XFx0aWYgKGlzX2lwdjYgXFx1MDAyNlxcdTAwMjYgIWJyX29wdF9nZXQoYnJtY3R4LVxcdTAwM2ViciwgQlJPUFRfSEFTX0lQVjZfQUREUikpXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTE2Ni1cXHRcXHRcXHRvd25fcXVlcmllcl9lbmFibGVkID0gZmFsc2U7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMjYzPWJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEyNjUtXFx0cmV0dXJuIGJyX211bHRpY2FzdF9jdHhfaXNfdmxhbihicm1jdHgpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTI2NjpcXHQgICAgICAgKCFicl9vcHRfZ2V0KGJybWN0eC1cXHUwMDNlYnIsIEJST1BUX01DQVNUX1ZMQU5fU05PT1BJTkdfRU5BQkxFRCkgfHxcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MjA6MDcuMjQ3MTcyODg2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NDU5OTMzNTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IEEgQ2xlYW4gT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgdGhpcyBvdmVyLCBhbmQgaXQncyBwcmV0dHkgY2xlYXItY3V0LiBUaGlzIHBhdGNoIGlzIGFsbCBhYm91dCB0aWR5aW5nIHVwIHRoZSBicmlkZ2UncyBwYWNrZXQgaW5wdXQgcGF0aC4gVGhlIGdpc3QgaXMgcmVtb3ZpbmcgdGhlIG9sZCBkeW5hbWljIGZyYW1lIGhhbmRsZXIgc3lzdGVtIChgYnJfZnJhbWVfdHlwZWAgYW5kIHRoZSBsaW5rZWQgbGlzdCkgYW5kIHJlcGxhY2luZyBpdCB3aXRoIGRpcmVjdCwgc3RhdGljIGNoZWNrcyBhZ2FpbnN0IHRoZSBicmlkZ2UncyBgb3B0aW9uc2AgYml0bWFzay4gV2UncmUgdGFsa2luZyBgQlJPUFRfQ0ZNX0VOQUJMRURgIGFuZCBgQlJPUFRfTVJQX0VOQUJMRURgIGZsYWdzLCBub3RoaW5nIGZhbmN5LlxuXG5Gcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGlzIGlzIGEgcHVyZSByZWZhY3RvcmluZyBhbmQgb3B0aW1pemF0aW9uIGVmZm9ydC4gVGhlcmUgYXJlbid0IGFueSBuZXcgc3RydWN0cyBiZWluZyBleHBvc2VkIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCB0aGluZy4gSSBjYW4ndCBzcG90IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBicmFuY2hlcywgYW5kIGRlZmluaXRlbHkgbm8gbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIGZpZWxkcy4gR2l2ZW4gdGhhdCwgS01TQU4gaXMgY29tcGxldGVseSB1bm5lY2Vzc2FyeSBoZXJlLiBXZSBjYW4gc2FmZWx5IHNldCBgTmVlZHNLTVNBTmAgdG8gZmFsc2UuIFxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgdGhhdCBgc2V0LXJlc3VsdHNgIGNhbGwgcHJlcHBlZCBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCBvbmUuIFRoaXMgd2FzIGEgcHJldHR5IHNpbXBsZSBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODgwMCwiT3V0cHV0VG9rZW5zIjoxODIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MjA6MzMuNzA3MTA4OTMyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGJyaWRnZSBzdWJzeXN0ZW0ncyBDRk0gKENvbm5lY3Rpdml0eSBGYXVsdCBNYW5hZ2VtZW50KSBhbmQgTVJQIChNZWRpYSBSZWR1bmRhbmN5IFByb3RvY29sKSBmcmFtZSBkaXNwYXRjaCBtZWNoYW5pc20gYnkgcmVwbGFjaW5nIHRoZSBkeW5hbWljIGZyYW1lLXR5cGUgbGlua2VkIGxpc3QgKGBmcmFtZV90eXBlX2xpc3RgKSB3aXRoIGJpdCBmbGFncyBpbiB0aGUgZXhpc3RpbmcgYnJpZGdlIG9wdGlvbnMgYml0bWFzayAoYEJST1BUX0NGTV9FTkFCTEVEYCBhbmQgYEJST1BUX01SUF9FTkFCTEVEYCkuIFxcblxcbk5vIG5ldyBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgZGF0YSBidWZmZXJzIGFyZSBjcmVhdGVkIG9yIGV4cG9ydGVkIHRvIHVzZXIgc3BhY2UuIFRoZSBsb2dpYyByZWxpZXMgb24gYWxyZWFkeS1hbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGJyaWRnZSBzdHJ1Y3R1cmVzIChgc3RydWN0IG5ldF9icmlkZ2VgKSwgdG9nZ2xpbmcgYW5kIGNoZWNraW5nIGV4aXN0aW5nIGJpdCBmbGFncy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBjb25maWd1cmF0aW9ucyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcmVncmVzc2lvbi4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYnJpZGdlIHN1YnN5c3RlbSdzIENGTSAoQ29ubmVjdGl2aXR5IEZhdWx0IE1hbmFnZW1lbnQpIGFuZCBNUlAgKE1lZGlhIFJlZHVuZGFuY3kgUHJvdG9jb2wpIGZyYW1lIGRpc3BhdGNoIG1lY2hhbmlzbSBieSByZXBsYWNpbmcgdGhlIGR5bmFtaWMgZnJhbWUtdHlwZSBsaW5rZWQgbGlzdCAoYGZyYW1lX3R5cGVfbGlzdGApIHdpdGggYml0IGZsYWdzIGluIHRoZSBleGlzdGluZyBicmlkZ2Ugb3B0aW9ucyBiaXRtYXNrIChgQlJPUFRfQ0ZNX0VOQUJMRURgIGFuZCBgQlJPUFRfTVJQX0VOQUJMRURgKS4gXFxuXFxuTm8gbmV3IHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIGJ1ZmZlcnMgYXJlIGNyZWF0ZWQgb3IgZXhwb3J0ZWQgdG8gdXNlciBzcGFjZS4gVGhlIGxvZ2ljIHJlbGllcyBvbiBhbHJlYWR5LWFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYnJpZGdlIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgbmV0X2JyaWRnZWApLCB0b2dnbGluZyBhbmQgY2hlY2tpbmcgZXhpc3RpbmcgYml0IGZsYWdzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCBvbiwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGNvbmZpZ3VyYXRpb25zIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSByZWdyZXNzaW9uLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvb9c6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 12:02:34 +0000 UTC FinishedAt: 2026-08-31 12:20:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a8455260b2e9c024d1872ac1c094793d55a7e537", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_CFM", "BRIDGE_MRP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a8455260b2e9c024d1872ac1c094793d55a7e537", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_CFM", "BRIDGE_MRP" ], "series_id": "475c2863-94ae-452e-81c6-a35c7155bcce" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "br_cfm_frame_rx", "br_mrp_process", "br_cfm_mep_create", "br_cfm_mep_delete", "br_mrp_add", "br_mrp_del" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfQ0ZNJiMzNDssCiAgICAmIzM0O0JSSURHRV9NUlAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticl9jZm1fZnJhbWVfcngmIzM0OywKICAgICYjMzQ7YnJfbXJwX3Byb2Nlc3MmIzM0OywKICAgICYjMzQ7YnJfY2ZtX21lcF9jcmVhdGUmIzM0OywKICAgICYjMzQ7YnJfY2ZtX21lcF9kZWxldGUmIzM0OywKICAgICYjMzQ7YnJfbXJwX2FkZCYjMzQ7LAogICAgJiMzNDticl9tcnBfZGVsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBicmlkZ2Ugc3Vic3lzdGVtJiMzOTtzIENGTSAoQ29ubmVjdGl2aXR5IEZhdWx0IE1hbmFnZW1lbnQpIGFuZCBNUlAgKE1lZGlhIFJlZHVuZGFuY3kgUHJvdG9jb2wpIGZyYW1lIGRpc3BhdGNoIG1lY2hhbmlzbSBieSByZXBsYWNpbmcgdGhlIGR5bmFtaWMgZnJhbWUtdHlwZSBsaW5rZWQgbGlzdCAoYGZyYW1lX3R5cGVfbGlzdGApIHdpdGggYml0IGZsYWdzIGluIHRoZSBleGlzdGluZyBicmlkZ2Ugb3B0aW9ucyBiaXRtYXNrIChgQlJPUFRfQ0ZNX0VOQUJMRURgIGFuZCBgQlJPUFRfTVJQX0VOQUJMRURgKS4gXG5cbk5vIG5ldyBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgZGF0YSBidWZmZXJzIGFyZSBjcmVhdGVkIG9yIGV4cG9ydGVkIHRvIHVzZXIgc3BhY2UuIFRoZSBsb2dpYyByZWxpZXMgb24gYWxyZWFkeS1hbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGJyaWRnZSBzdHJ1Y3R1cmVzIChgc3RydWN0IG5ldF9icmlkZ2VgKSwgdG9nZ2xpbmcgYW5kIGNoZWNraW5nIGV4aXN0aW5nIGJpdCBmbGFncy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBjb25maWd1cmF0aW9ucyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcmVncmVzc2lvbi4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGJyaWRnZSBmcmFtZSBoYW5kbGluZyBsb2dpYyBmb3IgQ0ZNICg4MDIuMVEgQ0ZNKSBhbmQgTVJQIHByb3RvY29scyBieSByZXBsYWNpbmcgdGhlIGR5bmFtaWMgZnJhbWVfdHlwZV9saXN0IHdpdGggYnJpZGdlIG9wdGlvbiBmbGFncyAoQlJPUFRfQ0ZNX0VOQUJMRUQgYW5kIEJST1BUX01SUF9FTkFCTEVEKSBhbmQgZGlyZWN0IGNhbGxzIHRvIGJyX2NmbV9mcmFtZV9yeCBhbmQgYnJfbXJwX3Byb2Nlc3MuIEl0IG1vZGlmaWVzIGJvdGggdGhlIGZyYW1lIHJlY2VpdmUgcGF0aCBhbmQgdGhlIG5ldGxpbmstdHJpZ2dlcmVkIGluc3RhbmNlIGNyZWF0aW9uL2RlbGV0aW9uIHBhdGhzLiBUaGlzIGFmZmVjdHMgY29yZSBicmlkZ2UgbmV0d29ya2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWwgZW52aXJvbm1lbnRzIHdpdGhvdXQgc3BlY2lhbGl6ZWQgaGFyZHdhcmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmMjgyYTYxODI5YTZiZTdmNTFjYTllYTc2ZDBjNjg3MzFjZTJkMzdiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTI6MTc6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9jZm0uYyBiL25ldC9icmlkZ2UvYnJfY2ZtLmNcbmluZGV4IGRlYTU2ZmZmYTFjMTkuLjlkY2M5N2Q2M2E2ZmMgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX2NmbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX2NmbS5jXG5AQCAtMzY3LDcgJiM0MzszNjcsNyBAQCBzdGF0aWMgdTMyIGNjbV90bHZfZXh0cmFjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5kZXgsXG4gfVxuIFxuIC8qIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayAqL1xuLXN0YXRpYyBpbnQgYnJfY2ZtX2ZyYW1lX3J4KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO2ludCBicl9jZm1fZnJhbWVfcngoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHR1MzIgbWRsZXZlbCwgaW50ZXJ2YWwsIHNpemUsIGluZGV4LCBtYXg7XG4gXHRjb25zdCBzdHJ1Y3QgYnJfY2ZtX2NvbW1vbl9oZHIgKmhkcjtcbkBAIC00ODksMTEgJiM0Mzs0ODksNiBAQCBzdGF0aWMgaW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSBjZm1fZnJhbWVfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xuLVx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9DRk0pLFxuLVx0LmZyYW1lX2hhbmRsZXIgPSBicl9jZm1fZnJhbWVfcngsXG4tfTtcbi1cbiBpbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0XHQgICAgICBjb25zdCB1MzIgaW5zdGFuY2UsXG4gXHRcdCAgICAgIHN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZSAqY29uc3QgY3JlYXRlLFxuQEAgLTU1OSw3ICYjNDM7NTU0LDcgQEAgaW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm1lcC1cdTAwM2VjY21fdHhfZHdvcmssIGNjbV90eF93b3JrX2V4cGlyZWQpO1xuIFxuIFx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1lcF9saXN0KSlcbi1cdFx0YnJfYWRkX2ZyYW1lKGJyLCBcdTAwMjZjZm1fZnJhbWVfdHlwZSk7XG4mIzQzO1x0XHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9DRk1fRU5BQkxFRCwgdHJ1ZSk7XG4gXG4gXHRobGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2bWVwLVx1MDAzZWhlYWQsIFx1MDAyNmJyLVx1MDAzZW1lcF9saXN0KTtcbiBcbkBAIC01ODgsNyAmIzQzOzU4Myw3IEBAIHN0YXRpYyB2b2lkIG1lcF9kZWxldGVfaW1wbGVtZW50YXRpb24oc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0a2ZyZWVfcmN1KG1lcCwgcmN1KTtcbiBcbiBcdGlmIChobGlzdF9lbXB0eShcdTAwMjZici1cdTAwM2VtZXBfbGlzdCkpXG4tXHRcdGJyX2RlbF9mcmFtZShiciwgXHUwMDI2Y2ZtX2ZyYW1lX3R5cGUpO1xuJiM0MztcdFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfQ0ZNX0VOQUJMRUQsIGZhbHNlKTtcbiB9XG4gXG4gaW50IGJyX2NmbV9tZXBfZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuaW5kZXggZmY1NWRhYjczNjMyNi4uZTAxYzQ0YTkwZDg0YiAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfZGV2aWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmNcbkBAIC01MDMsNyAmIzQzOzUwMyw2IEBAIHZvaWQgYnJfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZici1cdTAwM2Vsb2NrKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmJyLVx1MDAzZXBvcnRfbGlzdCk7XG4gXHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2YnItXHUwMDNlZmRiX2xpc3QpO1xuLVx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNmJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCk7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApXG4gXHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2YnItXHUwMDNlbXJwX2xpc3QpO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaW5wdXQuYyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xuaW5kZXggZDg3YTVmOWZhOTJiNy4uNzI4OTJlNWI0MDQzOSAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jXG5AQCAtMzE3LDIwICYjNDM7MzE3LDMzIEBAIHN0YXRpYyBpbnQgbmZfaG9va19icmlkZ2VfcHJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmICoqcHNrYilcbiBcdHJldHVybiBSWF9IQU5ETEVSX0NPTlNVTUVEO1xuIH1cbiBcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9DRk0pIHx8IElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApXG4mIzQzOy8qIENGTS9NUlAgYXJlIHVuY29tbW9uOyB0ZXN0IGJvdGggZW5hYmxlIGJpdHMgdG9nZXRoZXIgZmlyc3QuICovXG4mIzQzOyNkZWZpbmUgQlJfQ0ZNX01SUF9PUFRTIFxcXG4mIzQzO1x0KChJU19FTkFCTEVEKENPTkZJR19CUklER0VfQ0ZNKSA/IEJJVChCUk9QVF9DRk1fRU5BQkxFRCkgOiAwVUwpIHwgXFxcbiYjNDM7XHQgKElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApID8gQklUKEJST1BUX01SUF9FTkFCTEVEKSA6IDBVTCkpXG4mIzQzO1xuIC8qIFJldHVybiAwIGlmIHRoZSBmcmFtZSB3YXMgbm90IHByb2Nlc3NlZCBvdGhlcndpc2UgMVxuICAqIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9ja1xuICAqL1xuIHN0YXRpYyBpbnQgYnJfcHJvY2Vzc19mcmFtZV90eXBlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4gXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqdG1wO1xuLVxuLVx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHRtcCwgXHUwMDI2cC1cdTAwM2Vici1cdTAwM2VmcmFtZV90eXBlX2xpc3QsIGxpc3QpXG4tXHRcdGlmICh1bmxpa2VseSh0bXAtXHUwMDNldHlwZSA9PSBza2ItXHUwMDNlcHJvdG9jb2wpKVxuLVx0XHRcdHJldHVybiB0bXAtXHUwMDNlZnJhbWVfaGFuZGxlcihwLCBza2IpO1xuJiM0MztcdHN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHAtXHUwMDNlYnI7XG4gXG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfQ0ZNKVxuJiM0MztcdGlmIChza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfQ0ZNKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgYnJfb3B0X2dldChiciwgQlJPUFRfQ0ZNX0VOQUJMRUQpKVxuJiM0MztcdFx0cmV0dXJuIGJyX2NmbV9mcmFtZV9yeChwLCBza2IpO1xuJiM0MzsjZW5kaWZcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApXG4mIzQzO1x0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9NUlApIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9NUlBfRU5BQkxFRCkpXG4mIzQzO1x0XHRyZXR1cm4gYnJfbXJwX3Byb2Nlc3MocCwgc2tiKTtcbiYjNDM7I2VuZGlmXG4gXHRyZXR1cm4gMDtcbiB9XG4mIzQzOyNlbmRpZlxuIFxuIC8qXG4gICogUmV0dXJuIE5VTEwgaWYgc2tiIGlzIGhhbmRsZWRcbkBAIC00MjUsOCAmIzQzOzQzOCwxMSBAQCBzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBicl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAodW5saWtlbHkoYnJfcHJvY2Vzc19mcmFtZV90eXBlKHAsIHNrYikpKVxuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX0NGTSkgfHwgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX01SUClcbiYjNDM7XHRpZiAodW5saWtlbHkoKHAtXHUwMDNlYnItXHUwMDNlb3B0aW9ucyBcdTAwMjYgQlJfQ0ZNX01SUF9PUFRTKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAgYnJfcHJvY2Vzc19mcmFtZV90eXBlKHAsIHNrYikpKVxuIFx0XHRyZXR1cm4gUlhfSEFORExFUl9QQVNTO1xuJiM0MzsjZW5kaWZcbiBcbiBmb3J3YXJkOlxuIFx0aWYgKGJyX21zdF9pc19lbmFibGVkKHApKVxuQEAgLTQ2NywxOSAmIzQzOzQ4MywzIEBAIHJ4X2hhbmRsZXJfZnVuY190ICpicl9nZXRfcnhfaGFuZGxlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0cmV0dXJuIGJyX2hhbmRsZV9mcmFtZTtcbiB9XG4tXG4tdm9pZCBicl9hZGRfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQpXG4te1xuLVx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNmZ0LVx1MDAzZWxpc3QsIFx1MDAyNmJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCk7XG4tfVxuLVxuLXZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KVxuLXtcbi1cdHN0cnVjdCBicl9mcmFtZV90eXBlICp0bXA7XG4tXG4tXHRobGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsIFx1MDAyNmJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdClcbi1cdFx0aWYgKGZ0ID09IHRtcCkge1xuLVx0XHRcdGhsaXN0X2RlbF9yY3UoXHUwMDI2ZnQtXHUwMDNlbGlzdCk7XG4tXHRcdFx0cmV0dXJuO1xuLVx0XHR9XG4tfVxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXJwLmMgYi9uZXQvYnJpZGdlL2JyX21ycC5jXG5pbmRleCBlZjE2ZDA3MDM5MjQxLi5kY2U2ZWZhOTZjNGM2IDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9tcnAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9tcnAuY1xuQEAgLTYsMTMgJiM0Mzs2LDYgQEBcbiBzdGF0aWMgY29uc3QgdTggbXJwX3Rlc3RfZG1hY1tFVEhfQUxFTl0gPSB7IDB4MSwgMHgxNSwgMHg0ZSwgMHgwLCAweDAsIDB4MSB9O1xuIHN0YXRpYyBjb25zdCB1OCBtcnBfaW5fdGVzdF9kbWFjW0VUSF9BTEVOXSA9IHsgMHgxLCAweDE1LCAweDRlLCAweDAsIDB4MCwgMHgzIH07XG4gXG4tc3RhdGljIGludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi1cbi1zdGF0aWMgc3RydWN0IGJyX2ZyYW1lX3R5cGUgbXJwX2ZyYW1lX3R5cGUgX19yZWFkX21vc3RseSA9IHtcbi1cdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfTVJQKSxcbi1cdC5mcmFtZV9oYW5kbGVyID0gYnJfbXJwX3Byb2Nlc3MsXG4tfTtcbi1cbiBzdGF0aWMgYm9vbCBicl9tcnBfaXNfcmluZ19wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBfcG9ydCxcbiBcdFx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnNfcG9ydCxcbiBcdFx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG5AQCAtNDg2LDcgJiM0Mzs0NzksNyBAQCBzdGF0aWMgdm9pZCBicl9tcnBfZGVsX2ltcGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnApXG4gXHRrZnJlZV9yY3UobXJwLCByY3UpO1xuIFxuIFx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1ycF9saXN0KSlcbi1cdFx0YnJfZGVsX2ZyYW1lKGJyLCBcdTAwMjZtcnBfZnJhbWVfdHlwZSk7XG4mIzQzO1x0XHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NUlBfRU5BQkxFRCwgZmFsc2UpO1xuIH1cbiBcbiAvKiBBZGRzIGEgbmV3IE1SUCBpbnN0YW5jZS5cbkBAIC01MzYsNyAmIzQzOzUyOSw3IEBAIGludCBicl9tcnBfYWRkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycF9pbnN0YW5jZSAqaW5zdGFuY2UpXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIobXJwLVx1MDAzZXNfcG9ydCwgcCk7XG4gXG4gXHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2YnItXHUwMDNlbXJwX2xpc3QpKVxuLVx0XHRicl9hZGRfZnJhbWUoYnIsIFx1MDAyNm1ycF9mcmFtZV90eXBlKTtcbiYjNDM7XHRcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01SUF9FTkFCTEVELCB0cnVlKTtcbiBcbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm1ycC1cdTAwM2V0ZXN0X3dvcmssIGJyX21ycF90ZXN0X3dvcmtfZXhwaXJlZCk7XG4gXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZtcnAtXHUwMDNlaW5fdGVzdF93b3JrLCBicl9tcnBfaW5fdGVzdF93b3JrX2V4cGlyZWQpO1xuQEAgLTEyNDEsNyAmIzQzOzEyMzQsNyBAQCBzdGF0aWMgaW50IGJyX21ycF9yY3Yoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbiAgKiBub3JtYWwgZm9yd2FyZGluZy5cbiAgKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2tcbiAgKi9cbi1zdGF0aWMgaW50IGJyX21ycF9wcm9jZXNzKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO2ludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdC8qIElmIHRoZXJlIGlzIG5vIE1SUCBpbnN0YW5jZSBkbyBub3JtYWwgZm9yd2FyZGluZyAqL1xuIFx0aWYgKGxpa2VseSghdGVzdF9iaXQoQlJfTVJQX0FXQVJFX0JJVCwgXHUwMDI2cC1cdTAwM2VmbGFncykpKVxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcbmluZGV4IGQzMzdiMWNmYjk4MGQuLmFmZTdjMGI0ZjhmYTcgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcbkBAIC00OTUsMTIgJiM0Mzs0OTUsMTMgQEAgZW51bSBuZXRfYnJpZGdlX29wdHMge1xuIFx0QlJPUFRfTVNUX0VOQUJMRUQsXG4gXHRCUk9QVF9NREJfT0ZGTE9BRF9GQUlMX05PVElGSUNBVElPTixcbiBcdEJST1BUX0ZEQl9MT0NBTF9WTEFOXzAsXG4mIzQzO1x0QlJPUFRfQ0ZNX0VOQUJMRUQsXG4mIzQzO1x0QlJPUFRfTVJQX0VOQUJMRUQsXG4gfTtcbiBcbiBzdHJ1Y3QgbmV0X2JyaWRnZSB7XG4gXHRzcGlubG9ja190XHRcdFx0bG9jaztcbiBcdHNwaW5sb2NrX3RcdFx0XHRoYXNoX2xvY2s7XG4tXHRzdHJ1Y3QgaGxpc3RfaGVhZFx0XHRmcmFtZV90eXBlX2xpc3Q7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZVx0XHQqZGV2O1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdG9wdGlvbnM7XG4gXHQvKiBUaGVzZSBmaWVsZHMgYXJlIGFjY2Vzc2VkIG9uIGVhY2ggcGFja2V0ICovXG5AQCAtOTMyLDE2ICYjNDM7OTMzLDYgQEAgaW50IG5icF9iYWNrdXBfY2hhbmdlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBuZXRfZGV2aWNlICpiYWNrdXBfZGV2KTtcbiBpbnQgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gcnhfaGFuZGxlcl9mdW5jX3QgKmJyX2dldF9yeF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIFxuLXN0cnVjdCBicl9mcmFtZV90eXBlIHtcbi1cdF9fYmUxNlx0XHRcdHR5cGU7XG4tXHRpbnRcdFx0XHQoKmZyYW1lX2hhbmRsZXIpKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXG4tXHRcdFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpO1xuLVx0c3RydWN0IGhsaXN0X25vZGVcdGxpc3Q7XG4tfTtcbi1cbi12b2lkIGJyX2FkZF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdCk7XG4tdm9pZCBicl9kZWxfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQpO1xuLVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBicl9yeF9oYW5kbGVyX2NoZWNrX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHJldHVybiByY3VfZGVyZWZlcmVuY2UoZGV2LVx1MDAzZXJ4X2hhbmRsZXIpID09IGJyX2dldF9yeF9oYW5kbGVyKGRldik7XG5AQCAtMjA4MCw2ICYjNDM7MjA3MSw3IEBAIGludCBicl9tcnBfcGFyc2Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuIGJvb2wgYnJfbXJwX2VuYWJsZWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcbiB2b2lkIGJyX21ycF9wb3J0X2RlbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApO1xuIGludCBicl9tcnBfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG4mIzQzO2ludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGJyX21ycF9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKmF0dHIsIGludCBjbWQsXG5AQCAtMjExMSw2ICYjNDM7MjEwMyw3IEBAIGludCBicl9jZm1fcGFyc2Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuIFx0XHQgc3RydWN0IG5sYXR0ciAqYXR0ciwgaW50IGNtZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiBib29sIGJyX2NmbV9jcmVhdGVkKHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG4gdm9pZCBicl9jZm1fcG9ydF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKTtcbiYjNDM7aW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBpbnQgYnJfY2ZtX2NvbmZpZ19maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcbiBpbnQgYnJfY2ZtX3N0YXR1c19maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgICAgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfQ0ZNJiMzNDssCiAgICAmIzM0O0JSSURHRV9NUlAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticl9jZm1fZnJhbWVfcngmIzM0OywKICAgICYjMzQ7YnJfbXJwX3Byb2Nlc3MmIzM0OywKICAgICYjMzQ7YnJfY2ZtX21lcF9jcmVhdGUmIzM0OywKICAgICYjMzQ7YnJfY2ZtX21lcF9kZWxldGUmIzM0OywKICAgICYjMzQ7YnJfbXJwX2FkZCYjMzQ7LAogICAgJiMzNDticl9tcnBfZGVsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYnJpZGdlIGZyYW1lIGhhbmRsaW5nIGxvZ2ljIGZvciBDRk0gKDgwMi4xUSBDRk0pIGFuZCBNUlAgcHJvdG9jb2xzIGJ5IHJlcGxhY2luZyB0aGUgZHluYW1pYyBmcmFtZV90eXBlX2xpc3Qgd2l0aCBicmlkZ2Ugb3B0aW9uIGZsYWdzIChCUk9QVF9DRk1fRU5BQkxFRCBhbmQgQlJPUFRfTVJQX0VOQUJMRUQpIGFuZCBkaXJlY3QgY2FsbHMgdG8gYnJfY2ZtX2ZyYW1lX3J4IGFuZCBicl9tcnBfcHJvY2Vzcy4gSXQgbW9kaWZpZXMgYm90aCB0aGUgZnJhbWUgcmVjZWl2ZSBwYXRoIGFuZCB0aGUgbmV0bGluay10cmlnZ2VyZWQgaW5zdGFuY2UgY3JlYXRpb24vZGVsZXRpb24gcGF0aHMuIFRoaXMgYWZmZWN0cyBjb3JlIGJyaWRnZSBuZXR3b3JraW5nIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbCBlbnZpcm9ubWVudHMgd2l0aG91dCBzcGVjaWFsaXplZCBoYXJkd2FyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYyODJhNjE4MjlhNmJlN2Y1MWNhOWVhNzZkMGM2ODczMWNlMmQzN2IKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxMjoxNzoyMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfY2ZtLmMgYi9uZXQvYnJpZGdlL2JyX2NmbS5jCmluZGV4IGRlYTU2ZmZmYTFjMTkuLjlkY2M5N2Q2M2E2ZmMgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfY2ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9jZm0uYwpAQCAtMzY3LDcgJiM0MzszNjcsNyBAQCBzdGF0aWMgdTMyIGNjbV90bHZfZXh0cmFjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5kZXgsCiB9CiAKIC8qIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayAqLwotc3RhdGljIGludCBicl9jZm1fZnJhbWVfcngoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztpbnQgYnJfY2ZtX2ZyYW1lX3J4KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJdTMyIG1kbGV2ZWwsIGludGVydmFsLCBzaXplLCBpbmRleCwgbWF4OwogCWNvbnN0IHN0cnVjdCBicl9jZm1fY29tbW9uX2hkciAqaGRyOwpAQCAtNDg5LDExICYjNDM7NDg5LDYgQEAgc3RhdGljIGludCBicl9jZm1fZnJhbWVfcngoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHN0cnVjdCBicl9mcmFtZV90eXBlIGNmbV9mcmFtZV90eXBlIF9fcmVhZF9tb3N0bHkgPSB7Ci0JLnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9DRk0pLAotCS5mcmFtZV9oYW5kbGVyID0gYnJfY2ZtX2ZyYW1lX3J4LAotfTsKLQogaW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKIAkJICAgICAgY29uc3QgdTMyIGluc3RhbmNlLAogCQkgICAgICBzdHJ1Y3QgYnJfY2ZtX21lcF9jcmVhdGUgKmNvbnN0IGNyZWF0ZSwKQEAgLTU1OSw3ICYjNDM7NTU0LDcgQEAgaW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKIAlJTklUX0RFTEFZRURfV09SSygmYW1wO21lcC0mZ3Q7Y2NtX3R4X2R3b3JrLCBjY21fdHhfd29ya19leHBpcmVkKTsKIAogCWlmIChobGlzdF9lbXB0eSgmYW1wO2JyLSZndDttZXBfbGlzdCkpCi0JCWJyX2FkZF9mcmFtZShiciwgJmFtcDtjZm1fZnJhbWVfdHlwZSk7CiYjNDM7CQlicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9DRk1fRU5BQkxFRCwgdHJ1ZSk7CiAKIAlobGlzdF9hZGRfdGFpbF9yY3UoJmFtcDttZXAtJmd0O2hlYWQsICZhbXA7YnItJmd0O21lcF9saXN0KTsKIApAQCAtNTg4LDcgJiM0Mzs1ODMsNyBAQCBzdGF0aWMgdm9pZCBtZXBfZGVsZXRlX2ltcGxlbWVudGF0aW9uKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKIAlrZnJlZV9yY3UobWVwLCByY3UpOwogCiAJaWYgKGhsaXN0X2VtcHR5KCZhbXA7YnItJmd0O21lcF9saXN0KSkKLQkJYnJfZGVsX2ZyYW1lKGJyLCAmYW1wO2NmbV9mcmFtZV90eXBlKTsKJiM0MzsJCWJyX29wdF90b2dnbGUoYnIsIEJST1BUX0NGTV9FTkFCTEVELCBmYWxzZSk7CiB9CiAKIGludCBicl9jZm1fbWVwX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuYwppbmRleCBmZjU1ZGFiNzM2MzI2Li5lMDFjNDRhOTBkODRiIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMKQEAgLTUwMyw3ICYjNDM7NTAzLDYgQEAgdm9pZCBicl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2JyLSZndDtsb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2JyLSZndDtwb3J0X2xpc3QpOwogCUlOSVRfSExJU1RfSEVBRCgmYW1wO2JyLSZndDtmZGJfbGlzdCk7Ci0JSU5JVF9ITElTVF9IRUFEKCZhbXA7YnItJmd0O2ZyYW1lX3R5cGVfbGlzdCk7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX01SUCkKIAlJTklUX0hMSVNUX0hFQUQoJmFtcDtici0mZ3Q7bXJwX2xpc3QpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKaW5kZXggZDg3YTVmOWZhOTJiNy4uNzI4OTJlNWI0MDQzOSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwpAQCAtMzE3LDIwICYjNDM7MzE3LDMzIEBAIHN0YXRpYyBpbnQgbmZfaG9va19icmlkZ2VfcHJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmICoqcHNrYikKIAlyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDsKIH0KIAomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfQ0ZNKSB8fCBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTVJQKQomIzQzOy8qIENGTS9NUlAgYXJlIHVuY29tbW9uOyB0ZXN0IGJvdGggZW5hYmxlIGJpdHMgdG9nZXRoZXIgZmlyc3QuICovCiYjNDM7I2RlZmluZSBCUl9DRk1fTVJQX09QVFMgXAomIzQzOwkoKElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9DRk0pID8gQklUKEJST1BUX0NGTV9FTkFCTEVEKSA6IDBVTCkgfCBcCiYjNDM7CSAoSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX01SUCkgPyBCSVQoQlJPUFRfTVJQX0VOQUJMRUQpIDogMFVMKSkKJiM0MzsKIC8qIFJldHVybiAwIGlmIHRoZSBmcmFtZSB3YXMgbm90IHByb2Nlc3NlZCBvdGhlcndpc2UgMQogICogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrCiAgKi8KIHN0YXRpYyBpbnQgYnJfcHJvY2Vzc19mcmFtZV90eXBlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCiAJCQkJIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGJyX2ZyYW1lX3R5cGUgKnRtcDsKLQotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0bXAsICZhbXA7cC0mZ3Q7YnItJmd0O2ZyYW1lX3R5cGVfbGlzdCwgbGlzdCkKLQkJaWYgKHVubGlrZWx5KHRtcC0mZ3Q7dHlwZSA9PSBza2ItJmd0O3Byb3RvY29sKSkKLQkJCXJldHVybiB0bXAtJmd0O2ZyYW1lX2hhbmRsZXIocCwgc2tiKTsKJiM0MzsJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gcC0mZ3Q7YnI7CiAKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX0NGTSkKJiM0MzsJaWYgKHNrYi0mZ3Q7cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfQ0ZNKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9DRk1fRU5BQkxFRCkpCiYjNDM7CQlyZXR1cm4gYnJfY2ZtX2ZyYW1lX3J4KHAsIHNrYik7CiYjNDM7I2VuZGlmCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApCiYjNDM7CWlmIChza2ItJmd0O3Byb3RvY29sID09IGh0b25zKEVUSF9QX01SUCkgJmFtcDsmYW1wOwomIzQzOwkgICAgYnJfb3B0X2dldChiciwgQlJPUFRfTVJQX0VOQUJMRUQpKQomIzQzOwkJcmV0dXJuIGJyX21ycF9wcm9jZXNzKHAsIHNrYik7CiYjNDM7I2VuZGlmCiAJcmV0dXJuIDA7CiB9CiYjNDM7I2VuZGlmCiAKIC8qCiAgKiBSZXR1cm4gTlVMTCBpZiBza2IgaXMgaGFuZGxlZApAQCAtNDI1LDggJiM0Mzs0MzgsMTEgQEAgc3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgYnJfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYikKIAkJfQogCX0KIAotCWlmICh1bmxpa2VseShicl9wcm9jZXNzX2ZyYW1lX3R5cGUocCwgc2tiKSkpCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9DRk0pIHx8IElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApCiYjNDM7CWlmICh1bmxpa2VseSgocC0mZ3Q7YnItJmd0O29wdGlvbnMgJmFtcDsgQlJfQ0ZNX01SUF9PUFRTKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShwLCBza2IpKSkKIAkJcmV0dXJuIFJYX0hBTkRMRVJfUEFTUzsKJiM0MzsjZW5kaWYKIAogZm9yd2FyZDoKIAlpZiAoYnJfbXN0X2lzX2VuYWJsZWQocCkpCkBAIC00NjcsMTkgJiM0Mzs0ODMsMyBAQCByeF9oYW5kbGVyX2Z1bmNfdCAqYnJfZ2V0X3J4X2hhbmRsZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogCXJldHVybiBicl9oYW5kbGVfZnJhbWU7CiB9Ci0KLXZvaWQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KQotewotCWhsaXN0X2FkZF9oZWFkX3JjdSgmYW1wO2Z0LSZndDtsaXN0LCAmYW1wO2JyLSZndDtmcmFtZV90eXBlX2xpc3QpOwotfQotCi12b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdCkKLXsKLQlzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqdG1wOwotCi0JaGxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAmYW1wO2JyLSZndDtmcmFtZV90eXBlX2xpc3QsIGxpc3QpCi0JCWlmIChmdCA9PSB0bXApIHsKLQkJCWhsaXN0X2RlbF9yY3UoJmFtcDtmdC0mZ3Q7bGlzdCk7Ci0JCQlyZXR1cm47Ci0JCX0KLX0KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXJwLmMgYi9uZXQvYnJpZGdlL2JyX21ycC5jCmluZGV4IGVmMTZkMDcwMzkyNDEuLmRjZTZlZmE5NmM0YzYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbXJwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9tcnAuYwpAQCAtNiwxMyAmIzQzOzYsNiBAQAogc3RhdGljIGNvbnN0IHU4IG1ycF90ZXN0X2RtYWNbRVRIX0FMRU5dID0geyAweDEsIDB4MTUsIDB4NGUsIDB4MCwgMHgwLCAweDEgfTsKIHN0YXRpYyBjb25zdCB1OCBtcnBfaW5fdGVzdF9kbWFjW0VUSF9BTEVOXSA9IHsgMHgxLCAweDE1LCAweDRlLCAweDAsIDB4MCwgMHgzIH07CiAKLXN0YXRpYyBpbnQgYnJfbXJwX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0KLXN0YXRpYyBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSBtcnBfZnJhbWVfdHlwZSBfX3JlYWRfbW9zdGx5ID0gewotCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfTVJQKSwKLQkuZnJhbWVfaGFuZGxlciA9IGJyX21ycF9wcm9jZXNzLAotfTsKLQogc3RhdGljIGJvb2wgYnJfbXJwX2lzX3JpbmdfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwX3BvcnQsCiAJCQkJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqc19wb3J0LAogCQkJCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpCkBAIC00ODYsNyAmIzQzOzQ3OSw3IEBAIHN0YXRpYyB2b2lkIGJyX21ycF9kZWxfaW1wbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnAgKm1ycCkKIAlrZnJlZV9yY3UobXJwLCByY3UpOwogCiAJaWYgKGhsaXN0X2VtcHR5KCZhbXA7YnItJmd0O21ycF9saXN0KSkKLQkJYnJfZGVsX2ZyYW1lKGJyLCAmYW1wO21ycF9mcmFtZV90eXBlKTsKJiM0MzsJCWJyX29wdF90b2dnbGUoYnIsIEJST1BUX01SUF9FTkFCTEVELCBmYWxzZSk7CiB9CiAKIC8qIEFkZHMgYSBuZXcgTVJQIGluc3RhbmNlLgpAQCAtNTM2LDcgJiM0Mzs1MjksNyBAQCBpbnQgYnJfbXJwX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnBfaW5zdGFuY2UgKmluc3RhbmNlKQogCXJjdV9hc3NpZ25fcG9pbnRlcihtcnAtJmd0O3NfcG9ydCwgcCk7CiAKIAlpZiAoaGxpc3RfZW1wdHkoJmFtcDtici0mZ3Q7bXJwX2xpc3QpKQotCQlicl9hZGRfZnJhbWUoYnIsICZhbXA7bXJwX2ZyYW1lX3R5cGUpOwomIzQzOwkJYnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTVJQX0VOQUJMRUQsIHRydWUpOwogCiAJSU5JVF9ERUxBWUVEX1dPUksoJmFtcDttcnAtJmd0O3Rlc3Rfd29yaywgYnJfbXJwX3Rlc3Rfd29ya19leHBpcmVkKTsKIAlJTklUX0RFTEFZRURfV09SSygmYW1wO21ycC0mZ3Q7aW5fdGVzdF93b3JrLCBicl9tcnBfaW5fdGVzdF93b3JrX2V4cGlyZWQpOwpAQCAtMTI0MSw3ICYjNDM7MTIzNCw3IEBAIHN0YXRpYyBpbnQgYnJfbXJwX3JjdihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAogICogbm9ybWFsIGZvcndhcmRpbmcuCiAgKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sKICAqLwotc3RhdGljIGludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO2ludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCS8qIElmIHRoZXJlIGlzIG5vIE1SUCBpbnN0YW5jZSBkbyBub3JtYWwgZm9yd2FyZGluZyAqLwogCWlmIChsaWtlbHkoIXRlc3RfYml0KEJSX01SUF9BV0FSRV9CSVQsICZhbXA7cC0mZ3Q7ZmxhZ3MpKSkKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKaW5kZXggZDMzN2IxY2ZiOTgwZC4uYWZlN2MwYjRmOGZhNyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKQEAgLTQ5NSwxMiAmIzQzOzQ5NSwxMyBAQCBlbnVtIG5ldF9icmlkZ2Vfb3B0cyB7CiAJQlJPUFRfTVNUX0VOQUJMRUQsCiAJQlJPUFRfTURCX09GRkxPQURfRkFJTF9OT1RJRklDQVRJT04sCiAJQlJPUFRfRkRCX0xPQ0FMX1ZMQU5fMCwKJiM0MzsJQlJPUFRfQ0ZNX0VOQUJMRUQsCiYjNDM7CUJST1BUX01SUF9FTkFCTEVELAogfTsKIAogc3RydWN0IG5ldF9icmlkZ2UgewogCXNwaW5sb2NrX3QJCQlsb2NrOwogCXNwaW5sb2NrX3QJCQloYXNoX2xvY2s7Ci0Jc3RydWN0IGhsaXN0X2hlYWQJCWZyYW1lX3R5cGVfbGlzdDsKIAlzdHJ1Y3QgbmV0X2RldmljZQkJKmRldjsKIAl1bnNpZ25lZCBsb25nCQkJb3B0aW9uczsKIAkvKiBUaGVzZSBmaWVsZHMgYXJlIGFjY2Vzc2VkIG9uIGVhY2ggcGFja2V0ICovCkBAIC05MzIsMTYgJiM0Mzs5MzMsNiBAQCBpbnQgbmJwX2JhY2t1cF9jaGFuZ2Uoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IG5ldF9kZXZpY2UgKmJhY2t1cF9kZXYpOwogaW50IGJyX2hhbmRsZV9mcmFtZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwogcnhfaGFuZGxlcl9mdW5jX3QgKmJyX2dldF9yeF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCi1zdHJ1Y3QgYnJfZnJhbWVfdHlwZSB7Ci0JX19iZTE2CQkJdHlwZTsKLQlpbnQJCQkoKmZyYW1lX2hhbmRsZXIpKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsCi0JCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0Jc3RydWN0IGhsaXN0X25vZGUJbGlzdDsKLX07Ci0KLXZvaWQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KTsKLXZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KTsKLQogc3RhdGljIGlubGluZSBib29sIGJyX3J4X2hhbmRsZXJfY2hlY2tfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZShkZXYtJmd0O3J4X2hhbmRsZXIpID09IGJyX2dldF9yeF9oYW5kbGVyKGRldik7CkBAIC0yMDgwLDYgJiM0MzsyMDcxLDcgQEAgaW50IGJyX21ycF9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCiBib29sIGJyX21ycF9lbmFibGVkKHN0cnVjdCBuZXRfYnJpZGdlICpicik7CiB2b2lkIGJyX21ycF9wb3J0X2RlbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApOwogaW50IGJyX21ycF9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyKTsKJiM0MztpbnQgYnJfbXJwX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgYnJfbXJwX3BhcnNlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwKIAkJCSAgICAgICBzdHJ1Y3QgbmxhdHRyICphdHRyLCBpbnQgY21kLApAQCAtMjExMSw2ICYjNDM7MjEwMyw3IEBAIGludCBicl9jZm1fcGFyc2Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAogCQkgc3RydWN0IG5sYXR0ciAqYXR0ciwgaW50IGNtZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIGJvb2wgYnJfY2ZtX2NyZWF0ZWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTsKIHZvaWQgYnJfY2ZtX3BvcnRfZGVsKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCk7CiYjNDM7aW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGludCBicl9jZm1fY29uZmlnX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpOwogaW50IGJyX2NmbV9zdGF0dXNfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgc3RydWN0IG5ldF9icmlkZ2UgKmJyLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDE2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnJpZGdlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggZm9yIGZ1enppbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSB0byB0aGUgYnJpZGdlIGNvZGUgaW4gdGhlIGtlcm5lbCBpcyBldmVuIHdvcnRoIHRoZSBlZmZvcnQuIFdlIG5lZWQgdG8gYXNzZXNzIHRoZSBhdHRhY2sgc3VyZmFjZSBhbmQgcG90ZW50aWFsIGZvciBpbnRlcmVzdGluZyBidWdzLiBJIGNhbiBzZWUgdGhlIHBhdGNoIHRvdWNoZXMgYSBmZXcgZmlsZXMgd2l0aGluIGBuZXQvYnJpZGdlYDogYGJyX2NmbS5jYCwgYGJyX2RldmljZS5jYCwgYGJyX2lucHV0LmNgLCBgYnJfbXJwLmNgLCBhbmQgYGJyX3ByaXZhdGUuaGAuCgpOb3csIGxldCYjMzk7cyB1bmRlcnN0YW5kIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgb3B0aW1pemluZyB0aGUgZnJhbWUgaGFuZGxpbmcuIEluc3RlYWQgb2YgaXRlcmF0aW5nIHRocm91Z2ggYSBsaW5rZWQgbGlzdCBvZiBgc3RydWN0IGJyX2ZyYW1lX3R5cGVgIG9iamVjdHMgd2hlbiBwcm9jZXNzaW5nIGZyYW1lcyBpbiB0aGUgZmFzdCByeCBwYXRoIChgYnJfaGFuZGxlX2ZyYW1lKClgIC0mZ3Q7IGBicl9wcm9jZXNzX2ZyYW1lX3R5cGUoKWApLCB0aGV5JiMzOTtyZSBkaXRjaGluZyB0aGUgZHluYW1pYyBsaXN0IGxvb2t1cC4gVGhleSYjMzk7dmUgcmVwbGFjZWQgaXQgd2l0aCBkaXJlY3QgY2hlY2tzIG9mIGJyaWRnZSBvcHRpb24gZmxhZ3MgKGBCUk9QVF9DRk1fRU5BQkxFRGAgYW5kIGBCUk9QVF9NUlBfRU5BQkxFRGApIHdpdGhpbiBgYnJfcHJvY2Vzc19mcmFtZV90eXBlKClgLiBGdXJ0aGVybW9yZSwgaXQgc2VlbXMgdGhleSYjMzk7dmUgcmVtb3ZlZCBgYnJfYWRkX2ZyYW1lYCBhbmQgYGJyX2RlbF9mcmFtZWAsIHRoZSBgZnJhbWVfdHlwZV9saXN0YCBmcm9tIHRoZSBgc3RydWN0IG5ldF9icmlkZ2VgLCBhbmQgbm93IGNhbGwgYGJyX2NmbV9mcmFtZV9yeGAgYW5kIGBicl9tcnBfcHJvY2Vzc2AgZGlyZWN0bHkgaWYgdGhlIHJlc3BlY3RpdmUgZmxhZ3MgYXJlIGVuYWJsZWQuIFRoaXMgbG9va3MgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLCB3ZSBub3cgaGF2ZSBjb250cm9sIGZsb3cgYmFzZWQgb24gYnJpZGdlIGZsYWdzLgoKVGhpcyBmbGFnLWJhc2VkIGFwcHJvYWNoIGlzIHBvdGVudGlhbGx5IG1vcmUgZWZmaWNpZW50IGJ1dCBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlIHZ1bG5lcmFiaWxpdGllcyBpZiBub3QgaGFuZGxlZCBjYXJlZnVsbHkuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHBvdGVudGlhbCBmb3IgZmxhZyByYWNlcyBhbmQgb2ZmLWJ5LW9uZSBlcnJvcnMgaW4gdGhlaXIgaW1wbGVtZW50YXRpb24uCgpOZXh0IHVwLCBJIHNob3VsZCB2ZXJpZnkgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGluIGBuZXQvYnJpZGdlL0tjb25maWdgLiBXZSBtdXN0IHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGVudmlyb25tZW50IHRvIGVuc3VyZSB0aGF0IHRoaXMgcGF0Y2ggaXMgZXZlbiBlbmFibGVkIGluIHRoZSBjb25maWd1cmF0aW9ucyB3ZSYjMzk7cmUgdGFyZ2V0aW5nIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUklER0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnLTUtXG5uZXQvYnJpZGdlL0tjb25maWc6Njpjb25maWcgQlJJREdFXG5uZXQvYnJpZGdlL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0OzgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1wmIzM0O1xuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy0zNS1cbm5ldC9icmlkZ2UvS2NvbmZpZzozNjpjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNy1cdGJvb2wgXCYjMzQ7SUdNUC9NTEQgc25vb3BpbmdcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNDktXG5uZXQvYnJpZGdlL0tjb25maWc6NTA6Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xubmV0L2JyaWRnZS9LY29uZmlnLTUxLVx0Ym9vbCBcJiMzNDtWTEFOIGZpbHRlcmluZ1wmIzM0O1xuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy02My1cbm5ldC9icmlkZ2UvS2NvbmZpZzo2NDpjb25maWcgQlJJREdFX01SUFxubmV0L2JyaWRnZS9LY29uZmlnLTY1LVx0Ym9vbCBcJiMzNDtNUlAgcHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNzUtXG5uZXQvYnJpZGdlL0tjb25maWc6NzY6Y29uZmlnIEJSSURHRV9DRk1cbm5ldC9icmlkZ2UvS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7Q0ZNIHByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQwMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBuZXQvYnJpZGdlL0tjb25maWdgIHRob3VnaHQgcHJvY2VzcywgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRlbHZpbmcgaW50byB0aGUgQnJpZGdlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGNvcmUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIExpbnV4IGJyaWRnaW5nIGNvZGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBhbmQgaG93IHRoZXkmIzM5O3JlIHN0cnVjdHVyZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgZmlyc3QgOTAgbGluZXMgb2YgYG5ldC9icmlkZ2UvS2NvbmZpZ2AuIFRoaXMgc2hvdWxkIGNvdmVyIHRoZSBiYXNpYyBmZWF0dXJlcywgZGVwZW5kZW5jaWVzLCBhbmQgcGVyaGFwcyBzb21lIGRlZmF1bHQgYmVoYXZpb3IgZGVjbGFyYXRpb25zLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIHNldCB0aGUgc3RhZ2UgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG1vcmUgbnVhbmNlZCBhc3BlY3RzIGZ1cnRoZXIgZG93biB0aGUgZmlsZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyAtIHRoZSBjb3JlIGVuYWJsZS9kaXNhYmxlIHN3aXRjaGVzIGZvciB0aGUgYnJpZGdlIGl0c2VsZiwgbWF5YmUgc29tZSBlc3NlbnRpYWwgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGZlYXR1cmVzIChpZiBwcmVzZW50KSwgYW5kIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMuIEkgYWxzbyB3YW50IHRvIGlkZW50aWZ5IGFueSBkZWZhdWx0IHNldHRpbmdzIHRoYXQgbWlnaHQgc2lnbmlmaWNhbnRseSBpbmZsdWVuY2UgaG93IGEgYnJpZGdlIG9wZXJhdGVzIG91dC1vZi10aGUtYm94LiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZSBtb2R1bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyA4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIEJSSURHRVxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7ODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nXCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgTExDXG4gICA5Olx0XHRzZWxlY3QgU1RQXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgTGludXggYm94IHdpbGwgYmUgYWJsZSB0byBhY3QgYXMgYW5cbiAgMTI6XHRcdCAgRXRoZXJuZXQgYnJpZGdlLCB3aGljaCBtZWFucyB0aGF0IHRoZSBkaWZmZXJlbnQgRXRoZXJuZXQgc2VnbWVudHMgaXRcbiAgMTM6XHRcdCAgaXMgY29ubmVjdGVkIHRvIHdpbGwgYXBwZWFyIGFzIG9uZSBFdGhlcm5ldCB0byB0aGUgcGFydGljaXBhbnRzLlxuICAxNDpcdFx0ICBTZXZlcmFsIHN1Y2ggYnJpZGdlcyBjYW4gd29yayB0b2dldGhlciB0byBjcmVhdGUgZXZlbiBsYXJnZXJcbiAgMTU6XHRcdCAgbmV0d29ya3Mgb2YgRXRoZXJuZXRzIHVzaW5nIHRoZSBJRUVFIDgwMi4xIHNwYW5uaW5nIHRyZWUgYWxnb3JpdGhtLlxuICAxNjpcdFx0ICBBcyB0aGlzIGlzIGEgc3RhbmRhcmQsIExpbnV4IGJyaWRnZXMgd2lsbCBjb29wZXJhdGUgcHJvcGVybHkgd2l0aFxuICAxNzpcdFx0ICBvdGhlciB0aGlyZCBwYXJ0eSBicmlkZ2UgcHJvZHVjdHMuXG4gIDE4Olx0XG4gIDE5Olx0XHQgIEluIG9yZGVyIHRvIHVzZSB0aGUgRXRoZXJuZXQgYnJpZGdlLCB5b3UmIzM5O2xsIG5lZWQgdGhlIGJyaWRnZVxuICAyMDpcdFx0ICBjb25maWd1cmF0aW9uIHRvb2xzOyBzZWUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnJzdFx1MDAzZVxuICAyMTpcdFx0ICBmb3IgbG9jYXRpb24uIFBsZWFzZSByZWFkIHRoZSBCcmlkZ2UgbWluaS1IT1dUTyBmb3IgbW9yZVxuICAyMjpcdFx0ICBpbmZvcm1hdGlvbi5cbiAgMjM6XHRcbiAgMjQ6XHRcdCAgSWYgeW91IGVuYWJsZSBpcHRhYmxlcyBzdXBwb3J0IGFsb25nIHdpdGggdGhlIGJyaWRnZSBzdXBwb3J0IHRoZW4geW91XG4gIDI1Olx0XHQgIHR1cm4geW91ciBicmlkZ2UgaW50byBhIGJyaWRnaW5nIElQIGZpcmV3YWxsLlxuICAyNjpcdFx0ICBpcHRhYmxlcyB3aWxsIHRoZW4gc2VlIHRoZSBJUCBwYWNrZXRzIGJlaW5nIGJyaWRnZWQsIHNvIHlvdSBuZWVkIHRvXG4gIDI3Olx0XHQgIHRha2UgdGhpcyBpbnRvIGFjY291bnQgd2hlbiBzZXR0aW5nIHVwIHlvdXIgZmlyZXdhbGwgcnVsZXMuXG4gIDI4Olx0XHQgIEVuYWJsaW5nIGFycHRhYmxlcyBzdXBwb3J0IHdoZW4gYnJpZGdpbmcgd2lsbCBsZXQgYXJwdGFibGVzIHNlZVxuICAyOTpcdFx0ICBicmlkZ2VkIEFSUCB0cmFmZmljIGluIHRoZSBhcnB0YWJsZXMgRk9SV0FSRCBjaGFpbi5cbiAgMzA6XHRcbiAgMzE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgMzI6XHRcdCAgd2lsbCBiZSBjYWxsZWQgYnJpZGdlLlxuICAzMzpcdFxuICAzNDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzNTpcdFxuICAzNjpcdGNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1xuICAzNzpcdFx0Ym9vbCBcJiMzNDtJR01QL01MRCBzbm9vcGluZ1wmIzM0O1xuICAzODpcdFx0ZGVwZW5kcyBvbiBCUklER0VcbiAgMzk6XHRcdGRlcGVuZHMgb24gSU5FVFxuICA0MDpcdFx0ZGVmYXVsdCB5XG4gIDQxOlx0XHRoZWxwXG4gIDQyOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHNlbGVjdGl2ZWx5XG4gIDQzOlx0XHQgIGZvcndhcmQgbXVsdGljYXN0IHRyYWZmaWMgYmFzZWQgb24gSUdNUC9NTEQgdHJhZmZpYyByZWNlaXZlZCBmcm9tXG4gIDQ0Olx0XHQgIGVhY2ggcG9ydC5cbiAgNDU6XHRcbiAgNDY6XHRcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXG4gIDQ3Olx0XG4gIDQ4Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDQ5Olx0XG4gIDUwOlx0Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xuICA1MTpcdFx0Ym9vbCBcJiMzNDtWTEFOIGZpbHRlcmluZ1wmIzM0O1xuICA1MjpcdFx0ZGVwZW5kcyBvbiBCUklER0VcbiAgNTM6XHRcdGRlcGVuZHMgb24gVkxBTl84MDIxUVxuICA1NDpcdFx0ZGVmYXVsdCBuXG4gIDU1Olx0XHRoZWxwXG4gIDU2Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHNlbGVjdGl2ZWx5XG4gIDU3Olx0XHQgIHJlY2VpdmUgYW5kIGZvcndhcmQgdHJhZmZpYyBiYXNlZCBvbiBWTEFOIGluZm9ybWF0aW9uIGluIHRoZSBwYWNrZXRcbiAgNTg6XHRcdCAgYW55IFZMQU4gaW5mb3JtYXRpb24gY29uZmlndXJlZCBvbiB0aGUgYnJpZGdlIHBvcnQgb3IgYnJpZGdlIGRldmljZS5cbiAgNTk6XHRcbiAgNjA6XHRcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXG4gIDYxOlx0XG4gIDYyOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDYzOlx0XG4gIDY0Olx0Y29uZmlnIEJSSURHRV9NUlBcbiAgNjU6XHRcdGJvb2wgXCYjMzQ7TVJQIHByb3RvY29sXCYjMzQ7XG4gIDY2Olx0XHRkZXBlbmRzIG9uIEJSSURHRVxuICA2NzpcdFx0ZGVmYXVsdCBuXG4gIDY4Olx0XHRoZWxwXG4gIDY5Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHRvIHJ1biBNUlBcbiAgNzA6XHRcdCAgcHJvdG9jb2wgdG8gZGV0ZWN0IGxvb3BzXG4gIDcxOlx0XG4gIDcyOlx0XHQgIFNheSBOIHRvIGV4Y2x1ZGUgdGhpcyBzdXBwb3J0IGFuZCByZWR1Y2UgdGhlIGJpbmFyeSBzaXplLlxuICA3MzpcdFxuICA3NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA3NTpcdFxuICA3NjpcdGNvbmZpZyBCUklER0VfQ0ZNXG4gIDc3Olx0XHRib29sIFwmIzM0O0NGTSBwcm90b2NvbFwmIzM0O1xuICA3ODpcdFx0ZGVwZW5kcyBvbiBCUklER0VcbiAgNzk6XHRcdGhlbHBcbiAgODA6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgdG8gcnVuIENGTVxuICA4MTpcdFx0ICBwcm90b2NvbCBhY2NvcmRpbmcgdG8gODAyLjFRIHNlY3Rpb24gMTIuMTRcbiAgODI6XHRcbiAgODM6XHRcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXG4gIDg0Olx0XG4gIDg1Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc3MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDU3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbml0aWFsIEFzc2Vzc21lbnQgb2YgQnJpZGdlIENvZGUgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSB0aGUgYnJpZGdlIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgaW50ZWdyYXRpb24gb2YgQlJJREdFXF9NUlAgYW5kIEJSSURHRVxfQ0ZNLCB0byBzZWUgaWYgd2UgY2FuIHRyaWdnZXIgc29tZXRoaW5nIGludGVyZXN0aW5nLiBJIHdhbnQgdG8gY2hlY2sgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBjb21waWxlZCBpbiwgd2hpY2ggYm9pbHMgZG93biB0byBsb29raW5nIGF0IGBDT05GSUdfQlJJREdFYCwgYENPTkZJR19CUklER0VfTVJQYCwgYW5kIGBDT05GSUdfQlJJREdFX0NGTWAuIElzIGl0IGdvaW5nIHRvIGJlIHdvcnRoIHRoZSBlZmZvcnQgdG8gZnV6eiB0aGlzPyBBYnNvbHV0ZWx5LCB0aGlzIGlzIGNvcmUgbmV0d29yayBicmlkZ2UgZnJhbWUgcHJvY2Vzc2luZyBhbmQgY29uZmlndXJhdGlvbiBsb2dpYywgaW5jbHVkaW5nIENGTSAoQ29ubmVjdGl2aXR5IEZhdWx0IE1hbmFnZW1lbnQpIGFuZCBNUlAgKE1lZGlhIFJlZHVuZGFuY3kgUHJvdG9jb2wpLgoKSSBzZWUgdGhhdCBgYnJfaGFuZGxlX2ZyYW1lYCwgdGhlIGJyaWRnZSBSWCBoYW5kbGVyLCBkaXJlY3RseSBjYWxscyBgYnJfcHJvY2Vzc19mcmFtZV90eXBlYCwgd2hpY2ggbm93IGluY29ycG9yYXRlcyBgQlJPUFRfQ0ZNX0VOQUJMRURgIGFuZCBgQlJPUFRfTVJQX0VOQUJMRURgIG9wdGlvbiBiaXRzLiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBhbHNvIG5vdGUgbW9kaWZpY2F0aW9ucyB0byBgYnJfY2ZtX21lcF9jcmVhdGVgLCBgYnJfY2ZtX21lcF9kZWxldGVgLCBgYnJfbXJwX2FkZGAsIGFuZCBgYnJfbXJwX2RlbF9pbXBsYC4KClRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoZXNlIHByb3RvY29scyBhbmQgdGhlaXIgZnJhbWUgaGFuZGxpbmcgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCBicmlkZ2UgbmV0bGluayBjb25maWd1cmF0aW9uIChydG5ldGxpbmsgLyBicmlkZ2UgbmV0bGluaykgYW5kIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbi9yZWNlcHRpb24gKHR1bi90YXAsIHZldGgsIHJhdyBzb2NrZXRzLCBldGMuKSBpbiBhIHN0YW5kYXJkIExpbnV4IGVudmlyb25tZW50IGxpa2UgUUVNVS4gTm8gc3BlY2lhbCBoYXJkd2FyZSByZXF1aXJlZCDigJMgdGhhdCBtYWtlcyB0aGlzIGV2ZW4gbW9yZSBhdHRyYWN0aXZlIGFzIGEgdGFyZ2V0LgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gSSYjMzk7bSBub3RpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgZWl0aGVyIGNoYW5nZWQgb3IgZXhwb3J0ZWQgZnJvbSBzdGF0aWMgc2NvcGU6IHNwZWNpZmljYWxseSBgYnJfY2ZtX2ZyYW1lX3J4YCwgYGJyX21ycF9wcm9jZXNzYCAoYm90aCB3ZXJlIHN0YXRpYyBiZWZvcmUpLCBgYnJfY2ZtX21lcF9jcmVhdGVgLCBgYnJfY2ZtX21lcF9kZWxldGVgLCBhbmQgYGJyX21ycF9hZGRgLiBBbHRob3VnaCBgYnJfaGFuZGxlX2ZyYW1lYCBpcyBvbiB0aGF0IGxpc3QsIEkmIzM5O20gbW9yZSBpbnRlcmVzdGVkIGluIHRoZSBub24taG90LXBhdGgga2VybmVsIGZ1bmN0aW9uczogYGJyX2NmbV9mcmFtZV9yeGAsIGBicl9tcnBfcHJvY2Vzc2AsIGBicl9jZm1fbWVwX2NyZWF0ZWAsIGBicl9jZm1fbWVwX2RlbGV0ZWAsIGFuZCBgYnJfbXJwX2FkZGAuCgpPa2F5LCBkb3VibGUtY2hlY2tpbmfigKYgSSBzZWUgdGhhdCBgYnJfY2ZtX2ZyYW1lX3J4YCBpcyBub3cgYW4gYGludCBicl9jZm1fZnJhbWVfcngoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYilgIGluIGBuZXQvYnJpZGdlL2JyX2NmbS5jYCwgYW5kIGBicl9tcnBfcHJvY2Vzc2AgaXMgYGludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKWAgaW4gYG5ldC9icmlkZ2UvYnJfbXJwLmNgLiBHb29kLiBOZXh0LCBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgYGJyX2NmbV9tZXBfY3JlYXRlYCwgYGJyX2NmbV9tZXBfZGVsZXRlYCwgYW5kIGBicl9tcnBfYWRkYCBhcmUgYWN0dWFsbHkgY2FsbGVkIGZyb20sIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGNhbGwgcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfY2ZtX21lcF9jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfY2ZtLmM9MzcwPWludCBicl9jZm1fZnJhbWVfcngoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvYnJpZGdlL2JyX2NmbS5jLTQ5MS1cbm5ldC9icmlkZ2UvYnJfY2ZtLmM6NDkyOmludCBicl9jZm1fbWVwX2NyZWF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5uZXQvYnJpZGdlL2JyX2NmbS5jLTQ5My1cdFx0ICAgICAgY29uc3QgdTMyIGluc3RhbmNlLFxubmV0L2JyaWRnZS9icl9jZm0uYzo0OTQ6XHRcdCAgICAgIHN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZSAqY29uc3QgY3JlYXRlLFxubmV0L2JyaWRnZS9icl9jZm0uYy00OTUtXHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM9OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3lcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYzo5OmJyX2NmbV9tZXBfY3JlYXRlX3BvbGljeVtJRkxBX0JSSURHRV9DRk1fTUVQX0NSRUFURV9NQVggJiM0MzsgMV0gPSB7XG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTAtXHRbSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVfVU5TUEVDXVx0PSB7IC50eXBlID0gTkxBX1JFSkVDVCB9LFxuLS1cbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYz03Mj1icl9jZm1fcG9saWN5W0lGTEFfQlJJREdFX0NGTV9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTc0LVx0W0lGTEFfQlJJREdFX0NGTV9NRVBfQ1JFQVRFXVx0XHQ9XG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM6NzU6XHRcdFx0XHROTEFfUE9MSUNZX05FU1RFRChicl9jZm1fbWVwX2NyZWF0ZV9wb2xpY3kpLFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTc2LVx0W0lGTEFfQlJJREdFX0NGTV9NRVBfREVMRVRFXVx0XHQ9XG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jPTkyPXN0YXRpYyBpbnQgYnJfbWVwX2NyZWF0ZV9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTk1LVx0c3RydWN0IG5sYXR0ciAqdGJbSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVfTUFYICYjNDM7IDFdO1xubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjk2Olx0c3RydWN0IGJyX2NmbV9tZXBfY3JlYXRlIGNyZWF0ZTtcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy05Ny1cdHUzMiBpbnN0YW5jZTtcbi0tXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTAwLVx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVfTUFYLCBhdHRyLFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjEwMTpcdFx0XHQgICAgICAgYnJfY2ZtX21lcF9jcmVhdGVfcG9saWN5LCBleHRhY2spO1xubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTEwMi1cdGlmIChlcnIpXG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTEyOC1cbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYzoxMjk6XHRyZXR1cm4gYnJfY2ZtX21lcF9jcmVhdGUoYnIsIGluc3RhbmNlLCBcdTAwMjZjcmVhdGUsIGV4dGFjayk7XG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTMwLX1cbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtOC1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaDo5OnN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZSB7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTAtXHRlbnVtIGJyX2NmbV9kb21haW4gZG9tYWluOyAvKiBEb21haW4gZm9yIHRoaXMgTUVQICovXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oLTE0LVxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oOjE1OmludCBicl9jZm1fbWVwX2NyZWF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTYtXHRcdCAgICAgIGNvbnN0IHUzMiBpbnN0YW5jZSxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaDoxNzpcdFx0ICAgICAgc3RydWN0IGJyX2NmbV9tZXBfY3JlYXRlICpjb25zdCBjcmVhdGUsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTgtXHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oPTExNz1zdHJ1Y3QgYnJfY2ZtX21lcCB7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oLTEyMC1cdHUzMlx0XHRcdFx0aW5zdGFuY2U7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmg6MTIxOlx0c3RydWN0IGJyX2NmbV9tZXBfY3JlYXRlXHRjcmVhdGU7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTIyLVx0c3RydWN0IGJyX2NmbV9tZXBfY29uZmlnXHRjb25maWc7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwOTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIFdlYWsgUG9pbnRzKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGZvciB2dWxuZXJhYmlsaXRpZXMsIGFuZCBiYXNlZCBvbiB0aGUgcmVjZW50IGZpbmRpbmdzLCBJIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaC4gVGhlIHVzdWFsIHN1c3BlY3RzIGhhdmUgYWxyZWFkeSBiZWVuIHNjcnV0aW5pemVkLCBzbyBJJiMzOTttIHRoaW5raW5nLi4uIGxldCYjMzk7cyBub3Qgb3Zlcmxvb2sgYGJyX21ycF9hZGRgLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiBbbWVudGlvbiB0aGUgcmVsZXZhbnQgc3lzdGVtL2FyZWEgdGhpcyBmdW5jdGlvbiBpcyBpbl0sIGFuZCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBwcmV2aW91cyBpc3N1ZXMsIGl0JiMzOTtzIGRlZmluaXRlbHkgd2l0aGluIHRoZSBzY29wZSBvZiB3aGVyZSB3ZSBzaG91bGQgYmUgbG9va2luZy4gTXkgaW5pdGlhbCBmb2N1cyB3YXMgW21lbnRpb24gYSBwcmV2aW91cyBhcmVhIG9mIGZvY3VzLCBpZiBhbnldLCBidXQgSSBoYXZlIHRvIGJlIHRob3JvdWdoLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgb25lIGFsc28gbmVlZHMgdG8gYmUgZXhwbG9yZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX21ycF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXJwLmM9NDE5PXN0YXRpYyB2b2lkIGJyX21ycF9kZWxfaW1wbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnAgKm1ycClcbi0tXG5uZXQvYnJpZGdlL2JyX21ycC5jLTQ4Ny0gKi9cbm5ldC9icmlkZ2UvYnJfbXJwLmM6NDg4OmludCBicl9tcnBfYWRkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycF9pbnN0YW5jZSAqaW5zdGFuY2UpXG5uZXQvYnJpZGdlL2JyX21ycC5jLTQ4OS17XG4tLVxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jPTMxPXN0YXRpYyBpbnQgYnJfbXJwX2luc3RhbmNlX3BhcnNlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5sYXR0ciAqYXR0cixcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9uZXRsaW5rLmMtNjEtXHRpZiAoY21kID09IFJUTV9TRVRMSU5LKVxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jOjYyOlx0XHRyZXR1cm4gYnJfbXJwX2FkZChiciwgXHUwMDI2aW5zdCk7XG5uZXQvYnJpZGdlL2JyX21ycF9uZXRsaW5rLmMtNjMtXHRlbHNlXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlX21ycC5oPTU5PWVudW0gYnJfbXJwX2h3X3N1cHBvcnQge1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9tcnAuaC02NS0vKiBicl9tcnAuYyAqL1xubmV0L2JyaWRnZS9icl9wcml2YXRlX21ycC5oOjY2OmludCBicl9tcnBfYWRkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycF9pbnN0YW5jZSAqaW5zdGFuY2UpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlX21ycC5oLTY3LWludCBicl9tcnBfZGVsKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycF9pbnN0YW5jZSAqaW5zdGFuY2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY5NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipSZXZpZXdpbmcgRGVsZXRpb24gUHJvY2Vzc2VzKioKCk9rYXksIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgZGVsZXRpb24gcHJvY2Vzc2VzLCBwYXJ0aWN1bGFybHkgYXMgdGhleSByZWxhdGUgdG8gYGJyX2NmbV9tZXBfZGVsZXRlYCBhbmQgYGJyX21ycF9kZWxgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSByZW1vdmFsIG9mIHRoZXNlIG9iamVjdHMgaXMgZnVuY3Rpb25pbmcgcHJvcGVybHksIGVzcGVjaWFsbHkgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgb3RoZXIgbW9kdWxlcy4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gb3JwaGFuZWQgcmVjb3JkcywgY2FzY2FkZSBkZWxldGlvbnMgYXJlIHdvcmtpbmcgYXMgZXhwZWN0ZWQsIGFuZCB0aGF0IGFsbCByZWxhdGVkIHRhYmxlcyBhcmUgYmVpbmcgaGFuZGxlZCBncmFjZWZ1bGx5LiBMZXQgbWUgYmVnaW4gYnkgY2hlY2tpbmcgdGhlIG1vc3QgcmVjZW50IGxvZ3MsIHRoZW4gSSBjYW4gcnVuIGEgZmV3IHRhcmdldGVkIHF1ZXJpZXMgdG8gY29uZmlybSB0aGUgaW50ZWdyaXR5IG9mIHRoZSBkYXRhYmFzZSBhZnRlciBhIGRlbGV0aW9uIGlzIHRyaWdnZXJlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdW5leHBlY3RlZCBzaWRlIGVmZmVjdHM7IHRoaXMgaXMgYSBjcml0aWNhbCBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfY2ZtX21lcF9kZWxldGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYnJpZGdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfY2ZtLmM9NTY0PXN0YXRpYyB2b2lkIG1lcF9kZWxldGVfaW1wbGVtZW50YXRpb24oc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfY2ZtLmMtNTg4LVxubmV0L2JyaWRnZS9icl9jZm0uYzo1ODk6aW50IGJyX2NmbV9tZXBfZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbm5ldC9icmlkZ2UvYnJfY2ZtLmMtNTkwLVx0XHQgICAgICBjb25zdCB1MzIgaW5zdGFuY2UsXG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jPTE3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjE4OmJyX2NmbV9tZXBfZGVsZXRlX3BvbGljeVtJRkxBX0JSSURHRV9DRk1fTUVQX0RFTEVURV9NQVggJiM0MzsgMV0gPSB7XG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTktXHRbSUZMQV9CUklER0VfQ0ZNX01FUF9ERUxFVEVfVU5TUEVDXVx0PSB7IC50eXBlID0gTkxBX1JFSkVDVCB9LFxuLS1cbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYz03Mj1icl9jZm1fcG9saWN5W0lGTEFfQlJJREdFX0NGTV9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTc2LVx0W0lGTEFfQlJJREdFX0NGTV9NRVBfREVMRVRFXVx0XHQ9XG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM6Nzc6XHRcdFx0XHROTEFfUE9MSUNZX05FU1RFRChicl9jZm1fbWVwX2RlbGV0ZV9wb2xpY3kpLFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTc4LVx0W0lGTEFfQlJJREdFX0NGTV9NRVBfQ09ORklHXVx0XHQ9XG4tLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jPTEzMj1zdGF0aWMgaW50IGJyX21lcF9kZWxldGVfcGFyc2Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy0xMzktXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBJRkxBX0JSSURHRV9DRk1fTUVQX0RFTEVURV9NQVgsIGF0dHIsXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM6MTQwOlx0XHRcdCAgICAgICBicl9jZm1fbWVwX2RlbGV0ZV9wb2xpY3ksIGV4dGFjayk7XG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTQxLVx0aWYgKGVycilcbi0tXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTUxLVxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjE1MjpcdHJldHVybiBicl9jZm1fbWVwX2RlbGV0ZShiciwgaW5zdGFuY2UsIGV4dGFjayk7XG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTUzLX1cbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmg9MTU9aW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTktXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmg6MjA6aW50IGJyX2NmbV9tZXBfZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaC0yMS1cdFx0ICAgICAgY29uc3QgdTMyIGluc3RhbmNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYzOAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBgYnJfbXJwX2RlbGAqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0LCBpbW1lZGlhdGVseSBjZW50ZXJzIG9uIHRoZSBjb250ZXh0LiAmIzM0O0xldCYjMzk7cyBjaGVjayBgYnJfbXJwX2RlbGAmIzM0OyAtIHRoaXMgaW1wbGllcyBhIHZlcnkgc3BlY2lmaWMgYXJlYSBvZiBjb25jZXJuLiBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSBzeXN0ZW1zIGFuZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBgYnJfbXJwX2RlbGAgaXMgbGlrZWx5IGFzc29jaWF0ZWQgd2l0aC4gSXMgaXQgYSB0YWJsZSBuYW1lPyBBIHN0b3JlZCBwcm9jZWR1cmU/IEEgdmFyaWFibGUgd2l0aGluIGEgbGFyZ2VyIHNjcmlwdCBvciBtb2R1bGU/IEtub3dpbmcgdGhpcyB3aWxsIGRyYW1hdGljYWxseSBhZmZlY3QgbXkgYXBwcm9hY2guCgpJJiMzOTttIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBlaXRoZXIgYSBkYXRhIGlzc3VlLCBhIGNvZGUgZXhlY3V0aW9uIHByb2JsZW0sIG9yIHBlcmhhcHMgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBUaGUgdGVybSAmIzM0O01SUCYjMzQ7IChNYXRlcmlhbCBSZXF1aXJlbWVudHMgUGxhbm5pbmcpIGlzIGEgc3Ryb25nIGluZGljYXRvciB0aGF0IEkmIzM5O20gbGlrZWx5IGRlYWxpbmcgd2l0aCBzdXBwbHkgY2hhaW4sIG1hbnVmYWN0dXJpbmcsIG9yIGRpc3RyaWJ1dGlvbiBwcm9jZXNzZXMuICYjMzQ7RGVsJiMzNDsgc3VnZ2VzdHMgZGVsZXRpb24sIHJlbW92YWwsIG9yIHBlcmhhcHMgZGVsaXZlcnkuIENvbWJpbmluZyB0aG9zZSwgbXkgbWluZCBpcyBpbW1lZGlhdGVseSB3b3JraW5nIHRocm91Z2ggdGhlIHBvdGVudGlhbCBzY2VuYXJpb3MsIHNvbWV0aGluZyBsaWtlOgoKKiAgICoqRGF0YSBJbnRlZ3JpdHk6KiogSXMgdGhpcyByZWxhdGVkIHRvIGRlbGV0aW5nIHBsYW5uZWQgb3JkZXJzLCBkZWxldGluZyByZWNvcmRzIG9mIGRlbGl2ZXJpZXMsIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBBcmUgdGhlcmUgY29uc3RyYWludHMgb3IgdHJpZ2dlcnMgaW52b2x2ZWQgdGhhdCBtaWdodCBjYXVzZSBlcnJvcnM/CiogICAqKlByb2Nlc3MgQXV0b21hdGlvbjoqKiBJcyB0aGlzIGEgc2NyaXB0IHRoYXQmIzM5O3Mgc3VwcG9zZWQgdG8gaGFuZGxlIHRoZXNlIGRlbGV0aW9ucyBhdXRvbWF0aWNhbGx5PyBJZiBzbywgd2hhdCYjMzk7cyBpdHMgaGlzdG9yeSBvZiBzdWNjZXNzIGFuZCBmYWlsdXJlPyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGNvbnNlcXVlbmNlcyBvZiBhIG1hbGZ1bmN0aW9uPwoqICAgKipQZXJmb3JtYW5jZSBJbXBhY3Q6KiogQXJlIHdlIHRhbGtpbmcgYWJvdXQgbGFyZ2UgZGF0YXNldHM/IENvdWxkIGEgcG9vcmx5IG9wdGltaXplZCBkZWxldGUgb3BlcmF0aW9uIGJlIHNsb3dpbmcgZG93biBvdGhlciBjcnVjaWFsIHByb2Nlc3Nlcz8gQXJlIHRoZXJlIGxvY2tzIHRoYXQgbWlnaHQgYmUgYW4gaXNzdWU/CgpCZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gYW55IGNvZGUgb3IgZGF0YSwgSSBuZWVkIHRvIGtub3cgKndoYXQqIEkmIzM5O20gbG9va2luZyBmb3Igc3BlY2lmaWNhbGx5IGFuZCB3aGF0IHRoZSBnb2FsIGlzLiBUaGlzIGlzIGFsbCBqdXN0IGFuIGluaXRpYWwgbWVudGFsIGZyYW1ld29yayB0byBzdHJ1Y3R1cmUgdGhlIGludmVzdGlnYXRpb24uIExldCBtZSBkZXRlcm1pbmUgdGhlIG5leHQgc3RlcHMgSSBzaG91bGQgdGFrZSB0byBnYWluIGdyZWF0ZXIgY29udGV4dCBvbiB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfbXJwX2RlbFxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tcnAuYz01NTM9dm9pZCBicl9tcnBfcG9ydF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXJwLmMtNTY2LSAqL1xubmV0L2JyaWRnZS9icl9tcnAuYzo1Njc6aW50IGJyX21ycF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSlcbm5ldC9icmlkZ2UvYnJfbXJwLmMtNTY4LXtcbi0tXG5uZXQvYnJpZGdlL2JyX21ycF9uZXRsaW5rLmM9MzE9c3RhdGljIGludCBicl9tcnBfaW5zdGFuY2VfcGFyc2Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXJwX25ldGxpbmsuYy02My1cdGVsc2Vcbm5ldC9icmlkZ2UvYnJfbXJwX25ldGxpbmsuYzo2NDpcdFx0cmV0dXJuIGJyX21ycF9kZWwoYnIsIFx1MDAyNmluc3QpO1xubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jLTY1LVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9tcnAuaD02Nj1pbnQgYnJfbXJwX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnBfaW5zdGFuY2UgKmluc3RhbmNlKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9tcnAuaDo2NzppbnQgYnJfbXJwX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnBfaW5zdGFuY2UgKmluc3RhbmNlKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9tcnAuaC02OC1pbnQgYnJfbXJwX3NldF9wb3J0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDM0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEJyaWRnZSBNYWtlZmlsZSoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgdGhlIG5ldHdvcmtpbmcgYnJpZGdlIGltcGxlbWVudGF0aW9uLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzIHdpdGggdGhlc2Uga2luZHMgb2YgaW52ZXN0aWdhdGlvbnMsIGlzIHRoZSBgTWFrZWZpbGVgIGluIHRoZSBgbmV0L2JyaWRnZS9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB0aGUgaGVhcnQgb2YgaG93IHRoaW5ncyBhcmUgYnVpbHQgaW4gdGhpcyBtb2R1bGUsIGl0IGhvbGRzIHRoZSBzZWNyZXRzLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBwcmVjaXNlbHkgd2hpY2ggc291cmNlIGZpbGVzIGFyZSBjb21waWxlZCwgd2hhdCBjb21waWxlciBmbGFncyBhcmUgdXNlZCwgYW5kIG1vc3QgY3JpdGljYWxseSwgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW5mbHVlbmNlIHRoZSBidWlsZCBwcm9jZXNzLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgZGVwZW5kZW5jaWVzIG9uIHZhcmlvdXMga2VybmVsIGNvbmZpZ3VyYXRpb24gc3ltYm9scyByZWxhdGVkIHRvIGJyaWRnaW5nIGZ1bmN0aW9uYWxpdHk7IHRoaW5ncyBsaWtlIFZMQU4gc3VwcG9ydCwgU1RQLCBhbmQgdGhlIHZhcmlvdXMgYnJpZGdlIHByb3RvY29scy4gVW5kZXJzdGFuZGluZyB0aGlzIE1ha2VmaWxlIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIElFRUUgODAyLjFkIGV0aGVybmV0IGJyaWRnaW5nIGxheWVyLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmotJChDT05GSUdfQlJJREdFKSAmIzQzOz0gYnJpZGdlLm9cbiAgIDc6XHRcbiAgIDg6XHRicmlkZ2UteVx0Oj0gYnIubyBicl9kZXZpY2UubyBicl9mZGIubyBicl9mb3J3YXJkLm8gYnJfaWYubyBicl9pbnB1dC5vIFxcXG4gICA5Olx0XHRcdFx0YnJfaW9jdGwubyBicl9zdHAubyBicl9zdHBfYnBkdS5vIFxcXG4gIDEwOlx0XHRcdFx0YnJfc3RwX2lmLm8gYnJfc3RwX3RpbWVyLm8gYnJfbmV0bGluay5vIFxcXG4gIDExOlx0XHRcdFx0YnJfbmV0bGlua190dW5uZWwubyBicl9hcnBfbmRfcHJveHkub1xuICAxMjpcdFxuICAxMzpcdGJyaWRnZS0kKENPTkZJR19TWVNGUykgJiM0Mzs9IGJyX3N5c2ZzX2lmLm8gYnJfc3lzZnNfYnIub1xuICAxNDpcdFxuICAxNTpcdGJyaWRnZS0kKHN1YnN0IG0seSwkKENPTkZJR19CUklER0VfTkVURklMVEVSKSkgJiM0Mzs9IGJyX25mX2NvcmUub1xuICAxNjpcdFxuICAxNzpcdGJyX25ldGZpbHRlci15IDo9IGJyX25ldGZpbHRlcl9ob29rcy5vXG4gIDE4Olx0YnJfbmV0ZmlsdGVyLSQoc3Vic3QgbSx5LCQoQ09ORklHX0lQVjYpKSAmIzQzOz0gYnJfbmV0ZmlsdGVyX2lwdjYub1xuICAxOTpcdG9iai0kKENPTkZJR19CUklER0VfTkVURklMVEVSKSAmIzQzOz0gYnJfbmV0ZmlsdGVyLm9cbiAgMjA6XHRcbiAgMjE6XHRicmlkZ2UtJChDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkcpICYjNDM7PSBicl9tdWx0aWNhc3QubyBicl9tZGIubyBicl9tdWx0aWNhc3RfZWh0Lm9cbiAgMjI6XHRcbiAgMjM6XHRicmlkZ2UtJChDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HKSAmIzQzOz0gYnJfdmxhbi5vIGJyX3ZsYW5fdHVubmVsLm8gYnJfdmxhbl9vcHRpb25zLm8gYnJfbXN0Lm9cbiAgMjQ6XHRcbiAgMjU6XHRicmlkZ2UtJChDT05GSUdfTkVUX1NXSVRDSERFVikgJiM0Mzs9IGJyX3N3aXRjaGRldi5vXG4gIDI2Olx0XG4gIDI3Olx0b2JqLSQoQ09ORklHX05FVEZJTFRFUikgJiM0Mzs9IG5ldGZpbHRlci9cbiAgMjg6XHRcbiAgMjk6XHRicmlkZ2UtJChDT05GSUdfQlJJREdFX01SUClcdCYjNDM7PSBicl9tcnBfc3dpdGNoZGV2Lm8gYnJfbXJwLm8gYnJfbXJwX25ldGxpbmsub1xuICAzMDpcdFxuICAzMTpcdGJyaWRnZS0kKENPTkZJR19CUklER0VfQ0ZNKVx0JiM0Mzs9IGJyX2NmbS5vIGJyX2NmbV9uZXRsaW5rLm9cbiAgMzI6XHRcbiAgMzM6XHRpZmRlZiBDT05GSUdfR0NPVl9QUk9GSUxFX05FVEZJTFRFUlxuICAzNDpcdEdDT1ZfUFJPRklMRV9icl9uZl9jb3JlLm8gOj0geVxuICAzNTpcdEdDT1ZfUFJPRklMRV9icl9uZXRmaWx0ZXJfaG9va3MubyA6PSB5XG4gIDM2Olx0R0NPVl9QUk9GSUxFX2JyX25ldGZpbHRlcl9pcHY2Lm8gOj0geVxuICAzNzpcdGVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzU2CgkJCQkJCQlvdXRwdXQ6IDIxMgoJCQkJCQkJdGhvdWdodHM6IDg3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEV0aGVybmV0IEJyaWRnZSBDRk0gYW5kIE1SUCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczogYEJSSURHRWAsIGBCUklER0VfQ0ZNYCwgYW5kIGBCUklER0VfTVJQYC4gIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgS2NvbmZpZyBmb3IgZGVwZW5kZW5jaWVzOyBpdCBsb29rcyBsaWtlIGBCUklER0VfQ0ZNYCBhbmQgYEJSSURHRV9NUlBgIGJvdGggZGVwZW5kIG9uIGBCUklER0VgLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIHdlIG5lZWQgdGhlIGJhc2ljIGJyaWRnaW5nIGZ1bmN0aW9uYWxpdHkgZmlyc3QuIGBCUklER0VgIGl0c2VsZiBpcyBhIHRyaXN0YXRlIGNvbmZpZyBlbmFibGluZyA4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmcsIGFuZCBzZWxlY3RzIExMQyBhbmQgU1RQLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRpZmYgYWN0dWFsbHkgdG91Y2hlcy4gSSBzZWUgZmlsZXMgbGlrZSBgYnJfY2ZtLmNgLCBgYnJfZGV2aWNlLmNgLCBgYnJfaW5wdXQuY2AsIGBicl9tcnAuY2AsIGFuZCBgYnJfcHJpdmF0ZS5oYC4gIFRoaXMgY29uZmlybXMgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIENvbm5lY3Rpdml0eSBGYXVsdCBNYW5hZ2VtZW50IChDRk0pIGFuZCBNZWRpYSBSZWR1bmRhbmN5IFByb3RvY29sIChNUlApIGhhbmRsaW5nIHdpdGhpbiB0aGUgYnJpZGdlLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhlIGNoYW5nZXMgYXJlIGFib3V0IGJyaWRnZSBkZXZpY2Ugc2V0dXAsIHBhY2tldCBpbnB1dCwgYW5kIHRoZSBjcmVhdGlvbi9kZWxldGlvbiBvZiBDRk0gTUVQcyBhbmQgTVJQIGluc3RhbmNlcy4KCk5leHQsIEkmIzM5O2xsIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyBtb2RpZmllZDogYGJyX2NmbV9mcmFtZV9yeGAsIGBicl9tcnBfcHJvY2Vzc2AsIGBicl9jZm1fbWVwX2NyZWF0ZWAsIGBicl9jZm1fbWVwX2RlbGV0ZWAsIGBicl9tcnBfYWRkYCwgYW5kIGBicl9tcnBfZGVsYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGV5IGFyZSB0aGUgY29ycmVjdCBzeW1ib2xzLCBhbmQgdGhhdCB0aGVpciB2aXNpYmlsaXR5IGlzIGNvcnJlY3QuIGBicl9jZm1fZnJhbWVfcnhgIGFuZCBgYnJfbXJwX3Byb2Nlc3NgIGFyZSBub3cgbm9uLXN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IGluZGljYXRlcyB0aGV5IG1pZ2h0IGJlIGdldHRpbmcgdXNlZCBvdXRzaWRlIG9mIHRoZWlyIG9yaWdpbmFsIHNjb3BlLiBUaGUgcmVtYWluaW5nIGFyZSBub24tc3RhdGljIGFzIHdlbGwuCgpJJiMzOTtsbCBxdWlja2x5IHNjYW4gZm9yIG90aGVyIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSW4gYGJyX2RldmljZS5jYCwgdGhlcmUmIzM5O3MgYGJyX2Rldl9zZXR1cGAgKGluaXRpYWxpemF0aW9uKSwgd2hpY2ggc2VlbXMgcmVhc29uYWJsZS4gSW4gYGJyX2lucHV0LmNgLCBgYnJfcHJvY2Vzc19mcmFtZV90eXBlYCBpcyBzdGF0aWMgYnV0IGBicl9oYW5kbGVfZnJhbWVgIGlzIHByZXNlbnQsIGFsb25nIHdpdGggdGhlIGRlbGV0aW9ucyBvZiBgYnJfYWRkX2ZyYW1lYCBhbmQgYGJyX2RlbF9mcmFtZWAuIEluIGBicl9jZm0uY2AsIGBtZXBfZGVsZXRlX2ltcGxlbWVudGF0aW9uYCBpcyBzdGF0aWMgYW5kIGNhbGxlZCBieSBgYnJfY2ZtX21lcF9kZWxldGVgIGFuZCBgYnJfY2ZtX3BvcnRfZGVsYC4gSW4gYGJyX21ycC5jYCwgdGhlcmUmIzM5O3MgYGJyX21ycF9kZWxfaW1wbGAsIHN0YXRpYyB0b28sIGFuZCBjYWxsZWQgYnkgYGJyX21ycF9kZWxgIGFuZCBgYnJfbXJwX3BvcnRfZGVsYC4KClNvLCB0byBzdW1tYXJpemUsIHRoZSByZWxldmFudCBzeW1ib2xzIGFyZTogYGJyX2NmbV9mcmFtZV9yeGAsIGBicl9tcnBfcHJvY2Vzc2AsIGBicl9jZm1fbWVwX2NyZWF0ZWAsIGBicl9jZm1fbWVwX2RlbGV0ZWAsIGBicl9tcnBfYWRkYCwgYW5kIGBicl9tcnBfZGVsYC4gIFRoZSBjb25maWd1cmF0aW9ucyB3ZSYjMzk7cmUgdHJhY2tpbmcgYXJlOiBgQlJJREdFYCwgYEJSSURHRV9DRk1gLCBhbmQgYEJSSURHRV9NUlBgLgoKQmFzZWQgb24gdGhpcywgaXQgc2VlbXMgdGhlIHBhdGNoIGlzIG9wdGltaXppbmcgRXRoZXJuZXQgQnJpZGdlIGZyYW1lIHR5cGUgaGFuZGxpbmcgZm9yIENGTSBhbmQgTVJQLiAgSW5zdGVhZCBvZiBkeW5hbWljIG1hbmFnZW1lbnQgb2YgYGZyYW1lX3R5cGVfbGlzdGAsIGl0JiMzOTtzIHJlcGxhY2luZyBpdCB3aXRoIGRpcmVjdCBmbGFnIGNoZWNrcyAoYEJST1BUX0NGTV9FTkFCTEVEYCBhbmQgYEJST1BUX01SUF9FTkFCTEVEYCkgaW4gdGhlIHJlY2VpdmUgcGF0aCAoYGJyX2hhbmRsZV9mcmFtZWAgLyBgYnJfcHJvY2Vzc19mcmFtZV90eXBlYCkuICBUaGlzIGlzIGxpa2VseSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLiBUaGUgY29kZSBhbHNvIGV4cG9ydHMgYGJyX2NmbV9mcmFtZV9yeGAgYW5kIGBicl9tcnBfcHJvY2Vzc2AsIGFuZCB1cGRhdGVzIHRoZSBpbnN0YW5jZSBjcmVhdGlvbi9kZWxldGlvbiBwYXRocy4gVGhpcyBjaGFuZ2UgaXMgY2VydGFpbmx5IHRlc3RhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZCBhcyBhIG1hdHRlciBvZiBjb3Vyc2UuCgpPa2F5LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O0JSSURHRV9DRk0mIzM0OywKICAgICYjMzQ7QlJJREdFX01SUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX2NmbV9mcmFtZV9yeCYjMzQ7LAogICAgJiMzNDticl9tcnBfcHJvY2VzcyYjMzQ7LAogICAgJiMzNDticl9jZm1fbWVwX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDticl9jZm1fbWVwX2RlbGV0ZSYjMzQ7LAogICAgJiMzNDticl9tcnBfYWRkJiMzNDssCiAgICAmIzM0O2JyX21ycF9kZWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBicmlkZ2UgZnJhbWUgaGFuZGxpbmcgbG9naWMgZm9yIENGTSAoODAyLjFRIENGTSkgYW5kIE1SUCBwcm90b2NvbHMgYnkgcmVwbGFjaW5nIHRoZSBkeW5hbWljIGZyYW1lX3R5cGVfbGlzdCB3aXRoIGJyaWRnZSBvcHRpb24gZmxhZ3MgKEJST1BUX0NGTV9FTkFCTEVEIGFuZCBCUk9QVF9NUlBfRU5BQkxFRCkgYW5kIGRpcmVjdCBjYWxscyB0byBicl9jZm1fZnJhbWVfcnggYW5kIGJyX21ycF9wcm9jZXNzLiBJdCBtb2RpZmllcyBib3RoIHRoZSBmcmFtZSByZWNlaXZlIHBhdGggYW5kIHRoZSBuZXRsaW5rLXRyaWdnZXJlZCBpbnN0YW5jZSBjcmVhdGlvbi9kZWxldGlvbiBwYXRocy4gVGhpcyBhZmZlY3RzIGNvcmUgYnJpZGdlIG5ldHdvcmtpbmcgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsIGVudmlyb25tZW50cyB3aXRob3V0IHNwZWNpYWxpemVkIGhhcmR3YXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7QlJJREdFX0NGTSYjMzQ7LAogICAgJiMzNDtCUklER0VfTVJQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfY2ZtX2ZyYW1lX3J4JiMzNDssCiAgICAmIzM0O2JyX21ycF9wcm9jZXNzJiMzNDssCiAgICAmIzM0O2JyX2NmbV9tZXBfY3JlYXRlJiMzNDssCiAgICAmIzM0O2JyX2NmbV9tZXBfZGVsZXRlJiMzNDssCiAgICAmIzM0O2JyX21ycF9hZGQmIzM0OywKICAgICYjMzQ7YnJfbXJwX2RlbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGJyaWRnZSBmcmFtZSBoYW5kbGluZyBsb2dpYyBmb3IgQ0ZNICg4MDIuMVEgQ0ZNKSBhbmQgTVJQIHByb3RvY29scyBieSByZXBsYWNpbmcgdGhlIGR5bmFtaWMgZnJhbWVfdHlwZV9saXN0IHdpdGggYnJpZGdlIG9wdGlvbiBmbGFncyAoQlJPUFRfQ0ZNX0VOQUJMRUQgYW5kIEJST1BUX01SUF9FTkFCTEVEKSBhbmQgZGlyZWN0IGNhbGxzIHRvIGJyX2NmbV9mcmFtZV9yeCBhbmQgYnJfbXJwX3Byb2Nlc3MuIEl0IG1vZGlmaWVzIGJvdGggdGhlIGZyYW1lIHJlY2VpdmUgcGF0aCBhbmQgdGhlIG5ldGxpbmstdHJpZ2dlcmVkIGluc3RhbmNlIGNyZWF0aW9uL2RlbGV0aW9uIHBhdGhzLiBUaGlzIGFmZmVjdHMgY29yZSBicmlkZ2UgbmV0d29ya2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWwgZW52aXJvbm1lbnRzIHdpdGhvdXQgc3BlY2lhbGl6ZWQgaGFyZHdhcmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEyOjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGJyaWRnZSBzdWJzeXN0ZW0mIzM5O3MgQ0ZNIChDb25uZWN0aXZpdHkgRmF1bHQgTWFuYWdlbWVudCkgYW5kIE1SUCAoTWVkaWEgUmVkdW5kYW5jeSBQcm90b2NvbCkgZnJhbWUgZGlzcGF0Y2ggbWVjaGFuaXNtIGJ5IHJlcGxhY2luZyB0aGUgZHluYW1pYyBmcmFtZS10eXBlIGxpbmtlZCBsaXN0IChgZnJhbWVfdHlwZV9saXN0YCkgd2l0aCBiaXQgZmxhZ3MgaW4gdGhlIGV4aXN0aW5nIGJyaWRnZSBvcHRpb25zIGJpdG1hc2sgKGBCUk9QVF9DRk1fRU5BQkxFRGAgYW5kIGBCUk9QVF9NUlBfRU5BQkxFRGApLiBcblxuTm8gbmV3IHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIGJ1ZmZlcnMgYXJlIGNyZWF0ZWQgb3IgZXhwb3J0ZWQgdG8gdXNlciBzcGFjZS4gVGhlIGxvZ2ljIHJlbGllcyBvbiBhbHJlYWR5LWFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYnJpZGdlIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgbmV0X2JyaWRnZWApLCB0b2dnbGluZyBhbmQgY2hlY2tpbmcgZXhpc3RpbmcgYml0IGZsYWdzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCBvbiwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGNvbmZpZ3VyYXRpb25zIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSByZWdyZXNzaW9uLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYyODJhNjE4MjlhNmJlN2Y1MWNhOWVhNzZkMGM2ODczMWNlMmQzN2IKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxMjoxNzoyMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfY2ZtLmMgYi9uZXQvYnJpZGdlL2JyX2NmbS5jCmluZGV4IGRlYTU2ZmZmYTFjMTkuLjlkY2M5N2Q2M2E2ZmMgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfY2ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9jZm0uYwpAQCAtMzY3LDcgJiM0MzszNjcsNyBAQCBzdGF0aWMgdTMyIGNjbV90bHZfZXh0cmFjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5kZXgsCiB9CiAKIC8qIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayAqLwotc3RhdGljIGludCBicl9jZm1fZnJhbWVfcngoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztpbnQgYnJfY2ZtX2ZyYW1lX3J4KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJdTMyIG1kbGV2ZWwsIGludGVydmFsLCBzaXplLCBpbmRleCwgbWF4OwogCWNvbnN0IHN0cnVjdCBicl9jZm1fY29tbW9uX2hkciAqaGRyOwpAQCAtNDg5LDExICYjNDM7NDg5LDYgQEAgc3RhdGljIGludCBicl9jZm1fZnJhbWVfcngoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHN0cnVjdCBicl9mcmFtZV90eXBlIGNmbV9mcmFtZV90eXBlIF9fcmVhZF9tb3N0bHkgPSB7Ci0JLnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9DRk0pLAotCS5mcmFtZV9oYW5kbGVyID0gYnJfY2ZtX2ZyYW1lX3J4LAotfTsKLQogaW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKIAkJICAgICAgY29uc3QgdTMyIGluc3RhbmNlLAogCQkgICAgICBzdHJ1Y3QgYnJfY2ZtX21lcF9jcmVhdGUgKmNvbnN0IGNyZWF0ZSwKQEAgLTU1OSw3ICYjNDM7NTU0LDcgQEAgaW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKIAlJTklUX0RFTEFZRURfV09SSygmYW1wO21lcC0mZ3Q7Y2NtX3R4X2R3b3JrLCBjY21fdHhfd29ya19leHBpcmVkKTsKIAogCWlmIChobGlzdF9lbXB0eSgmYW1wO2JyLSZndDttZXBfbGlzdCkpCi0JCWJyX2FkZF9mcmFtZShiciwgJmFtcDtjZm1fZnJhbWVfdHlwZSk7CiYjNDM7CQlicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9DRk1fRU5BQkxFRCwgdHJ1ZSk7CiAKIAlobGlzdF9hZGRfdGFpbF9yY3UoJmFtcDttZXAtJmd0O2hlYWQsICZhbXA7YnItJmd0O21lcF9saXN0KTsKIApAQCAtNTg4LDcgJiM0Mzs1ODMsNyBAQCBzdGF0aWMgdm9pZCBtZXBfZGVsZXRlX2ltcGxlbWVudGF0aW9uKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKIAlrZnJlZV9yY3UobWVwLCByY3UpOwogCiAJaWYgKGhsaXN0X2VtcHR5KCZhbXA7YnItJmd0O21lcF9saXN0KSkKLQkJYnJfZGVsX2ZyYW1lKGJyLCAmYW1wO2NmbV9mcmFtZV90eXBlKTsKJiM0MzsJCWJyX29wdF90b2dnbGUoYnIsIEJST1BUX0NGTV9FTkFCTEVELCBmYWxzZSk7CiB9CiAKIGludCBicl9jZm1fbWVwX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuYwppbmRleCBmZjU1ZGFiNzM2MzI2Li5lMDFjNDRhOTBkODRiIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMKQEAgLTUwMyw3ICYjNDM7NTAzLDYgQEAgdm9pZCBicl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2JyLSZndDtsb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2JyLSZndDtwb3J0X2xpc3QpOwogCUlOSVRfSExJU1RfSEVBRCgmYW1wO2JyLSZndDtmZGJfbGlzdCk7Ci0JSU5JVF9ITElTVF9IRUFEKCZhbXA7YnItJmd0O2ZyYW1lX3R5cGVfbGlzdCk7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX01SUCkKIAlJTklUX0hMSVNUX0hFQUQoJmFtcDtici0mZ3Q7bXJwX2xpc3QpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKaW5kZXggZDg3YTVmOWZhOTJiNy4uNzI4OTJlNWI0MDQzOSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwpAQCAtMzE3LDIwICYjNDM7MzE3LDMzIEBAIHN0YXRpYyBpbnQgbmZfaG9va19icmlkZ2VfcHJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmICoqcHNrYikKIAlyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDsKIH0KIAomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfQ0ZNKSB8fCBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTVJQKQomIzQzOy8qIENGTS9NUlAgYXJlIHVuY29tbW9uOyB0ZXN0IGJvdGggZW5hYmxlIGJpdHMgdG9nZXRoZXIgZmlyc3QuICovCiYjNDM7I2RlZmluZSBCUl9DRk1fTVJQX09QVFMgXAomIzQzOwkoKElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9DRk0pID8gQklUKEJST1BUX0NGTV9FTkFCTEVEKSA6IDBVTCkgfCBcCiYjNDM7CSAoSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX01SUCkgPyBCSVQoQlJPUFRfTVJQX0VOQUJMRUQpIDogMFVMKSkKJiM0MzsKIC8qIFJldHVybiAwIGlmIHRoZSBmcmFtZSB3YXMgbm90IHByb2Nlc3NlZCBvdGhlcndpc2UgMQogICogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrCiAgKi8KIHN0YXRpYyBpbnQgYnJfcHJvY2Vzc19mcmFtZV90eXBlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCiAJCQkJIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGJyX2ZyYW1lX3R5cGUgKnRtcDsKLQotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0bXAsICZhbXA7cC0mZ3Q7YnItJmd0O2ZyYW1lX3R5cGVfbGlzdCwgbGlzdCkKLQkJaWYgKHVubGlrZWx5KHRtcC0mZ3Q7dHlwZSA9PSBza2ItJmd0O3Byb3RvY29sKSkKLQkJCXJldHVybiB0bXAtJmd0O2ZyYW1lX2hhbmRsZXIocCwgc2tiKTsKJiM0MzsJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gcC0mZ3Q7YnI7CiAKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX0NGTSkKJiM0MzsJaWYgKHNrYi0mZ3Q7cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfQ0ZNKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9DRk1fRU5BQkxFRCkpCiYjNDM7CQlyZXR1cm4gYnJfY2ZtX2ZyYW1lX3J4KHAsIHNrYik7CiYjNDM7I2VuZGlmCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApCiYjNDM7CWlmIChza2ItJmd0O3Byb3RvY29sID09IGh0b25zKEVUSF9QX01SUCkgJmFtcDsmYW1wOwomIzQzOwkgICAgYnJfb3B0X2dldChiciwgQlJPUFRfTVJQX0VOQUJMRUQpKQomIzQzOwkJcmV0dXJuIGJyX21ycF9wcm9jZXNzKHAsIHNrYik7CiYjNDM7I2VuZGlmCiAJcmV0dXJuIDA7CiB9CiYjNDM7I2VuZGlmCiAKIC8qCiAgKiBSZXR1cm4gTlVMTCBpZiBza2IgaXMgaGFuZGxlZApAQCAtNDI1LDggJiM0Mzs0MzgsMTEgQEAgc3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgYnJfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYikKIAkJfQogCX0KIAotCWlmICh1bmxpa2VseShicl9wcm9jZXNzX2ZyYW1lX3R5cGUocCwgc2tiKSkpCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9DRk0pIHx8IElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApCiYjNDM7CWlmICh1bmxpa2VseSgocC0mZ3Q7YnItJmd0O29wdGlvbnMgJmFtcDsgQlJfQ0ZNX01SUF9PUFRTKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShwLCBza2IpKSkKIAkJcmV0dXJuIFJYX0hBTkRMRVJfUEFTUzsKJiM0MzsjZW5kaWYKIAogZm9yd2FyZDoKIAlpZiAoYnJfbXN0X2lzX2VuYWJsZWQocCkpCkBAIC00NjcsMTkgJiM0Mzs0ODMsMyBAQCByeF9oYW5kbGVyX2Z1bmNfdCAqYnJfZ2V0X3J4X2hhbmRsZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogCXJldHVybiBicl9oYW5kbGVfZnJhbWU7CiB9Ci0KLXZvaWQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KQotewotCWhsaXN0X2FkZF9oZWFkX3JjdSgmYW1wO2Z0LSZndDtsaXN0LCAmYW1wO2JyLSZndDtmcmFtZV90eXBlX2xpc3QpOwotfQotCi12b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdCkKLXsKLQlzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqdG1wOwotCi0JaGxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAmYW1wO2JyLSZndDtmcmFtZV90eXBlX2xpc3QsIGxpc3QpCi0JCWlmIChmdCA9PSB0bXApIHsKLQkJCWhsaXN0X2RlbF9yY3UoJmFtcDtmdC0mZ3Q7bGlzdCk7Ci0JCQlyZXR1cm47Ci0JCX0KLX0KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXJwLmMgYi9uZXQvYnJpZGdlL2JyX21ycC5jCmluZGV4IGVmMTZkMDcwMzkyNDEuLmRjZTZlZmE5NmM0YzYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbXJwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9tcnAuYwpAQCAtNiwxMyAmIzQzOzYsNiBAQAogc3RhdGljIGNvbnN0IHU4IG1ycF90ZXN0X2RtYWNbRVRIX0FMRU5dID0geyAweDEsIDB4MTUsIDB4NGUsIDB4MCwgMHgwLCAweDEgfTsKIHN0YXRpYyBjb25zdCB1OCBtcnBfaW5fdGVzdF9kbWFjW0VUSF9BTEVOXSA9IHsgMHgxLCAweDE1LCAweDRlLCAweDAsIDB4MCwgMHgzIH07CiAKLXN0YXRpYyBpbnQgYnJfbXJwX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0KLXN0YXRpYyBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSBtcnBfZnJhbWVfdHlwZSBfX3JlYWRfbW9zdGx5ID0gewotCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfTVJQKSwKLQkuZnJhbWVfaGFuZGxlciA9IGJyX21ycF9wcm9jZXNzLAotfTsKLQogc3RhdGljIGJvb2wgYnJfbXJwX2lzX3JpbmdfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwX3BvcnQsCiAJCQkJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqc19wb3J0LAogCQkJCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpCkBAIC00ODYsNyAmIzQzOzQ3OSw3IEBAIHN0YXRpYyB2b2lkIGJyX21ycF9kZWxfaW1wbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnAgKm1ycCkKIAlrZnJlZV9yY3UobXJwLCByY3UpOwogCiAJaWYgKGhsaXN0X2VtcHR5KCZhbXA7YnItJmd0O21ycF9saXN0KSkKLQkJYnJfZGVsX2ZyYW1lKGJyLCAmYW1wO21ycF9mcmFtZV90eXBlKTsKJiM0MzsJCWJyX29wdF90b2dnbGUoYnIsIEJST1BUX01SUF9FTkFCTEVELCBmYWxzZSk7CiB9CiAKIC8qIEFkZHMgYSBuZXcgTVJQIGluc3RhbmNlLgpAQCAtNTM2LDcgJiM0Mzs1MjksNyBAQCBpbnQgYnJfbXJwX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnBfaW5zdGFuY2UgKmluc3RhbmNlKQogCXJjdV9hc3NpZ25fcG9pbnRlcihtcnAtJmd0O3NfcG9ydCwgcCk7CiAKIAlpZiAoaGxpc3RfZW1wdHkoJmFtcDtici0mZ3Q7bXJwX2xpc3QpKQotCQlicl9hZGRfZnJhbWUoYnIsICZhbXA7bXJwX2ZyYW1lX3R5cGUpOwomIzQzOwkJYnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTVJQX0VOQUJMRUQsIHRydWUpOwogCiAJSU5JVF9ERUxBWUVEX1dPUksoJmFtcDttcnAtJmd0O3Rlc3Rfd29yaywgYnJfbXJwX3Rlc3Rfd29ya19leHBpcmVkKTsKIAlJTklUX0RFTEFZRURfV09SSygmYW1wO21ycC0mZ3Q7aW5fdGVzdF93b3JrLCBicl9tcnBfaW5fdGVzdF93b3JrX2V4cGlyZWQpOwpAQCAtMTI0MSw3ICYjNDM7MTIzNCw3IEBAIHN0YXRpYyBpbnQgYnJfbXJwX3JjdihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAogICogbm9ybWFsIGZvcndhcmRpbmcuCiAgKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sKICAqLwotc3RhdGljIGludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO2ludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCS8qIElmIHRoZXJlIGlzIG5vIE1SUCBpbnN0YW5jZSBkbyBub3JtYWwgZm9yd2FyZGluZyAqLwogCWlmIChsaWtlbHkoIXRlc3RfYml0KEJSX01SUF9BV0FSRV9CSVQsICZhbXA7cC0mZ3Q7ZmxhZ3MpKSkKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKaW5kZXggZDMzN2IxY2ZiOTgwZC4uYWZlN2MwYjRmOGZhNyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKQEAgLTQ5NSwxMiAmIzQzOzQ5NSwxMyBAQCBlbnVtIG5ldF9icmlkZ2Vfb3B0cyB7CiAJQlJPUFRfTVNUX0VOQUJMRUQsCiAJQlJPUFRfTURCX09GRkxPQURfRkFJTF9OT1RJRklDQVRJT04sCiAJQlJPUFRfRkRCX0xPQ0FMX1ZMQU5fMCwKJiM0MzsJQlJPUFRfQ0ZNX0VOQUJMRUQsCiYjNDM7CUJST1BUX01SUF9FTkFCTEVELAogfTsKIAogc3RydWN0IG5ldF9icmlkZ2UgewogCXNwaW5sb2NrX3QJCQlsb2NrOwogCXNwaW5sb2NrX3QJCQloYXNoX2xvY2s7Ci0Jc3RydWN0IGhsaXN0X2hlYWQJCWZyYW1lX3R5cGVfbGlzdDsKIAlzdHJ1Y3QgbmV0X2RldmljZQkJKmRldjsKIAl1bnNpZ25lZCBsb25nCQkJb3B0aW9uczsKIAkvKiBUaGVzZSBmaWVsZHMgYXJlIGFjY2Vzc2VkIG9uIGVhY2ggcGFja2V0ICovCkBAIC05MzIsMTYgJiM0Mzs5MzMsNiBAQCBpbnQgbmJwX2JhY2t1cF9jaGFuZ2Uoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IG5ldF9kZXZpY2UgKmJhY2t1cF9kZXYpOwogaW50IGJyX2hhbmRsZV9mcmFtZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwogcnhfaGFuZGxlcl9mdW5jX3QgKmJyX2dldF9yeF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCi1zdHJ1Y3QgYnJfZnJhbWVfdHlwZSB7Ci0JX19iZTE2CQkJdHlwZTsKLQlpbnQJCQkoKmZyYW1lX2hhbmRsZXIpKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsCi0JCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0Jc3RydWN0IGhsaXN0X25vZGUJbGlzdDsKLX07Ci0KLXZvaWQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KTsKLXZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KTsKLQogc3RhdGljIGlubGluZSBib29sIGJyX3J4X2hhbmRsZXJfY2hlY2tfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZShkZXYtJmd0O3J4X2hhbmRsZXIpID09IGJyX2dldF9yeF9oYW5kbGVyKGRldik7CkBAIC0yMDgwLDYgJiM0MzsyMDcxLDcgQEAgaW50IGJyX21ycF9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCiBib29sIGJyX21ycF9lbmFibGVkKHN0cnVjdCBuZXRfYnJpZGdlICpicik7CiB2b2lkIGJyX21ycF9wb3J0X2RlbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApOwogaW50IGJyX21ycF9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyKTsKJiM0MztpbnQgYnJfbXJwX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgYnJfbXJwX3BhcnNlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwKIAkJCSAgICAgICBzdHJ1Y3QgbmxhdHRyICphdHRyLCBpbnQgY21kLApAQCAtMjExMSw2ICYjNDM7MjEwMyw3IEBAIGludCBicl9jZm1fcGFyc2Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAogCQkgc3RydWN0IG5sYXR0ciAqYXR0ciwgaW50IGNtZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIGJvb2wgYnJfY2ZtX2NyZWF0ZWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTsKIHZvaWQgYnJfY2ZtX3BvcnRfZGVsKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCk7CiYjNDM7aW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGludCBicl9jZm1fY29uZmlnX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpOwogaW50IGJyX2NmbV9zdGF0dXNfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgc3RydWN0IG5ldF9icmlkZ2UgKmJyLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQxMwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDk2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZhY3RvcmluZyBDRk0vTVJQIEZyYW1lIEhhbmRsaW5nIGluIHRoZSBCcmlkZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3Jpbmcgb2YgaG93IENGTSAoQ29ubmVjdGl2aXR5IEZhdWx0IE1hbmFnZW1lbnQpIGFuZCBNUlAgKE11bHRpcGxlIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgZnJhbWUgaGFuZGxlcnMgYXJlIG1hbmFnZWQgd2l0aGluIHRoZSBicmlkZ2UgY29kZSAoYG5ldC9icmlkZ2UvYCkuICBQcmV2aW91c2x5LCB3ZSB3ZXJlIHVzaW5nIGEgbGlua2VkIGxpc3QgKGBmcmFtZV90eXBlX2xpc3RgKSBvbiB0aGUgYG5ldF9icmlkZ2VgIHN0cnVjdCB0byBkeW5hbWljYWxseSByZWdpc3RlciB0aGVzZSBmcmFtZSB0eXBlcyB2aWEgYGJyX2FkZF9mcmFtZWAgYW5kIGBicl9kZWxfZnJhbWVgIHVzaW5nIGBjZm1fZnJhbWVfdHlwZWAgYW5kIGBtcnBfZnJhbWVfdHlwZWAgc3RydWN0cy4gIE5vdywgdGhlIGFwcHJvYWNoIGlzIGJlaW5nIHNpbXBsaWZpZWQgYW5kIG9wdGltaXplZC4KClRoZSBrZXkgY2hhbmdlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYml0IGZsYWdzIHdpdGhpbiBgbmV0X2JyaWRnZS0mZ3Q7b3B0aW9uc2A6IGBCUk9QVF9DRk1fRU5BQkxFRGAgYW5kIGBCUk9QVF9NUlBfRU5BQkxFRGAuIEluc3RlYWQgb2YgdGhlIGxpbmtlZCBsaXN0LCBgYnJfcHJvY2Vzc19mcmFtZV90eXBlYCBpcyBub3cgdGhlIGNvcmUuIFRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgY2hlY2tzIHRoZXNlIG9wdGlvbiBiaXRzIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGNhbGwgdGhlIGFwcHJvcHJpYXRlIGhhbmRsZXJzOiBgYnJfY2ZtX2ZyYW1lX3J4YCBvciBgYnJfbXJwX3Byb2Nlc3NgLiBUaGUgYGZyYW1lX3R5cGVfbGlzdGAgYW5kIHRoZSBgc3RydWN0IGJyX2ZyYW1lX3R5cGVgIGFyZSBiZWluZyByZW1vdmVkIGFsdG9nZXRoZXIsIHN0cmVhbWxpbmluZyB0aGUgY29kZS4gSW4gYGJyX2hhbmRsZV9mcmFtZWAsIGl0IGNoZWNrcyBgKHAtJmd0O2JyLSZndDtvcHRpb25zICZhbXA7IEJSX0NGTV9NUlBfT1BUUykgJmFtcDsmYW1wOyBicl9wcm9jZXNzX2ZyYW1lX3R5cGUocCwgc2tiKWAuCgpMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgaW5kaXZpZHVhbCBmaWxlczoKCiogICBJbiBgYnJfY2ZtLmNgLCBgYnJfY2ZtX2ZyYW1lX3J4YCBpcyBubyBsb25nZXIgYHN0YXRpY2AuIFRoZSBgY2ZtX2ZyYW1lX3R5cGVgIHN0cnVjdCBpcyBnb25lLiBUaGUgcmVnaXN0cmF0aW9uIGFuZCBkZS1yZWdpc3RyYXRpb24gb2YgQ0ZNIGZ1bmN0aW9uYWxpdHkgaXMgbm93IGhhbmRsZWQgd2l0aCBgYnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfQ0ZNX0VOQUJMRUQsIHRydWUvZmFsc2UpYCBpbnN0ZWFkIG9mIGBicl9hZGRfZnJhbWVgIGFuZCBgYnJfZGVsX2ZyYW1lYC4KKiAgIGBicl9kZXZpY2UuY2Agc2VlcyB0aGUgcmVtb3ZhbCBvZiBgSU5JVF9ITElTVF9IRUFEKCZhbXA7YnItJmd0O2ZyYW1lX3R5cGVfbGlzdCk7YCBzaW5jZSB0aGUgbGlzdCBpcyBubyBsb25nZXIgcmVxdWlyZWQuCiogICBJbiBgYnJfaW5wdXQuY2AsIHdlJiMzOTt2ZSBnb3QgdGhlIGRlZmluaXRpb24gZm9yIGBCUl9DRk1fTVJQX09QVFNgIGFzIGEgYml0bWFzay4gVGhlIGBicl9wcm9jZXNzX2ZyYW1lX3R5cGVgIGZ1bmN0aW9uIGlzIG5vdyBjcnVjaWFsLCBjaGVja2luZyBmb3IgdGhlIGNvcnJlY3QgRXRoZXJuZXQgcHJvdG9jb2wgdHlwZXMgKGBFVEhfUF9DRk1gIGFuZCBgRVRIX1BfTVJQYCkgYW5kIHRoZSBjb3JyZXNwb25kaW5nIG9wdGlvbiBmbGFncyBiZWZvcmUgY2FsbGluZyB0aGUgc3BlY2lmaWMgaGFuZGxlci4gIEFnYWluLCBgYnJfYWRkX2ZyYW1lYCBhbmQgYGJyX2RlbF9mcmFtZWAgYXJlIHJlbW92ZWQuCiogICBgYnJfbXJwLmNgIG1pcnJvcnMgdGhlc2UgY2hhbmdlcy4gVGhlIGBtcnBfZnJhbWVfdHlwZWAgaXMgcmVtb3ZlZCwgYW5kIHJlZ2lzdHJhdGlvbiBpcyBkb25lIHZpYSBgYnJfb3B0X3RvZ2dsZWAgYXMgd2VsbC4gYGJyX21ycF9wcm9jZXNzYCBpcyBtYWRlIG5vbi1zdGF0aWMuCiogICBMYXN0bHksIGluIGBicl9wcml2YXRlLmhgLCB3ZSBoYXZlIHRoZSBuZXcgb3B0aW9uIGZsYWdzIGFkZGVkIHRvIGBlbnVtIG5ldF9icmlkZ2Vfb3B0c2AsIGFuZCB0aGUgcmVtb3ZhbCBvZiB0aGUgb2xkIGRhdGEgc3RydWN0dXJlcy4gVGhlIHJlbGV2YW50IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBhcmUgYWRkZWQuCgpOb3csIGEgcXVpY2ssIGJ1dCBpbXBvcnRhbnQsIHNlY3VyaXR5IGF1ZGl0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3Qgb3BlbiBhbnkgdnVsbmVyYWJpbGl0aWVzLgoKKiAgIE5vIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkOyBpdCYjMzk7cyBhbGwgYWJvdXQgcGFja2V0IHJlY2VwdGlvbiBwcm9jZXNzaW5nIGFuZCBpbnRlcm5hbCBvcHRpb24gZmxhZ3MuCiogICBUaGVyZSYjMzk7cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLiBUaGUgYGJyLSZndDtvcHRpb25zYCBzdHJ1Y3QgbWVtYmVyIGlzIHBhcnQgb2YgYHN0cnVjdCBuZXRfYnJpZGdlYCBhbmQgaW5pdGlhbGl6ZWQgdmlhIGBremFsbG9jYC4KKiAgIFdlJiMzOTtyZSBub3QgcGFzc2luZyB1bmluaXRpYWxpemVkIGRhdGEgYW55d2hlcmUuCiogICBObyBjb25kaXRpb25hbCBicmFuY2hlcyByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4KKiAgIFRoZSBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgaGFuZGxpbmcgZG9uJiMzOTt0IHNlZW0gdG8gaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgYnl0ZSBpc3N1ZXMuCgpJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYGJyX29wdF90b2dnbGVgIGFuZCBgYnJfb3B0X2dldGAgZnVuY3Rpb25zIHRvIG1ha2Ugc3VyZSB0aGV5JiMzOTtyZSB3b3JraW5nIGFzIGV4cGVjdGVkLCBidXQgdGhpcyBsb29rcyBsaWtlIGEgd2VsbC1zdHJ1Y3R1cmVkIGFuZCBwb3RlbnRpYWxseSBtb3JlIGVmZmljaWVudCBhcHByb2FjaCB0byBtYW5hZ2luZyB0aGVzZSBmcmFtZSBoYW5kbGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfb3B0XyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDc2OSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubmV0L2JyaWRnZS9ici5jPTI2OD1icl90b2dnbGVfZmRiX2xvY2FsX3ZsYW5fMChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG4tLVxubmV0L2JyaWRnZS9ici5jLTI3Mi1cbm5ldC9icmlkZ2UvYnIuYzoyNzM6XHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfRkRCX0xPQ0FMX1ZMQU5fMCkgPT0gb24pXG5uZXQvYnJpZGdlL2JyLmMtMjc0LVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvYnJpZGdlL2JyLmMtMjc5LVxubmV0L2JyaWRnZS9ici5jOjI4MDpcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX0ZEQl9MT0NBTF9WTEFOXzAsIG9uKTtcbm5ldC9icmlkZ2UvYnIuYy0yODEtXHRyZXR1cm4gMDtcbi0tXG5uZXQvYnJpZGdlL2JyLmM9Mjk0PWludCBicl9ib29sb3B0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGVudW0gYnJfYm9vbG9wdF9pZCBvcHQsIGJvb2wgb24sXG4tLVxubmV0L2JyaWRnZS9ici5jLTMwMC1cdGNhc2UgQlJfQk9PTE9QVF9OT19MTF9MRUFSTjpcbm5ldC9icmlkZ2UvYnIuYzozMDE6XHRcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX05PX0xMX0xFQVJOLCBvbik7XG5uZXQvYnJpZGdlL2JyLmMtMzAyLVx0XHRicmVhaztcbi0tXG5uZXQvYnJpZGdlL2JyLmMtMzA5LVx0Y2FzZSBCUl9CT09MT1BUX01EQl9PRkZMT0FEX0ZBSUxfTk9USUZJQ0FUSU9OOlxubmV0L2JyaWRnZS9ici5jOjMxMDpcdFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTURCX09GRkxPQURfRkFJTF9OT1RJRklDQVRJT04sIG9uKTtcbm5ldC9icmlkZ2UvYnIuYy0zMTEtXHRcdGJyZWFrO1xuLS1cbm5ldC9icmlkZ2UvYnIuYz0zMjQ9aW50IGJyX2Jvb2xvcHRfZ2V0KGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpiciwgZW51bSBicl9ib29sb3B0X2lkIG9wdClcbi0tXG5uZXQvYnJpZGdlL2JyLmMtMzI3LVx0Y2FzZSBCUl9CT09MT1BUX05PX0xMX0xFQVJOOlxubmV0L2JyaWRnZS9ici5jOjMyODpcdFx0cmV0dXJuIGJyX29wdF9nZXQoYnIsIEJST1BUX05PX0xMX0xFQVJOKTtcbm5ldC9icmlkZ2UvYnIuYy0zMjktXHRjYXNlIEJSX0JPT0xPUFRfTUNBU1RfVkxBTl9TTk9PUElORzpcbm5ldC9icmlkZ2UvYnIuYzozMzA6XHRcdHJldHVybiBicl9vcHRfZ2V0KGJyLCBCUk9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HX0VOQUJMRUQpO1xubmV0L2JyaWRnZS9ici5jLTMzMS1cdGNhc2UgQlJfQk9PTE9QVF9NU1RfRU5BQkxFOlxubmV0L2JyaWRnZS9ici5jOjMzMjpcdFx0cmV0dXJuIGJyX29wdF9nZXQoYnIsIEJST1BUX01TVF9FTkFCTEVEKTtcbm5ldC9icmlkZ2UvYnIuYy0zMzMtXHRjYXNlIEJSX0JPT0xPUFRfTURCX09GRkxPQURfRkFJTF9OT1RJRklDQVRJT046XG5uZXQvYnJpZGdlL2JyLmM6MzM0Olx0XHRyZXR1cm4gYnJfb3B0X2dldChiciwgQlJPUFRfTURCX09GRkxPQURfRkFJTF9OT1RJRklDQVRJT04pO1xubmV0L2JyaWRnZS9ici5jLTMzNS1cdGNhc2UgQlJfQk9PTE9QVF9GREJfTE9DQUxfVkxBTl8wOlxubmV0L2JyaWRnZS9ici5jOjMzNjpcdFx0cmV0dXJuIGJyX29wdF9nZXQoYnIsIEJST1BUX0ZEQl9MT0NBTF9WTEFOXzApO1xubmV0L2JyaWRnZS9ici5jLTMzNy1cdGRlZmF1bHQ6XG4tLVxubmV0L2JyaWRnZS9ici5jPTM3NT12b2lkIGJyX2Jvb2xvcHRfbXVsdGlfZ2V0KGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyLmMtMzg4LS8qIHByaXZhdGUgYnJpZGdlIG9wdGlvbnMsIGNvbnRyb2xsZWQgYnkgdGhlIGtlcm5lbCAqL1xubmV0L2JyaWRnZS9ici5jOjM4OTp2b2lkIGJyX29wdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBlbnVtIG5ldF9icmlkZ2Vfb3B0cyBvcHQsIGJvb2wgb24pXG5uZXQvYnJpZGdlL2JyLmMtMzkwLXtcbm5ldC9icmlkZ2UvYnIuYzozOTE6XHRib29sIGN1ciA9ICEhYnJfb3B0X2dldChiciwgb3B0KTtcbm5ldC9icmlkZ2UvYnIuYy0zOTItXG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYz0yNz12b2lkIGJyX3JlY2FsY3VsYXRlX25laWdoX3N1cHByZXNzX2VuYWJsZWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxuLS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMzgtXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jOjM5Olx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTkVJR0hfU1VQUFJFU1NfRU5BQkxFRCwgbmVpZ2hfc3VwcHJlc3MpO1xubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy00MC19XG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYz0xMjU9dm9pZCBicl9kb19wcm94eV9zdXBwcmVzc19hcnAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMTYwLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzoxNjE6XHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTkVJR0hfU1VQUFJFU1NfRU5BQkxFRCkpIHtcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMTYyLVx0XHRpZiAoYnJfaXNfbmVpZ2hfc3VwcHJlc3NfZW5hYmxlZChwLCB2aWQpKVxuLS1cbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMTg2LVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzoxODc6XHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTkVJR0hfU1VQUFJFU1NfRU5BQkxFRCkgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTE4OC1cdCAgICBicl9pc19sb2NhbF9pcCh2bGFuZGV2LCB0aXApKSB7XG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy0yMjktXHRcdFx0aWYgKHJlcGxpZWQgfHxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM6MjMwOlx0XHRcdCAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9ORUlHSF9TVVBQUkVTU19FTkFCTEVEKSlcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMjMxLVx0XHRcdFx0QlJfSU5QVVRfU0tCX0NCKHNrYiktXHUwMDNlcHJveHlhcnBfcmVwbGllZCA9IDE7XG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYz00MTU9dm9pZCBicl9kb19zdXBwcmVzc19uZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy01MDMtXHRcdFx0aWYgKHJlcGxpZWQgfHxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM6NTA0Olx0XHRcdCAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9ORUlHSF9TVVBQUkVTU19FTkFCTEVEKSlcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtNTA1LVx0XHRcdFx0QlJfSU5QVVRfU0tCX0NCKHNrYiktXHUwMDNlcHJveHlhcnBfcmVwbGllZCA9IDE7XG4tLVxubmV0L2JyaWRnZS9icl9jZm0uYz00OTI9aW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX2NmbS5jLTU1Ni1cdGlmIChobGlzdF9lbXB0eShcdTAwMjZici1cdTAwM2VtZXBfbGlzdCkpXG5uZXQvYnJpZGdlL2JyX2NmbS5jOjU1NzpcdFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfQ0ZNX0VOQUJMRUQsIHRydWUpO1xubmV0L2JyaWRnZS9icl9jZm0uYy01NTgtXG4tLVxubmV0L2JyaWRnZS9icl9jZm0uYz01NjQ9c3RhdGljIHZvaWQgbWVwX2RlbGV0ZV9pbXBsZW1lbnRhdGlvbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9jZm0uYy01ODUtXHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2YnItXHUwMDNlbWVwX2xpc3QpKVxubmV0L2JyaWRnZS9icl9jZm0uYzo1ODY6XHRcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX0NGTV9FTkFCTEVELCBmYWxzZSk7XG5uZXQvYnJpZGdlL2JyX2NmbS5jLTU4Ny19XG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0zMD1uZXRkZXZfdHhfdCBicl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtNzQtXHQgICAgIGV0aF9oZHIoc2tiKS1cdTAwM2VoX3Byb3RvID09IGh0b25zKEVUSF9QX1JBUlApKSBcdTAwMjZcdTAwMjZcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6NzU6XHQgICAgYnJfb3B0X2dldChiciwgQlJPUFRfTkVJR0hfU1VQUFJFU1NfRU5BQkxFRCkpIHtcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtNzYtXHRcdGJyX2RvX3Byb3h5X3N1cHByZXNzX2FycChza2IsIGJyLCB2aWQsIE5VTEwpO1xuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtNzgtXHRcdCAgIHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSBcdTAwMjZcdTAwMjZcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6Nzk6XHRcdCAgIGJyX29wdF9nZXQoYnIsIEJST1BUX05FSUdIX1NVUFBSRVNTX0VOQUJMRUQpIFx1MDAyNlx1MDAyNlxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy04MC1cdFx0ICAgcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgJiM0Mztcbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTE2ND1zdGF0aWMgaW50IGJyX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNzItXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE3MzpcdGlmIChicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE3NC1cdFx0YnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMoYnIpO1xuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM9MTg5PXN0YXRpYyBpbnQgYnJfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE5NS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MTk2Olx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSlcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTk3LVx0XHRicl9tdWx0aWNhc3RfbGVhdmVfc25vb3BlcnMoYnIpO1xuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM9MjA0PXN0YXRpYyBpbnQgYnJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTIxMC1cdC8qIHRoaXMgZmxhZyB3aWxsIGJlIGNsZWFyZWQgaWYgdGhlIE1UVSB3YXMgYXV0b21hdGljYWxseSBhZGp1c3RlZCAqL1xubmV0L2JyaWRnZS9icl9kZXZpY2UuYzoyMTE6XHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NVFVfU0VUX0JZX1VTRVIsIHRydWUpO1xubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0yMTItI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG4tLVxubmV0L2JyaWRnZS9icl9mZGIuYz00NjA9dm9pZCBicl9mZGJfY2hhbmdlYWRkcihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXdhZGRyKVxuLS1cbm5ldC9icmlkZ2UvYnJfZmRiLmMtNDY3LVxubmV0L2JyaWRnZS9icl9mZGIuYzo0Njg6XHRsb2NhbF92bGFuXzAgPSBicl9vcHRfZ2V0KGJyLCBCUk9QVF9GREJfTE9DQUxfVkxBTl8wKTtcbm5ldC9icmlkZ2UvYnJfZmRiLmMtNDY5LVxuLS1cbm5ldC9icmlkZ2UvYnJfZmRiLmM9NTA2PXZvaWQgYnJfZmRiX2NoYW5nZV9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGNvbnN0IHU4ICpuZXdhZGRyKVxuLS1cbm5ldC9icmlkZ2UvYnJfZmRiLmMtNTEyLVxubmV0L2JyaWRnZS9icl9mZGIuYzo1MTM6XHRsb2NhbF92bGFuXzAgPSBicl9vcHRfZ2V0KGJyLCBCUk9QVF9GREJfTE9DQUxfVkxBTl8wKTtcbm5ldC9icmlkZ2UvYnJfZmRiLmMtNTE0LVxuLS1cbm5ldC9icmlkZ2UvYnJfaWYuYz01MjA9dm9pZCBicl9tdHVfYXV0b19hZGp1c3Qoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxuLS1cbm5ldC9icmlkZ2UvYnJfaWYuYy01MjQtXHQvKiBpZiB0aGUgYnJpZGdlIE1UVSB3YXMgbWFudWFsbHkgY29uZmlndXJlZCBkb24mIzM5O3QgbWVzcyB3aXRoIGl0ICovXG5uZXQvYnJpZGdlL2JyX2lmLmM6NTI1Olx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01UVV9TRVRfQllfVVNFUikpXG5uZXQvYnJpZGdlL2JyX2lmLmMtNTI2LVx0XHRyZXR1cm47XG4tLVxubmV0L2JyaWRnZS9icl9pZi5jLTUzMS1cdGRldl9zZXRfbXR1KGJyLVx1MDAzZWRldiwgYnJfbXR1X21pbihicikpO1xubmV0L2JyaWRnZS9icl9pZi5jOjUzMjpcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01UVV9TRVRfQllfVVNFUiwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl9pZi5jLTUzMy19XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTc2PWludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xNzQtXHRcdCAgIHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSBcdTAwMjZcdTAwMjZcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzoxNzU6XHRcdCAgIGJyX29wdF9nZXQoYnIsIEJST1BUX05FSUdIX1NVUFBSRVNTX0VOQUJMRUQpIFx1MDAyNlx1MDAyNlxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTE3Ni1cdFx0ICAgcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgJiM0Mztcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMjA1LVx0XHRpZiAodW5saWtlbHkoIWRzdCBcdTAwMjZcdTAwMjYgdmlkIFx1MDAyNlx1MDAyNlxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjIwNjpcdFx0XHQgICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX0ZEQl9MT0NBTF9WTEFOXzApKSkge1xubmV0L2JyaWRnZS9icl9pbnB1dC5jLTIwNy1cdFx0XHRkc3QgPSBicl9mZGJfZmluZF9yY3UoYnIsIGV0aF9oZHIoc2tiKS1cdTAwM2VoX2Rlc3QsIDApO1xuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz0yNDU9c3RhdGljIHZvaWQgX19icl9oYW5kbGVfbG9jYWxfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTI1Mi1cdCAgICBuYnBfc3RhdGVfc2hvdWxkX2xlYXJuKHApIFx1MDAyNlx1MDAyNlxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjI1MzpcdCAgICAhYnJfb3B0X2dldChwLVx1MDAzZWJyLCBCUk9QVF9OT19MTF9MRUFSTikgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMjU0LVx0ICAgIGJyX3Nob3VsZF9sZWFybihwLCBza2IsIFx1MDAyNnZpZCkpXG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTMyOT1zdGF0aWMgaW50IGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMzUtXHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0NGTSkgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MzM2Olx0ICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX0NGTV9FTkFCTEVEKSlcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMzctXHRcdHJldHVybiBicl9jZm1fZnJhbWVfcngocCwgc2tiKTtcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzQwLVx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9NUlApIFx1MDAyNlx1MDAyNlxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjM0MTpcdCAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9NUlBfRU5BQkxFRCkpXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMzQyLVx0XHRyZXR1cm4gYnJfbXJwX3Byb2Nlc3MocCwgc2tiKTtcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jPTcwOD1fX2JyX21kYl9jaG9vc2VfY29udGV4dChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy03MTQtXG5uZXQvYnJpZGdlL2JyX21kYi5jOjcxNTpcdGlmICghYnJfb3B0X2dldChiciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSkge1xubmV0L2JyaWRnZS9icl9tZGIuYy03MTYtXHRcdGJybWN0eCA9IFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9jdHg7XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz0xMjMxPXN0YXRpYyBpbnQgYnJfbWRiX2NvbmZpZ19pbml0KHN0cnVjdCBicl9tZGJfY29uZmlnICpjZmcsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy0xMjQ4LVxubmV0L2JyaWRnZS9icl9tZGIuYzoxMjQ5Olx0aWYgKCFicl9vcHRfZ2V0KGNmZy1cdTAwM2ViciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpKSB7XG5uZXQvYnJpZGdlL2JyX21kYi5jLTEyNTAtXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0JyaWRnZSYjMzk7cyBtdWx0aWNhc3QgcHJvY2Vzc2luZyBpcyBkaXNhYmxlZFwmIzM0Oyk7XG4tLVxubmV0L2JyaWRnZS9icl9tcnAuYz00MTk9c3RhdGljIHZvaWQgYnJfbXJwX2RlbF9pbXBsKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycCAqbXJwKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXJwLmMtNDgxLVx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1ycF9saXN0KSlcbm5ldC9icmlkZ2UvYnJfbXJwLmM6NDgyOlx0XHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NUlBfRU5BQkxFRCwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl9tcnAuYy00ODMtfVxuLS1cbm5ldC9icmlkZ2UvYnJfbXJwLmM9NDg4PWludCBicl9tcnBfYWRkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycF9pbnN0YW5jZSAqaW5zdGFuY2UpXG4tLVxubmV0L2JyaWRnZS9icl9tcnAuYy01MzEtXHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2YnItXHUwMDNlbXJwX2xpc3QpKVxubmV0L2JyaWRnZS9icl9tcnAuYzo1MzI6XHRcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01SUF9FTkFCTEVELCB0cnVlKTtcbm5ldC9icmlkZ2UvYnJfbXJwLmMtNTMzLVxuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmM9MTY9Ym9vbCBicl9tc3RfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjAtXG5uZXQvYnJpZGdlL2JyX21zdC5jOjIxOlx0cmV0dXJuIGJyX29wdF9nZXQobmV0ZGV2X3ByaXYoZGV2KSwgQlJPUFRfTVNUX0VOQUJMRUQpO1xubmV0L2JyaWRnZS9icl9tc3QuYy0yMi19XG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYz0yNT12b2lkIGJyX21zdF91bmluaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxubmV0L2JyaWRnZS9icl9tc3QuYy0yNi17XG5uZXQvYnJpZGdlL2JyX21zdC5jOjI3Olx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01TVF9FTkFCTEVEKSlcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjgtXHRcdHN0YXRpY19icmFuY2hfZGVjKFx1MDAyNmJyX21zdF91c2VkKTtcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jPTMxPWludCBicl9tc3RfZ2V0X2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IG1zdGksIHVuc2lnbmVkIGxvbmcgKnZpZHMpXG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYy00Mi1cdGJyID0gbmV0ZGV2X3ByaXYoZGV2KTtcbm5ldC9icmlkZ2UvYnJfbXN0LmM6NDM6XHRpZiAoIWJyX29wdF9nZXQoYnIsIEJST1BUX01TVF9FTkFCTEVEKSlcbm5ldC9icmlkZ2UvYnJfbXN0LmMtNDQtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmM9NTc9aW50IGJyX21zdF9nZXRfc3RhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IG1zdGksIHU4ICpzdGF0ZSlcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTY1LVx0cCA9IGJyX3BvcnRfZ2V0X2NoZWNrX3J0bmwoZGV2KTtcbm5ldC9icmlkZ2UvYnJfbXN0LmM6NjY6XHRpZiAoIXAgfHwgIWJyX29wdF9nZXQocC1cdTAwM2ViciwgQlJPUFRfTVNUX0VOQUJMRUQpKVxubmV0L2JyaWRnZS9icl9tc3QuYy02Ny1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYz0yMDM9aW50IGJyX21zdF9zZXRfZW5hYmxlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYy0yMjUtXG5uZXQvYnJpZGdlL2JyX21zdC5jOjIyNjpcdGlmIChicl9vcHRfZ2V0KGJyLCBCUk9QVF9NU1RfRU5BQkxFRCkgPT0gb24pXG5uZXQvYnJpZGdlL2JyX21zdC5jLTIyNy1cdFx0cmV0dXJuIDA7XG4tLVxubmV0L2JyaWRnZS9icl9tc3QuYy0yMzctXG5uZXQvYnJpZGdlL2JyX21zdC5jOjIzODpcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01TVF9FTkFCTEVELCBvbik7XG5uZXQvYnJpZGdlL2JyX21zdC5jLTIzOS1cdHJldHVybiAwO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXN0LmM9MzM0PWludCBicl9tc3RfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICptc3RfYXR0cixcbi0tXG5uZXQvYnJpZGdlL2JyX21zdC5jLTM0MC1cbm5ldC9icmlkZ2UvYnJfbXN0LmM6MzQxOlx0aWYgKCFicl9vcHRfZ2V0KHAtXHUwMDNlYnIsIEJST1BUX01TVF9FTkFCTEVEKSkge1xubmV0L2JyaWRnZS9icl9tc3QuYy0zNDItXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0NhbiYjMzk7dCBtb2RpZnkgTVNUIHN0YXRlIHdoZW4gTVNUIGlzIGRpc2FibGVkXCYjMzQ7KTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTE0OT1icl9tZGJfZW50cnlfc2tiX2dldChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTU0LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxNTU6XHRpZiAoIWJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSB8fFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNTYtXHQgICAgYnJfbXVsdGljYXN0X2N0eF92bGFuX2dsb2JhbF9kaXNhYmxlZChicm1jdHgpKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjEwPWJyX211bHRpY2FzdF9wZ190b19wb3J0X2N0eChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwZylcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxOC1cdGlmICghcGctXHUwMDNla2V5LmFkZHIudmlkIHx8XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIxOTpcdCAgICAhYnJfb3B0X2dldChwZy1cdTAwM2VrZXkucG9ydC1cdTAwM2ViciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIwLVx0XHRnb3RvIG91dDtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTkyND1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmJyX2lwNF9tdWx0aWNhc3RfYWxsb2NfcXVlcnkoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTk5NS1cdGlwaC1cdTAwM2Vwcm90b2NvbCA9IElQUFJPVE9fSUdNUDtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6OTk2Olx0aXBoLVx1MDAzZXNhZGRyID0gYnJfb3B0X2dldChicm1jdHgtXHUwMDNlYnIsIEJST1BUX01VTFRJQ0FTVF9RVUVSWV9VU0VfSUZBRERSKSA/XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTk5Ny1cdFx0ICAgICBpbmV0X3NlbGVjdF9hZGRyKGJybWN0eC1cdTAwM2Vici1cdTAwM2VkZXYsIDAsIFJUX1NDT1BFX0xJTkspIDogMDtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTEwNjg9c3RhdGljIHN0cnVjdCBza19idWZmICpicl9pcDZfbXVsdGljYXN0X2FsbG9jX3F1ZXJ5KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xMTQzLVx0XHRrZnJlZV9za2Ioc2tiKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTE0NDpcdFx0YnJfb3B0X3RvZ2dsZShicm1jdHgtXHUwMDNlYnIsIEJST1BUX0hBU19JUFY2X0FERFIsIGZhbHNlKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTE0NS1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xMTQ3LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxMTQ4Olx0YnJfb3B0X3RvZ2dsZShicm1jdHgtXHUwMDNlYnIsIEJST1BUX0hBU19JUFY2X0FERFIsIHRydWUpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xMTQ5LVx0aXB2Nl9ldGhfbWNfbWFwKFx1MDAyNmlwNmgtXHUwMDNlZGFkZHIsIGV0aC1cdTAwM2VoX2Rlc3QpO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTI2OT1zdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKmJyX211bHRpY2FzdF9uZXdfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTI4MS1cdFx0YnJfbWNfZGlzYWJsZWRfdXBkYXRlKGJyLVx1MDAzZWRldiwgZmFsc2UsIE5VTEwpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxMjgyOlx0XHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCwgZmFsc2UpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xMjgzLVx0XHRyZXR1cm4gRVJSX1BUUigtRTJCSUcpO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTcyMz1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfcXVlcmllcl9leHBpcmVkKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNzI4LVx0ICAgIGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoYnJtY3R4KSB8fFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxNzI5Olx0ICAgICFicl9vcHRfZ2V0KGJybWN0eC1cdTAwM2ViciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNzMwLVx0XHRnb3RvIG91dDtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTE4OTk9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3NlbmRfcXVlcnkoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE5MDgtXHRpZiAoIWJyX211bHRpY2FzdF9jdHhfc2hvdWxkX3VzZShicm1jdHgsIHBtY3R4KSB8fFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxOTA5Olx0ICAgICFicl9vcHRfZ2V0KGJybWN0eC1cdTAwM2ViciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpIHx8XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE5MTAtXHQgICAgIWJybWN0eC1cdTAwM2VtdWx0aWNhc3RfcXVlcmllcilcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTE5ODc9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfcmV4bWl0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTk5OC1cdGlmICghbmV0aWZfcnVubmluZyhici1cdTAwM2VkZXYpIHx8IGhsaXN0X3VuaGFzaGVkKFx1MDAyNnBnLVx1MDAzZW1nbGlzdCkgfHxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTk5OTpcdCAgICAhYnJfb3B0X2dldChiciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMDAwLVx0XHRnb3RvIG91dDtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxMDM9aW50IGJyX211bHRpY2FzdF9hZGRfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjExMC1cdGVyciA9IGJyX21jX2Rpc2FibGVkX3VwZGF0ZShwb3J0LVx1MDAzZWRldixcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjExMTpcdFx0XHRcdCAgICBicl9vcHRfZ2V0KHBvcnQtXHUwMDNlYnIsXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxMTItXHRcdFx0XHRcdCAgICAgICBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCksXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTQ5PXN0YXRpYyB2b2lkIF9fYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNTQtXHRicm1jdHggPSBicl9tdWx0aWNhc3RfcG9ydF9jdHhfZ2V0X2dsb2JhbChwbWN0eCk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIxNTU6XHRpZiAoIWJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSB8fFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTU2LVx0ICAgICFuZXRpZl9ydW5uaW5nKGJyLVx1MDAzZWRldikpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMjIxPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF90b2dnbGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBib29sIG9uKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIyMy0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjI0Olx0aWYgKGJyX29wdF9nZXQocG9ydC1cdTAwM2ViciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSkge1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjI1LVx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2Zztcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIyOTE9c3RhdGljIHZvaWQgX19ncnBfc3JjX3F1ZXJ5X21hcmtlZF9hbmRfcmV4bWl0KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMzAwLVx0aWYgKCFuZXRpZl9ydW5uaW5nKGJybWN0eC1cdTAwM2Vici1cdTAwM2VkZXYpIHx8XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIzMDE6XHQgICAgIWJyX29wdF9nZXQoYnJtY3R4LVx1MDAzZWJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIzMDItXHRcdHJldHVybjtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIzMzg9c3RhdGljIHZvaWQgX19ncnBfc2VuZF9xdWVyeV9hbmRfcmV4bWl0KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMzQ1LVx0aWYgKCFuZXRpZl9ydW5uaW5nKGJybWN0eC1cdTAwM2Vici1cdTAwM2VkZXYpIHx8XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIzNDY6XHQgICAgIWJyX29wdF9nZXQoYnJtY3R4LVx1MDAzZWJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIzNDctXHRcdHJldHVybjtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTMyNDQ9aW50IGJyX211bHRpY2FzdF9kdW1wX3F1ZXJpZXJfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTMyNTEtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjMyNTI6XHRpZiAoIWJyX29wdF9nZXQoYnJtY3R4LVx1MDAzZWJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkgfHxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzI1My1cdCAgICBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKGJybWN0eCkpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0zODY4PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9lcnJfY291bnQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzg3NC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6Mzg3NTpcdGlmICghYnJfb3B0X2dldChiciwgQlJPUFRfTVVMVElDQVNUX1NUQVRTX0VOQUJMRUQpKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zODc2LVx0XHRyZXR1cm47XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MDU3PWludCBicl9tdWx0aWNhc3RfcmN2KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICoqYnJtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDA2Ni1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDA2NzpcdGlmICghYnJfb3B0X2dldCgoKmJybWN0eCktXHUwMDNlYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDA2OC1cdFx0cmV0dXJuIDA7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQwNjktXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQwNzA6XHRpZiAoYnJfb3B0X2dldCgoKmJybWN0eCktXHUwMDNlYnIsIEJST1BUX01DQVNUX1ZMQU5fU05PT1BJTkdfRU5BQkxFRCkgXHUwMDI2XHUwMDI2IHZsYW4pIHtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDA3MS1cdFx0Y29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqbWFzdGVydjtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQyMDY9dm9pZCBicl9tdWx0aWNhc3RfaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjExLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MjEyOlx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQsIHRydWUpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MjEzOlx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfSEFTX0lQVjZfQUREUiwgdHJ1ZSk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQyMTQtXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MjgzPXN0YXRpYyB2b2lkIF9fYnJfbXVsdGljYXN0X29wZW5fcXVlcnkoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDI4Ny1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDI4ODpcdGlmICghYnJfb3B0X2dldChiciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Mjg5LVx0XHRyZXR1cm47XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MzAyPXZvaWQgYnJfbXVsdGljYXN0X29wZW4oc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDMwNS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDMwNjpcdGlmIChicl9vcHRfZ2V0KGJyLCBCUk9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HX0VOQUJMRUQpKSB7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzMDctXHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDM0MD12b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTggc3RhdGUpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzUyLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzUzOlx0aWYgKCFicl9vcHRfZ2V0KGJyLCBCUk9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HX0VOQUJMRUQpKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzU0LVx0XHRyZXR1cm47XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NDMxPWludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQzNy1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQzODpcdGlmIChicl9vcHRfZ2V0KGJyLCBCUk9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HX0VOQUJMRUQpID09IG9uKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDM5LVx0XHRyZXR1cm4gMDtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQ0MC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQ0MTpcdGlmIChvbiBcdTAwMjZcdTAwMjYgIWJyX29wdF9nZXQoYnIsIEJST1BUX1ZMQU5fRU5BQkxFRCkpIHtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQ0Mi1cdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7Q2Fubm90IGVuYWJsZSBtdWx0aWNhc3QgdmxhbiBzbm9vcGluZyB3aXRoIHZsYW4gZmlsdGVyaW5nIGRpc2FibGVkXCYjMzQ7KTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0NDktXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ0NTA6XHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HX0VOQUJMRUQsIG9uKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQ1MS1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ0ODY9dm9pZCBicl9tdWx0aWNhc3Rfc3RvcChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDg5LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDkwOlx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01DQVNUX1ZMQU5fU05PT1BJTkdfRU5BQkxFRCkpIHtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQ5MS1cdFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NzA4PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9lbmFibGVfYWxsX3BvcnRzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ3MTEtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ3MTI6XHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDcxMy1cdFx0cmV0dXJuO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDcxOT1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9hbGxfcG9ydHMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDcyMi1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDcyMzpcdGlmIChicl9vcHRfZ2V0KGJyLCBCUk9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HX0VOQUJMRUQpKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzI0LVx0XHRyZXR1cm47XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NzMwPWludCBicl9tdWx0aWNhc3RfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzM2LVx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZW11bHRpY2FzdF9sb2NrKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDczNzpcdGlmICghIWJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSA9PSAhIXZhbClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDczOC1cdFx0Z290byB1bmxvY2s7XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzQ1LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NzQ2Olx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQsICEhdmFsKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDc0NzpcdGlmICghYnJfb3B0X2dldChiciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpKSB7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ3NDgtXHRcdGNoYW5nZV9zbm9vcGVycyA9IHRydWU7XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Nzc2LVx0aWYgKGNoYW5nZV9zbm9vcGVycykge1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0Nzc3Olx0XHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Nzc4LVx0XHRcdGJyX211bHRpY2FzdF9qb2luX3Nub29wZXJzKGJyKTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ3ODY9Ym9vbCBicl9tdWx0aWNhc3RfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDc4OS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDc5MDpcdHJldHVybiAhIWJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDc5MS19XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz01MjA3PXZvaWQgYnJfbXVsdGljYXN0X2NvdW50KHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTUyMTMtXHQvKiBpZiBtdWx0aWNhc3RfZGlzYWJsZWQgaXMgdHJ1ZSB0aGVuIGlnbXAgdHlwZSBjYW4mIzM5O3QgYmUgc2V0ICovXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjUyMTQ6XHRpZiAoIXR5cGUgfHwgIWJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9TVEFUU19FTkFCTEVEKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTIxNS1cdFx0cmV0dXJuO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9NDgzPXN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfcHJlX3JvdXRpbmcodm9pZCAqcHJpdixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTUwNC1cdFx0aWYgKCFicm5ldC1cdTAwM2VjYWxsX2lwNnRhYmxlcyBcdTAwMjZcdTAwMjZcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NTA1Olx0XHQgICAgIWJyX29wdF9nZXQoYnIsIEJST1BUX05GX0NBTExfSVA2VEFCTEVTKSlcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTA2LVx0XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MTUtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjUxNjpcdGlmICghYnJuZXQtXHUwMDNlY2FsbF9pcHRhYmxlcyBcdTAwMjZcdTAwMjYgIWJyX29wdF9nZXQoYnIsIEJST1BUX05GX0NBTExfSVBUQUJMRVMpKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MTctXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz03Mjg9c3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9mb3J3YXJkX2FycChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzQxLVx0YnJuZXQgPSBuZXRfZ2VuZXJpYyhzdGF0ZS1cdTAwM2VuZXQsIGJybmZfbmV0X2lkKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NzQyOlx0aWYgKCFicm5ldC1cdTAwM2VjYWxsX2FycHRhYmxlcyBcdTAwMjZcdTAwMjYgIWJyX29wdF9nZXQoYnIsIEJST1BUX05GX0NBTExfQVJQVEFCTEVTKSlcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzQzLVx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTQ1OD1zdGF0aWMgaW50IGJyX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNTk0LVx0aWYgKChmaWx0ZXJfbWFzayBcdTAwMjYgUlRFWFRfRklMVEVSX01TVCkgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzo1OTU6XHQgICAgYnJfb3B0X2dldChiciwgQlJPUFRfTVNUX0VOQUJMRUQpIFx1MDAyNlx1MDAyNiBwb3J0KSB7XG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy01OTYtXHRcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnID0gbmJwX3ZsYW5fZ3JvdXAocG9ydCk7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9MTI5NT1zdGF0aWMgaW50IGJyX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmJyZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE0MjQtXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJyLVx1MDAzZWxvY2spO1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTQyNTpcdFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfR1JPVVBfQUREUl9TRVQsIHRydWUpO1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTQyNi1cdFx0YnJfcmVjYWxjdWxhdGVfZndkX21hc2soYnIpO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE0NTgtXHRcdHZhbCA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0JSX01DQVNUX1FVRVJZX1VTRV9JRkFERFJdKTtcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE0NTk6XHRcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01VTFRJQ0FTVF9RVUVSWV9VU0VfSUZBRERSLCAhIXZhbCk7XG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNDYwLVx0fVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE1MjktXHRcdG1jYXN0X3N0YXRzID0gbmxhX2dldF91OChkYXRhW0lGTEFfQlJfTUNBU1RfU1RBVFNfRU5BQkxFRF0pO1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTUzMDpcdFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTVVMVElDQVNUX1NUQVRTX0VOQUJMRUQsICEhbWNhc3Rfc3RhdHMpO1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTUzMS1cdH1cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNTU4LVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTU1OTpcdFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTkZfQ0FMTF9JUFRBQkxFUywgISF2YWwpO1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTU2MC1cdH1cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNTY0LVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTU2NTpcdFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTkZfQ0FMTF9JUDZUQUJMRVMsICEhdmFsKTtcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE1NjYtXHR9XG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTU3MC1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE1NzE6XHRcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX05GX0NBTExfQVJQVEFCTEVTLCAhIXZhbCk7XG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNTcyLVx0fVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTE2Nzg9c3RhdGljIGludCBicl9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmJyZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE3MzQtXHQgICAgbmxhX3B1dF91OChza2IsIElGTEFfQlJfVkxBTl9TVEFUU19FTkFCTEVELFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTczNTpcdFx0ICAgICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX1ZMQU5fU1RBVFNfRU5BQkxFRCkpIHx8XG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNzM2LVx0ICAgIG5sYV9wdXRfdTgoc2tiLCBJRkxBX0JSX1ZMQU5fU1RBVFNfUEVSX1BPUlQsXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxNzM3Olx0XHQgICAgICAgYnJfb3B0X2dldChiciwgQlJPUFRfVkxBTl9TVEFUU19QRVJfUE9SVCkpKVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTczOC1cdFx0cmV0dXJuIC1FTVNHU0laRTtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNzQzLVx0ICAgIG5sYV9wdXRfdTgoc2tiLCBJRkxBX0JSX01DQVNUX1NOT09QSU5HLFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTc0NDpcdFx0ICAgICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSkgfHxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE3NDUtXHQgICAgbmxhX3B1dF91OChza2IsIElGTEFfQlJfTUNBU1RfUVVFUllfVVNFX0lGQUREUixcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE3NDY6XHRcdCAgICAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfUVVFUllfVVNFX0lGQUREUikpIHx8XG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNzQ3LVx0ICAgIG5sYV9wdXRfdTgoc2tiLCBJRkxBX0JSX01DQVNUX1FVRVJJRVIsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTc0OS1cdCAgICBubGFfcHV0X3U4KHNrYiwgSUZMQV9CUl9NQ0FTVF9TVEFUU19FTkFCTEVELFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTc1MDpcdFx0ICAgICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9TVEFUU19FTkFCTEVEKSkgfHxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE3NTEtXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX0JSX01DQVNUX0hBU0hfRUxBU1RJQ0lUWSwgUkhUX0VMQVNUSUNJVFkpIHx8XG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTc5My1cdGlmIChubGFfcHV0X3U4KHNrYiwgSUZMQV9CUl9ORl9DQUxMX0lQVEFCTEVTLFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTc5NDpcdFx0ICAgICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX05GX0NBTExfSVBUQUJMRVMpID8gMSA6IDApIHx8XG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNzk1LVx0ICAgIG5sYV9wdXRfdTgoc2tiLCBJRkxBX0JSX05GX0NBTExfSVA2VEFCTEVTLFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTc5NjpcdFx0ICAgICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX05GX0NBTExfSVA2VEFCTEVTKSA/IDEgOiAwKSB8fFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTc5Ny1cdCAgICBubGFfcHV0X3U4KHNrYiwgSUZMQV9CUl9ORl9DQUxMX0FSUFRBQkxFUyxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE3OTg6XHRcdCAgICAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9ORl9DQUxMX0FSUFRBQkxFUykgPyAxIDogMCkpXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNzk5LVx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTc1Nz1zdGF0aWMgaW5saW5lIGludCBicl9hZnNwZWNfY21kX3RvX3J0bShpbnQgY21kKVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTc2OC1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjc2OTpzdGF0aWMgaW5saW5lIGludCBicl9vcHRfZ2V0KGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTc3MC1cdFx0XHQgICAgIGVudW0gbmV0X2JyaWRnZV9vcHRzIG9wdClcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD03ODE9dm9pZCBicl9ib29sb3B0X211bHRpX2dldChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC03ODItXHRcdFx0ICBzdHJ1Y3QgYnJfYm9vbG9wdF9tdWx0aSAqYm0pO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NzgzOnZvaWQgYnJfb3B0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGVudW0gbmV0X2JyaWRnZV9vcHRzIG9wdCwgYm9vbCBvbik7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC03ODQtXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTE1OD1fX2JyX211bHRpY2FzdF9xdWVyaWVyX2V4aXN0cyhzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTExNjQtXHRpZiAoYnJtY3R4LVx1MDAzZW11bHRpY2FzdF9xdWVyaWVyKSB7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMTY1Olx0XHRpZiAoaXNfaXB2NiBcdTAwMjZcdTAwMjYgIWJyX29wdF9nZXQoYnJtY3R4LVx1MDAzZWJyLCBCUk9QVF9IQVNfSVBWNl9BRERSKSlcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTExNjYtXHRcdFx0b3duX3F1ZXJpZXJfZW5hYmxlZCA9IGZhbHNlO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTEyNjM9YnJfbXVsdGljYXN0X2N0eF92bGFuX2dsb2JhbF9kaXNhYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4KVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEyNjUtXHRyZXR1cm4gYnJfbXVsdGljYXN0X2N0eF9pc192bGFuKGJybWN0eCkgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMjY2Olx0ICAgICAgICghYnJfb3B0X2dldChicm1jdHgtXHUwMDNlYnIsIEJST1BUX01DQVNUX1ZMQU5fU05PT1BJTkdfRU5BQkxFRCkgfHxcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMjoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgwMAoJCQkJCQkJb3V0cHV0OiAxODIKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogQSBDbGVhbiBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIHRoaXMgb3ZlciwgYW5kIGl0JiMzOTtzIHByZXR0eSBjbGVhci1jdXQuIFRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IHRpZHlpbmcgdXAgdGhlIGJyaWRnZSYjMzk7cyBwYWNrZXQgaW5wdXQgcGF0aC4gVGhlIGdpc3QgaXMgcmVtb3ZpbmcgdGhlIG9sZCBkeW5hbWljIGZyYW1lIGhhbmRsZXIgc3lzdGVtIChgYnJfZnJhbWVfdHlwZWAgYW5kIHRoZSBsaW5rZWQgbGlzdCkgYW5kIHJlcGxhY2luZyBpdCB3aXRoIGRpcmVjdCwgc3RhdGljIGNoZWNrcyBhZ2FpbnN0IHRoZSBicmlkZ2UmIzM5O3MgYG9wdGlvbnNgIGJpdG1hc2suIFdlJiMzOTtyZSB0YWxraW5nIGBCUk9QVF9DRk1fRU5BQkxFRGAgYW5kIGBCUk9QVF9NUlBfRU5BQkxFRGAgZmxhZ3MsIG5vdGhpbmcgZmFuY3kuCgpGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGlzIGlzIGEgcHVyZSByZWZhY3RvcmluZyBhbmQgb3B0aW1pemF0aW9uIGVmZm9ydC4gVGhlcmUgYXJlbiYjMzk7dCBhbnkgbmV3IHN0cnVjdHMgYmVpbmcgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2QgdGhpbmcuIEkgY2FuJiMzOTt0IHNwb3QgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGJyYW5jaGVzLCBhbmQgZGVmaW5pdGVseSBubyBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBHaXZlbiB0aGF0LCBLTVNBTiBpcyBjb21wbGV0ZWx5IHVubmVjZXNzYXJ5IGhlcmUuIFdlIGNhbiBzYWZlbHkgc2V0IGBOZWVkc0tNU0FOYCB0byBmYWxzZS4gCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IHRoYXQgYHNldC1yZXN1bHRzYCBjYWxsIHByZXBwZWQgYW5kIG1vdmUgb24gdG8gdGhlIG5leHQgb25lLiBUaGlzIHdhcyBhIHByZXR0eSBzaW1wbGUgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBicmlkZ2Ugc3Vic3lzdGVtJiMzOTtzIENGTSAoQ29ubmVjdGl2aXR5IEZhdWx0IE1hbmFnZW1lbnQpIGFuZCBNUlAgKE1lZGlhIFJlZHVuZGFuY3kgUHJvdG9jb2wpIGZyYW1lIGRpc3BhdGNoIG1lY2hhbmlzbSBieSByZXBsYWNpbmcgdGhlIGR5bmFtaWMgZnJhbWUtdHlwZSBsaW5rZWQgbGlzdCAoYGZyYW1lX3R5cGVfbGlzdGApIHdpdGggYml0IGZsYWdzIGluIHRoZSBleGlzdGluZyBicmlkZ2Ugb3B0aW9ucyBiaXRtYXNrIChgQlJPUFRfQ0ZNX0VOQUJMRURgIGFuZCBgQlJPUFRfTVJQX0VOQUJMRURgKS4gXG5cbk5vIG5ldyBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgZGF0YSBidWZmZXJzIGFyZSBjcmVhdGVkIG9yIGV4cG9ydGVkIHRvIHVzZXIgc3BhY2UuIFRoZSBsb2dpYyByZWxpZXMgb24gYWxyZWFkeS1hbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGJyaWRnZSBzdHJ1Y3R1cmVzIChgc3RydWN0IG5ldF9icmlkZ2VgKSwgdG9nZ2xpbmcgYW5kIGNoZWNraW5nIGV4aXN0aW5nIGJpdCBmbGFncy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBjb25maWd1cmF0aW9ucyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcmVncmVzc2lvbi4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBicmlkZ2Ugc3Vic3lzdGVtJiMzOTtzIENGTSAoQ29ubmVjdGl2aXR5IEZhdWx0IE1hbmFnZW1lbnQpIGFuZCBNUlAgKE1lZGlhIFJlZHVuZGFuY3kgUHJvdG9jb2wpIGZyYW1lIGRpc3BhdGNoIG1lY2hhbmlzbSBieSByZXBsYWNpbmcgdGhlIGR5bmFtaWMgZnJhbWUtdHlwZSBsaW5rZWQgbGlzdCAoYGZyYW1lX3R5cGVfbGlzdGApIHdpdGggYml0IGZsYWdzIGluIHRoZSBleGlzdGluZyBicmlkZ2Ugb3B0aW9ucyBiaXRtYXNrIChgQlJPUFRfQ0ZNX0VOQUJMRURgIGFuZCBgQlJPUFRfTVJQX0VOQUJMRURgKS4gXG5cbk5vIG5ldyBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgZGF0YSBidWZmZXJzIGFyZSBjcmVhdGVkIG9yIGV4cG9ydGVkIHRvIHVzZXIgc3BhY2UuIFRoZSBsb2dpYyByZWxpZXMgb24gYWxyZWFkeS1hbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGJyaWRnZSBzdHJ1Y3R1cmVzIChgc3RydWN0IG5ldF9icmlkZ2VgKSwgdG9nZ2xpbmcgYW5kIGNoZWNraW5nIGV4aXN0aW5nIGJpdCBmbGFncy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBjb25maWd1cmF0aW9ucyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcmVncmVzc2lvbi4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjoxNzoyNC4zMTcxOTI5MjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODkzODk5NDU4NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJCUklER0VfQ0ZNXCIsXG4gICAgXCJCUklER0VfTVJQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJfY2ZtX2ZyYW1lX3J4XCIsXG4gICAgXCJicl9tcnBfcHJvY2Vzc1wiLFxuICAgIFwiYnJfY2ZtX21lcF9jcmVhdGVcIixcbiAgICBcImJyX2NmbV9tZXBfZGVsZXRlXCIsXG4gICAgXCJicl9tcnBfYWRkXCIsXG4gICAgXCJicl9tcnBfZGVsXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGJyaWRnZSBzdWJzeXN0ZW0ncyBDRk0gKENvbm5lY3Rpdml0eSBGYXVsdCBNYW5hZ2VtZW50KSBhbmQgTVJQIChNZWRpYSBSZWR1bmRhbmN5IFByb3RvY29sKSBmcmFtZSBkaXNwYXRjaCBtZWNoYW5pc20gYnkgcmVwbGFjaW5nIHRoZSBkeW5hbWljIGZyYW1lLXR5cGUgbGlua2VkIGxpc3QgKGBmcmFtZV90eXBlX2xpc3RgKSB3aXRoIGJpdCBmbGFncyBpbiB0aGUgZXhpc3RpbmcgYnJpZGdlIG9wdGlvbnMgYml0bWFzayAoYEJST1BUX0NGTV9FTkFCTEVEYCBhbmQgYEJST1BUX01SUF9FTkFCTEVEYCkuIFxcblxcbk5vIG5ldyBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgZGF0YSBidWZmZXJzIGFyZSBjcmVhdGVkIG9yIGV4cG9ydGVkIHRvIHVzZXIgc3BhY2UuIFRoZSBsb2dpYyByZWxpZXMgb24gYWxyZWFkeS1hbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGJyaWRnZSBzdHJ1Y3R1cmVzIChgc3RydWN0IG5ldF9icmlkZ2VgKSwgdG9nZ2xpbmcgYW5kIGNoZWNraW5nIGV4aXN0aW5nIGJpdCBmbGFncy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBjb25maWd1cmF0aW9ucyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcmVncmVzc2lvbi4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYnJpZGdlIGZyYW1lIGhhbmRsaW5nIGxvZ2ljIGZvciBDRk0gKDgwMi4xUSBDRk0pIGFuZCBNUlAgcHJvdG9jb2xzIGJ5IHJlcGxhY2luZyB0aGUgZHluYW1pYyBmcmFtZV90eXBlX2xpc3Qgd2l0aCBicmlkZ2Ugb3B0aW9uIGZsYWdzIChCUk9QVF9DRk1fRU5BQkxFRCBhbmQgQlJPUFRfTVJQX0VOQUJMRUQpIGFuZCBkaXJlY3QgY2FsbHMgdG8gYnJfY2ZtX2ZyYW1lX3J4IGFuZCBicl9tcnBfcHJvY2Vzcy4gSXQgbW9kaWZpZXMgYm90aCB0aGUgZnJhbWUgcmVjZWl2ZSBwYXRoIGFuZCB0aGUgbmV0bGluay10cmlnZ2VyZWQgaW5zdGFuY2UgY3JlYXRpb24vZGVsZXRpb24gcGF0aHMuIFRoaXMgYWZmZWN0cyBjb3JlIGJyaWRnZSBuZXR3b3JraW5nIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbCBlbnZpcm9ubWVudHMgd2l0aG91dCBzcGVjaWFsaXplZCBoYXJkd2FyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MTc6MjQuMzE3MTk4NzEzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTE1MzAwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmMjgyYTYxODI5YTZiZTdmNTFjYTllYTc2ZDBjNjg3MzFjZTJkMzdiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDEyOjE3OjIzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfY2ZtLmMgYi9uZXQvYnJpZGdlL2JyX2NmbS5jXFxuaW5kZXggZGVhNTZmZmZhMWMxOS4uOWRjYzk3ZDYzYTZmYyAxMDA2NDRcXG4tLS0gYS9uZXQvYnJpZGdlL2JyX2NmbS5jXFxuKysrIGIvbmV0L2JyaWRnZS9icl9jZm0uY1xcbkBAIC0zNjcsNyArMzY3LDcgQEAgc3RhdGljIHUzMiBjY21fdGx2X2V4dHJhY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluZGV4LFxcbiB9XFxuIFxcbiAvKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgKi9cXG4tc3RhdGljIGludCBicl9jZm1fZnJhbWVfcngoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4raW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdHUzMiBtZGxldmVsLCBpbnRlcnZhbCwgc2l6ZSwgaW5kZXgsIG1heDtcXG4gXFx0Y29uc3Qgc3RydWN0IGJyX2NmbV9jb21tb25faGRyICpoZHI7XFxuQEAgLTQ4OSwxMSArNDg5LDYgQEAgc3RhdGljIGludCBicl9jZm1fZnJhbWVfcngoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0cmV0dXJuIDE7XFxuIH1cXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSBjZm1fZnJhbWVfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xcbi1cXHQudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX0NGTSksXFxuLVxcdC5mcmFtZV9oYW5kbGVyID0gYnJfY2ZtX2ZyYW1lX3J4LFxcbi19O1xcbi1cXG4gaW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4gXFx0XFx0ICAgICAgY29uc3QgdTMyIGluc3RhbmNlLFxcbiBcXHRcXHQgICAgICBzdHJ1Y3QgYnJfY2ZtX21lcF9jcmVhdGUgKmNvbnN0IGNyZWF0ZSxcXG5AQCAtNTU5LDcgKzU1NCw3IEBAIGludCBicl9jZm1fbWVwX2NyZWF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuIFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZtZXAtXFx1MDAzZWNjbV90eF9kd29yaywgY2NtX3R4X3dvcmtfZXhwaXJlZCk7XFxuIFxcbiBcXHRpZiAoaGxpc3RfZW1wdHkoXFx1MDAyNmJyLVxcdTAwM2VtZXBfbGlzdCkpXFxuLVxcdFxcdGJyX2FkZF9mcmFtZShiciwgXFx1MDAyNmNmbV9mcmFtZV90eXBlKTtcXG4rXFx0XFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfQ0ZNX0VOQUJMRUQsIHRydWUpO1xcbiBcXG4gXFx0aGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZtZXAtXFx1MDAzZWhlYWQsIFxcdTAwMjZici1cXHUwMDNlbWVwX2xpc3QpO1xcbiBcXG5AQCAtNTg4LDcgKzU4Myw3IEBAIHN0YXRpYyB2b2lkIG1lcF9kZWxldGVfaW1wbGVtZW50YXRpb24oc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbiBcXHRrZnJlZV9yY3UobWVwLCByY3UpO1xcbiBcXG4gXFx0aWYgKGhsaXN0X2VtcHR5KFxcdTAwMjZici1cXHUwMDNlbWVwX2xpc3QpKVxcbi1cXHRcXHRicl9kZWxfZnJhbWUoYnIsIFxcdTAwMjZjZm1fZnJhbWVfdHlwZSk7XFxuK1xcdFxcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX0NGTV9FTkFCTEVELCBmYWxzZSk7XFxuIH1cXG4gXFxuIGludCBicl9jZm1fbWVwX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMgYi9uZXQvYnJpZGdlL2JyX2RldmljZS5jXFxuaW5kZXggZmY1NWRhYjczNjMyNi4uZTAxYzQ0YTkwZDg0YiAxMDA2NDRcXG4tLS0gYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jXFxuKysrIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xcbkBAIC01MDMsNyArNTAzLDYgQEAgdm9pZCBicl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmJyLVxcdTAwM2Vsb2NrKTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmJyLVxcdTAwM2Vwb3J0X2xpc3QpO1xcbiBcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNmJyLVxcdTAwM2VmZGJfbGlzdCk7XFxuLVxcdElOSVRfSExJU1RfSEVBRChcXHUwMDI2YnItXFx1MDAzZWZyYW1lX3R5cGVfbGlzdCk7XFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTVJQKVxcbiBcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNmJyLVxcdTAwM2VtcnBfbGlzdCk7XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmNcXG5pbmRleCBkODdhNWY5ZmE5MmI3Li43Mjg5MmU1YjQwNDM5IDEwMDY0NFxcbi0tLSBhL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xcbisrKyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xcbkBAIC0zMTcsMjAgKzMxNywzMyBAQCBzdGF0aWMgaW50IG5mX2hvb2tfYnJpZGdlX3ByZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuIFxcdHJldHVybiBSWF9IQU5ETEVSX0NPTlNVTUVEO1xcbiB9XFxuIFxcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX0NGTSkgfHwgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX01SUClcXG4rLyogQ0ZNL01SUCBhcmUgdW5jb21tb247IHRlc3QgYm90aCBlbmFibGUgYml0cyB0b2dldGhlciBmaXJzdC4gKi9cXG4rI2RlZmluZSBCUl9DRk1fTVJQX09QVFMgXFxcXFxcbitcXHQoKElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9DRk0pID8gQklUKEJST1BUX0NGTV9FTkFCTEVEKSA6IDBVTCkgfCBcXFxcXFxuK1xcdCAoSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX01SUCkgPyBCSVQoQlJPUFRfTVJQX0VOQUJMRUQpIDogMFVMKSlcXG4rXFxuIC8qIFJldHVybiAwIGlmIHRoZSBmcmFtZSB3YXMgbm90IHByb2Nlc3NlZCBvdGhlcndpc2UgMVxcbiAgKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2tcXG4gICovXFxuIHN0YXRpYyBpbnQgYnJfcHJvY2Vzc19mcmFtZV90eXBlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuLVxcdHN0cnVjdCBicl9mcmFtZV90eXBlICp0bXA7XFxuLVxcbi1cXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodG1wLCBcXHUwMDI2cC1cXHUwMDNlYnItXFx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdClcXG4tXFx0XFx0aWYgKHVubGlrZWx5KHRtcC1cXHUwMDNldHlwZSA9PSBza2ItXFx1MDAzZXByb3RvY29sKSlcXG4tXFx0XFx0XFx0cmV0dXJuIHRtcC1cXHUwMDNlZnJhbWVfaGFuZGxlcihwLCBza2IpO1xcbitcXHRzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBwLVxcdTAwM2VicjtcXG4gXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfQ0ZNKVxcbitcXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9DRk0pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9DRk1fRU5BQkxFRCkpXFxuK1xcdFxcdHJldHVybiBicl9jZm1fZnJhbWVfcngocCwgc2tiKTtcXG4rI2VuZGlmXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTVJQKVxcbitcXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9NUlApIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9NUlBfRU5BQkxFRCkpXFxuK1xcdFxcdHJldHVybiBicl9tcnBfcHJvY2VzcyhwLCBza2IpO1xcbisjZW5kaWZcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4rI2VuZGlmXFxuIFxcbiAvKlxcbiAgKiBSZXR1cm4gTlVMTCBpZiBza2IgaXMgaGFuZGxlZFxcbkBAIC00MjUsOCArNDM4LDExIEBAIHN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGJyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHVubGlrZWx5KGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShwLCBza2IpKSlcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9DRk0pIHx8IElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApXFxuK1xcdGlmICh1bmxpa2VseSgocC1cXHUwMDNlYnItXFx1MDAzZW9wdGlvbnMgXFx1MDAyNiBCUl9DRk1fTVJQX09QVFMpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAgYnJfcHJvY2Vzc19mcmFtZV90eXBlKHAsIHNrYikpKVxcbiBcXHRcXHRyZXR1cm4gUlhfSEFORExFUl9QQVNTO1xcbisjZW5kaWZcXG4gXFxuIGZvcndhcmQ6XFxuIFxcdGlmIChicl9tc3RfaXNfZW5hYmxlZChwKSlcXG5AQCAtNDY3LDE5ICs0ODMsMyBAQCByeF9oYW5kbGVyX2Z1bmNfdCAqYnJfZ2V0X3J4X2hhbmRsZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIFxcdHJldHVybiBicl9oYW5kbGVfZnJhbWU7XFxuIH1cXG4tXFxuLXZvaWQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KVxcbi17XFxuLVxcdGhsaXN0X2FkZF9oZWFkX3JjdShcXHUwMDI2ZnQtXFx1MDAzZWxpc3QsIFxcdTAwMjZici1cXHUwMDNlZnJhbWVfdHlwZV9saXN0KTtcXG4tfVxcbi1cXG4tdm9pZCBicl9kZWxfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQpXFxuLXtcXG4tXFx0c3RydWN0IGJyX2ZyYW1lX3R5cGUgKnRtcDtcXG4tXFxuLVxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgXFx1MDAyNmJyLVxcdTAwM2VmcmFtZV90eXBlX2xpc3QsIGxpc3QpXFxuLVxcdFxcdGlmIChmdCA9PSB0bXApIHtcXG4tXFx0XFx0XFx0aGxpc3RfZGVsX3JjdShcXHUwMDI2ZnQtXFx1MDAzZWxpc3QpO1xcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdH1cXG4tfVxcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX21ycC5jIGIvbmV0L2JyaWRnZS9icl9tcnAuY1xcbmluZGV4IGVmMTZkMDcwMzkyNDEuLmRjZTZlZmE5NmM0YzYgMTAwNjQ0XFxuLS0tIGEvbmV0L2JyaWRnZS9icl9tcnAuY1xcbisrKyBiL25ldC9icmlkZ2UvYnJfbXJwLmNcXG5AQCAtNiwxMyArNiw2IEBAXFxuIHN0YXRpYyBjb25zdCB1OCBtcnBfdGVzdF9kbWFjW0VUSF9BTEVOXSA9IHsgMHgxLCAweDE1LCAweDRlLCAweDAsIDB4MCwgMHgxIH07XFxuIHN0YXRpYyBjb25zdCB1OCBtcnBfaW5fdGVzdF9kbWFjW0VUSF9BTEVOXSA9IHsgMHgxLCAweDE1LCAweDRlLCAweDAsIDB4MCwgMHgzIH07XFxuIFxcbi1zdGF0aWMgaW50IGJyX21ycF9wcm9jZXNzKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBza19idWZmICpza2IpO1xcbi1cXG4tc3RhdGljIHN0cnVjdCBicl9mcmFtZV90eXBlIG1ycF9mcmFtZV90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XFxuLVxcdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfTVJQKSxcXG4tXFx0LmZyYW1lX2hhbmRsZXIgPSBicl9tcnBfcHJvY2VzcyxcXG4tfTtcXG4tXFxuIHN0YXRpYyBib29sIGJyX21ycF9pc19yaW5nX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcF9wb3J0LFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpzX3BvcnQsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxuQEAgLTQ4Niw3ICs0NzksNyBAQCBzdGF0aWMgdm9pZCBicl9tcnBfZGVsX2ltcGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnApXFxuIFxcdGtmcmVlX3JjdShtcnAsIHJjdSk7XFxuIFxcbiBcXHRpZiAoaGxpc3RfZW1wdHkoXFx1MDAyNmJyLVxcdTAwM2VtcnBfbGlzdCkpXFxuLVxcdFxcdGJyX2RlbF9mcmFtZShiciwgXFx1MDAyNm1ycF9mcmFtZV90eXBlKTtcXG4rXFx0XFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTVJQX0VOQUJMRUQsIGZhbHNlKTtcXG4gfVxcbiBcXG4gLyogQWRkcyBhIG5ldyBNUlAgaW5zdGFuY2UuXFxuQEAgLTUzNiw3ICs1MjksNyBAQCBpbnQgYnJfbXJwX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnBfaW5zdGFuY2UgKmluc3RhbmNlKVxcbiBcXHRyY3VfYXNzaWduX3BvaW50ZXIobXJwLVxcdTAwM2VzX3BvcnQsIHApO1xcbiBcXG4gXFx0aWYgKGhsaXN0X2VtcHR5KFxcdTAwMjZici1cXHUwMDNlbXJwX2xpc3QpKVxcbi1cXHRcXHRicl9hZGRfZnJhbWUoYnIsIFxcdTAwMjZtcnBfZnJhbWVfdHlwZSk7XFxuK1xcdFxcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01SUF9FTkFCTEVELCB0cnVlKTtcXG4gXFxuIFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZtcnAtXFx1MDAzZXRlc3Rfd29yaywgYnJfbXJwX3Rlc3Rfd29ya19leHBpcmVkKTtcXG4gXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNm1ycC1cXHUwMDNlaW5fdGVzdF93b3JrLCBicl9tcnBfaW5fdGVzdF93b3JrX2V4cGlyZWQpO1xcbkBAIC0xMjQxLDcgKzEyMzQsNyBAQCBzdGF0aWMgaW50IGJyX21ycF9yY3Yoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4gICogbm9ybWFsIGZvcndhcmRpbmcuXFxuICAqIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9ja1xcbiAgKi9cXG4tc3RhdGljIGludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbitpbnQgYnJfbXJwX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHQvKiBJZiB0aGVyZSBpcyBubyBNUlAgaW5zdGFuY2UgZG8gbm9ybWFsIGZvcndhcmRpbmcgKi9cXG4gXFx0aWYgKGxpa2VseSghdGVzdF9iaXQoQlJfTVJQX0FXQVJFX0JJVCwgXFx1MDAyNnAtXFx1MDAzZWZsYWdzKSkpXFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcXG5pbmRleCBkMzM3YjFjZmI5ODBkLi5hZmU3YzBiNGY4ZmE3IDEwMDY0NFxcbi0tLSBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXFxuKysrIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcXG5AQCAtNDk1LDEyICs0OTUsMTMgQEAgZW51bSBuZXRfYnJpZGdlX29wdHMge1xcbiBcXHRCUk9QVF9NU1RfRU5BQkxFRCxcXG4gXFx0QlJPUFRfTURCX09GRkxPQURfRkFJTF9OT1RJRklDQVRJT04sXFxuIFxcdEJST1BUX0ZEQl9MT0NBTF9WTEFOXzAsXFxuK1xcdEJST1BUX0NGTV9FTkFCTEVELFxcbitcXHRCUk9QVF9NUlBfRU5BQkxFRCxcXG4gfTtcXG4gXFxuIHN0cnVjdCBuZXRfYnJpZGdlIHtcXG4gXFx0c3BpbmxvY2tfdFxcdFxcdFxcdGxvY2s7XFxuIFxcdHNwaW5sb2NrX3RcXHRcXHRcXHRoYXNoX2xvY2s7XFxuLVxcdHN0cnVjdCBobGlzdF9oZWFkXFx0XFx0ZnJhbWVfdHlwZV9saXN0O1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZVxcdFxcdCpkZXY7XFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRcXHRcXHRvcHRpb25zO1xcbiBcXHQvKiBUaGVzZSBmaWVsZHMgYXJlIGFjY2Vzc2VkIG9uIGVhY2ggcGFja2V0ICovXFxuQEAgLTkzMiwxNiArOTMzLDYgQEAgaW50IG5icF9iYWNrdXBfY2hhbmdlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBuZXRfZGV2aWNlICpiYWNrdXBfZGV2KTtcXG4gaW50IGJyX2hhbmRsZV9mcmFtZV9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbiByeF9oYW5kbGVyX2Z1bmNfdCAqYnJfZ2V0X3J4X2hhbmRsZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuIFxcbi1zdHJ1Y3QgYnJfZnJhbWVfdHlwZSB7XFxuLVxcdF9fYmUxNlxcdFxcdFxcdHR5cGU7XFxuLVxcdGludFxcdFxcdFxcdCgqZnJhbWVfaGFuZGxlcikoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpO1xcbi1cXHRzdHJ1Y3QgaGxpc3Rfbm9kZVxcdGxpc3Q7XFxuLX07XFxuLVxcbi12b2lkIGJyX2FkZF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdCk7XFxuLXZvaWQgYnJfZGVsX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KTtcXG4tXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBicl9yeF9oYW5kbGVyX2NoZWNrX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuIFxcdHJldHVybiByY3VfZGVyZWZlcmVuY2UoZGV2LVxcdTAwM2VyeF9oYW5kbGVyKSA9PSBicl9nZXRfcnhfaGFuZGxlcihkZXYpO1xcbkBAIC0yMDgwLDYgKzIwNzEsNyBAQCBpbnQgYnJfbXJwX3BhcnNlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4gYm9vbCBicl9tcnBfZW5hYmxlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xcbiB2b2lkIGJyX21ycF9wb3J0X2RlbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApO1xcbiBpbnQgYnJfbXJwX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xcbitpbnQgYnJfbXJwX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgaW50IGJyX21ycF9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuIFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICphdHRyLCBpbnQgY21kLFxcbkBAIC0yMTExLDYgKzIxMDMsNyBAQCBpbnQgYnJfY2ZtX3BhcnNlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4gXFx0XFx0IHN0cnVjdCBubGF0dHIgKmF0dHIsIGludCBjbWQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuIGJvb2wgYnJfY2ZtX2NyZWF0ZWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcXG4gdm9pZCBicl9jZm1fcG9ydF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKTtcXG4raW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gaW50IGJyX2NmbV9jb25maWdfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfYnJpZGdlICpicik7XFxuIGludCBicl9jZm1fc3RhdHVzX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjoxNzoyNC43MDk0MTAyODZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEzMDAyODU4NzA2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIixcbiAgICBcIkJSSURHRV9DRk1cIixcbiAgICBcIkJSSURHRV9NUlBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9jZm1fZnJhbWVfcnhcIixcbiAgICBcImJyX21ycF9wcm9jZXNzXCIsXG4gICAgXCJicl9jZm1fbWVwX2NyZWF0ZVwiLFxuICAgIFwiYnJfY2ZtX21lcF9kZWxldGVcIixcbiAgICBcImJyX21ycF9hZGRcIixcbiAgICBcImJyX21ycF9kZWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGJyaWRnZSBmcmFtZSBoYW5kbGluZyBsb2dpYyBmb3IgQ0ZNICg4MDIuMVEgQ0ZNKSBhbmQgTVJQIHByb3RvY29scyBieSByZXBsYWNpbmcgdGhlIGR5bmFtaWMgZnJhbWVfdHlwZV9saXN0IHdpdGggYnJpZGdlIG9wdGlvbiBmbGFncyAoQlJPUFRfQ0ZNX0VOQUJMRUQgYW5kIEJST1BUX01SUF9FTkFCTEVEKSBhbmQgZGlyZWN0IGNhbGxzIHRvIGJyX2NmbV9mcmFtZV9yeCBhbmQgYnJfbXJwX3Byb2Nlc3MuIEl0IG1vZGlmaWVzIGJvdGggdGhlIGZyYW1lIHJlY2VpdmUgcGF0aCBhbmQgdGhlIG5ldGxpbmstdHJpZ2dlcmVkIGluc3RhbmNlIGNyZWF0aW9uL2RlbGV0aW9uIHBhdGhzLiBUaGlzIGFmZmVjdHMgY29yZSBicmlkZ2UgbmV0d29ya2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWwgZW52aXJvbm1lbnRzIHdpdGhvdXQgc3BlY2lhbGl6ZWQgaGFyZHdhcmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYyODJhNjE4MjlhNmJlN2Y1MWNhOWVhNzZkMGM2ODczMWNlMmQzN2JcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMjoxNzoyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfY2ZtLmMgYi9uZXQvYnJpZGdlL2JyX2NmbS5jXG5pbmRleCBkZWE1NmZmZmExYzE5Li45ZGNjOTdkNjNhNmZjIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9jZm0uY1xuKysrIGIvbmV0L2JyaWRnZS9icl9jZm0uY1xuQEAgLTM2Nyw3ICszNjcsNyBAQCBzdGF0aWMgdTMyIGNjbV90bHZfZXh0cmFjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5kZXgsXG4gfVxuIFxuIC8qIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayAqL1xuLXN0YXRpYyBpbnQgYnJfY2ZtX2ZyYW1lX3J4KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHN0cnVjdCBza19idWZmICpza2IpXG4raW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHUzMiBtZGxldmVsLCBpbnRlcnZhbCwgc2l6ZSwgaW5kZXgsIG1heDtcbiBcdGNvbnN0IHN0cnVjdCBicl9jZm1fY29tbW9uX2hkciAqaGRyO1xuQEAgLTQ4OSwxMSArNDg5LDYgQEAgc3RhdGljIGludCBicl9jZm1fZnJhbWVfcngoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHJldHVybiAxO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IGJyX2ZyYW1lX3R5cGUgY2ZtX2ZyYW1lX3R5cGUgX19yZWFkX21vc3RseSA9IHtcbi1cdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfQ0ZNKSxcbi1cdC5mcmFtZV9oYW5kbGVyID0gYnJfY2ZtX2ZyYW1lX3J4LFxuLX07XG4tXG4gaW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiBcdFx0ICAgICAgY29uc3QgdTMyIGluc3RhbmNlLFxuIFx0XHQgICAgICBzdHJ1Y3QgYnJfY2ZtX21lcF9jcmVhdGUgKmNvbnN0IGNyZWF0ZSxcbkBAIC01NTksNyArNTU0LDcgQEAgaW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm1lcC1cdTAwM2VjY21fdHhfZHdvcmssIGNjbV90eF93b3JrX2V4cGlyZWQpO1xuIFxuIFx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1lcF9saXN0KSlcbi1cdFx0YnJfYWRkX2ZyYW1lKGJyLCBcdTAwMjZjZm1fZnJhbWVfdHlwZSk7XG4rXHRcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX0NGTV9FTkFCTEVELCB0cnVlKTtcbiBcbiBcdGhsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZtZXAtXHUwMDNlaGVhZCwgXHUwMDI2YnItXHUwMDNlbWVwX2xpc3QpO1xuIFxuQEAgLTU4OCw3ICs1ODMsNyBAQCBzdGF0aWMgdm9pZCBtZXBfZGVsZXRlX2ltcGxlbWVudGF0aW9uKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiBcdGtmcmVlX3JjdShtZXAsIHJjdSk7XG4gXG4gXHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2YnItXHUwMDNlbWVwX2xpc3QpKVxuLVx0XHRicl9kZWxfZnJhbWUoYnIsIFx1MDAyNmNmbV9mcmFtZV90eXBlKTtcbitcdFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfQ0ZNX0VOQUJMRUQsIGZhbHNlKTtcbiB9XG4gXG4gaW50IGJyX2NmbV9tZXBfZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuY1xuaW5kZXggZmY1NWRhYjczNjMyNi4uZTAxYzQ0YTkwZDg0YiAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfZGV2aWNlLmNcbisrKyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmNcbkBAIC01MDMsNyArNTAzLDYgQEAgdm9pZCBicl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmJyLVx1MDAzZWxvY2spO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2YnItXHUwMDNlcG9ydF9saXN0KTtcbiBcdElOSVRfSExJU1RfSEVBRChcdTAwMjZici1cdTAwM2VmZGJfbGlzdCk7XG4tXHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2YnItXHUwMDNlZnJhbWVfdHlwZV9saXN0KTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX01SUClcbiBcdElOSVRfSExJU1RfSEVBRChcdTAwMjZici1cdTAwM2VtcnBfbGlzdCk7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jXG5pbmRleCBkODdhNWY5ZmE5MmI3Li43Mjg5MmU1YjQwNDM5IDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmNcbkBAIC0zMTcsMjAgKzMxNywzMyBAQCBzdGF0aWMgaW50IG5mX2hvb2tfYnJpZGdlX3ByZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4gXHRyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDtcbiB9XG4gXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9DRk0pIHx8IElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApXG4rLyogQ0ZNL01SUCBhcmUgdW5jb21tb247IHRlc3QgYm90aCBlbmFibGUgYml0cyB0b2dldGhlciBmaXJzdC4gKi9cbisjZGVmaW5lIEJSX0NGTV9NUlBfT1BUUyBcXFxuK1x0KChJU19FTkFCTEVEKENPTkZJR19CUklER0VfQ0ZNKSA/IEJJVChCUk9QVF9DRk1fRU5BQkxFRCkgOiAwVUwpIHwgXFxcbitcdCAoSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX01SUCkgPyBCSVQoQlJPUFRfTVJQX0VOQUJMRUQpIDogMFVMKSlcbitcbiAvKiBSZXR1cm4gMCBpZiB0aGUgZnJhbWUgd2FzIG5vdCBwcm9jZXNzZWQgb3RoZXJ3aXNlIDFcbiAgKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2tcbiAgKi9cbiBzdGF0aWMgaW50IGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IGJyX2ZyYW1lX3R5cGUgKnRtcDtcbi1cbi1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0bXAsIFx1MDAyNnAtXHUwMDNlYnItXHUwMDNlZnJhbWVfdHlwZV9saXN0LCBsaXN0KVxuLVx0XHRpZiAodW5saWtlbHkodG1wLVx1MDAzZXR5cGUgPT0gc2tiLVx1MDAzZXByb3RvY29sKSlcbi1cdFx0XHRyZXR1cm4gdG1wLVx1MDAzZWZyYW1lX2hhbmRsZXIocCwgc2tiKTtcbitcdHN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHAtXHUwMDNlYnI7XG4gXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9DRk0pXG4rXHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0NGTSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgYnJfb3B0X2dldChiciwgQlJPUFRfQ0ZNX0VOQUJMRUQpKVxuK1x0XHRyZXR1cm4gYnJfY2ZtX2ZyYW1lX3J4KHAsIHNrYik7XG4rI2VuZGlmXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApXG4rXHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX01SUCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgYnJfb3B0X2dldChiciwgQlJPUFRfTVJQX0VOQUJMRUQpKVxuK1x0XHRyZXR1cm4gYnJfbXJwX3Byb2Nlc3MocCwgc2tiKTtcbisjZW5kaWZcbiBcdHJldHVybiAwO1xuIH1cbisjZW5kaWZcbiBcbiAvKlxuICAqIFJldHVybiBOVUxMIGlmIHNrYiBpcyBoYW5kbGVkXG5AQCAtNDI1LDggKzQzOCwxMSBAQCBzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBicl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAodW5saWtlbHkoYnJfcHJvY2Vzc19mcmFtZV90eXBlKHAsIHNrYikpKVxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfQ0ZNKSB8fCBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTVJQKVxuK1x0aWYgKHVubGlrZWx5KChwLVx1MDAzZWJyLVx1MDAzZW9wdGlvbnMgXHUwMDI2IEJSX0NGTV9NUlBfT1BUUykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAgYnJfcHJvY2Vzc19mcmFtZV90eXBlKHAsIHNrYikpKVxuIFx0XHRyZXR1cm4gUlhfSEFORExFUl9QQVNTO1xuKyNlbmRpZlxuIFxuIGZvcndhcmQ6XG4gXHRpZiAoYnJfbXN0X2lzX2VuYWJsZWQocCkpXG5AQCAtNDY3LDE5ICs0ODMsMyBAQCByeF9oYW5kbGVyX2Z1bmNfdCAqYnJfZ2V0X3J4X2hhbmRsZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBcdHJldHVybiBicl9oYW5kbGVfZnJhbWU7XG4gfVxuLVxuLXZvaWQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KVxuLXtcbi1cdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZmdC1cdTAwM2VsaXN0LCBcdTAwMjZici1cdTAwM2VmcmFtZV90eXBlX2xpc3QpO1xuLX1cbi1cbi12b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdClcbi17XG4tXHRzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqdG1wO1xuLVxuLVx0aGxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCBcdTAwMjZici1cdTAwM2VmcmFtZV90eXBlX2xpc3QsIGxpc3QpXG4tXHRcdGlmIChmdCA9PSB0bXApIHtcbi1cdFx0XHRobGlzdF9kZWxfcmN1KFx1MDAyNmZ0LVx1MDAzZWxpc3QpO1xuLVx0XHRcdHJldHVybjtcbi1cdFx0fVxuLX1cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX21ycC5jIGIvbmV0L2JyaWRnZS9icl9tcnAuY1xuaW5kZXggZWYxNmQwNzAzOTI0MS4uZGNlNmVmYTk2YzRjNiAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfbXJwLmNcbisrKyBiL25ldC9icmlkZ2UvYnJfbXJwLmNcbkBAIC02LDEzICs2LDYgQEBcbiBzdGF0aWMgY29uc3QgdTggbXJwX3Rlc3RfZG1hY1tFVEhfQUxFTl0gPSB7IDB4MSwgMHgxNSwgMHg0ZSwgMHgwLCAweDAsIDB4MSB9O1xuIHN0YXRpYyBjb25zdCB1OCBtcnBfaW5fdGVzdF9kbWFjW0VUSF9BTEVOXSA9IHsgMHgxLCAweDE1LCAweDRlLCAweDAsIDB4MCwgMHgzIH07XG4gXG4tc3RhdGljIGludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi1cbi1zdGF0aWMgc3RydWN0IGJyX2ZyYW1lX3R5cGUgbXJwX2ZyYW1lX3R5cGUgX19yZWFkX21vc3RseSA9IHtcbi1cdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfTVJQKSxcbi1cdC5mcmFtZV9oYW5kbGVyID0gYnJfbXJwX3Byb2Nlc3MsXG4tfTtcbi1cbiBzdGF0aWMgYm9vbCBicl9tcnBfaXNfcmluZ19wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBfcG9ydCxcbiBcdFx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnNfcG9ydCxcbiBcdFx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG5AQCAtNDg2LDcgKzQ3OSw3IEBAIHN0YXRpYyB2b2lkIGJyX21ycF9kZWxfaW1wbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnAgKm1ycClcbiBcdGtmcmVlX3JjdShtcnAsIHJjdSk7XG4gXG4gXHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2YnItXHUwMDNlbXJwX2xpc3QpKVxuLVx0XHRicl9kZWxfZnJhbWUoYnIsIFx1MDAyNm1ycF9mcmFtZV90eXBlKTtcbitcdFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTVJQX0VOQUJMRUQsIGZhbHNlKTtcbiB9XG4gXG4gLyogQWRkcyBhIG5ldyBNUlAgaW5zdGFuY2UuXG5AQCAtNTM2LDcgKzUyOSw3IEBAIGludCBicl9tcnBfYWRkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycF9pbnN0YW5jZSAqaW5zdGFuY2UpXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIobXJwLVx1MDAzZXNfcG9ydCwgcCk7XG4gXG4gXHRpZiAoaGxpc3RfZW1wdHkoXHUwMDI2YnItXHUwMDNlbXJwX2xpc3QpKVxuLVx0XHRicl9hZGRfZnJhbWUoYnIsIFx1MDAyNm1ycF9mcmFtZV90eXBlKTtcbitcdFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTVJQX0VOQUJMRUQsIHRydWUpO1xuIFxuIFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2bXJwLVx1MDAzZXRlc3Rfd29yaywgYnJfbXJwX3Rlc3Rfd29ya19leHBpcmVkKTtcbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm1ycC1cdTAwM2Vpbl90ZXN0X3dvcmssIGJyX21ycF9pbl90ZXN0X3dvcmtfZXhwaXJlZCk7XG5AQCAtMTI0MSw3ICsxMjM0LDcgQEAgc3RhdGljIGludCBicl9tcnBfcmN2KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4gICogbm9ybWFsIGZvcndhcmRpbmcuXG4gICogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrXG4gICovXG4tc3RhdGljIGludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK2ludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdC8qIElmIHRoZXJlIGlzIG5vIE1SUCBpbnN0YW5jZSBkbyBub3JtYWwgZm9yd2FyZGluZyAqL1xuIFx0aWYgKGxpa2VseSghdGVzdF9iaXQoQlJfTVJQX0FXQVJFX0JJVCwgXHUwMDI2cC1cdTAwM2VmbGFncykpKVxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcbmluZGV4IGQzMzdiMWNmYjk4MGQuLmFmZTdjMGI0ZjhmYTcgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFxuKysrIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcbkBAIC00OTUsMTIgKzQ5NSwxMyBAQCBlbnVtIG5ldF9icmlkZ2Vfb3B0cyB7XG4gXHRCUk9QVF9NU1RfRU5BQkxFRCxcbiBcdEJST1BUX01EQl9PRkZMT0FEX0ZBSUxfTk9USUZJQ0FUSU9OLFxuIFx0QlJPUFRfRkRCX0xPQ0FMX1ZMQU5fMCxcbitcdEJST1BUX0NGTV9FTkFCTEVELFxuK1x0QlJPUFRfTVJQX0VOQUJMRUQsXG4gfTtcbiBcbiBzdHJ1Y3QgbmV0X2JyaWRnZSB7XG4gXHRzcGlubG9ja190XHRcdFx0bG9jaztcbiBcdHNwaW5sb2NrX3RcdFx0XHRoYXNoX2xvY2s7XG4tXHRzdHJ1Y3QgaGxpc3RfaGVhZFx0XHRmcmFtZV90eXBlX2xpc3Q7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZVx0XHQqZGV2O1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdG9wdGlvbnM7XG4gXHQvKiBUaGVzZSBmaWVsZHMgYXJlIGFjY2Vzc2VkIG9uIGVhY2ggcGFja2V0ICovXG5AQCAtOTMyLDE2ICs5MzMsNiBAQCBpbnQgbmJwX2JhY2t1cF9jaGFuZ2Uoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IG5ldF9kZXZpY2UgKmJhY2t1cF9kZXYpO1xuIGludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiByeF9oYW5kbGVyX2Z1bmNfdCAqYnJfZ2V0X3J4X2hhbmRsZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gXG4tc3RydWN0IGJyX2ZyYW1lX3R5cGUge1xuLVx0X19iZTE2XHRcdFx0dHlwZTtcbi1cdGludFx0XHRcdCgqZnJhbWVfaGFuZGxlcikoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcbi1cdFx0XHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4tXHRzdHJ1Y3QgaGxpc3Rfbm9kZVx0bGlzdDtcbi19O1xuLVxuLXZvaWQgYnJfYWRkX2ZyYW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX2ZyYW1lX3R5cGUgKmZ0KTtcbi12b2lkIGJyX2RlbF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdCk7XG4tXG4gc3RhdGljIGlubGluZSBib29sIGJyX3J4X2hhbmRsZXJfY2hlY2tfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0cmV0dXJuIHJjdV9kZXJlZmVyZW5jZShkZXYtXHUwMDNlcnhfaGFuZGxlcikgPT0gYnJfZ2V0X3J4X2hhbmRsZXIoZGV2KTtcbkBAIC0yMDgwLDYgKzIwNzEsNyBAQCBpbnQgYnJfbXJwX3BhcnNlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbiBib29sIGJyX21ycF9lbmFibGVkKHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG4gdm9pZCBicl9tcnBfcG9ydF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKTtcbiBpbnQgYnJfbXJwX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xuK2ludCBicl9tcnBfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGJyX21ycF9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKmF0dHIsIGludCBjbWQsXG5AQCAtMjExMSw2ICsyMTAzLDcgQEAgaW50IGJyX2NmbV9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4gXHRcdCBzdHJ1Y3QgbmxhdHRyICphdHRyLCBpbnQgY21kLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIGJvb2wgYnJfY2ZtX2NyZWF0ZWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcbiB2b2lkIGJyX2NmbV9wb3J0X2RlbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApO1xuK2ludCBicl9jZm1fZnJhbWVfcngoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gaW50IGJyX2NmbV9jb25maWdfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG4gaW50IGJyX2NmbV9zdGF0dXNfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0ICAgIHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjE3OjI0LjcwOTQxMTU5NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMTAxNTQ5NTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQnJpZGdlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoIGZvciBmdXp6aW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgdG8gdGhlIGJyaWRnZSBjb2RlIGluIHRoZSBrZXJuZWwgaXMgZXZlbiB3b3J0aCB0aGUgZWZmb3J0LiBXZSBuZWVkIHRvIGFzc2VzcyB0aGUgYXR0YWNrIHN1cmZhY2UgYW5kIHBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgYnVncy4gSSBjYW4gc2VlIHRoZSBwYXRjaCB0b3VjaGVzIGEgZmV3IGZpbGVzIHdpdGhpbiBgbmV0L2JyaWRnZWA6IGBicl9jZm0uY2AsIGBicl9kZXZpY2UuY2AsIGBicl9pbnB1dC5jYCwgYGJyX21ycC5jYCwgYW5kIGBicl9wcml2YXRlLmhgLlxuXG5Ob3csIGxldCdzIHVuZGVyc3RhbmQgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIG9wdGltaXppbmcgdGhlIGZyYW1lIGhhbmRsaW5nLiBJbnN0ZWFkIG9mIGl0ZXJhdGluZyB0aHJvdWdoIGEgbGlua2VkIGxpc3Qgb2YgYHN0cnVjdCBicl9mcmFtZV90eXBlYCBvYmplY3RzIHdoZW4gcHJvY2Vzc2luZyBmcmFtZXMgaW4gdGhlIGZhc3QgcnggcGF0aCAoYGJyX2hhbmRsZV9mcmFtZSgpYCAtXHUwMDNlIGBicl9wcm9jZXNzX2ZyYW1lX3R5cGUoKWApLCB0aGV5J3JlIGRpdGNoaW5nIHRoZSBkeW5hbWljIGxpc3QgbG9va3VwLiBUaGV5J3ZlIHJlcGxhY2VkIGl0IHdpdGggZGlyZWN0IGNoZWNrcyBvZiBicmlkZ2Ugb3B0aW9uIGZsYWdzIChgQlJPUFRfQ0ZNX0VOQUJMRURgIGFuZCBgQlJPUFRfTVJQX0VOQUJMRURgKSB3aXRoaW4gYGJyX3Byb2Nlc3NfZnJhbWVfdHlwZSgpYC4gRnVydGhlcm1vcmUsIGl0IHNlZW1zIHRoZXkndmUgcmVtb3ZlZCBgYnJfYWRkX2ZyYW1lYCBhbmQgYGJyX2RlbF9mcmFtZWAsIHRoZSBgZnJhbWVfdHlwZV9saXN0YCBmcm9tIHRoZSBgc3RydWN0IG5ldF9icmlkZ2VgLCBhbmQgbm93IGNhbGwgYGJyX2NmbV9mcmFtZV9yeGAgYW5kIGBicl9tcnBfcHJvY2Vzc2AgZGlyZWN0bHkgaWYgdGhlIHJlc3BlY3RpdmUgZmxhZ3MgYXJlIGVuYWJsZWQuIFRoaXMgbG9va3MgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLCB3ZSBub3cgaGF2ZSBjb250cm9sIGZsb3cgYmFzZWQgb24gYnJpZGdlIGZsYWdzLlxuXG5UaGlzIGZsYWctYmFzZWQgYXBwcm9hY2ggaXMgcG90ZW50aWFsbHkgbW9yZSBlZmZpY2llbnQgYnV0IGNvdWxkIGludHJvZHVjZSBzdWJ0bGUgdnVsbmVyYWJpbGl0aWVzIGlmIG5vdCBoYW5kbGVkIGNhcmVmdWxseS4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcG90ZW50aWFsIGZvciBmbGFnIHJhY2VzIGFuZCBvZmYtYnktb25lIGVycm9ycyBpbiB0aGVpciBpbXBsZW1lbnRhdGlvbi5cblxuTmV4dCB1cCwgSSBzaG91bGQgdmVyaWZ5IHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBpbiBgbmV0L2JyaWRnZS9LY29uZmlnYC4gV2UgbXVzdCB1bmRlcnN0YW5kIHRoZSBidWlsZCBlbnZpcm9ubWVudCB0byBlbnN1cmUgdGhhdCB0aGlzIHBhdGNoIGlzIGV2ZW4gZW5hYmxlZCBpbiB0aGUgY29uZmlndXJhdGlvbnMgd2UncmUgdGFyZ2V0aW5nIGZvciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDE2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MTc6MzcuODEwOTY0ODA1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MDQ1NTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUklER0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvS2NvbmZpZy01LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo2OmNvbmZpZyBCUklER0VcXG5uZXQvYnJpZGdlL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nXFxcIlxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTM1LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzozNjpjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcXG5uZXQvYnJpZGdlL0tjb25maWctMzctXFx0Ym9vbCBcXFwiSUdNUC9NTEQgc25vb3BpbmdcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctNDktXFxubmV0L2JyaWRnZS9LY29uZmlnOjUwOmNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcXG5uZXQvYnJpZGdlL0tjb25maWctNTEtXFx0Ym9vbCBcXFwiVkxBTiBmaWx0ZXJpbmdcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctNjMtXFxubmV0L2JyaWRnZS9LY29uZmlnOjY0OmNvbmZpZyBCUklER0VfTVJQXFxubmV0L2JyaWRnZS9LY29uZmlnLTY1LVxcdGJvb2wgXFxcIk1SUCBwcm90b2NvbFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZy03NS1cXG5uZXQvYnJpZGdlL0tjb25maWc6NzY6Y29uZmlnIEJSSURHRV9DRk1cXG5uZXQvYnJpZGdlL0tjb25maWctNzctXFx0Ym9vbCBcXFwiQ0ZNIHByb3RvY29sXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjoxNzozNy44NjcwMTk4NzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDE3MDEyMzM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGBuZXQvYnJpZGdlL0tjb25maWdgIHRob3VnaHQgcHJvY2VzcywgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRGVsdmluZyBpbnRvIHRoZSBCcmlkZ2UgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHRoZSBMaW51eCBicmlkZ2luZyBjb2RlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgYW5kIGhvdyB0aGV5J3JlIHN0cnVjdHVyZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgZmlyc3QgOTAgbGluZXMgb2YgYG5ldC9icmlkZ2UvS2NvbmZpZ2AuIFRoaXMgc2hvdWxkIGNvdmVyIHRoZSBiYXNpYyBmZWF0dXJlcywgZGVwZW5kZW5jaWVzLCBhbmQgcGVyaGFwcyBzb21lIGRlZmF1bHQgYmVoYXZpb3IgZGVjbGFyYXRpb25zLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIHNldCB0aGUgc3RhZ2UgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG1vcmUgbnVhbmNlZCBhc3BlY3RzIGZ1cnRoZXIgZG93biB0aGUgZmlsZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIC0gdGhlIGNvcmUgZW5hYmxlL2Rpc2FibGUgc3dpdGNoZXMgZm9yIHRoZSBicmlkZ2UgaXRzZWxmLCBtYXliZSBzb21lIGVzc2VudGlhbCBoYXJkd2FyZSBhY2NlbGVyYXRpb24gZmVhdHVyZXMgKGlmIHByZXNlbnQpLCBhbmQgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gSSBhbHNvIHdhbnQgdG8gaWRlbnRpZnkgYW55IGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBtaWdodCBzaWduaWZpY2FudGx5IGluZmx1ZW5jZSBob3cgYSBicmlkZ2Ugb3BlcmF0ZXMgb3V0LW9mLXRoZS1ib3guIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIG1vZHVsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQwMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjE3OjQ4LjAzNzE0NTEzOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyA4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIEJSSURHRVxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIjgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1xcXCJcXG4gICA4OlxcdFxcdHNlbGVjdCBMTENcXG4gICA5OlxcdFxcdHNlbGVjdCBTVFBcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4geW91ciBMaW51eCBib3ggd2lsbCBiZSBhYmxlIHRvIGFjdCBhcyBhblxcbiAgMTI6XFx0XFx0ICBFdGhlcm5ldCBicmlkZ2UsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGRpZmZlcmVudCBFdGhlcm5ldCBzZWdtZW50cyBpdFxcbiAgMTM6XFx0XFx0ICBpcyBjb25uZWN0ZWQgdG8gd2lsbCBhcHBlYXIgYXMgb25lIEV0aGVybmV0IHRvIHRoZSBwYXJ0aWNpcGFudHMuXFxuICAxNDpcXHRcXHQgIFNldmVyYWwgc3VjaCBicmlkZ2VzIGNhbiB3b3JrIHRvZ2V0aGVyIHRvIGNyZWF0ZSBldmVuIGxhcmdlclxcbiAgMTU6XFx0XFx0ICBuZXR3b3JrcyBvZiBFdGhlcm5ldHMgdXNpbmcgdGhlIElFRUUgODAyLjEgc3Bhbm5pbmcgdHJlZSBhbGdvcml0aG0uXFxuICAxNjpcXHRcXHQgIEFzIHRoaXMgaXMgYSBzdGFuZGFyZCwgTGludXggYnJpZGdlcyB3aWxsIGNvb3BlcmF0ZSBwcm9wZXJseSB3aXRoXFxuICAxNzpcXHRcXHQgIG90aGVyIHRoaXJkIHBhcnR5IGJyaWRnZSBwcm9kdWN0cy5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBJbiBvcmRlciB0byB1c2UgdGhlIEV0aGVybmV0IGJyaWRnZSwgeW91J2xsIG5lZWQgdGhlIGJyaWRnZVxcbiAgMjA6XFx0XFx0ICBjb25maWd1cmF0aW9uIHRvb2xzOyBzZWUgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3RcXHUwMDNlXFxuICAyMTpcXHRcXHQgIGZvciBsb2NhdGlvbi4gUGxlYXNlIHJlYWQgdGhlIEJyaWRnZSBtaW5pLUhPV1RPIGZvciBtb3JlXFxuICAyMjpcXHRcXHQgIGluZm9ybWF0aW9uLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIElmIHlvdSBlbmFibGUgaXB0YWJsZXMgc3VwcG9ydCBhbG9uZyB3aXRoIHRoZSBicmlkZ2Ugc3VwcG9ydCB0aGVuIHlvdVxcbiAgMjU6XFx0XFx0ICB0dXJuIHlvdXIgYnJpZGdlIGludG8gYSBicmlkZ2luZyBJUCBmaXJld2FsbC5cXG4gIDI2OlxcdFxcdCAgaXB0YWJsZXMgd2lsbCB0aGVuIHNlZSB0aGUgSVAgcGFja2V0cyBiZWluZyBicmlkZ2VkLCBzbyB5b3UgbmVlZCB0b1xcbiAgMjc6XFx0XFx0ICB0YWtlIHRoaXMgaW50byBhY2NvdW50IHdoZW4gc2V0dGluZyB1cCB5b3VyIGZpcmV3YWxsIHJ1bGVzLlxcbiAgMjg6XFx0XFx0ICBFbmFibGluZyBhcnB0YWJsZXMgc3VwcG9ydCB3aGVuIGJyaWRnaW5nIHdpbGwgbGV0IGFycHRhYmxlcyBzZWVcXG4gIDI5OlxcdFxcdCAgYnJpZGdlZCBBUlAgdHJhZmZpYyBpbiB0aGUgYXJwdGFibGVzIEZPUldBUkQgY2hhaW4uXFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDMyOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgYnJpZGdlLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzNTpcXHRcXG4gIDM2OlxcdGNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1xcbiAgMzc6XFx0XFx0Ym9vbCBcXFwiSUdNUC9NTEQgc25vb3BpbmdcXFwiXFxuICAzODpcXHRcXHRkZXBlbmRzIG9uIEJSSURHRVxcbiAgMzk6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICA0MDpcXHRcXHRkZWZhdWx0IHlcXG4gIDQxOlxcdFxcdGhlbHBcXG4gIDQyOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgc2VsZWN0aXZlbHlcXG4gIDQzOlxcdFxcdCAgZm9yd2FyZCBtdWx0aWNhc3QgdHJhZmZpYyBiYXNlZCBvbiBJR01QL01MRCB0cmFmZmljIHJlY2VpdmVkIGZyb21cXG4gIDQ0OlxcdFxcdCAgZWFjaCBwb3J0LlxcbiAgNDU6XFx0XFxuICA0NjpcXHRcXHQgIFNheSBOIHRvIGV4Y2x1ZGUgdGhpcyBzdXBwb3J0IGFuZCByZWR1Y2UgdGhlIGJpbmFyeSBzaXplLlxcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuICA0OTpcXHRcXG4gIDUwOlxcdGNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcXG4gIDUxOlxcdFxcdGJvb2wgXFxcIlZMQU4gZmlsdGVyaW5nXFxcIlxcbiAgNTI6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0VcXG4gIDUzOlxcdFxcdGRlcGVuZHMgb24gVkxBTl84MDIxUVxcbiAgNTQ6XFx0XFx0ZGVmYXVsdCBuXFxuICA1NTpcXHRcXHRoZWxwXFxuICA1NjpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHNlbGVjdGl2ZWx5XFxuICA1NzpcXHRcXHQgIHJlY2VpdmUgYW5kIGZvcndhcmQgdHJhZmZpYyBiYXNlZCBvbiBWTEFOIGluZm9ybWF0aW9uIGluIHRoZSBwYWNrZXRcXG4gIDU4OlxcdFxcdCAgYW55IFZMQU4gaW5mb3JtYXRpb24gY29uZmlndXJlZCBvbiB0aGUgYnJpZGdlIHBvcnQgb3IgYnJpZGdlIGRldmljZS5cXG4gIDU5OlxcdFxcbiAgNjA6XFx0XFx0ICBTYXkgTiB0byBleGNsdWRlIHRoaXMgc3VwcG9ydCBhbmQgcmVkdWNlIHRoZSBiaW5hcnkgc2l6ZS5cXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgNjM6XFx0XFxuICA2NDpcXHRjb25maWcgQlJJREdFX01SUFxcbiAgNjU6XFx0XFx0Ym9vbCBcXFwiTVJQIHByb3RvY29sXFxcIlxcbiAgNjY6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0VcXG4gIDY3OlxcdFxcdGRlZmF1bHQgblxcbiAgNjg6XFx0XFx0aGVscFxcbiAgNjk6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSB0byBydW4gTVJQXFxuICA3MDpcXHRcXHQgIHByb3RvY29sIHRvIGRldGVjdCBsb29wc1xcbiAgNzE6XFx0XFxuICA3MjpcXHRcXHQgIFNheSBOIHRvIGV4Y2x1ZGUgdGhpcyBzdXBwb3J0IGFuZCByZWR1Y2UgdGhlIGJpbmFyeSBzaXplLlxcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA3NTpcXHRcXG4gIDc2OlxcdGNvbmZpZyBCUklER0VfQ0ZNXFxuICA3NzpcXHRcXHRib29sIFxcXCJDRk0gcHJvdG9jb2xcXFwiXFxuICA3ODpcXHRcXHRkZXBlbmRzIG9uIEJSSURHRVxcbiAgNzk6XFx0XFx0aGVscFxcbiAgODA6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSB0byBydW4gQ0ZNXFxuICA4MTpcXHRcXHQgIHByb3RvY29sIGFjY29yZGluZyB0byA4MDIuMVEgc2VjdGlvbiAxMi4xNFxcbiAgODI6XFx0XFxuICA4MzpcXHRcXHQgIFNheSBOIHRvIGV4Y2x1ZGUgdGhpcyBzdXBwb3J0IGFuZCByZWR1Y2UgdGhlIGJpbmFyeSBzaXplLlxcbiAgODQ6XFx0XFxuICA4NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjE3OjQ4LjAzNzIxMDUxOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MjE0MzQxMDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBCcmlkZ2UgQ29kZSBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSB0aGUgYnJpZGdlIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgaW50ZWdyYXRpb24gb2YgQlJJREdFXFxfTVJQIGFuZCBCUklER0VcXF9DRk0sIHRvIHNlZSBpZiB3ZSBjYW4gdHJpZ2dlciBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIEkgd2FudCB0byBjaGVjayBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGNvbXBpbGVkIGluLCB3aGljaCBib2lscyBkb3duIHRvIGxvb2tpbmcgYXQgYENPTkZJR19CUklER0VgLCBgQ09ORklHX0JSSURHRV9NUlBgLCBhbmQgYENPTkZJR19CUklER0VfQ0ZNYC4gSXMgaXQgZ29pbmcgdG8gYmUgd29ydGggdGhlIGVmZm9ydCB0byBmdXp6IHRoaXM/IEFic29sdXRlbHksIHRoaXMgaXMgY29yZSBuZXR3b3JrIGJyaWRnZSBmcmFtZSBwcm9jZXNzaW5nIGFuZCBjb25maWd1cmF0aW9uIGxvZ2ljLCBpbmNsdWRpbmcgQ0ZNIChDb25uZWN0aXZpdHkgRmF1bHQgTWFuYWdlbWVudCkgYW5kIE1SUCAoTWVkaWEgUmVkdW5kYW5jeSBQcm90b2NvbCkuXG5cbkkgc2VlIHRoYXQgYGJyX2hhbmRsZV9mcmFtZWAsIHRoZSBicmlkZ2UgUlggaGFuZGxlciwgZGlyZWN0bHkgY2FsbHMgYGJyX3Byb2Nlc3NfZnJhbWVfdHlwZWAsIHdoaWNoIG5vdyBpbmNvcnBvcmF0ZXMgYEJST1BUX0NGTV9FTkFCTEVEYCBhbmQgYEJST1BUX01SUF9FTkFCTEVEYCBvcHRpb24gYml0cy4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgYWxzbyBub3RlIG1vZGlmaWNhdGlvbnMgdG8gYGJyX2NmbV9tZXBfY3JlYXRlYCwgYGJyX2NmbV9tZXBfZGVsZXRlYCwgYGJyX21ycF9hZGRgLCBhbmQgYGJyX21ycF9kZWxfaW1wbGAuXG5cblRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoZXNlIHByb3RvY29scyBhbmQgdGhlaXIgZnJhbWUgaGFuZGxpbmcgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCBicmlkZ2UgbmV0bGluayBjb25maWd1cmF0aW9uIChydG5ldGxpbmsgLyBicmlkZ2UgbmV0bGluaykgYW5kIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbi9yZWNlcHRpb24gKHR1bi90YXAsIHZldGgsIHJhdyBzb2NrZXRzLCBldGMuKSBpbiBhIHN0YW5kYXJkIExpbnV4IGVudmlyb25tZW50IGxpa2UgUUVNVS4gTm8gc3BlY2lhbCBoYXJkd2FyZSByZXF1aXJlZCDigJMgdGhhdCBtYWtlcyB0aGlzIGV2ZW4gbW9yZSBhdHRyYWN0aXZlIGFzIGEgdGFyZ2V0LlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gZm9jdXMgb24uIEknbSBub3RpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgZWl0aGVyIGNoYW5nZWQgb3IgZXhwb3J0ZWQgZnJvbSBzdGF0aWMgc2NvcGU6IHNwZWNpZmljYWxseSBgYnJfY2ZtX2ZyYW1lX3J4YCwgYGJyX21ycF9wcm9jZXNzYCAoYm90aCB3ZXJlIHN0YXRpYyBiZWZvcmUpLCBgYnJfY2ZtX21lcF9jcmVhdGVgLCBgYnJfY2ZtX21lcF9kZWxldGVgLCBhbmQgYGJyX21ycF9hZGRgLiBBbHRob3VnaCBgYnJfaGFuZGxlX2ZyYW1lYCBpcyBvbiB0aGF0IGxpc3QsIEknbSBtb3JlIGludGVyZXN0ZWQgaW4gdGhlIG5vbi1ob3QtcGF0aCBrZXJuZWwgZnVuY3Rpb25zOiBgYnJfY2ZtX2ZyYW1lX3J4YCwgYGJyX21ycF9wcm9jZXNzYCwgYGJyX2NmbV9tZXBfY3JlYXRlYCwgYGJyX2NmbV9tZXBfZGVsZXRlYCwgYW5kIGBicl9tcnBfYWRkYC5cblxuT2theSwgZG91YmxlLWNoZWNraW5n4oCmIEkgc2VlIHRoYXQgYGJyX2NmbV9mcmFtZV9yeGAgaXMgbm93IGFuIGBpbnQgYnJfY2ZtX2ZyYW1lX3J4KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHN0cnVjdCBza19idWZmICpza2IpYCBpbiBgbmV0L2JyaWRnZS9icl9jZm0uY2AsIGFuZCBgYnJfbXJwX3Byb2Nlc3NgIGlzIGBpbnQgYnJfbXJwX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilgIGluIGBuZXQvYnJpZGdlL2JyX21ycC5jYC4gR29vZC4gTmV4dCwgSSBuZWVkIHRvIHRyYWNlIHdoZXJlIGBicl9jZm1fbWVwX2NyZWF0ZWAsIGBicl9jZm1fbWVwX2RlbGV0ZWAsIGFuZCBgYnJfbXJwX2FkZGAgYXJlIGFjdHVhbGx5IGNhbGxlZCBmcm9tLCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBjYWxsIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzcyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTc4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MTg6MTQuMjUxNTUzNzk5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzE5NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX2NmbV9tZXBfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9jZm0uYz0zNzA9aW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2JyaWRnZS9icl9jZm0uYy00OTEtXFxubmV0L2JyaWRnZS9icl9jZm0uYzo0OTI6aW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG5uZXQvYnJpZGdlL2JyX2NmbS5jLTQ5My1cXHRcXHQgICAgICBjb25zdCB1MzIgaW5zdGFuY2UsXFxubmV0L2JyaWRnZS9icl9jZm0uYzo0OTQ6XFx0XFx0ICAgICAgc3RydWN0IGJyX2NmbV9tZXBfY3JlYXRlICpjb25zdCBjcmVhdGUsXFxubmV0L2JyaWRnZS9icl9jZm0uYy00OTUtXFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jPTg9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjk6YnJfY2ZtX21lcF9jcmVhdGVfcG9saWN5W0lGTEFfQlJJREdFX0NGTV9NRVBfQ1JFQVRFX01BWCArIDFdID0ge1xcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy0xMC1cXHRbSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVfVU5TUEVDXVxcdD0geyAudHlwZSA9IE5MQV9SRUpFQ1QgfSxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYz03Mj1icl9jZm1fcG9saWN5W0lGTEFfQlJJREdFX0NGTV9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy03NC1cXHRbSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVdXFx0XFx0PVxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYzo3NTpcXHRcXHRcXHRcXHROTEFfUE9MSUNZX05FU1RFRChicl9jZm1fbWVwX2NyZWF0ZV9wb2xpY3kpLFxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy03Ni1cXHRbSUZMQV9CUklER0VfQ0ZNX01FUF9ERUxFVEVdXFx0XFx0PVxcbi0tXFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jPTkyPXN0YXRpYyBpbnQgYnJfbWVwX2NyZWF0ZV9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtOTUtXFx0c3RydWN0IG5sYXR0ciAqdGJbSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVfTUFYICsgMV07XFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjk2OlxcdHN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZSBjcmVhdGU7XFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jLTk3LVxcdHUzMiBpbnN0YW5jZTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy0xMDAtXFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVfTUFYLCBhdHRyLFxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYzoxMDE6XFx0XFx0XFx0ICAgICAgIGJyX2NmbV9tZXBfY3JlYXRlX3BvbGljeSwgZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTAyLVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTI4LVxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYzoxMjk6XFx0cmV0dXJuIGJyX2NmbV9tZXBfY3JlYXRlKGJyLCBpbnN0YW5jZSwgXFx1MDAyNmNyZWF0ZSwgZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTMwLX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaC04LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaDo5OnN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZSB7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oLTEwLVxcdGVudW0gYnJfY2ZtX2RvbWFpbiBkb21haW47IC8qIERvbWFpbiBmb3IgdGhpcyBNRVAgKi9cXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaC0xNC1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmg6MTU6aW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTYtXFx0XFx0ICAgICAgY29uc3QgdTMyIGluc3RhbmNlLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaDoxNzpcXHRcXHQgICAgICBzdHJ1Y3QgYnJfY2ZtX21lcF9jcmVhdGUgKmNvbnN0IGNyZWF0ZSxcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTgtXFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaD0xMTc9c3RydWN0IGJyX2NmbV9tZXAge1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oLTEyMC1cXHR1MzJcXHRcXHRcXHRcXHRpbnN0YW5jZTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmg6MTIxOlxcdHN0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZVxcdGNyZWF0ZTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgtMTIyLVxcdHN0cnVjdCBicl9jZm1fbWVwX2NvbmZpZ1xcdGNvbmZpZztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MTg6MTQuMzA1MjgxNDc3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc3NjY0MjcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBXZWFrIFBvaW50cyoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgZm9yIHZ1bG5lcmFiaWxpdGllcywgYW5kIGJhc2VkIG9uIHRoZSByZWNlbnQgZmluZGluZ3MsIEkgbmVlZCB0byBleHBhbmQgbXkgc2VhcmNoLiBUaGUgdXN1YWwgc3VzcGVjdHMgaGF2ZSBhbHJlYWR5IGJlZW4gc2NydXRpbml6ZWQsIHNvIEknbSB0aGlua2luZy4uLiBsZXQncyBub3Qgb3Zlcmxvb2sgYGJyX21ycF9hZGRgLiBJdCdzIGEga2V5IGZ1bmN0aW9uIGluIFttZW50aW9uIHRoZSByZWxldmFudCBzeXN0ZW0vYXJlYSB0aGlzIGZ1bmN0aW9uIGlzIGluXSwgYW5kIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIHByZXZpb3VzIGlzc3VlcywgaXQncyBkZWZpbml0ZWx5IHdpdGhpbiB0aGUgc2NvcGUgb2Ygd2hlcmUgd2Ugc2hvdWxkIGJlIGxvb2tpbmcuIE15IGluaXRpYWwgZm9jdXMgd2FzIFttZW50aW9uIGEgcHJldmlvdXMgYXJlYSBvZiBmb2N1cywgaWYgYW55XSwgYnV0IEkgaGF2ZSB0byBiZSB0aG9yb3VnaC4gTGV0J3Mgc2VlIGlmIHRoaXMgb25lIGFsc28gbmVlZHMgdG8gYmUgZXhwbG9yZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDk4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MTg6MTcuMDgxOTI3NzE4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjIxMTUyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9tcnBfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9tcnAuYz00MTk9c3RhdGljIHZvaWQgYnJfbXJwX2RlbF9pbXBsKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycCAqbXJwKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnAuYy00ODctICovXFxubmV0L2JyaWRnZS9icl9tcnAuYzo0ODg6aW50IGJyX21ycF9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSlcXG5uZXQvYnJpZGdlL2JyX21ycC5jLTQ4OS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycF9uZXRsaW5rLmM9MzE9c3RhdGljIGludCBicl9tcnBfaW5zdGFuY2VfcGFyc2Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jLTYxLVxcdGlmIChjbWQgPT0gUlRNX1NFVExJTkspXFxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jOjYyOlxcdFxcdHJldHVybiBicl9tcnBfYWRkKGJyLCBcXHUwMDI2aW5zdCk7XFxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jLTYzLVxcdGVsc2VcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9tcnAuaD01OT1lbnVtIGJyX21ycF9od19zdXBwb3J0IHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9tcnAuaC02NS0vKiBicl9tcnAuYyAqL1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9tcnAuaDo2NjppbnQgYnJfbXJwX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnBfaW5zdGFuY2UgKmluc3RhbmNlKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfbXJwLmgtNjctaW50IGJyX21ycF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjE4OjE3LjEyODE0MTczNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTY5MzgwNDk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqUmV2aWV3aW5nIERlbGV0aW9uIFByb2Nlc3NlcyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgZGVsZXRpb24gcHJvY2Vzc2VzLCBwYXJ0aWN1bGFybHkgYXMgdGhleSByZWxhdGUgdG8gYGJyX2NmbV9tZXBfZGVsZXRlYCBhbmQgYGJyX21ycF9kZWxgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSByZW1vdmFsIG9mIHRoZXNlIG9iamVjdHMgaXMgZnVuY3Rpb25pbmcgcHJvcGVybHksIGVzcGVjaWFsbHkgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgb3RoZXIgbW9kdWxlcy4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gb3JwaGFuZWQgcmVjb3JkcywgY2FzY2FkZSBkZWxldGlvbnMgYXJlIHdvcmtpbmcgYXMgZXhwZWN0ZWQsIGFuZCB0aGF0IGFsbCByZWxhdGVkIHRhYmxlcyBhcmUgYmVpbmcgaGFuZGxlZCBncmFjZWZ1bGx5LiBMZXQgbWUgYmVnaW4gYnkgY2hlY2tpbmcgdGhlIG1vc3QgcmVjZW50IGxvZ3MsIHRoZW4gSSBjYW4gcnVuIGEgZmV3IHRhcmdldGVkIHF1ZXJpZXMgdG8gY29uZmlybSB0aGUgaW50ZWdyaXR5IG9mIHRoZSBkYXRhYmFzZSBhZnRlciBhIGRlbGV0aW9uIGlzIHRyaWdnZXJlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdW5leHBlY3RlZCBzaWRlIGVmZmVjdHM7IHRoaXMgaXMgYSBjcml0aWNhbCBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2OTUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjoxODozMi44MjE5NDg3MTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMzMwOTE2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9jZm1fbWVwX2RlbGV0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfY2ZtLmM9NTY0PXN0YXRpYyB2b2lkIG1lcF9kZWxldGVfaW1wbGVtZW50YXRpb24oc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9jZm0uYy01ODgtXFxubmV0L2JyaWRnZS9icl9jZm0uYzo1ODk6aW50IGJyX2NmbV9tZXBfZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG5uZXQvYnJpZGdlL2JyX2NmbS5jLTU5MC1cXHRcXHQgICAgICBjb25zdCB1MzIgaW5zdGFuY2UsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM9MTc9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XFxubmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jOjE4OmJyX2NmbV9tZXBfZGVsZXRlX3BvbGljeVtJRkxBX0JSSURHRV9DRk1fTUVQX0RFTEVURV9NQVggKyAxXSA9IHtcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTktXFx0W0lGTEFfQlJJREdFX0NGTV9NRVBfREVMRVRFX1VOU1BFQ11cXHQ9IHsgLnR5cGUgPSBOTEFfUkVKRUNUIH0sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM9NzI9YnJfY2ZtX3BvbGljeVtJRkxBX0JSSURHRV9DRk1fTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtNzYtXFx0W0lGTEFfQlJJREdFX0NGTV9NRVBfREVMRVRFXVxcdFxcdD1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmM6Nzc6XFx0XFx0XFx0XFx0TkxBX1BPTElDWV9ORVNURUQoYnJfY2ZtX21lcF9kZWxldGVfcG9saWN5KSxcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtNzgtXFx0W0lGTEFfQlJJREdFX0NGTV9NRVBfQ09ORklHXVxcdFxcdD1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYz0xMzI9c3RhdGljIGludCBicl9tZXBfZGVsZXRlX3BhcnNlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYy0xMzktXFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgSUZMQV9CUklER0VfQ0ZNX01FUF9ERUxFVEVfTUFYLCBhdHRyLFxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYzoxNDA6XFx0XFx0XFx0ICAgICAgIGJyX2NmbV9tZXBfZGVsZXRlX3BvbGljeSwgZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTQxLVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTUxLVxcbm5ldC9icmlkZ2UvYnJfY2ZtX25ldGxpbmsuYzoxNTI6XFx0cmV0dXJuIGJyX2NmbV9tZXBfZGVsZXRlKGJyLCBpbnN0YW5jZSwgZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX2NmbV9uZXRsaW5rLmMtMTUzLX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaD0xNT1pbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlX2NmbS5oLTE5LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaDoyMDppbnQgYnJfY2ZtX21lcF9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9jZm0uaC0yMS1cXHRcXHQgICAgICBjb25zdCB1MzIgaW5zdGFuY2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjE4OjMzLjE1NTI2MjU4MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDUyNTQ1NDM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIGBicl9tcnBfZGVsYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MsIGFzIGFuIGV4cGVydCwgaW1tZWRpYXRlbHkgY2VudGVycyBvbiB0aGUgY29udGV4dC4gXCJMZXQncyBjaGVjayBgYnJfbXJwX2RlbGBcIiAtIHRoaXMgaW1wbGllcyBhIHZlcnkgc3BlY2lmaWMgYXJlYSBvZiBjb25jZXJuLiBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHN5c3RlbXMgYW5kIGRhdGEgc3RydWN0dXJlcyB0aGF0IGBicl9tcnBfZGVsYCBpcyBsaWtlbHkgYXNzb2NpYXRlZCB3aXRoLiBJcyBpdCBhIHRhYmxlIG5hbWU/IEEgc3RvcmVkIHByb2NlZHVyZT8gQSB2YXJpYWJsZSB3aXRoaW4gYSBsYXJnZXIgc2NyaXB0IG9yIG1vZHVsZT8gS25vd2luZyB0aGlzIHdpbGwgZHJhbWF0aWNhbGx5IGFmZmVjdCBteSBhcHByb2FjaC5cblxuSSdtIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBlaXRoZXIgYSBkYXRhIGlzc3VlLCBhIGNvZGUgZXhlY3V0aW9uIHByb2JsZW0sIG9yIHBlcmhhcHMgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBUaGUgdGVybSBcIk1SUFwiIChNYXRlcmlhbCBSZXF1aXJlbWVudHMgUGxhbm5pbmcpIGlzIGEgc3Ryb25nIGluZGljYXRvciB0aGF0IEknbSBsaWtlbHkgZGVhbGluZyB3aXRoIHN1cHBseSBjaGFpbiwgbWFudWZhY3R1cmluZywgb3IgZGlzdHJpYnV0aW9uIHByb2Nlc3Nlcy4gXCJEZWxcIiBzdWdnZXN0cyBkZWxldGlvbiwgcmVtb3ZhbCwgb3IgcGVyaGFwcyBkZWxpdmVyeS4gQ29tYmluaW5nIHRob3NlLCBteSBtaW5kIGlzIGltbWVkaWF0ZWx5IHdvcmtpbmcgdGhyb3VnaCB0aGUgcG90ZW50aWFsIHNjZW5hcmlvcywgc29tZXRoaW5nIGxpa2U6XG5cbiogICAqKkRhdGEgSW50ZWdyaXR5OioqIElzIHRoaXMgcmVsYXRlZCB0byBkZWxldGluZyBwbGFubmVkIG9yZGVycywgZGVsZXRpbmcgcmVjb3JkcyBvZiBkZWxpdmVyaWVzLCBvciBzb21ldGhpbmcgc2ltaWxhcj8gQXJlIHRoZXJlIGNvbnN0cmFpbnRzIG9yIHRyaWdnZXJzIGludm9sdmVkIHRoYXQgbWlnaHQgY2F1c2UgZXJyb3JzP1xuKiAgICoqUHJvY2VzcyBBdXRvbWF0aW9uOioqIElzIHRoaXMgYSBzY3JpcHQgdGhhdCdzIHN1cHBvc2VkIHRvIGhhbmRsZSB0aGVzZSBkZWxldGlvbnMgYXV0b21hdGljYWxseT8gSWYgc28sIHdoYXQncyBpdHMgaGlzdG9yeSBvZiBzdWNjZXNzIGFuZCBmYWlsdXJlPyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGNvbnNlcXVlbmNlcyBvZiBhIG1hbGZ1bmN0aW9uP1xuKiAgICoqUGVyZm9ybWFuY2UgSW1wYWN0OioqIEFyZSB3ZSB0YWxraW5nIGFib3V0IGxhcmdlIGRhdGFzZXRzPyBDb3VsZCBhIHBvb3JseSBvcHRpbWl6ZWQgZGVsZXRlIG9wZXJhdGlvbiBiZSBzbG93aW5nIGRvd24gb3RoZXIgY3J1Y2lhbCBwcm9jZXNzZXM/IEFyZSB0aGVyZSBsb2NrcyB0aGF0IG1pZ2h0IGJlIGFuIGlzc3VlP1xuXG5CZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gYW55IGNvZGUgb3IgZGF0YSwgSSBuZWVkIHRvIGtub3cgKndoYXQqIEknbSBsb29raW5nIGZvciBzcGVjaWZpY2FsbHkgYW5kIHdoYXQgdGhlIGdvYWwgaXMuIFRoaXMgaXMgYWxsIGp1c3QgYW4gaW5pdGlhbCBtZW50YWwgZnJhbWV3b3JrIHRvIHN0cnVjdHVyZSB0aGUgaW52ZXN0aWdhdGlvbi4gTGV0IG1lIGRldGVybWluZSB0aGUgbmV4dCBzdGVwcyBJIHNob3VsZCB0YWtlIHRvIGdhaW4gZ3JlYXRlciBjb250ZXh0IG9uIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYzOCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjE4OjUzLjY4MDcxOTgwNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ5MjYzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfbXJwX2RlbFxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9tcnAuYz01NTM9dm9pZCBicl9tcnBfcG9ydF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnAuYy01NjYtICovXFxubmV0L2JyaWRnZS9icl9tcnAuYzo1Njc6aW50IGJyX21ycF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSlcXG5uZXQvYnJpZGdlL2JyX21ycC5jLTU2OC17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycF9uZXRsaW5rLmM9MzE9c3RhdGljIGludCBicl9tcnBfaW5zdGFuY2VfcGFyc2Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tcnBfbmV0bGluay5jLTYzLVxcdGVsc2VcXG5uZXQvYnJpZGdlL2JyX21ycF9uZXRsaW5rLmM6NjQ6XFx0XFx0cmV0dXJuIGJyX21ycF9kZWwoYnIsIFxcdTAwMjZpbnN0KTtcXG5uZXQvYnJpZGdlL2JyX21ycF9uZXRsaW5rLmMtNjUtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfbXJwLmg9NjY9aW50IGJyX21ycF9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwX2luc3RhbmNlICppbnN0YW5jZSk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlX21ycC5oOjY3OmludCBicl9tcnBfZGVsKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycF9pbnN0YW5jZSAqaW5zdGFuY2UpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV9tcnAuaC02OC1pbnQgYnJfbXJwX3NldF9wb3J0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjE4OjUzLjczNTY1MjI0MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1Mjc4MjA5OTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQnJpZGdlIE1ha2VmaWxlKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgdGhlIG5ldHdvcmtpbmcgYnJpZGdlIGltcGxlbWVudGF0aW9uLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzIHdpdGggdGhlc2Uga2luZHMgb2YgaW52ZXN0aWdhdGlvbnMsIGlzIHRoZSBgTWFrZWZpbGVgIGluIHRoZSBgbmV0L2JyaWRnZS9gIGRpcmVjdG9yeS4gVGhhdCdzIHRoZSBoZWFydCBvZiBob3cgdGhpbmdzIGFyZSBidWlsdCBpbiB0aGlzIG1vZHVsZSwgaXQgaG9sZHMgdGhlIHNlY3JldHMuIEknbGwgbmVlZCB0byBzZWUgcHJlY2lzZWx5IHdoaWNoIHNvdXJjZSBmaWxlcyBhcmUgY29tcGlsZWQsIHdoYXQgY29tcGlsZXIgZmxhZ3MgYXJlIHVzZWQsIGFuZCBtb3N0IGNyaXRpY2FsbHksIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGluZmx1ZW5jZSB0aGUgYnVpbGQgcHJvY2Vzcy4gSSdtIGV4cGVjdGluZyB0byBzZWUgZGVwZW5kZW5jaWVzIG9uIHZhcmlvdXMga2VybmVsIGNvbmZpZ3VyYXRpb24gc3ltYm9scyByZWxhdGVkIHRvIGJyaWRnaW5nIGZ1bmN0aW9uYWxpdHk7IHRoaW5ncyBsaWtlIFZMQU4gc3VwcG9ydCwgU1RQLCBhbmQgdGhlIHZhcmlvdXMgYnJpZGdlIHByb3RvY29scy4gVW5kZXJzdGFuZGluZyB0aGlzIE1ha2VmaWxlIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDM0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MTg6NTkuMDEzODY0NDg2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgSUVFRSA4MDIuMWQgZXRoZXJuZXQgYnJpZGdpbmcgbGF5ZXIuXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai0kKENPTkZJR19CUklER0UpICs9IGJyaWRnZS5vXFxuICAgNzpcXHRcXG4gICA4OlxcdGJyaWRnZS15XFx0Oj0gYnIubyBicl9kZXZpY2UubyBicl9mZGIubyBicl9mb3J3YXJkLm8gYnJfaWYubyBicl9pbnB1dC5vIFxcXFxcXG4gICA5OlxcdFxcdFxcdFxcdGJyX2lvY3RsLm8gYnJfc3RwLm8gYnJfc3RwX2JwZHUubyBcXFxcXFxuICAxMDpcXHRcXHRcXHRcXHRicl9zdHBfaWYubyBicl9zdHBfdGltZXIubyBicl9uZXRsaW5rLm8gXFxcXFxcbiAgMTE6XFx0XFx0XFx0XFx0YnJfbmV0bGlua190dW5uZWwubyBicl9hcnBfbmRfcHJveHkub1xcbiAgMTI6XFx0XFxuICAxMzpcXHRicmlkZ2UtJChDT05GSUdfU1lTRlMpICs9IGJyX3N5c2ZzX2lmLm8gYnJfc3lzZnNfYnIub1xcbiAgMTQ6XFx0XFxuICAxNTpcXHRicmlkZ2UtJChzdWJzdCBtLHksJChDT05GSUdfQlJJREdFX05FVEZJTFRFUikpICs9IGJyX25mX2NvcmUub1xcbiAgMTY6XFx0XFxuICAxNzpcXHRicl9uZXRmaWx0ZXIteSA6PSBicl9uZXRmaWx0ZXJfaG9va3Mub1xcbiAgMTg6XFx0YnJfbmV0ZmlsdGVyLSQoc3Vic3QgbSx5LCQoQ09ORklHX0lQVjYpKSArPSBicl9uZXRmaWx0ZXJfaXB2Ni5vXFxuICAxOTpcXHRvYmotJChDT05GSUdfQlJJREdFX05FVEZJTFRFUikgKz0gYnJfbmV0ZmlsdGVyLm9cXG4gIDIwOlxcdFxcbiAgMjE6XFx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HKSArPSBicl9tdWx0aWNhc3QubyBicl9tZGIubyBicl9tdWx0aWNhc3RfZWh0Lm9cXG4gIDIyOlxcdFxcbiAgMjM6XFx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklORykgKz0gYnJfdmxhbi5vIGJyX3ZsYW5fdHVubmVsLm8gYnJfdmxhbl9vcHRpb25zLm8gYnJfbXN0Lm9cXG4gIDI0OlxcdFxcbiAgMjU6XFx0YnJpZGdlLSQoQ09ORklHX05FVF9TV0lUQ0hERVYpICs9IGJyX3N3aXRjaGRldi5vXFxuICAyNjpcXHRcXG4gIDI3OlxcdG9iai0kKENPTkZJR19ORVRGSUxURVIpICs9IG5ldGZpbHRlci9cXG4gIDI4OlxcdFxcbiAgMjk6XFx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9NUlApXFx0Kz0gYnJfbXJwX3N3aXRjaGRldi5vIGJyX21ycC5vIGJyX21ycF9uZXRsaW5rLm9cXG4gIDMwOlxcdFxcbiAgMzE6XFx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9DRk0pXFx0Kz0gYnJfY2ZtLm8gYnJfY2ZtX25ldGxpbmsub1xcbiAgMzI6XFx0XFxuICAzMzpcXHRpZmRlZiBDT05GSUdfR0NPVl9QUk9GSUxFX05FVEZJTFRFUlxcbiAgMzQ6XFx0R0NPVl9QUk9GSUxFX2JyX25mX2NvcmUubyA6PSB5XFxuICAzNTpcXHRHQ09WX1BST0ZJTEVfYnJfbmV0ZmlsdGVyX2hvb2tzLm8gOj0geVxcbiAgMzY6XFx0R0NPVl9QUk9GSUxFX2JyX25ldGZpbHRlcl9pcHY2Lm8gOj0geVxcbiAgMzc6XFx0ZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MTg6NTkuMDEzOTIyNzI2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1NjQ3NDUwMTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRXRoZXJuZXQgQnJpZGdlIENGTSBhbmQgTVJQIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczogYEJSSURHRWAsIGBCUklER0VfQ0ZNYCwgYW5kIGBCUklER0VfTVJQYC4gIEknbGwgcXVpY2tseSBjaGVjayBLY29uZmlnIGZvciBkZXBlbmRlbmNpZXM7IGl0IGxvb2tzIGxpa2UgYEJSSURHRV9DRk1gIGFuZCBgQlJJREdFX01SUGAgYm90aCBkZXBlbmQgb24gYEJSSURHRWAsIHdoaWNoIG1ha2VzIHNlbnNlIGJlY2F1c2Ugd2UgbmVlZCB0aGUgYmFzaWMgYnJpZGdpbmcgZnVuY3Rpb25hbGl0eSBmaXJzdC4gYEJSSURHRWAgaXRzZWxmIGlzIGEgdHJpc3RhdGUgY29uZmlnIGVuYWJsaW5nIDgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZywgYW5kIHNlbGVjdHMgTExDIGFuZCBTVFAuXG5cbk5vdywgbGV0J3Mgc2VlIHdoYXQgdGhlIGRpZmYgYWN0dWFsbHkgdG91Y2hlcy4gSSBzZWUgZmlsZXMgbGlrZSBgYnJfY2ZtLmNgLCBgYnJfZGV2aWNlLmNgLCBgYnJfaW5wdXQuY2AsIGBicl9tcnAuY2AsIGFuZCBgYnJfcHJpdmF0ZS5oYC4gIFRoaXMgY29uZmlybXMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggQ29ubmVjdGl2aXR5IEZhdWx0IE1hbmFnZW1lbnQgKENGTSkgYW5kIE1lZGlhIFJlZHVuZGFuY3kgUHJvdG9jb2wgKE1SUCkgaGFuZGxpbmcgd2l0aGluIHRoZSBicmlkZ2UuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGUgY2hhbmdlcyBhcmUgYWJvdXQgYnJpZGdlIGRldmljZSBzZXR1cCwgcGFja2V0IGlucHV0LCBhbmQgdGhlIGNyZWF0aW9uL2RlbGV0aW9uIG9mIENGTSBNRVBzIGFuZCBNUlAgaW5zdGFuY2VzLlxuXG5OZXh0LCBJJ2xsIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyBtb2RpZmllZDogYGJyX2NmbV9mcmFtZV9yeGAsIGBicl9tcnBfcHJvY2Vzc2AsIGBicl9jZm1fbWVwX2NyZWF0ZWAsIGBicl9jZm1fbWVwX2RlbGV0ZWAsIGBicl9tcnBfYWRkYCwgYW5kIGBicl9tcnBfZGVsYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGV5IGFyZSB0aGUgY29ycmVjdCBzeW1ib2xzLCBhbmQgdGhhdCB0aGVpciB2aXNpYmlsaXR5IGlzIGNvcnJlY3QuIGBicl9jZm1fZnJhbWVfcnhgIGFuZCBgYnJfbXJwX3Byb2Nlc3NgIGFyZSBub3cgbm9uLXN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IGluZGljYXRlcyB0aGV5IG1pZ2h0IGJlIGdldHRpbmcgdXNlZCBvdXRzaWRlIG9mIHRoZWlyIG9yaWdpbmFsIHNjb3BlLiBUaGUgcmVtYWluaW5nIGFyZSBub24tc3RhdGljIGFzIHdlbGwuXG5cbkknbGwgcXVpY2tseSBzY2FuIGZvciBvdGhlciBtb2RpZmllZCBmdW5jdGlvbnMuIEluIGBicl9kZXZpY2UuY2AsIHRoZXJlJ3MgYGJyX2Rldl9zZXR1cGAgKGluaXRpYWxpemF0aW9uKSwgd2hpY2ggc2VlbXMgcmVhc29uYWJsZS4gSW4gYGJyX2lucHV0LmNgLCBgYnJfcHJvY2Vzc19mcmFtZV90eXBlYCBpcyBzdGF0aWMgYnV0IGBicl9oYW5kbGVfZnJhbWVgIGlzIHByZXNlbnQsIGFsb25nIHdpdGggdGhlIGRlbGV0aW9ucyBvZiBgYnJfYWRkX2ZyYW1lYCBhbmQgYGJyX2RlbF9mcmFtZWAuIEluIGBicl9jZm0uY2AsIGBtZXBfZGVsZXRlX2ltcGxlbWVudGF0aW9uYCBpcyBzdGF0aWMgYW5kIGNhbGxlZCBieSBgYnJfY2ZtX21lcF9kZWxldGVgIGFuZCBgYnJfY2ZtX3BvcnRfZGVsYC4gSW4gYGJyX21ycC5jYCwgdGhlcmUncyBgYnJfbXJwX2RlbF9pbXBsYCwgc3RhdGljIHRvbywgYW5kIGNhbGxlZCBieSBgYnJfbXJwX2RlbGAgYW5kIGBicl9tcnBfcG9ydF9kZWxgLlxuXG5TbywgdG8gc3VtbWFyaXplLCB0aGUgcmVsZXZhbnQgc3ltYm9scyBhcmU6IGBicl9jZm1fZnJhbWVfcnhgLCBgYnJfbXJwX3Byb2Nlc3NgLCBgYnJfY2ZtX21lcF9jcmVhdGVgLCBgYnJfY2ZtX21lcF9kZWxldGVgLCBgYnJfbXJwX2FkZGAsIGFuZCBgYnJfbXJwX2RlbGAuICBUaGUgY29uZmlndXJhdGlvbnMgd2UncmUgdHJhY2tpbmcgYXJlOiBgQlJJREdFYCwgYEJSSURHRV9DRk1gLCBhbmQgYEJSSURHRV9NUlBgLlxuXG5CYXNlZCBvbiB0aGlzLCBpdCBzZWVtcyB0aGUgcGF0Y2ggaXMgb3B0aW1pemluZyBFdGhlcm5ldCBCcmlkZ2UgZnJhbWUgdHlwZSBoYW5kbGluZyBmb3IgQ0ZNIGFuZCBNUlAuICBJbnN0ZWFkIG9mIGR5bmFtaWMgbWFuYWdlbWVudCBvZiBgZnJhbWVfdHlwZV9saXN0YCwgaXQncyByZXBsYWNpbmcgaXQgd2l0aCBkaXJlY3QgZmxhZyBjaGVja3MgKGBCUk9QVF9DRk1fRU5BQkxFRGAgYW5kIGBCUk9QVF9NUlBfRU5BQkxFRGApIGluIHRoZSByZWNlaXZlIHBhdGggKGBicl9oYW5kbGVfZnJhbWVgIC8gYGJyX3Byb2Nlc3NfZnJhbWVfdHlwZWApLiAgVGhpcyBpcyBsaWtlbHkgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS4gVGhlIGNvZGUgYWxzbyBleHBvcnRzIGBicl9jZm1fZnJhbWVfcnhgIGFuZCBgYnJfbXJwX3Byb2Nlc3NgLCBhbmQgdXBkYXRlcyB0aGUgaW5zdGFuY2UgY3JlYXRpb24vZGVsZXRpb24gcGF0aHMuIFRoaXMgY2hhbmdlIGlzIGNlcnRhaW5seSB0ZXN0YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgYXMgYSBtYXR0ZXIgb2YgY291cnNlLlxuXG5Pa2F5LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzU2LCJPdXRwdXRUb2tlbnMiOjIxMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjE5OjM0LjY2MTM3NTUyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY2MTg0ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX0NGTVwiLFxuICAgIFwiQlJJREdFX01SUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX2NmbV9mcmFtZV9yeFwiLFxuICAgIFwiYnJfbXJwX3Byb2Nlc3NcIixcbiAgICBcImJyX2NmbV9tZXBfY3JlYXRlXCIsXG4gICAgXCJicl9jZm1fbWVwX2RlbGV0ZVwiLFxuICAgIFwiYnJfbXJwX2FkZFwiLFxuICAgIFwiYnJfbXJwX2RlbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYnJpZGdlIGZyYW1lIGhhbmRsaW5nIGxvZ2ljIGZvciBDRk0gKDgwMi4xUSBDRk0pIGFuZCBNUlAgcHJvdG9jb2xzIGJ5IHJlcGxhY2luZyB0aGUgZHluYW1pYyBmcmFtZV90eXBlX2xpc3Qgd2l0aCBicmlkZ2Ugb3B0aW9uIGZsYWdzIChCUk9QVF9DRk1fRU5BQkxFRCBhbmQgQlJPUFRfTVJQX0VOQUJMRUQpIGFuZCBkaXJlY3QgY2FsbHMgdG8gYnJfY2ZtX2ZyYW1lX3J4IGFuZCBicl9tcnBfcHJvY2Vzcy4gSXQgbW9kaWZpZXMgYm90aCB0aGUgZnJhbWUgcmVjZWl2ZSBwYXRoIGFuZCB0aGUgbmV0bGluay10cmlnZ2VyZWQgaW5zdGFuY2UgY3JlYXRpb24vZGVsZXRpb24gcGF0aHMuIFRoaXMgYWZmZWN0cyBjb3JlIGJyaWRnZSBuZXR3b3JraW5nIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbCBlbnZpcm9ubWVudHMgd2l0aG91dCBzcGVjaWFsaXplZCBoYXJkd2FyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIixcbiAgICBcIkJSSURHRV9DRk1cIixcbiAgICBcIkJSSURHRV9NUlBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9jZm1fZnJhbWVfcnhcIixcbiAgICBcImJyX21ycF9wcm9jZXNzXCIsXG4gICAgXCJicl9jZm1fbWVwX2NyZWF0ZVwiLFxuICAgIFwiYnJfY2ZtX21lcF9kZWxldGVcIixcbiAgICBcImJyX21ycF9hZGRcIixcbiAgICBcImJyX21ycF9kZWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGJyaWRnZSBmcmFtZSBoYW5kbGluZyBsb2dpYyBmb3IgQ0ZNICg4MDIuMVEgQ0ZNKSBhbmQgTVJQIHByb3RvY29scyBieSByZXBsYWNpbmcgdGhlIGR5bmFtaWMgZnJhbWVfdHlwZV9saXN0IHdpdGggYnJpZGdlIG9wdGlvbiBmbGFncyAoQlJPUFRfQ0ZNX0VOQUJMRUQgYW5kIEJST1BUX01SUF9FTkFCTEVEKSBhbmQgZGlyZWN0IGNhbGxzIHRvIGJyX2NmbV9mcmFtZV9yeCBhbmQgYnJfbXJwX3Byb2Nlc3MuIEl0IG1vZGlmaWVzIGJvdGggdGhlIGZyYW1lIHJlY2VpdmUgcGF0aCBhbmQgdGhlIG5ldGxpbmstdHJpZ2dlcmVkIGluc3RhbmNlIGNyZWF0aW9uL2RlbGV0aW9uIHBhdGhzLiBUaGlzIGFmZmVjdHMgY29yZSBicmlkZ2UgbmV0d29ya2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWwgZW52aXJvbm1lbnRzIHdpdGhvdXQgc3BlY2lhbGl6ZWQgaGFyZHdhcmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEyOjE5OjM0LjczODAwMDE3N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg5NjkxMjg5ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjoxOTozNC43Mzg0NTI3MTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1ODk2ODY3MjE2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBicmlkZ2Ugc3Vic3lzdGVtJ3MgQ0ZNIChDb25uZWN0aXZpdHkgRmF1bHQgTWFuYWdlbWVudCkgYW5kIE1SUCAoTWVkaWEgUmVkdW5kYW5jeSBQcm90b2NvbCkgZnJhbWUgZGlzcGF0Y2ggbWVjaGFuaXNtIGJ5IHJlcGxhY2luZyB0aGUgZHluYW1pYyBmcmFtZS10eXBlIGxpbmtlZCBsaXN0IChgZnJhbWVfdHlwZV9saXN0YCkgd2l0aCBiaXQgZmxhZ3MgaW4gdGhlIGV4aXN0aW5nIGJyaWRnZSBvcHRpb25zIGJpdG1hc2sgKGBCUk9QVF9DRk1fRU5BQkxFRGAgYW5kIGBCUk9QVF9NUlBfRU5BQkxFRGApLiBcXG5cXG5ObyBuZXcgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGRhdGEgYnVmZmVycyBhcmUgY3JlYXRlZCBvciBleHBvcnRlZCB0byB1c2VyIHNwYWNlLiBUaGUgbG9naWMgcmVsaWVzIG9uIGFscmVhZHktYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBicmlkZ2Ugc3RydWN0dXJlcyAoYHN0cnVjdCBuZXRfYnJpZGdlYCksIHRvZ2dsaW5nIGFuZCBjaGVja2luZyBleGlzdGluZyBiaXQgZmxhZ3MuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIG9uLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBTdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgY29uZmlndXJhdGlvbnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHJlZ3Jlc3Npb24uIERlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMjgyYTYxODI5YTZiZTdmNTFjYTllYTc2ZDBjNjg3MzFjZTJkMzdiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTI6MTc6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2NmbS5jIGIvbmV0L2JyaWRnZS9icl9jZm0uY1xuaW5kZXggZGVhNTZmZmZhMWMxOS4uOWRjYzk3ZDYzYTZmYyAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfY2ZtLmNcbisrKyBiL25ldC9icmlkZ2UvYnJfY2ZtLmNcbkBAIC0zNjcsNyArMzY3LDcgQEAgc3RhdGljIHUzMiBjY21fdGx2X2V4dHJhY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluZGV4LFxuIH1cbiBcbiAvKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgKi9cbi1zdGF0aWMgaW50IGJyX2NmbV9mcmFtZV9yeChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK2ludCBicl9jZm1fZnJhbWVfcngoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHR1MzIgbWRsZXZlbCwgaW50ZXJ2YWwsIHNpemUsIGluZGV4LCBtYXg7XG4gXHRjb25zdCBzdHJ1Y3QgYnJfY2ZtX2NvbW1vbl9oZHIgKmhkcjtcbkBAIC00ODksMTEgKzQ4OSw2IEBAIHN0YXRpYyBpbnQgYnJfY2ZtX2ZyYW1lX3J4KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBicl9mcmFtZV90eXBlIGNmbV9mcmFtZV90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XG4tXHQudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX0NGTSksXG4tXHQuZnJhbWVfaGFuZGxlciA9IGJyX2NmbV9mcmFtZV9yeCxcbi19O1xuLVxuIGludCBicl9jZm1fbWVwX2NyZWF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gXHRcdCAgICAgIGNvbnN0IHUzMiBpbnN0YW5jZSxcbiBcdFx0ICAgICAgc3RydWN0IGJyX2NmbV9tZXBfY3JlYXRlICpjb25zdCBjcmVhdGUsXG5AQCAtNTU5LDcgKzU1NCw3IEBAIGludCBicl9jZm1fbWVwX2NyZWF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZtZXAtXHUwMDNlY2NtX3R4X2R3b3JrLCBjY21fdHhfd29ya19leHBpcmVkKTtcbiBcbiBcdGlmIChobGlzdF9lbXB0eShcdTAwMjZici1cdTAwM2VtZXBfbGlzdCkpXG4tXHRcdGJyX2FkZF9mcmFtZShiciwgXHUwMDI2Y2ZtX2ZyYW1lX3R5cGUpO1xuK1x0XHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9DRk1fRU5BQkxFRCwgdHJ1ZSk7XG4gXG4gXHRobGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2bWVwLVx1MDAzZWhlYWQsIFx1MDAyNmJyLVx1MDAzZW1lcF9saXN0KTtcbiBcbkBAIC01ODgsNyArNTgzLDcgQEAgc3RhdGljIHZvaWQgbWVwX2RlbGV0ZV9pbXBsZW1lbnRhdGlvbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gXHRrZnJlZV9yY3UobWVwLCByY3UpO1xuIFxuIFx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1lcF9saXN0KSlcbi1cdFx0YnJfZGVsX2ZyYW1lKGJyLCBcdTAwMjZjZm1fZnJhbWVfdHlwZSk7XG4rXHRcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX0NGTV9FTkFCTEVELCBmYWxzZSk7XG4gfVxuIFxuIGludCBicl9jZm1fbWVwX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9kZXZpY2UuYyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmNcbmluZGV4IGZmNTVkYWI3MzYzMjYuLmUwMWM0NGE5MGQ4NGIgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX2RldmljZS5jXG5AQCAtNTAzLDcgKzUwMyw2IEBAIHZvaWQgYnJfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZici1cdTAwM2Vsb2NrKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmJyLVx1MDAzZXBvcnRfbGlzdCk7XG4gXHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2YnItXHUwMDNlZmRiX2xpc3QpO1xuLVx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNmJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCk7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApXG4gXHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2YnItXHUwMDNlbXJwX2xpc3QpO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaW5wdXQuYyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xuaW5kZXggZDg3YTVmOWZhOTJiNy4uNzI4OTJlNWI0MDQzOSAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfaW5wdXQuY1xuKysrIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jXG5AQCAtMzE3LDIwICszMTcsMzMgQEAgc3RhdGljIGludCBuZl9ob29rX2JyaWRnZV9wcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuIFx0cmV0dXJuIFJYX0hBTkRMRVJfQ09OU1VNRUQ7XG4gfVxuIFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfQ0ZNKSB8fCBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTVJQKVxuKy8qIENGTS9NUlAgYXJlIHVuY29tbW9uOyB0ZXN0IGJvdGggZW5hYmxlIGJpdHMgdG9nZXRoZXIgZmlyc3QuICovXG4rI2RlZmluZSBCUl9DRk1fTVJQX09QVFMgXFxcbitcdCgoSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX0NGTSkgPyBCSVQoQlJPUFRfQ0ZNX0VOQUJMRUQpIDogMFVMKSB8IFxcXG4rXHQgKElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9NUlApID8gQklUKEJST1BUX01SUF9FTkFCTEVEKSA6IDBVTCkpXG4rXG4gLyogUmV0dXJuIDAgaWYgdGhlIGZyYW1lIHdhcyBub3QgcHJvY2Vzc2VkIG90aGVyd2lzZSAxXG4gICogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrXG4gICovXG4gc3RhdGljIGludCBicl9wcm9jZXNzX2ZyYW1lX3R5cGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbiBcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBicl9mcmFtZV90eXBlICp0bXA7XG4tXG4tXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodG1wLCBcdTAwMjZwLVx1MDAzZWJyLVx1MDAzZWZyYW1lX3R5cGVfbGlzdCwgbGlzdClcbi1cdFx0aWYgKHVubGlrZWx5KHRtcC1cdTAwM2V0eXBlID09IHNrYi1cdTAwM2Vwcm90b2NvbCkpXG4tXHRcdFx0cmV0dXJuIHRtcC1cdTAwM2VmcmFtZV9oYW5kbGVyKHAsIHNrYik7XG4rXHRzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBwLVx1MDAzZWJyO1xuIFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfQ0ZNKVxuK1x0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9DRk0pIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX0NGTV9FTkFCTEVEKSlcbitcdFx0cmV0dXJuIGJyX2NmbV9mcmFtZV9yeChwLCBza2IpO1xuKyNlbmRpZlxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTVJQKVxuK1x0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9NUlApIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX01SUF9FTkFCTEVEKSlcbitcdFx0cmV0dXJuIGJyX21ycF9wcm9jZXNzKHAsIHNrYik7XG4rI2VuZGlmXG4gXHRyZXR1cm4gMDtcbiB9XG4rI2VuZGlmXG4gXG4gLypcbiAgKiBSZXR1cm4gTlVMTCBpZiBza2IgaXMgaGFuZGxlZFxuQEAgLTQyNSw4ICs0MzgsMTEgQEAgc3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgYnJfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKHVubGlrZWx5KGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShwLCBza2IpKSlcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX0NGTSkgfHwgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX01SUClcbitcdGlmICh1bmxpa2VseSgocC1cdTAwM2Vici1cdTAwM2VvcHRpb25zIFx1MDAyNiBCUl9DRk1fTVJQX09QVFMpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShwLCBza2IpKSlcbiBcdFx0cmV0dXJuIFJYX0hBTkRMRVJfUEFTUztcbisjZW5kaWZcbiBcbiBmb3J3YXJkOlxuIFx0aWYgKGJyX21zdF9pc19lbmFibGVkKHApKVxuQEAgLTQ2NywxOSArNDgzLDMgQEAgcnhfaGFuZGxlcl9mdW5jX3QgKmJyX2dldF9yeF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRyZXR1cm4gYnJfaGFuZGxlX2ZyYW1lO1xuIH1cbi1cbi12b2lkIGJyX2FkZF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdClcbi17XG4tXHRobGlzdF9hZGRfaGVhZF9yY3UoXHUwMDI2ZnQtXHUwMDNlbGlzdCwgXHUwMDI2YnItXHUwMDNlZnJhbWVfdHlwZV9saXN0KTtcbi19XG4tXG4tdm9pZCBicl9kZWxfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQpXG4te1xuLVx0c3RydWN0IGJyX2ZyYW1lX3R5cGUgKnRtcDtcbi1cbi1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgXHUwMDI2YnItXHUwMDNlZnJhbWVfdHlwZV9saXN0LCBsaXN0KVxuLVx0XHRpZiAoZnQgPT0gdG1wKSB7XG4tXHRcdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZmdC1cdTAwM2VsaXN0KTtcbi1cdFx0XHRyZXR1cm47XG4tXHRcdH1cbi19XG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tcnAuYyBiL25ldC9icmlkZ2UvYnJfbXJwLmNcbmluZGV4IGVmMTZkMDcwMzkyNDEuLmRjZTZlZmE5NmM0YzYgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX21ycC5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX21ycC5jXG5AQCAtNiwxMyArNiw2IEBAXG4gc3RhdGljIGNvbnN0IHU4IG1ycF90ZXN0X2RtYWNbRVRIX0FMRU5dID0geyAweDEsIDB4MTUsIDB4NGUsIDB4MCwgMHgwLCAweDEgfTtcbiBzdGF0aWMgY29uc3QgdTggbXJwX2luX3Rlc3RfZG1hY1tFVEhfQUxFTl0gPSB7IDB4MSwgMHgxNSwgMHg0ZSwgMHgwLCAweDAsIDB4MyB9O1xuIFxuLXN0YXRpYyBpbnQgYnJfbXJwX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4tXG4tc3RhdGljIHN0cnVjdCBicl9mcmFtZV90eXBlIG1ycF9mcmFtZV90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XG4tXHQudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX01SUCksXG4tXHQuZnJhbWVfaGFuZGxlciA9IGJyX21ycF9wcm9jZXNzLFxuLX07XG4tXG4gc3RhdGljIGJvb2wgYnJfbXJwX2lzX3JpbmdfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwX3BvcnQsXG4gXHRcdFx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpzX3BvcnQsXG4gXHRcdFx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxuQEAgLTQ4Niw3ICs0NzksNyBAQCBzdGF0aWMgdm9pZCBicl9tcnBfZGVsX2ltcGwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfbXJwICptcnApXG4gXHRrZnJlZV9yY3UobXJwLCByY3UpO1xuIFxuIFx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1ycF9saXN0KSlcbi1cdFx0YnJfZGVsX2ZyYW1lKGJyLCBcdTAwMjZtcnBfZnJhbWVfdHlwZSk7XG4rXHRcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01SUF9FTkFCTEVELCBmYWxzZSk7XG4gfVxuIFxuIC8qIEFkZHMgYSBuZXcgTVJQIGluc3RhbmNlLlxuQEAgLTUzNiw3ICs1MjksNyBAQCBpbnQgYnJfbXJwX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnBfaW5zdGFuY2UgKmluc3RhbmNlKVxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKG1ycC1cdTAwM2VzX3BvcnQsIHApO1xuIFxuIFx0aWYgKGhsaXN0X2VtcHR5KFx1MDAyNmJyLVx1MDAzZW1ycF9saXN0KSlcbi1cdFx0YnJfYWRkX2ZyYW1lKGJyLCBcdTAwMjZtcnBfZnJhbWVfdHlwZSk7XG4rXHRcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01SUF9FTkFCTEVELCB0cnVlKTtcbiBcbiBcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm1ycC1cdTAwM2V0ZXN0X3dvcmssIGJyX21ycF90ZXN0X3dvcmtfZXhwaXJlZCk7XG4gXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZtcnAtXHUwMDNlaW5fdGVzdF93b3JrLCBicl9tcnBfaW5fdGVzdF93b3JrX2V4cGlyZWQpO1xuQEAgLTEyNDEsNyArMTIzNCw3IEBAIHN0YXRpYyBpbnQgYnJfbXJwX3JjdihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuICAqIG5vcm1hbCBmb3J3YXJkaW5nLlxuICAqIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9ja1xuICAqL1xuLXN0YXRpYyBpbnQgYnJfbXJwX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbitpbnQgYnJfbXJwX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHQvKiBJZiB0aGVyZSBpcyBubyBNUlAgaW5zdGFuY2UgZG8gbm9ybWFsIGZvcndhcmRpbmcgKi9cbiBcdGlmIChsaWtlbHkoIXRlc3RfYml0KEJSX01SUF9BV0FSRV9CSVQsIFx1MDAyNnAtXHUwMDNlZmxhZ3MpKSlcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaCBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXG5pbmRleCBkMzM3YjFjZmI5ODBkLi5hZmU3YzBiNGY4ZmE3IDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmhcbisrKyBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oXG5AQCAtNDk1LDEyICs0OTUsMTMgQEAgZW51bSBuZXRfYnJpZGdlX29wdHMge1xuIFx0QlJPUFRfTVNUX0VOQUJMRUQsXG4gXHRCUk9QVF9NREJfT0ZGTE9BRF9GQUlMX05PVElGSUNBVElPTixcbiBcdEJST1BUX0ZEQl9MT0NBTF9WTEFOXzAsXG4rXHRCUk9QVF9DRk1fRU5BQkxFRCxcbitcdEJST1BUX01SUF9FTkFCTEVELFxuIH07XG4gXG4gc3RydWN0IG5ldF9icmlkZ2Uge1xuIFx0c3BpbmxvY2tfdFx0XHRcdGxvY2s7XG4gXHRzcGlubG9ja190XHRcdFx0aGFzaF9sb2NrO1xuLVx0c3RydWN0IGhsaXN0X2hlYWRcdFx0ZnJhbWVfdHlwZV9saXN0O1xuIFx0c3RydWN0IG5ldF9kZXZpY2VcdFx0KmRldjtcbiBcdHVuc2lnbmVkIGxvbmdcdFx0XHRvcHRpb25zO1xuIFx0LyogVGhlc2UgZmllbGRzIGFyZSBhY2Nlc3NlZCBvbiBlYWNoIHBhY2tldCAqL1xuQEAgLTkzMiwxNiArOTMzLDYgQEAgaW50IG5icF9iYWNrdXBfY2hhbmdlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBuZXRfZGV2aWNlICpiYWNrdXBfZGV2KTtcbiBpbnQgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gcnhfaGFuZGxlcl9mdW5jX3QgKmJyX2dldF9yeF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIFxuLXN0cnVjdCBicl9mcmFtZV90eXBlIHtcbi1cdF9fYmUxNlx0XHRcdHR5cGU7XG4tXHRpbnRcdFx0XHQoKmZyYW1lX2hhbmRsZXIpKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXG4tXHRcdFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpO1xuLVx0c3RydWN0IGhsaXN0X25vZGVcdGxpc3Q7XG4tfTtcbi1cbi12b2lkIGJyX2FkZF9mcmFtZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9mcmFtZV90eXBlICpmdCk7XG4tdm9pZCBicl9kZWxfZnJhbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgYnJfZnJhbWVfdHlwZSAqZnQpO1xuLVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBicl9yeF9oYW5kbGVyX2NoZWNrX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHJldHVybiByY3VfZGVyZWZlcmVuY2UoZGV2LVx1MDAzZXJ4X2hhbmRsZXIpID09IGJyX2dldF9yeF9oYW5kbGVyKGRldik7XG5AQCAtMjA4MCw2ICsyMDcxLDcgQEAgaW50IGJyX21ycF9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4gYm9vbCBicl9tcnBfZW5hYmxlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xuIHZvaWQgYnJfbXJwX3BvcnRfZGVsKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCk7XG4gaW50IGJyX21ycF9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcbitpbnQgYnJfbXJwX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBicl9tcnBfcGFyc2Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgbmxhdHRyICphdHRyLCBpbnQgY21kLFxuQEAgLTIxMTEsNiArMjEwMyw3IEBAIGludCBicl9jZm1fcGFyc2Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxuIFx0XHQgc3RydWN0IG5sYXR0ciAqYXR0ciwgaW50IGNtZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiBib29sIGJyX2NmbV9jcmVhdGVkKHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG4gdm9pZCBicl9jZm1fcG9ydF9kZWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKTtcbitpbnQgYnJfY2ZtX2ZyYW1lX3J4KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHN0cnVjdCBza19idWZmICpza2IpO1xuIGludCBicl9jZm1fY29uZmlnX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xuIGludCBicl9jZm1fc3RhdHVzX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMjoxOTozNC43Mzg0NTM2NzdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIxNzYzMDA5NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgQ0ZNL01SUCBGcmFtZSBIYW5kbGluZyBpbiB0aGUgQnJpZGdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBhIHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIG9mIGhvdyBDRk0gKENvbm5lY3Rpdml0eSBGYXVsdCBNYW5hZ2VtZW50KSBhbmQgTVJQIChNdWx0aXBsZSBSZWdpc3RyYXRpb24gUHJvdG9jb2wpIGZyYW1lIGhhbmRsZXJzIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUgYnJpZGdlIGNvZGUgKGBuZXQvYnJpZGdlL2ApLiAgUHJldmlvdXNseSwgd2Ugd2VyZSB1c2luZyBhIGxpbmtlZCBsaXN0IChgZnJhbWVfdHlwZV9saXN0YCkgb24gdGhlIGBuZXRfYnJpZGdlYCBzdHJ1Y3QgdG8gZHluYW1pY2FsbHkgcmVnaXN0ZXIgdGhlc2UgZnJhbWUgdHlwZXMgdmlhIGBicl9hZGRfZnJhbWVgIGFuZCBgYnJfZGVsX2ZyYW1lYCB1c2luZyBgY2ZtX2ZyYW1lX3R5cGVgIGFuZCBgbXJwX2ZyYW1lX3R5cGVgIHN0cnVjdHMuICBOb3csIHRoZSBhcHByb2FjaCBpcyBiZWluZyBzaW1wbGlmaWVkIGFuZCBvcHRpbWl6ZWQuXG5cblRoZSBrZXkgY2hhbmdlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYml0IGZsYWdzIHdpdGhpbiBgbmV0X2JyaWRnZS1cdTAwM2VvcHRpb25zYDogYEJST1BUX0NGTV9FTkFCTEVEYCBhbmQgYEJST1BUX01SUF9FTkFCTEVEYC4gSW5zdGVhZCBvZiB0aGUgbGlua2VkIGxpc3QsIGBicl9wcm9jZXNzX2ZyYW1lX3R5cGVgIGlzIG5vdyB0aGUgY29yZS4gVGhpcyBmdW5jdGlvbiBkaXJlY3RseSBjaGVja3MgdGhlc2Ugb3B0aW9uIGJpdHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gY2FsbCB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlcnM6IGBicl9jZm1fZnJhbWVfcnhgIG9yIGBicl9tcnBfcHJvY2Vzc2AuIFRoZSBgZnJhbWVfdHlwZV9saXN0YCBhbmQgdGhlIGBzdHJ1Y3QgYnJfZnJhbWVfdHlwZWAgYXJlIGJlaW5nIHJlbW92ZWQgYWx0b2dldGhlciwgc3RyZWFtbGluaW5nIHRoZSBjb2RlLiBJbiBgYnJfaGFuZGxlX2ZyYW1lYCwgaXQgY2hlY2tzIGAocC1cdTAwM2Vici1cdTAwM2VvcHRpb25zIFx1MDAyNiBCUl9DRk1fTVJQX09QVFMpIFx1MDAyNlx1MDAyNiBicl9wcm9jZXNzX2ZyYW1lX3R5cGUocCwgc2tiKWAuXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIGluZGl2aWR1YWwgZmlsZXM6XG5cbiogICBJbiBgYnJfY2ZtLmNgLCBgYnJfY2ZtX2ZyYW1lX3J4YCBpcyBubyBsb25nZXIgYHN0YXRpY2AuIFRoZSBgY2ZtX2ZyYW1lX3R5cGVgIHN0cnVjdCBpcyBnb25lLiBUaGUgcmVnaXN0cmF0aW9uIGFuZCBkZS1yZWdpc3RyYXRpb24gb2YgQ0ZNIGZ1bmN0aW9uYWxpdHkgaXMgbm93IGhhbmRsZWQgd2l0aCBgYnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfQ0ZNX0VOQUJMRUQsIHRydWUvZmFsc2UpYCBpbnN0ZWFkIG9mIGBicl9hZGRfZnJhbWVgIGFuZCBgYnJfZGVsX2ZyYW1lYC5cbiogICBgYnJfZGV2aWNlLmNgIHNlZXMgdGhlIHJlbW92YWwgb2YgYElOSVRfSExJU1RfSEVBRChcdTAwMjZici1cdTAwM2VmcmFtZV90eXBlX2xpc3QpO2Agc2luY2UgdGhlIGxpc3QgaXMgbm8gbG9uZ2VyIHJlcXVpcmVkLlxuKiAgIEluIGBicl9pbnB1dC5jYCwgd2UndmUgZ290IHRoZSBkZWZpbml0aW9uIGZvciBgQlJfQ0ZNX01SUF9PUFRTYCBhcyBhIGJpdG1hc2suIFRoZSBgYnJfcHJvY2Vzc19mcmFtZV90eXBlYCBmdW5jdGlvbiBpcyBub3cgY3J1Y2lhbCwgY2hlY2tpbmcgZm9yIHRoZSBjb3JyZWN0IEV0aGVybmV0IHByb3RvY29sIHR5cGVzIChgRVRIX1BfQ0ZNYCBhbmQgYEVUSF9QX01SUGApIGFuZCB0aGUgY29ycmVzcG9uZGluZyBvcHRpb24gZmxhZ3MgYmVmb3JlIGNhbGxpbmcgdGhlIHNwZWNpZmljIGhhbmRsZXIuICBBZ2FpbiwgYGJyX2FkZF9mcmFtZWAgYW5kIGBicl9kZWxfZnJhbWVgIGFyZSByZW1vdmVkLlxuKiAgIGBicl9tcnAuY2AgbWlycm9ycyB0aGVzZSBjaGFuZ2VzLiBUaGUgYG1ycF9mcmFtZV90eXBlYCBpcyByZW1vdmVkLCBhbmQgcmVnaXN0cmF0aW9uIGlzIGRvbmUgdmlhIGBicl9vcHRfdG9nZ2xlYCBhcyB3ZWxsLiBgYnJfbXJwX3Byb2Nlc3NgIGlzIG1hZGUgbm9uLXN0YXRpYy5cbiogICBMYXN0bHksIGluIGBicl9wcml2YXRlLmhgLCB3ZSBoYXZlIHRoZSBuZXcgb3B0aW9uIGZsYWdzIGFkZGVkIHRvIGBlbnVtIG5ldF9icmlkZ2Vfb3B0c2AsIGFuZCB0aGUgcmVtb3ZhbCBvZiB0aGUgb2xkIGRhdGEgc3RydWN0dXJlcy4gVGhlIHJlbGV2YW50IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBhcmUgYWRkZWQuXG5cbk5vdywgYSBxdWljaywgYnV0IGltcG9ydGFudCwgc2VjdXJpdHkgYXVkaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IG9wZW4gYW55IHZ1bG5lcmFiaWxpdGllcy5cblxuKiAgIE5vIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkOyBpdCdzIGFsbCBhYm91dCBwYWNrZXQgcmVjZXB0aW9uIHByb2Nlc3NpbmcgYW5kIGludGVybmFsIG9wdGlvbiBmbGFncy5cbiogICBUaGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQuIFRoZSBgYnItXHUwMDNlb3B0aW9uc2Agc3RydWN0IG1lbWJlciBpcyBwYXJ0IG9mIGBzdHJ1Y3QgbmV0X2JyaWRnZWAgYW5kIGluaXRpYWxpemVkIHZpYSBga3phbGxvY2AuXG4qICAgV2UncmUgbm90IHBhc3NpbmcgdW5pbml0aWFsaXplZCBkYXRhIGFueXdoZXJlLlxuKiAgIE5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHJlbHkgb24gdW5pbml0aWFsaXplZCBkYXRhLlxuKiAgIFRoZSBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgaGFuZGxpbmcgZG9uJ3Qgc2VlbSB0byBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBieXRlIGlzc3Vlcy5cblxuSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYGJyX29wdF90b2dnbGVgIGFuZCBgYnJfb3B0X2dldGAgZnVuY3Rpb25zIHRvIG1ha2Ugc3VyZSB0aGV5J3JlIHdvcmtpbmcgYXMgZXhwZWN0ZWQsIGJ1dCB0aGlzIGxvb2tzIGxpa2UgYSB3ZWxsLXN0cnVjdHVyZWQgYW5kIHBvdGVudGlhbGx5IG1vcmUgZWZmaWNpZW50IGFwcHJvYWNoIHRvIG1hbmFnaW5nIHRoZXNlIGZyYW1lIGhhbmRsZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDEzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MjA6MDYuOTE0NzU4NTAxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzI0MDUyNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfb3B0X1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzY5IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5uZXQvYnJpZGdlL2JyLmM9MjY4PWJyX3RvZ2dsZV9mZGJfbG9jYWxfdmxhbl8wKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYy0yNzItXFxubmV0L2JyaWRnZS9ici5jOjI3MzpcXHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfRkRCX0xPQ0FMX1ZMQU5fMCkgPT0gb24pXFxubmV0L2JyaWRnZS9ici5jLTI3NC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYy0yNzktXFxubmV0L2JyaWRnZS9ici5jOjI4MDpcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9GREJfTE9DQUxfVkxBTl8wLCBvbik7XFxubmV0L2JyaWRnZS9ici5jLTI4MS1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYz0yOTQ9aW50IGJyX2Jvb2xvcHRfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgZW51bSBicl9ib29sb3B0X2lkIG9wdCwgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYy0zMDAtXFx0Y2FzZSBCUl9CT09MT1BUX05PX0xMX0xFQVJOOlxcbm5ldC9icmlkZ2UvYnIuYzozMDE6XFx0XFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTk9fTExfTEVBUk4sIG9uKTtcXG5uZXQvYnJpZGdlL2JyLmMtMzAyLVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2JyaWRnZS9ici5jLTMwOS1cXHRjYXNlIEJSX0JPT0xPUFRfTURCX09GRkxPQURfRkFJTF9OT1RJRklDQVRJT046XFxubmV0L2JyaWRnZS9ici5jOjMxMDpcXHRcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NREJfT0ZGTE9BRF9GQUlMX05PVElGSUNBVElPTiwgb24pO1xcbm5ldC9icmlkZ2UvYnIuYy0zMTEtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvYnJpZGdlL2JyLmM9MzI0PWludCBicl9ib29sb3B0X2dldChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGVudW0gYnJfYm9vbG9wdF9pZCBvcHQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyLmMtMzI3LVxcdGNhc2UgQlJfQk9PTE9QVF9OT19MTF9MRUFSTjpcXG5uZXQvYnJpZGdlL2JyLmM6MzI4OlxcdFxcdHJldHVybiBicl9vcHRfZ2V0KGJyLCBCUk9QVF9OT19MTF9MRUFSTik7XFxubmV0L2JyaWRnZS9ici5jLTMyOS1cXHRjYXNlIEJSX0JPT0xPUFRfTUNBU1RfVkxBTl9TTk9PUElORzpcXG5uZXQvYnJpZGdlL2JyLmM6MzMwOlxcdFxcdHJldHVybiBicl9vcHRfZ2V0KGJyLCBCUk9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HX0VOQUJMRUQpO1xcbm5ldC9icmlkZ2UvYnIuYy0zMzEtXFx0Y2FzZSBCUl9CT09MT1BUX01TVF9FTkFCTEU6XFxubmV0L2JyaWRnZS9ici5jOjMzMjpcXHRcXHRyZXR1cm4gYnJfb3B0X2dldChiciwgQlJPUFRfTVNUX0VOQUJMRUQpO1xcbm5ldC9icmlkZ2UvYnIuYy0zMzMtXFx0Y2FzZSBCUl9CT09MT1BUX01EQl9PRkZMT0FEX0ZBSUxfTk9USUZJQ0FUSU9OOlxcbm5ldC9icmlkZ2UvYnIuYzozMzQ6XFx0XFx0cmV0dXJuIGJyX29wdF9nZXQoYnIsIEJST1BUX01EQl9PRkZMT0FEX0ZBSUxfTk9USUZJQ0FUSU9OKTtcXG5uZXQvYnJpZGdlL2JyLmMtMzM1LVxcdGNhc2UgQlJfQk9PTE9QVF9GREJfTE9DQUxfVkxBTl8wOlxcbm5ldC9icmlkZ2UvYnIuYzozMzY6XFx0XFx0cmV0dXJuIGJyX29wdF9nZXQoYnIsIEJST1BUX0ZEQl9MT0NBTF9WTEFOXzApO1xcbm5ldC9icmlkZ2UvYnIuYy0zMzctXFx0ZGVmYXVsdDpcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYz0zNzU9dm9pZCBicl9ib29sb3B0X211bHRpX2dldChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyLmMtMzg4LS8qIHByaXZhdGUgYnJpZGdlIG9wdGlvbnMsIGNvbnRyb2xsZWQgYnkgdGhlIGtlcm5lbCAqL1xcbm5ldC9icmlkZ2UvYnIuYzozODk6dm9pZCBicl9vcHRfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgZW51bSBuZXRfYnJpZGdlX29wdHMgb3B0LCBib29sIG9uKVxcbm5ldC9icmlkZ2UvYnIuYy0zOTAte1xcbm5ldC9icmlkZ2UvYnIuYzozOTE6XFx0Ym9vbCBjdXIgPSAhIWJyX29wdF9nZXQoYnIsIG9wdCk7XFxubmV0L2JyaWRnZS9ici5jLTM5Mi1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM9Mjc9dm9pZCBicl9yZWNhbGN1bGF0ZV9uZWlnaF9zdXBwcmVzc19lbmFibGVkKHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMzgtXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzozOTpcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9ORUlHSF9TVVBQUkVTU19FTkFCTEVELCBuZWlnaF9zdXBwcmVzcyk7XFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy00MC19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jPTEyNT12b2lkIGJyX2RvX3Byb3h5X3N1cHByZXNzX2FycChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTE2MC1cXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jOjE2MTpcXHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTkVJR0hfU1VQUFJFU1NfRU5BQkxFRCkpIHtcXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jLTE2Mi1cXHRcXHRpZiAoYnJfaXNfbmVpZ2hfc3VwcHJlc3NfZW5hYmxlZChwLCB2aWQpKVxcbi0tXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy0xODYtXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzoxODc6XFx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX05FSUdIX1NVUFBSRVNTX0VOQUJMRUQpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy0xODgtXFx0ICAgIGJyX2lzX2xvY2FsX2lwKHZsYW5kZXYsIHRpcCkpIHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMjI5LVxcdFxcdFxcdGlmIChyZXBsaWVkIHx8XFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYzoyMzA6XFx0XFx0XFx0ICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX05FSUdIX1NVUFBSRVNTX0VOQUJMRUQpKVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmMtMjMxLVxcdFxcdFxcdFxcdEJSX0lOUFVUX1NLQl9DQihza2IpLVxcdTAwM2Vwcm94eWFycF9yZXBsaWVkID0gMTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfYXJwX25kX3Byb3h5LmM9NDE1PXZvaWQgYnJfZG9fc3VwcHJlc3NfbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy01MDMtXFx0XFx0XFx0aWYgKHJlcGxpZWQgfHxcXG5uZXQvYnJpZGdlL2JyX2FycF9uZF9wcm94eS5jOjUwNDpcXHRcXHRcXHQgICAgYnJfb3B0X2dldChiciwgQlJPUFRfTkVJR0hfU1VQUFJFU1NfRU5BQkxFRCkpXFxubmV0L2JyaWRnZS9icl9hcnBfbmRfcHJveHkuYy01MDUtXFx0XFx0XFx0XFx0QlJfSU5QVVRfU0tCX0NCKHNrYiktXFx1MDAzZXByb3h5YXJwX3JlcGxpZWQgPSAxO1xcbi0tXFxubmV0L2JyaWRnZS9icl9jZm0uYz00OTI9aW50IGJyX2NmbV9tZXBfY3JlYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfY2ZtLmMtNTU2LVxcdGlmIChobGlzdF9lbXB0eShcXHUwMDI2YnItXFx1MDAzZW1lcF9saXN0KSlcXG5uZXQvYnJpZGdlL2JyX2NmbS5jOjU1NzpcXHRcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9DRk1fRU5BQkxFRCwgdHJ1ZSk7XFxubmV0L2JyaWRnZS9icl9jZm0uYy01NTgtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2NmbS5jPTU2ND1zdGF0aWMgdm9pZCBtZXBfZGVsZXRlX2ltcGxlbWVudGF0aW9uKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfY2ZtLmMtNTg1LVxcdGlmIChobGlzdF9lbXB0eShcXHUwMDI2YnItXFx1MDAzZW1lcF9saXN0KSlcXG5uZXQvYnJpZGdlL2JyX2NmbS5jOjU4NjpcXHRcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9DRk1fRU5BQkxFRCwgZmFsc2UpO1xcbm5ldC9icmlkZ2UvYnJfY2ZtLmMtNTg3LX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM9MzA9bmV0ZGV2X3R4X3QgYnJfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtNzQtXFx0ICAgICBldGhfaGRyKHNrYiktXFx1MDAzZWhfcHJvdG8gPT0gaHRvbnMoRVRIX1BfUkFSUCkpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYzo3NTpcXHQgICAgYnJfb3B0X2dldChiciwgQlJPUFRfTkVJR0hfU1VQUFJFU1NfRU5BQkxFRCkpIHtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTc2LVxcdFxcdGJyX2RvX3Byb3h5X3N1cHByZXNzX2FycChza2IsIGJyLCB2aWQsIE5VTEwpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy03OC1cXHRcXHQgICBza2ItXFx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYzo3OTpcXHRcXHQgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9ORUlHSF9TVVBQUkVTU19FTkFCTEVEKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtODAtXFx0XFx0ICAgcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgK1xcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0xNjQ9c3RhdGljIGludCBicl9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNzItXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYzoxNzM6XFx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSlcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE3NC1cXHRcXHRicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhicik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTE4OT1zdGF0aWMgaW50IGJyX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE5NS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE5NjpcXHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpKVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTk3LVxcdFxcdGJyX211bHRpY2FzdF9sZWF2ZV9zbm9vcGVycyhicik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTIwND1zdGF0aWMgaW50IGJyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTIxMC1cXHQvKiB0aGlzIGZsYWcgd2lsbCBiZSBjbGVhcmVkIGlmIHRoZSBNVFUgd2FzIGF1dG9tYXRpY2FsbHkgYWRqdXN0ZWQgKi9cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjIxMTpcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NVFVfU0VUX0JZX1VTRVIsIHRydWUpO1xcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMjEyLSNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbi0tXFxubmV0L2JyaWRnZS9icl9mZGIuYz00NjA9dm9pZCBicl9mZGJfY2hhbmdlYWRkcihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXdhZGRyKVxcbi0tXFxubmV0L2JyaWRnZS9icl9mZGIuYy00NjctXFxubmV0L2JyaWRnZS9icl9mZGIuYzo0Njg6XFx0bG9jYWxfdmxhbl8wID0gYnJfb3B0X2dldChiciwgQlJPUFRfRkRCX0xPQ0FMX1ZMQU5fMCk7XFxubmV0L2JyaWRnZS9icl9mZGIuYy00NjktXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2ZkYi5jPTUwNj12b2lkIGJyX2ZkYl9jaGFuZ2VfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBjb25zdCB1OCAqbmV3YWRkcilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZmRiLmMtNTEyLVxcbm5ldC9icmlkZ2UvYnJfZmRiLmM6NTEzOlxcdGxvY2FsX3ZsYW5fMCA9IGJyX29wdF9nZXQoYnIsIEJST1BUX0ZEQl9MT0NBTF9WTEFOXzApO1xcbm5ldC9icmlkZ2UvYnJfZmRiLmMtNTE0LVxcbi0tXFxubmV0L2JyaWRnZS9icl9pZi5jPTUyMD12b2lkIGJyX210dV9hdXRvX2FkanVzdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lmLmMtNTI0LVxcdC8qIGlmIHRoZSBicmlkZ2UgTVRVIHdhcyBtYW51YWxseSBjb25maWd1cmVkIGRvbid0IG1lc3Mgd2l0aCBpdCAqL1xcbm5ldC9icmlkZ2UvYnJfaWYuYzo1MjU6XFx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01UVV9TRVRfQllfVVNFUikpXFxubmV0L2JyaWRnZS9icl9pZi5jLTUyNi1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lmLmMtNTMxLVxcdGRldl9zZXRfbXR1KGJyLVxcdTAwM2VkZXYsIGJyX210dV9taW4oYnIpKTtcXG5uZXQvYnJpZGdlL2JyX2lmLmM6NTMyOlxcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01UVV9TRVRfQllfVVNFUiwgZmFsc2UpO1xcbm5ldC9icmlkZ2UvYnJfaWYuYy01MzMtfVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTc2PWludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTE3NC1cXHRcXHQgICBza2ItXFx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjE3NTpcXHRcXHQgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9ORUlHSF9TVVBQUkVTU19FTkFCTEVEKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xNzYtXFx0XFx0ICAgcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgK1xcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTIwNS1cXHRcXHRpZiAodW5saWtlbHkoIWRzdCBcXHUwMDI2XFx1MDAyNiB2aWQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6MjA2OlxcdFxcdFxcdCAgICAgYnJfb3B0X2dldChiciwgQlJPUFRfRkRCX0xPQ0FMX1ZMQU5fMCkpKSB7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTIwNy1cXHRcXHRcXHRkc3QgPSBicl9mZGJfZmluZF9yY3UoYnIsIGV0aF9oZHIoc2tiKS1cXHUwMDNlaF9kZXN0LCAwKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYz0yNDU9c3RhdGljIHZvaWQgX19icl9oYW5kbGVfbG9jYWxfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMjUyLVxcdCAgICBuYnBfc3RhdGVfc2hvdWxkX2xlYXJuKHApIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjI1MzpcXHQgICAgIWJyX29wdF9nZXQocC1cXHUwMDNlYnIsIEJST1BUX05PX0xMX0xFQVJOKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0yNTQtXFx0ICAgIGJyX3Nob3VsZF9sZWFybihwLCBza2IsIFxcdTAwMjZ2aWQpKVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTMyOT1zdGF0aWMgaW50IGJyX3Byb2Nlc3NfZnJhbWVfdHlwZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTMzNS1cXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9DRk0pIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjMzNjpcXHQgICAgYnJfb3B0X2dldChiciwgQlJPUFRfQ0ZNX0VOQUJMRUQpKVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zMzctXFx0XFx0cmV0dXJuIGJyX2NmbV9mcmFtZV9yeChwLCBza2IpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTM0MC1cXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9NUlApIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjM0MTpcXHQgICAgYnJfb3B0X2dldChiciwgQlJPUFRfTVJQX0VOQUJMRUQpKVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0zNDItXFx0XFx0cmV0dXJuIGJyX21ycF9wcm9jZXNzKHAsIHNrYik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTcwOD1fX2JyX21kYl9jaG9vc2VfY29udGV4dChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jLTcxNC1cXG5uZXQvYnJpZGdlL2JyX21kYi5jOjcxNTpcXHRpZiAoIWJyX29wdF9nZXQoYnIsIEJST1BUX01DQVNUX1ZMQU5fU05PT1BJTkdfRU5BQkxFRCkpIHtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTcxNi1cXHRcXHRicm1jdHggPSBcXHUwMDI2YnItXFx1MDAzZW11bHRpY2FzdF9jdHg7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTEyMzE9c3RhdGljIGludCBicl9tZGJfY29uZmlnX2luaXQoc3RydWN0IGJyX21kYl9jb25maWcgKmNmZywgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTI0OC1cXG5uZXQvYnJpZGdlL2JyX21kYi5jOjEyNDk6XFx0aWYgKCFicl9vcHRfZ2V0KGNmZy1cXHUwMDNlYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSkge1xcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTI1MC1cXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiQnJpZGdlJ3MgbXVsdGljYXN0IHByb2Nlc3NpbmcgaXMgZGlzYWJsZWRcXFwiKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwLmM9NDE5PXN0YXRpYyB2b2lkIGJyX21ycF9kZWxfaW1wbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBicl9tcnAgKm1ycClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwLmMtNDgxLVxcdGlmIChobGlzdF9lbXB0eShcXHUwMDI2YnItXFx1MDAzZW1ycF9saXN0KSlcXG5uZXQvYnJpZGdlL2JyX21ycC5jOjQ4MjpcXHRcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NUlBfRU5BQkxFRCwgZmFsc2UpO1xcbm5ldC9icmlkZ2UvYnJfbXJwLmMtNDgzLX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXJwLmM9NDg4PWludCBicl9tcnBfYWRkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IGJyX21ycF9pbnN0YW5jZSAqaW5zdGFuY2UpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21ycC5jLTUzMS1cXHRpZiAoaGxpc3RfZW1wdHkoXFx1MDAyNmJyLVxcdTAwM2VtcnBfbGlzdCkpXFxubmV0L2JyaWRnZS9icl9tcnAuYzo1MzI6XFx0XFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTVJQX0VOQUJMRUQsIHRydWUpO1xcbm5ldC9icmlkZ2UvYnJfbXJwLmMtNTMzLVxcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYz0xNj1ib29sIGJyX21zdF9lbmFibGVkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTIwLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MjE6XFx0cmV0dXJuIGJyX29wdF9nZXQobmV0ZGV2X3ByaXYoZGV2KSwgQlJPUFRfTVNUX0VOQUJMRUQpO1xcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjItfVxcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYz0yNT12b2lkIGJyX21zdF91bmluaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjYte1xcbm5ldC9icmlkZ2UvYnJfbXN0LmM6Mjc6XFx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01TVF9FTkFCTEVEKSlcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTI4LVxcdFxcdHN0YXRpY19icmFuY2hfZGVjKFxcdTAwMjZicl9tc3RfdXNlZCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jPTMxPWludCBicl9tc3RfZ2V0X2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IG1zdGksIHVuc2lnbmVkIGxvbmcgKnZpZHMpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTQyLVxcdGJyID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG5uZXQvYnJpZGdlL2JyX21zdC5jOjQzOlxcdGlmICghYnJfb3B0X2dldChiciwgQlJPUFRfTVNUX0VOQUJMRUQpKVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtNDQtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jPTU3PWludCBicl9tc3RfZ2V0X3N0YXRlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBtc3RpLCB1OCAqc3RhdGUpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTY1LVxcdHAgPSBicl9wb3J0X2dldF9jaGVja19ydG5sKGRldik7XFxubmV0L2JyaWRnZS9icl9tc3QuYzo2NjpcXHRpZiAoIXAgfHwgIWJyX29wdF9nZXQocC1cXHUwMDNlYnIsIEJST1BUX01TVF9FTkFCTEVEKSlcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTY3LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYz0yMDM9aW50IGJyX21zdF9zZXRfZW5hYmxlZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGJvb2wgb24sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jLTIyNS1cXG5uZXQvYnJpZGdlL2JyX21zdC5jOjIyNjpcXHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTVNUX0VOQUJMRUQpID09IG9uKVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMjI3LVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tc3QuYy0yMzctXFxubmV0L2JyaWRnZS9icl9tc3QuYzoyMzg6XFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTVNUX0VOQUJMRUQsIG9uKTtcXG5uZXQvYnJpZGdlL2JyX21zdC5jLTIzOS1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM9MzM0PWludCBicl9tc3RfcHJvY2VzcyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICptc3RfYXR0cixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmMtMzQwLVxcbm5ldC9icmlkZ2UvYnJfbXN0LmM6MzQxOlxcdGlmICghYnJfb3B0X2dldChwLVxcdTAwM2ViciwgQlJPUFRfTVNUX0VOQUJMRUQpKSB7XFxubmV0L2JyaWRnZS9icl9tc3QuYy0zNDItXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkNhbid0IG1vZGlmeSBNU1Qgc3RhdGUgd2hlbiBNU1QgaXMgZGlzYWJsZWRcXFwiKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTQ5PWJyX21kYl9lbnRyeV9za2JfZ2V0KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE1NC1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjE1NTpcXHRpZiAoIWJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSB8fFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTU2LVxcdCAgICBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKGJybWN0eCkpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxMD1icl9tdWx0aWNhc3RfcGdfdG9fcG9ydF9jdHgoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcGcpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxOC1cXHRpZiAoIXBnLVxcdTAwM2VrZXkuYWRkci52aWQgfHxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIxOTpcXHQgICAgIWJyX29wdF9nZXQocGctXFx1MDAzZWtleS5wb3J0LVxcdTAwM2ViciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMC1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9OTI0PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYnJfaXA0X211bHRpY2FzdF9hbGxvY19xdWVyeShzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy05OTUtXFx0aXBoLVxcdTAwM2Vwcm90b2NvbCA9IElQUFJPVE9fSUdNUDtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjk5NjpcXHRpcGgtXFx1MDAzZXNhZGRyID0gYnJfb3B0X2dldChicm1jdHgtXFx1MDAzZWJyLCBCUk9QVF9NVUxUSUNBU1RfUVVFUllfVVNFX0lGQUREUikgP1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtOTk3LVxcdFxcdCAgICAgaW5ldF9zZWxlY3RfYWRkcihicm1jdHgtXFx1MDAzZWJyLVxcdTAwM2VkZXYsIDAsIFJUX1NDT1BFX0xJTkspIDogMDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTA2OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmJyX2lwNl9tdWx0aWNhc3RfYWxsb2NfcXVlcnkoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTE0My1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjExNDQ6XFx0XFx0YnJfb3B0X3RvZ2dsZShicm1jdHgtXFx1MDAzZWJyLCBCUk9QVF9IQVNfSVBWNl9BRERSLCBmYWxzZSk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xMTQ1LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xMTQ3LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTE0ODpcXHRicl9vcHRfdG9nZ2xlKGJybWN0eC1cXHUwMDNlYnIsIEJST1BUX0hBU19JUFY2X0FERFIsIHRydWUpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTE0OS1cXHRpcHY2X2V0aF9tY19tYXAoXFx1MDAyNmlwNmgtXFx1MDAzZWRhZGRyLCBldGgtXFx1MDAzZWhfZGVzdCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTEyNjk9c3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICpicl9tdWx0aWNhc3RfbmV3X2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTI4MS1cXHRcXHRicl9tY19kaXNhYmxlZF91cGRhdGUoYnItXFx1MDAzZWRldiwgZmFsc2UsIE5VTEwpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTI4MjpcXHRcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCwgZmFsc2UpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTI4My1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRTJCSUcpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xNzIzPXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9xdWVyaWVyX2V4cGlyZWQoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTcyOC1cXHQgICAgYnJfbXVsdGljYXN0X2N0eF92bGFuX2dsb2JhbF9kaXNhYmxlZChicm1jdHgpIHx8XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxNzI5OlxcdCAgICAhYnJfb3B0X2dldChicm1jdHgtXFx1MDAzZWJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNzMwLVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xODk5PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9zZW5kX3F1ZXJ5KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE5MDgtXFx0aWYgKCFicl9tdWx0aWNhc3RfY3R4X3Nob3VsZF91c2UoYnJtY3R4LCBwbWN0eCkgfHxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjE5MDk6XFx0ICAgICFicl9vcHRfZ2V0KGJybWN0eC1cXHUwMDNlYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSB8fFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTkxMC1cXHQgICAgIWJybWN0eC1cXHUwMDNlbXVsdGljYXN0X3F1ZXJpZXIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTE5ODc9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfcmV4bWl0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xOTk4LVxcdGlmICghbmV0aWZfcnVubmluZyhici1cXHUwMDNlZGV2KSB8fCBobGlzdF91bmhhc2hlZChcXHUwMDI2cGctXFx1MDAzZW1nbGlzdCkgfHxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjE5OTk6XFx0ICAgICFicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMDAwLVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTAzPWludCBicl9tdWx0aWNhc3RfYWRkX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjExMC1cXHRlcnIgPSBicl9tY19kaXNhYmxlZF91cGRhdGUocG9ydC1cXHUwMDNlZGV2LFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjExMTpcXHRcXHRcXHRcXHQgICAgYnJfb3B0X2dldChwb3J0LVxcdTAwM2VicixcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxMTItXFx0XFx0XFx0XFx0XFx0ICAgICAgIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjE0OT1zdGF0aWMgdm9pZCBfX2JyX211bHRpY2FzdF9lbmFibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNTQtXFx0YnJtY3R4ID0gYnJfbXVsdGljYXN0X3BvcnRfY3R4X2dldF9nbG9iYWwocG1jdHgpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjE1NTpcXHRpZiAoIWJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSB8fFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE1Ni1cXHQgICAgIW5ldGlmX3J1bm5pbmcoYnItXFx1MDAzZWRldikpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIyMjE9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3RvZ2dsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIGJvb2wgb24pXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMjMtI2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklORylcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMjQ6XFx0aWYgKGJyX29wdF9nZXQocG9ydC1cXHUwMDNlYnIsIEJST1BUX01DQVNUX1ZMQU5fU05PT1BJTkdfRU5BQkxFRCkpIHtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMjUtXFx0XFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIyOTE9c3RhdGljIHZvaWQgX19ncnBfc3JjX3F1ZXJ5X21hcmtlZF9hbmRfcmV4bWl0KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIzMDAtXFx0aWYgKCFuZXRpZl9ydW5uaW5nKGJybWN0eC1cXHUwMDNlYnItXFx1MDAzZWRldikgfHxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIzMDE6XFx0ICAgICFicl9vcHRfZ2V0KGJybWN0eC1cXHUwMDNlYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIzMDItXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMzM4PXN0YXRpYyB2b2lkIF9fZ3JwX3NlbmRfcXVlcnlfYW5kX3JleG1pdChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMzQ1LVxcdGlmICghbmV0aWZfcnVubmluZyhicm1jdHgtXFx1MDAzZWJyLVxcdTAwM2VkZXYpIHx8XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMzQ2OlxcdCAgICAhYnJfb3B0X2dldChicm1jdHgtXFx1MDAzZWJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMzQ3LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MzI0ND1pbnQgYnJfbXVsdGljYXN0X2R1bXBfcXVlcmllcl9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zMjUxLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MzI1MjpcXHRpZiAoIWJyX29wdF9nZXQoYnJtY3R4LVxcdTAwM2ViciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpIHx8XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zMjUzLVxcdCAgICBicl9tdWx0aWNhc3RfY3R4X3ZsYW5fZ2xvYmFsX2Rpc2FibGVkKGJybWN0eCkpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTM4Njg9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Vycl9jb3VudChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM4NzQtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozODc1OlxcdGlmICghYnJfb3B0X2dldChiciwgQlJPUFRfTVVMVElDQVNUX1NUQVRTX0VOQUJMRUQpKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzg3Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQwNTc9aW50IGJyX211bHRpY2FzdF9yY3Yoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKipicm1jdHgsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQwNjYtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MDY3OlxcdGlmICghYnJfb3B0X2dldCgoKmJybWN0eCktXFx1MDAzZWJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MDY4LVxcdFxcdHJldHVybiAwO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDA2OS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQwNzA6XFx0aWYgKGJyX29wdF9nZXQoKCpicm1jdHgpLVxcdTAwM2ViciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSBcXHUwMDI2XFx1MDAyNiB2bGFuKSB7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MDcxLVxcdFxcdGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnY7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQyMDY9dm9pZCBicl9tdWx0aWNhc3RfaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQyMTEtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MjEyOlxcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVELCB0cnVlKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQyMTM6XFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfSEFTX0lQVjZfQUREUiwgdHJ1ZSk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MjE0LVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MjgzPXN0YXRpYyB2b2lkIF9fYnJfbXVsdGljYXN0X29wZW5fcXVlcnkoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Mjg3LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDI4ODpcXHRpZiAoIWJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQyODktXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MzAyPXZvaWQgYnJfbXVsdGljYXN0X29wZW4oc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzA1LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDMwNjpcXHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSkge1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDMwNy1cXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZztcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDM0MD12b2lkIGJyX211bHRpY2FzdF91cGRhdGVfdmxhbl9tY2FzdF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTggc3RhdGUpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNTItXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MzUzOlxcdGlmICghYnJfb3B0X2dldChiciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNTQtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NDMxPWludCBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3Bpbmcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBib29sIG9uLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDM3LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQzODpcXHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSA9PSBvbilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0MzktXFx0XFx0cmV0dXJuIDA7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDQwLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQ0MTpcXHRpZiAob24gXFx1MDAyNlxcdTAwMjYgIWJyX29wdF9nZXQoYnIsIEJST1BUX1ZMQU5fRU5BQkxFRCkpIHtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0NDItXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkNhbm5vdCBlbmFibGUgbXVsdGljYXN0IHZsYW4gc25vb3Bpbmcgd2l0aCB2bGFuIGZpbHRlcmluZyBkaXNhYmxlZFxcXCIpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDQ5LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDQ1MDpcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HX0VOQUJMRUQsIG9uKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0NTEtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ0ODY9dm9pZCBicl9tdWx0aWNhc3Rfc3RvcChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ0ODktXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NDkwOlxcdGlmIChicl9vcHRfZ2V0KGJyLCBCUk9QVF9NQ0FTVF9WTEFOX1NOT09QSU5HX0VOQUJMRUQpKSB7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDkxLVxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NzA4PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9lbmFibGVfYWxsX3BvcnRzKHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDcxMS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ3MTI6XFx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01DQVNUX1ZMQU5fU05PT1BJTkdfRU5BQkxFRCkpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzEzLVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDcxOT1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9hbGxfcG9ydHMoc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzIyLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDcyMzpcXHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ3MjQtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00NzMwPWludCBicl9tdWx0aWNhc3RfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ3MzYtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDczNzpcXHRpZiAoISFicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkgPT0gISF2YWwpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzM4LVxcdFxcdGdvdG8gdW5sb2NrO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzQ1LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDc0NjpcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCwgISF2YWwpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDc0NzpcXHRpZiAoIWJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSkge1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDc0OC1cXHRcXHRjaGFuZ2Vfc25vb3BlcnMgPSB0cnVlO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00Nzc2LVxcdGlmIChjaGFuZ2Vfc25vb3BlcnMpIHtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ3Nzc6XFx0XFx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ3NzgtXFx0XFx0XFx0YnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMoYnIpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00Nzg2PWJvb2wgYnJfbXVsdGljYXN0X2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDc4OS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ3OTA6XFx0cmV0dXJuICEhYnJfb3B0X2dldChiciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDc5MS19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTUyMDc9dm9pZCBicl9tdWx0aWNhc3RfY291bnQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy01MjEzLVxcdC8qIGlmIG11bHRpY2FzdF9kaXNhYmxlZCBpcyB0cnVlIHRoZW4gaWdtcCB0eXBlIGNhbid0IGJlIHNldCAqL1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NTIxNDpcXHRpZiAoIXR5cGUgfHwgIWJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9TVEFUU19FTkFCTEVEKSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTUyMTUtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz00ODM9c3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9wcmVfcm91dGluZyh2b2lkICpwcml2LFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MDQtXFx0XFx0aWYgKCFicm5ldC1cXHUwMDNlY2FsbF9pcDZ0YWJsZXMgXFx1MDAyNlxcdTAwMjZcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjUwNTpcXHRcXHQgICAgIWJyX29wdF9nZXQoYnIsIEJST1BUX05GX0NBTExfSVA2VEFCTEVTKSlcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTUwNi1cXHRcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MTUtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo1MTY6XFx0aWYgKCFicm5ldC1cXHUwMDNlY2FsbF9pcHRhYmxlcyBcXHUwMDI2XFx1MDAyNiAhYnJfb3B0X2dldChiciwgQlJPUFRfTkZfQ0FMTF9JUFRBQkxFUykpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MTctXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9NzI4PXN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfZm9yd2FyZF9hcnAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzQxLVxcdGJybmV0ID0gbmV0X2dlbmVyaWMoc3RhdGUtXFx1MDAzZW5ldCwgYnJuZl9uZXRfaWQpO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NzQyOlxcdGlmICghYnJuZXQtXFx1MDAzZWNhbGxfYXJwdGFibGVzIFxcdTAwMjZcXHUwMDI2ICFicl9vcHRfZ2V0KGJyLCBCUk9QVF9ORl9DQUxMX0FSUFRBQkxFUykpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy03NDMtXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTQ1OD1zdGF0aWMgaW50IGJyX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy01OTQtXFx0aWYgKChmaWx0ZXJfbWFzayBcXHUwMDI2IFJURVhUX0ZJTFRFUl9NU1QpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6NTk1OlxcdCAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9NU1RfRU5BQkxFRCkgXFx1MDAyNlxcdTAwMjYgcG9ydCkge1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTU5Ni1cXHRcXHRjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZyA9IG5icF92bGFuX2dyb3VwKHBvcnQpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9MTI5NT1zdGF0aWMgaW50IGJyX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmJyZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTQyNC1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YnItXFx1MDAzZWxvY2spO1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE0MjU6XFx0XFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfR1JPVVBfQUREUl9TRVQsIHRydWUpO1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE0MjYtXFx0XFx0YnJfcmVjYWxjdWxhdGVfZndkX21hc2soYnIpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTQ1OC1cXHRcXHR2YWwgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9CUl9NQ0FTVF9RVUVSWV9VU0VfSUZBRERSXSk7XFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTQ1OTpcXHRcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NVUxUSUNBU1RfUVVFUllfVVNFX0lGQUREUiwgISF2YWwpO1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE0NjAtXFx0fVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTUyOS1cXHRcXHRtY2FzdF9zdGF0cyA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0JSX01DQVNUX1NUQVRTX0VOQUJMRURdKTtcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxNTMwOlxcdFxcdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01VTFRJQ0FTVF9TVEFUU19FTkFCTEVELCAhIW1jYXN0X3N0YXRzKTtcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNTMxLVxcdH1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE1NTgtXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTU1OTpcXHRcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9ORl9DQUxMX0lQVEFCTEVTLCAhIXZhbCk7XFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTU2MC1cXHR9XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNTY0LVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE1NjU6XFx0XFx0YnJfb3B0X3RvZ2dsZShiciwgQlJPUFRfTkZfQ0FMTF9JUDZUQUJMRVMsICEhdmFsKTtcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNTY2LVxcdH1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE1NzAtXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTU3MTpcXHRcXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9ORl9DQUxMX0FSUFRBQkxFUywgISF2YWwpO1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE1NzItXFx0fVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9MTY3OD1zdGF0aWMgaW50IGJyX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqYnJkZXYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNzM0LVxcdCAgICBubGFfcHV0X3U4KHNrYiwgSUZMQV9CUl9WTEFOX1NUQVRTX0VOQUJMRUQsXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTczNTpcXHRcXHQgICAgICAgYnJfb3B0X2dldChiciwgQlJPUFRfVkxBTl9TVEFUU19FTkFCTEVEKSkgfHxcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNzM2LVxcdCAgICBubGFfcHV0X3U4KHNrYiwgSUZMQV9CUl9WTEFOX1NUQVRTX1BFUl9QT1JULFxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE3Mzc6XFx0XFx0ICAgICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX1ZMQU5fU1RBVFNfUEVSX1BPUlQpKSlcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNzM4LVxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNzQzLVxcdCAgICBubGFfcHV0X3U4KHNrYiwgSUZMQV9CUl9NQ0FTVF9TTk9PUElORyxcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxNzQ0OlxcdFxcdCAgICAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpIHx8XFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTc0NS1cXHQgICAgbmxhX3B1dF91OChza2IsIElGTEFfQlJfTUNBU1RfUVVFUllfVVNFX0lGQUREUixcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxNzQ2OlxcdFxcdCAgICAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfUVVFUllfVVNFX0lGQUREUikpIHx8XFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTc0Ny1cXHQgICAgbmxhX3B1dF91OChza2IsIElGTEFfQlJfTUNBU1RfUVVFUklFUixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE3NDktXFx0ICAgIG5sYV9wdXRfdTgoc2tiLCBJRkxBX0JSX01DQVNUX1NUQVRTX0VOQUJMRUQsXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTc1MDpcXHRcXHQgICAgICAgYnJfb3B0X2dldChiciwgQlJPUFRfTVVMVElDQVNUX1NUQVRTX0VOQUJMRUQpKSB8fFxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE3NTEtXFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9CUl9NQ0FTVF9IQVNIX0VMQVNUSUNJVFksIFJIVF9FTEFTVElDSVRZKSB8fFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTc5My1cXHRpZiAobmxhX3B1dF91OChza2IsIElGTEFfQlJfTkZfQ0FMTF9JUFRBQkxFUyxcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxNzk0OlxcdFxcdCAgICAgICBicl9vcHRfZ2V0KGJyLCBCUk9QVF9ORl9DQUxMX0lQVEFCTEVTKSA/IDEgOiAwKSB8fFxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE3OTUtXFx0ICAgIG5sYV9wdXRfdTgoc2tiLCBJRkxBX0JSX05GX0NBTExfSVA2VEFCTEVTLFxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE3OTY6XFx0XFx0ICAgICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX05GX0NBTExfSVA2VEFCTEVTKSA/IDEgOiAwKSB8fFxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE3OTctXFx0ICAgIG5sYV9wdXRfdTgoc2tiLCBJRkxBX0JSX05GX0NBTExfQVJQVEFCTEVTLFxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE3OTg6XFx0XFx0ICAgICAgIGJyX29wdF9nZXQoYnIsIEJST1BUX05GX0NBTExfQVJQVEFCTEVTKSA/IDEgOiAwKSlcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNzk5LVxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD03NTc9c3RhdGljIGlubGluZSBpbnQgYnJfYWZzcGVjX2NtZF90b19ydG0oaW50IGNtZClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTc2OC1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo3Njk6c3RhdGljIGlubGluZSBpbnQgYnJfb3B0X2dldChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNzcwLVxcdFxcdFxcdCAgICAgZW51bSBuZXRfYnJpZGdlX29wdHMgb3B0KVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9NzgxPXZvaWQgYnJfYm9vbG9wdF9tdWx0aV9nZXQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTc4Mi1cXHRcXHRcXHQgIHN0cnVjdCBicl9ib29sb3B0X211bHRpICpibSk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NzgzOnZvaWQgYnJfb3B0X3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGVudW0gbmV0X2JyaWRnZV9vcHRzIG9wdCwgYm9vbCBvbik7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNzg0LVxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTE1OD1fX2JyX211bHRpY2FzdF9xdWVyaWVyX2V4aXN0cyhzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTE2NC1cXHRpZiAoYnJtY3R4LVxcdTAwM2VtdWx0aWNhc3RfcXVlcmllcikge1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjExNjU6XFx0XFx0aWYgKGlzX2lwdjYgXFx1MDAyNlxcdTAwMjYgIWJyX29wdF9nZXQoYnJtY3R4LVxcdTAwM2ViciwgQlJPUFRfSEFTX0lQVjZfQUREUikpXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTE2Ni1cXHRcXHRcXHRvd25fcXVlcmllcl9lbmFibGVkID0gZmFsc2U7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMjYzPWJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEyNjUtXFx0cmV0dXJuIGJyX211bHRpY2FzdF9jdHhfaXNfdmxhbihicm1jdHgpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTI2NjpcXHQgICAgICAgKCFicl9vcHRfZ2V0KGJybWN0eC1cXHUwMDNlYnIsIEJST1BUX01DQVNUX1ZMQU5fU05PT1BJTkdfRU5BQkxFRCkgfHxcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MjA6MDcuMjQ3MTcyODg2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NDU5OTMzNTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IEEgQ2xlYW4gT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgdGhpcyBvdmVyLCBhbmQgaXQncyBwcmV0dHkgY2xlYXItY3V0LiBUaGlzIHBhdGNoIGlzIGFsbCBhYm91dCB0aWR5aW5nIHVwIHRoZSBicmlkZ2UncyBwYWNrZXQgaW5wdXQgcGF0aC4gVGhlIGdpc3QgaXMgcmVtb3ZpbmcgdGhlIG9sZCBkeW5hbWljIGZyYW1lIGhhbmRsZXIgc3lzdGVtIChgYnJfZnJhbWVfdHlwZWAgYW5kIHRoZSBsaW5rZWQgbGlzdCkgYW5kIHJlcGxhY2luZyBpdCB3aXRoIGRpcmVjdCwgc3RhdGljIGNoZWNrcyBhZ2FpbnN0IHRoZSBicmlkZ2UncyBgb3B0aW9uc2AgYml0bWFzay4gV2UncmUgdGFsa2luZyBgQlJPUFRfQ0ZNX0VOQUJMRURgIGFuZCBgQlJPUFRfTVJQX0VOQUJMRURgIGZsYWdzLCBub3RoaW5nIGZhbmN5LlxuXG5Gcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGlzIGlzIGEgcHVyZSByZWZhY3RvcmluZyBhbmQgb3B0aW1pemF0aW9uIGVmZm9ydC4gVGhlcmUgYXJlbid0IGFueSBuZXcgc3RydWN0cyBiZWluZyBleHBvc2VkIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCB0aGluZy4gSSBjYW4ndCBzcG90IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBicmFuY2hlcywgYW5kIGRlZmluaXRlbHkgbm8gbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIGZpZWxkcy4gR2l2ZW4gdGhhdCwgS01TQU4gaXMgY29tcGxldGVseSB1bm5lY2Vzc2FyeSBoZXJlLiBXZSBjYW4gc2FmZWx5IHNldCBgTmVlZHNLTVNBTmAgdG8gZmFsc2UuIFxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgdGhhdCBgc2V0LXJlc3VsdHNgIGNhbGwgcHJlcHBlZCBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCBvbmUuIFRoaXMgd2FzIGEgcHJldHR5IHNpbXBsZSBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODgwMCwiT3V0cHV0VG9rZW5zIjoxODIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTI6MjA6MzMuNzA3MTA4OTMyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGJyaWRnZSBzdWJzeXN0ZW0ncyBDRk0gKENvbm5lY3Rpdml0eSBGYXVsdCBNYW5hZ2VtZW50KSBhbmQgTVJQIChNZWRpYSBSZWR1bmRhbmN5IFByb3RvY29sKSBmcmFtZSBkaXNwYXRjaCBtZWNoYW5pc20gYnkgcmVwbGFjaW5nIHRoZSBkeW5hbWljIGZyYW1lLXR5cGUgbGlua2VkIGxpc3QgKGBmcmFtZV90eXBlX2xpc3RgKSB3aXRoIGJpdCBmbGFncyBpbiB0aGUgZXhpc3RpbmcgYnJpZGdlIG9wdGlvbnMgYml0bWFzayAoYEJST1BUX0NGTV9FTkFCTEVEYCBhbmQgYEJST1BUX01SUF9FTkFCTEVEYCkuIFxcblxcbk5vIG5ldyBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgZGF0YSBidWZmZXJzIGFyZSBjcmVhdGVkIG9yIGV4cG9ydGVkIHRvIHVzZXIgc3BhY2UuIFRoZSBsb2dpYyByZWxpZXMgb24gYWxyZWFkeS1hbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGJyaWRnZSBzdHJ1Y3R1cmVzIChgc3RydWN0IG5ldF9icmlkZ2VgKSwgdG9nZ2xpbmcgYW5kIGNoZWNraW5nIGV4aXN0aW5nIGJpdCBmbGFncy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBjb25maWd1cmF0aW9ucyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcmVncmVzc2lvbi4gRGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYnJpZGdlIHN1YnN5c3RlbSdzIENGTSAoQ29ubmVjdGl2aXR5IEZhdWx0IE1hbmFnZW1lbnQpIGFuZCBNUlAgKE1lZGlhIFJlZHVuZGFuY3kgUHJvdG9jb2wpIGZyYW1lIGRpc3BhdGNoIG1lY2hhbmlzbSBieSByZXBsYWNpbmcgdGhlIGR5bmFtaWMgZnJhbWUtdHlwZSBsaW5rZWQgbGlzdCAoYGZyYW1lX3R5cGVfbGlzdGApIHdpdGggYml0IGZsYWdzIGluIHRoZSBleGlzdGluZyBicmlkZ2Ugb3B0aW9ucyBiaXRtYXNrIChgQlJPUFRfQ0ZNX0VOQUJMRURgIGFuZCBgQlJPUFRfTVJQX0VOQUJMRURgKS4gXFxuXFxuTm8gbmV3IHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIGJ1ZmZlcnMgYXJlIGNyZWF0ZWQgb3IgZXhwb3J0ZWQgdG8gdXNlciBzcGFjZS4gVGhlIGxvZ2ljIHJlbGllcyBvbiBhbHJlYWR5LWFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYnJpZGdlIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgbmV0X2JyaWRnZWApLCB0b2dnbGluZyBhbmQgY2hlY2tpbmcgZXhpc3RpbmcgYml0IGZsYWdzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCBvbiwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGNvbmZpZ3VyYXRpb25zIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSByZWdyZXNzaW9uLiBEZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvb9c6[1] Phase: Succeeded StartedAt: 2026-08-31 12:20:45 +0000 UTC FinishedAt: 2026-08-31 12:20:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb9c6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 12:20:45 +0000 UTC FinishedAt: 2026-08-31 12:20:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb9c6[2] Phase: Succeeded StartedAt: 2026-08-31 12:20:45 +0000 UTC FinishedAt: 2026-08-31 15:59:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 12:20:45 +0000 UTC FinishedAt: 2026-08-31 15:59:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 12:20:45 +0000 UTC FinishedAt: 2026-08-31 12:20:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 12:20:45 +0000 UTC FinishedAt: 2026-08-31 12:20:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvb9c6/series-workflowvb9c6-convert-artifact-2260976554/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 12:20:55 +0000 UTC FinishedAt: 2026-08-31 12:37:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 12:20:55 +0000 UTC FinishedAt: 2026-08-31 12:37:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*769ad32e-22e3-4697-883b-a8a9b0dd2f36,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvb9c6/series-workflowvb9c6-convert-artifact-2260976554/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "ebf5a24a-8c8d-468f-b23f-e18ef9006f84", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvb9c6/series-workflowvb9c6-build-action-3943251224/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 12:20:55 +0000 UTC FinishedAt: 2026-08-31 12:36:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*769ad32e-22e3-4697-883b-a8a9b0dd2f36,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvb9c6/series-workflowvb9c6-convert-artifact-2260976554/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "ebf5a24a-8c8d-468f-b23f-e18ef9006f84", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvb9c6/series-workflowvb9c6-build-action-3943251224/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 12:37:04 +0000 UTC FinishedAt: 2026-08-31 12:37:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 12:37:04 +0000 UTC FinishedAt: 2026-08-31 12:37:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 12:37:04 +0000 UTC FinishedAt: 2026-08-31 12:37:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 12:37:04 +0000 UTC FinishedAt: 2026-08-31 12:37:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvb9c6/series-workflowvb9c6-convert-artifact-284175557/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 12:37:14 +0000 UTC FinishedAt: 2026-08-31 12:39:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 12:37:14 +0000 UTC FinishedAt: 2026-08-31 12:38:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ebf5a24a-8c8d-468f-b23f-e18ef9006f84,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvb9c6/series-workflowvb9c6-build-action-3943251224/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 12:39:07 +0000 UTC FinishedAt: 2026-08-31 12:39:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 12:39:07 +0000 UTC FinishedAt: 2026-08-31 12:39:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 12:39:07 +0000 UTC FinishedAt: 2026-08-31 12:56:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 12:39:07 +0000 UTC FinishedAt: 2026-08-31 12:56:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*769ad32e-22e3-4697-883b-a8a9b0dd2f36,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvb9c6/series-workflowvb9c6-convert-artifact-284175557/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "e1b559e0-5027-4019-88bb-9b1a97e25558", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvb9c6/series-workflowvb9c6-build-action-2126221585/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 12:39:07 +0000 UTC FinishedAt: 2026-08-31 12:56:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*769ad32e-22e3-4697-883b-a8a9b0dd2f36,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvb9c6/series-workflowvb9c6-convert-artifact-284175557/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "e1b559e0-5027-4019-88bb-9b1a97e25558", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvb9c6/series-workflowvb9c6-build-action-2126221585/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 12:56:13 +0000 UTC FinishedAt: 2026-08-31 12:56:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 12:56:13 +0000 UTC FinishedAt: 2026-08-31 12:56:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 12:56:13 +0000 UTC FinishedAt: 2026-08-31 12:58:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 12:56:13 +0000 UTC FinishedAt: 2026-08-31 12:57:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e1b559e0-5027-4019-88bb-9b1a97e25558,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvb9c6/series-workflowvb9c6-build-action-2126221585/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 12:58:07 +0000 UTC FinishedAt: 2026-08-31 15:59:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 12:58:07 +0000 UTC FinishedAt: 2026-08-31 15:59:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*ebf5a24a-8c8d-468f-b23f-e18ef9006f84,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e1b559e0-5027-4019-88bb-9b1a97e25558,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvb9c6/series-workflowvb9c6-build-action-3943251224/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvb9c6/series-workflowvb9c6-build-action-2126221585/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 12:58:07 +0000 UTC FinishedAt: 2026-08-31 12:58:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 12:58:07 +0000 UTC FinishedAt: 2026-08-31 12:58:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvb9c6/series-workflowvb9c6-convert-artifact-3309449290/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 12:58:07 +0000 UTC FinishedAt: 2026-08-31 12:58:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 12:58:07 +0000 UTC FinishedAt: 2026-08-31 12:58:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 12:58:08 +0000 UTC FinishedAt: 2026-08-31 12:58:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 12:58:19 +0000 UTC FinishedAt: 2026-08-31 15:59:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb9c6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_cfm_frame_rx","br_mrp_process","br_cfm_mep_create","br_cfm_mep_delete","br_mrp_add","br_mrp_del"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_CFM","BRIDGE_MRP"],"series_id":"475c2863-94ae-452e-81c6-a35c7155bcce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 12:58:19 +0000 UTC FinishedAt: 2026-08-31 15:59:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ebf5a24a-8c8d-468f-b23f-e18ef9006f84,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e1b559e0-5027-4019-88bb-9b1a97e25558,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvb9c6/series-workflowvb9c6-build-action-3943251224/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvb9c6/series-workflowvb9c6-build-action-2126221585/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvb9c6/series-workflowvb9c6-convert-artifact-3309449290/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}