Name: series-workflowhlgg9 Phase: Running StartedAt: 2026-08-07 02:11:15 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlgg9[0] Phase: Succeeded StartedAt: 2026-08-07 02:11:15 +0000 UTC FinishedAt: 2026-08-07 02:30:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlgg9[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 02:11:15 +0000 UTC FinishedAt: 2026-08-07 02:30:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "bf80e6802273a900311b44e47c9b1a59c6d2473c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NF_FLOW_TABLE", "NF_FLOW_TABLE_INET", "NFT_FLOW_OFFLOAD", "NET_IPIP", "IPV6_TUNNEL", "NF_CONNTRACK", "VLAN_8021Q" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "bf80e6802273a900311b44e47c9b1a59c6d2473c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NF_FLOW_TABLE", "NF_FLOW_TABLE_INET", "NFT_FLOW_OFFLOAD", "NET_IPIP", "IPV6_TUNNEL", "NF_CONNTRACK", "VLAN_8021Q" ], "series_id": "ec3678cf-46a4-4bdc-b7da-de91ba101ff5" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_flow_offload_ip_hook", "nf_flow_offload_ipv6_hook", "nft_flow_route", "dev_fill_forward_path" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GX0ZMT1dfVEFCTEVfSU5FVCYjMzQ7LAogICAgJiMzNDtORlRfRkxPV19PRkZMT0FEJiMzNDssCiAgICAmIzM0O05FVF9JUElQJiMzNDssCiAgICAmIzM0O0lQVjZfVFVOTkVMJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2lwX2hvb2smIzM0OywKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayYjMzQ7LAogICAgJiMzNDtuZnRfZmxvd19yb3V0ZSYjMzQ7LAogICAgJiMzNDtkZXZfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIG9mZmxvYWQgcGF0aCB0byBwcm9wZXJseSBoYW5kbGUgaW5uZXIgcHJvdG9jb2xzIGFuZCBldGhlcl90eXBlLCBlc3BlY2lhbGx5IGZvciBJUC1pbi1JUCBhbmQgSVB2NiB0dW5uZWxzLiBJdCBjaGFuZ2VzIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIHRvIHRha2UgYSBjb250ZXh0IHN0cnVjdCBpbnN0ZWFkIG9mIGp1c3QgdGhlIGRldmljZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzcywgYW5kIHVwZGF0ZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGhvb2tzIHRvIHVzZSB0aGlzIGNvbnRleHQgYW5kIGNvcnJlY3RseSBpZGVudGlmeSBlbmNhcHN1bGF0ZWQgcHJvdG9jb2xzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBzdWJzeXN0ZW1zIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwZDZhYTA5MGY4ZDU4ZjExODk5OWEzMmQzYzUyOGYxNjhjOTVhN2VlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAwMjoyODowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuaW5kZXggYTAzYWY5NzUwNTczMS4uOTI2MTE4MDI4MDFlYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbkBAIC0yODMsMTQgJiM0MzsyODMsMTkgQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsXG4gXHRcdFx0XHQgICAgc3RydWN0IGFpcm9oYV93ZG1hX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayBzdGFjaztcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XG4mIzQzO1x0XHQuZGV2ID0gZGV2LFxuJiM0MztcdH07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoO1xuIFx0aW50IGVycjtcbiBcbiBcdGlmICghZGV2KVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiYjNDM7XHRldGhlcl9hZGRyX2NvcHkoY3R4LmRhZGRyLCBhZGRyKTtcbiYjNDM7XG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBcdTAwMjZzdGFjayk7XG4mIzQzO1x0ZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKFx1MDAyNmN0eCwgXHUwMDI2c3RhY2spO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcbmluZGV4IDc3MWQ5MTE4Zjk0YWQuLjk5YjI4YWFhN2NjNDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcbkBAIC05Miw2ICYjNDM7OTIsOSBAQCBzdGF0aWMgaW50XG4gbXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwgc3RydWN0IG10a193ZG1hX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayBzdGFjaztcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XG4mIzQzO1x0XHQuZGV2ID0gZGV2LFxuJiM0MztcdH07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoO1xuIFx0aW50IGVycjtcbiBcbkBAIC0xMDEsOCAmIzQzOzEwNCwxMCBAQCBtdGtfZmxvd19nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLCBzdHJ1Y3QgbXRrX3dkbWFfaVxuIFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRfTUVESUFURUtfU09DX1dFRCkpXG4gXHRcdHJldHVybiAtMTtcbiBcbiYjNDM7XHRldGhlcl9hZGRyX2NvcHkoY3R4LmRhZGRyLCBhZGRyKTtcbiYjNDM7XG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBcdTAwMjZzdGFjayk7XG4mIzQzO1x0ZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKFx1MDAyNmN0eCwgXHUwMDI2c3RhY2spO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA2MmNmYWQ3ZTZiNzlhLi42OGNjYjU4NjgwNzBlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTkwMiw3ICYjNDM7OTAyLDcgQEAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCB7XG4gXHRcdFx0XHRzdHJ1Y3QgaW42X2FkZHJcdGRzdF92NjtcbiBcdFx0XHR9O1xuIFxuLVx0XHRcdHU4XHRsM19wcm90bztcbiYjNDM7XHRcdFx0dThcdGlubmVyX3Byb3RvO1xuIFx0XHR9IHR1bjtcbiBcdFx0c3RydWN0IHtcbiBcdFx0XHRlbnVtIHtcbkBAIC05MzksNiAmIzQzOzkzOSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sge1xuIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IHtcbiBcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gXHR1OFx0XHRcdGRhZGRyW0VUSF9BTEVOXTtcbiYjNDM7XHRfX2JlMTZcdFx0XHRldGhlcl90eXBlO1xuIFxuIFx0aW50XHRcdFx0bnVtX3ZsYW5zO1xuIFx0c3RydWN0IHtcbkBAIC0zNDI2LDcgJiM0MzszNDI3LDcgQEAgdm9pZCBkZXZfcmVtb3ZlX29mZmxvYWQoc3RydWN0IHBhY2tldF9vZmZsb2FkICpwbyk7XG4gXG4gaW50IGRldl9nZXRfaWZsaW5rKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIGludCBkZXZfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4taW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsXG4mIzQzO2ludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcbiB2b2lkIGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcbiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbmluZGV4IGEwOTBlYzNmZmVmMmUuLmYyZTI3NzFmMTg4ZjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG5AQCAtMTE3LDcgJiM0MzsxMTcsNyBAQCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCB7XG4gXHRcdHN0cnVjdCBpbjZfYWRkclx0ZHN0X3Y2O1xuIFx0fTtcbiBcbi1cdHU4XHRsM19wcm90bztcbiYjNDM7XHR1OFx0aW5uZXJfcHJvdG87XG4gfTtcbiBcbiBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCBlNTBlZDY3N2RlNzI1Li4xM2RmZDIxMTNhNWFiIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNzY5LDM1ICYjNDM7NzY5LDMxIEBAIHZvaWQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKTtcbiBcbi1pbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcbiYjNDM7aW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmxhc3RfZGV2O1xuLVx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0ge1xuLVx0XHQuZGV2XHQ9IGRldixcbi1cdH07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoO1xuIFx0aW50IHJldCA9IDA7XG4gXG4tXHRtZW1jcHkoY3R4LmRhZGRyLCBkYWRkciwgc2l6ZW9mKGN0eC5kYWRkcikpO1xuIFx0c3RhY2stXHUwMDNlbnVtX3BhdGhzID0gMDtcbi1cdHdoaWxlIChjdHguZGV2IFx1MDAyNlx1MDAyNiBjdHguZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKSB7XG4tXHRcdGxhc3RfZGV2ID0gY3R4LmRldjtcbiYjNDM7XHR3aGlsZSAoY3R4LVx1MDAzZWRldiBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZWRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aCkge1xuJiM0MztcdFx0bGFzdF9kZXYgPSBjdHgtXHUwMDNlZGV2O1xuIFx0XHRwYXRoID0gZGV2X2Z3ZF9wYXRoKHN0YWNrKTtcbiBcdFx0aWYgKCFwYXRoKVxuIFx0XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdFx0bWVtc2V0KHBhdGgsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9wYXRoKSk7XG4tXHRcdHJldCA9IGN0eC5kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgoXHUwMDI2Y3R4LCBwYXRoKTtcbiYjNDM7XHRcdHJldCA9IGN0eC1cdTAwM2VkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRcdHN0YWNrLVx1MDAzZW51bV9wYXRocyYjNDM7JiM0Mzs7XG4tXHRcdGlmIChXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LmRldikpXG4mIzQzO1x0XHRpZiAoV0FSTl9PTl9PTkNFKGxhc3RfZGV2ID09IGN0eC1cdTAwM2VkZXYpKVxuIFx0XHRcdGdvdG8gZXJyX291dDtcbiBcdH1cbiBcbi1cdGlmICghY3R4LmRldilcbiYjNDM7XHRpZiAoIWN0eC1cdTAwM2VkZXYpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHRwYXRoID0gZGV2X2Z3ZF9wYXRoKHN0YWNrKTtcbkBAIC04MDUsNyAmIzQzOzgwMSw3IEBAIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuIFx0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRwYXRoLVx1MDAzZXR5cGUgPSBERVZfUEFUSF9FVEhFUk5FVDtcbi1cdHBhdGgtXHUwMDNlZGV2ID0gY3R4LmRldjtcbiYjNDM7XHRwYXRoLVx1MDAzZWRldiA9IGN0eC1cdTAwM2VkZXY7XG4gXHRzdGFjay1cdTAwM2VudW1fcGF0aHMmIzQzOyYjNDM7O1xuIFxuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBpcC5jIGIvbmV0L2lwdjQvaXBpcC5jXG5pbmRleCBmYjdkOTZmOTliMDZiLi4xNjMwMzI1Yzc3ZDM0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBpcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcGlwLmNcbkBAIC0zNjAsNiAmIzQzOzM2MCw5IEBAIHN0YXRpYyBpbnQgaXBpcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0Y29uc3Qgc3RydWN0IGlwaGRyICp0aXBoID0gXHUwMDI2dHVubmVsLVx1MDAzZXBhcm1zLmlwaDtcbiBcdHN0cnVjdCBydGFibGUgKnJ0O1xuIFxuJiM0MztcdGlmIChjdHgtXHUwMDNlZXRoZXJfdHlwZSAhPSBjcHVfdG9fYmUxNihFVEhfUF9JUCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuIFx0aWYgKHR1bm5lbC1cdTAwM2Vjb2xsZWN0X21kKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG5AQCAtMzc1LDcgJiM0MzszNzgsNyBAQCBzdGF0aWMgaW50IGlwaXBfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdHBhdGgtXHUwMDNldHlwZSA9IERFVl9QQVRIX1RVTjtcbiBcdHBhdGgtXHUwMDNldHVuLnNyY192NC5zX2FkZHIgPSB0aXBoLVx1MDAzZXNhZGRyO1xuIFx0cGF0aC1cdTAwM2V0dW4uZHN0X3Y0LnNfYWRkciA9IHRpcGgtXHUwMDNlZGFkZHI7XG4tXHRwYXRoLVx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBJUDtcbiYjNDM7XHRwYXRoLVx1MDAzZXR1bi5pbm5lcl9wcm90byA9IElQUFJPVE9fSVBJUDtcbiBcdHBhdGgtXHUwMDNldHVuLmRzdCA9IFx1MDAyNnJ0LVx1MDAzZWRzdDtcbiBcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldjtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbmluZGV4IGQ4MDAyMGJjMjYyMGUuLjdiNTQ5MTkyMzJiYTMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuQEAgLTE4NDksNiAmIzQzOzE4NDksOSBAQCBzdGF0aWMgaW50IGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdHN0cnVjdCBmbG93aTYgZmw2O1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRpZiAoY3R4LVx1MDAzZWV0aGVyX3R5cGUgIT0gY3B1X3RvX2JlMTYoRVRIX1BfSVBWNikpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuIFx0aWYgKHQtXHUwMDNlcGFybXMuZmxhZ3MgXHUwMDI2IChJUDZfVE5MX0ZfVVNFX09SSUdfVENMQVNTIHxcbiBcdFx0XHQgICAgICBJUDZfVE5MX0ZfVVNFX09SSUdfRkxPV0xBQkVMIHxcbiBcdFx0XHQgICAgICBJUDZfVE5MX0ZfVVNFX09SSUdfRldNQVJLKSlcbkBAIC0xODY5LDcgJiM0MzsxODcyLDcgQEAgc3RhdGljIGludCBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4gXHRcdHBhdGgtXHUwMDNldHlwZSA9IERFVl9QQVRIX1RVTjtcbiBcdFx0cGF0aC1cdTAwM2V0dW4uc3JjX3Y2ID0gZmw2LnNhZGRyO1xuIFx0XHRwYXRoLVx1MDAzZXR1bi5kc3RfdjYgPSBmbDYuZGFkZHI7XG4tXHRcdHBhdGgtXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUFY2O1xuJiM0MztcdFx0cGF0aC1cdTAwM2V0dW4uaW5uZXJfcHJvdG8gPSBJUFBST1RPX0lQVjY7XG4gXHRcdHBhdGgtXHUwMDNldHVuLmRzdCA9IGRzdDtcbiBcdFx0cGF0aC1cdTAwM2VkZXYgPSBjdHgtXHUwMDNlZGV2O1xuIFx0XHRjdHgtXHUwMDNlZGV2ID0gZHN0LVx1MDAzZWRldjtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG5pbmRleCAwYjMxNGIxMGU3MDVhLi5hZjUzNDAwMGEyODdhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG5AQCAtMTQ3LDEzICYjNDM7MTQ3LDE0IEBAIHN0YXRpYyBib29sIGlwX2hhc19vcHRpb25zKHVuc2lnbmVkIGludCB0aG9mZilcbiBcbiBzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCB7XG4gXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZVx0KmluO1xuJiM0MztcdF9fYmUxNlx0XHRcdGV0aGVyX3R5cGU7XG4gXHR1MzJcdFx0XHRvZmZzZXQ7XG4gXHR1MzJcdFx0XHRoZHJzaXplO1xuIFx0c3RydWN0IHtcbiBcdFx0LyogVHVubmVsIElQIGhlYWRlciBzaXplICovXG4gXHRcdHUzMiBoZHJfc2l6ZTtcbiBcdFx0LyogSVAgdHVubmVsIHByb3RvY29sICovXG4tXHRcdHU4IHByb3RvO1xuJiM0MztcdFx0dTggaW5uZXJfcHJvdG87XG4gXHR9IHR1bjtcbiB9O1xuIFxuQEAgLTE2MSw3ICYjNDM7MTYyLDYgQEAgc3RhdGljIHZvaWQgbmZfZmxvd190dXBsZV9lbmNhcChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlKVxuIHtcbi1cdF9fYmUxNiBpbm5lcl9wcm90byA9IHNrYi1cdTAwM2Vwcm90b2NvbDtcbiBcdHN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aDtcbiBcdHN0cnVjdCBwcHBvZV9oZHIgKnBoZHI7XG4gXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcbkBAIC0xNzksMzMgJiM0MzsxNzksMzEgQEAgc3RhdGljIHZvaWQgbmZfZmxvd190dXBsZV9lbmNhcChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0XHR2ZXRoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKXNrYl9tYWNfaGVhZGVyKHNrYik7XG4gXHRcdHR1cGxlLVx1MDAzZWVuY2FwW2ldLmlkID0gbnRvaHModmV0aC1cdTAwM2VoX3ZsYW5fVENJKTtcbiBcdFx0dHVwbGUtXHUwMDNlZW5jYXBbaV0ucHJvdG8gPSBza2ItXHUwMDNlcHJvdG9jb2w7XG4tXHRcdGlubmVyX3Byb3RvID0gdmV0aC1cdTAwM2VoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvO1xuIFx0XHRvZmZzZXQgJiM0Mzs9IFZMQU5fSExFTjtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIGh0b25zKEVUSF9QX1BQUF9TRVMpOlxuIFx0XHRwaGRyID0gKHN0cnVjdCBwcHBvZV9oZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbiBcdFx0dHVwbGUtXHUwMDNlZW5jYXBbaV0uaWQgPSBudG9ocyhwaGRyLVx1MDAzZXNpZCk7XG4gXHRcdHR1cGxlLVx1MDAzZWVuY2FwW2ldLnByb3RvID0gc2tiLVx1MDAzZXByb3RvY29sO1xuLVx0XHRpbm5lcl9wcm90byA9ICooKF9fYmUxNiAqKShwaGRyICYjNDM7IDEpKTtcbiBcdFx0b2Zmc2V0ICYjNDM7PSBQUFBPRV9TRVNfSExFTjtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRzd2l0Y2ggKGlubmVyX3Byb3RvKSB7XG4mIzQzO1x0c3dpdGNoIChjdHgtXHUwMDNlZXRoZXJfdHlwZSkge1xuIFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4gXHRcdGlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0Mzsgb2Zmc2V0KTtcbi1cdFx0aWYgKGN0eC1cdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUElQKSB7XG4mIzQzO1x0XHRpZiAoY3R4LVx1MDAzZXR1bi5pbm5lcl9wcm90byA9PSBJUFBST1RPX0lQSVApIHtcbiBcdFx0XHR0dXBsZS1cdTAwM2V0dW4uZHN0X3Y0LnNfYWRkciA9IGlwaC1cdTAwM2VkYWRkcjtcbiBcdFx0XHR0dXBsZS1cdTAwM2V0dW4uc3JjX3Y0LnNfYWRkciA9IGlwaC1cdTAwM2VzYWRkcjtcbi1cdFx0XHR0dXBsZS1cdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQSVA7XG4mIzQzO1x0XHRcdHR1cGxlLVx1MDAzZXR1bi5pbm5lcl9wcm90byA9IElQUFJPVE9fSVBJUDtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4gXHRcdGlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0Mzsgb2Zmc2V0KTtcbi1cdFx0aWYgKGN0eC1cdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUFY2KSB7XG4mIzQzO1x0XHRpZiAoY3R4LVx1MDAzZXR1bi5pbm5lcl9wcm90byA9PSBJUFBST1RPX0lQVjYpIHtcbiBcdFx0XHR0dXBsZS1cdTAwM2V0dW4uZHN0X3Y2ID0gaXA2aC1cdTAwM2VkYWRkcjtcbiBcdFx0XHR0dXBsZS1cdTAwM2V0dW4uc3JjX3Y2ID0gaXA2aC1cdTAwM2VzYWRkcjtcbi1cdFx0XHR0dXBsZS1cdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQVjY7XG4mIzQzO1x0XHRcdHR1cGxlLVx1MDAzZXR1bi5pbm5lcl9wcm90byA9IElQUFJPVE9fSVBWNjtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG5AQCAtMzI4LDcgJiM0MzszMjYsNyBAQCBzdGF0aWMgYm9vbCBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG8oc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0aWYgKGlwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX0lQSVApIHtcbi1cdFx0Y3R4LVx1MDAzZXR1bi5wcm90byA9IGlwaC1cdTAwM2Vwcm90b2NvbDtcbiYjNDM7XHRcdGN0eC1cdTAwM2V0dW4uaW5uZXJfcHJvdG8gPSBpcGgtXHUwMDNlcHJvdG9jb2w7XG4gXHRcdGN0eC1cdTAwM2V0dW4uaGRyX3NpemUgPSBzaXplO1xuIFx0XHRjdHgtXHUwMDNlb2Zmc2V0ICYjNDM7PSBjdHgtXHUwMDNldHVuLmhkcl9zaXplO1xuIFx0fVxuQEAgLTM1Myw3ICYjNDM7MzUxLDcgQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDZfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGlmIChpcDZoLVx1MDAzZW5leHRoZHIgPT0gSVBQUk9UT19JUFY2KSB7XG4tXHRcdGN0eC1cdTAwM2V0dW4ucHJvdG8gPSBpcDZoLVx1MDAzZW5leHRoZHI7XG4mIzQzO1x0XHRjdHgtXHUwMDNldHVuLmlubmVyX3Byb3RvID0gaXA2aC1cdTAwM2VuZXh0aGRyO1xuIFx0XHRjdHgtXHUwMDNldHVuLmhkcl9zaXplID0gc2l6ZW9mKCppcDZoKTtcbiBcdFx0Y3R4LVx1MDAzZW9mZnNldCAmIzQzOz0gY3R4LVx1MDAzZXR1bi5oZHJfc2l6ZTtcbiBcdH1cbkBAIC0zNjcsOCAmIzQzOzM2NSw4IEBAIHN0YXRpYyBib29sIG5mX2Zsb3dfaXA2X3R1bm5lbF9wcm90byhzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIHN0YXRpYyB2b2lkIG5mX2Zsb3dfaXBfdHVubmVsX3BvcChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdGlmIChjdHgtXHUwMDNldHVuLnByb3RvICE9IElQUFJPVE9fSVBJUCBcdTAwMjZcdTAwMjZcbi1cdCAgICBjdHgtXHUwMDNldHVuLnByb3RvICE9IElQUFJPVE9fSVBWNilcbiYjNDM7XHRpZiAoY3R4LVx1MDAzZXR1bi5pbm5lcl9wcm90byAhPSBJUFBST1RPX0lQSVAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGN0eC1cdTAwM2V0dW4uaW5uZXJfcHJvdG8gIT0gSVBQUk9UT19JUFY2KVxuIFx0XHRyZXR1cm47XG4gXG4gXHRza2JfcHVsbChza2IsIGN0eC1cdTAwM2V0dW4uaGRyX3NpemUpO1xuQEAgLTM3NiwxMCAmIzQzOzM3NCwxMCBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X2lwX3R1bm5lbF9wb3Aoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiB9XG4gXG4gc3RhdGljIGJvb2wgbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgcHJvdG8pXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0X19iZTE2IGlubmVyX3Byb3RvID0gc2tiLVx1MDAzZXByb3RvY29sO1xuIFx0c3RydWN0IHZsYW5fZXRoaGRyICp2ZXRoO1xuJiM0MztcdF9fYmUxNiBldGhlcl90eXBlO1xuIFx0Ym9vbCByZXQgPSBmYWxzZTtcbiBcbiBcdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG5AQCAtMzg4LDIyICYjNDM7Mzg2LDI3IEBAIHN0YXRpYyBib29sIG5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0XHR2ZXRoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKXNrYl9tYWNfaGVhZGVyKHNrYik7XG4tXHRcdGlmICh2ZXRoLVx1MDAzZWhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gPT0gcHJvdG8pIHtcbi1cdFx0XHRjdHgtXHUwMDNlb2Zmc2V0ICYjNDM7PSBWTEFOX0hMRU47XG4tXHRcdFx0aW5uZXJfcHJvdG8gPSBwcm90bztcbi1cdFx0XHRyZXQgPSB0cnVlO1xuLVx0XHR9XG4mIzQzO1x0XHRjdHgtXHUwMDNlZXRoZXJfdHlwZSA9IHZldGgtXHUwMDNlaF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bztcbiYjNDM7XHRcdGN0eC1cdTAwM2VvZmZzZXQgJiM0Mzs9IFZMQU5fSExFTjtcbiYjNDM7XHRcdHJldCA9IHRydWU7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBodG9ucyhFVEhfUF9QUFBfU0VTKTpcbi1cdFx0aWYgKG5mX2Zsb3dfcHBwb2VfcHJvdG8oc2tiLCBcdTAwMjZpbm5lcl9wcm90bykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBpbm5lcl9wcm90byA9PSBwcm90bykge1xuLVx0XHRcdGN0eC1cdTAwM2VvZmZzZXQgJiM0Mzs9IFBQUE9FX1NFU19ITEVOO1xuLVx0XHRcdHJldCA9IHRydWU7XG4tXHRcdH1cbiYjNDM7XHRcdGlmICghbmZfZmxvd19wcHBvZV9wcm90byhza2IsIFx1MDAyNmV0aGVyX3R5cGUpKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0Y3R4LVx1MDAzZWV0aGVyX3R5cGUgPSBldGhlcl90eXBlO1xuJiM0MztcdFx0Y3R4LVx1MDAzZW9mZnNldCAmIzQzOz0gUFBQT0VfU0VTX0hMRU47XG4mIzQzO1x0XHRyZXQgPSB0cnVlO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4mIzQzO1x0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbiYjNDM7XHRcdGN0eC1cdTAwM2VldGhlcl90eXBlID0gc2tiLVx1MDAzZXByb3RvY29sO1xuIFx0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuLVx0c3dpdGNoIChpbm5lcl9wcm90bykge1xuJiM0MztcdHN3aXRjaCAoY3R4LVx1MDAzZWV0aGVyX3R5cGUpIHtcbiBcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuIFx0XHRyZXQgPSBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG8oY3R4LCBza2IpO1xuIFx0XHRicmVhaztcbkBAIC00NTUsOSAmIzQzOzQ1OCw2IEBAIG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiB7XG4gXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHR1cGxlID0ge307XG4gXG4tXHRpZiAoIW5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKGN0eCwgc2tiLCBodG9ucyhFVEhfUF9JUCkpKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbiBcdGlmIChuZl9mbG93X3R1cGxlX2lwKGN0eCwgc2tiLCBcdTAwMjZ0dXBsZSkgXHUwMDNjIDApXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuQEAgLTYxMSw3ICYjNDM7NjExLDcgQEAgc3RhdGljIGludCBuZl9mbG93X3R1bm5lbF9pcGlwX3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aXBoLVx1MDAzZXZlcnNpb25cdD0gNDtcbiBcdGlwaC1cdTAwM2VpaGxcdD0gc2l6ZW9mKCppcGgpIFx1MDAzZVx1MDAzZSAyO1xuIFx0aXBoLVx1MDAzZWZyYWdfb2ZmXHQ9IGlwX210dV9sb2NrZWQoXHUwMDI2cnQtXHUwMDNlZHN0KSA/IDAgOiBmcmFnX29mZjtcbi1cdGlwaC1cdTAwM2Vwcm90b2NvbFx0PSB0dXBsZS1cdTAwM2V0dW4ubDNfcHJvdG87XG4mIzQzO1x0aXBoLVx1MDAzZXByb3RvY29sXHQ9IHR1cGxlLVx1MDAzZXR1bi5pbm5lcl9wcm90bztcbiBcdGlwaC1cdTAwM2V0b3NcdD0gdG9zO1xuIFx0aXBoLVx1MDAzZWRhZGRyXHQ9IHR1cGxlLVx1MDAzZXR1bi5zcmNfdjQuc19hZGRyO1xuIFx0aXBoLVx1MDAzZXNhZGRyXHQ9IHR1cGxlLVx1MDAzZXR1bi5kc3RfdjQuc19hZGRyO1xuQEAgLTc5NCwzMyAmIzQzOzc5NCwxNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG5mX2Zsb3dfcXVldWVfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gTkZfU1RPTEVOO1xuIH1cbiBcbi11bnNpZ25lZCBpbnRcbi1uZl9mbG93X29mZmxvYWRfaXBfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbiYjNDM7c3RhdGljIGludCBuZl9mbG93X3F1ZXVlX3htaXQ0KHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXG4mIzQzO1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4ge1xuLVx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoO1xuLVx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9IHByaXY7XG4gXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZTtcbiBcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7XG4tXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCBjdHggPSB7XG4tXHRcdC5pblx0PSBzdGF0ZS1cdTAwM2Vpbixcbi1cdH07XG4gXHRzdHJ1Y3QgbmZfZmxvd194bWl0IHhtaXQgPSB7fTtcbiBcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4gXHRzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDtcbiBcdHN0cnVjdCBydGFibGUgKnJ0O1xuIFx0X19iZTMyIGlwX2RhZGRyO1xuLVx0aW50IHJldDtcbi1cbi1cdHR1cGxlaGFzaCA9IG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCBza2IpO1xuLVx0aWYgKCF0dXBsZWhhc2gpXG4tXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4tXG4tXHRyZXQgPSBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiBORl9EUk9QO1xuLVx0ZWxzZSBpZiAocmV0ID09IDApXG4tXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRpZiAodW5saWtlbHkodHVwbGVoYXNoLVx1MDAzZXR1cGxlLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9YRlJNKSkge1xuIFx0XHRydCA9IGRzdF9ydGFibGUodHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XG5AQCAtODczLDYgJiM0Mzs4NTcsMzYgQEAgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdHJldHVybiBuZl9mbG93X3F1ZXVlX3htaXQoc3RhdGUtXHUwMDNlbmV0LCBza2IsIFx1MDAyNnhtaXQpO1xuIH1cbiYjNDM7XG4mIzQzO3Vuc2lnbmVkIGludFxuJiM0MztuZl9mbG93X29mZmxvYWRfaXBfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2g7XG4mIzQzO1x0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9IHByaXY7XG4mIzQzO1x0c3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggY3R4ID0ge1xuJiM0MztcdFx0LmluXHQ9IHN0YXRlLVx1MDAzZWluLFxuJiM0MztcdH07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChcdTAwMjZjdHgsIHNrYikpXG4mIzQzO1x0XHRyZXR1cm4gTkZfQUNDRVBUO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoY3R4LmV0aGVyX3R5cGUgIT0gaHRvbnMoRVRIX1BfSVApKSlcbiYjNDM7XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4mIzQzO1xuJiM0MztcdHR1cGxlaGFzaCA9IG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCBza2IpO1xuJiM0MztcdGlmICghdHVwbGVoYXNoKVxuJiM0MztcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBORl9EUk9QO1xuJiM0MztcdGVsc2UgaWYgKHJldCA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG5mX2Zsb3dfcXVldWVfeG1pdDQoc2tiLCB0dXBsZWhhc2gsIHN0YXRlKTtcbiYjNDM7fVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKTtcbiBcbiBzdGF0aWMgdm9pZCBuZl9mbG93X25hdF9pcHY2X3RjcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdGhvZmYsXG5AQCAtMTEwMSw0MiAmIzQzOzExMTUsMjMgQEAgbmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4ge1xuIFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB0dXBsZSA9IHt9O1xuIFxuLVx0aWYgKCFuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChjdHgsIHNrYiwgaHRvbnMoRVRIX1BfSVBWNikpKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbiBcdGlmIChuZl9mbG93X3R1cGxlX2lwdjYoY3R4LCBza2IsIFx1MDAyNnR1cGxlKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCBcdTAwMjZ0dXBsZSk7XG4gfVxuIFxuLXVuc2lnbmVkIGludFxuLW5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHQgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbiYjNDM7c3RhdGljIGludCBuZl9mbG93X3F1ZXVlX3htaXQ2KHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXG4mIzQzO1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4ge1xuLVx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoO1xuLVx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9IHByaXY7XG4gXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZTtcbiBcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7XG4tXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCBjdHggPSB7XG4tXHRcdC5pblx0PSBzdGF0ZS1cdTAwM2Vpbixcbi1cdH07XG4gXHRzdHJ1Y3QgbmZfZmxvd194bWl0IHhtaXQgPSB7fTtcbiBcdHN0cnVjdCBpbjZfYWRkciAqaXA2X2RhZGRyO1xuIFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcbiBcdHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoO1xuIFx0c3RydWN0IHJ0Nl9pbmZvICpydDtcbi1cdGludCByZXQ7XG4tXG4tXHR0dXBsZWhhc2ggPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXAoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCBza2IpO1xuLVx0aWYgKHR1cGxlaGFzaCA9PSBOVUxMKVxuLVx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuLVxuLVx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiBORl9EUk9QO1xuLVx0ZWxzZSBpZiAocmV0ID09IDApXG4tXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRpZiAodW5saWtlbHkodHVwbGVoYXNoLVx1MDAzZXR1cGxlLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9YRlJNKSkge1xuIFx0XHRydCA9IGRzdF9ydDZfaW5mbyh0dXBsZWhhc2gtXHUwMDNldHVwbGUuZHN0X2NhY2hlKTtcbkBAIC0xMTkwLDQgJiM0MzsxMTg1LDM0IEBAIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdHJldHVybiBuZl9mbG93X3F1ZXVlX3htaXQoc3RhdGUtXHUwMDNlbmV0LCBza2IsIFx1MDAyNnhtaXQpO1xuIH1cbiYjNDM7XG4mIzQzO3Vuc2lnbmVkIGludFxuJiM0MztuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdCAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoO1xuJiM0MztcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUgPSBwcml2O1xuJiM0MztcdHN0cnVjdCBuZl9mbG93dGFibGVfY3R4IGN0eCA9IHtcbiYjNDM7XHRcdC5pblx0PSBzdGF0ZS1cdTAwM2VpbixcbiYjNDM7XHR9O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woXHUwMDI2Y3R4LCBza2IpKVxuJiM0MztcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGN0eC5ldGhlcl90eXBlICE9IGh0b25zKEVUSF9QX0lQVjYpKSlcbiYjNDM7XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4mIzQzO1xuJiM0MztcdHR1cGxlaGFzaCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHNrYik7XG4mIzQzO1x0aWYgKCF0dXBsZWhhc2gpXG4mIzQzO1x0XHRyZXR1cm4gTkZfQUNDRVBUO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gTkZfRFJPUDtcbiYjNDM7XHRlbHNlIGlmIChyZXQgPT0gMClcbiYjNDM7XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBuZl9mbG93X3F1ZXVlX3htaXQ2KHNrYiwgdHVwbGVoYXNoLCBzdGF0ZSk7XG4mIzQzO31cbiBFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xuaW5kZXggNTYyMTliMDJlMTIyNy4uMWU1NTY0NGYyZWRiOCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbkBAIC00NCwxMSAmIzQzOzQ0LDE2IEBAIHN0YXRpYyBib29sIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tXHRcdFx0XHQgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsIHU4ICpoYSxcbiYjNDM7XHRcdFx0XHQgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4mIzQzO1x0XHRcdFx0ICAgICB1OCAqaGEsIF9fYmUxNiBldGhlcl90eXBlLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbiB7XG4gXHRjb25zdCB2b2lkICpkYWRkciA9IFx1MDAyNmN0LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTM7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZHN0X2NhY2hlLVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XG4mIzQzO1x0XHQuZGV2ID0gZGV2LFxuJiM0MztcdFx0LmV0aGVyX3R5cGUgPSBldGhlcl90eXBlLFxuJiM0MztcdH07XG4gXHRzdHJ1Y3QgbmVpZ2hib3VyICpuO1xuIFx0dTggbnVkX3N0YXRlO1xuIFxuQEAgLTcxLDcgJiM0Mzs3Niw5IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfY2FjaGUsXG4gXHRcdHJldHVybiAtMTtcbiBcbiBvdXQ6XG4tXHRyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgaGEsIHN0YWNrKTtcbiYjNDM7XHRldGhlcl9hZGRyX2NvcHkoY3R4LmRhZGRyLCBoYSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoXHUwMDI2Y3R4LCBzdGFjayk7XG4gfVxuIFxuIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHtcbkBAIC0xMjYsNyAmIzQzOzEzMyw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXG4gXHRcdFx0XHRpbmZvLVx1MDAzZXR1bi5zcmNfdjYgPSBwYXRoLVx1MDAzZXR1bi5zcmNfdjY7XG4gXHRcdFx0XHRpbmZvLVx1MDAzZXR1bi5kc3RfdjYgPSBwYXRoLVx1MDAzZXR1bi5kc3RfdjY7XG4tXHRcdFx0XHRpbmZvLVx1MDAzZXR1bi5sM19wcm90byA9IHBhdGgtXHUwMDNldHVuLmwzX3Byb3RvO1xuJiM0MztcdFx0XHRcdGluZm8tXHUwMDNldHVuLmlubmVyX3Byb3RvID0gcGF0aC1cdTAwM2V0dW4uaW5uZXJfcHJvdG87XG4gXHRcdFx0XHRpbmZvLVx1MDAzZXR1bl9kc3QgPSBwYXRoLVx1MDAzZXR1bi5kc3Q7XG4gXHRcdFx0XHRpbmZvLVx1MDAzZW51bV90dW5zJiM0MzsmIzQzOztcbiBcdFx0XHR9IGVsc2Uge1xuQEAgLTIyMyw3ICYjNDM7MjMwLDcgQEAgc3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdHVuc2lnbmVkIGNoYXIgaGFbRVRIX0FMRU5dO1xuIFx0aW50IGk7XG4gXG4tXHRpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChkc3QsIGN0LCBkaXIsIGhhLCBcdTAwMjZzdGFjaykgXHUwMDNjIDAgfHxcbiYjNDM7XHRpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChkc3QsIGN0LCBkaXIsIGhhLCBwa3QtXHUwMDNlZXRoZXJ0eXBlLCBcdTAwMjZzdGFjaykgXHUwMDNjIDAgfHxcbiBcdCAgICBuZnRfZGV2X3BhdGhfaW5mbyhcdTAwMjZzdGFjaywgXHUwMDI2aW5mbywgaGEsIGZ0KSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG5AQCAtMjM4LDcgJiM0MzsyNDUsNyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0aWYgKGluZm8ubnVtX3R1bnMpIHtcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLnNyY192NiA9IGluZm8udHVuLmRzdF92NjtcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLmRzdF92NiA9IGluZm8udHVuLnNyY192Njtcbi1cdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLmwzX3Byb3RvID0gaW5mby50dW4ubDNfcHJvdG87XG4mIzQzO1x0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi50dW4uaW5uZXJfcHJvdG8gPSBpbmZvLnR1bi5pbm5lcl9wcm90bztcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4ubnVtX3R1bnMgPSBpbmZvLm51bV90dW5zO1xuIFx0XHRkc3RfcmVsZWFzZShyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLmRzdCk7XG4gXHRcdHJvdXRlLVx1MDAzZXR1cGxlW2Rpcl0uZHN0ID0gaW5mby50dW5fZHN0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFX0lORVQmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtORVRfSVBJUCYjMzQ7LAogICAgJiMzNDtJUFY2X1RVTk5FTCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2smIzM0OywKICAgICYjMzQ7bmZ0X2Zsb3dfcm91dGUmIzM0OywKICAgICYjMzQ7ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBvZmZsb2FkIHBhdGggdG8gcHJvcGVybHkgaGFuZGxlIGlubmVyIHByb3RvY29scyBhbmQgZXRoZXJfdHlwZSwgZXNwZWNpYWxseSBmb3IgSVAtaW4tSVAgYW5kIElQdjYgdHVubmVscy4gSXQgY2hhbmdlcyBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCB0byB0YWtlIGEgY29udGV4dCBzdHJ1Y3QgaW5zdGVhZCBvZiBqdXN0IHRoZSBkZXZpY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3MsIGFuZCB1cGRhdGVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBob29rcyB0byB1c2UgdGhpcyBjb250ZXh0IGFuZCBjb3JyZWN0bHkgaWRlbnRpZnkgZW5jYXBzdWxhdGVkIHByb3RvY29scy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGQ2YWEwOTBmOGQ1OGYxMTg5OTlhMzJkM2M1MjhmMTY4Yzk1YTdlZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMDI6Mjg6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYwppbmRleCBhMDNhZjk3NTA1NzMxLi45MjYxMTgwMjgwMWVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMKQEAgLTI4MywxNCAmIzQzOzI4MywxOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwKIAkJCQkgICAgc3RydWN0IGFpcm9oYV93ZG1hX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayBzdGFjazsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0gewomIzQzOwkJLmRldiA9IGRldiwKJiM0MzsJfTsKIAlzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoOwogCWludCBlcnI7CiAKIAlpZiAoIWRldikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKJiM0MzsJZXRoZXJfYWRkcl9jb3B5KGN0eC5kYWRkciwgYWRkcik7CiYjNDM7CiAJcmN1X3JlYWRfbG9jaygpOwotCWVyciA9IGRldl9maWxsX2ZvcndhcmRfcGF0aChkZXYsIGFkZHIsICZhbXA7c3RhY2spOwomIzQzOwllcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoJmFtcDtjdHgsICZhbXA7c3RhY2spOwogCXJjdV9yZWFkX3VubG9jaygpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jCmluZGV4IDc3MWQ5MTE4Zjk0YWQuLjk5YjI4YWFhN2NjNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jCkBAIC05Miw2ICYjNDM7OTIsOSBAQCBzdGF0aWMgaW50CiBtdGtfZmxvd19nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLCBzdHJ1Y3QgbXRrX3dkbWFfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrIHN0YWNrOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7CiYjNDM7CQkuZGV2ID0gZGV2LAomIzQzOwl9OwogCXN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7CiAJaW50IGVycjsKIApAQCAtMTAxLDggJiM0MzsxMDQsMTAgQEAgbXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwgc3RydWN0IG10a193ZG1hX2kKIAlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVF9NRURJQVRFS19TT0NfV0VEKSkKIAkJcmV0dXJuIC0xOwogCiYjNDM7CWV0aGVyX2FkZHJfY29weShjdHguZGFkZHIsIGFkZHIpOwomIzQzOwogCXJjdV9yZWFkX2xvY2soKTsKLQllcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCAmYW1wO3N0YWNrKTsKJiM0MzsJZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKCZhbXA7Y3R4LCAmYW1wO3N0YWNrKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggNjJjZmFkN2U2Yjc5YS4uNjhjY2I1ODY4MDcwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC05MDIsNyAmIzQzOzkwMiw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggewogCQkJCXN0cnVjdCBpbjZfYWRkcglkc3RfdjY7CiAJCQl9OwogCi0JCQl1OAlsM19wcm90bzsKJiM0MzsJCQl1OAlpbm5lcl9wcm90bzsKIAkJfSB0dW47CiAJCXN0cnVjdCB7CiAJCQllbnVtIHsKQEAgLTkzOSw2ICYjNDM7OTM5LDcgQEAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayB7CiBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCB7CiAJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAl1OAkJCWRhZGRyW0VUSF9BTEVOXTsKJiM0MzsJX19iZTE2CQkJZXRoZXJfdHlwZTsKIAogCWludAkJCW51bV92bGFuczsKIAlzdHJ1Y3QgewpAQCAtMzQyNiw3ICYjNDM7MzQyNyw3IEBAIHZvaWQgZGV2X3JlbW92ZV9vZmZsb2FkKHN0cnVjdCBwYWNrZXRfb2ZmbG9hZCAqcG8pOwogCiBpbnQgZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgZGV2X2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwotaW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsCiYjNDM7aW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LAogCQkJICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayk7CiB2b2lkIGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTsKIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0X2J5X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oCmluZGV4IGEwOTBlYzNmZmVmMmUuLmYyZTI3NzFmMTg4ZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaApAQCAtMTE3LDcgJiM0MzsxMTcsNyBAQCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCB7CiAJCXN0cnVjdCBpbjZfYWRkcglkc3RfdjY7CiAJfTsKIAotCXU4CWwzX3Byb3RvOwomIzQzOwl1OAlpbm5lcl9wcm90bzsKIH07CiAKIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCBlNTBlZDY3N2RlNzI1Li4xM2RmZDIxMTNhNWFiIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtNzY5LDM1ICYjNDM7NzY5LDMxIEBAIHZvaWQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZSk7CiAKLWludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLAomIzQzO2ludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCwKIAkJCSAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spCiB7CiAJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmxhc3RfZGV2OwotCXN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IGN0eCA9IHsKLQkJLmRldgk9IGRldiwKLQl9OwogCXN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7CiAJaW50IHJldCA9IDA7CiAKLQltZW1jcHkoY3R4LmRhZGRyLCBkYWRkciwgc2l6ZW9mKGN0eC5kYWRkcikpOwogCXN0YWNrLSZndDtudW1fcGF0aHMgPSAwOwotCXdoaWxlIChjdHguZGV2ICZhbXA7JmFtcDsgY3R4LmRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX2ZpbGxfZm9yd2FyZF9wYXRoKSB7Ci0JCWxhc3RfZGV2ID0gY3R4LmRldjsKJiM0MzsJd2hpbGUgKGN0eC0mZ3Q7ZGV2ICZhbXA7JmFtcDsgY3R4LSZndDtkZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19maWxsX2ZvcndhcmRfcGF0aCkgewomIzQzOwkJbGFzdF9kZXYgPSBjdHgtJmd0O2RldjsKIAkJcGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7CiAJCWlmICghcGF0aCkKIAkJCWdvdG8gZXJyX291dDsKIAogCQltZW1zZXQocGF0aCwgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGgpKTsKLQkJcmV0ID0gY3R4LmRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX2ZpbGxfZm9yd2FyZF9wYXRoKCZhbXA7Y3R4LCBwYXRoKTsKJiM0MzsJCXJldCA9IGN0eC0mZ3Q7ZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoKTsKIAkJaWYgKHJldCAmbHQ7IDApCiAJCQlnb3RvIGVycl9vdXQ7CiAKIAkJc3RhY2stJmd0O251bV9wYXRocyYjNDM7JiM0Mzs7Ci0JCWlmIChXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LmRldikpCiYjNDM7CQlpZiAoV0FSTl9PTl9PTkNFKGxhc3RfZGV2ID09IGN0eC0mZ3Q7ZGV2KSkKIAkJCWdvdG8gZXJyX291dDsKIAl9CiAKLQlpZiAoIWN0eC5kZXYpCiYjNDM7CWlmICghY3R4LSZndDtkZXYpCiAJCXJldHVybiByZXQ7CiAKIAlwYXRoID0gZGV2X2Z3ZF9wYXRoKHN0YWNrKTsKQEAgLTgwNSw3ICYjNDM7ODAxLDcgQEAgaW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsCiAJCWdvdG8gZXJyX291dDsKIAogCXBhdGgtJmd0O3R5cGUgPSBERVZfUEFUSF9FVEhFUk5FVDsKLQlwYXRoLSZndDtkZXYgPSBjdHguZGV2OwomIzQzOwlwYXRoLSZndDtkZXYgPSBjdHgtJmd0O2RldjsKIAlzdGFjay0mZ3Q7bnVtX3BhdGhzJiM0MzsmIzQzOzsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBpcC5jIGIvbmV0L2lwdjQvaXBpcC5jCmluZGV4IGZiN2Q5NmY5OWIwNmIuLjE2MzAzMjVjNzdkMzQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwaXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcGlwLmMKQEAgLTM2MCw2ICYjNDM7MzYwLDkgQEAgc3RhdGljIGludCBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsCiAJY29uc3Qgc3RydWN0IGlwaGRyICp0aXBoID0gJmFtcDt0dW5uZWwtJmd0O3Bhcm1zLmlwaDsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKIAomIzQzOwlpZiAoY3R4LSZndDtldGhlcl90eXBlICE9IGNwdV90b19iZTE2KEVUSF9QX0lQKSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKIAlpZiAodHVubmVsLSZndDtjb2xsZWN0X21kKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKQEAgLTM3NSw3ICYjNDM7Mzc4LDcgQEAgc3RhdGljIGludCBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsCiAJcGF0aC0mZ3Q7dHlwZSA9IERFVl9QQVRIX1RVTjsKIAlwYXRoLSZndDt0dW4uc3JjX3Y0LnNfYWRkciA9IHRpcGgtJmd0O3NhZGRyOwogCXBhdGgtJmd0O3R1bi5kc3RfdjQuc19hZGRyID0gdGlwaC0mZ3Q7ZGFkZHI7Ci0JcGF0aC0mZ3Q7dHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUElQOwomIzQzOwlwYXRoLSZndDt0dW4uaW5uZXJfcHJvdG8gPSBJUFBST1RPX0lQSVA7CiAJcGF0aC0mZ3Q7dHVuLmRzdCA9ICZhbXA7cnQtJmd0O2RzdDsKIAlwYXRoLSZndDtkZXYgPSBjdHgtJmd0O2RldjsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCmluZGV4IGQ4MDAyMGJjMjYyMGUuLjdiNTQ5MTkyMzJiYTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKQEAgLTE4NDksNiAmIzQzOzE4NDksOSBAQCBzdGF0aWMgaW50IGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCwKIAlzdHJ1Y3QgZmxvd2k2IGZsNjsKIAlpbnQgZXJyOwogCiYjNDM7CWlmIChjdHgtJmd0O2V0aGVyX3R5cGUgIT0gY3B1X3RvX2JlMTYoRVRIX1BfSVBWNikpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiAJaWYgKHQtJmd0O3Bhcm1zLmZsYWdzICZhbXA7IChJUDZfVE5MX0ZfVVNFX09SSUdfVENMQVNTIHwKIAkJCSAgICAgIElQNl9UTkxfRl9VU0VfT1JJR19GTE9XTEFCRUwgfAogCQkJICAgICAgSVA2X1ROTF9GX1VTRV9PUklHX0ZXTUFSSykpCkBAIC0xODY5LDcgJiM0MzsxODcyLDcgQEAgc3RhdGljIGludCBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsCiAJCXBhdGgtJmd0O3R5cGUgPSBERVZfUEFUSF9UVU47CiAJCXBhdGgtJmd0O3R1bi5zcmNfdjYgPSBmbDYuc2FkZHI7CiAJCXBhdGgtJmd0O3R1bi5kc3RfdjYgPSBmbDYuZGFkZHI7Ci0JCXBhdGgtJmd0O3R1bi5sM19wcm90byA9IElQUFJPVE9fSVBWNjsKJiM0MzsJCXBhdGgtJmd0O3R1bi5pbm5lcl9wcm90byA9IElQUFJPVE9fSVBWNjsKIAkJcGF0aC0mZ3Q7dHVuLmRzdCA9IGRzdDsKIAkJcGF0aC0mZ3Q7ZGV2ID0gY3R4LSZndDtkZXY7CiAJCWN0eC0mZ3Q7ZGV2ID0gZHN0LSZndDtkZXY7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jCmluZGV4IDBiMzE0YjEwZTcwNWEuLmFmNTM0MDAwYTI4N2EgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jCkBAIC0xNDcsMTMgJiM0MzsxNDcsMTQgQEAgc3RhdGljIGJvb2wgaXBfaGFzX29wdGlvbnModW5zaWduZWQgaW50IHRob2ZmKQogCiBzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCB7CiAJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UJKmluOwomIzQzOwlfX2JlMTYJCQlldGhlcl90eXBlOwogCXUzMgkJCW9mZnNldDsKIAl1MzIJCQloZHJzaXplOwogCXN0cnVjdCB7CiAJCS8qIFR1bm5lbCBJUCBoZWFkZXIgc2l6ZSAqLwogCQl1MzIgaGRyX3NpemU7CiAJCS8qIElQIHR1bm5lbCBwcm90b2NvbCAqLwotCQl1OCBwcm90bzsKJiM0MzsJCXU4IGlubmVyX3Byb3RvOwogCX0gdHVuOwogfTsKIApAQCAtMTYxLDcgJiM0MzsxNjIsNiBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X3R1cGxlX2VuY2FwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiAJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQlzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSkKIHsKLQlfX2JlMTYgaW5uZXJfcHJvdG8gPSBza2ItJmd0O3Byb3RvY29sOwogCXN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aDsKIAlzdHJ1Y3QgcHBwb2VfaGRyICpwaGRyOwogCXN0cnVjdCBpcHY2aGRyICppcDZoOwpAQCAtMTc5LDMzICYjNDM7MTc5LDMxIEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfdHVwbGVfZW5jYXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAkJdmV0aCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpOwogCQl0dXBsZS0mZ3Q7ZW5jYXBbaV0uaWQgPSBudG9ocyh2ZXRoLSZndDtoX3ZsYW5fVENJKTsKIAkJdHVwbGUtJmd0O2VuY2FwW2ldLnByb3RvID0gc2tiLSZndDtwcm90b2NvbDsKLQkJaW5uZXJfcHJvdG8gPSB2ZXRoLSZndDtoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvOwogCQlvZmZzZXQgJiM0Mzs9IFZMQU5fSExFTjsKIAkJYnJlYWs7CiAJY2FzZSBodG9ucyhFVEhfUF9QUFBfU0VTKToKIAkJcGhkciA9IChzdHJ1Y3QgcHBwb2VfaGRyICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7CiAJCXR1cGxlLSZndDtlbmNhcFtpXS5pZCA9IG50b2hzKHBoZHItJmd0O3NpZCk7CiAJCXR1cGxlLSZndDtlbmNhcFtpXS5wcm90byA9IHNrYi0mZ3Q7cHJvdG9jb2w7Ci0JCWlubmVyX3Byb3RvID0gKigoX19iZTE2ICopKHBoZHIgJiM0MzsgMSkpOwogCQlvZmZzZXQgJiM0Mzs9IFBQUE9FX1NFU19ITEVOOwogCQlicmVhazsKIAl9CiAKLQlzd2l0Y2ggKGlubmVyX3Byb3RvKSB7CiYjNDM7CXN3aXRjaCAoY3R4LSZndDtldGhlcl90eXBlKSB7CiAJY2FzZSBodG9ucyhFVEhfUF9JUCk6CiAJCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0Mzsgb2Zmc2V0KTsKLQkJaWYgKGN0eC0mZ3Q7dHVuLnByb3RvID09IElQUFJPVE9fSVBJUCkgewomIzQzOwkJaWYgKGN0eC0mZ3Q7dHVuLmlubmVyX3Byb3RvID09IElQUFJPVE9fSVBJUCkgewogCQkJdHVwbGUtJmd0O3R1bi5kc3RfdjQuc19hZGRyID0gaXBoLSZndDtkYWRkcjsKIAkJCXR1cGxlLSZndDt0dW4uc3JjX3Y0LnNfYWRkciA9IGlwaC0mZ3Q7c2FkZHI7Ci0JCQl0dXBsZS0mZ3Q7dHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUElQOwomIzQzOwkJCXR1cGxlLSZndDt0dW4uaW5uZXJfcHJvdG8gPSBJUFBST1RPX0lQSVA7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBodG9ucyhFVEhfUF9JUFY2KToKIAkJaXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBvZmZzZXQpOwotCQlpZiAoY3R4LSZndDt0dW4ucHJvdG8gPT0gSVBQUk9UT19JUFY2KSB7CiYjNDM7CQlpZiAoY3R4LSZndDt0dW4uaW5uZXJfcHJvdG8gPT0gSVBQUk9UT19JUFY2KSB7CiAJCQl0dXBsZS0mZ3Q7dHVuLmRzdF92NiA9IGlwNmgtJmd0O2RhZGRyOwogCQkJdHVwbGUtJmd0O3R1bi5zcmNfdjYgPSBpcDZoLSZndDtzYWRkcjsKLQkJCXR1cGxlLSZndDt0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQVjY7CiYjNDM7CQkJdHVwbGUtJmd0O3R1bi5pbm5lcl9wcm90byA9IElQUFJPVE9fSVBWNjsKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMzI4LDcgJiM0MzszMjYsNyBAQCBzdGF0aWMgYm9vbCBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG8oc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAkJcmV0dXJuIGZhbHNlOwogCiAJaWYgKGlwaC0mZ3Q7cHJvdG9jb2wgPT0gSVBQUk9UT19JUElQKSB7Ci0JCWN0eC0mZ3Q7dHVuLnByb3RvID0gaXBoLSZndDtwcm90b2NvbDsKJiM0MzsJCWN0eC0mZ3Q7dHVuLmlubmVyX3Byb3RvID0gaXBoLSZndDtwcm90b2NvbDsKIAkJY3R4LSZndDt0dW4uaGRyX3NpemUgPSBzaXplOwogCQljdHgtJmd0O29mZnNldCAmIzQzOz0gY3R4LSZndDt0dW4uaGRyX3NpemU7CiAJfQpAQCAtMzUzLDcgJiM0MzszNTEsNyBAQCBzdGF0aWMgYm9vbCBuZl9mbG93X2lwNl90dW5uZWxfcHJvdG8oc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAkJcmV0dXJuIGZhbHNlOwogCiAJaWYgKGlwNmgtJmd0O25leHRoZHIgPT0gSVBQUk9UT19JUFY2KSB7Ci0JCWN0eC0mZ3Q7dHVuLnByb3RvID0gaXA2aC0mZ3Q7bmV4dGhkcjsKJiM0MzsJCWN0eC0mZ3Q7dHVuLmlubmVyX3Byb3RvID0gaXA2aC0mZ3Q7bmV4dGhkcjsKIAkJY3R4LSZndDt0dW4uaGRyX3NpemUgPSBzaXplb2YoKmlwNmgpOwogCQljdHgtJmd0O29mZnNldCAmIzQzOz0gY3R4LSZndDt0dW4uaGRyX3NpemU7CiAJfQpAQCAtMzY3LDggJiM0MzszNjUsOCBAQCBzdGF0aWMgYm9vbCBuZl9mbG93X2lwNl90dW5uZWxfcHJvdG8oc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIHN0YXRpYyB2b2lkIG5mX2Zsb3dfaXBfdHVubmVsX3BvcChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LAogCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpZiAoY3R4LSZndDt0dW4ucHJvdG8gIT0gSVBQUk9UT19JUElQICZhbXA7JmFtcDsKLQkgICAgY3R4LSZndDt0dW4ucHJvdG8gIT0gSVBQUk9UT19JUFY2KQomIzQzOwlpZiAoY3R4LSZndDt0dW4uaW5uZXJfcHJvdG8gIT0gSVBQUk9UT19JUElQICZhbXA7JmFtcDsKJiM0MzsJICAgIGN0eC0mZ3Q7dHVuLmlubmVyX3Byb3RvICE9IElQUFJPVE9fSVBWNikKIAkJcmV0dXJuOwogCiAJc2tiX3B1bGwoc2tiLCBjdHgtJmd0O3R1bi5oZHJfc2l6ZSk7CkBAIC0zNzYsMTAgJiM0MzszNzQsMTAgQEAgc3RhdGljIHZvaWQgbmZfZmxvd19pcF90dW5uZWxfcG9wKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiB9CiAKIHN0YXRpYyBib29sIG5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCi0JCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiBwcm90bykKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JX19iZTE2IGlubmVyX3Byb3RvID0gc2tiLSZndDtwcm90b2NvbDsKIAlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZldGg7CiYjNDM7CV9fYmUxNiBldGhlcl90eXBlOwogCWJvb2wgcmV0ID0gZmFsc2U7CiAKIAlzd2l0Y2ggKHNrYi0mZ3Q7cHJvdG9jb2wpIHsKQEAgLTM4OCwyMiAmIzQzOzM4NiwyNyBAQCBzdGF0aWMgYm9vbCBuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LAogCQkJcmV0dXJuIGZhbHNlOwogCiAJCXZldGggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopc2tiX21hY19oZWFkZXIoc2tiKTsKLQkJaWYgKHZldGgtJmd0O2hfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gPT0gcHJvdG8pIHsKLQkJCWN0eC0mZ3Q7b2Zmc2V0ICYjNDM7PSBWTEFOX0hMRU47Ci0JCQlpbm5lcl9wcm90byA9IHByb3RvOwotCQkJcmV0ID0gdHJ1ZTsKLQkJfQomIzQzOwkJY3R4LSZndDtldGhlcl90eXBlID0gdmV0aC0mZ3Q7aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bzsKJiM0MzsJCWN0eC0mZ3Q7b2Zmc2V0ICYjNDM7PSBWTEFOX0hMRU47CiYjNDM7CQlyZXQgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIGh0b25zKEVUSF9QX1BQUF9TRVMpOgotCQlpZiAobmZfZmxvd19wcHBvZV9wcm90byhza2IsICZhbXA7aW5uZXJfcHJvdG8pICZhbXA7JmFtcDsKLQkJICAgIGlubmVyX3Byb3RvID09IHByb3RvKSB7Ci0JCQljdHgtJmd0O29mZnNldCAmIzQzOz0gUFBQT0VfU0VTX0hMRU47Ci0JCQlyZXQgPSB0cnVlOwotCQl9CiYjNDM7CQlpZiAoIW5mX2Zsb3dfcHBwb2VfcHJvdG8oc2tiLCAmYW1wO2V0aGVyX3R5cGUpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCWN0eC0mZ3Q7ZXRoZXJfdHlwZSA9IGV0aGVyX3R5cGU7CiYjNDM7CQljdHgtJmd0O29mZnNldCAmIzQzOz0gUFBQT0VfU0VTX0hMRU47CiYjNDM7CQlyZXQgPSB0cnVlOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgaHRvbnMoRVRIX1BfSVApOgomIzQzOwljYXNlIGh0b25zKEVUSF9QX0lQVjYpOgomIzQzOwkJY3R4LSZndDtldGhlcl90eXBlID0gc2tiLSZndDtwcm90b2NvbDsKIAkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAJfQogCi0Jc3dpdGNoIChpbm5lcl9wcm90bykgewomIzQzOwlzd2l0Y2ggKGN0eC0mZ3Q7ZXRoZXJfdHlwZSkgewogCWNhc2UgaHRvbnMoRVRIX1BfSVApOgogCQlyZXQgPSBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG8oY3R4LCBza2IpOwogCQlicmVhazsKQEAgLTQ1NSw5ICYjNDM7NDU4LDYgQEAgbmZfZmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LAogewogCXN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTsKIAotCWlmICghbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woY3R4LCBza2IsIGh0b25zKEVUSF9QX0lQKSkpCi0JCXJldHVybiBOVUxMOwotCiAJaWYgKG5mX2Zsb3dfdHVwbGVfaXAoY3R4LCBza2IsICZhbXA7dHVwbGUpICZsdDsgMCkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTYxMSw3ICYjNDM7NjExLDcgQEAgc3RhdGljIGludCBuZl9mbG93X3R1bm5lbF9pcGlwX3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlwaC0mZ3Q7dmVyc2lvbgk9IDQ7CiAJaXBoLSZndDtpaGwJPSBzaXplb2YoKmlwaCkgJmd0OyZndDsgMjsKIAlpcGgtJmd0O2ZyYWdfb2ZmCT0gaXBfbXR1X2xvY2tlZCgmYW1wO3J0LSZndDtkc3QpID8gMCA6IGZyYWdfb2ZmOwotCWlwaC0mZ3Q7cHJvdG9jb2wJPSB0dXBsZS0mZ3Q7dHVuLmwzX3Byb3RvOwomIzQzOwlpcGgtJmd0O3Byb3RvY29sCT0gdHVwbGUtJmd0O3R1bi5pbm5lcl9wcm90bzsKIAlpcGgtJmd0O3Rvcwk9IHRvczsKIAlpcGgtJmd0O2RhZGRyCT0gdHVwbGUtJmd0O3R1bi5zcmNfdjQuc19hZGRyOwogCWlwaC0mZ3Q7c2FkZHIJPSB0dXBsZS0mZ3Q7dHVuLmRzdF92NC5zX2FkZHI7CkBAIC03OTQsMzMgJiM0Mzs3OTQsMTcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBuZl9mbG93X3F1ZXVlX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXJldHVybiBORl9TVE9MRU47CiB9CiAKLXVuc2lnbmVkIGludAotbmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCWNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSkKJiM0MztzdGF0aWMgaW50IG5mX2Zsb3dfcXVldWVfeG1pdDQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkgICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpCiB7Ci0Jc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoOwotCXN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUgPSBwcml2OwogCXN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm90aGVyX3R1cGxlOwogCWVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7Ci0Jc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggY3R4ID0gewotCQkuaW4JPSBzdGF0ZS0mZ3Q7aW4sCi0JfTsKIAlzdHJ1Y3QgbmZfZmxvd194bWl0IHhtaXQgPSB7fTsKIAlzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93OwogCXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoOwogCXN0cnVjdCBydGFibGUgKnJ0OwogCV9fYmUzMiBpcF9kYWRkcjsKLQlpbnQgcmV0OwotCi0JdHVwbGVoYXNoID0gbmZfZmxvd19vZmZsb2FkX2xvb2t1cCgmYW1wO2N0eCwgZmxvd190YWJsZSwgc2tiKTsKLQlpZiAoIXR1cGxlaGFzaCkKLQkJcmV0dXJuIE5GX0FDQ0VQVDsKLQotCXJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKCZhbXA7Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCXJldHVybiBORl9EUk9QOwotCWVsc2UgaWYgKHJldCA9PSAwKQotCQlyZXR1cm4gTkZfQUNDRVBUOwogCiAJaWYgKHVubGlrZWx5KHR1cGxlaGFzaC0mZ3Q7dHVwbGUueG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX1hGUk0pKSB7CiAJCXJ0ID0gZHN0X3J0YWJsZSh0dXBsZWhhc2gtJmd0O3R1cGxlLmRzdF9jYWNoZSk7CkBAIC04NzMsNiAmIzQzOzg1NywzNiBAQCBuZl9mbG93X29mZmxvYWRfaXBfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJcmV0dXJuIG5mX2Zsb3dfcXVldWVfeG1pdChzdGF0ZS0mZ3Q7bmV0LCBza2IsICZhbXA7eG1pdCk7CiB9CiYjNDM7CiYjNDM7dW5zaWduZWQgaW50CiYjNDM7bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQljb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2g7CiYjNDM7CXN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUgPSBwcml2OwomIzQzOwlzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCBjdHggPSB7CiYjNDM7CQkuaW4JPSBzdGF0ZS0mZ3Q7aW4sCiYjNDM7CX07CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woJmFtcDtjdHgsIHNrYikpCiYjNDM7CQlyZXR1cm4gTkZfQUNDRVBUOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoY3R4LmV0aGVyX3R5cGUgIT0gaHRvbnMoRVRIX1BfSVApKSkKJiM0MzsJCXJldHVybiBORl9BQ0NFUFQ7CiYjNDM7CiYjNDM7CXR1cGxlaGFzaCA9IG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoJmFtcDtjdHgsIGZsb3dfdGFibGUsIHNrYik7CiYjNDM7CWlmICghdHVwbGVoYXNoKQomIzQzOwkJcmV0dXJuIE5GX0FDQ0VQVDsKJiM0MzsKJiM0MzsJcmV0ID0gbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoJmFtcDtjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gTkZfRFJPUDsKJiM0MzsJZWxzZSBpZiAocmV0ID09IDApCiYjNDM7CQlyZXR1cm4gTkZfQUNDRVBUOwomIzQzOwomIzQzOwlyZXR1cm4gbmZfZmxvd19xdWV1ZV94bWl0NChza2IsIHR1cGxlaGFzaCwgc3RhdGUpOwomIzQzO30KIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKTsKIAogc3RhdGljIHZvaWQgbmZfZmxvd19uYXRfaXB2Nl90Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHRob2ZmLApAQCAtMTEwMSw0MiAmIzQzOzExMTUsMjMgQEAgbmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiB7CiAJc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB0dXBsZSA9IHt9OwogCi0JaWYgKCFuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChjdHgsIHNrYiwgaHRvbnMoRVRIX1BfSVBWNikpKQotCQlyZXR1cm4gTlVMTDsKLQogCWlmIChuZl9mbG93X3R1cGxlX2lwdjYoY3R4LCBza2IsICZhbXA7dHVwbGUpICZsdDsgMCkKIAkJcmV0dXJuIE5VTEw7CiAKIAlyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCAmYW1wO3R1cGxlKTsKIH0KIAotdW5zaWduZWQgaW50Ci1uZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSkKJiM0MztzdGF0aWMgaW50IG5mX2Zsb3dfcXVldWVfeG1pdDYoc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkgICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpCiB7Ci0Jc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoOwotCXN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUgPSBwcml2OwogCXN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm90aGVyX3R1cGxlOwogCWVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7Ci0Jc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggY3R4ID0gewotCQkuaW4JPSBzdGF0ZS0mZ3Q7aW4sCi0JfTsKIAlzdHJ1Y3QgbmZfZmxvd194bWl0IHhtaXQgPSB7fTsKIAlzdHJ1Y3QgaW42X2FkZHIgKmlwNl9kYWRkcjsKIAlzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93OwogCXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoOwogCXN0cnVjdCBydDZfaW5mbyAqcnQ7Ci0JaW50IHJldDsKLQotCXR1cGxlaGFzaCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cCgmYW1wO2N0eCwgZmxvd190YWJsZSwgc2tiKTsKLQlpZiAodHVwbGVoYXNoID09IE5VTEwpCi0JCXJldHVybiBORl9BQ0NFUFQ7Ci0KLQlyZXQgPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKCZhbXA7Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCXJldHVybiBORl9EUk9QOwotCWVsc2UgaWYgKHJldCA9PSAwKQotCQlyZXR1cm4gTkZfQUNDRVBUOwogCiAJaWYgKHVubGlrZWx5KHR1cGxlaGFzaC0mZ3Q7dHVwbGUueG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX1hGUk0pKSB7CiAJCXJ0ID0gZHN0X3J0Nl9pbmZvKHR1cGxlaGFzaC0mZ3Q7dHVwbGUuZHN0X2NhY2hlKTsKQEAgLTExOTAsNCAmIzQzOzExODUsMzQgQEAgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJcmV0dXJuIG5mX2Zsb3dfcXVldWVfeG1pdChzdGF0ZS0mZ3Q7bmV0LCBza2IsICZhbXA7eG1pdCk7CiB9CiYjNDM7CiYjNDM7dW5zaWduZWQgaW50CiYjNDM7bmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCSAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoOwomIzQzOwlzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlID0gcHJpdjsKJiM0MzsJc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggY3R4ID0gewomIzQzOwkJLmluCT0gc3RhdGUtJmd0O2luLAomIzQzOwl9OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIW5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKCZhbXA7Y3R4LCBza2IpKQomIzQzOwkJcmV0dXJuIE5GX0FDQ0VQVDsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KGN0eC5ldGhlcl90eXBlICE9IGh0b25zKEVUSF9QX0lQVjYpKSkKJiM0MzsJCXJldHVybiBORl9BQ0NFUFQ7CiYjNDM7CiYjNDM7CXR1cGxlaGFzaCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cCgmYW1wO2N0eCwgZmxvd190YWJsZSwgc2tiKTsKJiM0MzsJaWYgKCF0dXBsZWhhc2gpCiYjNDM7CQlyZXR1cm4gTkZfQUNDRVBUOwomIzQzOwomIzQzOwlyZXQgPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKCZhbXA7Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIE5GX0RST1A7CiYjNDM7CWVsc2UgaWYgKHJldCA9PSAwKQomIzQzOwkJcmV0dXJuIE5GX0FDQ0VQVDsKJiM0MzsKJiM0MzsJcmV0dXJuIG5mX2Zsb3dfcXVldWVfeG1pdDYoc2tiLCB0dXBsZWhhc2gsIHN0YXRlKTsKJiM0Mzt9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jCmluZGV4IDU2MjE5YjAyZTEyMjcuLjFlNTU2NDRmMmVkYjggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYwpAQCAtNDQsMTEgJiM0Mzs0NCwxNiBAQCBzdGF0aWMgYm9vbCBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfY2FjaGUsCiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCi0JCQkJICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLCB1OCAqaGEsCiYjNDM7CQkJCSAgICAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwKJiM0MzsJCQkJICAgICB1OCAqaGEsIF9fYmUxNiBldGhlcl90eXBlLAogCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spCiB7CiAJY29uc3Qgdm9pZCAqZGFkZHIgPSAmYW1wO2N0LSZndDt0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkc3RfY2FjaGUtJmd0O2RldjsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0gewomIzQzOwkJLmRldiA9IGRldiwKJiM0MzsJCS5ldGhlcl90eXBlID0gZXRoZXJfdHlwZSwKJiM0MzsJfTsKIAlzdHJ1Y3QgbmVpZ2hib3VyICpuOwogCXU4IG51ZF9zdGF0ZTsKIApAQCAtNzEsNyAmIzQzOzc2LDkgQEAgc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdF9jYWNoZSwKIAkJcmV0dXJuIC0xOwogCiBvdXQ6Ci0JcmV0dXJuIGRldl9maWxsX2ZvcndhcmRfcGF0aChkZXYsIGhhLCBzdGFjayk7CiYjNDM7CWV0aGVyX2FkZHJfY29weShjdHguZGFkZHIsIGhhKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRldl9maWxsX2ZvcndhcmRfcGF0aCgmYW1wO2N0eCwgc3RhY2spOwogfQogCiBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyB7CkBAIC0xMjYsNyAmIzQzOzEzMyw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssCiAKIAkJCQlpbmZvLSZndDt0dW4uc3JjX3Y2ID0gcGF0aC0mZ3Q7dHVuLnNyY192NjsKIAkJCQlpbmZvLSZndDt0dW4uZHN0X3Y2ID0gcGF0aC0mZ3Q7dHVuLmRzdF92NjsKLQkJCQlpbmZvLSZndDt0dW4ubDNfcHJvdG8gPSBwYXRoLSZndDt0dW4ubDNfcHJvdG87CiYjNDM7CQkJCWluZm8tJmd0O3R1bi5pbm5lcl9wcm90byA9IHBhdGgtJmd0O3R1bi5pbm5lcl9wcm90bzsKIAkJCQlpbmZvLSZndDt0dW5fZHN0ID0gcGF0aC0mZ3Q7dHVuLmRzdDsKIAkJCQlpbmZvLSZndDtudW1fdHVucyYjNDM7JiM0Mzs7CiAJCQl9IGVsc2UgewpAQCAtMjIzLDcgJiM0MzsyMzAsNyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAogCXVuc2lnbmVkIGNoYXIgaGFbRVRIX0FMRU5dOwogCWludCBpOwogCi0JaWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoZHN0LCBjdCwgZGlyLCBoYSwgJmFtcDtzdGFjaykgJmx0OyAwIHx8CiYjNDM7CWlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRzdCwgY3QsIGRpciwgaGEsIHBrdC0mZ3Q7ZXRoZXJ0eXBlLCAmYW1wO3N0YWNrKSAmbHQ7IDAgfHwKIAkgICAgbmZ0X2Rldl9wYXRoX2luZm8oJmFtcDtzdGFjaywgJmFtcDtpbmZvLCBoYSwgZnQpICZsdDsgMCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKQEAgLTIzOCw3ICYjNDM7MjQ1LDcgQEAgc3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwKIAlpZiAoaW5mby5udW1fdHVucykgewogCQlyb3V0ZS0mZ3Q7dHVwbGVbIWRpcl0uaW4udHVuLnNyY192NiA9IGluZm8udHVuLmRzdF92NjsKIAkJcm91dGUtJmd0O3R1cGxlWyFkaXJdLmluLnR1bi5kc3RfdjYgPSBpbmZvLnR1bi5zcmNfdjY7Ci0JCXJvdXRlLSZndDt0dXBsZVshZGlyXS5pbi50dW4ubDNfcHJvdG8gPSBpbmZvLnR1bi5sM19wcm90bzsKJiM0MzsJCXJvdXRlLSZndDt0dXBsZVshZGlyXS5pbi50dW4uaW5uZXJfcHJvdG8gPSBpbmZvLnR1bi5pbm5lcl9wcm90bzsKIAkJcm91dGUtJmd0O3R1cGxlWyFkaXJdLmluLm51bV90dW5zID0gaW5mby5udW1fdHVuczsKIAkJZHN0X3JlbGVhc2Uocm91dGUtJmd0O3R1cGxlW2Rpcl0uZHN0KTsKIAkJcm91dGUtJmd0O3R1cGxlW2Rpcl0uZHN0ID0gaW5mby50dW5fZHN0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODU0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmtpbmcgRmxvdyBUYWJsZSBPZmZsb2FkIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIGhlcmUsIGFuZCBpdCBsb29rcyBsaWtlIGEgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIGhvdyB3ZSBoYW5kbGUgdGhlIGZsb3cgdGFibGUgb2ZmbG9hZCBwYXRoLCBzcGVjaWZpY2FsbHkgaW4gdGhlIG5ldHdvcmtpbmcgY29yZS4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBhZGRyZXNzaW5nIHNvbWUgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoZSB3YXkgd2Ugd2VyZSBkZWFsaW5nIHdpdGggaW5uZXIgcHJvdG9jb2xzIGFuZCBFdGhlcm5ldCB0eXBlcy4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gY2VudGVyIGFyb3VuZCBhIG5ldyBgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHhgLiBJbnN0ZWFkIG9mIHBhc3NpbmcgdGhlIGRldmljZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzcyBzZXBhcmF0ZWx5IHRvIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgLCB3ZSYjMzk7cmUgbm93IHBhc3NpbmcgdGhpcyBgY3R4YCBzdHJ1Y3R1cmUuIFRoaXMgYGN0eGAgaW5jbHVkZXMgdGhlIGRldmljZSwgZGVzdGluYXRpb24gYWRkcmVzcywgYW5kIGEgY3J1Y2lhbCBuZXcgZmllbGQ6IGBldGhlcl90eXBlYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGlzIGFsbG93cyB0aGUgYGlwaXBfZmlsbF9mb3J3YXJkX3BhdGhgIGFuZCBgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aGAgZnVuY3Rpb25zIHRvIHByb3Blcmx5IGNoZWNrIGFuZCBhY2NvdW50IGZvciB0aGUgRXRoZXJuZXQgdHlwZSBpbiB0aGVpciBwcm9jZXNzaW5nLgoKSW1wb3J0YW50bHksIGl0IGxvb2tzIGxpa2UgYG5mX2Zsb3dfdGFibGVfaXAuY2AgaXMgYmVpbmcgbW9kaWZpZWQgdG8gYWN0dWFsbHkgdXRpbGl6ZSB0aGlzIG5ldyBgZXRoZXJfdHlwZWAgZmllbGQsIGFsb25nIHdpdGggYGlubmVyX3Byb3RvYCwgaW5zdGVhZCBvZiBzb2xlbHkgcmVseWluZyBvbiB0aGUgZXhpc3RpbmcgYGwzX3Byb3RvYC4gVGhpcyBpcyBjcml0aWNhbCBmb3Igb2ZmbG9hZCBmdW5jdGlvbmFsaXR5LgoKTGV0IG1lIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gdmVyaWZ5IHRoaXM6IEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgaW4gYSBidW5jaCBvZiBwbGFjZXMsIGluY2x1ZGluZyBhIGNvdXBsZSBvZiBQUEUgb2ZmbG9hZCBkcml2ZXJzIChgYWlyb2hhX3BwZS5jYCwgYG10a19wcGVfb2ZmbG9hZC5jYCksIHNvbWUgaGVhZGVyIGZpbGVzIChgbmV0ZGV2aWNlLmhgLCBgbmZfZmxvd190YWJsZS5oYCksIGFuZCBjb3JlIG5ldHdvcmtpbmcgY29kZSAoYGRldi5jYCwgYGlwaXAuY2AsIGBpcDZfdHVubmVsLmNgLCBhbmQgYSBjb3VwbGUgb2Yga2V5IG5ldGZpbHRlciBmaWxlcykuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0JiMzOTtzIHRvdWNoaW5nIHNvbWUgcHJldHR5IGxvdy1sZXZlbCBzdHVmZjogYGRldl9maWxsX2ZvcndhcmRfcGF0aGAsIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AsIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYCwgYW5kIGBuZnRfZGV2X2ZvcndhcmRfcGF0aGAuIFRoZXNlIGFyZSBhbGwgcmVhY2hhYmxlLCB0ZXN0YWJsZSBmdW5jdGlvbnMgaW4gYW55IHZpcnR1YWwgZW52aXJvbm1lbnQuCgpJJiMzOTttIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IGhvdyB0byB2YWxpZGF0ZSB0aGlzLiBXZSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGBDT05GSUdgIG9wdGlvbnMgYXJlIGVuYWJsZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIGBDT05GSUdfTkVURklMVEVSYCwgYENPTkZJR19ORl9GTE9XX1RBQkxFYCwgYENPTkZJR19ORl9GTE9XX1RBQkxFX0lQVjRgLCBgQ09ORklHX05GX0ZMT1dfVEFCTEVfSVBWNmAsIGFuZCB0aGUgdHVubmVsIG9wdGlvbnMsIHNwZWNpZmljYWxseSBgQ09ORklHX05FVF9JUEdSRWAsIGBDT05GSUdfSVBJUGAsIG9yIGBDT05GSUdfSVBWNl9UVU5ORUxgLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgdXAgYWxsIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRob3NlLiBJIG5lZWQgdG8gc2VhcmNoIGBORl9GTE9XX1RBQkxFYCBpbiBLY29uZmlnIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGNvcnJlY3QuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgcmVsYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9GTE9XX1RBQkxFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDE9ZW5kaWYgIyBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzAzOmNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDQtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MTE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTItXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcyMTpjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjItXHRib29sIFwmIzM0O1N1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNzMKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBUdW5uZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIHR1bm5lbHMuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBqdW1wIGludG8gdGhlIGtlcm5lbCBjb25maWcgZmlsZXMgdG8gc2VlIHdoYXQmIzM5O3MgYXZhaWxhYmxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBgbmV0L2lwdjQvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgYXZhaWxhYmlsaXR5IGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBJUElQYC4gVGhlbiwgdG8gY292ZXIgYWxsIGJhc2VzLCBhbmQgY29uc2lkZXJpbmcgd2UmIzM5O3JlIGxpa2VseSBkZWFsaW5nIHdpdGggYSBtb2Rlcm4gc2V0dXAsIEkmIzM5O2xsIG5lZWQgdG8gaGl0IGBuZXQvaXB2Ni9LY29uZmlnYCB0byB2ZXJpZnkgdGhlIHN0YXR1cyBvZiBgSVBWNl9UVU5ORUxgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb250cm9sIGZvciBJUHY2IHR1bm5lbGluZyB3b3VsZCBiZS4gS25vd2luZyB0aGVzZSB0d28gb3B0aW9ucyB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUgb2Ygd2hhdCB0dW5uZWxpbmcgY2FwYWJpbGl0aWVzIGFyZSBlbmFibGVkLCBhbmQgaG93IHRoZXkgYXJlIGhhbmRsZWQsIHdpdGhpbiB0aGUgY3VycmVudCBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhpcyB3aWxsIHRlbGwgbWUgaWYgdGhlIGtlcm5lbCBoYXMgdGhlIG5lY2Vzc2FyeSBjb21wb25lbnRzIGJ1aWx0LWluIHRvIHN1cHBvcnQgb3VyIG5lZWRzLCBvciB3aGV0aGVyIHdlIG5lZWQgdG8gdHdlYWsgdGhlIGJ1aWxkIHRvIHN1cHBvcnQgYSBwYXJ0aWN1bGFyIHR1bm5lbGluZyBzY2VuYXJpby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUElQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ0MwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOZXR3b3JrIFByb3RvY29sIENvbmZ1c2lvbiBDbGVhcmVkKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIGp1c3QgcmV2aWV3aW5nIHRoZXNlIGNvbmZpZ3VyYXRpb25zLCBhbmQgYSBjb25uZWN0aW9uIGp1c3QgY2xpY2tlZCBpbiBteSBoZWFkLiBJIHdhcyB0aGlua2luZyBhYm91dCB0aGUgYElQSVBgIHByb3RvY29sLCBhbmQgdGhlbiBpdCBoaXQgbWU6IGBJUElQYCBpcyAqYWN0dWFsbHkqIHRoZSBzYW1lIHRoaW5nIGFzIGBORVRfSVBJUGAuIEl0JiMzOTtzIGp1c3QgYSBkaWZmZXJlbnQgd2F5IG9mIHJlcHJlc2VudGluZyB0aGUgc2FtZSB1bmRlcmx5aW5nIGZ1bmN0aW9uYWxpdHkuIEFsbCB0aGUgcGllY2VzIGFyZSBmYWxsaW5nIGludG8gcGxhY2Ugbm93LCBhbmQgSSBjYW4gbW92ZSBvbiB0byB0aGUgbmV4dCBzZXQgb2YgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9JUElQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9MTQ5PWNvbmZpZyBJUF9QTlBfUkFSUFxuLS1cbm5ldC9pcHY0L0tjb25maWctMTYxLVxubmV0L2lwdjQvS2NvbmZpZzoxNjI6Y29uZmlnIE5FVF9JUElQXG5uZXQvaXB2NC9LY29uZmlnLTE2My1cdHRyaXN0YXRlIFwmIzM0O0lQOiB0dW5uZWxpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY3OAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSwgYW4gZXhwZXJ0LCBhbSBwcm9jZXNzaW5nIHRoZXNlIHRob3VnaHRzOgoKKipDb25zaWRlcmluZyB0aGUgTmV0d29yayBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQgbWUgc2VlLi4uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24sIGFuZCBzcGVjaWZpY2FsbHksIHRoZSB1c2Ugb2YgYElQVjZfVFVOTkVMYC4gSXQgaW1tZWRpYXRlbHkgYnJpbmdzIHRvIG1pbmQgc2V2ZXJhbCBjb25zaWRlcmF0aW9ucy4gSSYjMzk7bSBsaWtlbHkgZGVhbGluZyB3aXRoIGFuIElQdjYgdHJhbnNpdGlvbiBtZWNoYW5pc20sIG1vc3QgbGlrZWx5IGEgdHVubmVsIG9mIHNvbWUga2luZC4gTm93IEkgbmVlZCB0byBjb25zaWRlciBleGFjdGx5IHdoYXQga2luZCBvZiB0dW5uZWwuIElzIGl0IGEgNmluNCB0dW5uZWwsIGEgNnRvNCByZWxheSwgYSBUZXJlZG8gdHVubmVsLCBvciBwb3RlbnRpYWxseSBldmVuIGEgbW9yZSBjb21wbGV4LCBjb25maWd1cmVkIHR1bm5lbCBzdWNoIGFzIGEgR1JFIHR1bm5lbCBvciBhbiBJUElQIHR1bm5lbD8gSSYjMzk7ZCBoYXZlIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgdHVubmVsIGlzIGJlaW5nIGltcGxlbWVudGVkLiBUaGUgY29tbWFuZCBpdHNlbGYgc3VnZ2VzdHMgdGhlIGV4aXN0ZW5jZSBvZiBhIHR1bm5lbCwgYnV0IHByb3ZpZGVzIG5vIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIHVuZGVybHlpbmcgSVB2NCBuZXR3b3JrIGxvb2tzIGxpa2UsIGFzIHRoYXQmIzM5O3MgZ2VuZXJhbGx5IHdoZXJlIHRoZSBvdGhlciBzaWRlIG9mIHRoZSB0dW5uZWwgcmVzaWRlcy4gQW5kIEkgaGF2ZSB0byBrZWVwIGluIG1pbmQsIG9mIGNvdXJzZSwgdGhlIGltcGxpY2F0aW9ucyBmb3Igcm91dGluZywgTVRVIHNpemUsIGFuZCBwb3RlbnRpYWwgZmlyZXdhbGwgcnVsZXMgYXQgYm90aCB0aGUgbG9jYWwgYW5kIHJlbW90ZSBlbmRzIG9mIHRoaXMgY29ubmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjZfVFVOTkVMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWc9MTk2PWNvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xOTgtXG5uZXQvaXB2Ni9LY29uZmlnOjE5OTpjb25maWcgSVBWNl9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjAwLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDQ1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2suCgoqKkludmVzdGlnYXRpbmcgTmV0ZmlsdGVyIEZsb3cgT2ZmbG9hZCBIb29rcyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY2AuIE15IHByaW1hcnkgaW50ZXJlc3QgYXQgdGhlIG1vbWVudCBsaWVzIHdpdGggdW5kZXJzdGFuZGluZyB0aGUgaW50cmljYWNpZXMgb2YgdGhlIGZsb3cgb2ZmbG9hZCBtZWNoYW5pc21zIHdpdGhpbiBOZXRmaWx0ZXIsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIElQIHByb3RvY29sIGZhbWlseS4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgc2NydXRpbml6ZSB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AgYW5kIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYC4gSXQmIzM5O3MgY3J1Y2lhbCB0byBncmFzcCBob3cgdGhlc2UgaG9va3MgZnVuY3Rpb24sIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSBlbXBsb3ksIGFuZCB0aGVpciBpbnRlcnBsYXkgd2l0aCB0aGUgb3ZlcmFsbCBmbG93IHRhYmxlIGFyY2hpdGVjdHVyZS4gTXkgYWltIGlzIHRvIGdhaW4gYSBzb2xpZCBjb21wcmVoZW5zaW9uIG9mIGhvdyBJUHY0IGFuZCBJUHY2IHRyYWZmaWMgaXMgaGFuZGxlZCB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LCBwYXJ0aWN1bGFybHkgdGhlIGxvZ2ljIGJlaGluZCB0aGUgb2ZmbG9hZCBkZWNpc2lvbiBhbmQgdGhlIHN1YnNlcXVlbnQgZXhlY3V0aW9uIG9mIG9mZmxvYWQgb3BlcmF0aW9ucy4gSSBhbnRpY2lwYXRlIGZpbmRpbmcga2V5IGluc2lnaHRzIGludG8gcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGJ5IHRob3JvdWdobHkgYW5hbHl6aW5nIHRoZXNlIGZ1bmN0aW9ucy4gSSYjMzk7bSByZWFkeSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc3RhcnQgZmlndXJpbmcgb3V0IHdoYXQmIzM5O3MgcmVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X29mZmxvYWRfaXBfaG9vayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTM0NT1pbnQgbmZfZmxvd19vZmZsb2FkX3hkcF9zZXR1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zNDgtXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjM0OTp1bnNpZ25lZCBpbnQgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzUwLVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9MTI9bmZfZmxvd19vZmZsb2FkX2luZXRfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtMzYtXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6Mzc6XHRcdHJldHVybiBuZl9mbG93X29mZmxvYWRfaXBfaG9vayhwcml2LCBza2IsIHN0YXRlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtMzgtXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9Nzg9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaXB2NCA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTgzLVx0LmZyZWVcdFx0PSBuZl9mbG93X3RhYmxlX2ZyZWUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjg0Olx0Lmhvb2tcdFx0PSBuZl9mbG93X29mZmxvYWRfaXBfaG9vayxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODUtXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04NjE9dW5zaWduZWQgaW50XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4NjI6bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg2My1cdFx0XHRjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODg5LX1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjg5MDpFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X29mZmxvYWRfaXBfaG9vayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04OTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTU4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgSVAgYW5kIElQdjYgb2ZmbG9hZGluZywgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipNeSBNZW50YWwgTW9kZWwgb2YgSVAgRmxvdyBPZmZsb2FkIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIGEga2VybmVsIG5ldHdvcmtpbmcgcGVyc3BlY3RpdmUsIEkmIzM5O20ga2V5aW5nIGluIG9uIHRoZSBmbG93IG9mZmxvYWQgaG9va3MuIEkgc2VlIHRoYXQgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgIGFyZSB0aGUgY3J1Y2lhbCBlbnRyeSBwb2ludHMgZm9yIHRoaXMgd2hvbGUgSVAgYW5kIElQdjYgb2ZmbG9hZCBwcm9jZXNzLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBpbml0aWFsIGRlY2lzaW9ucyBnZXQgbWFkZSwgdGhlIGluc3BlY3Rpb24gc3RhcnRzLCB0aGUgY2xhc3NpZmljYXRpb24gaGFwcGVucyDigJMgdGhpcyBpcyB0aGUgY29yZSBvZiBnZXR0aW5nIHRoZSB0cmFmZmljIG9mZmxvYWRlZC4gCgpJJiMzOTttIGFsc28gbm90aW5nIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgLiBUaGlzIHNvdW5kcyBjcml0aWNhbC4gV2hpbGUgdGhlIGhvb2tzIG1pZ2h0IGluaXRpYXRlIHRoZSBwcm9jZXNzLCBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBpcyBsaWtlbHkgd2hlcmUgdGhlIGFjdHVhbCBmb3J3YXJkaW5nIGluZm9ybWF0aW9uIGdldHMgcG9wdWxhdGVkLiBJIGJldCBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcywgbGlrZSB0aGUgZmxvdyBjYWNoZSBlbnRyaWVzLCBhbmQgcG9wdWxhdGluZyB0aGVtIHdpdGggdGhlIGRldGFpbHMgdGhlIGhhcmR3YXJlIG5lZWRzIHRvIGFjY2VsZXJhdGUgdGhlIHRyYWZmaWMuIFRoaXMgZnVuY3Rpb24gaXMgcHJvYmFibHkgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIGRldmljZSBkcml2ZXIsIGFuZCBrbm93cyBleGFjdGx5IGhvdyB0byB0ZWxsIHRoZSBOSUMgd2hpY2ggcGFja2V0cyB0byBoYW5kbGUgaW4gaGFyZHdhcmUuIFRoaXMgbWVhbnMgdGhpcyBpcyB0aGUgcG9pbnQgd2hlcmUgdGhlIGRlY2lzaW9ucyBtYWRlIGF0IHRoZSBob29rIGFyZSBtYXRlcmlhbGl6ZWQsIGFuZCB0dXJuZWQgaW50byBhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rldl9maWxsX2ZvcndhcmRfcGF0aCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTI4Mj1zdGF0aWMgaW50IGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTI5Ny1cdHJjdV9yZWFkX2xvY2soKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6Mjk4Olx0ZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKFx1MDAyNmN0eCwgXHUwMDI2c3RhY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0yOTktXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTMxMi1lcnJfb3V0OlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozMTM6XHRkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShcdTAwMjZzdGFjayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTMxNC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYz05Mj1tdGtfZmxvd19nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLCBzdHJ1Y3QgbXRrX3dkbWFfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYy0xMDktXHRyY3VfcmVhZF9sb2NrKCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYzoxMTA6XHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoXHUwMDI2Y3R4LCBcdTAwMjZzdGFjayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYy0xMTEtXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYy0xMjYtZXJyX291dDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jOjEyNzpcdGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKFx1MDAyNnN0YWNrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jLTEyOC1cbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTM0Mjk9aW50IGRldl9maWxsX21ldGFkYXRhX2RzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MzQzMDppbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTM0MzEtXHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayk7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjM0MzI6dm9pZCBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayk7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTM0MzMtc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRfYnlfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jPTc1Nj1zdGF0aWMgaW50IHZsYW5fZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYy03NjItXG5uZXQvODAyMXEvdmxhbl9kZXYuYzo3NjM6c3RhdGljIGludCB2bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzY0LVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYz0xMDc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmxhbl9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jLTExMDktXHQubmRvX2dldF9pZmxpbmtcdFx0PSB2bGFuX2Rldl9nZXRfaWZsaW5rLFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6MTExMDpcdC5uZG9fZmlsbF9mb3J3YXJkX3BhdGhcdD0gdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGgsXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMTExLVx0Lm5kb19od3RzdGFtcF9nZXRcdD0gdmxhbl9od3RzdGFtcF9nZXQsXG4tLVxubmV0L2NvcmUvZGV2LmM9NzQzPXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpkZXZfZndkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4tLVxubmV0L2NvcmUvZGV2LmMtNzUwLVxubmV0L2NvcmUvZGV2LmM6NzUxOnZvaWQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG5uZXQvY29yZS9kZXYuYy03NTIte1xuLS1cbm5ldC9jb3JlL2Rldi5jLTc2OS19XG5uZXQvY29yZS9kZXYuYzo3NzA6RVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UpO1xubmV0L2NvcmUvZGV2LmMtNzcxLVxubmV0L2NvcmUvZGV2LmM6NzcyOmludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbm5ldC9jb3JlL2Rldi5jLTc3My1cdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTgwOC1lcnJfb3V0OlxubmV0L2NvcmUvZGV2LmM6ODA5Olx0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RhY2spO1xubmV0L2NvcmUvZGV2LmMtODEwLVxuLS1cbm5ldC9jb3JlL2Rldi5jLTgxMi19XG5uZXQvY29yZS9kZXYuYzo4MTM6RVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTtcbm5ldC9jb3JlL2Rldi5jLTgxNC1cbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz05Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfbW9uaXRvcmlmX29wcyA9IHtcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy05ODgtXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo5ODk6c3RhdGljIGludCBpZWVlODAyMTFfbmV0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG5uZXQvbWFjODAyMTEvaWZhY2UuYy05OTAtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmM9MTA0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9kYXRhaWZfODAyM19vcHMgPSB7XG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtMTA1My1cdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IGllZWU4MDIxMV9jaGFuZ2VfbWFjLFxubmV0L21hYzgwMjExL2lmYWNlLmM6MTA1NDpcdC5uZG9fZmlsbF9mb3J3YXJkX3BhdGhcdD0gaWVlZTgwMjExX25ldGRldl9maWxsX2ZvcndhcmRfcGF0aCxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTEwNTUtXHQubmRvX3NldHVwX3RjXHRcdD0gaWVlZTgwMjExX25ldGRldl9zZXR1cF90Yyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTM2PXN0YXRpYyBib29sIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTQ0LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzo0NTpzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy00Ni1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtODAtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjgxOlx0cmV0dXJuIGRldl9maWxsX2ZvcndhcmRfcGF0aChcdTAwMjZjdHgsIHN0YWNrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtODItfVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MTA0PXN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0xOTgtZXJyX291dDpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MTk5Olx0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RhY2spO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yMDAtXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0yMjE9c3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTIzMi1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MjMzOlx0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoZHN0LCBjdCwgZGlyLCBoYSwgcGt0LVx1MDAzZWV0aGVydHlwZSwgXHUwMDI2c3RhY2spIFx1MDAzYyAwIHx8XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTIzNC1cdCAgICBuZnRfZGV2X3BhdGhfaW5mbyhcdTAwMjZzdGFjaywgXHUwMDI2aW5mbywgaGEsIGZ0KSBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MzcKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUHJpb3JpdGl6aW5nIEZ1enppbmcgVGFyZ2V0cyBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgd2hlcmUgdG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cy4gTG9va2luZyBhdCB0aGlzIGxpc3QsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZXNlIGZ1bmN0aW9uczogYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgLCBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCwgYG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGhgLCBgaXBpcF9maWxsX2ZvcndhcmRfcGF0aGAsIGFuZCBgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aGAuCgpIb3dldmVyLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgbGV0JiMzOTtzIGp1c3QgY29uZmlybSBpZiBgaXBpcF9maWxsX2ZvcndhcmRfcGF0aGAgYW5kIGBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoYCBhcmUgc3RhdGljYWxseSBkZWZpbmVkLiBZZXAsIHRoZXkgYXJlLiBUaGF0IHJlZHVjZXMgdGhlIGluaXRpYWwgZm9jdXMgYSBiaXQuIFNvLCBmb3IgZnV6emluZywgSSYjMzk7bSBnb2luZyB0byBwdXQgdGhlc2UgYXQgdGhlIHRvcCBvZiBteSBsaXN0OiBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCwgYW5kIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYC4gSG9sZCBvbiwgYG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGlzIGFsc28gc3RhdGljLCBzbyBJIGNhbiBpZ25vcmUgdGhhdCBhcyB3ZWxsLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSBpZiBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AgYXJlIGV4cG9ydGVkLiBZZXMsIHRoZXkgYXJlISBBbmQgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgaXMgZXhwb3J0ZWQgYXMgd2VsbC4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGtleS4gU2luY2UgdGhleSYjMzk7cmUgZXhwb3J0ZWQsIHRoZXkmIzM5O3JlIGxpa2VseSBnb2luZyB0byBwcm92aWRlIG1vcmUgdGVzdCBjb3ZlcmFnZS4KCk5leHQgc3RlcDogSSYjMzk7bGwgc3RhcnQgYnkgdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCBpbiB0aGUgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jYCBmaWxlLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X29mZmxvYWRfaXBfaG9vayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTM0NT1pbnQgbmZfZmxvd19vZmZsb2FkX3hkcF9zZXR1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zNDgtXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjM0OTp1bnNpZ25lZCBpbnQgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzUwLVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9MTI9bmZfZmxvd19vZmZsb2FkX2luZXRfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtMzYtXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6Mzc6XHRcdHJldHVybiBuZl9mbG93X29mZmxvYWRfaXBfaG9vayhwcml2LCBza2IsIHN0YXRlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtMzgtXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9Nzg9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaXB2NCA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTgzLVx0LmZyZWVcdFx0PSBuZl9mbG93X3RhYmxlX2ZyZWUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjg0Olx0Lmhvb2tcdFx0PSBuZl9mbG93X29mZmxvYWRfaXBfaG9vayxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODUtXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04NjE9dW5zaWduZWQgaW50XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4NjI6bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg2My1cdFx0XHRjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODg5LX1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjg5MDpFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X29mZmxvYWRfaXBfaG9vayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04OTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzA3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgSVB2NiBGbG93IE9mZmxvYWQgSG9vayoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYC4gSSYjMzk7bSBpbW1lZGlhdGVseSBmb2N1c2luZyBvbiB0aGlzIHNwZWNpZmljIGhvb2sgcG9pbnQsIGxpa2VseSB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmssIGJlY2F1c2UgaXQmIzM5O3MgdGhlIGdhdGV3YXkgZm9yIElQdjYgZmxvdyBvZmZsb2FkLiBLbm93aW5nIHRoaXMgaG9vayBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBJUHY2IHRyYWZmaWMgaXMgaW50ZXJjZXB0ZWQsIGluc3BlY3RlZCwgYW5kIHRoZW4gcG90ZW50aWFsbHkgaGFuZGVkIG9mZiB0byBoYXJkd2FyZSBmb3IgYWNjZWxlcmF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIHRoaXMgaG9vayBzaXRzIGluIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwaXBlbGluZS4gSXMgaXQgYmVmb3JlIG9yIGFmdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmc/IEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgTmV0ZmlsdGVyIG1vZHVsZXMgbGlrZSBjb25udHJhY2sgYW5kIE5BVD8gVGhlIHNwZWNpZmljcyBvZiBpdHMgcGxhY2VtZW50IHdpbGwgZGljdGF0ZSB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgdGhlIHR5cGVzIG9mIG9mZmxvYWQgb3Bwb3J0dW5pdGllcyBpdCBwcmVzZW50cy4gSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSBsb2dpYyB3aXRoaW4gdGhlIGhvb2sgdG8gcHJvcGVybHkgZXZhbHVhdGUgaXRzIGJlaGF2aW9yIGFuZCBhbnkgcG90ZW50aWFsIGZvciBvcHRpbWl6YXRpb24gb3IgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9MzQ5PXVuc2lnbmVkIGludCBuZl9mbG93X29mZmxvYWRfaXBfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zNTAtXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjM1MTp1bnNpZ25lZCBpbnQgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zNTItXHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTEyPW5mX2Zsb3dfb2ZmbG9hZF9pbmV0X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTM4LVx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6Mzk6XHRcdHJldHVybiBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKHByaXYsIHNrYiwgc3RhdGUpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy00MC1cdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTg4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2lwdjYgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy05My1cdC5mcmVlXHRcdD0gbmZfZmxvd190YWJsZV9mcmVlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo5NDpcdC5ob29rXHRcdD0gbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtOTUtXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMTg5PXVuc2lnbmVkIGludFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTE5MDpuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMTkxLVx0XHRcdCAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEyMTctfVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTIxODpFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1NjkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0d29yayBGbG93IE9mZmxvYWQgUGF0Y2hlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgaGl0dGluZyB0aGUgY29yZSBvZiB0aGUgTmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5LiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgIGZ1bmN0aW9ucy4gVGhlIGtleSBjaGFuZ2UgaGVyZSBzZWVtcyB0byBiZSB0aGUgYWRkZWQgY2hlY2tzIGZvciBgbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2xgIGFuZCBgY3R4LmV0aGVyX3R5cGVgLiBSaWdodCBhd2F5LCB0aGlzIHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZW5jYXBzdWxhdGVkIHRyYWZmaWMgb2Ygc29tZSBraW5kIOKAkyBwb3RlbnRpYWxseSBHUkUsIFZYTEFOLCBvciBzb21ldGhpbmcgc2ltaWxhci4gVGhleeKAmXJlIGxpa2VseSB0cnlpbmcgdG8gY29ycmVjdGx5IGlkZW50aWZ5IG9yIGhhbmRsZSBwYWNrZXRzIHRoYXQgYXJlIG5lc3RlZCBvciB0dW5uZWxlZC4KCkJleW9uZCB0aGUgaG9vayBtb2RpZmljYXRpb25zLCBJIHNlZSB0aGF0IGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGlzIGFsc28gYmVpbmcgdG91Y2hlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBmb3J3YXJkaW5nIHBhdGggZm9yIHRoZSBlbmNhcHN1bGF0ZWQgb3IgbmVzdGVkIHBhY2tldHMgaXMgYmVpbmcgY29uc3RydWN0ZWQgYW5kIHByb3BhZ2F0ZWQuCgpUbyBnZXQgYSBiZXR0ZXIgZ3JpcCBvbiBob3cgYWxsIHRoaXMgZml0cyB0b2dldGhlciwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG5mdF9kZXZfZm9yd2FyZF9wYXRoYCB3aGljaCwgYmFzZWQgb24gdGhlIGNvbnRleHQsIEkmIzM5O20gcHJldHR5IHN1cmUgaXMgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNgLiBUaGF0IHNob3VsZCBwcm92aWRlIHRoZSBjb250ZXh0IG5lZWRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHVwZGF0ZXMgYXJlIGZpdHRpbmcgaW50byB0aGUgZmxvdyB0YWJsZSBwYXRoaW5nIG9mIHRoZSBlbmNhcHN1bGF0ZWQgdHJhZmZpYy4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGNoYW5nZSBhZmZlY3RzIHRoZSBwcm9jZXNzaW5nIHRoYXQgZGVjaWRlcyB3aGVyZSB0byBmb3J3YXJkIHRoZSBlbmNhcHN1bGF0ZWQgdHJhZmZpYywgb3IgdG8gYWx0ZXIgaXQgaW4gYW55IHdheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X2Rldl9mb3J3YXJkX3BhdGgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0yMDQ9c3RhdGljIGJvb2wgbmZ0X2Zsb3d0YWJsZV9maW5kX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMjIwLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzoyMjE6c3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMjIyLVx0XHRcdFx0c3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MjY3PWludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMzA5LVx0aWYgKHJvdXRlLVx1MDAzZXR1cGxlW2Rpcl0ueG1pdF90eXBlXHQ9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MzEwOlx0ICAgIG5mdF9kZXZfZm9yd2FyZF9wYXRoKHBrdCwgcm91dGUsIGN0LCBkaXIsIGZ0KSBcdTAwM2MgMClcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMzExLVx0XHRnb3RvIGVycl9kc3RfcmVsZWFzZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTMxMy1cdGlmIChyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS54bWl0X3R5cGUgPT0gRkxPV19PRkZMT0FEX1hNSVRfTkVJR0ggXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjMxNDpcdCAgICBuZnRfZGV2X2ZvcndhcmRfcGF0aChwa3QsIHJvdXRlLCBjdCwgIWRpciwgZnQpIFx1MDAzYyAwKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0zMTUtXHRcdGdvdG8gZXJyX2RzdF9yZWxlYXNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQyNgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgdGhlIEV4cG9ydCBTdGF0dXMgb2YgYG5mdF9mbG93X3JvdXRlYCoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIGBuZnRfZmxvd19yb3V0ZWAgY29tcG9uZW50IG1lbnRpb25lZC4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGlzIGFyY2hpdGVjdHVyZSwgaXMgdG8gZGV0ZXJtaW5lIGl0cyBhY2Nlc3NpYmlsaXR5LiBJcyBpdCBhY3R1YWxseSBleHBvcnRlZD8gSXMgaXQgYXZhaWxhYmxlIGZvciB1c2UgYnkgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBvciBhIG1vZHVsZSwgb3IgaXMgaXQgaW50ZW5kZWQgdG8gYmUgaW50ZXJuYWwgdG8gYSBwYXJ0aWN1bGFyIGNvbnRleHQ/IFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUuIFRoZSB3YXkgdGhpcyBpcyBhcmNoaXRlY3RlZCBzaWduaWZpY2FudGx5IGltcGFjdHMgdGhlIG92ZXJhbGwgZmxvdyBkZXNpZ24gYW5kIHRoZSBsZXZlbCBvZiBtb2R1bGFyaXR5LiBJZiBpdCYjMzk7cyBleHBvcnRlZCwgdGhlbiBpdHMgZnVuY3Rpb25hbGl0eSBpcyBhIGtleSBwaWVjZS4gSWYgaXQmIzM5O3Mgbm90LCBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCBfaXNfIHZpc2libGUgZnJvbS4gTm93IGxldCYjMzk7cyBkaWcgaW50byB0aGUgY29kZSBhbmQgdmVyaWZ5IGl0cyBleHBvcnQgc3RhdHVzOyBhIHF1aWNrIGdsYW5jZSBhdCB0aGUgcmVsZXZhbnQgZmlsZXMgc2hvdWxkIGFuc3dlciB0aGF0IHF1ZXN0aW9uLiBUaW1lIHRvIGNvbmZpcm0gaWYgdGhpcyBjb21wb25lbnQgY2FuIGJlIHJlYWRpbHkgbGV2ZXJhZ2VkIG9yIGlmIEkmIzM5O20gbG9va2luZyBhdCBzb21ldGhpbmcgbW9yZSBsaW1pdGVkIGluIHNjb3BlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfZmxvd19yb3V0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTI0Nz1zdHJ1Y3QgbmZ0X3BrdGluZm87XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjI0ODppbnQgbmZ0X2Zsb3dfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMjQ5LVx0XHQgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0yMjE9c3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTI2Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MjY3OmludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yNjgtXHRcdCAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTMyMy19XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjMyNDpFWFBPUlRfU1lNQk9MX0dQTChuZnRfZmxvd19yb3V0ZSk7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9NTA9c3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xMDgtXHRkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7XG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoxMDk6XHRpZiAobmZ0X2Zsb3dfcm91dGUocGt0LCBjdCwgXHUwMDI2cm91dGUsIGRpciwgcHJpdi1cdTAwM2VmbG93dGFibGUpIFx1MDAzYyAwKVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTEwLVx0XHRnb3RvIGVycl9mbG93X3JvdXRlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTEzNwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBOZXRmaWx0ZXIgRmxvdyBPZmZsb2FkIEJyZWFrZG93bioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGBuZnRfZmxvd19yb3V0ZWAgZnVuY3Rpb24sIGNydWNpYWwgZm9yIG91ciBuZXRmaWx0ZXIgZmxvdyBvZmZsb2FkIHRhcmdldCwgaXMgaW52b2tlZCBmcm9tIHdpdGhpbiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCwgd2hpY2ggcmVzaWRlcyBpbiB0aGUgYG5mdF9mbG93X29mZmxvYWQuY2AgZmlsZS4gVGhpcyBpcyBvdXIgdGFyZ2V0IGZ1bmN0aW9uLCB0aGUgY29yZSBvZiB0aGUgZmxvdyBvZmZsb2FkaW5nIG1lY2hhbmlzbS4KClRoZXJlZm9yZSwgdG8gdGhvcm91Z2hseSB1bmRlcnN0YW5kIHRoZSBmbG93LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Uga2V5IHN5bWJvbHM6IGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgLCBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgLCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AsIGFuZCBvZiBjb3Vyc2UsIGBuZnRfZmxvd19yb3V0ZWAgaXRzZWxmLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGdyYXNwIG9uIHRoZSBpbm5lciB3b3JraW5ncyBvZiB0aGlzIHN5c3RlbS4KCkZ1cnRoZXJtb3JlLCBJIHNob3VsZCBpbnZlc3RpZ2F0ZSB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIHByZXNlbmNlIGFuZCBzZXR1cCBvZiBgTkZfRkxPV19UQUJMRWAgYW5kIGBORl9GTE9XX1RBQkxFX0lORVRgLCB3aGljaCB3b3VsZCBlc3RhYmxpc2ggdGhlIGZsb3cgdGFibGUgaW5mcmFzdHJ1Y3R1cmUuIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IGBORlRfRkxPV19PRkZMT0FEYCBleGlzdHMsIGFzIGl0JiMzOTtzIGZvdW5kYXRpb25hbCB0byB0aGUgb2ZmbG9hZCBmZWF0dXJlLiBBbmQgZmluYWxseSwgSSBtdXN0IGNvbmZpcm0gYE5FVF9JUElQYCBhbmQgYElQVjZfVFVOTkVMYCBhcmUgYXBwcm9wcmlhdGVseSBjb25maWd1cmVkLCBzaW5jZSB0dW5uZWxpbmcgd2lsbCBwbGF5IGEgcm9sZSBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORlRfRkxPV19PRkZMT0FEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz00OTg9Y29uZmlnIE5GVF9FWFRIRFJfRENDUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTA0OmNvbmZpZyBORlRfRkxPV19PRkZMT0FEXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTA1LVx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX0ZMT1dfVEFCTEVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2OTcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRXhhbWluaW5nIEZsb3cgVGFibGUgSW1wbGVtZW50YXRpb25zKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYXJ0IGluIGZsb3cgdGFibGUgaW1wbGVtZW50YXRpb25zLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBzcGVjaWZpY2FsbHkgYXQgdGhlIElQdjQgYW5kIElQdjYgdmVyc2lvbnMuIEkgbmVlZCB0byBjaGVjayBgTkZfRkxPV19UQUJMRV9JUFY0YCBhbmQgYE5GX0ZMT1dfVEFCTEVfSVBWNmAuIEkgbmVlZCB0byBjb21wYXJlIHRoZWlyIHN0cnVjdHVyZSBhbmQgZnVuY3Rpb25hbGl0eS4gQXJlIHRoZXkgc2ltaWxhcj8gQXJlIHRoZXJlIHNpZ25pZmljYW50IGRpZmZlcmVuY2VzIGluIGhvdyB0aGV5IGhhbmRsZSBhZGRyZXNzIGZhbWlsaWVzPyBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGluaGVyZW50IGluIG9uZSB2ZXJzdXMgdGhlIG90aGVyPyBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBmbG93IHRhYmxlcyBhcmUgaW50ZWdyYXRlZCB3aXRoIHRoZSBicm9hZGVyIG5ldGZpbHRlciBmcmFtZXdvcmsgYXMgd2VsbC4gVGhpcyB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uIGZvciBmaWd1cmluZyBvdXQgd2hhdCB0aGV5IGRvIGFuZCBob3cgdGhleSBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfRkxPV19UQUJMRV9JUFYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTkxOAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gTmV0d29yayBGbG93IFRhYmxlIEltcGxlbWVudGF0aW9uKioKCkhvbGQgb24gYSBzZWNvbmQuLi4gSSBkaXN0aW5jdGx5IHJlbWVtYmVyIHNlZWluZyBzb21ldGhpbmcgYWJvdXQgYE5GX0ZMT1dfVEFCTEVfSU5FVGAgaW4gdGhlIGNvZGUgYSBiaXQgYWdvLiBUaGF0IG5hbWUgaXMgcmluZ2luZyBhIGJlbGwuIEdpdmVuIHRoYXQgY29udGV4dCwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlJiMzOTtzIGEgbW9yZSBzcGVjaWZpYyB2ZXJzaW9uIGRlZmluZWQgZm9yIElQdjQsIHNvbWV0aGluZyBsaWtlIGBORl9GTE9XX1RBQkxFX0lQVjRgIG9yIHBlcmhhcHMgYSBuYW1pbmcgY29udmVudGlvbiB0aGF0IHdvdWxkIGluY2x1ZGUgc29tZXRoaW5nIHNpbWlsYXIuIEkgbmVlZCB0byBiZSBwcmVjaXNlIGhlcmUsIHNvIEkmIzM5O2xsIGdvIGJhY2sgYW5kIGNyb3NzLXJlZmVyZW5jZSwgdmVyaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgbW9yZSBzcGVjaWZpYyBvciBvcHRpbWl6ZWQgZmxvdyB0YWJsZSBzdHJ1Y3R1cmUgZm9yIElQdjQuIEkmIzM5O20gc3VyZSBpdCYjMzk7cyBzaW1pbGFyLCBidXQgSSB3YW50IHRvIGJlIDEwMCUgYWNjdXJhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9GTE9XX1RBQkxFXyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzAxPWVuZGlmICMgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMzpjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzA0LVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MTE9Y29uZmlnIE5GX0ZMT1dfVEFCTEVcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcyMTpjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjItXHRib29sIFwmIzM0O1N1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzMxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqSWRlbnRpZnlpbmcgdGhlIENvcnJlY3QgTmV0ZmlsdGVyIEZsb3cgVGFibGUgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBiYXNlZCBvbiB3aGF0IEkmIzM5O20gbG9va2luZyBhdCwgaXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgYE5GX0ZMT1dfVEFCTEVfSU5FVGAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBJIG5lZWQgdG8gZm9jdXMgb24uIFRoYXQmIzM5O3MgdGhlIG9uZS4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBJIHNlZSBgTkZfRkxPV19UQUJMRWAsIG9idmlvdXNseSwgYW5kIHRoZW4gdGhlIG1vcmUgc3BlY2lmaWMgYE5GX0ZMT1dfVEFCTEVfSU5FVGAg4oCTIHRoYXQgcmVpbmZvcmNlcyBteSBpbml0aWFsIGltcHJlc3Npb24uIEkgYWxzbyBzZWUgYE5GVF9GTE9XX09GRkxPQURgLCB3aGljaCBtaWdodCBiZSByZWxhdGVkLCBhbmQgdGhlbiB0aGVzZSB0dW5uZWwgb3B0aW9uczogYE5FVF9JUElQYCBhbmQgYElQVjZfVFVOTkVMYC4KCkdpdmVuIHRoZSBjb250ZXh0LCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYE5FVF9JUElQYCBhbmQgYElQVjZfVFVOTkVMYCBkb24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmV4cGVjdGVkIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMgdGhhdCBJIG5lZWQgdG8gYWNjb3VudCBmb3IuIEJlc3QgdG8gdmVyaWZ5IHRob3NlIHJlcXVpcmVtZW50cyBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyBub3csIGJlZm9yZSBJIG1vdmUgYW55IGZ1cnRoZXIuIExldCYjMzk7cyBzZWUgd2hhdCB0aG9zZSBsb29rIGxpa2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfSVBJUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTE0OT1jb25maWcgSVBfUE5QX1JBUlBcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTE2MS1cbm5ldC9pcHY0L0tjb25maWc6MTYyOmNvbmZpZyBORVRfSVBJUFxubmV0L2lwdjQvS2NvbmZpZy0xNjMtXHR0cmlzdGF0ZSBcJiMzNDtJUDogdHVubmVsaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzM3CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBhcyBpZiBJLCBhbiBleHBlcnQsIGFtIHByb2Nlc3NpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkNvbnNpZGVyaW5nIHRoZSBOZXR3b3JrIEludGVyZmFjZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgbmV0d29yayBjb25maWd1cmF0aW9uIGFuZCBpbW1lZGlhdGVseSwgdGhlIGBJUFY2X1RVTk5FTGAgYXNwZWN0IGNvbWVzIHRvIG1pbmQuIEl0JiMzOTtzIGEga2V5IGNvbnNpZGVyYXRpb24uIEkgbmVlZCB0byBlbnN1cmUgYSBwcm9wZXIgYW5kIGZ1bmN0aW9uYWwgSVB2NiB0dW5uZWwgY29uZmlndXJhdGlvbi4gVGhhdCBtZWFucyBJIG5lZWQgdG8gdGhpbmsgdGhyb3VnaCB0aGUgZW5jYXBzdWxhdGlvbiBtZXRob2QsIHRoZSB0dW5uZWwgZW5kcG9pbnRzLCBhbmQgYW55IHBvdGVudGlhbCByb3V0aW5nIGltcGxpY2F0aW9ucy4gVGhlIGltcGxpY2F0aW9ucyBhcmUgYSBzbW9vdGggdHJhbnNpdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgaW1wbGVtZW50YXRpb24gaXMgc2VhbWxlc3MuIEkmIzM5O2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zIGFuZCB0aGUgcmVxdWlyZW1lbnRzIG9mIGltcGxlbWVudGluZyB0aGlzIHByb3RvY29sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBWNl9UVU5ORUwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZz0xOTY9Y29uZmlnIElQVjZfTkRJU0NfTk9ERVRZUEVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cbm5ldC9pcHY2L0tjb25maWc6MTk5OmNvbmZpZyBJUFY2X1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUC1pbi1JUHY2IHR1bm5lbCAoUkZDMjQ3MylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMDQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBQYXRjaCBvbiBOZXR3b3JrIEZvcndhcmRpbmcqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoJiMzOTtzIG1vZGlmaWNhdGlvbiBvZiBgdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGhgIG5lY2Vzc2l0YXRlcyB0aGUgYFZMQU5fODAyMVFgIGNvbmZpZyBvcHRpb24uIEkgdGhvdWdodCBgdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGhgIHdhcyB0b3VjaGVkLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gVGhlIHBhdGNoIGRpZmYgSSB3YXMgZ2l2ZW4gaW5pdGlhbGx5IGRpZG4mIzM5O3QgbGlzdCBgdmxhbl9kZXYuY2AuIEkgbmVlZCB0byByZS1leGFtaW5lIHRoZSBjb250ZXh0LgoKUmlnaHQsIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgc2lnbmF0dXJlIG9mIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgLiBJdCBsb29rcyBsaWtlIGl0IGRpZG4mIzM5O3QgY2hhbmdlIHRoZSBzaWduYXR1cmUgb2YgYG5kb19maWxsX2ZvcndhcmRfcGF0aGAuIE5vdywgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgdGFrZXMgYHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHhgIGluc3RlYWQgb2YgdGhlIGRldmljZSBhbmQgZGVzdGluYXRpb24gTUFDIGFkZHJlc3MuIFRoaXMgYWxsb3dzIHRoZSBjYWxsZXIgdG8gaW5pdGlhbGl6ZSBgZXRoZXJfdHlwZWAgd2l0aGluIHRoZSBjb250ZXh0LgoKU28sIGBWTEFOXzgwMjFRYCBpc24mIzM5O3Qgc3RyaWN0bHkgKnJlcXVpcmVkKiBieSB0aGlzIGNoYW5nZSwgdGhvdWdoIGl0IG1pZ2h0IGJlIGhlbHBmdWwgZm9yIHRlc3RpbmcgcHVycG9zZXMuIE15IGFuYWx5c2lzIHNob3dzIHRoZSBjb3JlIG1vZGlmaWNhdGlvbnMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgbmZfZmxvd190YWJsZV9pcC5jYCBhbmQgYG5mX2Zsb3dfdGFibGVfcGF0aC5jYC4gVGhlcmUgYXJlIGFsc28gY2hhbmdlcyBpbiBgaXBpcC5jYCBhbmQgYGlwNl90dW5uZWwuY2AuCgpOb3csIEkgbmVlZCB0byB6b29tIGluIG9uIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBmb3IgZmxvdyB0YWJsZSBvZmZsb2FkOiBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AuIEkgY2FuIHNlZSB0aGF0IGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGlzIGNhbGxlZCBmcm9tIGBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgIHdoaWNoIGlzIHRoZW4gY2FsbGVkIGZyb20gYG5mdF9mbG93X3JvdXRlYC4KClRoZXJlZm9yZSwgdGhlIGtleSBzeW1ib2xzIHRvIGtlZXAgYW4gZXllIG9uIGFyZToKKiAgIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AKKiAgIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYAoqICAgYG5mdF9mbG93X3JvdXRlYAoqICAgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAKClJlZ2FyZGluZyBjb25maWd1cmF0aW9ucywgdGhlIHBhdGNoIGxpa2VseSBkZXBlbmRzIG9uOgoqICAgYE5GX0ZMT1dfVEFCTEVgCiogICBgTkZfRkxPV19UQUJMRV9JTkVUYAoqICAgYE5GVF9GTE9XX09GRkxPQURgCiogICBgTkVUX0lQSVBgCiogICBgSVBWNl9UVU5ORUxgCgpJIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgYE5GVF9GTE9XX09GRkxPQURgIGhhcyBhbnkgb3RoZXIgc3BlY2lmaWMgZGVwZW5kZW5jaWVzIG9yIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GVF9GTE9XX09GRkxPQUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTQ5OD1jb25maWcgTkZUX0VYVEhEUl9EQ0NQXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTUwMy1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1MDQ6Y29uZmlnIE5GVF9GTE9XX09GRkxPQURcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDUtXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgTkZfRkxPV19UQUJMRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjczNwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2Ygd2hhdCBuZWVkcyB0byBiZSBjb25zaWRlcmVkLCB0aGlua2luZyB0aHJvdWdoIHRoaXMgbG9naWNhbGx5OgoKKipOZXR3b3JrIEZ1bmN0aW9uYWxpdHkgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gaGluZ2Ugb24gYm90aCBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX0ZMT1dfVEFCTEVgLiBHaXZlbiB0aGUgaW50ZXJwbGF5IGltcGxpZWQsIGl0JiMzOTtzIGNsZWFyIHdlIGFic29sdXRlbHkgKm11c3QqIGluY2x1ZGUgYE5GX0NPTk5UUkFDS2AgdG8gcHJvY2VlZC4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrLgoKTm93LCBsZXQmIzM5O3MgcGl2b3QgdG8gc29tZSBtb3JlIHNwZWNpZmljIG5ldHdvcmtpbmcgZmVhdHVyZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UgYWNjb3VudCBmb3IgYE5FVF9JUElQYCBhbmQgYElQVjZfVFVOTkVMYC4gVGltZSB0byBjaGVjayB0aGVpciByZXNwZWN0aXZlIGNvbmZpZ3VyYXRpb24gbG9jYXRpb25zLiBPa2F5LCBJIHNlZSB0aGF0IGBORVRfSVBJUGAgaXMgZGVmaW5lZCB3aXRoaW4gYG5ldC9pcHY0L0tjb25maWdgLCBhbmQgYElQVjZfVFVOTkVMYCByZXNpZGVzIGluIGBuZXQvaXB2Ni9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSB0byBmaW5kIHRoZW0uCgpGaW5hbGx5LCB0aGUgcG90ZW50aWFsIGRlcGVuZGVuY3kgb2YgYE5GX0ZMT1dfVEFCTEVfSU5FVGAgb24gYE5GX1RBQkxFU2AuLi4gQSBjcnVjaWFsIHBvaW50LiBUaGUgY29uZmlndXJhdGlvbiBlbnRyeSBgTkZUX0ZMT1dfT0ZGTE9BRGAgaXMgc2l0dWF0ZWQgaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIGJ1dCBpdCYjMzk7cyAqY29uZGl0aW9uYWxseSogaW5jbHVkZWQsIHNwZWNpZmljYWxseSB3aGVuIGBORl9UQUJMRVNgIGlzIGVuYWJsZWQuIFRoZXJlZm9yZSwgYE5GX1RBQkxFU2AgbWF5IHdlbGwgYWxzbyBiZSBhIHJlcXVpcmVtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZiBORl9UQUJMRVMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZz02PW1lbnVjb25maWcgTkZfVEFCTEVTX0JSSURHRVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTAtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjExOmlmIE5GX1RBQkxFU19CUklER0Vcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTItXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9MzA9Y29uZmlnIE5GX1RQUk9YWV9JUFY0XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzItXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzozMzppZiBORl9UQUJMRVNcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTM0LVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9MzU9Y29uZmlnIE5GX1RBQkxFU19JUFY0XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzktXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzo0MDppZiBORl9UQUJMRVNfSVBWNFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNDEtXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9MjY9Y29uZmlnIE5GX1RQUk9YWV9JUFY2XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMjgtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoyOTppZiBORl9UQUJMRVNcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTMwLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9MzE9Y29uZmlnIE5GX1RBQkxFU19JUFY2XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMzUtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzozNjppZiBORl9UQUJMRVNfSVBWNlxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMzctXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ1NT1jb25maWcgTkZfVEFCTEVTXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3MC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzE6aWYgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDcyLWNvbmZpZyBORl9UQUJMRVNfSU5FVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02MjU9Y29uZmlnIE5GVF9TT0NLRVRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjI3LVx0c2VsZWN0IE5GX1NPQ0tFVF9JUFY0XG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjI4Olx0c2VsZWN0IE5GX1NPQ0tFVF9JUFY2IGlmIE5GX1RBQkxFU19JUFY2XG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjI5LVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NDA9Y29uZmlnIE5GVF9UUFJPWFlcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQyLVx0c2VsZWN0IE5GX0RFRlJBR19JUFY0XG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjQzOlx0c2VsZWN0IE5GX0RFRlJBR19JUFY2IGlmIE5GX1RBQkxFU19JUFY2XG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQ0LVx0c2VsZWN0IE5GX1RQUk9YWV9JUFY0XG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjQ1Olx0c2VsZWN0IE5GX1RQUk9YWV9JUFY2IGlmIE5GX1RBQkxFU19JUFY2XG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQ2LVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NDk9Y29uZmlnIE5GVF9TWU5QUk9YWVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NTktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjYwOmlmIE5GX1RBQkxFU19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTI4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIE5ldGZpbHRlciBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgY29uY2VybiBpcyBwcmV0dHkgY2xlYXI6IHdlIG5lZWQgYE5GX1RBQkxFU2AuIFRoYXQmIzM5O3Mgbm9uLW5lZ290aWFibGUgZm9yIHByZXR0eSBtdWNoIGFueXRoaW5nIG1vZGVybiBpbiBOZXRmaWx0ZXIuIEl04oCZcyB0aGUgZm91bmRhdGlvbmFsIGNvbXBvbmVudC4KCk5vdywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIGBORl9GTE9XX1RBQkxFX0lORVRgLiBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBlbmFibGVkIGFuZCBmdW5jdGlvbmluZyBhcyBleHBlY3RlZC4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdGhlIGZsb3cgdGFibGUgZnVuY3Rpb25hbGl0eSwgb2J2aW91c2x5LCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJiMzOTtzIGxpbmVkIHVwLiBJJiMzOTttIHRoaW5raW5nIG9mIHBvc3NpYmxlIGludGVyYWN0aW9ucyBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cy4gVGltZSB0byBhbmFseXplLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDE9ZW5kaWYgIyBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzAzOmNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDQtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MjEzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE5ldGZpbHRlciBGbG93IFRhYmxlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWUgTmV0ZmlsdGVyIGNvZGUgYW5kIGl0IHNlZW1zIHRoaXMgcGFydCBpcyBvdXRzaWRlIHRoZSBzY29wZSBvZiBgTkZfVEFCTEVTYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IGhlcmU6IGBORl9UQUJMRVNgLCBgTkZfRkxPV19UQUJMRWAsIGBORl9GTE9XX1RBQkxFX0lORVRgLCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIGBORVRfSVBJUGAsIGBJUFY2X1RVTk5FTGAsIGFuZCBgTkZfQ09OTlRSQUNLYC4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGNhbiBgTkZUX0ZMT1dfT0ZGTE9BRGAgZ2V0IHVzIHRvIGBuZnRfZmxvd19yb3V0ZWA/IEkgc2VlbSB0byByZWNhbGwgdGhhdCBmdW5jdGlvbiYjMzk7cyBpbiBgbmZfZmxvd190YWJsZV9wYXRoLmNgLCB3aGljaCwgaWYgSSByZW1lbWJlciBjb3JyZWN0bHksIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgTkZfRkxPV19UQUJMRWAgaXMgZW5hYmxlZC4gT2theSwgbGV0IG1lIGRvdWJsZS1jaGVjay4gSSBzaG91bGQgcmVhbGx5IHZlcmlmeSB0aGlzIGJ5IGNvbnN1bHRpbmcgdGhlIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbXBpbGF0aW9uIGNvbmRpdGlvbnMuIE5lZWQgdG8gYmUgc3VyZSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3RhYmxlX3BhdGgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNDM9bmZfZmxvd190YWJsZS1vYmpzXHRcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDQ6XHRcdFx0XHQgICBuZl9mbG93X3RhYmxlX3BhdGgubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDUtXHRcdFx0XHQgICBuZl9mbG93X3RhYmxlX29mZmxvYWQubyBuZl9mbG93X3RhYmxlX3hkcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NzIyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIEZsb3cgVGFibGUgT2ZmbG9hZCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaGVyZSYjMzk7cyBteSBicmVha2Rvd24uIEl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGBuZl9mbG93X3RhYmxlX3BhdGgub2AgYW5kIGBuZl9mbG93X3RhYmxlX2lwLm9gIGFyZSBpbnRlZ3JhbCBwYXJ0cyBvZiB0aGUgYG5mX2Zsb3dfdGFibGVgIG1vZHVsZS4gU28sIHRoZSBgTkZfRkxPV19UQUJMRWAgY29uZmlnIG9wdGlvbiBpcyB0aGUgcHJpbWFyeSBvbmUgaGVyZS4KCkkmIzM5O3ZlIHplcm9lZCBpbiBvbiB0aGUga2V5IHN5bWJvbHMsIHByaW1hcmlseTogYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgLCBgbmZ0X2Zsb3dfcm91dGVgLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAuIEkgaGFkIHRvIGNvbmZpcm0sIGJ1dCB0aGUgZnVuY3Rpb25zIGBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoYCwgYGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGhgLCBgbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2xgLCBhbmQgYG5mX2Zsb3dfdHVwbGVfZW5jYXBgIGFyZSBhbGwgc3RhdGljIGFuZCB0aGVyZWZvcmUgdW5saWtlbHkgdG8gYmUgZXh0ZXJuYWxseSB0b3VjaGVkLgoKTm93LCBjaGVja2luZyB0aGUgZXhwb3J0cy4uLiB5ZXMsIEkgY2FuIHNlZSB0aGF0IGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgLCBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgLCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AsIGFuZCBgbmZ0X2Zsb3dfcm91dGVgIGFyZSBhbGwgZXhwb3J0ZWQuIFRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nLgoKVGhpcyBsb29rcyBsaWtlIGEgc29saWQgcGllY2Ugb2Ygd29yay4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSByZWZpbmluZyB0aGUgZmxvdyB0YWJsZSBvZmZsb2FkIHBhdGh3YXksIGZvY3VzaW5nIG9uIHRoZSBjb3JyZWN0IGhhbmRsaW5nIG9mIGlubmVyIHByb3RvY29scyBhbmQgdGhlIGV0aGVyX3R5cGUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggSVAtaW4tSVAgYW5kIElQdjYgdHVubmVscy4gVGhlIGNoYW5nZSB0byBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCDigJMgdGFraW5nIGEgY29udGV4dCBzdHJ1Y3QgcmF0aGVyIHRoYW4ganVzdCB0aGUgZGV2aWNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzIOKAkyBpcyBhIHNpZ25pZmljYW50IHBvaW50ZXIuIFRoZW4sIHRoZSB1cGRhdGVkIE5ldGZpbHRlciBmbG93IHRhYmxlIGhvb2tzIHRoYXQgbGV2ZXJhZ2UgdGhpcyBjb250ZXh0IHRvIGFjY3VyYXRlbHkgaWRlbnRpZnkgZW5jYXBzdWxhdGVkIHByb3RvY29scywgYXJlIGZ1cnRoZXIgZW5oYW5jZW1lbnRzLiBUaGVzZSBtb2RpZmljYXRpb25zIHN1Z2dlc3QgdGhhdCB0aGVzZSBhcmUgY3JpdGljYWwgY2hhbmdlcyB3aXRoaW4gYm90aCBjb3JlIG5ldHdvcmtpbmcgYW5kIE5ldGZpbHRlciBzdWJzeXN0ZW1zIHRoYXQgYXJlIGluZGVlZCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoKVG8gY29uZmlybSB0aGUgY29udGV4dCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMgaGVyZS4gSXQmIzM5O3MgY2xlYXJseSB0aWVkIHRvIGBORl9UQUJMRVNgLCBgTkZfRkxPV19UQUJMRWAsIGFuZCBgTkZfRkxPV19UQUJMRV9JTkVUYCwgYE5GVF9GTE9XX09GRkxPQURgLiBBbHNvLCAgYE5FVF9JUElQYCwgYElQVjZfVFVOTkVMYCBhbmQgYE5GX0NPTk5UUkFDS2AgYXJlIGxpa2VseSByZWxhdGVkLgoKSnVzdCBhIGZpbmFsIHNhbml0eSBjaGVjay4uLiBJIHNob3VsZCB2ZXJpZnkgdGhhdCBgTkZfRkxPV19UQUJMRV9JTkVUYCBpcyB0aGUgY29ycmVjdCBzY29wZS4gSXMgdGhlcmUgYW4gYE5GX0ZMT1dfVEFCTEVfSVBWNGAgb3B0aW9uLCBvciBpcyB0aGUgJiMzNDtpbmV0JiMzNDsgc2NvcGUgYnJvYWQgZW5vdWdoPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9GTE9XX1RBQkxFX0lQVjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTgxNQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGluY29ycmVjdDsgaXQgYXBwZWFycyB0aGUgZnVuY3Rpb25hbGl0eSBJIHdhcyBsb29raW5nIGZvciB3YXMgbWVyZ2VkLCBsaWtlbHkgaW50byBzb21ldGhpbmcgbGlrZSBgTkZfRkxPV19UQUJMRV9JTkVUYCBvciBhIHNpbWlsYXIgc3RydWN0dXJlLgoKTm93LCB0byB0cmFjayBkb3duIHRoZSByZWxldmFudCBjb2RlLi4uIExldCYjMzk7cyBjaGVjayB0aGUgYE5FVF9JUEdSRWAgbW9kdWxlLiBEb2VzIGl0IGhhdmUgYSBgZmlsbF9mb3J3YXJkX3BhdGhgIGZ1bmN0aW9uIGRlZmluZWQ/IFRoYXQgd291bGQgYmUgYSBsb2dpY2FsIHBsYWNlIHRvIGxvb2sgZm9yIGZvcndhcmRpbmcgcGF0aCBsb2dpYywgZ2l2ZW4gdGhlIGNvbnRleHQuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWxsX2ZvcndhcmRfcGF0aC4qZ3JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5OTYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIHRoZSBMYW5kc2NhcGUqKgoKTm8sIHRoYXQmIzM5O3Mgbm90IGl0LiBPa2F5LCBsZXQmIzM5O3MgcGl2b3QuIFRoZSBzaXR1YXRpb24gc2VlbXMgZmFtaWxpYXIsIHNvIEkgbmVlZCB0byBjaGVjayBgdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGhgLiBUaGF0IGZ1bmN0aW9uLCBpbiB0aGUgY29udGV4dCBvZiBWTEFOIGRldmljZSBmb3J3YXJkaW5nLCBpcyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjcnVjaWFsIGxvZ2ljIHJlbGF0ZWQgdG8gcGFja2V0IGhhbmRsaW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHZlcmlmeSBpZiBteSBpbml0aWFsIGh1bmNoIGlzIGNvcnJlY3QgYnkgZXhhbWluaW5nIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiBhbmQgZ3VpZGUgbXkgdHJvdWJsZXNob290aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvODAyMXEvdmxhbl9kZXYuYz03NTY9c3RhdGljIGludCB2bGFuX2Rldl9nZXRfaWZsaW5rKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzYyLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6NzYzOnN0YXRpYyBpbnQgdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTc2NC1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXG4tLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmM9MTA3OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZsYW5fbmV0ZGV2X29wcyA9IHtcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMTA5LVx0Lm5kb19nZXRfaWZsaW5rXHRcdD0gdmxhbl9kZXZfZ2V0X2lmbGluayxcbm5ldC84MDIxcS92bGFuX2Rldi5jOjExMTA6XHQubmRvX2ZpbGxfZm9yd2FyZF9wYXRoXHQ9IHZsYW5fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoLFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTExMS1cdC5uZG9faHd0c3RhbXBfZ2V0XHQ9IHZsYW5faHd0c3RhbXBfZ2V0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQ3NQoJCQkJCQkJb3V0cHV0OiAyMzkKCQkJCQkJCXRob3VnaHRzOiAxMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMgY29uZmlndXJhdGlvbiwgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKioKCkFscmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGxpc3Qgb2YgY29uZmlndXJhdGlvbnMsIGFuZCBpdCBsb29rcyBsaWtlIGEgZ29vZCwgYmFzaWMgc2V0LiBJJiMzOTt2ZSBnb3QgYE5GX1RBQkxFU2AgYW5kIGl0cyBhc3NvY2lhdGVkIGNvbXBvbmVudHMgYE5GX0ZMT1dfVEFCTEVgLCBgTkZfRkxPV19UQUJMRV9JTkVUYCwgYW5kIGBORlRfRkxPV19PRkZMT0FEYC4gRXhjZWxsZW50LCB0aGF0JiMzOTtzIHRoZSBtb2Rlcm4sIHBlcmZvcm1hbnQgd2F5IHRvIGhhbmRsZSBuZXR3b3JrIGZpbHRlcmluZyBhbmQgZm9yd2FyZGluZy4gVGhlbiBJIHNlZSBgTkVUX0lQSVBgIGFuZCBgSVBWNl9UVU5ORUxgLCBzdWdnZXN0aW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZSB0dW5uZWxpbmcsIHdoaWNoIGlzIHNlbnNpYmxlIGluIG1hbnkgZW52aXJvbm1lbnRzLiBXZSBoYXZlIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVsZW1lbnQgd2l0aCBgTkZfQ09OTlRSQUNLYCB3aGljaCBJIHdpbGwga2VlcC4KClRoZSBvbmUgdGhhdCBqdW1wcyBvdXQgdG8gbWUgaXMgYFZMQU5fODAyMVFgLiBWTEFOIHN1cHBvcnQgaXMgZXNzZW50aWFsIGluIG1hbnkgZW52aXJvbm1lbnRzLiBHaXZlbiB0aGUgb3RoZXIgY29uZmlndXJhdGlvbnMsIGl0JiMzOTtzIGEgZ29vZCBpZGVhIHRvIGluY2x1ZGUgaXQuIEp1c3QgdG8gYmUgc2FmZSwgSSYjMzk7bSBnb2luZyB0byBhZGQgdGhhdCB0byBteSBzdGFuZGFyZCBjb25maWdzLCBhcyBpdCB3b24mIzM5O3QgaHVydCwgYW5kIG1heSBpbmRlZWQgbWFrZSBhIGJpZyBkaWZmZXJlbmNlIGluIGEgbW9yZSBjb21wbGV4IHNldHVwLgoKTm93IHRoYXQgSSYjMzk7dmUgcmV2aWV3ZWQgdGhvc2UgY29tcG9uZW50cywgSSYjMzk7bSBoYXBweSB0byBnbyBhaGVhZCBhbmQgJiMzNDtzZXQtcmVzdWx0cyYjMzQ7LiBJdCYjMzk7cyBhIHF1aWNrIGNvbmZpZyBhbmQgSSYjMzk7bSBjb25maWRlbnQgYWJvdXQgdGhlc2Ugc2V0dGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFX0lORVQmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtORVRfSVBJUCYjMzQ7LAogICAgJiMzNDtJUFY2X1RVTk5FTCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2smIzM0OywKICAgICYjMzQ7bmZ0X2Zsb3dfcm91dGUmIzM0OywKICAgICYjMzQ7ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBvZmZsb2FkIHBhdGggdG8gcHJvcGVybHkgaGFuZGxlIGlubmVyIHByb3RvY29scyBhbmQgZXRoZXJfdHlwZSwgZXNwZWNpYWxseSBmb3IgSVAtaW4tSVAgYW5kIElQdjYgdHVubmVscy4gSXQgY2hhbmdlcyBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCB0byB0YWtlIGEgY29udGV4dCBzdHJ1Y3QgaW5zdGVhZCBvZiBqdXN0IHRoZSBkZXZpY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3MsIGFuZCB1cGRhdGVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBob29rcyB0byB1c2UgdGhpcyBjb250ZXh0IGFuZCBjb3JyZWN0bHkgaWRlbnRpZnkgZW5jYXBzdWxhdGVkIHByb3RvY29scy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFX0lORVQmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtORVRfSVBJUCYjMzQ7LAogICAgJiMzNDtJUFY2X1RVTk5FTCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2smIzM0OywKICAgICYjMzQ7bmZ0X2Zsb3dfcm91dGUmIzM0OywKICAgICYjMzQ7ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBvZmZsb2FkIHBhdGggdG8gcHJvcGVybHkgaGFuZGxlIGlubmVyIHByb3RvY29scyBhbmQgZXRoZXJfdHlwZSwgZXNwZWNpYWxseSBmb3IgSVAtaW4tSVAgYW5kIElQdjYgdHVubmVscy4gSXQgY2hhbmdlcyBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCB0byB0YWtlIGEgY29udGV4dCBzdHJ1Y3QgaW5zdGVhZCBvZiBqdXN0IHRoZSBkZXZpY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3MsIGFuZCB1cGRhdGVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBob29rcyB0byB1c2UgdGhpcyBjb250ZXh0IGFuZCBjb3JyZWN0bHkgaWRlbnRpZnkgZW5jYXBzdWxhdGVkIHByb3RvY29scy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjg6MDcuMzQ5NzEzNTEzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMzc4Njg3NDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZfRkxPV19UQUJMRV9JTkVUXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCIsXG4gICAgXCJORVRfSVBJUFwiLFxuICAgIFwiSVBWNl9UVU5ORUxcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiVkxBTl84MDIxUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rXCIsXG4gICAgXCJuZnRfZmxvd19yb3V0ZVwiLFxuICAgIFwiZGV2X2ZpbGxfZm9yd2FyZF9wYXRoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIG9mZmxvYWQgcGF0aCB0byBwcm9wZXJseSBoYW5kbGUgaW5uZXIgcHJvdG9jb2xzIGFuZCBldGhlcl90eXBlLCBlc3BlY2lhbGx5IGZvciBJUC1pbi1JUCBhbmQgSVB2NiB0dW5uZWxzLiBJdCBjaGFuZ2VzIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIHRvIHRha2UgYSBjb250ZXh0IHN0cnVjdCBpbnN0ZWFkIG9mIGp1c3QgdGhlIGRldmljZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzcywgYW5kIHVwZGF0ZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGhvb2tzIHRvIHVzZSB0aGlzIGNvbnRleHQgYW5kIGNvcnJlY3RseSBpZGVudGlmeSBlbmNhcHN1bGF0ZWQgcHJvdG9jb2xzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBzdWJzeXN0ZW1zIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjA3LjM0OTcyMDM3M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyMTM5MTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGQ2YWEwOTBmOGQ1OGYxMTg5OTlhMzJkM2M1MjhmMTY4Yzk1YTdlZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDAyOjI4OjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXFxuaW5kZXggYTAzYWY5NzUwNTczMS4uOTI2MTE4MDI4MDFlYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xcbkBAIC0yODMsMTQgKzI4MywxOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBhaXJvaGFfd2RtYV9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgc3RhY2s7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IGN0eCA9IHtcXG4rXFx0XFx0LmRldiA9IGRldixcXG4rXFx0fTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdGlmICghZGV2KVxcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFxuK1xcdGV0aGVyX2FkZHJfY29weShjdHguZGFkZHIsIGFkZHIpO1xcbitcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBcXHUwMDI2c3RhY2spO1xcbitcXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoXFx1MDAyNmN0eCwgXFx1MDAyNnN0YWNrKTtcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcXG5pbmRleCA3NzFkOTExOGY5NGFkLi45OWIyOGFhYTdjYzQ3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcXG5AQCAtOTIsNiArOTIsOSBAQCBzdGF0aWMgaW50XFxuIG10a19mbG93X2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsIHN0cnVjdCBtdGtfd2RtYV9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgc3RhY2s7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IGN0eCA9IHtcXG4rXFx0XFx0LmRldiA9IGRldixcXG4rXFx0fTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcXG4gXFx0aW50IGVycjtcXG4gXFxuQEAgLTEwMSw4ICsxMDQsMTAgQEAgbXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwgc3RydWN0IG10a193ZG1hX2lcXG4gXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRfTUVESUFURUtfU09DX1dFRCkpXFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFxuK1xcdGV0aGVyX2FkZHJfY29weShjdHguZGFkZHIsIGFkZHIpO1xcbitcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBcXHUwMDI2c3RhY2spO1xcbitcXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoXFx1MDAyNmN0eCwgXFx1MDAyNnN0YWNrKTtcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuaW5kZXggNjJjZmFkN2U2Yjc5YS4uNjhjY2I1ODY4MDcwZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbkBAIC05MDIsNyArOTAyLDcgQEAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCB7XFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBpbjZfYWRkclxcdGRzdF92NjtcXG4gXFx0XFx0XFx0fTtcXG4gXFxuLVxcdFxcdFxcdHU4XFx0bDNfcHJvdG87XFxuK1xcdFxcdFxcdHU4XFx0aW5uZXJfcHJvdG87XFxuIFxcdFxcdH0gdHVuO1xcbiBcXHRcXHRzdHJ1Y3Qge1xcbiBcXHRcXHRcXHRlbnVtIHtcXG5AQCAtOTM5LDYgKzkzOSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sge1xcbiBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCB7XFxuIFxcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuIFxcdHU4XFx0XFx0XFx0ZGFkZHJbRVRIX0FMRU5dO1xcbitcXHRfX2JlMTZcXHRcXHRcXHRldGhlcl90eXBlO1xcbiBcXG4gXFx0aW50XFx0XFx0XFx0bnVtX3ZsYW5zO1xcbiBcXHRzdHJ1Y3Qge1xcbkBAIC0zNDI2LDcgKzM0MjcsNyBAQCB2b2lkIGRldl9yZW1vdmVfb2ZmbG9hZChzdHJ1Y3QgcGFja2V0X29mZmxvYWQgKnBvKTtcXG4gXFxuIGludCBkZXZfZ2V0X2lmbGluayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gaW50IGRldl9maWxsX21ldGFkYXRhX2RzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4taW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsXFxuK2ludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayk7XFxuIHZvaWQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xcbiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXFxuaW5kZXggYTA5MGVjM2ZmZWYyZS4uZjJlMjc3MWYxODhmNCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxcbkBAIC0xMTcsNyArMTE3LDcgQEAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWwge1xcbiBcXHRcXHRzdHJ1Y3QgaW42X2FkZHJcXHRkc3RfdjY7XFxuIFxcdH07XFxuIFxcbi1cXHR1OFxcdGwzX3Byb3RvO1xcbitcXHR1OFxcdGlubmVyX3Byb3RvO1xcbiB9O1xcbiBcXG4gc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcXG5pbmRleCBlNTBlZDY3N2RlNzI1Li4xM2RmZDIxMTNhNWFiIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2Rldi5jXFxuKysrIGIvbmV0L2NvcmUvZGV2LmNcXG5AQCAtNzY5LDM1ICs3NjksMzEgQEAgdm9pZCBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZSk7XFxuIFxcbi1pbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcXG4raW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpsYXN0X2RldjtcXG4tXFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0ge1xcbi1cXHRcXHQuZGV2XFx0PSBkZXYsXFxuLVxcdH07XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXG4tXFx0bWVtY3B5KGN0eC5kYWRkciwgZGFkZHIsIHNpemVvZihjdHguZGFkZHIpKTtcXG4gXFx0c3RhY2stXFx1MDAzZW51bV9wYXRocyA9IDA7XFxuLVxcdHdoaWxlIChjdHguZGV2IFxcdTAwMjZcXHUwMDI2IGN0eC5kZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aCkge1xcbi1cXHRcXHRsYXN0X2RldiA9IGN0eC5kZXY7XFxuK1xcdHdoaWxlIChjdHgtXFx1MDAzZWRldiBcXHUwMDI2XFx1MDAyNiBjdHgtXFx1MDAzZWRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKSB7XFxuK1xcdFxcdGxhc3RfZGV2ID0gY3R4LVxcdTAwM2VkZXY7XFxuIFxcdFxcdHBhdGggPSBkZXZfZndkX3BhdGgoc3RhY2spO1xcbiBcXHRcXHRpZiAoIXBhdGgpXFxuIFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gXFxuIFxcdFxcdG1lbXNldChwYXRoLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2VfcGF0aCkpO1xcbi1cXHRcXHRyZXQgPSBjdHguZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgoXFx1MDAyNmN0eCwgcGF0aCk7XFxuK1xcdFxcdHJldCA9IGN0eC1cXHUwMDNlZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gXFxuIFxcdFxcdHN0YWNrLVxcdTAwM2VudW1fcGF0aHMrKztcXG4tXFx0XFx0aWYgKFdBUk5fT05fT05DRShsYXN0X2RldiA9PSBjdHguZGV2KSlcXG4rXFx0XFx0aWYgKFdBUk5fT05fT05DRShsYXN0X2RldiA9PSBjdHgtXFx1MDAzZWRldikpXFxuIFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFjdHguZGV2KVxcbitcXHRpZiAoIWN0eC1cXHUwMDNlZGV2KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XFxuQEAgLTgwNSw3ICs4MDEsNyBAQCBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcXG4gXFx0XFx0Z290byBlcnJfb3V0O1xcbiBcXG4gXFx0cGF0aC1cXHUwMDNldHlwZSA9IERFVl9QQVRIX0VUSEVSTkVUO1xcbi1cXHRwYXRoLVxcdTAwM2VkZXYgPSBjdHguZGV2O1xcbitcXHRwYXRoLVxcdTAwM2VkZXYgPSBjdHgtXFx1MDAzZWRldjtcXG4gXFx0c3RhY2stXFx1MDAzZW51bV9wYXRocysrO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuY1xcbmluZGV4IGZiN2Q5NmY5OWIwNmIuLjE2MzAzMjVjNzdkMzQgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBpcC5jXFxuKysrIGIvbmV0L2lwdjQvaXBpcC5jXFxuQEAgLTM2MCw2ICszNjAsOSBAQCBzdGF0aWMgaW50IGlwaXBfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcXG4gXFx0Y29uc3Qgc3RydWN0IGlwaGRyICp0aXBoID0gXFx1MDAyNnR1bm5lbC1cXHUwMDNlcGFybXMuaXBoO1xcbiBcXHRzdHJ1Y3QgcnRhYmxlICpydDtcXG4gXFxuK1xcdGlmIChjdHgtXFx1MDAzZWV0aGVyX3R5cGUgIT0gY3B1X3RvX2JlMTYoRVRIX1BfSVApKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbiBcXHRpZiAodHVubmVsLVxcdTAwM2Vjb2xsZWN0X21kKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbkBAIC0zNzUsNyArMzc4LDcgQEAgc3RhdGljIGludCBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxuIFxcdHBhdGgtXFx1MDAzZXR5cGUgPSBERVZfUEFUSF9UVU47XFxuIFxcdHBhdGgtXFx1MDAzZXR1bi5zcmNfdjQuc19hZGRyID0gdGlwaC1cXHUwMDNlc2FkZHI7XFxuIFxcdHBhdGgtXFx1MDAzZXR1bi5kc3RfdjQuc19hZGRyID0gdGlwaC1cXHUwMDNlZGFkZHI7XFxuLVxcdHBhdGgtXFx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBJUDtcXG4rXFx0cGF0aC1cXHUwMDNldHVuLmlubmVyX3Byb3RvID0gSVBQUk9UT19JUElQO1xcbiBcXHRwYXRoLVxcdTAwM2V0dW4uZHN0ID0gXFx1MDAyNnJ0LVxcdTAwM2Vkc3Q7XFxuIFxcdHBhdGgtXFx1MDAzZWRldiA9IGN0eC1cXHUwMDNlZGV2O1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXFxuaW5kZXggZDgwMDIwYmMyNjIwZS4uN2I1NDkxOTIzMmJhMyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcXG4rKysgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcXG5AQCAtMTg0OSw2ICsxODQ5LDkgQEAgc3RhdGljIGludCBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxuIFxcdHN0cnVjdCBmbG93aTYgZmw2O1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKGN0eC1cXHUwMDNlZXRoZXJfdHlwZSAhPSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4gXFx0aWYgKHQtXFx1MDAzZXBhcm1zLmZsYWdzIFxcdTAwMjYgKElQNl9UTkxfRl9VU0VfT1JJR19UQ0xBU1MgfFxcbiBcXHRcXHRcXHQgICAgICBJUDZfVE5MX0ZfVVNFX09SSUdfRkxPV0xBQkVMIHxcXG4gXFx0XFx0XFx0ICAgICAgSVA2X1ROTF9GX1VTRV9PUklHX0ZXTUFSSykpXFxuQEAgLTE4NjksNyArMTg3Miw3IEBAIHN0YXRpYyBpbnQgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbiBcXHRcXHRwYXRoLVxcdTAwM2V0eXBlID0gREVWX1BBVEhfVFVOO1xcbiBcXHRcXHRwYXRoLVxcdTAwM2V0dW4uc3JjX3Y2ID0gZmw2LnNhZGRyO1xcbiBcXHRcXHRwYXRoLVxcdTAwM2V0dW4uZHN0X3Y2ID0gZmw2LmRhZGRyO1xcbi1cXHRcXHRwYXRoLVxcdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQVjY7XFxuK1xcdFxcdHBhdGgtXFx1MDAzZXR1bi5pbm5lcl9wcm90byA9IElQUFJPVE9fSVBWNjtcXG4gXFx0XFx0cGF0aC1cXHUwMDNldHVuLmRzdCA9IGRzdDtcXG4gXFx0XFx0cGF0aC1cXHUwMDNlZGV2ID0gY3R4LVxcdTAwM2VkZXY7XFxuIFxcdFxcdGN0eC1cXHUwMDNlZGV2ID0gZHN0LVxcdTAwM2VkZXY7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcXG5pbmRleCAwYjMxNGIxMGU3MDVhLi5hZjUzNDAwMGEyODdhIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcXG5AQCAtMTQ3LDEzICsxNDcsMTQgQEAgc3RhdGljIGJvb2wgaXBfaGFzX29wdGlvbnModW5zaWduZWQgaW50IHRob2ZmKVxcbiBcXG4gc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHgge1xcbiBcXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZVxcdCppbjtcXG4rXFx0X19iZTE2XFx0XFx0XFx0ZXRoZXJfdHlwZTtcXG4gXFx0dTMyXFx0XFx0XFx0b2Zmc2V0O1xcbiBcXHR1MzJcXHRcXHRcXHRoZHJzaXplO1xcbiBcXHRzdHJ1Y3Qge1xcbiBcXHRcXHQvKiBUdW5uZWwgSVAgaGVhZGVyIHNpemUgKi9cXG4gXFx0XFx0dTMyIGhkcl9zaXplO1xcbiBcXHRcXHQvKiBJUCB0dW5uZWwgcHJvdG9jb2wgKi9cXG4tXFx0XFx0dTggcHJvdG87XFxuK1xcdFxcdHU4IGlubmVyX3Byb3RvO1xcbiBcXHR9IHR1bjtcXG4gfTtcXG4gXFxuQEAgLTE2MSw3ICsxNjIsNiBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X3R1cGxlX2VuY2FwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlKVxcbiB7XFxuLVxcdF9fYmUxNiBpbm5lcl9wcm90byA9IHNrYi1cXHUwMDNlcHJvdG9jb2w7XFxuIFxcdHN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aDtcXG4gXFx0c3RydWN0IHBwcG9lX2hkciAqcGhkcjtcXG4gXFx0c3RydWN0IGlwdjZoZHIgKmlwNmg7XFxuQEAgLTE3OSwzMyArMTc5LDMxIEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfdHVwbGVfZW5jYXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4gXFx0XFx0dmV0aCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpO1xcbiBcXHRcXHR0dXBsZS1cXHUwMDNlZW5jYXBbaV0uaWQgPSBudG9ocyh2ZXRoLVxcdTAwM2VoX3ZsYW5fVENJKTtcXG4gXFx0XFx0dHVwbGUtXFx1MDAzZWVuY2FwW2ldLnByb3RvID0gc2tiLVxcdTAwM2Vwcm90b2NvbDtcXG4tXFx0XFx0aW5uZXJfcHJvdG8gPSB2ZXRoLVxcdTAwM2VoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvO1xcbiBcXHRcXHRvZmZzZXQgKz0gVkxBTl9ITEVOO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBodG9ucyhFVEhfUF9QUFBfU0VTKTpcXG4gXFx0XFx0cGhkciA9IChzdHJ1Y3QgcHBwb2VfaGRyICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIFxcdFxcdHR1cGxlLVxcdTAwM2VlbmNhcFtpXS5pZCA9IG50b2hzKHBoZHItXFx1MDAzZXNpZCk7XFxuIFxcdFxcdHR1cGxlLVxcdTAwM2VlbmNhcFtpXS5wcm90byA9IHNrYi1cXHUwMDNlcHJvdG9jb2w7XFxuLVxcdFxcdGlubmVyX3Byb3RvID0gKigoX19iZTE2ICopKHBoZHIgKyAxKSk7XFxuIFxcdFxcdG9mZnNldCArPSBQUFBPRV9TRVNfSExFTjtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuLVxcdHN3aXRjaCAoaW5uZXJfcHJvdG8pIHtcXG4rXFx0c3dpdGNoIChjdHgtXFx1MDAzZWV0aGVyX3R5cGUpIHtcXG4gXFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XFxuIFxcdFxcdGlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBvZmZzZXQpO1xcbi1cXHRcXHRpZiAoY3R4LVxcdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUElQKSB7XFxuK1xcdFxcdGlmIChjdHgtXFx1MDAzZXR1bi5pbm5lcl9wcm90byA9PSBJUFBST1RPX0lQSVApIHtcXG4gXFx0XFx0XFx0dHVwbGUtXFx1MDAzZXR1bi5kc3RfdjQuc19hZGRyID0gaXBoLVxcdTAwM2VkYWRkcjtcXG4gXFx0XFx0XFx0dHVwbGUtXFx1MDAzZXR1bi5zcmNfdjQuc19hZGRyID0gaXBoLVxcdTAwM2VzYWRkcjtcXG4tXFx0XFx0XFx0dHVwbGUtXFx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBJUDtcXG4rXFx0XFx0XFx0dHVwbGUtXFx1MDAzZXR1bi5pbm5lcl9wcm90byA9IElQUFJPVE9fSVBJUDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG4gXFx0XFx0aXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIG9mZnNldCk7XFxuLVxcdFxcdGlmIChjdHgtXFx1MDAzZXR1bi5wcm90byA9PSBJUFBST1RPX0lQVjYpIHtcXG4rXFx0XFx0aWYgKGN0eC1cXHUwMDNldHVuLmlubmVyX3Byb3RvID09IElQUFJPVE9fSVBWNikge1xcbiBcXHRcXHRcXHR0dXBsZS1cXHUwMDNldHVuLmRzdF92NiA9IGlwNmgtXFx1MDAzZWRhZGRyO1xcbiBcXHRcXHRcXHR0dXBsZS1cXHUwMDNldHVuLnNyY192NiA9IGlwNmgtXFx1MDAzZXNhZGRyO1xcbi1cXHRcXHRcXHR0dXBsZS1cXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUFY2O1xcbitcXHRcXHRcXHR0dXBsZS1cXHUwMDNldHVuLmlubmVyX3Byb3RvID0gSVBQUk9UT19JUFY2O1xcbiBcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbkBAIC0zMjgsNyArMzI2LDcgQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdGlmIChpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fSVBJUCkge1xcbi1cXHRcXHRjdHgtXFx1MDAzZXR1bi5wcm90byA9IGlwaC1cXHUwMDNlcHJvdG9jb2w7XFxuK1xcdFxcdGN0eC1cXHUwMDNldHVuLmlubmVyX3Byb3RvID0gaXBoLVxcdTAwM2Vwcm90b2NvbDtcXG4gXFx0XFx0Y3R4LVxcdTAwM2V0dW4uaGRyX3NpemUgPSBzaXplO1xcbiBcXHRcXHRjdHgtXFx1MDAzZW9mZnNldCArPSBjdHgtXFx1MDAzZXR1bi5oZHJfc2l6ZTtcXG4gXFx0fVxcbkBAIC0zNTMsNyArMzUxLDcgQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDZfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdGlmIChpcDZoLVxcdTAwM2VuZXh0aGRyID09IElQUFJPVE9fSVBWNikge1xcbi1cXHRcXHRjdHgtXFx1MDAzZXR1bi5wcm90byA9IGlwNmgtXFx1MDAzZW5leHRoZHI7XFxuK1xcdFxcdGN0eC1cXHUwMDNldHVuLmlubmVyX3Byb3RvID0gaXA2aC1cXHUwMDNlbmV4dGhkcjtcXG4gXFx0XFx0Y3R4LVxcdTAwM2V0dW4uaGRyX3NpemUgPSBzaXplb2YoKmlwNmgpO1xcbiBcXHRcXHRjdHgtXFx1MDAzZW9mZnNldCArPSBjdHgtXFx1MDAzZXR1bi5oZHJfc2l6ZTtcXG4gXFx0fVxcbkBAIC0zNjcsOCArMzY1LDggQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDZfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIHN0YXRpYyB2b2lkIG5mX2Zsb3dfaXBfdHVubmVsX3BvcChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4tXFx0aWYgKGN0eC1cXHUwMDNldHVuLnByb3RvICE9IElQUFJPVE9fSVBJUCBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgY3R4LVxcdTAwM2V0dW4ucHJvdG8gIT0gSVBQUk9UT19JUFY2KVxcbitcXHRpZiAoY3R4LVxcdTAwM2V0dW4uaW5uZXJfcHJvdG8gIT0gSVBQUk9UT19JUElQIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBjdHgtXFx1MDAzZXR1bi5pbm5lcl9wcm90byAhPSBJUFBST1RPX0lQVjYpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHNrYl9wdWxsKHNrYiwgY3R4LVxcdTAwM2V0dW4uaGRyX3NpemUpO1xcbkBAIC0zNzYsMTAgKzM3NCwxMCBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X2lwX3R1bm5lbF9wb3Aoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiBwcm90bylcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4tXFx0X19iZTE2IGlubmVyX3Byb3RvID0gc2tiLVxcdTAwM2Vwcm90b2NvbDtcXG4gXFx0c3RydWN0IHZsYW5fZXRoaGRyICp2ZXRoO1xcbitcXHRfX2JlMTYgZXRoZXJfdHlwZTtcXG4gXFx0Ym9vbCByZXQgPSBmYWxzZTtcXG4gXFxuIFxcdHN3aXRjaCAoc2tiLVxcdTAwM2Vwcm90b2NvbCkge1xcbkBAIC0zODgsMjIgKzM4NiwyNyBAQCBzdGF0aWMgYm9vbCBuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRcXHR2ZXRoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKXNrYl9tYWNfaGVhZGVyKHNrYik7XFxuLVxcdFxcdGlmICh2ZXRoLVxcdTAwM2VoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvID09IHByb3RvKSB7XFxuLVxcdFxcdFxcdGN0eC1cXHUwMDNlb2Zmc2V0ICs9IFZMQU5fSExFTjtcXG4tXFx0XFx0XFx0aW5uZXJfcHJvdG8gPSBwcm90bztcXG4tXFx0XFx0XFx0cmV0ID0gdHJ1ZTtcXG4tXFx0XFx0fVxcbitcXHRcXHRjdHgtXFx1MDAzZWV0aGVyX3R5cGUgPSB2ZXRoLVxcdTAwM2VoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvO1xcbitcXHRcXHRjdHgtXFx1MDAzZW9mZnNldCArPSBWTEFOX0hMRU47XFxuK1xcdFxcdHJldCA9IHRydWU7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIGh0b25zKEVUSF9QX1BQUF9TRVMpOlxcbi1cXHRcXHRpZiAobmZfZmxvd19wcHBvZV9wcm90byhza2IsIFxcdTAwMjZpbm5lcl9wcm90bykgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIGlubmVyX3Byb3RvID09IHByb3RvKSB7XFxuLVxcdFxcdFxcdGN0eC1cXHUwMDNlb2Zmc2V0ICs9IFBQUE9FX1NFU19ITEVOO1xcbi1cXHRcXHRcXHRyZXQgPSB0cnVlO1xcbi1cXHRcXHR9XFxuK1xcdFxcdGlmICghbmZfZmxvd19wcHBvZV9wcm90byhza2IsIFxcdTAwMjZldGhlcl90eXBlKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0XFx0Y3R4LVxcdTAwM2VldGhlcl90eXBlID0gZXRoZXJfdHlwZTtcXG4rXFx0XFx0Y3R4LVxcdTAwM2VvZmZzZXQgKz0gUFBQT0VfU0VTX0hMRU47XFxuK1xcdFxcdHJldCA9IHRydWU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4rXFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG4rXFx0XFx0Y3R4LVxcdTAwM2VldGhlcl90eXBlID0gc2tiLVxcdTAwM2Vwcm90b2NvbDtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbiBcXG4tXFx0c3dpdGNoIChpbm5lcl9wcm90bykge1xcbitcXHRzd2l0Y2ggKGN0eC1cXHUwMDNlZXRoZXJfdHlwZSkge1xcbiBcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4gXFx0XFx0cmV0ID0gbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvKGN0eCwgc2tiKTtcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTQ1NSw5ICs0NTgsNiBAQCBuZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIHtcXG4gXFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB0dXBsZSA9IHt9O1xcbiBcXG4tXFx0aWYgKCFuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChjdHgsIHNrYiwgaHRvbnMoRVRIX1BfSVApKSlcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcbiBcXHRpZiAobmZfZmxvd190dXBsZV9pcChjdHgsIHNrYiwgXFx1MDAyNnR1cGxlKSBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG5AQCAtNjExLDcgKzYxMSw3IEBAIHN0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXBpcF9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aXBoLVxcdTAwM2V2ZXJzaW9uXFx0PSA0O1xcbiBcXHRpcGgtXFx1MDAzZWlobFxcdD0gc2l6ZW9mKCppcGgpIFxcdTAwM2VcXHUwMDNlIDI7XFxuIFxcdGlwaC1cXHUwMDNlZnJhZ19vZmZcXHQ9IGlwX210dV9sb2NrZWQoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpID8gMCA6IGZyYWdfb2ZmO1xcbi1cXHRpcGgtXFx1MDAzZXByb3RvY29sXFx0PSB0dXBsZS1cXHUwMDNldHVuLmwzX3Byb3RvO1xcbitcXHRpcGgtXFx1MDAzZXByb3RvY29sXFx0PSB0dXBsZS1cXHUwMDNldHVuLmlubmVyX3Byb3RvO1xcbiBcXHRpcGgtXFx1MDAzZXRvc1xcdD0gdG9zO1xcbiBcXHRpcGgtXFx1MDAzZWRhZGRyXFx0PSB0dXBsZS1cXHUwMDNldHVuLnNyY192NC5zX2FkZHI7XFxuIFxcdGlwaC1cXHUwMDNlc2FkZHJcXHQ9IHR1cGxlLVxcdTAwM2V0dW4uZHN0X3Y0LnNfYWRkcjtcXG5AQCAtNzk0LDMzICs3OTQsMTcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBuZl9mbG93X3F1ZXVlX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRyZXR1cm4gTkZfU1RPTEVOO1xcbiB9XFxuIFxcbi11bnNpZ25lZCBpbnRcXG4tbmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbitzdGF0aWMgaW50IG5mX2Zsb3dfcXVldWVfeG1pdDQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaCxcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2g7XFxuLVxcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUgPSBwcml2O1xcbiBcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZTtcXG4gXFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjtcXG4tXFx0c3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggY3R4ID0ge1xcbi1cXHRcXHQuaW5cXHQ9IHN0YXRlLVxcdTAwM2VpbixcXG4tXFx0fTtcXG4gXFx0c3RydWN0IG5mX2Zsb3dfeG1pdCB4bWl0ID0ge307XFxuIFxcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XFxuIFxcdHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoO1xcbiBcXHRzdHJ1Y3QgcnRhYmxlICpydDtcXG4gXFx0X19iZTMyIGlwX2RhZGRyO1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0dHVwbGVoYXNoID0gbmZfZmxvd19vZmZsb2FkX2xvb2t1cChcXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCBza2IpO1xcbi1cXHRpZiAoIXR1cGxlaGFzaClcXG4tXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4tXFxuLVxcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKFxcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdHJldHVybiBORl9EUk9QO1xcbi1cXHRlbHNlIGlmIChyZXQgPT0gMClcXG4tXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFxuIFxcdGlmICh1bmxpa2VseSh0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9YRlJNKSkge1xcbiBcXHRcXHRydCA9IGRzdF9ydGFibGUodHVwbGVoYXNoLVxcdTAwM2V0dXBsZS5kc3RfY2FjaGUpO1xcbkBAIC04NzMsNiArODU3LDM2IEBAIG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcbiBcXHRyZXR1cm4gbmZfZmxvd19xdWV1ZV94bWl0KHN0YXRlLVxcdTAwM2VuZXQsIHNrYiwgXFx1MDAyNnhtaXQpO1xcbiB9XFxuK1xcbit1bnNpZ25lZCBpbnRcXG4rbmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcXG4rXFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9IHByaXY7XFxuK1xcdHN0cnVjdCBuZl9mbG93dGFibGVfY3R4IGN0eCA9IHtcXG4rXFx0XFx0LmluXFx0PSBzdGF0ZS1cXHUwMDNlaW4sXFxuK1xcdH07XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIW5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKFxcdTAwMjZjdHgsIHNrYikpXFxuK1xcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuK1xcbitcXHRpZiAodW5saWtlbHkoY3R4LmV0aGVyX3R5cGUgIT0gaHRvbnMoRVRIX1BfSVApKSlcXG4rXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4rXFxuK1xcdHR1cGxlaGFzaCA9IG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoXFx1MDAyNmN0eCwgZmxvd190YWJsZSwgc2tiKTtcXG4rXFx0aWYgKCF0dXBsZWhhc2gpXFxuK1xcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuK1xcbitcXHRyZXQgPSBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChcXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gTkZfRFJPUDtcXG4rXFx0ZWxzZSBpZiAocmV0ID09IDApXFxuK1xcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuK1xcbitcXHRyZXR1cm4gbmZfZmxvd19xdWV1ZV94bWl0NChza2IsIHR1cGxlaGFzaCwgc3RhdGUpO1xcbit9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKTtcXG4gXFxuIHN0YXRpYyB2b2lkIG5mX2Zsb3dfbmF0X2lwdjZfdGNwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0aG9mZixcXG5AQCAtMTEwMSw0MiArMTExNSwyMyBAQCBuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4ge1xcbiBcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHR1cGxlID0ge307XFxuIFxcbi1cXHRpZiAoIW5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKGN0eCwgc2tiLCBodG9ucyhFVEhfUF9JUFY2KSkpXFxuLVxcdFxcdHJldHVybiBOVUxMO1xcbi1cXG4gXFx0aWYgKG5mX2Zsb3dfdHVwbGVfaXB2NihjdHgsIHNrYiwgXFx1MDAyNnR1cGxlKSBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4gXFx0cmV0dXJuIGZsb3dfb2ZmbG9hZF9sb29rdXAoZmxvd190YWJsZSwgXFx1MDAyNnR1cGxlKTtcXG4gfVxcbiBcXG4tdW5zaWduZWQgaW50XFxuLW5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxuK3N0YXRpYyBpbnQgbmZfZmxvd19xdWV1ZV94bWl0NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLFxcbitcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbiB7XFxuLVxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcXG4tXFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9IHByaXY7XFxuIFxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm90aGVyX3R1cGxlO1xcbiBcXHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xcbi1cXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCBjdHggPSB7XFxuLVxcdFxcdC5pblxcdD0gc3RhdGUtXFx1MDAzZWluLFxcbi1cXHR9O1xcbiBcXHRzdHJ1Y3QgbmZfZmxvd194bWl0IHhtaXQgPSB7fTtcXG4gXFx0c3RydWN0IGluNl9hZGRyICppcDZfZGFkZHI7XFxuIFxcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XFxuIFxcdHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoO1xcbiBcXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0O1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0dHVwbGVoYXNoID0gbmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKFxcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHNrYik7XFxuLVxcdGlmICh0dXBsZWhhc2ggPT0gTlVMTClcXG4tXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4tXFxuLVxcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoXFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xcbi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuLVxcdGVsc2UgaWYgKHJldCA9PSAwKVxcbi1cXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KHR1cGxlaGFzaC1cXHUwMDNldHVwbGUueG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX1hGUk0pKSB7XFxuIFxcdFxcdHJ0ID0gZHN0X3J0Nl9pbmZvKHR1cGxlaGFzaC1cXHUwMDNldHVwbGUuZHN0X2NhY2hlKTtcXG5AQCAtMTE5MCw0ICsxMTg1LDM0IEBAIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFxuIFxcdHJldHVybiBuZl9mbG93X3F1ZXVlX3htaXQoc3RhdGUtXFx1MDAzZW5ldCwgc2tiLCBcXHUwMDI2eG1pdCk7XFxuIH1cXG4rXFxuK3Vuc2lnbmVkIGludFxcbituZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcXG4rXFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9IHByaXY7XFxuK1xcdHN0cnVjdCBuZl9mbG93dGFibGVfY3R4IGN0eCA9IHtcXG4rXFx0XFx0LmluXFx0PSBzdGF0ZS1cXHUwMDNlaW4sXFxuK1xcdH07XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIW5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKFxcdTAwMjZjdHgsIHNrYikpXFxuK1xcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuK1xcbitcXHRpZiAodW5saWtlbHkoY3R4LmV0aGVyX3R5cGUgIT0gaHRvbnMoRVRIX1BfSVBWNikpKVxcbitcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbitcXG4rXFx0dHVwbGVoYXNoID0gbmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKFxcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHNrYik7XFxuK1xcdGlmICghdHVwbGVoYXNoKVxcbitcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbitcXG4rXFx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChcXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gTkZfRFJPUDtcXG4rXFx0ZWxzZSBpZiAocmV0ID09IDApXFxuK1xcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuK1xcbitcXHRyZXR1cm4gbmZfZmxvd19xdWV1ZV94bWl0Nihza2IsIHR1cGxlaGFzaCwgc3RhdGUpO1xcbit9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2spO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xcbmluZGV4IDU2MjE5YjAyZTEyMjcuLjFlNTU2NDRmMmVkYjggMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcXG5AQCAtNDQsMTEgKzQ0LDE2IEBAIHN0YXRpYyBib29sIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfY2FjaGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi1cXHRcXHRcXHRcXHQgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsIHU4ICpoYSxcXG4rXFx0XFx0XFx0XFx0ICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxcbitcXHRcXHRcXHRcXHQgICAgIHU4ICpoYSwgX19iZTE2IGV0aGVyX3R5cGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXFxuIHtcXG4gXFx0Y29uc3Qgdm9pZCAqZGFkZHIgPSBcXHUwMDI2Y3QtXFx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTM7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkc3RfY2FjaGUtXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0ge1xcbitcXHRcXHQuZGV2ID0gZGV2LFxcbitcXHRcXHQuZXRoZXJfdHlwZSA9IGV0aGVyX3R5cGUsXFxuK1xcdH07XFxuIFxcdHN0cnVjdCBuZWlnaGJvdXIgKm47XFxuIFxcdHU4IG51ZF9zdGF0ZTtcXG4gXFxuQEAgLTcxLDcgKzc2LDkgQEAgc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdF9jYWNoZSxcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4gb3V0Olxcbi1cXHRyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgaGEsIHN0YWNrKTtcXG4rXFx0ZXRoZXJfYWRkcl9jb3B5KGN0eC5kYWRkciwgaGEpO1xcbitcXG4rXFx0cmV0dXJuIGRldl9maWxsX2ZvcndhcmRfcGF0aChcXHUwMDI2Y3R4LCBzdGFjayk7XFxuIH1cXG4gXFxuIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHtcXG5AQCAtMTI2LDcgKzEzMyw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXFxuIFxcbiBcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2V0dW4uc3JjX3Y2ID0gcGF0aC1cXHUwMDNldHVuLnNyY192NjtcXG4gXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNldHVuLmRzdF92NiA9IHBhdGgtXFx1MDAzZXR1bi5kc3RfdjY7XFxuLVxcdFxcdFxcdFxcdGluZm8tXFx1MDAzZXR1bi5sM19wcm90byA9IHBhdGgtXFx1MDAzZXR1bi5sM19wcm90bztcXG4rXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNldHVuLmlubmVyX3Byb3RvID0gcGF0aC1cXHUwMDNldHVuLmlubmVyX3Byb3RvO1xcbiBcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2V0dW5fZHN0ID0gcGF0aC1cXHUwMDNldHVuLmRzdDtcXG4gXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlbnVtX3R1bnMrKztcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG5AQCAtMjIzLDcgKzIzMCw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuIFxcdHVuc2lnbmVkIGNoYXIgaGFbRVRIX0FMRU5dO1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdGlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRzdCwgY3QsIGRpciwgaGEsIFxcdTAwMjZzdGFjaykgXFx1MDAzYyAwIHx8XFxuK1xcdGlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRzdCwgY3QsIGRpciwgaGEsIHBrdC1cXHUwMDNlZXRoZXJ0eXBlLCBcXHUwMDI2c3RhY2spIFxcdTAwM2MgMCB8fFxcbiBcXHQgICAgbmZ0X2Rldl9wYXRoX2luZm8oXFx1MDAyNnN0YWNrLCBcXHUwMDI2aW5mbywgaGEsIGZ0KSBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXG5AQCAtMjM4LDcgKzI0NSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuIFxcdGlmIChpbmZvLm51bV90dW5zKSB7XFxuIFxcdFxcdHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS5pbi50dW4uc3JjX3Y2ID0gaW5mby50dW4uZHN0X3Y2O1xcbiBcXHRcXHRyb3V0ZS1cXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLmRzdF92NiA9IGluZm8udHVuLnNyY192NjtcXG4tXFx0XFx0cm91dGUtXFx1MDAzZXR1cGxlWyFkaXJdLmluLnR1bi5sM19wcm90byA9IGluZm8udHVuLmwzX3Byb3RvO1xcbitcXHRcXHRyb3V0ZS1cXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLmlubmVyX3Byb3RvID0gaW5mby50dW4uaW5uZXJfcHJvdG87XFxuIFxcdFxcdHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS5pbi5udW1fdHVucyA9IGluZm8ubnVtX3R1bnM7XFxuIFxcdFxcdGRzdF9yZWxlYXNlKHJvdXRlLVxcdTAwM2V0dXBsZVtkaXJdLmRzdCk7XFxuIFxcdFxcdHJvdXRlLVxcdTAwM2V0dXBsZVtkaXJdLmRzdCA9IGluZm8udHVuX2RzdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjg6MDcuODYyNjIwNTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzk4NjU3NjcwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORl9GTE9XX1RBQkxFX0lORVRcIixcbiAgICBcIk5GVF9GTE9XX09GRkxPQURcIixcbiAgICBcIk5FVF9JUElQXCIsXG4gICAgXCJJUFY2X1RVTk5FTFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJWTEFOXzgwMjFRXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwX2hvb2tcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tcIixcbiAgICBcIm5mdF9mbG93X3JvdXRlXCIsXG4gICAgXCJkZXZfZmlsbF9mb3J3YXJkX3BhdGhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgb2ZmbG9hZCBwYXRoIHRvIHByb3Blcmx5IGhhbmRsZSBpbm5lciBwcm90b2NvbHMgYW5kIGV0aGVyX3R5cGUsIGVzcGVjaWFsbHkgZm9yIElQLWluLUlQIGFuZCBJUHY2IHR1bm5lbHMuIEl0IGNoYW5nZXMgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgdG8gdGFrZSBhIGNvbnRleHQgc3RydWN0IGluc3RlYWQgb2YganVzdCB0aGUgZGV2aWNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzLCBhbmQgdXBkYXRlcyB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgaG9va3MgdG8gdXNlIHRoaXMgY29udGV4dCBhbmQgY29ycmVjdGx5IGlkZW50aWZ5IGVuY2Fwc3VsYXRlZCBwcm90b2NvbHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIHN1YnN5c3RlbXMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGQ2YWEwOTBmOGQ1OGYxMTg5OTlhMzJkM2M1MjhmMTY4Yzk1YTdlZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMDI6Mjg6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuaW5kZXggYTAzYWY5NzUwNTczMS4uOTI2MTE4MDI4MDFlYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbkBAIC0yODMsMTQgKzI4MywxOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgYWlyb2hhX3dkbWFfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrIHN0YWNrO1xuK1x0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0ge1xuK1x0XHQuZGV2ID0gZGV2LFxuK1x0fTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XG4gXHRpbnQgZXJyO1xuIFxuIFx0aWYgKCFkZXYpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuK1x0ZXRoZXJfYWRkcl9jb3B5KGN0eC5kYWRkciwgYWRkcik7XG4rXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBcdTAwMjZzdGFjayk7XG4rXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoXHUwMDI2Y3R4LCBcdTAwMjZzdGFjayk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuY1xuaW5kZXggNzcxZDkxMThmOTRhZC4uOTliMjhhYWE3Y2M0NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuY1xuQEAgLTkyLDYgKzkyLDkgQEAgc3RhdGljIGludFxuIG10a19mbG93X2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsIHN0cnVjdCBtdGtfd2RtYV9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgc3RhY2s7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XG4rXHRcdC5kZXYgPSBkZXYsXG4rXHR9O1xuIFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcbiBcdGludCBlcnI7XG4gXG5AQCAtMTAxLDggKzEwNCwxMCBAQCBtdGtfZmxvd19nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLCBzdHJ1Y3QgbXRrX3dkbWFfaVxuIFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRfTUVESUFURUtfU09DX1dFRCkpXG4gXHRcdHJldHVybiAtMTtcbiBcbitcdGV0aGVyX2FkZHJfY29weShjdHguZGFkZHIsIGFkZHIpO1xuK1xuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0ZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgYWRkciwgXHUwMDI2c3RhY2spO1xuK1x0ZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKFx1MDAyNmN0eCwgXHUwMDI2c3RhY2spO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA2MmNmYWQ3ZTZiNzlhLi42OGNjYjU4NjgwNzBlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTkwMiw3ICs5MDIsNyBAQCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoIHtcbiBcdFx0XHRcdHN0cnVjdCBpbjZfYWRkclx0ZHN0X3Y2O1xuIFx0XHRcdH07XG4gXG4tXHRcdFx0dThcdGwzX3Byb3RvO1xuK1x0XHRcdHU4XHRpbm5lcl9wcm90bztcbiBcdFx0fSB0dW47XG4gXHRcdHN0cnVjdCB7XG4gXHRcdFx0ZW51bSB7XG5AQCAtOTM5LDYgKzkzOSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sge1xuIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IHtcbiBcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gXHR1OFx0XHRcdGRhZGRyW0VUSF9BTEVOXTtcbitcdF9fYmUxNlx0XHRcdGV0aGVyX3R5cGU7XG4gXG4gXHRpbnRcdFx0XHRudW1fdmxhbnM7XG4gXHRzdHJ1Y3Qge1xuQEAgLTM0MjYsNyArMzQyNyw3IEBAIHZvaWQgZGV2X3JlbW92ZV9vZmZsb2FkKHN0cnVjdCBwYWNrZXRfb2ZmbG9hZCAqcG8pO1xuIFxuIGludCBkZXZfZ2V0X2lmbGluayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBpbnQgZGV2X2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xuLWludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuK2ludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcbiB2b2lkIGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcbiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbmluZGV4IGEwOTBlYzNmZmVmMmUuLmYyZTI3NzFmMTg4ZjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG5AQCAtMTE3LDcgKzExNyw3IEBAIHN0cnVjdCBmbG93X29mZmxvYWRfdHVubmVsIHtcbiBcdFx0c3RydWN0IGluNl9hZGRyXHRkc3RfdjY7XG4gXHR9O1xuIFxuLVx0dThcdGwzX3Byb3RvO1xuK1x0dThcdGlubmVyX3Byb3RvO1xuIH07XG4gXG4gc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggZTUwZWQ2NzdkZTcyNS4uMTNkZmQyMTEzYTVhYiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4rKysgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTc2OSwzNSArNzY5LDMxIEBAIHZvaWQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKTtcbiBcbi1pbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcbitpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4gXHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbGFzdF9kZXY7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XG4tXHRcdC5kZXZcdD0gZGV2LFxuLVx0fTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbi1cdG1lbWNweShjdHguZGFkZHIsIGRhZGRyLCBzaXplb2YoY3R4LmRhZGRyKSk7XG4gXHRzdGFjay1cdTAwM2VudW1fcGF0aHMgPSAwO1xuLVx0d2hpbGUgKGN0eC5kZXYgXHUwMDI2XHUwMDI2IGN0eC5kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgpIHtcbi1cdFx0bGFzdF9kZXYgPSBjdHguZGV2O1xuK1x0d2hpbGUgKGN0eC1cdTAwM2VkZXYgXHUwMDI2XHUwMDI2IGN0eC1cdTAwM2VkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgpIHtcbitcdFx0bGFzdF9kZXYgPSBjdHgtXHUwMDNlZGV2O1xuIFx0XHRwYXRoID0gZGV2X2Z3ZF9wYXRoKHN0YWNrKTtcbiBcdFx0aWYgKCFwYXRoKVxuIFx0XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdFx0bWVtc2V0KHBhdGgsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9wYXRoKSk7XG4tXHRcdHJldCA9IGN0eC5kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgoXHUwMDI2Y3R4LCBwYXRoKTtcbitcdFx0cmV0ID0gY3R4LVx1MDAzZWRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aChjdHgsIHBhdGgpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdFx0c3RhY2stXHUwMDNlbnVtX3BhdGhzKys7XG4tXHRcdGlmIChXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LmRldikpXG4rXHRcdGlmIChXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LVx1MDAzZWRldikpXG4gXHRcdFx0Z290byBlcnJfb3V0O1xuIFx0fVxuIFxuLVx0aWYgKCFjdHguZGV2KVxuK1x0aWYgKCFjdHgtXHUwMDNlZGV2KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XG5AQCAtODA1LDcgKzgwMSw3IEBAIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuIFx0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRwYXRoLVx1MDAzZXR5cGUgPSBERVZfUEFUSF9FVEhFUk5FVDtcbi1cdHBhdGgtXHUwMDNlZGV2ID0gY3R4LmRldjtcbitcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldjtcbiBcdHN0YWNrLVx1MDAzZW51bV9wYXRocysrO1xuIFxuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBpcC5jIGIvbmV0L2lwdjQvaXBpcC5jXG5pbmRleCBmYjdkOTZmOTliMDZiLi4xNjMwMzI1Yzc3ZDM0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBpcC5jXG4rKysgYi9uZXQvaXB2NC9pcGlwLmNcbkBAIC0zNjAsNiArMzYwLDkgQEAgc3RhdGljIGludCBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4gXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKnRpcGggPSBcdTAwMjZ0dW5uZWwtXHUwMDNlcGFybXMuaXBoO1xuIFx0c3RydWN0IHJ0YWJsZSAqcnQ7XG4gXG4rXHRpZiAoY3R4LVx1MDAzZWV0aGVyX3R5cGUgIT0gY3B1X3RvX2JlMTYoRVRIX1BfSVApKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4gXHRpZiAodHVubmVsLVx1MDAzZWNvbGxlY3RfbWQpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbkBAIC0zNzUsNyArMzc4LDcgQEAgc3RhdGljIGludCBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4gXHRwYXRoLVx1MDAzZXR5cGUgPSBERVZfUEFUSF9UVU47XG4gXHRwYXRoLVx1MDAzZXR1bi5zcmNfdjQuc19hZGRyID0gdGlwaC1cdTAwM2VzYWRkcjtcbiBcdHBhdGgtXHUwMDNldHVuLmRzdF92NC5zX2FkZHIgPSB0aXBoLVx1MDAzZWRhZGRyO1xuLVx0cGF0aC1cdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQSVA7XG4rXHRwYXRoLVx1MDAzZXR1bi5pbm5lcl9wcm90byA9IElQUFJPVE9fSVBJUDtcbiBcdHBhdGgtXHUwMDNldHVuLmRzdCA9IFx1MDAyNnJ0LVx1MDAzZWRzdDtcbiBcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldjtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbmluZGV4IGQ4MDAyMGJjMjYyMGUuLjdiNTQ5MTkyMzJiYTMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuQEAgLTE4NDksNiArMTg0OSw5IEBAIHN0YXRpYyBpbnQgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0c3RydWN0IGZsb3dpNiBmbDY7XG4gXHRpbnQgZXJyO1xuIFxuK1x0aWYgKGN0eC1cdTAwM2VldGhlcl90eXBlICE9IGNwdV90b19iZTE2KEVUSF9QX0lQVjYpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4gXHRpZiAodC1cdTAwM2VwYXJtcy5mbGFncyBcdTAwMjYgKElQNl9UTkxfRl9VU0VfT1JJR19UQ0xBU1MgfFxuIFx0XHRcdCAgICAgIElQNl9UTkxfRl9VU0VfT1JJR19GTE9XTEFCRUwgfFxuIFx0XHRcdCAgICAgIElQNl9UTkxfRl9VU0VfT1JJR19GV01BUkspKVxuQEAgLTE4NjksNyArMTg3Miw3IEBAIHN0YXRpYyBpbnQgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0XHRwYXRoLVx1MDAzZXR5cGUgPSBERVZfUEFUSF9UVU47XG4gXHRcdHBhdGgtXHUwMDNldHVuLnNyY192NiA9IGZsNi5zYWRkcjtcbiBcdFx0cGF0aC1cdTAwM2V0dW4uZHN0X3Y2ID0gZmw2LmRhZGRyO1xuLVx0XHRwYXRoLVx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBWNjtcbitcdFx0cGF0aC1cdTAwM2V0dW4uaW5uZXJfcHJvdG8gPSBJUFBST1RPX0lQVjY7XG4gXHRcdHBhdGgtXHUwMDNldHVuLmRzdCA9IGRzdDtcbiBcdFx0cGF0aC1cdTAwM2VkZXYgPSBjdHgtXHUwMDNlZGV2O1xuIFx0XHRjdHgtXHUwMDNlZGV2ID0gZHN0LVx1MDAzZWRldjtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG5pbmRleCAwYjMxNGIxMGU3MDVhLi5hZjUzNDAwMGEyODdhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG5AQCAtMTQ3LDEzICsxNDcsMTQgQEAgc3RhdGljIGJvb2wgaXBfaGFzX29wdGlvbnModW5zaWduZWQgaW50IHRob2ZmKVxuIFxuIHN0cnVjdCBuZl9mbG93dGFibGVfY3R4IHtcbiBcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlXHQqaW47XG4rXHRfX2JlMTZcdFx0XHRldGhlcl90eXBlO1xuIFx0dTMyXHRcdFx0b2Zmc2V0O1xuIFx0dTMyXHRcdFx0aGRyc2l6ZTtcbiBcdHN0cnVjdCB7XG4gXHRcdC8qIFR1bm5lbCBJUCBoZWFkZXIgc2l6ZSAqL1xuIFx0XHR1MzIgaGRyX3NpemU7XG4gXHRcdC8qIElQIHR1bm5lbCBwcm90b2NvbCAqL1xuLVx0XHR1OCBwcm90bztcbitcdFx0dTggaW5uZXJfcHJvdG87XG4gXHR9IHR1bjtcbiB9O1xuIFxuQEAgLTE2MSw3ICsxNjIsNiBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X3R1cGxlX2VuY2FwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUpXG4ge1xuLVx0X19iZTE2IGlubmVyX3Byb3RvID0gc2tiLVx1MDAzZXByb3RvY29sO1xuIFx0c3RydWN0IHZsYW5fZXRoaGRyICp2ZXRoO1xuIFx0c3RydWN0IHBwcG9lX2hkciAqcGhkcjtcbiBcdHN0cnVjdCBpcHY2aGRyICppcDZoO1xuQEAgLTE3OSwzMyArMTc5LDMxIEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfdHVwbGVfZW5jYXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcdFx0dmV0aCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpO1xuIFx0XHR0dXBsZS1cdTAwM2VlbmNhcFtpXS5pZCA9IG50b2hzKHZldGgtXHUwMDNlaF92bGFuX1RDSSk7XG4gXHRcdHR1cGxlLVx1MDAzZWVuY2FwW2ldLnByb3RvID0gc2tiLVx1MDAzZXByb3RvY29sO1xuLVx0XHRpbm5lcl9wcm90byA9IHZldGgtXHUwMDNlaF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bztcbiBcdFx0b2Zmc2V0ICs9IFZMQU5fSExFTjtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIGh0b25zKEVUSF9QX1BQUF9TRVMpOlxuIFx0XHRwaGRyID0gKHN0cnVjdCBwcHBvZV9oZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbiBcdFx0dHVwbGUtXHUwMDNlZW5jYXBbaV0uaWQgPSBudG9ocyhwaGRyLVx1MDAzZXNpZCk7XG4gXHRcdHR1cGxlLVx1MDAzZWVuY2FwW2ldLnByb3RvID0gc2tiLVx1MDAzZXByb3RvY29sO1xuLVx0XHRpbm5lcl9wcm90byA9ICooKF9fYmUxNiAqKShwaGRyICsgMSkpO1xuIFx0XHRvZmZzZXQgKz0gUFBQT0VfU0VTX0hMRU47XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0c3dpdGNoIChpbm5lcl9wcm90bykge1xuK1x0c3dpdGNoIChjdHgtXHUwMDNlZXRoZXJfdHlwZSkge1xuIFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4gXHRcdGlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBvZmZzZXQpO1xuLVx0XHRpZiAoY3R4LVx1MDAzZXR1bi5wcm90byA9PSBJUFBST1RPX0lQSVApIHtcbitcdFx0aWYgKGN0eC1cdTAwM2V0dW4uaW5uZXJfcHJvdG8gPT0gSVBQUk9UT19JUElQKSB7XG4gXHRcdFx0dHVwbGUtXHUwMDNldHVuLmRzdF92NC5zX2FkZHIgPSBpcGgtXHUwMDNlZGFkZHI7XG4gXHRcdFx0dHVwbGUtXHUwMDNldHVuLnNyY192NC5zX2FkZHIgPSBpcGgtXHUwMDNlc2FkZHI7XG4tXHRcdFx0dHVwbGUtXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUElQO1xuK1x0XHRcdHR1cGxlLVx1MDAzZXR1bi5pbm5lcl9wcm90byA9IElQUFJPVE9fSVBJUDtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4gXHRcdGlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBvZmZzZXQpO1xuLVx0XHRpZiAoY3R4LVx1MDAzZXR1bi5wcm90byA9PSBJUFBST1RPX0lQVjYpIHtcbitcdFx0aWYgKGN0eC1cdTAwM2V0dW4uaW5uZXJfcHJvdG8gPT0gSVBQUk9UT19JUFY2KSB7XG4gXHRcdFx0dHVwbGUtXHUwMDNldHVuLmRzdF92NiA9IGlwNmgtXHUwMDNlZGFkZHI7XG4gXHRcdFx0dHVwbGUtXHUwMDNldHVuLnNyY192NiA9IGlwNmgtXHUwMDNlc2FkZHI7XG4tXHRcdFx0dHVwbGUtXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUFY2O1xuK1x0XHRcdHR1cGxlLVx1MDAzZXR1bi5pbm5lcl9wcm90byA9IElQUFJPVE9fSVBWNjtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG5AQCAtMzI4LDcgKzMyNiw3IEBAIHN0YXRpYyBib29sIG5mX2Zsb3dfaXA0X3R1bm5lbF9wcm90byhzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRpZiAoaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fSVBJUCkge1xuLVx0XHRjdHgtXHUwMDNldHVuLnByb3RvID0gaXBoLVx1MDAzZXByb3RvY29sO1xuK1x0XHRjdHgtXHUwMDNldHVuLmlubmVyX3Byb3RvID0gaXBoLVx1MDAzZXByb3RvY29sO1xuIFx0XHRjdHgtXHUwMDNldHVuLmhkcl9zaXplID0gc2l6ZTtcbiBcdFx0Y3R4LVx1MDAzZW9mZnNldCArPSBjdHgtXHUwMDNldHVuLmhkcl9zaXplO1xuIFx0fVxuQEAgLTM1Myw3ICszNTEsNyBAQCBzdGF0aWMgYm9vbCBuZl9mbG93X2lwNl90dW5uZWxfcHJvdG8oc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0aWYgKGlwNmgtXHUwMDNlbmV4dGhkciA9PSBJUFBST1RPX0lQVjYpIHtcbi1cdFx0Y3R4LVx1MDAzZXR1bi5wcm90byA9IGlwNmgtXHUwMDNlbmV4dGhkcjtcbitcdFx0Y3R4LVx1MDAzZXR1bi5pbm5lcl9wcm90byA9IGlwNmgtXHUwMDNlbmV4dGhkcjtcbiBcdFx0Y3R4LVx1MDAzZXR1bi5oZHJfc2l6ZSA9IHNpemVvZigqaXA2aCk7XG4gXHRcdGN0eC1cdTAwM2VvZmZzZXQgKz0gY3R4LVx1MDAzZXR1bi5oZHJfc2l6ZTtcbiBcdH1cbkBAIC0zNjcsOCArMzY1LDggQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDZfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gc3RhdGljIHZvaWQgbmZfZmxvd19pcF90dW5uZWxfcG9wKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0aWYgKGN0eC1cdTAwM2V0dW4ucHJvdG8gIT0gSVBQUk9UT19JUElQIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGN0eC1cdTAwM2V0dW4ucHJvdG8gIT0gSVBQUk9UT19JUFY2KVxuK1x0aWYgKGN0eC1cdTAwM2V0dW4uaW5uZXJfcHJvdG8gIT0gSVBQUk9UT19JUElQIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGN0eC1cdTAwM2V0dW4uaW5uZXJfcHJvdG8gIT0gSVBQUk9UT19JUFY2KVxuIFx0XHRyZXR1cm47XG4gXG4gXHRza2JfcHVsbChza2IsIGN0eC1cdTAwM2V0dW4uaGRyX3NpemUpO1xuQEAgLTM3NiwxMCArMzc0LDEwIEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfaXBfdHVubmVsX3BvcChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIH1cbiBcbiBzdGF0aWMgYm9vbCBuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiBwcm90bylcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdF9fYmUxNiBpbm5lcl9wcm90byA9IHNrYi1cdTAwM2Vwcm90b2NvbDtcbiBcdHN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aDtcbitcdF9fYmUxNiBldGhlcl90eXBlO1xuIFx0Ym9vbCByZXQgPSBmYWxzZTtcbiBcbiBcdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG5AQCAtMzg4LDIyICszODYsMjcgQEAgc3RhdGljIGJvb2wgbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRcdHZldGggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopc2tiX21hY19oZWFkZXIoc2tiKTtcbi1cdFx0aWYgKHZldGgtXHUwMDNlaF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90byA9PSBwcm90bykge1xuLVx0XHRcdGN0eC1cdTAwM2VvZmZzZXQgKz0gVkxBTl9ITEVOO1xuLVx0XHRcdGlubmVyX3Byb3RvID0gcHJvdG87XG4tXHRcdFx0cmV0ID0gdHJ1ZTtcbi1cdFx0fVxuK1x0XHRjdHgtXHUwMDNlZXRoZXJfdHlwZSA9IHZldGgtXHUwMDNlaF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bztcbitcdFx0Y3R4LVx1MDAzZW9mZnNldCArPSBWTEFOX0hMRU47XG4rXHRcdHJldCA9IHRydWU7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBodG9ucyhFVEhfUF9QUFBfU0VTKTpcbi1cdFx0aWYgKG5mX2Zsb3dfcHBwb2VfcHJvdG8oc2tiLCBcdTAwMjZpbm5lcl9wcm90bykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBpbm5lcl9wcm90byA9PSBwcm90bykge1xuLVx0XHRcdGN0eC1cdTAwM2VvZmZzZXQgKz0gUFBQT0VfU0VTX0hMRU47XG4tXHRcdFx0cmV0ID0gdHJ1ZTtcbi1cdFx0fVxuK1x0XHRpZiAoIW5mX2Zsb3dfcHBwb2VfcHJvdG8oc2tiLCBcdTAwMjZldGhlcl90eXBlKSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRcdGN0eC1cdTAwM2VldGhlcl90eXBlID0gZXRoZXJfdHlwZTtcbitcdFx0Y3R4LVx1MDAzZW9mZnNldCArPSBQUFBPRV9TRVNfSExFTjtcbitcdFx0cmV0ID0gdHJ1ZTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbitcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4rXHRcdGN0eC1cdTAwM2VldGhlcl90eXBlID0gc2tiLVx1MDAzZXByb3RvY29sO1xuIFx0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbi1cdHN3aXRjaCAoaW5uZXJfcHJvdG8pIHtcbitcdHN3aXRjaCAoY3R4LVx1MDAzZWV0aGVyX3R5cGUpIHtcbiBcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuIFx0XHRyZXQgPSBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG8oY3R4LCBza2IpO1xuIFx0XHRicmVhaztcbkBAIC00NTUsOSArNDU4LDYgQEAgbmZfZmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIHtcbiBcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTtcbiBcbi1cdGlmICghbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woY3R4LCBza2IsIGh0b25zKEVUSF9QX0lQKSkpXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuIFx0aWYgKG5mX2Zsb3dfdHVwbGVfaXAoY3R4LCBza2IsIFx1MDAyNnR1cGxlKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG5AQCAtNjExLDcgKzYxMSw3IEBAIHN0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXBpcF9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlwaC1cdTAwM2V2ZXJzaW9uXHQ9IDQ7XG4gXHRpcGgtXHUwMDNlaWhsXHQ9IHNpemVvZigqaXBoKSBcdTAwM2VcdTAwM2UgMjtcbiBcdGlwaC1cdTAwM2VmcmFnX29mZlx0PSBpcF9tdHVfbG9ja2VkKFx1MDAyNnJ0LVx1MDAzZWRzdCkgPyAwIDogZnJhZ19vZmY7XG4tXHRpcGgtXHUwMDNlcHJvdG9jb2xcdD0gdHVwbGUtXHUwMDNldHVuLmwzX3Byb3RvO1xuK1x0aXBoLVx1MDAzZXByb3RvY29sXHQ9IHR1cGxlLVx1MDAzZXR1bi5pbm5lcl9wcm90bztcbiBcdGlwaC1cdTAwM2V0b3NcdD0gdG9zO1xuIFx0aXBoLVx1MDAzZWRhZGRyXHQ9IHR1cGxlLVx1MDAzZXR1bi5zcmNfdjQuc19hZGRyO1xuIFx0aXBoLVx1MDAzZXNhZGRyXHQ9IHR1cGxlLVx1MDAzZXR1bi5kc3RfdjQuc19hZGRyO1xuQEAgLTc5NCwzMyArNzk0LDE3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfZmxvd19xdWV1ZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiBORl9TVE9MRU47XG4gfVxuIFxuLXVuc2lnbmVkIGludFxuLW5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxuK3N0YXRpYyBpbnQgbmZfZmxvd19xdWV1ZV94bWl0NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXG4rXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbiB7XG4tXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2g7XG4tXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlID0gcHJpdjtcbiBcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm90aGVyX3R1cGxlO1xuIFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjtcbi1cdHN0cnVjdCBuZl9mbG93dGFibGVfY3R4IGN0eCA9IHtcbi1cdFx0LmluXHQ9IHN0YXRlLVx1MDAzZWluLFxuLVx0fTtcbiBcdHN0cnVjdCBuZl9mbG93X3htaXQgeG1pdCA9IHt9O1xuIFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcbiBcdHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoO1xuIFx0c3RydWN0IHJ0YWJsZSAqcnQ7XG4gXHRfX2JlMzIgaXBfZGFkZHI7XG4tXHRpbnQgcmV0O1xuLVxuLVx0dHVwbGVoYXNoID0gbmZfZmxvd19vZmZsb2FkX2xvb2t1cChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHNrYik7XG4tXHRpZiAoIXR1cGxlaGFzaClcbi1cdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbi1cbi1cdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIE5GX0RST1A7XG4tXHRlbHNlIGlmIChyZXQgPT0gMClcbi1cdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbiBcdGlmICh1bmxpa2VseSh0dXBsZWhhc2gtXHUwMDNldHVwbGUueG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX1hGUk0pKSB7XG4gXHRcdHJ0ID0gZHN0X3J0YWJsZSh0dXBsZWhhc2gtXHUwMDNldHVwbGUuZHN0X2NhY2hlKTtcbkBAIC04NzMsNiArODU3LDM2IEBAIG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRyZXR1cm4gbmZfZmxvd19xdWV1ZV94bWl0KHN0YXRlLVx1MDAzZW5ldCwgc2tiLCBcdTAwMjZ4bWl0KTtcbiB9XG4rXG4rdW5zaWduZWQgaW50XG4rbmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4re1xuK1x0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoO1xuK1x0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9IHByaXY7XG4rXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCBjdHggPSB7XG4rXHRcdC5pblx0PSBzdGF0ZS1cdTAwM2VpbixcbitcdH07XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChcdTAwMjZjdHgsIHNrYikpXG4rXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4rXG4rXHRpZiAodW5saWtlbHkoY3R4LmV0aGVyX3R5cGUgIT0gaHRvbnMoRVRIX1BfSVApKSlcbitcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbitcbitcdHR1cGxlaGFzaCA9IG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCBza2IpO1xuK1x0aWYgKCF0dXBsZWhhc2gpXG4rXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4rXG4rXHRyZXQgPSBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiBORl9EUk9QO1xuK1x0ZWxzZSBpZiAocmV0ID09IDApXG4rXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4rXG4rXHRyZXR1cm4gbmZfZmxvd19xdWV1ZV94bWl0NChza2IsIHR1cGxlaGFzaCwgc3RhdGUpO1xuK31cbiBFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X29mZmxvYWRfaXBfaG9vayk7XG4gXG4gc3RhdGljIHZvaWQgbmZfZmxvd19uYXRfaXB2Nl90Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHRob2ZmLFxuQEAgLTExMDEsNDIgKzExMTUsMjMgQEAgbmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4ge1xuIFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB0dXBsZSA9IHt9O1xuIFxuLVx0aWYgKCFuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChjdHgsIHNrYiwgaHRvbnMoRVRIX1BfSVBWNikpKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbiBcdGlmIChuZl9mbG93X3R1cGxlX2lwdjYoY3R4LCBza2IsIFx1MDAyNnR1cGxlKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCBcdTAwMjZ0dXBsZSk7XG4gfVxuIFxuLXVuc2lnbmVkIGludFxuLW5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHQgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbitzdGF0aWMgaW50IG5mX2Zsb3dfcXVldWVfeG1pdDYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHQgICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLFxuK1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4ge1xuLVx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoO1xuLVx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9IHByaXY7XG4gXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZTtcbiBcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7XG4tXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCBjdHggPSB7XG4tXHRcdC5pblx0PSBzdGF0ZS1cdTAwM2Vpbixcbi1cdH07XG4gXHRzdHJ1Y3QgbmZfZmxvd194bWl0IHhtaXQgPSB7fTtcbiBcdHN0cnVjdCBpbjZfYWRkciAqaXA2X2RhZGRyO1xuIFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcbiBcdHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoO1xuIFx0c3RydWN0IHJ0Nl9pbmZvICpydDtcbi1cdGludCByZXQ7XG4tXG4tXHR0dXBsZWhhc2ggPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXAoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCBza2IpO1xuLVx0aWYgKHR1cGxlaGFzaCA9PSBOVUxMKVxuLVx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuLVxuLVx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiBORl9EUk9QO1xuLVx0ZWxzZSBpZiAocmV0ID09IDApXG4tXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRpZiAodW5saWtlbHkodHVwbGVoYXNoLVx1MDAzZXR1cGxlLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9YRlJNKSkge1xuIFx0XHRydCA9IGRzdF9ydDZfaW5mbyh0dXBsZWhhc2gtXHUwMDNldHVwbGUuZHN0X2NhY2hlKTtcbkBAIC0xMTkwLDQgKzExODUsMzQgQEAgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0cmV0dXJuIG5mX2Zsb3dfcXVldWVfeG1pdChzdGF0ZS1cdTAwM2VuZXQsIHNrYiwgXHUwMDI2eG1pdCk7XG4gfVxuK1xuK3Vuc2lnbmVkIGludFxuK25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbit7XG4rXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2g7XG4rXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlID0gcHJpdjtcbitcdHN0cnVjdCBuZl9mbG93dGFibGVfY3R4IGN0eCA9IHtcbitcdFx0LmluXHQ9IHN0YXRlLVx1MDAzZWluLFxuK1x0fTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIW5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKFx1MDAyNmN0eCwgc2tiKSlcbitcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbitcbitcdGlmICh1bmxpa2VseShjdHguZXRoZXJfdHlwZSAhPSBodG9ucyhFVEhfUF9JUFY2KSkpXG4rXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4rXG4rXHR0dXBsZWhhc2ggPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXAoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCBza2IpO1xuK1x0aWYgKCF0dXBsZWhhc2gpXG4rXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4rXG4rXHRyZXQgPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIE5GX0RST1A7XG4rXHRlbHNlIGlmIChyZXQgPT0gMClcbitcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbitcbitcdHJldHVybiBuZl9mbG93X3F1ZXVlX3htaXQ2KHNrYiwgdHVwbGVoYXNoLCBzdGF0ZSk7XG4rfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2spO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXG5pbmRleCA1NjIxOWIwMmUxMjI3Li4xZTU1NjQ0ZjJlZGI4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xuQEAgLTQ0LDExICs0NCwxNiBAQCBzdGF0aWMgYm9vbCBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdF9jYWNoZSxcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLVx0XHRcdFx0ICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLCB1OCAqaGEsXG4rXHRcdFx0XHQgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4rXHRcdFx0XHQgICAgIHU4ICpoYSwgX19iZTE2IGV0aGVyX3R5cGUsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuIHtcbiBcdGNvbnN0IHZvaWQgKmRhZGRyID0gXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MztcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkc3RfY2FjaGUtXHUwMDNlZGV2O1xuK1x0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0ge1xuK1x0XHQuZGV2ID0gZGV2LFxuK1x0XHQuZXRoZXJfdHlwZSA9IGV0aGVyX3R5cGUsXG4rXHR9O1xuIFx0c3RydWN0IG5laWdoYm91ciAqbjtcbiBcdHU4IG51ZF9zdGF0ZTtcbiBcbkBAIC03MSw3ICs3Niw5IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfY2FjaGUsXG4gXHRcdHJldHVybiAtMTtcbiBcbiBvdXQ6XG4tXHRyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgaGEsIHN0YWNrKTtcbitcdGV0aGVyX2FkZHJfY29weShjdHguZGFkZHIsIGhhKTtcbitcbitcdHJldHVybiBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoXHUwMDI2Y3R4LCBzdGFjayk7XG4gfVxuIFxuIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHtcbkBAIC0xMjYsNyArMTMzLDcgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcbiBcbiBcdFx0XHRcdGluZm8tXHUwMDNldHVuLnNyY192NiA9IHBhdGgtXHUwMDNldHVuLnNyY192NjtcbiBcdFx0XHRcdGluZm8tXHUwMDNldHVuLmRzdF92NiA9IHBhdGgtXHUwMDNldHVuLmRzdF92Njtcbi1cdFx0XHRcdGluZm8tXHUwMDNldHVuLmwzX3Byb3RvID0gcGF0aC1cdTAwM2V0dW4ubDNfcHJvdG87XG4rXHRcdFx0XHRpbmZvLVx1MDAzZXR1bi5pbm5lcl9wcm90byA9IHBhdGgtXHUwMDNldHVuLmlubmVyX3Byb3RvO1xuIFx0XHRcdFx0aW5mby1cdTAwM2V0dW5fZHN0ID0gcGF0aC1cdTAwM2V0dW4uZHN0O1xuIFx0XHRcdFx0aW5mby1cdTAwM2VudW1fdHVucysrO1xuIFx0XHRcdH0gZWxzZSB7XG5AQCAtMjIzLDcgKzIzMCw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gXHR1bnNpZ25lZCBjaGFyIGhhW0VUSF9BTEVOXTtcbiBcdGludCBpO1xuIFxuLVx0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoZHN0LCBjdCwgZGlyLCBoYSwgXHUwMDI2c3RhY2spIFx1MDAzYyAwIHx8XG4rXHRpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChkc3QsIGN0LCBkaXIsIGhhLCBwa3QtXHUwMDNlZXRoZXJ0eXBlLCBcdTAwMjZzdGFjaykgXHUwMDNjIDAgfHxcbiBcdCAgICBuZnRfZGV2X3BhdGhfaW5mbyhcdTAwMjZzdGFjaywgXHUwMDI2aW5mbywgaGEsIGZ0KSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG5AQCAtMjM4LDcgKzI0NSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gXHRpZiAoaW5mby5udW1fdHVucykge1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi50dW4uc3JjX3Y2ID0gaW5mby50dW4uZHN0X3Y2O1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi50dW4uZHN0X3Y2ID0gaW5mby50dW4uc3JjX3Y2O1xuLVx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi50dW4ubDNfcHJvdG8gPSBpbmZvLnR1bi5sM19wcm90bztcbitcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLmlubmVyX3Byb3RvID0gaW5mby50dW4uaW5uZXJfcHJvdG87XG4gXHRcdHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmluLm51bV90dW5zID0gaW5mby5udW1fdHVucztcbiBcdFx0ZHN0X3JlbGVhc2Uocm91dGUtXHUwMDNldHVwbGVbZGlyXS5kc3QpO1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLmRzdCA9IGluZm8udHVuX2RzdDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjA3Ljg2MjYyMTk4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI5MjQzNjU0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JraW5nIEZsb3cgVGFibGUgT2ZmbG9hZCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSwgYW5kIGl0IGxvb2tzIGxpa2UgYSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gaG93IHdlIGhhbmRsZSB0aGUgZmxvdyB0YWJsZSBvZmZsb2FkIHBhdGgsIHNwZWNpZmljYWxseSBpbiB0aGUgbmV0d29ya2luZyBjb3JlLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIGFkZHJlc3Npbmcgc29tZSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggdGhlIHdheSB3ZSB3ZXJlIGRlYWxpbmcgd2l0aCBpbm5lciBwcm90b2NvbHMgYW5kIEV0aGVybmV0IHR5cGVzLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGNlbnRlciBhcm91bmQgYSBuZXcgYHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4YC4gSW5zdGVhZCBvZiBwYXNzaW5nIHRoZSBkZXZpY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3Mgc2VwYXJhdGVseSB0byBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCwgd2UncmUgbm93IHBhc3NpbmcgdGhpcyBgY3R4YCBzdHJ1Y3R1cmUuIFRoaXMgYGN0eGAgaW5jbHVkZXMgdGhlIGRldmljZSwgZGVzdGluYXRpb24gYWRkcmVzcywgYW5kIGEgY3J1Y2lhbCBuZXcgZmllbGQ6IGBldGhlcl90eXBlYC4gVGhhdCdzIHRoZSBrZXkuIFRoaXMgYWxsb3dzIHRoZSBgaXBpcF9maWxsX2ZvcndhcmRfcGF0aGAgYW5kIGBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoYCBmdW5jdGlvbnMgdG8gcHJvcGVybHkgY2hlY2sgYW5kIGFjY291bnQgZm9yIHRoZSBFdGhlcm5ldCB0eXBlIGluIHRoZWlyIHByb2Nlc3NpbmcuXG5cbkltcG9ydGFudGx5LCBpdCBsb29rcyBsaWtlIGBuZl9mbG93X3RhYmxlX2lwLmNgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGFjdHVhbGx5IHV0aWxpemUgdGhpcyBuZXcgYGV0aGVyX3R5cGVgIGZpZWxkLCBhbG9uZyB3aXRoIGBpbm5lcl9wcm90b2AsIGluc3RlYWQgb2Ygc29sZWx5IHJlbHlpbmcgb24gdGhlIGV4aXN0aW5nIGBsM19wcm90b2AuIFRoaXMgaXMgY3JpdGljYWwgZm9yIG9mZmxvYWQgZnVuY3Rpb25hbGl0eS5cblxuTGV0IG1lIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gdmVyaWZ5IHRoaXM6IEknbSBzZWVpbmcgY2hhbmdlcyBpbiBhIGJ1bmNoIG9mIHBsYWNlcywgaW5jbHVkaW5nIGEgY291cGxlIG9mIFBQRSBvZmZsb2FkIGRyaXZlcnMgKGBhaXJvaGFfcHBlLmNgLCBgbXRrX3BwZV9vZmZsb2FkLmNgKSwgc29tZSBoZWFkZXIgZmlsZXMgKGBuZXRkZXZpY2UuaGAsIGBuZl9mbG93X3RhYmxlLmhgKSwgYW5kIGNvcmUgbmV0d29ya2luZyBjb2RlIChgZGV2LmNgLCBgaXBpcC5jYCwgYGlwNl90dW5uZWwuY2AsIGFuZCBhIGNvdXBsZSBvZiBrZXkgbmV0ZmlsdGVyIGZpbGVzKS5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCdzIHRvdWNoaW5nIHNvbWUgcHJldHR5IGxvdy1sZXZlbCBzdHVmZjogYGRldl9maWxsX2ZvcndhcmRfcGF0aGAsIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AsIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYCwgYW5kIGBuZnRfZGV2X2ZvcndhcmRfcGF0aGAuIFRoZXNlIGFyZSBhbGwgcmVhY2hhYmxlLCB0ZXN0YWJsZSBmdW5jdGlvbnMgaW4gYW55IHZpcnR1YWwgZW52aXJvbm1lbnQuXG5cbkknbSBzdGFydGluZyB0byB0aGluayBhYm91dCBob3cgdG8gdmFsaWRhdGUgdGhpcy4gV2UnbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGBDT05GSUdgIG9wdGlvbnMgYXJlIGVuYWJsZWQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgYENPTkZJR19ORVRGSUxURVJgLCBgQ09ORklHX05GX0ZMT1dfVEFCTEVgLCBgQ09ORklHX05GX0ZMT1dfVEFCTEVfSVBWNGAsIGBDT05GSUdfTkZfRkxPV19UQUJMRV9JUFY2YCwgYW5kIHRoZSB0dW5uZWwgb3B0aW9ucywgc3BlY2lmaWNhbGx5IGBDT05GSUdfTkVUX0lQR1JFYCwgYENPTkZJR19JUElQYCwgb3IgYENPTkZJR19JUFY2X1RVTk5FTGAuIEknbGwgbmVlZCB0byBsb29rIHVwIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aG9zZS4gSSBuZWVkIHRvIHNlYXJjaCBgTkZfRkxPV19UQUJMRWAgaW4gS2NvbmZpZyB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBjb3JyZWN0LiBMZXQncyBzZWUgaG93IHRoZXkgcmVsYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODU0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjg6MTYuMTU1MDYwNzQyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTExMjQzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0ZMT1dfVEFCTEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMzpjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTItXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcyMTpjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIyLVxcdGJvb2wgXFxcIlN1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyODoxOC4wMDYxOTA4NzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzAyMTQzOTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBUdW5uZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuQWxyaWdodCwgc28gd2UncmUgdGFsa2luZyB0dW5uZWxzLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8ganVtcCBpbnRvIHRoZSBrZXJuZWwgY29uZmlnIGZpbGVzIHRvIHNlZSB3aGF0J3MgYXZhaWxhYmxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBgbmV0L2lwdjQvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgYXZhaWxhYmlsaXR5IGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBJUElQYC4gVGhlbiwgdG8gY292ZXIgYWxsIGJhc2VzLCBhbmQgY29uc2lkZXJpbmcgd2UncmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIG1vZGVybiBzZXR1cCwgSSdsbCBuZWVkIHRvIGhpdCBgbmV0L2lwdjYvS2NvbmZpZ2AgdG8gdmVyaWZ5IHRoZSBzdGF0dXMgb2YgYElQVjZfVFVOTkVMYC4gVGhhdCdzIHdoZXJlIHRoZSBjb250cm9sIGZvciBJUHY2IHR1bm5lbGluZyB3b3VsZCBiZS4gS25vd2luZyB0aGVzZSB0d28gb3B0aW9ucyB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUgb2Ygd2hhdCB0dW5uZWxpbmcgY2FwYWJpbGl0aWVzIGFyZSBlbmFibGVkLCBhbmQgaG93IHRoZXkgYXJlIGhhbmRsZWQsIHdpdGhpbiB0aGUgY3VycmVudCBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhpcyB3aWxsIHRlbGwgbWUgaWYgdGhlIGtlcm5lbCBoYXMgdGhlIG5lY2Vzc2FyeSBjb21wb25lbnRzIGJ1aWx0LWluIHRvIHN1cHBvcnQgb3VyIG5lZWRzLCBvciB3aGV0aGVyIHdlIG5lZWQgdG8gdHdlYWsgdGhlIGJ1aWxkIHRvIHN1cHBvcnQgYSBwYXJ0aWN1bGFyIHR1bm5lbGluZyBzY2VuYXJpby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNzMsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyODoyMS4zMDgzMzY1NzdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyNzgzNjE5MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQSVBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjIzLjQzNjE4MTA4OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2OTA5ODM4MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOZXR3b3JrIFByb3RvY29sIENvbmZ1c2lvbiBDbGVhcmVkKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMganVzdCByZXZpZXdpbmcgdGhlc2UgY29uZmlndXJhdGlvbnMsIGFuZCBhIGNvbm5lY3Rpb24ganVzdCBjbGlja2VkIGluIG15IGhlYWQuIEkgd2FzIHRoaW5raW5nIGFib3V0IHRoZSBgSVBJUGAgcHJvdG9jb2wsIGFuZCB0aGVuIGl0IGhpdCBtZTogYElQSVBgIGlzICphY3R1YWxseSogdGhlIHNhbWUgdGhpbmcgYXMgYE5FVF9JUElQYC4gSXQncyBqdXN0IGEgZGlmZmVyZW50IHdheSBvZiByZXByZXNlbnRpbmcgdGhlIHNhbWUgdW5kZXJseWluZyBmdW5jdGlvbmFsaXR5LiBBbGwgdGhlIHBpZWNlcyBhcmUgZmFsbGluZyBpbnRvIHBsYWNlIG5vdywgYW5kIEkgY2FuIG1vdmUgb24gdG8gdGhlIG5leHQgc2V0IG9mIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ0MywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjI2LjEyNzE2NzI5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjMyOTU1NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9JUElQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MTQ5PWNvbmZpZyBJUF9QTlBfUkFSUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0xNjEtXFxubmV0L2lwdjQvS2NvbmZpZzoxNjI6Y29uZmlnIE5FVF9JUElQXFxubmV0L2lwdjQvS2NvbmZpZy0xNjMtXFx0dHJpc3RhdGUgXFxcIklQOiB0dW5uZWxpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjI3Ljc5MDQ2NzExN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTY2ODIxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBhcyBpZiBJLCBhbiBleHBlcnQsIGFtIHByb2Nlc3NpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQ29uc2lkZXJpbmcgdGhlIE5ldHdvcmsgSW50ZXJmYWNlIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQgbWUgc2VlLi4uIEknbSB0aGlua2luZyBhYm91dCB0aGUgbmV0d29yayBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiwgYW5kIHNwZWNpZmljYWxseSwgdGhlIHVzZSBvZiBgSVBWNl9UVU5ORUxgLiBJdCBpbW1lZGlhdGVseSBicmluZ3MgdG8gbWluZCBzZXZlcmFsIGNvbnNpZGVyYXRpb25zLiBJJ20gbGlrZWx5IGRlYWxpbmcgd2l0aCBhbiBJUHY2IHRyYW5zaXRpb24gbWVjaGFuaXNtLCBtb3N0IGxpa2VseSBhIHR1bm5lbCBvZiBzb21lIGtpbmQuIE5vdyBJIG5lZWQgdG8gY29uc2lkZXIgZXhhY3RseSB3aGF0IGtpbmQgb2YgdHVubmVsLiBJcyBpdCBhIDZpbjQgdHVubmVsLCBhIDZ0bzQgcmVsYXksIGEgVGVyZWRvIHR1bm5lbCwgb3IgcG90ZW50aWFsbHkgZXZlbiBhIG1vcmUgY29tcGxleCwgY29uZmlndXJlZCB0dW5uZWwgc3VjaCBhcyBhIEdSRSB0dW5uZWwgb3IgYW4gSVBJUCB0dW5uZWw/IEknZCBoYXZlIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgdHVubmVsIGlzIGJlaW5nIGltcGxlbWVudGVkLiBUaGUgY29tbWFuZCBpdHNlbGYgc3VnZ2VzdHMgdGhlIGV4aXN0ZW5jZSBvZiBhIHR1bm5lbCwgYnV0IHByb3ZpZGVzIG5vIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIHVuZGVybHlpbmcgSVB2NCBuZXR3b3JrIGxvb2tzIGxpa2UsIGFzIHRoYXQncyBnZW5lcmFsbHkgd2hlcmUgdGhlIG90aGVyIHNpZGUgb2YgdGhlIHR1bm5lbCByZXNpZGVzLiBBbmQgSSBoYXZlIHRvIGtlZXAgaW4gbWluZCwgb2YgY291cnNlLCB0aGUgaW1wbGljYXRpb25zIGZvciByb3V0aW5nLCBNVFUgc2l6ZSwgYW5kIHBvdGVudGlhbCBmaXJld2FsbCBydWxlcyBhdCBib3RoIHRoZSBsb2NhbCBhbmQgcmVtb3RlIGVuZHMgb2YgdGhpcyBjb25uZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY3OCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjg6MzEuNjQ3MTUxNTA4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc2NjE1NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUFY2X1RVTk5FTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnPTE5Nj1jb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xOTgtXFxubmV0L2lwdjYvS2NvbmZpZzoxOTk6Y29uZmlnIElQVjZfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjg6MzMuMzIzNzc1NzY0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTM5MjIxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2suXG5cbioqSW52ZXN0aWdhdGluZyBOZXRmaWx0ZXIgRmxvdyBPZmZsb2FkIEhvb2tzKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNgLiBNeSBwcmltYXJ5IGludGVyZXN0IGF0IHRoZSBtb21lbnQgbGllcyB3aXRoIHVuZGVyc3RhbmRpbmcgdGhlIGludHJpY2FjaWVzIG9mIHRoZSBmbG93IG9mZmxvYWQgbWVjaGFuaXNtcyB3aXRoaW4gTmV0ZmlsdGVyLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBJUCBwcm90b2NvbCBmYW1pbHkuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgc2NydXRpbml6ZSB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AgYW5kIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYC4gSXQncyBjcnVjaWFsIHRvIGdyYXNwIGhvdyB0aGVzZSBob29rcyBmdW5jdGlvbiwgdGhlIGRhdGEgc3RydWN0dXJlcyB0aGV5IGVtcGxveSwgYW5kIHRoZWlyIGludGVycGxheSB3aXRoIHRoZSBvdmVyYWxsIGZsb3cgdGFibGUgYXJjaGl0ZWN0dXJlLiBNeSBhaW0gaXMgdG8gZ2FpbiBhIHNvbGlkIGNvbXByZWhlbnNpb24gb2YgaG93IElQdjQgYW5kIElQdjYgdHJhZmZpYyBpcyBoYW5kbGVkIHdpdGhpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQsIHBhcnRpY3VsYXJseSB0aGUgbG9naWMgYmVoaW5kIHRoZSBvZmZsb2FkIGRlY2lzaW9uIGFuZCB0aGUgc3Vic2VxdWVudCBleGVjdXRpb24gb2Ygb2ZmbG9hZCBvcGVyYXRpb25zLiBJIGFudGljaXBhdGUgZmluZGluZyBrZXkgaW5zaWdodHMgaW50byBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MgYnkgdGhvcm91Z2hseSBhbmFseXppbmcgdGhlc2UgZnVuY3Rpb25zLiBJJ20gcmVhZHkgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHN0YXJ0IGZpZ3VyaW5nIG91dCB3aGF0J3MgcmVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA0NSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjM2LjczNzcwMDQwMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MTU5MzIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X29mZmxvYWRfaXBfaG9va1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTM0NT1pbnQgbmZfZmxvd19vZmZsb2FkX3hkcF9zZXR1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTM0OC1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjM0OTp1bnNpZ25lZCBpbnQgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTM1MC1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTEyPW5mX2Zsb3dfb2ZmbG9hZF9pbmV0X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtMzYtXFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzozNzpcXHRcXHRyZXR1cm4gbmZfZmxvd19vZmZsb2FkX2lwX2hvb2socHJpdiwgc2tiLCBzdGF0ZSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy0zOC1cXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz03OD1zdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pcHY0ID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy04My1cXHQuZnJlZVxcdFxcdD0gbmZfZmxvd190YWJsZV9mcmVlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6ODQ6XFx0Lmhvb2tcXHRcXHQ9IG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODUtXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTg2MT11bnNpZ25lZCBpbnRcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4NjI6bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04NjMtXFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODg5LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4OTA6RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd19vZmZsb2FkX2lwX2hvb2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg5MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjg6MzguMzg5Mjk3OTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0MTc1NzE1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIElQIGFuZCBJUHY2IG9mZmxvYWRpbmcsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipNeSBNZW50YWwgTW9kZWwgb2YgSVAgRmxvdyBPZmZsb2FkIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSBhIGtlcm5lbCBuZXR3b3JraW5nIHBlcnNwZWN0aXZlLCBJJ20ga2V5aW5nIGluIG9uIHRoZSBmbG93IG9mZmxvYWQgaG9va3MuIEkgc2VlIHRoYXQgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgIGFyZSB0aGUgY3J1Y2lhbCBlbnRyeSBwb2ludHMgZm9yIHRoaXMgd2hvbGUgSVAgYW5kIElQdjYgb2ZmbG9hZCBwcm9jZXNzLiBUaGF0J3Mgd2hlcmUgdGhlIGluaXRpYWwgZGVjaXNpb25zIGdldCBtYWRlLCB0aGUgaW5zcGVjdGlvbiBzdGFydHMsIHRoZSBjbGFzc2lmaWNhdGlvbiBoYXBwZW5zIOKAkyB0aGlzIGlzIHRoZSBjb3JlIG9mIGdldHRpbmcgdGhlIHRyYWZmaWMgb2ZmbG9hZGVkLiBcblxuSSdtIGFsc28gbm90aW5nIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgLiBUaGlzIHNvdW5kcyBjcml0aWNhbC4gV2hpbGUgdGhlIGhvb2tzIG1pZ2h0IGluaXRpYXRlIHRoZSBwcm9jZXNzLCBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBpcyBsaWtlbHkgd2hlcmUgdGhlIGFjdHVhbCBmb3J3YXJkaW5nIGluZm9ybWF0aW9uIGdldHMgcG9wdWxhdGVkLiBJIGJldCBpdCdzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgZGF0YSBzdHJ1Y3R1cmVzLCBsaWtlIHRoZSBmbG93IGNhY2hlIGVudHJpZXMsIGFuZCBwb3B1bGF0aW5nIHRoZW0gd2l0aCB0aGUgZGV0YWlscyB0aGUgaGFyZHdhcmUgbmVlZHMgdG8gYWNjZWxlcmF0ZSB0aGUgdHJhZmZpYy4gVGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJseSB0aWdodGx5IGNvdXBsZWQgd2l0aCB0aGUgZGV2aWNlIGRyaXZlciwgYW5kIGtub3dzIGV4YWN0bHkgaG93IHRvIHRlbGwgdGhlIE5JQyB3aGljaCBwYWNrZXRzIHRvIGhhbmRsZSBpbiBoYXJkd2FyZS4gVGhpcyBtZWFucyB0aGlzIGlzIHRoZSBwb2ludCB3aGVyZSB0aGUgZGVjaXNpb25zIG1hZGUgYXQgdGhlIGhvb2sgYXJlIG1hdGVyaWFsaXplZCwgYW5kIHR1cm5lZCBpbnRvIGFjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NTgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyODo0MS45MzEwNTc1MDNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODQ0NTE4OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2X2ZpbGxfZm9yd2FyZF9wYXRoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9MjgyPXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0yOTctXFx0cmN1X3JlYWRfbG9jaygpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6Mjk4OlxcdGVyciA9IGRldl9maWxsX2ZvcndhcmRfcGF0aChcXHUwMDI2Y3R4LCBcXHUwMDI2c3RhY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMjk5LVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zMTItZXJyX291dDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjMxMzpcXHRkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShcXHUwMDI2c3RhY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzE0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmM9OTI9bXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwgc3RydWN0IG10a193ZG1hX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYy0xMDktXFx0cmN1X3JlYWRfbG9jaygpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jOjExMDpcXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoXFx1MDAyNmN0eCwgXFx1MDAyNnN0YWNrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYy0xMTEtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYy0xMjYtZXJyX291dDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYzoxMjc6XFx0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UoXFx1MDAyNnN0YWNrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYy0xMjgtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTM0Mjk9aW50IGRldl9maWxsX21ldGFkYXRhX2RzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjM0MzA6aW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzQzMS1cXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjM0MzI6dm9pZCBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayk7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zNDMzLXN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0X2J5X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jPTc1Nj1zdGF0aWMgaW50IHZsYW5fZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTc2Mi1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYzo3NjM6c3RhdGljIGludCB2bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTc2NC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoKVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM9MTA3OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZsYW5fbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTExMDktXFx0Lm5kb19nZXRfaWZsaW5rXFx0XFx0PSB2bGFuX2Rldl9nZXRfaWZsaW5rLFxcbm5ldC84MDIxcS92bGFuX2Rldi5jOjExMTA6XFx0Lm5kb19maWxsX2ZvcndhcmRfcGF0aFxcdD0gdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGgsXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTExMS1cXHQubmRvX2h3dHN0YW1wX2dldFxcdD0gdmxhbl9od3RzdGFtcF9nZXQsXFxuLS1cXG5uZXQvY29yZS9kZXYuYz03NDM9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKmRldl9md2RfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc1MC1cXG5uZXQvY29yZS9kZXYuYzo3NTE6dm9pZCBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcXG5uZXQvY29yZS9kZXYuYy03NTIte1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzY5LX1cXG5uZXQvY29yZS9kZXYuYzo3NzA6RVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UpO1xcbm5ldC9jb3JlL2Rldi5jLTc3MS1cXG5uZXQvY29yZS9kZXYuYzo3NzI6aW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbm5ldC9jb3JlL2Rldi5jLTc3My1cXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtODA4LWVycl9vdXQ6XFxubmV0L2NvcmUvZGV2LmM6ODA5OlxcdGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0YWNrKTtcXG5uZXQvY29yZS9kZXYuYy04MTAtXFxuLS1cXG5uZXQvY29yZS9kZXYuYy04MTItfVxcbm5ldC9jb3JlL2Rldi5jOjgxMzpFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGgpO1xcbm5ldC9jb3JlL2Rldi5jLTgxNC1cXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTk3OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9tb25pdG9yaWZfb3BzID0ge1xcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtOTg4LVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjk4OTpzdGF0aWMgaW50IGllZWU4MDIxMV9uZXRkZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy05OTAtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTEwNDc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfZGF0YWlmXzgwMjNfb3BzID0ge1xcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtMTA1My1cXHQubmRvX3NldF9tYWNfYWRkcmVzc1xcdD0gaWVlZTgwMjExX2NoYW5nZV9tYWMsXFxubmV0L21hYzgwMjExL2lmYWNlLmM6MTA1NDpcXHQubmRvX2ZpbGxfZm9yd2FyZF9wYXRoXFx0PSBpZWVlODAyMTFfbmV0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoLFxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTEwNTUtXFx0Lm5kb19zZXR1cF90Y1xcdFxcdD0gaWVlZTgwMjExX25ldGRldl9zZXR1cF90YyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MzY9c3RhdGljIGJvb2wgbmZ0X2lzX3ZhbGlkX2V0aGVyX2RldmljZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy00NC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjQ1OnN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfY2FjaGUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy00Ni1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtODAtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzo4MTpcXHRyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKFxcdTAwMjZjdHgsIHN0YWNrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTgyLX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MTA0PXN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTE5OC1lcnJfb3V0Olxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MTk5OlxcdGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0YWNrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTIwMC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MjIxPXN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTIzMi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjIzMzpcXHRpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChkc3QsIGN0LCBkaXIsIGhhLCBwa3QtXFx1MDAzZWV0aGVydHlwZSwgXFx1MDAyNnN0YWNrKSBcXHUwMDNjIDAgfHxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTIzNC1cXHQgICAgbmZ0X2Rldl9wYXRoX2luZm8oXFx1MDAyNnN0YWNrLCBcXHUwMDI2aW5mbywgaGEsIGZ0KSBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjQzLjYxNTUxNDc1OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDEzNDgwMDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlByaW9yaXRpemluZyBGdXp6aW5nIFRhcmdldHMgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgd2hlcmUgdG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cy4gTG9va2luZyBhdCB0aGlzIGxpc3QsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZXNlIGZ1bmN0aW9uczogYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgLCBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCwgYG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGhgLCBgaXBpcF9maWxsX2ZvcndhcmRfcGF0aGAsIGFuZCBgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aGAuXG5cbkhvd2V2ZXIsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBsZXQncyBqdXN0IGNvbmZpcm0gaWYgYGlwaXBfZmlsbF9mb3J3YXJkX3BhdGhgIGFuZCBgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aGAgYXJlIHN0YXRpY2FsbHkgZGVmaW5lZC4gWWVwLCB0aGV5IGFyZS4gVGhhdCByZWR1Y2VzIHRoZSBpbml0aWFsIGZvY3VzIGEgYml0LiBTbywgZm9yIGZ1enppbmcsIEknbSBnb2luZyB0byBwdXQgdGhlc2UgYXQgdGhlIHRvcCBvZiBteSBsaXN0OiBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCwgYW5kIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYC4gSG9sZCBvbiwgYG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGlzIGFsc28gc3RhdGljLCBzbyBJIGNhbiBpZ25vcmUgdGhhdCBhcyB3ZWxsLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gaWYgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgIGFyZSBleHBvcnRlZC4gWWVzLCB0aGV5IGFyZSEgQW5kIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGlzIGV4cG9ydGVkIGFzIHdlbGwuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBrZXkuIFNpbmNlIHRoZXkncmUgZXhwb3J0ZWQsIHRoZXkncmUgbGlrZWx5IGdvaW5nIHRvIHByb3ZpZGUgbW9yZSB0ZXN0IGNvdmVyYWdlLlxuXG5OZXh0IHN0ZXA6IEknbGwgc3RhcnQgYnkgdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCBpbiB0aGUgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jYCBmaWxlLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQzNywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyODo0OC42Mjg5OTczNDlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDkzNTUzOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd19vZmZsb2FkX2lwX2hvb2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD0zNDU9aW50IG5mX2Zsb3dfb2ZmbG9hZF94ZHBfc2V0dXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zNDgtXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDozNDk6dW5zaWduZWQgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zNTAtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz0xMj1uZl9mbG93X29mZmxvYWRfaW5ldF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTM2LVxcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6Mzc6XFx0XFx0cmV0dXJuIG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKHByaXYsIHNrYiwgc3RhdGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtMzgtXFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9Nzg9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaXB2NCA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODMtXFx0LmZyZWVcXHRcXHQ9IG5mX2Zsb3dfdGFibGVfZnJlZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjg0OlxcdC5ob29rXFx0XFx0PSBuZl9mbG93X29mZmxvYWRfaXBfaG9vayxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTg1LVxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04NjE9dW5zaWduZWQgaW50XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6ODYyOm5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODYzLVxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg4OS19XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6ODkwOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04OTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjUwLjIzODM1OTM3M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTc3Njg0NzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBJUHY2IEZsb3cgT2ZmbG9hZCBIb29rKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYC4gSSdtIGltbWVkaWF0ZWx5IGZvY3VzaW5nIG9uIHRoaXMgc3BlY2lmaWMgaG9vayBwb2ludCwgbGlrZWx5IHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgYmVjYXVzZSBpdCdzIHRoZSBnYXRld2F5IGZvciBJUHY2IGZsb3cgb2ZmbG9hZC4gS25vd2luZyB0aGlzIGhvb2sgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgSVB2NiB0cmFmZmljIGlzIGludGVyY2VwdGVkLCBpbnNwZWN0ZWQsIGFuZCB0aGVuIHBvdGVudGlhbGx5IGhhbmRlZCBvZmYgdG8gaGFyZHdhcmUgZm9yIGFjY2VsZXJhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSB0aGlzIGhvb2sgc2l0cyBpbiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGlwZWxpbmUuIElzIGl0IGJlZm9yZSBvciBhZnRlciBjb25uZWN0aW9uIHRyYWNraW5nPyBIb3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIG90aGVyIE5ldGZpbHRlciBtb2R1bGVzIGxpa2UgY29ubnRyYWNrIGFuZCBOQVQ/IFRoZSBzcGVjaWZpY3Mgb2YgaXRzIHBsYWNlbWVudCB3aWxsIGRpY3RhdGUgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgYW5kIHRoZSB0eXBlcyBvZiBvZmZsb2FkIG9wcG9ydHVuaXRpZXMgaXQgcHJlc2VudHMuIEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgbG9naWMgd2l0aGluIHRoZSBob29rIHRvIHByb3Blcmx5IGV2YWx1YXRlIGl0cyBiZWhhdmlvciBhbmQgYW55IHBvdGVudGlhbCBmb3Igb3B0aW1pemF0aW9uIG9yIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3MDcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyODo1My4yMTYwNDY2NDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjEyMjg4NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTM0OT11bnNpZ25lZCBpbnQgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTM1MC1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDozNTE6dW5zaWduZWQgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTM1Mi1cXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9MTI9bmZfZmxvd19vZmZsb2FkX2luZXRfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy0zOC1cXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6Mzk6XFx0XFx0cmV0dXJuIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2socHJpdiwgc2tiLCBzdGF0ZSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy00MC1cXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTg4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2lwdjYgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTkzLVxcdC5mcmVlXFx0XFx0PSBuZl9mbG93X3RhYmxlX2ZyZWUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo5NDpcXHQuaG9va1xcdFxcdD0gbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTk1LVxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMTg5PXVuc2lnbmVkIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjExOTA6bmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExOTEtXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMjE3LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMjE4OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyODo1NC44MzcyODQwMjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0OTk4NDYxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBGbG93IE9mZmxvYWQgUGF0Y2hlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgaGl0dGluZyB0aGUgY29yZSBvZiB0aGUgTmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5LiBTcGVjaWZpY2FsbHksIGl0J3MgbW9kaWZ5aW5nIHRoZSBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AgZnVuY3Rpb25zLiBUaGUga2V5IGNoYW5nZSBoZXJlIHNlZW1zIHRvIGJlIHRoZSBhZGRlZCBjaGVja3MgZm9yIGBuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbGAgYW5kIGBjdHguZXRoZXJfdHlwZWAuIFJpZ2h0IGF3YXksIHRoaXMgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIGVuY2Fwc3VsYXRlZCB0cmFmZmljIG9mIHNvbWUga2luZCDigJMgcG90ZW50aWFsbHkgR1JFLCBWWExBTiwgb3Igc29tZXRoaW5nIHNpbWlsYXIuIFRoZXnigJlyZSBsaWtlbHkgdHJ5aW5nIHRvIGNvcnJlY3RseSBpZGVudGlmeSBvciBoYW5kbGUgcGFja2V0cyB0aGF0IGFyZSBuZXN0ZWQgb3IgdHVubmVsZWQuXG5cbkJleW9uZCB0aGUgaG9vayBtb2RpZmljYXRpb25zLCBJIHNlZSB0aGF0IGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGlzIGFsc28gYmVpbmcgdG91Y2hlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBmb3J3YXJkaW5nIHBhdGggZm9yIHRoZSBlbmNhcHN1bGF0ZWQgb3IgbmVzdGVkIHBhY2tldHMgaXMgYmVpbmcgY29uc3RydWN0ZWQgYW5kIHByb3BhZ2F0ZWQuXG5cblRvIGdldCBhIGJldHRlciBncmlwIG9uIGhvdyBhbGwgdGhpcyBmaXRzIHRvZ2V0aGVyLCBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBuZnRfZGV2X2ZvcndhcmRfcGF0aGAgd2hpY2gsIGJhc2VkIG9uIHRoZSBjb250ZXh0LCBJJ20gcHJldHR5IHN1cmUgaXMgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNgLiBUaGF0IHNob3VsZCBwcm92aWRlIHRoZSBjb250ZXh0IG5lZWRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHVwZGF0ZXMgYXJlIGZpdHRpbmcgaW50byB0aGUgZmxvdyB0YWJsZSBwYXRoaW5nIG9mIHRoZSBlbmNhcHN1bGF0ZWQgdHJhZmZpYy4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGNoYW5nZSBhZmZlY3RzIHRoZSBwcm9jZXNzaW5nIHRoYXQgZGVjaWRlcyB3aGVyZSB0byBmb3J3YXJkIHRoZSBlbmNhcHN1bGF0ZWQgdHJhZmZpYywgb3IgdG8gYWx0ZXIgaXQgaW4gYW55IHdheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1NjksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyODo1OC44ODcyNzIwMjdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mzg4NzE5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2Rldl9mb3J3YXJkX3BhdGhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0yMDQ9c3RhdGljIGJvb2wgbmZ0X2Zsb3d0YWJsZV9maW5kX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yMjAtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzoyMjE6c3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTIyMi1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTI2Nz1pbnQgbmZ0X2Zsb3dfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMzA5LVxcdGlmIChyb3V0ZS1cXHUwMDNldHVwbGVbZGlyXS54bWl0X3R5cGVcXHQ9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MzEwOlxcdCAgICBuZnRfZGV2X2ZvcndhcmRfcGF0aChwa3QsIHJvdXRlLCBjdCwgZGlyLCBmdCkgXFx1MDAzYyAwKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMzExLVxcdFxcdGdvdG8gZXJyX2RzdF9yZWxlYXNlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0zMTMtXFx0aWYgKHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS54bWl0X3R5cGUgPT0gRkxPV19PRkZMT0FEX1hNSVRfTkVJR0ggXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjMxNDpcXHQgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCByb3V0ZSwgY3QsICFkaXIsIGZ0KSBcXHUwMDNjIDApXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0zMTUtXFx0XFx0Z290byBlcnJfZHN0X3JlbGVhc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI5OjAwLjUyNjE0ODg0N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDYxODAyMDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIHRoZSBFeHBvcnQgU3RhdHVzIG9mIGBuZnRfZmxvd19yb3V0ZWAqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIGBuZnRfZmxvd19yb3V0ZWAgY29tcG9uZW50IG1lbnRpb25lZC4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGlzIGFyY2hpdGVjdHVyZSwgaXMgdG8gZGV0ZXJtaW5lIGl0cyBhY2Nlc3NpYmlsaXR5LiBJcyBpdCBhY3R1YWxseSBleHBvcnRlZD8gSXMgaXQgYXZhaWxhYmxlIGZvciB1c2UgYnkgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBvciBhIG1vZHVsZSwgb3IgaXMgaXQgaW50ZW5kZWQgdG8gYmUgaW50ZXJuYWwgdG8gYSBwYXJ0aWN1bGFyIGNvbnRleHQ/IFRoYXQncyB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZS4gVGhlIHdheSB0aGlzIGlzIGFyY2hpdGVjdGVkIHNpZ25pZmljYW50bHkgaW1wYWN0cyB0aGUgb3ZlcmFsbCBmbG93IGRlc2lnbiBhbmQgdGhlIGxldmVsIG9mIG1vZHVsYXJpdHkuIElmIGl0J3MgZXhwb3J0ZWQsIHRoZW4gaXRzIGZ1bmN0aW9uYWxpdHkgaXMgYSBrZXkgcGllY2UuIElmIGl0J3Mgbm90LCBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCBfaXNfIHZpc2libGUgZnJvbS4gTm93IGxldCdzIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCB2ZXJpZnkgaXRzIGV4cG9ydCBzdGF0dXM7IGEgcXVpY2sgZ2xhbmNlIGF0IHRoZSByZWxldmFudCBmaWxlcyBzaG91bGQgYW5zd2VyIHRoYXQgcXVlc3Rpb24uIFRpbWUgdG8gY29uZmlybSBpZiB0aGlzIGNvbXBvbmVudCBjYW4gYmUgcmVhZGlseSBsZXZlcmFnZWQgb3IgaWYgSSdtIGxvb2tpbmcgYXQgc29tZXRoaW5nIG1vcmUgbGltaXRlZCBpbiBzY29wZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg0MjYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyOTowMy45ODc5NTUwMDhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODgzNjc3NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2Zsb3dfcm91dGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD0yNDc9c3RydWN0IG5mdF9wa3RpbmZvO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MjQ4OmludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMjQ5LVxcdFxcdCAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MjIxPXN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTI2Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjI2NzppbnQgbmZ0X2Zsb3dfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTI2OC1cXHRcXHQgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTMyMy19XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzozMjQ6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X2Zsb3dfcm91dGUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9NTA9c3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTEwOC1cXHRkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MTA5OlxcdGlmIChuZnRfZmxvd19yb3V0ZShwa3QsIGN0LCBcXHUwMDI2cm91dGUsIGRpciwgcHJpdi1cXHUwMDNlZmxvd3RhYmxlKSBcXHUwMDNjIDApXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTEwLVxcdFxcdGdvdG8gZXJyX2Zsb3dfcm91dGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI5OjA1LjY3NjMyODY5M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjk3NzQ5Njc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IE5ldGZpbHRlciBGbG93IE9mZmxvYWQgQnJlYWtkb3duKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGBuZnRfZmxvd19yb3V0ZWAgZnVuY3Rpb24sIGNydWNpYWwgZm9yIG91ciBuZXRmaWx0ZXIgZmxvdyBvZmZsb2FkIHRhcmdldCwgaXMgaW52b2tlZCBmcm9tIHdpdGhpbiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCwgd2hpY2ggcmVzaWRlcyBpbiB0aGUgYG5mdF9mbG93X29mZmxvYWQuY2AgZmlsZS4gVGhpcyBpcyBvdXIgdGFyZ2V0IGZ1bmN0aW9uLCB0aGUgY29yZSBvZiB0aGUgZmxvdyBvZmZsb2FkaW5nIG1lY2hhbmlzbS5cblxuVGhlcmVmb3JlLCB0byB0aG9yb3VnaGx5IHVuZGVyc3RhbmQgdGhlIGZsb3csIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBrZXkgc3ltYm9sczogYGRldl9maWxsX2ZvcndhcmRfcGF0aGAsIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AsIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYCwgYW5kIG9mIGNvdXJzZSwgYG5mdF9mbG93X3JvdXRlYCBpdHNlbGYuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgd2lsbCBnaXZlIG1lIGEgZ3Jhc3Agb24gdGhlIGlubmVyIHdvcmtpbmdzIG9mIHRoaXMgc3lzdGVtLlxuXG5GdXJ0aGVybW9yZSwgSSBzaG91bGQgaW52ZXN0aWdhdGUgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIHByZXNlbmNlIGFuZCBzZXR1cCBvZiBgTkZfRkxPV19UQUJMRWAgYW5kIGBORl9GTE9XX1RBQkxFX0lORVRgLCB3aGljaCB3b3VsZCBlc3RhYmxpc2ggdGhlIGZsb3cgdGFibGUgaW5mcmFzdHJ1Y3R1cmUuIEknbGwgbmVlZCB0byB2ZXJpZnkgYE5GVF9GTE9XX09GRkxPQURgIGV4aXN0cywgYXMgaXQncyBmb3VuZGF0aW9uYWwgdG8gdGhlIG9mZmxvYWQgZmVhdHVyZS4gQW5kIGZpbmFsbHksIEkgbXVzdCBjb25maXJtIGBORVRfSVBJUGAgYW5kIGBJUFY2X1RVTk5FTGAgYXJlIGFwcHJvcHJpYXRlbHkgY29uZmlndXJlZCwgc2luY2UgdHVubmVsaW5nIHdpbGwgcGxheSBhIHJvbGUgaW4gdGhpcyBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTEzNywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyOTowOS45NzQwODEzMjlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTE5MzA0NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GVF9GTE9XX09GRkxPQURcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ5OD1jb25maWcgTkZUX0VYVEhEUl9EQ0NQXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTAzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1MDQ6Y29uZmlnIE5GVF9GTE9XX09GRkxPQURcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTA1LVxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2IE5GX0ZMT1dfVEFCTEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjk6MTEuODI2MDE3Nzc3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjI1NzYzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipFeGFtaW5pbmcgRmxvdyBUYWJsZSBJbXBsZW1lbnRhdGlvbnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGFydCBpbiBmbG93IHRhYmxlIGltcGxlbWVudGF0aW9ucy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBzcGVjaWZpY2FsbHkgYXQgdGhlIElQdjQgYW5kIElQdjYgdmVyc2lvbnMuIEkgbmVlZCB0byBjaGVjayBgTkZfRkxPV19UQUJMRV9JUFY0YCBhbmQgYE5GX0ZMT1dfVEFCTEVfSVBWNmAuIEkgbmVlZCB0byBjb21wYXJlIHRoZWlyIHN0cnVjdHVyZSBhbmQgZnVuY3Rpb25hbGl0eS4gQXJlIHRoZXkgc2ltaWxhcj8gQXJlIHRoZXJlIHNpZ25pZmljYW50IGRpZmZlcmVuY2VzIGluIGhvdyB0aGV5IGhhbmRsZSBhZGRyZXNzIGZhbWlsaWVzPyBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGluaGVyZW50IGluIG9uZSB2ZXJzdXMgdGhlIG90aGVyPyBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBmbG93IHRhYmxlcyBhcmUgaW50ZWdyYXRlZCB3aXRoIHRoZSBicm9hZGVyIG5ldGZpbHRlciBmcmFtZXdvcmsgYXMgd2VsbC4gVGhpcyB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uIGZvciBmaWd1cmluZyBvdXQgd2hhdCB0aGV5IGRvIGFuZCBob3cgdGhleSBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2OTcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyOToxNC45ODg1OTcxMTlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDM5ODkwNTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9GTE9XX1RBQkxFX0lQVlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjk6MTYuNzkyNTk4ODUyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NDU3MTUwODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byBOZXR3b3JrIEZsb3cgVGFibGUgSW1wbGVtZW50YXRpb24qKlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIEkgZGlzdGluY3RseSByZW1lbWJlciBzZWVpbmcgc29tZXRoaW5nIGFib3V0IGBORl9GTE9XX1RBQkxFX0lORVRgIGluIHRoZSBjb2RlIGEgYml0IGFnby4gVGhhdCBuYW1lIGlzIHJpbmdpbmcgYSBiZWxsLiBHaXZlbiB0aGF0IGNvbnRleHQsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbi4gTGV0J3Mgc2VlIGlmIHRoZXJlJ3MgYSBtb3JlIHNwZWNpZmljIHZlcnNpb24gZGVmaW5lZCBmb3IgSVB2NCwgc29tZXRoaW5nIGxpa2UgYE5GX0ZMT1dfVEFCTEVfSVBWNGAgb3IgcGVyaGFwcyBhIG5hbWluZyBjb252ZW50aW9uIHRoYXQgd291bGQgaW5jbHVkZSBzb21ldGhpbmcgc2ltaWxhci4gSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZSwgc28gSSdsbCBnbyBiYWNrIGFuZCBjcm9zcy1yZWZlcmVuY2UsIHZlcmlmeSB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGEgbW9yZSBzcGVjaWZpYyBvciBvcHRpbWl6ZWQgZmxvdyB0YWJsZSBzdHJ1Y3R1cmUgZm9yIElQdjQuIEknbSBzdXJlIGl0J3Mgc2ltaWxhciwgYnV0IEkgd2FudCB0byBiZSAxMDAlIGFjY3VyYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTkxOCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI5OjIxLjQzODMxNjQ1MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxNDcxNDE1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfRkxPV19UQUJMRV9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMzpjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MTE9Y29uZmlnIE5GX0ZMT1dfVEFCTEVcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcyMTpjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIyLVxcdGJvb2wgXFxcIlN1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyOToyMy40NTMwMzU1NjJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzNzQ4Mjg0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqSWRlbnRpZnlpbmcgdGhlIENvcnJlY3QgTmV0ZmlsdGVyIEZsb3cgVGFibGUgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGJhc2VkIG9uIHdoYXQgSSdtIGxvb2tpbmcgYXQsIGl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGBORl9GTE9XX1RBQkxFX0lORVRgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gSSBuZWVkIHRvIGZvY3VzIG9uLiBUaGF0J3MgdGhlIG9uZS5cblxuTm93LCBsZXQgbWUganVzdCBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEkgc2VlIGBORl9GTE9XX1RBQkxFYCwgb2J2aW91c2x5LCBhbmQgdGhlbiB0aGUgbW9yZSBzcGVjaWZpYyBgTkZfRkxPV19UQUJMRV9JTkVUYCDigJMgdGhhdCByZWluZm9yY2VzIG15IGluaXRpYWwgaW1wcmVzc2lvbi4gSSBhbHNvIHNlZSBgTkZUX0ZMT1dfT0ZGTE9BRGAsIHdoaWNoIG1pZ2h0IGJlIHJlbGF0ZWQsIGFuZCB0aGVuIHRoZXNlIHR1bm5lbCBvcHRpb25zOiBgTkVUX0lQSVBgIGFuZCBgSVBWNl9UVU5ORUxgLlxuXG5HaXZlbiB0aGUgY29udGV4dCwgSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IGBORVRfSVBJUGAgYW5kIGBJUFY2X1RVTk5FTGAgZG9uJ3QgaW50cm9kdWNlIGFueSB1bmV4cGVjdGVkIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMgdGhhdCBJIG5lZWQgdG8gYWNjb3VudCBmb3IuIEJlc3QgdG8gdmVyaWZ5IHRob3NlIHJlcXVpcmVtZW50cyBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyBub3csIGJlZm9yZSBJIG1vdmUgYW55IGZ1cnRoZXIuIExldCdzIHNlZSB3aGF0IHRob3NlIGxvb2sgbGlrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMzEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyOToyNy40OTA1MzEzMzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDQ2ODY4MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9JUElQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MTQ5PWNvbmZpZyBJUF9QTlBfUkFSUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0xNjEtXFxubmV0L2lwdjQvS2NvbmZpZzoxNjI6Y29uZmlnIE5FVF9JUElQXFxubmV0L2lwdjQvS2NvbmZpZy0xNjMtXFx0dHJpc3RhdGUgXFxcIklQOiB0dW5uZWxpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI5OjI5LjI5NTIzNjg4NloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTIxNjY3NzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSwgYW4gZXhwZXJ0LCBhbSBwcm9jZXNzaW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkNvbnNpZGVyaW5nIHRoZSBOZXR3b3JrIEludGVyZmFjZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IG5ldHdvcmsgY29uZmlndXJhdGlvbiBhbmQgaW1tZWRpYXRlbHksIHRoZSBgSVBWNl9UVU5ORUxgIGFzcGVjdCBjb21lcyB0byBtaW5kLiBJdCdzIGEga2V5IGNvbnNpZGVyYXRpb24uIEkgbmVlZCB0byBlbnN1cmUgYSBwcm9wZXIgYW5kIGZ1bmN0aW9uYWwgSVB2NiB0dW5uZWwgY29uZmlndXJhdGlvbi4gVGhhdCBtZWFucyBJIG5lZWQgdG8gdGhpbmsgdGhyb3VnaCB0aGUgZW5jYXBzdWxhdGlvbiBtZXRob2QsIHRoZSB0dW5uZWwgZW5kcG9pbnRzLCBhbmQgYW55IHBvdGVudGlhbCByb3V0aW5nIGltcGxpY2F0aW9ucy4gVGhlIGltcGxpY2F0aW9ucyBhcmUgYSBzbW9vdGggdHJhbnNpdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgaW1wbGVtZW50YXRpb24gaXMgc2VhbWxlc3MuIEknbGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgYW5kIHRoZSByZXF1aXJlbWVudHMgb2YgaW1wbGVtZW50aW5nIHRoaXMgcHJvdG9jb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzM3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyOTozMi44MTY5MDc1OTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjMwODAwNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZfVFVOTkVMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWc9MTk2PWNvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cXG5uZXQvaXB2Ni9LY29uZmlnOjE5OTpjb25maWcgSVBWNl9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTIwMC1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyOTozNC41Mzk5OTIwNzJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2NDcwNDQ0MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFBhdGNoIG9uIE5ldHdvcmsgRm9yd2FyZGluZyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCdzIG1vZGlmaWNhdGlvbiBvZiBgdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGhgIG5lY2Vzc2l0YXRlcyB0aGUgYFZMQU5fODAyMVFgIGNvbmZpZyBvcHRpb24uIEkgdGhvdWdodCBgdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGhgIHdhcyB0b3VjaGVkLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gVGhlIHBhdGNoIGRpZmYgSSB3YXMgZ2l2ZW4gaW5pdGlhbGx5IGRpZG4ndCBsaXN0IGB2bGFuX2Rldi5jYC4gSSBuZWVkIHRvIHJlLWV4YW1pbmUgdGhlIGNvbnRleHQuXG5cblJpZ2h0LCB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIHNpZ25hdHVyZSBvZiBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYC4gSXQgbG9va3MgbGlrZSBpdCBkaWRuJ3QgY2hhbmdlIHRoZSBzaWduYXR1cmUgb2YgYG5kb19maWxsX2ZvcndhcmRfcGF0aGAuIE5vdywgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgdGFrZXMgYHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHhgIGluc3RlYWQgb2YgdGhlIGRldmljZSBhbmQgZGVzdGluYXRpb24gTUFDIGFkZHJlc3MuIFRoaXMgYWxsb3dzIHRoZSBjYWxsZXIgdG8gaW5pdGlhbGl6ZSBgZXRoZXJfdHlwZWAgd2l0aGluIHRoZSBjb250ZXh0LlxuXG5TbywgYFZMQU5fODAyMVFgIGlzbid0IHN0cmljdGx5ICpyZXF1aXJlZCogYnkgdGhpcyBjaGFuZ2UsIHRob3VnaCBpdCBtaWdodCBiZSBoZWxwZnVsIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiBNeSBhbmFseXNpcyBzaG93cyB0aGUgY29yZSBtb2RpZmljYXRpb25zIGFyZSBjZW50ZXJlZCBhcm91bmQgYG5mX2Zsb3dfdGFibGVfaXAuY2AgYW5kIGBuZl9mbG93X3RhYmxlX3BhdGguY2AuIFRoZXJlIGFyZSBhbHNvIGNoYW5nZXMgaW4gYGlwaXAuY2AgYW5kIGBpcDZfdHVubmVsLmNgLlxuXG5Ob3csIEkgbmVlZCB0byB6b29tIGluIG9uIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBmb3IgZmxvdyB0YWJsZSBvZmZsb2FkOiBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AuIEkgY2FuIHNlZSB0aGF0IGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGlzIGNhbGxlZCBmcm9tIGBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgIHdoaWNoIGlzIHRoZW4gY2FsbGVkIGZyb20gYG5mdF9mbG93X3JvdXRlYC5cblxuVGhlcmVmb3JlLCB0aGUga2V5IHN5bWJvbHMgdG8ga2VlcCBhbiBleWUgb24gYXJlOlxuKiAgIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2BcbiogICBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2BcbiogICBgbmZ0X2Zsb3dfcm91dGVgXG4qICAgYGRldl9maWxsX2ZvcndhcmRfcGF0aGBcblxuUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb25zLCB0aGUgcGF0Y2ggbGlrZWx5IGRlcGVuZHMgb246XG4qICAgYE5GX0ZMT1dfVEFCTEVgXG4qICAgYE5GX0ZMT1dfVEFCTEVfSU5FVGBcbiogICBgTkZUX0ZMT1dfT0ZGTE9BRGBcbiogICBgTkVUX0lQSVBgXG4qICAgYElQVjZfVFVOTkVMYFxuXG5JIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgYE5GVF9GTE9XX09GRkxPQURgIGhhcyBhbnkgb3RoZXIgc3BlY2lmaWMgZGVwZW5kZW5jaWVzIG9yIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMDQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI5OjQ1LjE4NzA0MDM1OFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNzY1OTMzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDk4PWNvbmZpZyBORlRfRVhUSERSX0RDQ1BcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjUwNDpjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDUtXFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfRkxPV19UQUJMRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyOTo0Ni45MDQ3MDc2MloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTcxOTI5MjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHdoYXQgbmVlZHMgdG8gYmUgY29uc2lkZXJlZCwgdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGxvZ2ljYWxseTpcblxuKipOZXR3b3JrIEZ1bmN0aW9uYWxpdHkgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBoaW5nZSBvbiBib3RoIGBORl9DT05OVFJBQ0tgIGFuZCBgTkZfRkxPV19UQUJMRWAuIEdpdmVuIHRoZSBpbnRlcnBsYXkgaW1wbGllZCwgaXQncyBjbGVhciB3ZSBhYnNvbHV0ZWx5ICptdXN0KiBpbmNsdWRlIGBORl9DT05OVFJBQ0tgIHRvIHByb2NlZWQuIFRoYXQncyBhIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrLlxuXG5Ob3csIGxldCdzIHBpdm90IHRvIHNvbWUgbW9yZSBzcGVjaWZpYyBuZXR3b3JraW5nIGZlYXR1cmVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGFjY291bnQgZm9yIGBORVRfSVBJUGAgYW5kIGBJUFY2X1RVTk5FTGAuIFRpbWUgdG8gY2hlY2sgdGhlaXIgcmVzcGVjdGl2ZSBjb25maWd1cmF0aW9uIGxvY2F0aW9ucy4gT2theSwgSSBzZWUgdGhhdCBgTkVUX0lQSVBgIGlzIGRlZmluZWQgd2l0aGluIGBuZXQvaXB2NC9LY29uZmlnYCwgYW5kIGBJUFY2X1RVTk5FTGAgcmVzaWRlcyBpbiBgbmV0L2lwdjYvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSB0byBmaW5kIHRoZW0uXG5cbkZpbmFsbHksIHRoZSBwb3RlbnRpYWwgZGVwZW5kZW5jeSBvZiBgTkZfRkxPV19UQUJMRV9JTkVUYCBvbiBgTkZfVEFCTEVTYC4uLiBBIGNydWNpYWwgcG9pbnQuIFRoZSBjb25maWd1cmF0aW9uIGVudHJ5IGBORlRfRkxPV19PRkZMT0FEYCBpcyBzaXR1YXRlZCBpbiBgbmV0L25ldGZpbHRlci9LY29uZmlnYCwgYnV0IGl0J3MgKmNvbmRpdGlvbmFsbHkqIGluY2x1ZGVkLCBzcGVjaWZpY2FsbHkgd2hlbiBgTkZfVEFCTEVTYCBpcyBlbmFibGVkLiBUaGVyZWZvcmUsIGBORl9UQUJMRVNgIG1heSB3ZWxsIGFsc28gYmUgYSByZXF1aXJlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3MzcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjk6NTEuMDc2NjM5ODc3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE0MTIxODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlmIE5GX1RBQkxFU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTY9bWVudWNvbmZpZyBORl9UQUJMRVNfQlJJREdFXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTEwLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTE6aWYgTkZfVEFCTEVTX0JSSURHRVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTItXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz0zMD1jb25maWcgTkZfVFBST1hZX0lQVjRcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTMyLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjMzOmlmIE5GX1RBQkxFU1xcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTM0LVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTM1PWNvbmZpZyBORl9UQUJMRVNfSVBWNFxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzktXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6NDA6aWYgTkZfVEFCTEVTX0lQVjRcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy00MS1cXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnPTI2PWNvbmZpZyBORl9UUFJPWFlfSVBWNlxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMjgtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6Mjk6aWYgTkZfVEFCTEVTXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMzAtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9MzE9Y29uZmlnIE5GX1RBQkxFU19JUFY2XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0zNS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzozNjppZiBORl9UQUJMRVNfSVBWNlxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTM3LVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ1NT1jb25maWcgTkZfVEFCTEVTXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDcwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzE6aWYgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3Mi1jb25maWcgTkZfVEFCTEVTX0lORVRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02MjU9Y29uZmlnIE5GVF9TT0NLRVRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MjctXFx0c2VsZWN0IE5GX1NPQ0tFVF9JUFY0XFxubmV0L25ldGZpbHRlci9LY29uZmlnOjYyODpcXHRzZWxlY3QgTkZfU09DS0VUX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjI5LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NDA9Y29uZmlnIE5GVF9UUFJPWFlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDItXFx0c2VsZWN0IE5GX0RFRlJBR19JUFY0XFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY0MzpcXHRzZWxlY3QgTkZfREVGUkFHX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQ0LVxcdHNlbGVjdCBORl9UUFJPWFlfSVBWNFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NDU6XFx0c2VsZWN0IE5GX1RQUk9YWV9JUFY2IGlmIE5GX1RBQkxFU19JUFY2XFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY0Ni1cXHRoZWxwXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NjQ5PWNvbmZpZyBORlRfU1lOUFJPWFlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NTktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY2MDppZiBORl9UQUJMRVNfTkVUREVWXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY2MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjk6NTIuNzkwNzY3MTlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyMDAxNzE4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgTmV0ZmlsdGVyIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGNvbmNlcm4gaXMgcHJldHR5IGNsZWFyOiB3ZSBuZWVkIGBORl9UQUJMRVNgLiBUaGF0J3Mgbm9uLW5lZ290aWFibGUgZm9yIHByZXR0eSBtdWNoIGFueXRoaW5nIG1vZGVybiBpbiBOZXRmaWx0ZXIuIEl04oCZcyB0aGUgZm91bmRhdGlvbmFsIGNvbXBvbmVudC5cblxuTm93LCBsZXQncyBjaXJjbGUgYmFjayB0byBgTkZfRkxPV19UQUJMRV9JTkVUYC4gSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgZW5hYmxlZCBhbmQgZnVuY3Rpb25pbmcgYXMgZXhwZWN0ZWQuIEl0J3MgY3J1Y2lhbCBmb3IgdGhlIGZsb3cgdGFibGUgZnVuY3Rpb25hbGl0eSwgb2J2aW91c2x5LCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3MgbGluZWQgdXAuIEknbSB0aGlua2luZyBvZiBwb3NzaWJsZSBpbnRlcmFjdGlvbnMgYW5kIHBvdGVudGlhbCBjb25mbGljdHMuIFRpbWUgdG8gYW5hbHl6ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM5MjgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyOTo1NS43MTA3ODcyMjdaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTUwOTYwMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzAxPWVuZGlmICMgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzAzOmNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzA0LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyOTo1Ny40MjU4ODg0NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTM2OTM0MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE5ldGZpbHRlciBGbG93IFRhYmxlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzb21lIE5ldGZpbHRlciBjb2RlIGFuZCBpdCBzZWVtcyB0aGlzIHBhcnQgaXMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgYE5GX1RBQkxFU2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCdzIHNlZS4uLiBJJ3ZlIGdvdCBhIGxpc3QgaGVyZTogYE5GX1RBQkxFU2AsIGBORl9GTE9XX1RBQkxFYCwgYE5GX0ZMT1dfVEFCTEVfSU5FVGAsIGBORlRfRkxPV19PRkZMT0FEYCwgYE5FVF9JUElQYCwgYElQVjZfVFVOTkVMYCwgYW5kIGBORl9DT05OVFJBQ0tgLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBjYW4gYE5GVF9GTE9XX09GRkxPQURgIGdldCB1cyB0byBgbmZ0X2Zsb3dfcm91dGVgPyBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgZnVuY3Rpb24ncyBpbiBgbmZfZmxvd190YWJsZV9wYXRoLmNgLCB3aGljaCwgaWYgSSByZW1lbWJlciBjb3JyZWN0bHksIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgTkZfRkxPV19UQUJMRWAgaXMgZW5hYmxlZC4gT2theSwgbGV0IG1lIGRvdWJsZS1jaGVjay4gSSBzaG91bGQgcmVhbGx5IHZlcmlmeSB0aGlzIGJ5IGNvbnN1bHRpbmcgdGhlIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbXBpbGF0aW9uIGNvbmRpdGlvbnMuIE5lZWQgdG8gYmUgc3VyZSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDIxMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjozMDowMS41NjI4MjU4MTlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzA0MzA4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd190YWJsZV9wYXRoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTQzPW5mX2Zsb3dfdGFibGUtb2Jqc1xcdFxcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDQ6XFx0XFx0XFx0XFx0ICAgbmZfZmxvd190YWJsZV9wYXRoLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ1LVxcdFxcdFxcdFxcdCAgIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5vIG5mX2Zsb3dfdGFibGVfeGRwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6MzA6MDMuMjkzMjYyMVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTU1ODAyNzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIEZsb3cgVGFibGUgT2ZmbG9hZCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGhlcmUncyBteSBicmVha2Rvd24uIEl0J3MgcHJldHR5IGNsZWFyIHRoYXQgYG5mX2Zsb3dfdGFibGVfcGF0aC5vYCBhbmQgYG5mX2Zsb3dfdGFibGVfaXAub2AgYXJlIGludGVncmFsIHBhcnRzIG9mIHRoZSBgbmZfZmxvd190YWJsZWAgbW9kdWxlLiBTbywgdGhlIGBORl9GTE9XX1RBQkxFYCBjb25maWcgb3B0aW9uIGlzIHRoZSBwcmltYXJ5IG9uZSBoZXJlLlxuXG5JJ3ZlIHplcm9lZCBpbiBvbiB0aGUga2V5IHN5bWJvbHMsIHByaW1hcmlseTogYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgLCBgbmZ0X2Zsb3dfcm91dGVgLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAuIEkgaGFkIHRvIGNvbmZpcm0sIGJ1dCB0aGUgZnVuY3Rpb25zIGBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoYCwgYGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGhgLCBgbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2xgLCBhbmQgYG5mX2Zsb3dfdHVwbGVfZW5jYXBgIGFyZSBhbGwgc3RhdGljIGFuZCB0aGVyZWZvcmUgdW5saWtlbHkgdG8gYmUgZXh0ZXJuYWxseSB0b3VjaGVkLlxuXG5Ob3csIGNoZWNraW5nIHRoZSBleHBvcnRzLi4uIHllcywgSSBjYW4gc2VlIHRoYXQgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAsIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AsIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYCwgYW5kIGBuZnRfZmxvd19yb3V0ZWAgYXJlIGFsbCBleHBvcnRlZC4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIHVuZGVyc3RhbmRpbmcuXG5cblRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIHBpZWNlIG9mIHdvcmsuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgcmVmaW5pbmcgdGhlIGZsb3cgdGFibGUgb2ZmbG9hZCBwYXRod2F5LCBmb2N1c2luZyBvbiB0aGUgY29ycmVjdCBoYW5kbGluZyBvZiBpbm5lciBwcm90b2NvbHMgYW5kIHRoZSBldGhlcl90eXBlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIElQLWluLUlQIGFuZCBJUHY2IHR1bm5lbHMuIFRoZSBjaGFuZ2UgdG8gYGRldl9maWxsX2ZvcndhcmRfcGF0aGAg4oCTIHRha2luZyBhIGNvbnRleHQgc3RydWN0IHJhdGhlciB0aGFuIGp1c3QgdGhlIGRldmljZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzcyDigJMgaXMgYSBzaWduaWZpY2FudCBwb2ludGVyLiBUaGVuLCB0aGUgdXBkYXRlZCBOZXRmaWx0ZXIgZmxvdyB0YWJsZSBob29rcyB0aGF0IGxldmVyYWdlIHRoaXMgY29udGV4dCB0byBhY2N1cmF0ZWx5IGlkZW50aWZ5IGVuY2Fwc3VsYXRlZCBwcm90b2NvbHMsIGFyZSBmdXJ0aGVyIGVuaGFuY2VtZW50cy4gVGhlc2UgbW9kaWZpY2F0aW9ucyBzdWdnZXN0IHRoYXQgdGhlc2UgYXJlIGNyaXRpY2FsIGNoYW5nZXMgd2l0aGluIGJvdGggY29yZSBuZXR3b3JraW5nIGFuZCBOZXRmaWx0ZXIgc3Vic3lzdGVtcyB0aGF0IGFyZSBpbmRlZWQgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cblxuVG8gY29uZmlybSB0aGUgY29udGV4dCwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBoZXJlLiBJdCdzIGNsZWFybHkgdGllZCB0byBgTkZfVEFCTEVTYCwgYE5GX0ZMT1dfVEFCTEVgLCBhbmQgYE5GX0ZMT1dfVEFCTEVfSU5FVGAsIGBORlRfRkxPV19PRkZMT0FEYC4gQWxzbywgIGBORVRfSVBJUGAsIGBJUFY2X1RVTk5FTGAgYW5kIGBORl9DT05OVFJBQ0tgIGFyZSBsaWtlbHkgcmVsYXRlZC5cblxuSnVzdCBhIGZpbmFsIHNhbml0eSBjaGVjay4uLiBJIHNob3VsZCB2ZXJpZnkgdGhhdCBgTkZfRkxPV19UQUJMRV9JTkVUYCBpcyB0aGUgY29ycmVjdCBzY29wZS4gSXMgdGhlcmUgYW4gYE5GX0ZMT1dfVEFCTEVfSVBWNGAgb3B0aW9uLCBvciBpcyB0aGUgXCJpbmV0XCIgc2NvcGUgYnJvYWQgZW5vdWdoP1xuXG5cbiIsIklucHV0VG9rZW5zIjoyNDcyMiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjozMDoxMC44NDkwNjc1MDZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDMwMjUzNjksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9GTE9XX1RBQkxFX0lQVjRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjMwOjEyLjY5MjEwMjY1NVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTE4OTIxODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgaW5jb3JyZWN0OyBpdCBhcHBlYXJzIHRoZSBmdW5jdGlvbmFsaXR5IEkgd2FzIGxvb2tpbmcgZm9yIHdhcyBtZXJnZWQsIGxpa2VseSBpbnRvIHNvbWV0aGluZyBsaWtlIGBORl9GTE9XX1RBQkxFX0lORVRgIG9yIGEgc2ltaWxhciBzdHJ1Y3R1cmUuXG5cbk5vdywgdG8gdHJhY2sgZG93biB0aGUgcmVsZXZhbnQgY29kZS4uLiBMZXQncyBjaGVjayB0aGUgYE5FVF9JUEdSRWAgbW9kdWxlLiBEb2VzIGl0IGhhdmUgYSBgZmlsbF9mb3J3YXJkX3BhdGhgIGZ1bmN0aW9uIGRlZmluZWQ/IFRoYXQgd291bGQgYmUgYSBsb2dpY2FsIHBsYWNlIHRvIGxvb2sgZm9yIGZvcndhcmRpbmcgcGF0aCBsb2dpYywgZ2l2ZW4gdGhlIGNvbnRleHQuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU4MTUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjozMDoxNS42MTEwMjcwODNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDczMjQxOTAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbGxfZm9yd2FyZF9wYXRoLipncmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjMwOjE4LjAxODM2MjEzM1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODgwMTgyMDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIHRoZSBMYW5kc2NhcGUqKlxuXG5ObywgdGhhdCdzIG5vdCBpdC4gT2theSwgbGV0J3MgcGl2b3QuIFRoZSBzaXR1YXRpb24gc2VlbXMgZmFtaWxpYXIsIHNvIEkgbmVlZCB0byBjaGVjayBgdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGhgLiBUaGF0IGZ1bmN0aW9uLCBpbiB0aGUgY29udGV4dCBvZiBWTEFOIGRldmljZSBmb3J3YXJkaW5nLCBpcyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNydWNpYWwgbG9naWMgcmVsYXRlZCB0byBwYWNrZXQgaGFuZGxpbmcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgdmVyaWZ5IGlmIG15IGluaXRpYWwgaHVuY2ggaXMgY29ycmVjdCBieSBleGFtaW5pbmcgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uIGFuZCBndWlkZSBteSB0cm91Ymxlc2hvb3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTk2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6MzA6MjAuODk4NTQ2MTI1WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkzNTc1MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZsYW5fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC84MDIxcS92bGFuX2Rldi5jPTc1Nj1zdGF0aWMgaW50IHZsYW5fZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTc2Mi1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYzo3NjM6c3RhdGljIGludCB2bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTc2NC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoKVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM9MTA3OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZsYW5fbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTExMDktXFx0Lm5kb19nZXRfaWZsaW5rXFx0XFx0PSB2bGFuX2Rldl9nZXRfaWZsaW5rLFxcbm5ldC84MDIxcS92bGFuX2Rldi5jOjExMTA6XFx0Lm5kb19maWxsX2ZvcndhcmRfcGF0aFxcdD0gdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGgsXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTExMS1cXHQubmRvX2h3dHN0YW1wX2dldFxcdD0gdmxhbl9od3RzdGFtcF9nZXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjMwOjIyLjU5MjEyODI1OVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDU4MDQ0MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMgY29uZmlndXJhdGlvbiwgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkNvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBJJ20gbG9va2luZyBhdCB0aGlzIGxpc3Qgb2YgY29uZmlndXJhdGlvbnMsIGFuZCBpdCBsb29rcyBsaWtlIGEgZ29vZCwgYmFzaWMgc2V0LiBJJ3ZlIGdvdCBgTkZfVEFCTEVTYCBhbmQgaXRzIGFzc29jaWF0ZWQgY29tcG9uZW50cyBgTkZfRkxPV19UQUJMRWAsIGBORl9GTE9XX1RBQkxFX0lORVRgLCBhbmQgYE5GVF9GTE9XX09GRkxPQURgLiBFeGNlbGxlbnQsIHRoYXQncyB0aGUgbW9kZXJuLCBwZXJmb3JtYW50IHdheSB0byBoYW5kbGUgbmV0d29yayBmaWx0ZXJpbmcgYW5kIGZvcndhcmRpbmcuIFRoZW4gSSBzZWUgYE5FVF9JUElQYCBhbmQgYElQVjZfVFVOTkVMYCwgc3VnZ2VzdGluZyB3ZSdyZSBkZWFsaW5nIHdpdGggc29tZSB0dW5uZWxpbmcsIHdoaWNoIGlzIHNlbnNpYmxlIGluIG1hbnkgZW52aXJvbm1lbnRzLiBXZSBoYXZlIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVsZW1lbnQgd2l0aCBgTkZfQ09OTlRSQUNLYCB3aGljaCBJIHdpbGwga2VlcC5cblxuVGhlIG9uZSB0aGF0IGp1bXBzIG91dCB0byBtZSBpcyBgVkxBTl84MDIxUWAuIFZMQU4gc3VwcG9ydCBpcyBlc3NlbnRpYWwgaW4gbWFueSBlbnZpcm9ubWVudHMuIEdpdmVuIHRoZSBvdGhlciBjb25maWd1cmF0aW9ucywgaXQncyBhIGdvb2QgaWRlYSB0byBpbmNsdWRlIGl0LiBKdXN0IHRvIGJlIHNhZmUsIEknbSBnb2luZyB0byBhZGQgdGhhdCB0byBteSBzdGFuZGFyZCBjb25maWdzLCBhcyBpdCB3b24ndCBodXJ0LCBhbmQgbWF5IGluZGVlZCBtYWtlIGEgYmlnIGRpZmZlcmVuY2UgaW4gYSBtb3JlIGNvbXBsZXggc2V0dXAuXG5cbk5vdyB0aGF0IEkndmUgcmV2aWV3ZWQgdGhvc2UgY29tcG9uZW50cywgSSdtIGhhcHB5IHRvIGdvIGFoZWFkIGFuZCBcInNldC1yZXN1bHRzXCIuIEl0J3MgYSBxdWljayBjb25maWcgYW5kIEknbSBjb25maWRlbnQgYWJvdXQgdGhlc2Ugc2V0dGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NDc1LCJPdXRwdXRUb2tlbnMiOjIzOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjozMDoyNy42NTAxNzUzMDVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODIxMDA5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORl9GTE9XX1RBQkxFX0lORVRcIixcbiAgICBcIk5GVF9GTE9XX09GRkxPQURcIixcbiAgICBcIk5FVF9JUElQXCIsXG4gICAgXCJJUFY2X1RVTk5FTFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJWTEFOXzgwMjFRXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwX2hvb2tcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tcIixcbiAgICBcIm5mdF9mbG93X3JvdXRlXCIsXG4gICAgXCJkZXZfZmlsbF9mb3J3YXJkX3BhdGhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgb2ZmbG9hZCBwYXRoIHRvIHByb3Blcmx5IGhhbmRsZSBpbm5lciBwcm90b2NvbHMgYW5kIGV0aGVyX3R5cGUsIGVzcGVjaWFsbHkgZm9yIElQLWluLUlQIGFuZCBJUHY2IHR1bm5lbHMuIEl0IGNoYW5nZXMgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgdG8gdGFrZSBhIGNvbnRleHQgc3RydWN0IGluc3RlYWQgb2YganVzdCB0aGUgZGV2aWNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzLCBhbmQgdXBkYXRlcyB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgaG9va3MgdG8gdXNlIHRoaXMgY29udGV4dCBhbmQgY29ycmVjdGx5IGlkZW50aWZ5IGVuY2Fwc3VsYXRlZCBwcm90b2NvbHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIHN1YnN5c3RlbXMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVfSU5FVFwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiTkVUX0lQSVBcIixcbiAgICBcIklQVjZfVFVOTkVMXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIlZMQU5fODAyMVFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9mbG93X29mZmxvYWRfaXBfaG9va1wiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va1wiLFxuICAgIFwibmZ0X2Zsb3dfcm91dGVcIixcbiAgICBcImRldl9maWxsX2ZvcndhcmRfcGF0aFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBvZmZsb2FkIHBhdGggdG8gcHJvcGVybHkgaGFuZGxlIGlubmVyIHByb3RvY29scyBhbmQgZXRoZXJfdHlwZSwgZXNwZWNpYWxseSBmb3IgSVAtaW4tSVAgYW5kIElQdjYgdHVubmVscy4gSXQgY2hhbmdlcyBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCB0byB0YWtlIGEgY29udGV4dCBzdHJ1Y3QgaW5zdGVhZCBvZiBqdXN0IHRoZSBkZXZpY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3MsIGFuZCB1cGRhdGVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBob29rcyB0byB1c2UgdGhpcyBjb250ZXh0IGFuZCBjb3JyZWN0bHkgaWRlbnRpZnkgZW5jYXBzdWxhdGVkIHByb3RvY29scy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlgg9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 02:11:15 +0000 UTC FinishedAt: 2026-08-07 02:30:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "bf80e6802273a900311b44e47c9b1a59c6d2473c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NF_FLOW_TABLE", "NF_FLOW_TABLE_INET", "NFT_FLOW_OFFLOAD", "NET_IPIP", "IPV6_TUNNEL", "NF_CONNTRACK", "VLAN_8021Q" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "bf80e6802273a900311b44e47c9b1a59c6d2473c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NF_FLOW_TABLE", "NF_FLOW_TABLE_INET", "NFT_FLOW_OFFLOAD", "NET_IPIP", "IPV6_TUNNEL", "NF_CONNTRACK", "VLAN_8021Q" ], "series_id": "ec3678cf-46a4-4bdc-b7da-de91ba101ff5" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_flow_offload_ip_hook", "nf_flow_offload_ipv6_hook", "nft_flow_route", "dev_fill_forward_path" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GX0ZMT1dfVEFCTEVfSU5FVCYjMzQ7LAogICAgJiMzNDtORlRfRkxPV19PRkZMT0FEJiMzNDssCiAgICAmIzM0O05FVF9JUElQJiMzNDssCiAgICAmIzM0O0lQVjZfVFVOTkVMJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtWTEFOXzgwMjFRJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2lwX2hvb2smIzM0OywKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayYjMzQ7LAogICAgJiMzNDtuZnRfZmxvd19yb3V0ZSYjMzQ7LAogICAgJiMzNDtkZXZfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIG9mZmxvYWQgcGF0aCB0byBwcm9wZXJseSBoYW5kbGUgaW5uZXIgcHJvdG9jb2xzIGFuZCBldGhlcl90eXBlLCBlc3BlY2lhbGx5IGZvciBJUC1pbi1JUCBhbmQgSVB2NiB0dW5uZWxzLiBJdCBjaGFuZ2VzIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIHRvIHRha2UgYSBjb250ZXh0IHN0cnVjdCBpbnN0ZWFkIG9mIGp1c3QgdGhlIGRldmljZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzcywgYW5kIHVwZGF0ZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGhvb2tzIHRvIHVzZSB0aGlzIGNvbnRleHQgYW5kIGNvcnJlY3RseSBpZGVudGlmeSBlbmNhcHN1bGF0ZWQgcHJvdG9jb2xzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBzdWJzeXN0ZW1zIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwZDZhYTA5MGY4ZDU4ZjExODk5OWEzMmQzYzUyOGYxNjhjOTVhN2VlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAwMjoyODowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuaW5kZXggYTAzYWY5NzUwNTczMS4uOTI2MTE4MDI4MDFlYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbkBAIC0yODMsMTQgJiM0MzsyODMsMTkgQEAgc3RhdGljIGludCBhaXJvaGFfcHBlX2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsXG4gXHRcdFx0XHQgICAgc3RydWN0IGFpcm9oYV93ZG1hX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayBzdGFjaztcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XG4mIzQzO1x0XHQuZGV2ID0gZGV2LFxuJiM0MztcdH07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoO1xuIFx0aW50IGVycjtcbiBcbiBcdGlmICghZGV2KVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiYjNDM7XHRldGhlcl9hZGRyX2NvcHkoY3R4LmRhZGRyLCBhZGRyKTtcbiYjNDM7XG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBcdTAwMjZzdGFjayk7XG4mIzQzO1x0ZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKFx1MDAyNmN0eCwgXHUwMDI2c3RhY2spO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcbmluZGV4IDc3MWQ5MTE4Zjk0YWQuLjk5YjI4YWFhN2NjNDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcbkBAIC05Miw2ICYjNDM7OTIsOSBAQCBzdGF0aWMgaW50XG4gbXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwgc3RydWN0IG10a193ZG1hX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayBzdGFjaztcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XG4mIzQzO1x0XHQuZGV2ID0gZGV2LFxuJiM0MztcdH07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoO1xuIFx0aW50IGVycjtcbiBcbkBAIC0xMDEsOCAmIzQzOzEwNCwxMCBAQCBtdGtfZmxvd19nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLCBzdHJ1Y3QgbXRrX3dkbWFfaVxuIFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRfTUVESUFURUtfU09DX1dFRCkpXG4gXHRcdHJldHVybiAtMTtcbiBcbiYjNDM7XHRldGhlcl9hZGRyX2NvcHkoY3R4LmRhZGRyLCBhZGRyKTtcbiYjNDM7XG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBcdTAwMjZzdGFjayk7XG4mIzQzO1x0ZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKFx1MDAyNmN0eCwgXHUwMDI2c3RhY2spO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA2MmNmYWQ3ZTZiNzlhLi42OGNjYjU4NjgwNzBlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTkwMiw3ICYjNDM7OTAyLDcgQEAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCB7XG4gXHRcdFx0XHRzdHJ1Y3QgaW42X2FkZHJcdGRzdF92NjtcbiBcdFx0XHR9O1xuIFxuLVx0XHRcdHU4XHRsM19wcm90bztcbiYjNDM7XHRcdFx0dThcdGlubmVyX3Byb3RvO1xuIFx0XHR9IHR1bjtcbiBcdFx0c3RydWN0IHtcbiBcdFx0XHRlbnVtIHtcbkBAIC05MzksNiAmIzQzOzkzOSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sge1xuIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IHtcbiBcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gXHR1OFx0XHRcdGRhZGRyW0VUSF9BTEVOXTtcbiYjNDM7XHRfX2JlMTZcdFx0XHRldGhlcl90eXBlO1xuIFxuIFx0aW50XHRcdFx0bnVtX3ZsYW5zO1xuIFx0c3RydWN0IHtcbkBAIC0zNDI2LDcgJiM0MzszNDI3LDcgQEAgdm9pZCBkZXZfcmVtb3ZlX29mZmxvYWQoc3RydWN0IHBhY2tldF9vZmZsb2FkICpwbyk7XG4gXG4gaW50IGRldl9nZXRfaWZsaW5rKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIGludCBkZXZfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4taW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsXG4mIzQzO2ludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcbiB2b2lkIGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcbiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbmluZGV4IGEwOTBlYzNmZmVmMmUuLmYyZTI3NzFmMTg4ZjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG5AQCAtMTE3LDcgJiM0MzsxMTcsNyBAQCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCB7XG4gXHRcdHN0cnVjdCBpbjZfYWRkclx0ZHN0X3Y2O1xuIFx0fTtcbiBcbi1cdHU4XHRsM19wcm90bztcbiYjNDM7XHR1OFx0aW5uZXJfcHJvdG87XG4gfTtcbiBcbiBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCBlNTBlZDY3N2RlNzI1Li4xM2RmZDIxMTNhNWFiIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNzY5LDM1ICYjNDM7NzY5LDMxIEBAIHZvaWQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKTtcbiBcbi1pbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcbiYjNDM7aW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmxhc3RfZGV2O1xuLVx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0ge1xuLVx0XHQuZGV2XHQ9IGRldixcbi1cdH07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoO1xuIFx0aW50IHJldCA9IDA7XG4gXG4tXHRtZW1jcHkoY3R4LmRhZGRyLCBkYWRkciwgc2l6ZW9mKGN0eC5kYWRkcikpO1xuIFx0c3RhY2stXHUwMDNlbnVtX3BhdGhzID0gMDtcbi1cdHdoaWxlIChjdHguZGV2IFx1MDAyNlx1MDAyNiBjdHguZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKSB7XG4tXHRcdGxhc3RfZGV2ID0gY3R4LmRldjtcbiYjNDM7XHR3aGlsZSAoY3R4LVx1MDAzZWRldiBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZWRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aCkge1xuJiM0MztcdFx0bGFzdF9kZXYgPSBjdHgtXHUwMDNlZGV2O1xuIFx0XHRwYXRoID0gZGV2X2Z3ZF9wYXRoKHN0YWNrKTtcbiBcdFx0aWYgKCFwYXRoKVxuIFx0XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdFx0bWVtc2V0KHBhdGgsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9wYXRoKSk7XG4tXHRcdHJldCA9IGN0eC5kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgoXHUwMDI2Y3R4LCBwYXRoKTtcbiYjNDM7XHRcdHJldCA9IGN0eC1cdTAwM2VkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRcdHN0YWNrLVx1MDAzZW51bV9wYXRocyYjNDM7JiM0Mzs7XG4tXHRcdGlmIChXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LmRldikpXG4mIzQzO1x0XHRpZiAoV0FSTl9PTl9PTkNFKGxhc3RfZGV2ID09IGN0eC1cdTAwM2VkZXYpKVxuIFx0XHRcdGdvdG8gZXJyX291dDtcbiBcdH1cbiBcbi1cdGlmICghY3R4LmRldilcbiYjNDM7XHRpZiAoIWN0eC1cdTAwM2VkZXYpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHRwYXRoID0gZGV2X2Z3ZF9wYXRoKHN0YWNrKTtcbkBAIC04MDUsNyAmIzQzOzgwMSw3IEBAIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuIFx0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRwYXRoLVx1MDAzZXR5cGUgPSBERVZfUEFUSF9FVEhFUk5FVDtcbi1cdHBhdGgtXHUwMDNlZGV2ID0gY3R4LmRldjtcbiYjNDM7XHRwYXRoLVx1MDAzZWRldiA9IGN0eC1cdTAwM2VkZXY7XG4gXHRzdGFjay1cdTAwM2VudW1fcGF0aHMmIzQzOyYjNDM7O1xuIFxuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBpcC5jIGIvbmV0L2lwdjQvaXBpcC5jXG5pbmRleCBmYjdkOTZmOTliMDZiLi4xNjMwMzI1Yzc3ZDM0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBpcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcGlwLmNcbkBAIC0zNjAsNiAmIzQzOzM2MCw5IEBAIHN0YXRpYyBpbnQgaXBpcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0Y29uc3Qgc3RydWN0IGlwaGRyICp0aXBoID0gXHUwMDI2dHVubmVsLVx1MDAzZXBhcm1zLmlwaDtcbiBcdHN0cnVjdCBydGFibGUgKnJ0O1xuIFxuJiM0MztcdGlmIChjdHgtXHUwMDNlZXRoZXJfdHlwZSAhPSBjcHVfdG9fYmUxNihFVEhfUF9JUCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuIFx0aWYgKHR1bm5lbC1cdTAwM2Vjb2xsZWN0X21kKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG5AQCAtMzc1LDcgJiM0MzszNzgsNyBAQCBzdGF0aWMgaW50IGlwaXBfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdHBhdGgtXHUwMDNldHlwZSA9IERFVl9QQVRIX1RVTjtcbiBcdHBhdGgtXHUwMDNldHVuLnNyY192NC5zX2FkZHIgPSB0aXBoLVx1MDAzZXNhZGRyO1xuIFx0cGF0aC1cdTAwM2V0dW4uZHN0X3Y0LnNfYWRkciA9IHRpcGgtXHUwMDNlZGFkZHI7XG4tXHRwYXRoLVx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBJUDtcbiYjNDM7XHRwYXRoLVx1MDAzZXR1bi5pbm5lcl9wcm90byA9IElQUFJPVE9fSVBJUDtcbiBcdHBhdGgtXHUwMDNldHVuLmRzdCA9IFx1MDAyNnJ0LVx1MDAzZWRzdDtcbiBcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldjtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbmluZGV4IGQ4MDAyMGJjMjYyMGUuLjdiNTQ5MTkyMzJiYTMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuQEAgLTE4NDksNiAmIzQzOzE4NDksOSBAQCBzdGF0aWMgaW50IGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdHN0cnVjdCBmbG93aTYgZmw2O1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRpZiAoY3R4LVx1MDAzZWV0aGVyX3R5cGUgIT0gY3B1X3RvX2JlMTYoRVRIX1BfSVBWNikpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuIFx0aWYgKHQtXHUwMDNlcGFybXMuZmxhZ3MgXHUwMDI2IChJUDZfVE5MX0ZfVVNFX09SSUdfVENMQVNTIHxcbiBcdFx0XHQgICAgICBJUDZfVE5MX0ZfVVNFX09SSUdfRkxPV0xBQkVMIHxcbiBcdFx0XHQgICAgICBJUDZfVE5MX0ZfVVNFX09SSUdfRldNQVJLKSlcbkBAIC0xODY5LDcgJiM0MzsxODcyLDcgQEAgc3RhdGljIGludCBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4gXHRcdHBhdGgtXHUwMDNldHlwZSA9IERFVl9QQVRIX1RVTjtcbiBcdFx0cGF0aC1cdTAwM2V0dW4uc3JjX3Y2ID0gZmw2LnNhZGRyO1xuIFx0XHRwYXRoLVx1MDAzZXR1bi5kc3RfdjYgPSBmbDYuZGFkZHI7XG4tXHRcdHBhdGgtXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUFY2O1xuJiM0MztcdFx0cGF0aC1cdTAwM2V0dW4uaW5uZXJfcHJvdG8gPSBJUFBST1RPX0lQVjY7XG4gXHRcdHBhdGgtXHUwMDNldHVuLmRzdCA9IGRzdDtcbiBcdFx0cGF0aC1cdTAwM2VkZXYgPSBjdHgtXHUwMDNlZGV2O1xuIFx0XHRjdHgtXHUwMDNlZGV2ID0gZHN0LVx1MDAzZWRldjtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG5pbmRleCAwYjMxNGIxMGU3MDVhLi5hZjUzNDAwMGEyODdhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG5AQCAtMTQ3LDEzICYjNDM7MTQ3LDE0IEBAIHN0YXRpYyBib29sIGlwX2hhc19vcHRpb25zKHVuc2lnbmVkIGludCB0aG9mZilcbiBcbiBzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCB7XG4gXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZVx0KmluO1xuJiM0MztcdF9fYmUxNlx0XHRcdGV0aGVyX3R5cGU7XG4gXHR1MzJcdFx0XHRvZmZzZXQ7XG4gXHR1MzJcdFx0XHRoZHJzaXplO1xuIFx0c3RydWN0IHtcbiBcdFx0LyogVHVubmVsIElQIGhlYWRlciBzaXplICovXG4gXHRcdHUzMiBoZHJfc2l6ZTtcbiBcdFx0LyogSVAgdHVubmVsIHByb3RvY29sICovXG4tXHRcdHU4IHByb3RvO1xuJiM0MztcdFx0dTggaW5uZXJfcHJvdG87XG4gXHR9IHR1bjtcbiB9O1xuIFxuQEAgLTE2MSw3ICYjNDM7MTYyLDYgQEAgc3RhdGljIHZvaWQgbmZfZmxvd190dXBsZV9lbmNhcChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlKVxuIHtcbi1cdF9fYmUxNiBpbm5lcl9wcm90byA9IHNrYi1cdTAwM2Vwcm90b2NvbDtcbiBcdHN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aDtcbiBcdHN0cnVjdCBwcHBvZV9oZHIgKnBoZHI7XG4gXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcbkBAIC0xNzksMzMgJiM0MzsxNzksMzEgQEAgc3RhdGljIHZvaWQgbmZfZmxvd190dXBsZV9lbmNhcChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0XHR2ZXRoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKXNrYl9tYWNfaGVhZGVyKHNrYik7XG4gXHRcdHR1cGxlLVx1MDAzZWVuY2FwW2ldLmlkID0gbnRvaHModmV0aC1cdTAwM2VoX3ZsYW5fVENJKTtcbiBcdFx0dHVwbGUtXHUwMDNlZW5jYXBbaV0ucHJvdG8gPSBza2ItXHUwMDNlcHJvdG9jb2w7XG4tXHRcdGlubmVyX3Byb3RvID0gdmV0aC1cdTAwM2VoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvO1xuIFx0XHRvZmZzZXQgJiM0Mzs9IFZMQU5fSExFTjtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIGh0b25zKEVUSF9QX1BQUF9TRVMpOlxuIFx0XHRwaGRyID0gKHN0cnVjdCBwcHBvZV9oZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbiBcdFx0dHVwbGUtXHUwMDNlZW5jYXBbaV0uaWQgPSBudG9ocyhwaGRyLVx1MDAzZXNpZCk7XG4gXHRcdHR1cGxlLVx1MDAzZWVuY2FwW2ldLnByb3RvID0gc2tiLVx1MDAzZXByb3RvY29sO1xuLVx0XHRpbm5lcl9wcm90byA9ICooKF9fYmUxNiAqKShwaGRyICYjNDM7IDEpKTtcbiBcdFx0b2Zmc2V0ICYjNDM7PSBQUFBPRV9TRVNfSExFTjtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRzd2l0Y2ggKGlubmVyX3Byb3RvKSB7XG4mIzQzO1x0c3dpdGNoIChjdHgtXHUwMDNlZXRoZXJfdHlwZSkge1xuIFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4gXHRcdGlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0Mzsgb2Zmc2V0KTtcbi1cdFx0aWYgKGN0eC1cdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUElQKSB7XG4mIzQzO1x0XHRpZiAoY3R4LVx1MDAzZXR1bi5pbm5lcl9wcm90byA9PSBJUFBST1RPX0lQSVApIHtcbiBcdFx0XHR0dXBsZS1cdTAwM2V0dW4uZHN0X3Y0LnNfYWRkciA9IGlwaC1cdTAwM2VkYWRkcjtcbiBcdFx0XHR0dXBsZS1cdTAwM2V0dW4uc3JjX3Y0LnNfYWRkciA9IGlwaC1cdTAwM2VzYWRkcjtcbi1cdFx0XHR0dXBsZS1cdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQSVA7XG4mIzQzO1x0XHRcdHR1cGxlLVx1MDAzZXR1bi5pbm5lcl9wcm90byA9IElQUFJPVE9fSVBJUDtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4gXHRcdGlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0Mzsgb2Zmc2V0KTtcbi1cdFx0aWYgKGN0eC1cdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUFY2KSB7XG4mIzQzO1x0XHRpZiAoY3R4LVx1MDAzZXR1bi5pbm5lcl9wcm90byA9PSBJUFBST1RPX0lQVjYpIHtcbiBcdFx0XHR0dXBsZS1cdTAwM2V0dW4uZHN0X3Y2ID0gaXA2aC1cdTAwM2VkYWRkcjtcbiBcdFx0XHR0dXBsZS1cdTAwM2V0dW4uc3JjX3Y2ID0gaXA2aC1cdTAwM2VzYWRkcjtcbi1cdFx0XHR0dXBsZS1cdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQVjY7XG4mIzQzO1x0XHRcdHR1cGxlLVx1MDAzZXR1bi5pbm5lcl9wcm90byA9IElQUFJPVE9fSVBWNjtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG5AQCAtMzI4LDcgJiM0MzszMjYsNyBAQCBzdGF0aWMgYm9vbCBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG8oc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0aWYgKGlwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX0lQSVApIHtcbi1cdFx0Y3R4LVx1MDAzZXR1bi5wcm90byA9IGlwaC1cdTAwM2Vwcm90b2NvbDtcbiYjNDM7XHRcdGN0eC1cdTAwM2V0dW4uaW5uZXJfcHJvdG8gPSBpcGgtXHUwMDNlcHJvdG9jb2w7XG4gXHRcdGN0eC1cdTAwM2V0dW4uaGRyX3NpemUgPSBzaXplO1xuIFx0XHRjdHgtXHUwMDNlb2Zmc2V0ICYjNDM7PSBjdHgtXHUwMDNldHVuLmhkcl9zaXplO1xuIFx0fVxuQEAgLTM1Myw3ICYjNDM7MzUxLDcgQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDZfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdGlmIChpcDZoLVx1MDAzZW5leHRoZHIgPT0gSVBQUk9UT19JUFY2KSB7XG4tXHRcdGN0eC1cdTAwM2V0dW4ucHJvdG8gPSBpcDZoLVx1MDAzZW5leHRoZHI7XG4mIzQzO1x0XHRjdHgtXHUwMDNldHVuLmlubmVyX3Byb3RvID0gaXA2aC1cdTAwM2VuZXh0aGRyO1xuIFx0XHRjdHgtXHUwMDNldHVuLmhkcl9zaXplID0gc2l6ZW9mKCppcDZoKTtcbiBcdFx0Y3R4LVx1MDAzZW9mZnNldCAmIzQzOz0gY3R4LVx1MDAzZXR1bi5oZHJfc2l6ZTtcbiBcdH1cbkBAIC0zNjcsOCAmIzQzOzM2NSw4IEBAIHN0YXRpYyBib29sIG5mX2Zsb3dfaXA2X3R1bm5lbF9wcm90byhzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIHN0YXRpYyB2b2lkIG5mX2Zsb3dfaXBfdHVubmVsX3BvcChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdGlmIChjdHgtXHUwMDNldHVuLnByb3RvICE9IElQUFJPVE9fSVBJUCBcdTAwMjZcdTAwMjZcbi1cdCAgICBjdHgtXHUwMDNldHVuLnByb3RvICE9IElQUFJPVE9fSVBWNilcbiYjNDM7XHRpZiAoY3R4LVx1MDAzZXR1bi5pbm5lcl9wcm90byAhPSBJUFBST1RPX0lQSVAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGN0eC1cdTAwM2V0dW4uaW5uZXJfcHJvdG8gIT0gSVBQUk9UT19JUFY2KVxuIFx0XHRyZXR1cm47XG4gXG4gXHRza2JfcHVsbChza2IsIGN0eC1cdTAwM2V0dW4uaGRyX3NpemUpO1xuQEAgLTM3NiwxMCAmIzQzOzM3NCwxMCBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X2lwX3R1bm5lbF9wb3Aoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiB9XG4gXG4gc3RhdGljIGJvb2wgbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgcHJvdG8pXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0X19iZTE2IGlubmVyX3Byb3RvID0gc2tiLVx1MDAzZXByb3RvY29sO1xuIFx0c3RydWN0IHZsYW5fZXRoaGRyICp2ZXRoO1xuJiM0MztcdF9fYmUxNiBldGhlcl90eXBlO1xuIFx0Ym9vbCByZXQgPSBmYWxzZTtcbiBcbiBcdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG5AQCAtMzg4LDIyICYjNDM7Mzg2LDI3IEBAIHN0YXRpYyBib29sIG5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0XHR2ZXRoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKXNrYl9tYWNfaGVhZGVyKHNrYik7XG4tXHRcdGlmICh2ZXRoLVx1MDAzZWhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gPT0gcHJvdG8pIHtcbi1cdFx0XHRjdHgtXHUwMDNlb2Zmc2V0ICYjNDM7PSBWTEFOX0hMRU47XG4tXHRcdFx0aW5uZXJfcHJvdG8gPSBwcm90bztcbi1cdFx0XHRyZXQgPSB0cnVlO1xuLVx0XHR9XG4mIzQzO1x0XHRjdHgtXHUwMDNlZXRoZXJfdHlwZSA9IHZldGgtXHUwMDNlaF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bztcbiYjNDM7XHRcdGN0eC1cdTAwM2VvZmZzZXQgJiM0Mzs9IFZMQU5fSExFTjtcbiYjNDM7XHRcdHJldCA9IHRydWU7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBodG9ucyhFVEhfUF9QUFBfU0VTKTpcbi1cdFx0aWYgKG5mX2Zsb3dfcHBwb2VfcHJvdG8oc2tiLCBcdTAwMjZpbm5lcl9wcm90bykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBpbm5lcl9wcm90byA9PSBwcm90bykge1xuLVx0XHRcdGN0eC1cdTAwM2VvZmZzZXQgJiM0Mzs9IFBQUE9FX1NFU19ITEVOO1xuLVx0XHRcdHJldCA9IHRydWU7XG4tXHRcdH1cbiYjNDM7XHRcdGlmICghbmZfZmxvd19wcHBvZV9wcm90byhza2IsIFx1MDAyNmV0aGVyX3R5cGUpKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0Y3R4LVx1MDAzZWV0aGVyX3R5cGUgPSBldGhlcl90eXBlO1xuJiM0MztcdFx0Y3R4LVx1MDAzZW9mZnNldCAmIzQzOz0gUFBQT0VfU0VTX0hMRU47XG4mIzQzO1x0XHRyZXQgPSB0cnVlO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4mIzQzO1x0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbiYjNDM7XHRcdGN0eC1cdTAwM2VldGhlcl90eXBlID0gc2tiLVx1MDAzZXByb3RvY29sO1xuIFx0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuLVx0c3dpdGNoIChpbm5lcl9wcm90bykge1xuJiM0MztcdHN3aXRjaCAoY3R4LVx1MDAzZWV0aGVyX3R5cGUpIHtcbiBcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuIFx0XHRyZXQgPSBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG8oY3R4LCBza2IpO1xuIFx0XHRicmVhaztcbkBAIC00NTUsOSAmIzQzOzQ1OCw2IEBAIG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiB7XG4gXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHR1cGxlID0ge307XG4gXG4tXHRpZiAoIW5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKGN0eCwgc2tiLCBodG9ucyhFVEhfUF9JUCkpKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbiBcdGlmIChuZl9mbG93X3R1cGxlX2lwKGN0eCwgc2tiLCBcdTAwMjZ0dXBsZSkgXHUwMDNjIDApXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuQEAgLTYxMSw3ICYjNDM7NjExLDcgQEAgc3RhdGljIGludCBuZl9mbG93X3R1bm5lbF9pcGlwX3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aXBoLVx1MDAzZXZlcnNpb25cdD0gNDtcbiBcdGlwaC1cdTAwM2VpaGxcdD0gc2l6ZW9mKCppcGgpIFx1MDAzZVx1MDAzZSAyO1xuIFx0aXBoLVx1MDAzZWZyYWdfb2ZmXHQ9IGlwX210dV9sb2NrZWQoXHUwMDI2cnQtXHUwMDNlZHN0KSA/IDAgOiBmcmFnX29mZjtcbi1cdGlwaC1cdTAwM2Vwcm90b2NvbFx0PSB0dXBsZS1cdTAwM2V0dW4ubDNfcHJvdG87XG4mIzQzO1x0aXBoLVx1MDAzZXByb3RvY29sXHQ9IHR1cGxlLVx1MDAzZXR1bi5pbm5lcl9wcm90bztcbiBcdGlwaC1cdTAwM2V0b3NcdD0gdG9zO1xuIFx0aXBoLVx1MDAzZWRhZGRyXHQ9IHR1cGxlLVx1MDAzZXR1bi5zcmNfdjQuc19hZGRyO1xuIFx0aXBoLVx1MDAzZXNhZGRyXHQ9IHR1cGxlLVx1MDAzZXR1bi5kc3RfdjQuc19hZGRyO1xuQEAgLTc5NCwzMyAmIzQzOzc5NCwxNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG5mX2Zsb3dfcXVldWVfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gTkZfU1RPTEVOO1xuIH1cbiBcbi11bnNpZ25lZCBpbnRcbi1uZl9mbG93X29mZmxvYWRfaXBfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbiYjNDM7c3RhdGljIGludCBuZl9mbG93X3F1ZXVlX3htaXQ0KHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXG4mIzQzO1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4ge1xuLVx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoO1xuLVx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9IHByaXY7XG4gXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZTtcbiBcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7XG4tXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCBjdHggPSB7XG4tXHRcdC5pblx0PSBzdGF0ZS1cdTAwM2Vpbixcbi1cdH07XG4gXHRzdHJ1Y3QgbmZfZmxvd194bWl0IHhtaXQgPSB7fTtcbiBcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XG4gXHRzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDtcbiBcdHN0cnVjdCBydGFibGUgKnJ0O1xuIFx0X19iZTMyIGlwX2RhZGRyO1xuLVx0aW50IHJldDtcbi1cbi1cdHR1cGxlaGFzaCA9IG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCBza2IpO1xuLVx0aWYgKCF0dXBsZWhhc2gpXG4tXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4tXG4tXHRyZXQgPSBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiBORl9EUk9QO1xuLVx0ZWxzZSBpZiAocmV0ID09IDApXG4tXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRpZiAodW5saWtlbHkodHVwbGVoYXNoLVx1MDAzZXR1cGxlLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9YRlJNKSkge1xuIFx0XHRydCA9IGRzdF9ydGFibGUodHVwbGVoYXNoLVx1MDAzZXR1cGxlLmRzdF9jYWNoZSk7XG5AQCAtODczLDYgJiM0Mzs4NTcsMzYgQEAgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdHJldHVybiBuZl9mbG93X3F1ZXVlX3htaXQoc3RhdGUtXHUwMDNlbmV0LCBza2IsIFx1MDAyNnhtaXQpO1xuIH1cbiYjNDM7XG4mIzQzO3Vuc2lnbmVkIGludFxuJiM0MztuZl9mbG93X29mZmxvYWRfaXBfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2g7XG4mIzQzO1x0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9IHByaXY7XG4mIzQzO1x0c3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggY3R4ID0ge1xuJiM0MztcdFx0LmluXHQ9IHN0YXRlLVx1MDAzZWluLFxuJiM0MztcdH07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChcdTAwMjZjdHgsIHNrYikpXG4mIzQzO1x0XHRyZXR1cm4gTkZfQUNDRVBUO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoY3R4LmV0aGVyX3R5cGUgIT0gaHRvbnMoRVRIX1BfSVApKSlcbiYjNDM7XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4mIzQzO1xuJiM0MztcdHR1cGxlaGFzaCA9IG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCBza2IpO1xuJiM0MztcdGlmICghdHVwbGVoYXNoKVxuJiM0MztcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBORl9EUk9QO1xuJiM0MztcdGVsc2UgaWYgKHJldCA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG5mX2Zsb3dfcXVldWVfeG1pdDQoc2tiLCB0dXBsZWhhc2gsIHN0YXRlKTtcbiYjNDM7fVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKTtcbiBcbiBzdGF0aWMgdm9pZCBuZl9mbG93X25hdF9pcHY2X3RjcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdGhvZmYsXG5AQCAtMTEwMSw0MiAmIzQzOzExMTUsMjMgQEAgbmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4ge1xuIFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB0dXBsZSA9IHt9O1xuIFxuLVx0aWYgKCFuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChjdHgsIHNrYiwgaHRvbnMoRVRIX1BfSVBWNikpKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbiBcdGlmIChuZl9mbG93X3R1cGxlX2lwdjYoY3R4LCBza2IsIFx1MDAyNnR1cGxlKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCBcdTAwMjZ0dXBsZSk7XG4gfVxuIFxuLXVuc2lnbmVkIGludFxuLW5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHQgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbiYjNDM7c3RhdGljIGludCBuZl9mbG93X3F1ZXVlX3htaXQ2KHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXG4mIzQzO1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4ge1xuLVx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoO1xuLVx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9IHByaXY7XG4gXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZTtcbiBcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7XG4tXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCBjdHggPSB7XG4tXHRcdC5pblx0PSBzdGF0ZS1cdTAwM2Vpbixcbi1cdH07XG4gXHRzdHJ1Y3QgbmZfZmxvd194bWl0IHhtaXQgPSB7fTtcbiBcdHN0cnVjdCBpbjZfYWRkciAqaXA2X2RhZGRyO1xuIFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcbiBcdHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoO1xuIFx0c3RydWN0IHJ0Nl9pbmZvICpydDtcbi1cdGludCByZXQ7XG4tXG4tXHR0dXBsZWhhc2ggPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXAoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCBza2IpO1xuLVx0aWYgKHR1cGxlaGFzaCA9PSBOVUxMKVxuLVx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuLVxuLVx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiBORl9EUk9QO1xuLVx0ZWxzZSBpZiAocmV0ID09IDApXG4tXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRpZiAodW5saWtlbHkodHVwbGVoYXNoLVx1MDAzZXR1cGxlLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9YRlJNKSkge1xuIFx0XHRydCA9IGRzdF9ydDZfaW5mbyh0dXBsZWhhc2gtXHUwMDNldHVwbGUuZHN0X2NhY2hlKTtcbkBAIC0xMTkwLDQgJiM0MzsxMTg1LDM0IEBAIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdHJldHVybiBuZl9mbG93X3F1ZXVlX3htaXQoc3RhdGUtXHUwMDNlbmV0LCBza2IsIFx1MDAyNnhtaXQpO1xuIH1cbiYjNDM7XG4mIzQzO3Vuc2lnbmVkIGludFxuJiM0MztuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdCAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoO1xuJiM0MztcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUgPSBwcml2O1xuJiM0MztcdHN0cnVjdCBuZl9mbG93dGFibGVfY3R4IGN0eCA9IHtcbiYjNDM7XHRcdC5pblx0PSBzdGF0ZS1cdTAwM2VpbixcbiYjNDM7XHR9O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woXHUwMDI2Y3R4LCBza2IpKVxuJiM0MztcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGN0eC5ldGhlcl90eXBlICE9IGh0b25zKEVUSF9QX0lQVjYpKSlcbiYjNDM7XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4mIzQzO1xuJiM0MztcdHR1cGxlaGFzaCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHNrYik7XG4mIzQzO1x0aWYgKCF0dXBsZWhhc2gpXG4mIzQzO1x0XHRyZXR1cm4gTkZfQUNDRVBUO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gTkZfRFJPUDtcbiYjNDM7XHRlbHNlIGlmIChyZXQgPT0gMClcbiYjNDM7XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBuZl9mbG93X3F1ZXVlX3htaXQ2KHNrYiwgdHVwbGVoYXNoLCBzdGF0ZSk7XG4mIzQzO31cbiBFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xuaW5kZXggNTYyMTliMDJlMTIyNy4uMWU1NTY0NGYyZWRiOCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbkBAIC00NCwxMSAmIzQzOzQ0LDE2IEBAIHN0YXRpYyBib29sIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tXHRcdFx0XHQgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsIHU4ICpoYSxcbiYjNDM7XHRcdFx0XHQgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4mIzQzO1x0XHRcdFx0ICAgICB1OCAqaGEsIF9fYmUxNiBldGhlcl90eXBlLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbiB7XG4gXHRjb25zdCB2b2lkICpkYWRkciA9IFx1MDAyNmN0LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTM7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZHN0X2NhY2hlLVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XG4mIzQzO1x0XHQuZGV2ID0gZGV2LFxuJiM0MztcdFx0LmV0aGVyX3R5cGUgPSBldGhlcl90eXBlLFxuJiM0MztcdH07XG4gXHRzdHJ1Y3QgbmVpZ2hib3VyICpuO1xuIFx0dTggbnVkX3N0YXRlO1xuIFxuQEAgLTcxLDcgJiM0Mzs3Niw5IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfY2FjaGUsXG4gXHRcdHJldHVybiAtMTtcbiBcbiBvdXQ6XG4tXHRyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgaGEsIHN0YWNrKTtcbiYjNDM7XHRldGhlcl9hZGRyX2NvcHkoY3R4LmRhZGRyLCBoYSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoXHUwMDI2Y3R4LCBzdGFjayk7XG4gfVxuIFxuIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHtcbkBAIC0xMjYsNyAmIzQzOzEzMyw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXG4gXHRcdFx0XHRpbmZvLVx1MDAzZXR1bi5zcmNfdjYgPSBwYXRoLVx1MDAzZXR1bi5zcmNfdjY7XG4gXHRcdFx0XHRpbmZvLVx1MDAzZXR1bi5kc3RfdjYgPSBwYXRoLVx1MDAzZXR1bi5kc3RfdjY7XG4tXHRcdFx0XHRpbmZvLVx1MDAzZXR1bi5sM19wcm90byA9IHBhdGgtXHUwMDNldHVuLmwzX3Byb3RvO1xuJiM0MztcdFx0XHRcdGluZm8tXHUwMDNldHVuLmlubmVyX3Byb3RvID0gcGF0aC1cdTAwM2V0dW4uaW5uZXJfcHJvdG87XG4gXHRcdFx0XHRpbmZvLVx1MDAzZXR1bl9kc3QgPSBwYXRoLVx1MDAzZXR1bi5kc3Q7XG4gXHRcdFx0XHRpbmZvLVx1MDAzZW51bV90dW5zJiM0MzsmIzQzOztcbiBcdFx0XHR9IGVsc2Uge1xuQEAgLTIyMyw3ICYjNDM7MjMwLDcgQEAgc3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdHVuc2lnbmVkIGNoYXIgaGFbRVRIX0FMRU5dO1xuIFx0aW50IGk7XG4gXG4tXHRpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChkc3QsIGN0LCBkaXIsIGhhLCBcdTAwMjZzdGFjaykgXHUwMDNjIDAgfHxcbiYjNDM7XHRpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChkc3QsIGN0LCBkaXIsIGhhLCBwa3QtXHUwMDNlZXRoZXJ0eXBlLCBcdTAwMjZzdGFjaykgXHUwMDNjIDAgfHxcbiBcdCAgICBuZnRfZGV2X3BhdGhfaW5mbyhcdTAwMjZzdGFjaywgXHUwMDI2aW5mbywgaGEsIGZ0KSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG5AQCAtMjM4LDcgJiM0MzsyNDUsNyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0aWYgKGluZm8ubnVtX3R1bnMpIHtcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLnNyY192NiA9IGluZm8udHVuLmRzdF92NjtcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLmRzdF92NiA9IGluZm8udHVuLnNyY192Njtcbi1cdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLmwzX3Byb3RvID0gaW5mby50dW4ubDNfcHJvdG87XG4mIzQzO1x0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi50dW4uaW5uZXJfcHJvdG8gPSBpbmZvLnR1bi5pbm5lcl9wcm90bztcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4ubnVtX3R1bnMgPSBpbmZvLm51bV90dW5zO1xuIFx0XHRkc3RfcmVsZWFzZShyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLmRzdCk7XG4gXHRcdHJvdXRlLVx1MDAzZXR1cGxlW2Rpcl0uZHN0ID0gaW5mby50dW5fZHN0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFX0lORVQmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtORVRfSVBJUCYjMzQ7LAogICAgJiMzNDtJUFY2X1RVTk5FTCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2smIzM0OywKICAgICYjMzQ7bmZ0X2Zsb3dfcm91dGUmIzM0OywKICAgICYjMzQ7ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBvZmZsb2FkIHBhdGggdG8gcHJvcGVybHkgaGFuZGxlIGlubmVyIHByb3RvY29scyBhbmQgZXRoZXJfdHlwZSwgZXNwZWNpYWxseSBmb3IgSVAtaW4tSVAgYW5kIElQdjYgdHVubmVscy4gSXQgY2hhbmdlcyBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCB0byB0YWtlIGEgY29udGV4dCBzdHJ1Y3QgaW5zdGVhZCBvZiBqdXN0IHRoZSBkZXZpY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3MsIGFuZCB1cGRhdGVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBob29rcyB0byB1c2UgdGhpcyBjb250ZXh0IGFuZCBjb3JyZWN0bHkgaWRlbnRpZnkgZW5jYXBzdWxhdGVkIHByb3RvY29scy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGQ2YWEwOTBmOGQ1OGYxMTg5OTlhMzJkM2M1MjhmMTY4Yzk1YTdlZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMDI6Mjg6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYwppbmRleCBhMDNhZjk3NTA1NzMxLi45MjYxMTgwMjgwMWVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMKQEAgLTI4MywxNCAmIzQzOzI4MywxOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwKIAkJCQkgICAgc3RydWN0IGFpcm9oYV93ZG1hX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayBzdGFjazsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0gewomIzQzOwkJLmRldiA9IGRldiwKJiM0MzsJfTsKIAlzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoOwogCWludCBlcnI7CiAKIAlpZiAoIWRldikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKJiM0MzsJZXRoZXJfYWRkcl9jb3B5KGN0eC5kYWRkciwgYWRkcik7CiYjNDM7CiAJcmN1X3JlYWRfbG9jaygpOwotCWVyciA9IGRldl9maWxsX2ZvcndhcmRfcGF0aChkZXYsIGFkZHIsICZhbXA7c3RhY2spOwomIzQzOwllcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoJmFtcDtjdHgsICZhbXA7c3RhY2spOwogCXJjdV9yZWFkX3VubG9jaygpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jCmluZGV4IDc3MWQ5MTE4Zjk0YWQuLjk5YjI4YWFhN2NjNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jCkBAIC05Miw2ICYjNDM7OTIsOSBAQCBzdGF0aWMgaW50CiBtdGtfZmxvd19nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLCBzdHJ1Y3QgbXRrX3dkbWFfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrIHN0YWNrOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7CiYjNDM7CQkuZGV2ID0gZGV2LAomIzQzOwl9OwogCXN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7CiAJaW50IGVycjsKIApAQCAtMTAxLDggJiM0MzsxMDQsMTAgQEAgbXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwgc3RydWN0IG10a193ZG1hX2kKIAlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX05FVF9NRURJQVRFS19TT0NfV0VEKSkKIAkJcmV0dXJuIC0xOwogCiYjNDM7CWV0aGVyX2FkZHJfY29weShjdHguZGFkZHIsIGFkZHIpOwomIzQzOwogCXJjdV9yZWFkX2xvY2soKTsKLQllcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCAmYW1wO3N0YWNrKTsKJiM0MzsJZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKCZhbXA7Y3R4LCAmYW1wO3N0YWNrKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggNjJjZmFkN2U2Yjc5YS4uNjhjY2I1ODY4MDcwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC05MDIsNyAmIzQzOzkwMiw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggewogCQkJCXN0cnVjdCBpbjZfYWRkcglkc3RfdjY7CiAJCQl9OwogCi0JCQl1OAlsM19wcm90bzsKJiM0MzsJCQl1OAlpbm5lcl9wcm90bzsKIAkJfSB0dW47CiAJCXN0cnVjdCB7CiAJCQllbnVtIHsKQEAgLTkzOSw2ICYjNDM7OTM5LDcgQEAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayB7CiBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCB7CiAJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAl1OAkJCWRhZGRyW0VUSF9BTEVOXTsKJiM0MzsJX19iZTE2CQkJZXRoZXJfdHlwZTsKIAogCWludAkJCW51bV92bGFuczsKIAlzdHJ1Y3QgewpAQCAtMzQyNiw3ICYjNDM7MzQyNyw3IEBAIHZvaWQgZGV2X3JlbW92ZV9vZmZsb2FkKHN0cnVjdCBwYWNrZXRfb2ZmbG9hZCAqcG8pOwogCiBpbnQgZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgZGV2X2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwotaW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsCiYjNDM7aW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LAogCQkJICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayk7CiB2b2lkIGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTsKIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0X2J5X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oCmluZGV4IGEwOTBlYzNmZmVmMmUuLmYyZTI3NzFmMTg4ZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaApAQCAtMTE3LDcgJiM0MzsxMTcsNyBAQCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCB7CiAJCXN0cnVjdCBpbjZfYWRkcglkc3RfdjY7CiAJfTsKIAotCXU4CWwzX3Byb3RvOwomIzQzOwl1OAlpbm5lcl9wcm90bzsKIH07CiAKIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCBlNTBlZDY3N2RlNzI1Li4xM2RmZDIxMTNhNWFiIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtNzY5LDM1ICYjNDM7NzY5LDMxIEBAIHZvaWQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZSk7CiAKLWludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLAomIzQzO2ludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCwKIAkJCSAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spCiB7CiAJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmxhc3RfZGV2OwotCXN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IGN0eCA9IHsKLQkJLmRldgk9IGRldiwKLQl9OwogCXN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7CiAJaW50IHJldCA9IDA7CiAKLQltZW1jcHkoY3R4LmRhZGRyLCBkYWRkciwgc2l6ZW9mKGN0eC5kYWRkcikpOwogCXN0YWNrLSZndDtudW1fcGF0aHMgPSAwOwotCXdoaWxlIChjdHguZGV2ICZhbXA7JmFtcDsgY3R4LmRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX2ZpbGxfZm9yd2FyZF9wYXRoKSB7Ci0JCWxhc3RfZGV2ID0gY3R4LmRldjsKJiM0MzsJd2hpbGUgKGN0eC0mZ3Q7ZGV2ICZhbXA7JmFtcDsgY3R4LSZndDtkZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19maWxsX2ZvcndhcmRfcGF0aCkgewomIzQzOwkJbGFzdF9kZXYgPSBjdHgtJmd0O2RldjsKIAkJcGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7CiAJCWlmICghcGF0aCkKIAkJCWdvdG8gZXJyX291dDsKIAogCQltZW1zZXQocGF0aCwgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGgpKTsKLQkJcmV0ID0gY3R4LmRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX2ZpbGxfZm9yd2FyZF9wYXRoKCZhbXA7Y3R4LCBwYXRoKTsKJiM0MzsJCXJldCA9IGN0eC0mZ3Q7ZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoKTsKIAkJaWYgKHJldCAmbHQ7IDApCiAJCQlnb3RvIGVycl9vdXQ7CiAKIAkJc3RhY2stJmd0O251bV9wYXRocyYjNDM7JiM0Mzs7Ci0JCWlmIChXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LmRldikpCiYjNDM7CQlpZiAoV0FSTl9PTl9PTkNFKGxhc3RfZGV2ID09IGN0eC0mZ3Q7ZGV2KSkKIAkJCWdvdG8gZXJyX291dDsKIAl9CiAKLQlpZiAoIWN0eC5kZXYpCiYjNDM7CWlmICghY3R4LSZndDtkZXYpCiAJCXJldHVybiByZXQ7CiAKIAlwYXRoID0gZGV2X2Z3ZF9wYXRoKHN0YWNrKTsKQEAgLTgwNSw3ICYjNDM7ODAxLDcgQEAgaW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsCiAJCWdvdG8gZXJyX291dDsKIAogCXBhdGgtJmd0O3R5cGUgPSBERVZfUEFUSF9FVEhFUk5FVDsKLQlwYXRoLSZndDtkZXYgPSBjdHguZGV2OwomIzQzOwlwYXRoLSZndDtkZXYgPSBjdHgtJmd0O2RldjsKIAlzdGFjay0mZ3Q7bnVtX3BhdGhzJiM0MzsmIzQzOzsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBpcC5jIGIvbmV0L2lwdjQvaXBpcC5jCmluZGV4IGZiN2Q5NmY5OWIwNmIuLjE2MzAzMjVjNzdkMzQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwaXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcGlwLmMKQEAgLTM2MCw2ICYjNDM7MzYwLDkgQEAgc3RhdGljIGludCBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsCiAJY29uc3Qgc3RydWN0IGlwaGRyICp0aXBoID0gJmFtcDt0dW5uZWwtJmd0O3Bhcm1zLmlwaDsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKIAomIzQzOwlpZiAoY3R4LSZndDtldGhlcl90eXBlICE9IGNwdV90b19iZTE2KEVUSF9QX0lQKSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKIAlpZiAodHVubmVsLSZndDtjb2xsZWN0X21kKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKQEAgLTM3NSw3ICYjNDM7Mzc4LDcgQEAgc3RhdGljIGludCBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsCiAJcGF0aC0mZ3Q7dHlwZSA9IERFVl9QQVRIX1RVTjsKIAlwYXRoLSZndDt0dW4uc3JjX3Y0LnNfYWRkciA9IHRpcGgtJmd0O3NhZGRyOwogCXBhdGgtJmd0O3R1bi5kc3RfdjQuc19hZGRyID0gdGlwaC0mZ3Q7ZGFkZHI7Ci0JcGF0aC0mZ3Q7dHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUElQOwomIzQzOwlwYXRoLSZndDt0dW4uaW5uZXJfcHJvdG8gPSBJUFBST1RPX0lQSVA7CiAJcGF0aC0mZ3Q7dHVuLmRzdCA9ICZhbXA7cnQtJmd0O2RzdDsKIAlwYXRoLSZndDtkZXYgPSBjdHgtJmd0O2RldjsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCmluZGV4IGQ4MDAyMGJjMjYyMGUuLjdiNTQ5MTkyMzJiYTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKQEAgLTE4NDksNiAmIzQzOzE4NDksOSBAQCBzdGF0aWMgaW50IGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCwKIAlzdHJ1Y3QgZmxvd2k2IGZsNjsKIAlpbnQgZXJyOwogCiYjNDM7CWlmIChjdHgtJmd0O2V0aGVyX3R5cGUgIT0gY3B1X3RvX2JlMTYoRVRIX1BfSVBWNikpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiAJaWYgKHQtJmd0O3Bhcm1zLmZsYWdzICZhbXA7IChJUDZfVE5MX0ZfVVNFX09SSUdfVENMQVNTIHwKIAkJCSAgICAgIElQNl9UTkxfRl9VU0VfT1JJR19GTE9XTEFCRUwgfAogCQkJICAgICAgSVA2X1ROTF9GX1VTRV9PUklHX0ZXTUFSSykpCkBAIC0xODY5LDcgJiM0MzsxODcyLDcgQEAgc3RhdGljIGludCBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsCiAJCXBhdGgtJmd0O3R5cGUgPSBERVZfUEFUSF9UVU47CiAJCXBhdGgtJmd0O3R1bi5zcmNfdjYgPSBmbDYuc2FkZHI7CiAJCXBhdGgtJmd0O3R1bi5kc3RfdjYgPSBmbDYuZGFkZHI7Ci0JCXBhdGgtJmd0O3R1bi5sM19wcm90byA9IElQUFJPVE9fSVBWNjsKJiM0MzsJCXBhdGgtJmd0O3R1bi5pbm5lcl9wcm90byA9IElQUFJPVE9fSVBWNjsKIAkJcGF0aC0mZ3Q7dHVuLmRzdCA9IGRzdDsKIAkJcGF0aC0mZ3Q7ZGV2ID0gY3R4LSZndDtkZXY7CiAJCWN0eC0mZ3Q7ZGV2ID0gZHN0LSZndDtkZXY7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jCmluZGV4IDBiMzE0YjEwZTcwNWEuLmFmNTM0MDAwYTI4N2EgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jCkBAIC0xNDcsMTMgJiM0MzsxNDcsMTQgQEAgc3RhdGljIGJvb2wgaXBfaGFzX29wdGlvbnModW5zaWduZWQgaW50IHRob2ZmKQogCiBzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCB7CiAJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UJKmluOwomIzQzOwlfX2JlMTYJCQlldGhlcl90eXBlOwogCXUzMgkJCW9mZnNldDsKIAl1MzIJCQloZHJzaXplOwogCXN0cnVjdCB7CiAJCS8qIFR1bm5lbCBJUCBoZWFkZXIgc2l6ZSAqLwogCQl1MzIgaGRyX3NpemU7CiAJCS8qIElQIHR1bm5lbCBwcm90b2NvbCAqLwotCQl1OCBwcm90bzsKJiM0MzsJCXU4IGlubmVyX3Byb3RvOwogCX0gdHVuOwogfTsKIApAQCAtMTYxLDcgJiM0MzsxNjIsNiBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X3R1cGxlX2VuY2FwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiAJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQlzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSkKIHsKLQlfX2JlMTYgaW5uZXJfcHJvdG8gPSBza2ItJmd0O3Byb3RvY29sOwogCXN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aDsKIAlzdHJ1Y3QgcHBwb2VfaGRyICpwaGRyOwogCXN0cnVjdCBpcHY2aGRyICppcDZoOwpAQCAtMTc5LDMzICYjNDM7MTc5LDMxIEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfdHVwbGVfZW5jYXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAkJdmV0aCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpOwogCQl0dXBsZS0mZ3Q7ZW5jYXBbaV0uaWQgPSBudG9ocyh2ZXRoLSZndDtoX3ZsYW5fVENJKTsKIAkJdHVwbGUtJmd0O2VuY2FwW2ldLnByb3RvID0gc2tiLSZndDtwcm90b2NvbDsKLQkJaW5uZXJfcHJvdG8gPSB2ZXRoLSZndDtoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvOwogCQlvZmZzZXQgJiM0Mzs9IFZMQU5fSExFTjsKIAkJYnJlYWs7CiAJY2FzZSBodG9ucyhFVEhfUF9QUFBfU0VTKToKIAkJcGhkciA9IChzdHJ1Y3QgcHBwb2VfaGRyICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7CiAJCXR1cGxlLSZndDtlbmNhcFtpXS5pZCA9IG50b2hzKHBoZHItJmd0O3NpZCk7CiAJCXR1cGxlLSZndDtlbmNhcFtpXS5wcm90byA9IHNrYi0mZ3Q7cHJvdG9jb2w7Ci0JCWlubmVyX3Byb3RvID0gKigoX19iZTE2ICopKHBoZHIgJiM0MzsgMSkpOwogCQlvZmZzZXQgJiM0Mzs9IFBQUE9FX1NFU19ITEVOOwogCQlicmVhazsKIAl9CiAKLQlzd2l0Y2ggKGlubmVyX3Byb3RvKSB7CiYjNDM7CXN3aXRjaCAoY3R4LSZndDtldGhlcl90eXBlKSB7CiAJY2FzZSBodG9ucyhFVEhfUF9JUCk6CiAJCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0Mzsgb2Zmc2V0KTsKLQkJaWYgKGN0eC0mZ3Q7dHVuLnByb3RvID09IElQUFJPVE9fSVBJUCkgewomIzQzOwkJaWYgKGN0eC0mZ3Q7dHVuLmlubmVyX3Byb3RvID09IElQUFJPVE9fSVBJUCkgewogCQkJdHVwbGUtJmd0O3R1bi5kc3RfdjQuc19hZGRyID0gaXBoLSZndDtkYWRkcjsKIAkJCXR1cGxlLSZndDt0dW4uc3JjX3Y0LnNfYWRkciA9IGlwaC0mZ3Q7c2FkZHI7Ci0JCQl0dXBsZS0mZ3Q7dHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUElQOwomIzQzOwkJCXR1cGxlLSZndDt0dW4uaW5uZXJfcHJvdG8gPSBJUFBST1RPX0lQSVA7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBodG9ucyhFVEhfUF9JUFY2KToKIAkJaXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBvZmZzZXQpOwotCQlpZiAoY3R4LSZndDt0dW4ucHJvdG8gPT0gSVBQUk9UT19JUFY2KSB7CiYjNDM7CQlpZiAoY3R4LSZndDt0dW4uaW5uZXJfcHJvdG8gPT0gSVBQUk9UT19JUFY2KSB7CiAJCQl0dXBsZS0mZ3Q7dHVuLmRzdF92NiA9IGlwNmgtJmd0O2RhZGRyOwogCQkJdHVwbGUtJmd0O3R1bi5zcmNfdjYgPSBpcDZoLSZndDtzYWRkcjsKLQkJCXR1cGxlLSZndDt0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQVjY7CiYjNDM7CQkJdHVwbGUtJmd0O3R1bi5pbm5lcl9wcm90byA9IElQUFJPVE9fSVBWNjsKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMzI4LDcgJiM0MzszMjYsNyBAQCBzdGF0aWMgYm9vbCBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG8oc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAkJcmV0dXJuIGZhbHNlOwogCiAJaWYgKGlwaC0mZ3Q7cHJvdG9jb2wgPT0gSVBQUk9UT19JUElQKSB7Ci0JCWN0eC0mZ3Q7dHVuLnByb3RvID0gaXBoLSZndDtwcm90b2NvbDsKJiM0MzsJCWN0eC0mZ3Q7dHVuLmlubmVyX3Byb3RvID0gaXBoLSZndDtwcm90b2NvbDsKIAkJY3R4LSZndDt0dW4uaGRyX3NpemUgPSBzaXplOwogCQljdHgtJmd0O29mZnNldCAmIzQzOz0gY3R4LSZndDt0dW4uaGRyX3NpemU7CiAJfQpAQCAtMzUzLDcgJiM0MzszNTEsNyBAQCBzdGF0aWMgYm9vbCBuZl9mbG93X2lwNl90dW5uZWxfcHJvdG8oc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIAkJcmV0dXJuIGZhbHNlOwogCiAJaWYgKGlwNmgtJmd0O25leHRoZHIgPT0gSVBQUk9UT19JUFY2KSB7Ci0JCWN0eC0mZ3Q7dHVuLnByb3RvID0gaXA2aC0mZ3Q7bmV4dGhkcjsKJiM0MzsJCWN0eC0mZ3Q7dHVuLmlubmVyX3Byb3RvID0gaXA2aC0mZ3Q7bmV4dGhkcjsKIAkJY3R4LSZndDt0dW4uaGRyX3NpemUgPSBzaXplb2YoKmlwNmgpOwogCQljdHgtJmd0O29mZnNldCAmIzQzOz0gY3R4LSZndDt0dW4uaGRyX3NpemU7CiAJfQpAQCAtMzY3LDggJiM0MzszNjUsOCBAQCBzdGF0aWMgYm9vbCBuZl9mbG93X2lwNl90dW5uZWxfcHJvdG8oc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCwKIHN0YXRpYyB2b2lkIG5mX2Zsb3dfaXBfdHVubmVsX3BvcChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LAogCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpZiAoY3R4LSZndDt0dW4ucHJvdG8gIT0gSVBQUk9UT19JUElQICZhbXA7JmFtcDsKLQkgICAgY3R4LSZndDt0dW4ucHJvdG8gIT0gSVBQUk9UT19JUFY2KQomIzQzOwlpZiAoY3R4LSZndDt0dW4uaW5uZXJfcHJvdG8gIT0gSVBQUk9UT19JUElQICZhbXA7JmFtcDsKJiM0MzsJICAgIGN0eC0mZ3Q7dHVuLmlubmVyX3Byb3RvICE9IElQUFJPVE9fSVBWNikKIAkJcmV0dXJuOwogCiAJc2tiX3B1bGwoc2tiLCBjdHgtJmd0O3R1bi5oZHJfc2l6ZSk7CkBAIC0zNzYsMTAgJiM0MzszNzQsMTAgQEAgc3RhdGljIHZvaWQgbmZfZmxvd19pcF90dW5uZWxfcG9wKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiB9CiAKIHN0YXRpYyBib29sIG5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCi0JCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiBwcm90bykKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JX19iZTE2IGlubmVyX3Byb3RvID0gc2tiLSZndDtwcm90b2NvbDsKIAlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZldGg7CiYjNDM7CV9fYmUxNiBldGhlcl90eXBlOwogCWJvb2wgcmV0ID0gZmFsc2U7CiAKIAlzd2l0Y2ggKHNrYi0mZ3Q7cHJvdG9jb2wpIHsKQEAgLTM4OCwyMiAmIzQzOzM4NiwyNyBAQCBzdGF0aWMgYm9vbCBuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LAogCQkJcmV0dXJuIGZhbHNlOwogCiAJCXZldGggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopc2tiX21hY19oZWFkZXIoc2tiKTsKLQkJaWYgKHZldGgtJmd0O2hfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gPT0gcHJvdG8pIHsKLQkJCWN0eC0mZ3Q7b2Zmc2V0ICYjNDM7PSBWTEFOX0hMRU47Ci0JCQlpbm5lcl9wcm90byA9IHByb3RvOwotCQkJcmV0ID0gdHJ1ZTsKLQkJfQomIzQzOwkJY3R4LSZndDtldGhlcl90eXBlID0gdmV0aC0mZ3Q7aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bzsKJiM0MzsJCWN0eC0mZ3Q7b2Zmc2V0ICYjNDM7PSBWTEFOX0hMRU47CiYjNDM7CQlyZXQgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIGh0b25zKEVUSF9QX1BQUF9TRVMpOgotCQlpZiAobmZfZmxvd19wcHBvZV9wcm90byhza2IsICZhbXA7aW5uZXJfcHJvdG8pICZhbXA7JmFtcDsKLQkJICAgIGlubmVyX3Byb3RvID09IHByb3RvKSB7Ci0JCQljdHgtJmd0O29mZnNldCAmIzQzOz0gUFBQT0VfU0VTX0hMRU47Ci0JCQlyZXQgPSB0cnVlOwotCQl9CiYjNDM7CQlpZiAoIW5mX2Zsb3dfcHBwb2VfcHJvdG8oc2tiLCAmYW1wO2V0aGVyX3R5cGUpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCWN0eC0mZ3Q7ZXRoZXJfdHlwZSA9IGV0aGVyX3R5cGU7CiYjNDM7CQljdHgtJmd0O29mZnNldCAmIzQzOz0gUFBQT0VfU0VTX0hMRU47CiYjNDM7CQlyZXQgPSB0cnVlOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgaHRvbnMoRVRIX1BfSVApOgomIzQzOwljYXNlIGh0b25zKEVUSF9QX0lQVjYpOgomIzQzOwkJY3R4LSZndDtldGhlcl90eXBlID0gc2tiLSZndDtwcm90b2NvbDsKIAkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAJfQogCi0Jc3dpdGNoIChpbm5lcl9wcm90bykgewomIzQzOwlzd2l0Y2ggKGN0eC0mZ3Q7ZXRoZXJfdHlwZSkgewogCWNhc2UgaHRvbnMoRVRIX1BfSVApOgogCQlyZXQgPSBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG8oY3R4LCBza2IpOwogCQlicmVhazsKQEAgLTQ1NSw5ICYjNDM7NDU4LDYgQEAgbmZfZmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LAogewogCXN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTsKIAotCWlmICghbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woY3R4LCBza2IsIGh0b25zKEVUSF9QX0lQKSkpCi0JCXJldHVybiBOVUxMOwotCiAJaWYgKG5mX2Zsb3dfdHVwbGVfaXAoY3R4LCBza2IsICZhbXA7dHVwbGUpICZsdDsgMCkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTYxMSw3ICYjNDM7NjExLDcgQEAgc3RhdGljIGludCBuZl9mbG93X3R1bm5lbF9pcGlwX3B1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlwaC0mZ3Q7dmVyc2lvbgk9IDQ7CiAJaXBoLSZndDtpaGwJPSBzaXplb2YoKmlwaCkgJmd0OyZndDsgMjsKIAlpcGgtJmd0O2ZyYWdfb2ZmCT0gaXBfbXR1X2xvY2tlZCgmYW1wO3J0LSZndDtkc3QpID8gMCA6IGZyYWdfb2ZmOwotCWlwaC0mZ3Q7cHJvdG9jb2wJPSB0dXBsZS0mZ3Q7dHVuLmwzX3Byb3RvOwomIzQzOwlpcGgtJmd0O3Byb3RvY29sCT0gdHVwbGUtJmd0O3R1bi5pbm5lcl9wcm90bzsKIAlpcGgtJmd0O3Rvcwk9IHRvczsKIAlpcGgtJmd0O2RhZGRyCT0gdHVwbGUtJmd0O3R1bi5zcmNfdjQuc19hZGRyOwogCWlwaC0mZ3Q7c2FkZHIJPSB0dXBsZS0mZ3Q7dHVuLmRzdF92NC5zX2FkZHI7CkBAIC03OTQsMzMgJiM0Mzs3OTQsMTcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBuZl9mbG93X3F1ZXVlX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXJldHVybiBORl9TVE9MRU47CiB9CiAKLXVuc2lnbmVkIGludAotbmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCWNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSkKJiM0MztzdGF0aWMgaW50IG5mX2Zsb3dfcXVldWVfeG1pdDQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkgICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpCiB7Ci0Jc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoOwotCXN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUgPSBwcml2OwogCXN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm90aGVyX3R1cGxlOwogCWVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7Ci0Jc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggY3R4ID0gewotCQkuaW4JPSBzdGF0ZS0mZ3Q7aW4sCi0JfTsKIAlzdHJ1Y3QgbmZfZmxvd194bWl0IHhtaXQgPSB7fTsKIAlzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93OwogCXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoOwogCXN0cnVjdCBydGFibGUgKnJ0OwogCV9fYmUzMiBpcF9kYWRkcjsKLQlpbnQgcmV0OwotCi0JdHVwbGVoYXNoID0gbmZfZmxvd19vZmZsb2FkX2xvb2t1cCgmYW1wO2N0eCwgZmxvd190YWJsZSwgc2tiKTsKLQlpZiAoIXR1cGxlaGFzaCkKLQkJcmV0dXJuIE5GX0FDQ0VQVDsKLQotCXJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKCZhbXA7Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCXJldHVybiBORl9EUk9QOwotCWVsc2UgaWYgKHJldCA9PSAwKQotCQlyZXR1cm4gTkZfQUNDRVBUOwogCiAJaWYgKHVubGlrZWx5KHR1cGxlaGFzaC0mZ3Q7dHVwbGUueG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX1hGUk0pKSB7CiAJCXJ0ID0gZHN0X3J0YWJsZSh0dXBsZWhhc2gtJmd0O3R1cGxlLmRzdF9jYWNoZSk7CkBAIC04NzMsNiAmIzQzOzg1NywzNiBAQCBuZl9mbG93X29mZmxvYWRfaXBfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJcmV0dXJuIG5mX2Zsb3dfcXVldWVfeG1pdChzdGF0ZS0mZ3Q7bmV0LCBza2IsICZhbXA7eG1pdCk7CiB9CiYjNDM7CiYjNDM7dW5zaWduZWQgaW50CiYjNDM7bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQljb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2g7CiYjNDM7CXN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUgPSBwcml2OwomIzQzOwlzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCBjdHggPSB7CiYjNDM7CQkuaW4JPSBzdGF0ZS0mZ3Q7aW4sCiYjNDM7CX07CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woJmFtcDtjdHgsIHNrYikpCiYjNDM7CQlyZXR1cm4gTkZfQUNDRVBUOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoY3R4LmV0aGVyX3R5cGUgIT0gaHRvbnMoRVRIX1BfSVApKSkKJiM0MzsJCXJldHVybiBORl9BQ0NFUFQ7CiYjNDM7CiYjNDM7CXR1cGxlaGFzaCA9IG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoJmFtcDtjdHgsIGZsb3dfdGFibGUsIHNrYik7CiYjNDM7CWlmICghdHVwbGVoYXNoKQomIzQzOwkJcmV0dXJuIE5GX0FDQ0VQVDsKJiM0MzsKJiM0MzsJcmV0ID0gbmZfZmxvd19vZmZsb2FkX2ZvcndhcmQoJmFtcDtjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gTkZfRFJPUDsKJiM0MzsJZWxzZSBpZiAocmV0ID09IDApCiYjNDM7CQlyZXR1cm4gTkZfQUNDRVBUOwomIzQzOwomIzQzOwlyZXR1cm4gbmZfZmxvd19xdWV1ZV94bWl0NChza2IsIHR1cGxlaGFzaCwgc3RhdGUpOwomIzQzO30KIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKTsKIAogc3RhdGljIHZvaWQgbmZfZmxvd19uYXRfaXB2Nl90Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHRob2ZmLApAQCAtMTEwMSw0MiAmIzQzOzExMTUsMjMgQEAgbmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsCiB7CiAJc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB0dXBsZSA9IHt9OwogCi0JaWYgKCFuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChjdHgsIHNrYiwgaHRvbnMoRVRIX1BfSVBWNikpKQotCQlyZXR1cm4gTlVMTDsKLQogCWlmIChuZl9mbG93X3R1cGxlX2lwdjYoY3R4LCBza2IsICZhbXA7dHVwbGUpICZsdDsgMCkKIAkJcmV0dXJuIE5VTEw7CiAKIAlyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCAmYW1wO3R1cGxlKTsKIH0KIAotdW5zaWduZWQgaW50Ci1uZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSkKJiM0MztzdGF0aWMgaW50IG5mX2Zsb3dfcXVldWVfeG1pdDYoc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkgICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpCiB7Ci0Jc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoOwotCXN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUgPSBwcml2OwogCXN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm90aGVyX3R1cGxlOwogCWVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7Ci0Jc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggY3R4ID0gewotCQkuaW4JPSBzdGF0ZS0mZ3Q7aW4sCi0JfTsKIAlzdHJ1Y3QgbmZfZmxvd194bWl0IHhtaXQgPSB7fTsKIAlzdHJ1Y3QgaW42X2FkZHIgKmlwNl9kYWRkcjsKIAlzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93OwogCXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoOwogCXN0cnVjdCBydDZfaW5mbyAqcnQ7Ci0JaW50IHJldDsKLQotCXR1cGxlaGFzaCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cCgmYW1wO2N0eCwgZmxvd190YWJsZSwgc2tiKTsKLQlpZiAodHVwbGVoYXNoID09IE5VTEwpCi0JCXJldHVybiBORl9BQ0NFUFQ7Ci0KLQlyZXQgPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKCZhbXA7Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCXJldHVybiBORl9EUk9QOwotCWVsc2UgaWYgKHJldCA9PSAwKQotCQlyZXR1cm4gTkZfQUNDRVBUOwogCiAJaWYgKHVubGlrZWx5KHR1cGxlaGFzaC0mZ3Q7dHVwbGUueG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX1hGUk0pKSB7CiAJCXJ0ID0gZHN0X3J0Nl9pbmZvKHR1cGxlaGFzaC0mZ3Q7dHVwbGUuZHN0X2NhY2hlKTsKQEAgLTExOTAsNCAmIzQzOzExODUsMzQgQEAgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJcmV0dXJuIG5mX2Zsb3dfcXVldWVfeG1pdChzdGF0ZS0mZ3Q7bmV0LCBza2IsICZhbXA7eG1pdCk7CiB9CiYjNDM7CiYjNDM7dW5zaWduZWQgaW50CiYjNDM7bmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCSAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoOwomIzQzOwlzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlID0gcHJpdjsKJiM0MzsJc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggY3R4ID0gewomIzQzOwkJLmluCT0gc3RhdGUtJmd0O2luLAomIzQzOwl9OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIW5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKCZhbXA7Y3R4LCBza2IpKQomIzQzOwkJcmV0dXJuIE5GX0FDQ0VQVDsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KGN0eC5ldGhlcl90eXBlICE9IGh0b25zKEVUSF9QX0lQVjYpKSkKJiM0MzsJCXJldHVybiBORl9BQ0NFUFQ7CiYjNDM7CiYjNDM7CXR1cGxlaGFzaCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2xvb2t1cCgmYW1wO2N0eCwgZmxvd190YWJsZSwgc2tiKTsKJiM0MzsJaWYgKCF0dXBsZWhhc2gpCiYjNDM7CQlyZXR1cm4gTkZfQUNDRVBUOwomIzQzOwomIzQzOwlyZXQgPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKCZhbXA7Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIE5GX0RST1A7CiYjNDM7CWVsc2UgaWYgKHJldCA9PSAwKQomIzQzOwkJcmV0dXJuIE5GX0FDQ0VQVDsKJiM0MzsKJiM0MzsJcmV0dXJuIG5mX2Zsb3dfcXVldWVfeG1pdDYoc2tiLCB0dXBsZWhhc2gsIHN0YXRlKTsKJiM0Mzt9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jCmluZGV4IDU2MjE5YjAyZTEyMjcuLjFlNTU2NDRmMmVkYjggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYwpAQCAtNDQsMTEgJiM0Mzs0NCwxNiBAQCBzdGF0aWMgYm9vbCBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfY2FjaGUsCiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCi0JCQkJICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLCB1OCAqaGEsCiYjNDM7CQkJCSAgICAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwKJiM0MzsJCQkJICAgICB1OCAqaGEsIF9fYmUxNiBldGhlcl90eXBlLAogCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spCiB7CiAJY29uc3Qgdm9pZCAqZGFkZHIgPSAmYW1wO2N0LSZndDt0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkc3RfY2FjaGUtJmd0O2RldjsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0gewomIzQzOwkJLmRldiA9IGRldiwKJiM0MzsJCS5ldGhlcl90eXBlID0gZXRoZXJfdHlwZSwKJiM0MzsJfTsKIAlzdHJ1Y3QgbmVpZ2hib3VyICpuOwogCXU4IG51ZF9zdGF0ZTsKIApAQCAtNzEsNyAmIzQzOzc2LDkgQEAgc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdF9jYWNoZSwKIAkJcmV0dXJuIC0xOwogCiBvdXQ6Ci0JcmV0dXJuIGRldl9maWxsX2ZvcndhcmRfcGF0aChkZXYsIGhhLCBzdGFjayk7CiYjNDM7CWV0aGVyX2FkZHJfY29weShjdHguZGFkZHIsIGhhKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRldl9maWxsX2ZvcndhcmRfcGF0aCgmYW1wO2N0eCwgc3RhY2spOwogfQogCiBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyB7CkBAIC0xMjYsNyAmIzQzOzEzMyw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssCiAKIAkJCQlpbmZvLSZndDt0dW4uc3JjX3Y2ID0gcGF0aC0mZ3Q7dHVuLnNyY192NjsKIAkJCQlpbmZvLSZndDt0dW4uZHN0X3Y2ID0gcGF0aC0mZ3Q7dHVuLmRzdF92NjsKLQkJCQlpbmZvLSZndDt0dW4ubDNfcHJvdG8gPSBwYXRoLSZndDt0dW4ubDNfcHJvdG87CiYjNDM7CQkJCWluZm8tJmd0O3R1bi5pbm5lcl9wcm90byA9IHBhdGgtJmd0O3R1bi5pbm5lcl9wcm90bzsKIAkJCQlpbmZvLSZndDt0dW5fZHN0ID0gcGF0aC0mZ3Q7dHVuLmRzdDsKIAkJCQlpbmZvLSZndDtudW1fdHVucyYjNDM7JiM0Mzs7CiAJCQl9IGVsc2UgewpAQCAtMjIzLDcgJiM0MzsyMzAsNyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAogCXVuc2lnbmVkIGNoYXIgaGFbRVRIX0FMRU5dOwogCWludCBpOwogCi0JaWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoZHN0LCBjdCwgZGlyLCBoYSwgJmFtcDtzdGFjaykgJmx0OyAwIHx8CiYjNDM7CWlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRzdCwgY3QsIGRpciwgaGEsIHBrdC0mZ3Q7ZXRoZXJ0eXBlLCAmYW1wO3N0YWNrKSAmbHQ7IDAgfHwKIAkgICAgbmZ0X2Rldl9wYXRoX2luZm8oJmFtcDtzdGFjaywgJmFtcDtpbmZvLCBoYSwgZnQpICZsdDsgMCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKQEAgLTIzOCw3ICYjNDM7MjQ1LDcgQEAgc3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwKIAlpZiAoaW5mby5udW1fdHVucykgewogCQlyb3V0ZS0mZ3Q7dHVwbGVbIWRpcl0uaW4udHVuLnNyY192NiA9IGluZm8udHVuLmRzdF92NjsKIAkJcm91dGUtJmd0O3R1cGxlWyFkaXJdLmluLnR1bi5kc3RfdjYgPSBpbmZvLnR1bi5zcmNfdjY7Ci0JCXJvdXRlLSZndDt0dXBsZVshZGlyXS5pbi50dW4ubDNfcHJvdG8gPSBpbmZvLnR1bi5sM19wcm90bzsKJiM0MzsJCXJvdXRlLSZndDt0dXBsZVshZGlyXS5pbi50dW4uaW5uZXJfcHJvdG8gPSBpbmZvLnR1bi5pbm5lcl9wcm90bzsKIAkJcm91dGUtJmd0O3R1cGxlWyFkaXJdLmluLm51bV90dW5zID0gaW5mby5udW1fdHVuczsKIAkJZHN0X3JlbGVhc2Uocm91dGUtJmd0O3R1cGxlW2Rpcl0uZHN0KTsKIAkJcm91dGUtJmd0O3R1cGxlW2Rpcl0uZHN0ID0gaW5mby50dW5fZHN0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODU0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldHdvcmtpbmcgRmxvdyBUYWJsZSBPZmZsb2FkIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIGhlcmUsIGFuZCBpdCBsb29rcyBsaWtlIGEgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIGhvdyB3ZSBoYW5kbGUgdGhlIGZsb3cgdGFibGUgb2ZmbG9hZCBwYXRoLCBzcGVjaWZpY2FsbHkgaW4gdGhlIG5ldHdvcmtpbmcgY29yZS4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBhZGRyZXNzaW5nIHNvbWUgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoZSB3YXkgd2Ugd2VyZSBkZWFsaW5nIHdpdGggaW5uZXIgcHJvdG9jb2xzIGFuZCBFdGhlcm5ldCB0eXBlcy4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gY2VudGVyIGFyb3VuZCBhIG5ldyBgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHhgLiBJbnN0ZWFkIG9mIHBhc3NpbmcgdGhlIGRldmljZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzcyBzZXBhcmF0ZWx5IHRvIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgLCB3ZSYjMzk7cmUgbm93IHBhc3NpbmcgdGhpcyBgY3R4YCBzdHJ1Y3R1cmUuIFRoaXMgYGN0eGAgaW5jbHVkZXMgdGhlIGRldmljZSwgZGVzdGluYXRpb24gYWRkcmVzcywgYW5kIGEgY3J1Y2lhbCBuZXcgZmllbGQ6IGBldGhlcl90eXBlYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGlzIGFsbG93cyB0aGUgYGlwaXBfZmlsbF9mb3J3YXJkX3BhdGhgIGFuZCBgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aGAgZnVuY3Rpb25zIHRvIHByb3Blcmx5IGNoZWNrIGFuZCBhY2NvdW50IGZvciB0aGUgRXRoZXJuZXQgdHlwZSBpbiB0aGVpciBwcm9jZXNzaW5nLgoKSW1wb3J0YW50bHksIGl0IGxvb2tzIGxpa2UgYG5mX2Zsb3dfdGFibGVfaXAuY2AgaXMgYmVpbmcgbW9kaWZpZWQgdG8gYWN0dWFsbHkgdXRpbGl6ZSB0aGlzIG5ldyBgZXRoZXJfdHlwZWAgZmllbGQsIGFsb25nIHdpdGggYGlubmVyX3Byb3RvYCwgaW5zdGVhZCBvZiBzb2xlbHkgcmVseWluZyBvbiB0aGUgZXhpc3RpbmcgYGwzX3Byb3RvYC4gVGhpcyBpcyBjcml0aWNhbCBmb3Igb2ZmbG9hZCBmdW5jdGlvbmFsaXR5LgoKTGV0IG1lIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gdmVyaWZ5IHRoaXM6IEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgaW4gYSBidW5jaCBvZiBwbGFjZXMsIGluY2x1ZGluZyBhIGNvdXBsZSBvZiBQUEUgb2ZmbG9hZCBkcml2ZXJzIChgYWlyb2hhX3BwZS5jYCwgYG10a19wcGVfb2ZmbG9hZC5jYCksIHNvbWUgaGVhZGVyIGZpbGVzIChgbmV0ZGV2aWNlLmhgLCBgbmZfZmxvd190YWJsZS5oYCksIGFuZCBjb3JlIG5ldHdvcmtpbmcgY29kZSAoYGRldi5jYCwgYGlwaXAuY2AsIGBpcDZfdHVubmVsLmNgLCBhbmQgYSBjb3VwbGUgb2Yga2V5IG5ldGZpbHRlciBmaWxlcykuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0JiMzOTtzIHRvdWNoaW5nIHNvbWUgcHJldHR5IGxvdy1sZXZlbCBzdHVmZjogYGRldl9maWxsX2ZvcndhcmRfcGF0aGAsIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AsIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYCwgYW5kIGBuZnRfZGV2X2ZvcndhcmRfcGF0aGAuIFRoZXNlIGFyZSBhbGwgcmVhY2hhYmxlLCB0ZXN0YWJsZSBmdW5jdGlvbnMgaW4gYW55IHZpcnR1YWwgZW52aXJvbm1lbnQuCgpJJiMzOTttIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IGhvdyB0byB2YWxpZGF0ZSB0aGlzLiBXZSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGBDT05GSUdgIG9wdGlvbnMgYXJlIGVuYWJsZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIGBDT05GSUdfTkVURklMVEVSYCwgYENPTkZJR19ORl9GTE9XX1RBQkxFYCwgYENPTkZJR19ORl9GTE9XX1RBQkxFX0lQVjRgLCBgQ09ORklHX05GX0ZMT1dfVEFCTEVfSVBWNmAsIGFuZCB0aGUgdHVubmVsIG9wdGlvbnMsIHNwZWNpZmljYWxseSBgQ09ORklHX05FVF9JUEdSRWAsIGBDT05GSUdfSVBJUGAsIG9yIGBDT05GSUdfSVBWNl9UVU5ORUxgLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgdXAgYWxsIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRob3NlLiBJIG5lZWQgdG8gc2VhcmNoIGBORl9GTE9XX1RBQkxFYCBpbiBLY29uZmlnIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGNvcnJlY3QuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgcmVsYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9GTE9XX1RBQkxFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDE9ZW5kaWYgIyBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzAzOmNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDQtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MTE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTItXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcyMTpjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjItXHRib29sIFwmIzM0O1N1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNzMKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBUdW5uZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIHR1bm5lbHMuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBqdW1wIGludG8gdGhlIGtlcm5lbCBjb25maWcgZmlsZXMgdG8gc2VlIHdoYXQmIzM5O3MgYXZhaWxhYmxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBgbmV0L2lwdjQvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgYXZhaWxhYmlsaXR5IGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBJUElQYC4gVGhlbiwgdG8gY292ZXIgYWxsIGJhc2VzLCBhbmQgY29uc2lkZXJpbmcgd2UmIzM5O3JlIGxpa2VseSBkZWFsaW5nIHdpdGggYSBtb2Rlcm4gc2V0dXAsIEkmIzM5O2xsIG5lZWQgdG8gaGl0IGBuZXQvaXB2Ni9LY29uZmlnYCB0byB2ZXJpZnkgdGhlIHN0YXR1cyBvZiBgSVBWNl9UVU5ORUxgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb250cm9sIGZvciBJUHY2IHR1bm5lbGluZyB3b3VsZCBiZS4gS25vd2luZyB0aGVzZSB0d28gb3B0aW9ucyB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUgb2Ygd2hhdCB0dW5uZWxpbmcgY2FwYWJpbGl0aWVzIGFyZSBlbmFibGVkLCBhbmQgaG93IHRoZXkgYXJlIGhhbmRsZWQsIHdpdGhpbiB0aGUgY3VycmVudCBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhpcyB3aWxsIHRlbGwgbWUgaWYgdGhlIGtlcm5lbCBoYXMgdGhlIG5lY2Vzc2FyeSBjb21wb25lbnRzIGJ1aWx0LWluIHRvIHN1cHBvcnQgb3VyIG5lZWRzLCBvciB3aGV0aGVyIHdlIG5lZWQgdG8gdHdlYWsgdGhlIGJ1aWxkIHRvIHN1cHBvcnQgYSBwYXJ0aWN1bGFyIHR1bm5lbGluZyBzY2VuYXJpby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUElQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ0MwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOZXR3b3JrIFByb3RvY29sIENvbmZ1c2lvbiBDbGVhcmVkKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIGp1c3QgcmV2aWV3aW5nIHRoZXNlIGNvbmZpZ3VyYXRpb25zLCBhbmQgYSBjb25uZWN0aW9uIGp1c3QgY2xpY2tlZCBpbiBteSBoZWFkLiBJIHdhcyB0aGlua2luZyBhYm91dCB0aGUgYElQSVBgIHByb3RvY29sLCBhbmQgdGhlbiBpdCBoaXQgbWU6IGBJUElQYCBpcyAqYWN0dWFsbHkqIHRoZSBzYW1lIHRoaW5nIGFzIGBORVRfSVBJUGAuIEl0JiMzOTtzIGp1c3QgYSBkaWZmZXJlbnQgd2F5IG9mIHJlcHJlc2VudGluZyB0aGUgc2FtZSB1bmRlcmx5aW5nIGZ1bmN0aW9uYWxpdHkuIEFsbCB0aGUgcGllY2VzIGFyZSBmYWxsaW5nIGludG8gcGxhY2Ugbm93LCBhbmQgSSBjYW4gbW92ZSBvbiB0byB0aGUgbmV4dCBzZXQgb2YgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9JUElQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9MTQ5PWNvbmZpZyBJUF9QTlBfUkFSUFxuLS1cbm5ldC9pcHY0L0tjb25maWctMTYxLVxubmV0L2lwdjQvS2NvbmZpZzoxNjI6Y29uZmlnIE5FVF9JUElQXG5uZXQvaXB2NC9LY29uZmlnLTE2My1cdHRyaXN0YXRlIFwmIzM0O0lQOiB0dW5uZWxpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY3OAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSwgYW4gZXhwZXJ0LCBhbSBwcm9jZXNzaW5nIHRoZXNlIHRob3VnaHRzOgoKKipDb25zaWRlcmluZyB0aGUgTmV0d29yayBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQgbWUgc2VlLi4uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24sIGFuZCBzcGVjaWZpY2FsbHksIHRoZSB1c2Ugb2YgYElQVjZfVFVOTkVMYC4gSXQgaW1tZWRpYXRlbHkgYnJpbmdzIHRvIG1pbmQgc2V2ZXJhbCBjb25zaWRlcmF0aW9ucy4gSSYjMzk7bSBsaWtlbHkgZGVhbGluZyB3aXRoIGFuIElQdjYgdHJhbnNpdGlvbiBtZWNoYW5pc20sIG1vc3QgbGlrZWx5IGEgdHVubmVsIG9mIHNvbWUga2luZC4gTm93IEkgbmVlZCB0byBjb25zaWRlciBleGFjdGx5IHdoYXQga2luZCBvZiB0dW5uZWwuIElzIGl0IGEgNmluNCB0dW5uZWwsIGEgNnRvNCByZWxheSwgYSBUZXJlZG8gdHVubmVsLCBvciBwb3RlbnRpYWxseSBldmVuIGEgbW9yZSBjb21wbGV4LCBjb25maWd1cmVkIHR1bm5lbCBzdWNoIGFzIGEgR1JFIHR1bm5lbCBvciBhbiBJUElQIHR1bm5lbD8gSSYjMzk7ZCBoYXZlIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgdHVubmVsIGlzIGJlaW5nIGltcGxlbWVudGVkLiBUaGUgY29tbWFuZCBpdHNlbGYgc3VnZ2VzdHMgdGhlIGV4aXN0ZW5jZSBvZiBhIHR1bm5lbCwgYnV0IHByb3ZpZGVzIG5vIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIHVuZGVybHlpbmcgSVB2NCBuZXR3b3JrIGxvb2tzIGxpa2UsIGFzIHRoYXQmIzM5O3MgZ2VuZXJhbGx5IHdoZXJlIHRoZSBvdGhlciBzaWRlIG9mIHRoZSB0dW5uZWwgcmVzaWRlcy4gQW5kIEkgaGF2ZSB0byBrZWVwIGluIG1pbmQsIG9mIGNvdXJzZSwgdGhlIGltcGxpY2F0aW9ucyBmb3Igcm91dGluZywgTVRVIHNpemUsIGFuZCBwb3RlbnRpYWwgZmlyZXdhbGwgcnVsZXMgYXQgYm90aCB0aGUgbG9jYWwgYW5kIHJlbW90ZSBlbmRzIG9mIHRoaXMgY29ubmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjZfVFVOTkVMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWc9MTk2PWNvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xOTgtXG5uZXQvaXB2Ni9LY29uZmlnOjE5OTpjb25maWcgSVBWNl9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjAwLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDQ1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2suCgoqKkludmVzdGlnYXRpbmcgTmV0ZmlsdGVyIEZsb3cgT2ZmbG9hZCBIb29rcyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuY2AuIE15IHByaW1hcnkgaW50ZXJlc3QgYXQgdGhlIG1vbWVudCBsaWVzIHdpdGggdW5kZXJzdGFuZGluZyB0aGUgaW50cmljYWNpZXMgb2YgdGhlIGZsb3cgb2ZmbG9hZCBtZWNoYW5pc21zIHdpdGhpbiBOZXRmaWx0ZXIsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIElQIHByb3RvY29sIGZhbWlseS4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgc2NydXRpbml6ZSB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AgYW5kIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYC4gSXQmIzM5O3MgY3J1Y2lhbCB0byBncmFzcCBob3cgdGhlc2UgaG9va3MgZnVuY3Rpb24sIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSBlbXBsb3ksIGFuZCB0aGVpciBpbnRlcnBsYXkgd2l0aCB0aGUgb3ZlcmFsbCBmbG93IHRhYmxlIGFyY2hpdGVjdHVyZS4gTXkgYWltIGlzIHRvIGdhaW4gYSBzb2xpZCBjb21wcmVoZW5zaW9uIG9mIGhvdyBJUHY0IGFuZCBJUHY2IHRyYWZmaWMgaXMgaGFuZGxlZCB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LCBwYXJ0aWN1bGFybHkgdGhlIGxvZ2ljIGJlaGluZCB0aGUgb2ZmbG9hZCBkZWNpc2lvbiBhbmQgdGhlIHN1YnNlcXVlbnQgZXhlY3V0aW9uIG9mIG9mZmxvYWQgb3BlcmF0aW9ucy4gSSBhbnRpY2lwYXRlIGZpbmRpbmcga2V5IGluc2lnaHRzIGludG8gcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGJ5IHRob3JvdWdobHkgYW5hbHl6aW5nIHRoZXNlIGZ1bmN0aW9ucy4gSSYjMzk7bSByZWFkeSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc3RhcnQgZmlndXJpbmcgb3V0IHdoYXQmIzM5O3MgcmVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X29mZmxvYWRfaXBfaG9vayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTM0NT1pbnQgbmZfZmxvd19vZmZsb2FkX3hkcF9zZXR1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zNDgtXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjM0OTp1bnNpZ25lZCBpbnQgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzUwLVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9MTI9bmZfZmxvd19vZmZsb2FkX2luZXRfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtMzYtXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6Mzc6XHRcdHJldHVybiBuZl9mbG93X29mZmxvYWRfaXBfaG9vayhwcml2LCBza2IsIHN0YXRlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtMzgtXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9Nzg9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaXB2NCA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTgzLVx0LmZyZWVcdFx0PSBuZl9mbG93X3RhYmxlX2ZyZWUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjg0Olx0Lmhvb2tcdFx0PSBuZl9mbG93X29mZmxvYWRfaXBfaG9vayxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODUtXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04NjE9dW5zaWduZWQgaW50XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4NjI6bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg2My1cdFx0XHRjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODg5LX1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjg5MDpFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X29mZmxvYWRfaXBfaG9vayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04OTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTU4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgSVAgYW5kIElQdjYgb2ZmbG9hZGluZywgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipNeSBNZW50YWwgTW9kZWwgb2YgSVAgRmxvdyBPZmZsb2FkIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIGEga2VybmVsIG5ldHdvcmtpbmcgcGVyc3BlY3RpdmUsIEkmIzM5O20ga2V5aW5nIGluIG9uIHRoZSBmbG93IG9mZmxvYWQgaG9va3MuIEkgc2VlIHRoYXQgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgIGFyZSB0aGUgY3J1Y2lhbCBlbnRyeSBwb2ludHMgZm9yIHRoaXMgd2hvbGUgSVAgYW5kIElQdjYgb2ZmbG9hZCBwcm9jZXNzLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBpbml0aWFsIGRlY2lzaW9ucyBnZXQgbWFkZSwgdGhlIGluc3BlY3Rpb24gc3RhcnRzLCB0aGUgY2xhc3NpZmljYXRpb24gaGFwcGVucyDigJMgdGhpcyBpcyB0aGUgY29yZSBvZiBnZXR0aW5nIHRoZSB0cmFmZmljIG9mZmxvYWRlZC4gCgpJJiMzOTttIGFsc28gbm90aW5nIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgLiBUaGlzIHNvdW5kcyBjcml0aWNhbC4gV2hpbGUgdGhlIGhvb2tzIG1pZ2h0IGluaXRpYXRlIHRoZSBwcm9jZXNzLCBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBpcyBsaWtlbHkgd2hlcmUgdGhlIGFjdHVhbCBmb3J3YXJkaW5nIGluZm9ybWF0aW9uIGdldHMgcG9wdWxhdGVkLiBJIGJldCBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcywgbGlrZSB0aGUgZmxvdyBjYWNoZSBlbnRyaWVzLCBhbmQgcG9wdWxhdGluZyB0aGVtIHdpdGggdGhlIGRldGFpbHMgdGhlIGhhcmR3YXJlIG5lZWRzIHRvIGFjY2VsZXJhdGUgdGhlIHRyYWZmaWMuIFRoaXMgZnVuY3Rpb24gaXMgcHJvYmFibHkgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIGRldmljZSBkcml2ZXIsIGFuZCBrbm93cyBleGFjdGx5IGhvdyB0byB0ZWxsIHRoZSBOSUMgd2hpY2ggcGFja2V0cyB0byBoYW5kbGUgaW4gaGFyZHdhcmUuIFRoaXMgbWVhbnMgdGhpcyBpcyB0aGUgcG9pbnQgd2hlcmUgdGhlIGRlY2lzaW9ucyBtYWRlIGF0IHRoZSBob29rIGFyZSBtYXRlcmlhbGl6ZWQsIGFuZCB0dXJuZWQgaW50byBhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rldl9maWxsX2ZvcndhcmRfcGF0aCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTI4Mj1zdGF0aWMgaW50IGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTI5Ny1cdHJjdV9yZWFkX2xvY2soKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6Mjk4Olx0ZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKFx1MDAyNmN0eCwgXHUwMDI2c3RhY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0yOTktXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTMxMi1lcnJfb3V0OlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzozMTM6XHRkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShcdTAwMjZzdGFjayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTMxNC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYz05Mj1tdGtfZmxvd19nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLCBzdHJ1Y3QgbXRrX3dkbWFfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYy0xMDktXHRyY3VfcmVhZF9sb2NrKCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYzoxMTA6XHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoXHUwMDI2Y3R4LCBcdTAwMjZzdGFjayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYy0xMTEtXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYy0xMjYtZXJyX291dDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jOjEyNzpcdGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKFx1MDAyNnN0YWNrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jLTEyOC1cbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTM0Mjk9aW50IGRldl9maWxsX21ldGFkYXRhX2RzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MzQzMDppbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTM0MzEtXHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayk7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjM0MzI6dm9pZCBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayk7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTM0MzMtc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRfYnlfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jPTc1Nj1zdGF0aWMgaW50IHZsYW5fZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYy03NjItXG5uZXQvODAyMXEvdmxhbl9kZXYuYzo3NjM6c3RhdGljIGludCB2bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzY0LVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYz0xMDc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmxhbl9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jLTExMDktXHQubmRvX2dldF9pZmxpbmtcdFx0PSB2bGFuX2Rldl9nZXRfaWZsaW5rLFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6MTExMDpcdC5uZG9fZmlsbF9mb3J3YXJkX3BhdGhcdD0gdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGgsXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMTExLVx0Lm5kb19od3RzdGFtcF9nZXRcdD0gdmxhbl9od3RzdGFtcF9nZXQsXG4tLVxubmV0L2NvcmUvZGV2LmM9NzQzPXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpkZXZfZndkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4tLVxubmV0L2NvcmUvZGV2LmMtNzUwLVxubmV0L2NvcmUvZGV2LmM6NzUxOnZvaWQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG5uZXQvY29yZS9kZXYuYy03NTIte1xuLS1cbm5ldC9jb3JlL2Rldi5jLTc2OS19XG5uZXQvY29yZS9kZXYuYzo3NzA6RVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UpO1xubmV0L2NvcmUvZGV2LmMtNzcxLVxubmV0L2NvcmUvZGV2LmM6NzcyOmludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbm5ldC9jb3JlL2Rldi5jLTc3My1cdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTgwOC1lcnJfb3V0OlxubmV0L2NvcmUvZGV2LmM6ODA5Olx0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RhY2spO1xubmV0L2NvcmUvZGV2LmMtODEwLVxuLS1cbm5ldC9jb3JlL2Rldi5jLTgxMi19XG5uZXQvY29yZS9kZXYuYzo4MTM6RVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTtcbm5ldC9jb3JlL2Rldi5jLTgxNC1cbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYz05Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfbW9uaXRvcmlmX29wcyA9IHtcbi0tXG5uZXQvbWFjODAyMTEvaWZhY2UuYy05ODgtXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo5ODk6c3RhdGljIGludCBpZWVlODAyMTFfbmV0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG5uZXQvbWFjODAyMTEvaWZhY2UuYy05OTAtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmM9MTA0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9kYXRhaWZfODAyM19vcHMgPSB7XG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtMTA1My1cdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IGllZWU4MDIxMV9jaGFuZ2VfbWFjLFxubmV0L21hYzgwMjExL2lmYWNlLmM6MTA1NDpcdC5uZG9fZmlsbF9mb3J3YXJkX3BhdGhcdD0gaWVlZTgwMjExX25ldGRldl9maWxsX2ZvcndhcmRfcGF0aCxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTEwNTUtXHQubmRvX3NldHVwX3RjXHRcdD0gaWVlZTgwMjExX25ldGRldl9zZXR1cF90Yyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTM2PXN0YXRpYyBib29sIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTQ0LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzo0NTpzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy00Ni1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtODAtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjgxOlx0cmV0dXJuIGRldl9maWxsX2ZvcndhcmRfcGF0aChcdTAwMjZjdHgsIHN0YWNrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtODItfVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MTA0PXN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0xOTgtZXJyX291dDpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MTk5Olx0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RhY2spO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yMDAtXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0yMjE9c3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTIzMi1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MjMzOlx0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoZHN0LCBjdCwgZGlyLCBoYSwgcGt0LVx1MDAzZWV0aGVydHlwZSwgXHUwMDI2c3RhY2spIFx1MDAzYyAwIHx8XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTIzNC1cdCAgICBuZnRfZGV2X3BhdGhfaW5mbyhcdTAwMjZzdGFjaywgXHUwMDI2aW5mbywgaGEsIGZ0KSBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MzcKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUHJpb3JpdGl6aW5nIEZ1enppbmcgVGFyZ2V0cyBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgd2hlcmUgdG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cy4gTG9va2luZyBhdCB0aGlzIGxpc3QsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZXNlIGZ1bmN0aW9uczogYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgLCBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCwgYG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGhgLCBgaXBpcF9maWxsX2ZvcndhcmRfcGF0aGAsIGFuZCBgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aGAuCgpIb3dldmVyLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgbGV0JiMzOTtzIGp1c3QgY29uZmlybSBpZiBgaXBpcF9maWxsX2ZvcndhcmRfcGF0aGAgYW5kIGBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoYCBhcmUgc3RhdGljYWxseSBkZWZpbmVkLiBZZXAsIHRoZXkgYXJlLiBUaGF0IHJlZHVjZXMgdGhlIGluaXRpYWwgZm9jdXMgYSBiaXQuIFNvLCBmb3IgZnV6emluZywgSSYjMzk7bSBnb2luZyB0byBwdXQgdGhlc2UgYXQgdGhlIHRvcCBvZiBteSBsaXN0OiBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCwgYW5kIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYC4gSG9sZCBvbiwgYG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGlzIGFsc28gc3RhdGljLCBzbyBJIGNhbiBpZ25vcmUgdGhhdCBhcyB3ZWxsLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSBpZiBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AgYXJlIGV4cG9ydGVkLiBZZXMsIHRoZXkgYXJlISBBbmQgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgaXMgZXhwb3J0ZWQgYXMgd2VsbC4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGtleS4gU2luY2UgdGhleSYjMzk7cmUgZXhwb3J0ZWQsIHRoZXkmIzM5O3JlIGxpa2VseSBnb2luZyB0byBwcm92aWRlIG1vcmUgdGVzdCBjb3ZlcmFnZS4KCk5leHQgc3RlcDogSSYjMzk7bGwgc3RhcnQgYnkgdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCBpbiB0aGUgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jYCBmaWxlLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X29mZmxvYWRfaXBfaG9vayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTM0NT1pbnQgbmZfZmxvd19vZmZsb2FkX3hkcF9zZXR1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zNDgtXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjM0OTp1bnNpZ25lZCBpbnQgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMzUwLVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9MTI9bmZfZmxvd19vZmZsb2FkX2luZXRfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtMzYtXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6Mzc6XHRcdHJldHVybiBuZl9mbG93X29mZmxvYWRfaXBfaG9vayhwcml2LCBza2IsIHN0YXRlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtMzgtXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9Nzg9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaXB2NCA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTgzLVx0LmZyZWVcdFx0PSBuZl9mbG93X3RhYmxlX2ZyZWUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjg0Olx0Lmhvb2tcdFx0PSBuZl9mbG93X29mZmxvYWRfaXBfaG9vayxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODUtXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04NjE9dW5zaWduZWQgaW50XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4NjI6bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg2My1cdFx0XHRjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODg5LX1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjg5MDpFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X29mZmxvYWRfaXBfaG9vayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04OTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzA3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgSVB2NiBGbG93IE9mZmxvYWQgSG9vayoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYC4gSSYjMzk7bSBpbW1lZGlhdGVseSBmb2N1c2luZyBvbiB0aGlzIHNwZWNpZmljIGhvb2sgcG9pbnQsIGxpa2VseSB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmssIGJlY2F1c2UgaXQmIzM5O3MgdGhlIGdhdGV3YXkgZm9yIElQdjYgZmxvdyBvZmZsb2FkLiBLbm93aW5nIHRoaXMgaG9vayBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBJUHY2IHRyYWZmaWMgaXMgaW50ZXJjZXB0ZWQsIGluc3BlY3RlZCwgYW5kIHRoZW4gcG90ZW50aWFsbHkgaGFuZGVkIG9mZiB0byBoYXJkd2FyZSBmb3IgYWNjZWxlcmF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIHRoaXMgaG9vayBzaXRzIGluIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBwaXBlbGluZS4gSXMgaXQgYmVmb3JlIG9yIGFmdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmc/IEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgTmV0ZmlsdGVyIG1vZHVsZXMgbGlrZSBjb25udHJhY2sgYW5kIE5BVD8gVGhlIHNwZWNpZmljcyBvZiBpdHMgcGxhY2VtZW50IHdpbGwgZGljdGF0ZSB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgdGhlIHR5cGVzIG9mIG9mZmxvYWQgb3Bwb3J0dW5pdGllcyBpdCBwcmVzZW50cy4gSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSBsb2dpYyB3aXRoaW4gdGhlIGhvb2sgdG8gcHJvcGVybHkgZXZhbHVhdGUgaXRzIGJlaGF2aW9yIGFuZCBhbnkgcG90ZW50aWFsIGZvciBvcHRpbWl6YXRpb24gb3IgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9MzQ5PXVuc2lnbmVkIGludCBuZl9mbG93X29mZmxvYWRfaXBfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zNTAtXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSk7XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjM1MTp1bnNpZ25lZCBpbnQgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zNTItXHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTEyPW5mX2Zsb3dfb2ZmbG9hZF9pbmV0X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTM4LVx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6Mzk6XHRcdHJldHVybiBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKHByaXYsIHNrYiwgc3RhdGUpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy00MC1cdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTg4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2lwdjYgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy05My1cdC5mcmVlXHRcdD0gbmZfZmxvd190YWJsZV9mcmVlLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo5NDpcdC5ob29rXHRcdD0gbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtOTUtXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMTg5PXVuc2lnbmVkIGludFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTE5MDpuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMTkxLVx0XHRcdCAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTEyMTctfVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6MTIxODpFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1NjkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0d29yayBGbG93IE9mZmxvYWQgUGF0Y2hlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgaGl0dGluZyB0aGUgY29yZSBvZiB0aGUgTmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5LiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgIGZ1bmN0aW9ucy4gVGhlIGtleSBjaGFuZ2UgaGVyZSBzZWVtcyB0byBiZSB0aGUgYWRkZWQgY2hlY2tzIGZvciBgbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2xgIGFuZCBgY3R4LmV0aGVyX3R5cGVgLiBSaWdodCBhd2F5LCB0aGlzIHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZW5jYXBzdWxhdGVkIHRyYWZmaWMgb2Ygc29tZSBraW5kIOKAkyBwb3RlbnRpYWxseSBHUkUsIFZYTEFOLCBvciBzb21ldGhpbmcgc2ltaWxhci4gVGhleeKAmXJlIGxpa2VseSB0cnlpbmcgdG8gY29ycmVjdGx5IGlkZW50aWZ5IG9yIGhhbmRsZSBwYWNrZXRzIHRoYXQgYXJlIG5lc3RlZCBvciB0dW5uZWxlZC4KCkJleW9uZCB0aGUgaG9vayBtb2RpZmljYXRpb25zLCBJIHNlZSB0aGF0IGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGlzIGFsc28gYmVpbmcgdG91Y2hlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBmb3J3YXJkaW5nIHBhdGggZm9yIHRoZSBlbmNhcHN1bGF0ZWQgb3IgbmVzdGVkIHBhY2tldHMgaXMgYmVpbmcgY29uc3RydWN0ZWQgYW5kIHByb3BhZ2F0ZWQuCgpUbyBnZXQgYSBiZXR0ZXIgZ3JpcCBvbiBob3cgYWxsIHRoaXMgZml0cyB0b2dldGhlciwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG5mdF9kZXZfZm9yd2FyZF9wYXRoYCB3aGljaCwgYmFzZWQgb24gdGhlIGNvbnRleHQsIEkmIzM5O20gcHJldHR5IHN1cmUgaXMgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNgLiBUaGF0IHNob3VsZCBwcm92aWRlIHRoZSBjb250ZXh0IG5lZWRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHVwZGF0ZXMgYXJlIGZpdHRpbmcgaW50byB0aGUgZmxvdyB0YWJsZSBwYXRoaW5nIG9mIHRoZSBlbmNhcHN1bGF0ZWQgdHJhZmZpYy4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGNoYW5nZSBhZmZlY3RzIHRoZSBwcm9jZXNzaW5nIHRoYXQgZGVjaWRlcyB3aGVyZSB0byBmb3J3YXJkIHRoZSBlbmNhcHN1bGF0ZWQgdHJhZmZpYywgb3IgdG8gYWx0ZXIgaXQgaW4gYW55IHdheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X2Rldl9mb3J3YXJkX3BhdGgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0yMDQ9c3RhdGljIGJvb2wgbmZ0X2Zsb3d0YWJsZV9maW5kX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMjIwLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzoyMjE6c3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMjIyLVx0XHRcdFx0c3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MjY3PWludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMzA5LVx0aWYgKHJvdXRlLVx1MDAzZXR1cGxlW2Rpcl0ueG1pdF90eXBlXHQ9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MzEwOlx0ICAgIG5mdF9kZXZfZm9yd2FyZF9wYXRoKHBrdCwgcm91dGUsIGN0LCBkaXIsIGZ0KSBcdTAwM2MgMClcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMzExLVx0XHRnb3RvIGVycl9kc3RfcmVsZWFzZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTMxMy1cdGlmIChyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS54bWl0X3R5cGUgPT0gRkxPV19PRkZMT0FEX1hNSVRfTkVJR0ggXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjMxNDpcdCAgICBuZnRfZGV2X2ZvcndhcmRfcGF0aChwa3QsIHJvdXRlLCBjdCwgIWRpciwgZnQpIFx1MDAzYyAwKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0zMTUtXHRcdGdvdG8gZXJyX2RzdF9yZWxlYXNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQyNgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgdGhlIEV4cG9ydCBTdGF0dXMgb2YgYG5mdF9mbG93X3JvdXRlYCoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIGBuZnRfZmxvd19yb3V0ZWAgY29tcG9uZW50IG1lbnRpb25lZC4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGlzIGFyY2hpdGVjdHVyZSwgaXMgdG8gZGV0ZXJtaW5lIGl0cyBhY2Nlc3NpYmlsaXR5LiBJcyBpdCBhY3R1YWxseSBleHBvcnRlZD8gSXMgaXQgYXZhaWxhYmxlIGZvciB1c2UgYnkgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBvciBhIG1vZHVsZSwgb3IgaXMgaXQgaW50ZW5kZWQgdG8gYmUgaW50ZXJuYWwgdG8gYSBwYXJ0aWN1bGFyIGNvbnRleHQ/IFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUuIFRoZSB3YXkgdGhpcyBpcyBhcmNoaXRlY3RlZCBzaWduaWZpY2FudGx5IGltcGFjdHMgdGhlIG92ZXJhbGwgZmxvdyBkZXNpZ24gYW5kIHRoZSBsZXZlbCBvZiBtb2R1bGFyaXR5LiBJZiBpdCYjMzk7cyBleHBvcnRlZCwgdGhlbiBpdHMgZnVuY3Rpb25hbGl0eSBpcyBhIGtleSBwaWVjZS4gSWYgaXQmIzM5O3Mgbm90LCBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCBfaXNfIHZpc2libGUgZnJvbS4gTm93IGxldCYjMzk7cyBkaWcgaW50byB0aGUgY29kZSBhbmQgdmVyaWZ5IGl0cyBleHBvcnQgc3RhdHVzOyBhIHF1aWNrIGdsYW5jZSBhdCB0aGUgcmVsZXZhbnQgZmlsZXMgc2hvdWxkIGFuc3dlciB0aGF0IHF1ZXN0aW9uLiBUaW1lIHRvIGNvbmZpcm0gaWYgdGhpcyBjb21wb25lbnQgY2FuIGJlIHJlYWRpbHkgbGV2ZXJhZ2VkIG9yIGlmIEkmIzM5O20gbG9va2luZyBhdCBzb21ldGhpbmcgbW9yZSBsaW1pdGVkIGluIHNjb3BlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfZmxvd19yb3V0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTI0Nz1zdHJ1Y3QgbmZ0X3BrdGluZm87XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjI0ODppbnQgbmZ0X2Zsb3dfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMjQ5LVx0XHQgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0yMjE9c3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTI2Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MjY3OmludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yNjgtXHRcdCAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTMyMy19XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjMyNDpFWFBPUlRfU1lNQk9MX0dQTChuZnRfZmxvd19yb3V0ZSk7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9NTA9c3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xMDgtXHRkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7XG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoxMDk6XHRpZiAobmZ0X2Zsb3dfcm91dGUocGt0LCBjdCwgXHUwMDI2cm91dGUsIGRpciwgcHJpdi1cdTAwM2VmbG93dGFibGUpIFx1MDAzYyAwKVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTEwLVx0XHRnb3RvIGVycl9mbG93X3JvdXRlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTEzNwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBOZXRmaWx0ZXIgRmxvdyBPZmZsb2FkIEJyZWFrZG93bioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGBuZnRfZmxvd19yb3V0ZWAgZnVuY3Rpb24sIGNydWNpYWwgZm9yIG91ciBuZXRmaWx0ZXIgZmxvdyBvZmZsb2FkIHRhcmdldCwgaXMgaW52b2tlZCBmcm9tIHdpdGhpbiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCwgd2hpY2ggcmVzaWRlcyBpbiB0aGUgYG5mdF9mbG93X29mZmxvYWQuY2AgZmlsZS4gVGhpcyBpcyBvdXIgdGFyZ2V0IGZ1bmN0aW9uLCB0aGUgY29yZSBvZiB0aGUgZmxvdyBvZmZsb2FkaW5nIG1lY2hhbmlzbS4KClRoZXJlZm9yZSwgdG8gdGhvcm91Z2hseSB1bmRlcnN0YW5kIHRoZSBmbG93LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Uga2V5IHN5bWJvbHM6IGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgLCBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgLCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AsIGFuZCBvZiBjb3Vyc2UsIGBuZnRfZmxvd19yb3V0ZWAgaXRzZWxmLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGdyYXNwIG9uIHRoZSBpbm5lciB3b3JraW5ncyBvZiB0aGlzIHN5c3RlbS4KCkZ1cnRoZXJtb3JlLCBJIHNob3VsZCBpbnZlc3RpZ2F0ZSB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIHByZXNlbmNlIGFuZCBzZXR1cCBvZiBgTkZfRkxPV19UQUJMRWAgYW5kIGBORl9GTE9XX1RBQkxFX0lORVRgLCB3aGljaCB3b3VsZCBlc3RhYmxpc2ggdGhlIGZsb3cgdGFibGUgaW5mcmFzdHJ1Y3R1cmUuIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IGBORlRfRkxPV19PRkZMT0FEYCBleGlzdHMsIGFzIGl0JiMzOTtzIGZvdW5kYXRpb25hbCB0byB0aGUgb2ZmbG9hZCBmZWF0dXJlLiBBbmQgZmluYWxseSwgSSBtdXN0IGNvbmZpcm0gYE5FVF9JUElQYCBhbmQgYElQVjZfVFVOTkVMYCBhcmUgYXBwcm9wcmlhdGVseSBjb25maWd1cmVkLCBzaW5jZSB0dW5uZWxpbmcgd2lsbCBwbGF5IGEgcm9sZSBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORlRfRkxPV19PRkZMT0FEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz00OTg9Y29uZmlnIE5GVF9FWFRIRFJfRENDUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTA0OmNvbmZpZyBORlRfRkxPV19PRkZMT0FEXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTA1LVx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX0ZMT1dfVEFCTEVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2OTcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRXhhbWluaW5nIEZsb3cgVGFibGUgSW1wbGVtZW50YXRpb25zKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYXJ0IGluIGZsb3cgdGFibGUgaW1wbGVtZW50YXRpb25zLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBzcGVjaWZpY2FsbHkgYXQgdGhlIElQdjQgYW5kIElQdjYgdmVyc2lvbnMuIEkgbmVlZCB0byBjaGVjayBgTkZfRkxPV19UQUJMRV9JUFY0YCBhbmQgYE5GX0ZMT1dfVEFCTEVfSVBWNmAuIEkgbmVlZCB0byBjb21wYXJlIHRoZWlyIHN0cnVjdHVyZSBhbmQgZnVuY3Rpb25hbGl0eS4gQXJlIHRoZXkgc2ltaWxhcj8gQXJlIHRoZXJlIHNpZ25pZmljYW50IGRpZmZlcmVuY2VzIGluIGhvdyB0aGV5IGhhbmRsZSBhZGRyZXNzIGZhbWlsaWVzPyBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGluaGVyZW50IGluIG9uZSB2ZXJzdXMgdGhlIG90aGVyPyBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBmbG93IHRhYmxlcyBhcmUgaW50ZWdyYXRlZCB3aXRoIHRoZSBicm9hZGVyIG5ldGZpbHRlciBmcmFtZXdvcmsgYXMgd2VsbC4gVGhpcyB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uIGZvciBmaWd1cmluZyBvdXQgd2hhdCB0aGV5IGRvIGFuZCBob3cgdGhleSBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfRkxPV19UQUJMRV9JUFYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTkxOAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gTmV0d29yayBGbG93IFRhYmxlIEltcGxlbWVudGF0aW9uKioKCkhvbGQgb24gYSBzZWNvbmQuLi4gSSBkaXN0aW5jdGx5IHJlbWVtYmVyIHNlZWluZyBzb21ldGhpbmcgYWJvdXQgYE5GX0ZMT1dfVEFCTEVfSU5FVGAgaW4gdGhlIGNvZGUgYSBiaXQgYWdvLiBUaGF0IG5hbWUgaXMgcmluZ2luZyBhIGJlbGwuIEdpdmVuIHRoYXQgY29udGV4dCwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlJiMzOTtzIGEgbW9yZSBzcGVjaWZpYyB2ZXJzaW9uIGRlZmluZWQgZm9yIElQdjQsIHNvbWV0aGluZyBsaWtlIGBORl9GTE9XX1RBQkxFX0lQVjRgIG9yIHBlcmhhcHMgYSBuYW1pbmcgY29udmVudGlvbiB0aGF0IHdvdWxkIGluY2x1ZGUgc29tZXRoaW5nIHNpbWlsYXIuIEkgbmVlZCB0byBiZSBwcmVjaXNlIGhlcmUsIHNvIEkmIzM5O2xsIGdvIGJhY2sgYW5kIGNyb3NzLXJlZmVyZW5jZSwgdmVyaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgbW9yZSBzcGVjaWZpYyBvciBvcHRpbWl6ZWQgZmxvdyB0YWJsZSBzdHJ1Y3R1cmUgZm9yIElQdjQuIEkmIzM5O20gc3VyZSBpdCYjMzk7cyBzaW1pbGFyLCBidXQgSSB3YW50IHRvIGJlIDEwMCUgYWNjdXJhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9GTE9XX1RBQkxFXyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzAxPWVuZGlmICMgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMzpjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzA0LVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MTE9Y29uZmlnIE5GX0ZMT1dfVEFCTEVcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcyMTpjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjItXHRib29sIFwmIzM0O1N1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzMxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqSWRlbnRpZnlpbmcgdGhlIENvcnJlY3QgTmV0ZmlsdGVyIEZsb3cgVGFibGUgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBiYXNlZCBvbiB3aGF0IEkmIzM5O20gbG9va2luZyBhdCwgaXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgYE5GX0ZMT1dfVEFCTEVfSU5FVGAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBJIG5lZWQgdG8gZm9jdXMgb24uIFRoYXQmIzM5O3MgdGhlIG9uZS4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBJIHNlZSBgTkZfRkxPV19UQUJMRWAsIG9idmlvdXNseSwgYW5kIHRoZW4gdGhlIG1vcmUgc3BlY2lmaWMgYE5GX0ZMT1dfVEFCTEVfSU5FVGAg4oCTIHRoYXQgcmVpbmZvcmNlcyBteSBpbml0aWFsIGltcHJlc3Npb24uIEkgYWxzbyBzZWUgYE5GVF9GTE9XX09GRkxPQURgLCB3aGljaCBtaWdodCBiZSByZWxhdGVkLCBhbmQgdGhlbiB0aGVzZSB0dW5uZWwgb3B0aW9uczogYE5FVF9JUElQYCBhbmQgYElQVjZfVFVOTkVMYC4KCkdpdmVuIHRoZSBjb250ZXh0LCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYE5FVF9JUElQYCBhbmQgYElQVjZfVFVOTkVMYCBkb24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmV4cGVjdGVkIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMgdGhhdCBJIG5lZWQgdG8gYWNjb3VudCBmb3IuIEJlc3QgdG8gdmVyaWZ5IHRob3NlIHJlcXVpcmVtZW50cyBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyBub3csIGJlZm9yZSBJIG1vdmUgYW55IGZ1cnRoZXIuIExldCYjMzk7cyBzZWUgd2hhdCB0aG9zZSBsb29rIGxpa2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfSVBJUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTE0OT1jb25maWcgSVBfUE5QX1JBUlBcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTE2MS1cbm5ldC9pcHY0L0tjb25maWc6MTYyOmNvbmZpZyBORVRfSVBJUFxubmV0L2lwdjQvS2NvbmZpZy0xNjMtXHR0cmlzdGF0ZSBcJiMzNDtJUDogdHVubmVsaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzM3CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBhcyBpZiBJLCBhbiBleHBlcnQsIGFtIHByb2Nlc3NpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkNvbnNpZGVyaW5nIHRoZSBOZXR3b3JrIEludGVyZmFjZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgbmV0d29yayBjb25maWd1cmF0aW9uIGFuZCBpbW1lZGlhdGVseSwgdGhlIGBJUFY2X1RVTk5FTGAgYXNwZWN0IGNvbWVzIHRvIG1pbmQuIEl0JiMzOTtzIGEga2V5IGNvbnNpZGVyYXRpb24uIEkgbmVlZCB0byBlbnN1cmUgYSBwcm9wZXIgYW5kIGZ1bmN0aW9uYWwgSVB2NiB0dW5uZWwgY29uZmlndXJhdGlvbi4gVGhhdCBtZWFucyBJIG5lZWQgdG8gdGhpbmsgdGhyb3VnaCB0aGUgZW5jYXBzdWxhdGlvbiBtZXRob2QsIHRoZSB0dW5uZWwgZW5kcG9pbnRzLCBhbmQgYW55IHBvdGVudGlhbCByb3V0aW5nIGltcGxpY2F0aW9ucy4gVGhlIGltcGxpY2F0aW9ucyBhcmUgYSBzbW9vdGggdHJhbnNpdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgaW1wbGVtZW50YXRpb24gaXMgc2VhbWxlc3MuIEkmIzM5O2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zIGFuZCB0aGUgcmVxdWlyZW1lbnRzIG9mIGltcGxlbWVudGluZyB0aGlzIHByb3RvY29sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBWNl9UVU5ORUwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZz0xOTY9Y29uZmlnIElQVjZfTkRJU0NfTk9ERVRZUEVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cbm5ldC9pcHY2L0tjb25maWc6MTk5OmNvbmZpZyBJUFY2X1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUC1pbi1JUHY2IHR1bm5lbCAoUkZDMjQ3MylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMDQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBQYXRjaCBvbiBOZXR3b3JrIEZvcndhcmRpbmcqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoJiMzOTtzIG1vZGlmaWNhdGlvbiBvZiBgdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGhgIG5lY2Vzc2l0YXRlcyB0aGUgYFZMQU5fODAyMVFgIGNvbmZpZyBvcHRpb24uIEkgdGhvdWdodCBgdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGhgIHdhcyB0b3VjaGVkLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gVGhlIHBhdGNoIGRpZmYgSSB3YXMgZ2l2ZW4gaW5pdGlhbGx5IGRpZG4mIzM5O3QgbGlzdCBgdmxhbl9kZXYuY2AuIEkgbmVlZCB0byByZS1leGFtaW5lIHRoZSBjb250ZXh0LgoKUmlnaHQsIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgc2lnbmF0dXJlIG9mIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgLiBJdCBsb29rcyBsaWtlIGl0IGRpZG4mIzM5O3QgY2hhbmdlIHRoZSBzaWduYXR1cmUgb2YgYG5kb19maWxsX2ZvcndhcmRfcGF0aGAuIE5vdywgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgdGFrZXMgYHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHhgIGluc3RlYWQgb2YgdGhlIGRldmljZSBhbmQgZGVzdGluYXRpb24gTUFDIGFkZHJlc3MuIFRoaXMgYWxsb3dzIHRoZSBjYWxsZXIgdG8gaW5pdGlhbGl6ZSBgZXRoZXJfdHlwZWAgd2l0aGluIHRoZSBjb250ZXh0LgoKU28sIGBWTEFOXzgwMjFRYCBpc24mIzM5O3Qgc3RyaWN0bHkgKnJlcXVpcmVkKiBieSB0aGlzIGNoYW5nZSwgdGhvdWdoIGl0IG1pZ2h0IGJlIGhlbHBmdWwgZm9yIHRlc3RpbmcgcHVycG9zZXMuIE15IGFuYWx5c2lzIHNob3dzIHRoZSBjb3JlIG1vZGlmaWNhdGlvbnMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgbmZfZmxvd190YWJsZV9pcC5jYCBhbmQgYG5mX2Zsb3dfdGFibGVfcGF0aC5jYC4gVGhlcmUgYXJlIGFsc28gY2hhbmdlcyBpbiBgaXBpcC5jYCBhbmQgYGlwNl90dW5uZWwuY2AuCgpOb3csIEkgbmVlZCB0byB6b29tIGluIG9uIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBmb3IgZmxvdyB0YWJsZSBvZmZsb2FkOiBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AuIEkgY2FuIHNlZSB0aGF0IGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGlzIGNhbGxlZCBmcm9tIGBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgIHdoaWNoIGlzIHRoZW4gY2FsbGVkIGZyb20gYG5mdF9mbG93X3JvdXRlYC4KClRoZXJlZm9yZSwgdGhlIGtleSBzeW1ib2xzIHRvIGtlZXAgYW4gZXllIG9uIGFyZToKKiAgIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AKKiAgIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYAoqICAgYG5mdF9mbG93X3JvdXRlYAoqICAgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAKClJlZ2FyZGluZyBjb25maWd1cmF0aW9ucywgdGhlIHBhdGNoIGxpa2VseSBkZXBlbmRzIG9uOgoqICAgYE5GX0ZMT1dfVEFCTEVgCiogICBgTkZfRkxPV19UQUJMRV9JTkVUYAoqICAgYE5GVF9GTE9XX09GRkxPQURgCiogICBgTkVUX0lQSVBgCiogICBgSVBWNl9UVU5ORUxgCgpJIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgYE5GVF9GTE9XX09GRkxPQURgIGhhcyBhbnkgb3RoZXIgc3BlY2lmaWMgZGVwZW5kZW5jaWVzIG9yIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GVF9GTE9XX09GRkxPQUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTQ5OD1jb25maWcgTkZUX0VYVEhEUl9EQ0NQXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTUwMy1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1MDQ6Y29uZmlnIE5GVF9GTE9XX09GRkxPQURcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDUtXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgTkZfRkxPV19UQUJMRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjczNwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2Ygd2hhdCBuZWVkcyB0byBiZSBjb25zaWRlcmVkLCB0aGlua2luZyB0aHJvdWdoIHRoaXMgbG9naWNhbGx5OgoKKipOZXR3b3JrIEZ1bmN0aW9uYWxpdHkgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gaGluZ2Ugb24gYm90aCBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX0ZMT1dfVEFCTEVgLiBHaXZlbiB0aGUgaW50ZXJwbGF5IGltcGxpZWQsIGl0JiMzOTtzIGNsZWFyIHdlIGFic29sdXRlbHkgKm11c3QqIGluY2x1ZGUgYE5GX0NPTk5UUkFDS2AgdG8gcHJvY2VlZC4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrLgoKTm93LCBsZXQmIzM5O3MgcGl2b3QgdG8gc29tZSBtb3JlIHNwZWNpZmljIG5ldHdvcmtpbmcgZmVhdHVyZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UgYWNjb3VudCBmb3IgYE5FVF9JUElQYCBhbmQgYElQVjZfVFVOTkVMYC4gVGltZSB0byBjaGVjayB0aGVpciByZXNwZWN0aXZlIGNvbmZpZ3VyYXRpb24gbG9jYXRpb25zLiBPa2F5LCBJIHNlZSB0aGF0IGBORVRfSVBJUGAgaXMgZGVmaW5lZCB3aXRoaW4gYG5ldC9pcHY0L0tjb25maWdgLCBhbmQgYElQVjZfVFVOTkVMYCByZXNpZGVzIGluIGBuZXQvaXB2Ni9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSB0byBmaW5kIHRoZW0uCgpGaW5hbGx5LCB0aGUgcG90ZW50aWFsIGRlcGVuZGVuY3kgb2YgYE5GX0ZMT1dfVEFCTEVfSU5FVGAgb24gYE5GX1RBQkxFU2AuLi4gQSBjcnVjaWFsIHBvaW50LiBUaGUgY29uZmlndXJhdGlvbiBlbnRyeSBgTkZUX0ZMT1dfT0ZGTE9BRGAgaXMgc2l0dWF0ZWQgaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIGJ1dCBpdCYjMzk7cyAqY29uZGl0aW9uYWxseSogaW5jbHVkZWQsIHNwZWNpZmljYWxseSB3aGVuIGBORl9UQUJMRVNgIGlzIGVuYWJsZWQuIFRoZXJlZm9yZSwgYE5GX1RBQkxFU2AgbWF5IHdlbGwgYWxzbyBiZSBhIHJlcXVpcmVtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZiBORl9UQUJMRVMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZz02PW1lbnVjb25maWcgTkZfVEFCTEVTX0JSSURHRVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTAtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjExOmlmIE5GX1RBQkxFU19CUklER0Vcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTItXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9MzA9Y29uZmlnIE5GX1RQUk9YWV9JUFY0XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzItXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzozMzppZiBORl9UQUJMRVNcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTM0LVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9MzU9Y29uZmlnIE5GX1RBQkxFU19JUFY0XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzktXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzo0MDppZiBORl9UQUJMRVNfSVBWNFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNDEtXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9MjY9Y29uZmlnIE5GX1RQUk9YWV9JUFY2XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMjgtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoyOTppZiBORl9UQUJMRVNcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTMwLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9MzE9Y29uZmlnIE5GX1RBQkxFU19JUFY2XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMzUtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzozNjppZiBORl9UQUJMRVNfSVBWNlxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMzctXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ1NT1jb25maWcgTkZfVEFCTEVTXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3MC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzE6aWYgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDcyLWNvbmZpZyBORl9UQUJMRVNfSU5FVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02MjU9Y29uZmlnIE5GVF9TT0NLRVRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjI3LVx0c2VsZWN0IE5GX1NPQ0tFVF9JUFY0XG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjI4Olx0c2VsZWN0IE5GX1NPQ0tFVF9JUFY2IGlmIE5GX1RBQkxFU19JUFY2XG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjI5LVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NDA9Y29uZmlnIE5GVF9UUFJPWFlcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQyLVx0c2VsZWN0IE5GX0RFRlJBR19JUFY0XG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjQzOlx0c2VsZWN0IE5GX0RFRlJBR19JUFY2IGlmIE5GX1RBQkxFU19JUFY2XG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQ0LVx0c2VsZWN0IE5GX1RQUk9YWV9JUFY0XG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjQ1Olx0c2VsZWN0IE5GX1RQUk9YWV9JUFY2IGlmIE5GX1RBQkxFU19JUFY2XG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQ2LVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NDk9Y29uZmlnIE5GVF9TWU5QUk9YWVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NTktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjYwOmlmIE5GX1RBQkxFU19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTI4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIE5ldGZpbHRlciBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgY29uY2VybiBpcyBwcmV0dHkgY2xlYXI6IHdlIG5lZWQgYE5GX1RBQkxFU2AuIFRoYXQmIzM5O3Mgbm9uLW5lZ290aWFibGUgZm9yIHByZXR0eSBtdWNoIGFueXRoaW5nIG1vZGVybiBpbiBOZXRmaWx0ZXIuIEl04oCZcyB0aGUgZm91bmRhdGlvbmFsIGNvbXBvbmVudC4KCk5vdywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIGBORl9GTE9XX1RBQkxFX0lORVRgLiBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBlbmFibGVkIGFuZCBmdW5jdGlvbmluZyBhcyBleHBlY3RlZC4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdGhlIGZsb3cgdGFibGUgZnVuY3Rpb25hbGl0eSwgb2J2aW91c2x5LCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJiMzOTtzIGxpbmVkIHVwLiBJJiMzOTttIHRoaW5raW5nIG9mIHBvc3NpYmxlIGludGVyYWN0aW9ucyBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cy4gVGltZSB0byBhbmFseXplLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDE9ZW5kaWYgIyBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzAzOmNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDQtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MjEzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE5ldGZpbHRlciBGbG93IFRhYmxlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWUgTmV0ZmlsdGVyIGNvZGUgYW5kIGl0IHNlZW1zIHRoaXMgcGFydCBpcyBvdXRzaWRlIHRoZSBzY29wZSBvZiBgTkZfVEFCTEVTYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IGhlcmU6IGBORl9UQUJMRVNgLCBgTkZfRkxPV19UQUJMRWAsIGBORl9GTE9XX1RBQkxFX0lORVRgLCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIGBORVRfSVBJUGAsIGBJUFY2X1RVTk5FTGAsIGFuZCBgTkZfQ09OTlRSQUNLYC4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGNhbiBgTkZUX0ZMT1dfT0ZGTE9BRGAgZ2V0IHVzIHRvIGBuZnRfZmxvd19yb3V0ZWA/IEkgc2VlbSB0byByZWNhbGwgdGhhdCBmdW5jdGlvbiYjMzk7cyBpbiBgbmZfZmxvd190YWJsZV9wYXRoLmNgLCB3aGljaCwgaWYgSSByZW1lbWJlciBjb3JyZWN0bHksIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgTkZfRkxPV19UQUJMRWAgaXMgZW5hYmxlZC4gT2theSwgbGV0IG1lIGRvdWJsZS1jaGVjay4gSSBzaG91bGQgcmVhbGx5IHZlcmlmeSB0aGlzIGJ5IGNvbnN1bHRpbmcgdGhlIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbXBpbGF0aW9uIGNvbmRpdGlvbnMuIE5lZWQgdG8gYmUgc3VyZSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3RhYmxlX3BhdGgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNDM9bmZfZmxvd190YWJsZS1vYmpzXHRcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDQ6XHRcdFx0XHQgICBuZl9mbG93X3RhYmxlX3BhdGgubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDUtXHRcdFx0XHQgICBuZl9mbG93X3RhYmxlX29mZmxvYWQubyBuZl9mbG93X3RhYmxlX3hkcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NzIyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIEZsb3cgVGFibGUgT2ZmbG9hZCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaGVyZSYjMzk7cyBteSBicmVha2Rvd24uIEl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGBuZl9mbG93X3RhYmxlX3BhdGgub2AgYW5kIGBuZl9mbG93X3RhYmxlX2lwLm9gIGFyZSBpbnRlZ3JhbCBwYXJ0cyBvZiB0aGUgYG5mX2Zsb3dfdGFibGVgIG1vZHVsZS4gU28sIHRoZSBgTkZfRkxPV19UQUJMRWAgY29uZmlnIG9wdGlvbiBpcyB0aGUgcHJpbWFyeSBvbmUgaGVyZS4KCkkmIzM5O3ZlIHplcm9lZCBpbiBvbiB0aGUga2V5IHN5bWJvbHMsIHByaW1hcmlseTogYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgLCBgbmZ0X2Zsb3dfcm91dGVgLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAuIEkgaGFkIHRvIGNvbmZpcm0sIGJ1dCB0aGUgZnVuY3Rpb25zIGBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoYCwgYGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGhgLCBgbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2xgLCBhbmQgYG5mX2Zsb3dfdHVwbGVfZW5jYXBgIGFyZSBhbGwgc3RhdGljIGFuZCB0aGVyZWZvcmUgdW5saWtlbHkgdG8gYmUgZXh0ZXJuYWxseSB0b3VjaGVkLgoKTm93LCBjaGVja2luZyB0aGUgZXhwb3J0cy4uLiB5ZXMsIEkgY2FuIHNlZSB0aGF0IGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgLCBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgLCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AsIGFuZCBgbmZ0X2Zsb3dfcm91dGVgIGFyZSBhbGwgZXhwb3J0ZWQuIFRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nLgoKVGhpcyBsb29rcyBsaWtlIGEgc29saWQgcGllY2Ugb2Ygd29yay4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSByZWZpbmluZyB0aGUgZmxvdyB0YWJsZSBvZmZsb2FkIHBhdGh3YXksIGZvY3VzaW5nIG9uIHRoZSBjb3JyZWN0IGhhbmRsaW5nIG9mIGlubmVyIHByb3RvY29scyBhbmQgdGhlIGV0aGVyX3R5cGUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggSVAtaW4tSVAgYW5kIElQdjYgdHVubmVscy4gVGhlIGNoYW5nZSB0byBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCDigJMgdGFraW5nIGEgY29udGV4dCBzdHJ1Y3QgcmF0aGVyIHRoYW4ganVzdCB0aGUgZGV2aWNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzIOKAkyBpcyBhIHNpZ25pZmljYW50IHBvaW50ZXIuIFRoZW4sIHRoZSB1cGRhdGVkIE5ldGZpbHRlciBmbG93IHRhYmxlIGhvb2tzIHRoYXQgbGV2ZXJhZ2UgdGhpcyBjb250ZXh0IHRvIGFjY3VyYXRlbHkgaWRlbnRpZnkgZW5jYXBzdWxhdGVkIHByb3RvY29scywgYXJlIGZ1cnRoZXIgZW5oYW5jZW1lbnRzLiBUaGVzZSBtb2RpZmljYXRpb25zIHN1Z2dlc3QgdGhhdCB0aGVzZSBhcmUgY3JpdGljYWwgY2hhbmdlcyB3aXRoaW4gYm90aCBjb3JlIG5ldHdvcmtpbmcgYW5kIE5ldGZpbHRlciBzdWJzeXN0ZW1zIHRoYXQgYXJlIGluZGVlZCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoKVG8gY29uZmlybSB0aGUgY29udGV4dCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMgaGVyZS4gSXQmIzM5O3MgY2xlYXJseSB0aWVkIHRvIGBORl9UQUJMRVNgLCBgTkZfRkxPV19UQUJMRWAsIGFuZCBgTkZfRkxPV19UQUJMRV9JTkVUYCwgYE5GVF9GTE9XX09GRkxPQURgLiBBbHNvLCAgYE5FVF9JUElQYCwgYElQVjZfVFVOTkVMYCBhbmQgYE5GX0NPTk5UUkFDS2AgYXJlIGxpa2VseSByZWxhdGVkLgoKSnVzdCBhIGZpbmFsIHNhbml0eSBjaGVjay4uLiBJIHNob3VsZCB2ZXJpZnkgdGhhdCBgTkZfRkxPV19UQUJMRV9JTkVUYCBpcyB0aGUgY29ycmVjdCBzY29wZS4gSXMgdGhlcmUgYW4gYE5GX0ZMT1dfVEFCTEVfSVBWNGAgb3B0aW9uLCBvciBpcyB0aGUgJiMzNDtpbmV0JiMzNDsgc2NvcGUgYnJvYWQgZW5vdWdoPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9GTE9XX1RBQkxFX0lQVjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTgxNQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGluY29ycmVjdDsgaXQgYXBwZWFycyB0aGUgZnVuY3Rpb25hbGl0eSBJIHdhcyBsb29raW5nIGZvciB3YXMgbWVyZ2VkLCBsaWtlbHkgaW50byBzb21ldGhpbmcgbGlrZSBgTkZfRkxPV19UQUJMRV9JTkVUYCBvciBhIHNpbWlsYXIgc3RydWN0dXJlLgoKTm93LCB0byB0cmFjayBkb3duIHRoZSByZWxldmFudCBjb2RlLi4uIExldCYjMzk7cyBjaGVjayB0aGUgYE5FVF9JUEdSRWAgbW9kdWxlLiBEb2VzIGl0IGhhdmUgYSBgZmlsbF9mb3J3YXJkX3BhdGhgIGZ1bmN0aW9uIGRlZmluZWQ/IFRoYXQgd291bGQgYmUgYSBsb2dpY2FsIHBsYWNlIHRvIGxvb2sgZm9yIGZvcndhcmRpbmcgcGF0aCBsb2dpYywgZ2l2ZW4gdGhlIGNvbnRleHQuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWxsX2ZvcndhcmRfcGF0aC4qZ3JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5OTYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIHRoZSBMYW5kc2NhcGUqKgoKTm8sIHRoYXQmIzM5O3Mgbm90IGl0LiBPa2F5LCBsZXQmIzM5O3MgcGl2b3QuIFRoZSBzaXR1YXRpb24gc2VlbXMgZmFtaWxpYXIsIHNvIEkgbmVlZCB0byBjaGVjayBgdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGhgLiBUaGF0IGZ1bmN0aW9uLCBpbiB0aGUgY29udGV4dCBvZiBWTEFOIGRldmljZSBmb3J3YXJkaW5nLCBpcyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjcnVjaWFsIGxvZ2ljIHJlbGF0ZWQgdG8gcGFja2V0IGhhbmRsaW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHZlcmlmeSBpZiBteSBpbml0aWFsIGh1bmNoIGlzIGNvcnJlY3QgYnkgZXhhbWluaW5nIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiBhbmQgZ3VpZGUgbXkgdHJvdWJsZXNob290aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvODAyMXEvdmxhbl9kZXYuYz03NTY9c3RhdGljIGludCB2bGFuX2Rldl9nZXRfaWZsaW5rKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzYyLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6NzYzOnN0YXRpYyBpbnQgdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTc2NC1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXG4tLVxubmV0LzgwMjFxL3ZsYW5fZGV2LmM9MTA3OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZsYW5fbmV0ZGV2X29wcyA9IHtcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMTA5LVx0Lm5kb19nZXRfaWZsaW5rXHRcdD0gdmxhbl9kZXZfZ2V0X2lmbGluayxcbm5ldC84MDIxcS92bGFuX2Rldi5jOjExMTA6XHQubmRvX2ZpbGxfZm9yd2FyZF9wYXRoXHQ9IHZsYW5fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoLFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTExMS1cdC5uZG9faHd0c3RhbXBfZ2V0XHQ9IHZsYW5faHd0c3RhbXBfZ2V0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQ3NQoJCQkJCQkJb3V0cHV0OiAyMzkKCQkJCQkJCXRob3VnaHRzOiAxMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMgY29uZmlndXJhdGlvbiwgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKioKCkFscmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGxpc3Qgb2YgY29uZmlndXJhdGlvbnMsIGFuZCBpdCBsb29rcyBsaWtlIGEgZ29vZCwgYmFzaWMgc2V0LiBJJiMzOTt2ZSBnb3QgYE5GX1RBQkxFU2AgYW5kIGl0cyBhc3NvY2lhdGVkIGNvbXBvbmVudHMgYE5GX0ZMT1dfVEFCTEVgLCBgTkZfRkxPV19UQUJMRV9JTkVUYCwgYW5kIGBORlRfRkxPV19PRkZMT0FEYC4gRXhjZWxsZW50LCB0aGF0JiMzOTtzIHRoZSBtb2Rlcm4sIHBlcmZvcm1hbnQgd2F5IHRvIGhhbmRsZSBuZXR3b3JrIGZpbHRlcmluZyBhbmQgZm9yd2FyZGluZy4gVGhlbiBJIHNlZSBgTkVUX0lQSVBgIGFuZCBgSVBWNl9UVU5ORUxgLCBzdWdnZXN0aW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZSB0dW5uZWxpbmcsIHdoaWNoIGlzIHNlbnNpYmxlIGluIG1hbnkgZW52aXJvbm1lbnRzLiBXZSBoYXZlIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVsZW1lbnQgd2l0aCBgTkZfQ09OTlRSQUNLYCB3aGljaCBJIHdpbGwga2VlcC4KClRoZSBvbmUgdGhhdCBqdW1wcyBvdXQgdG8gbWUgaXMgYFZMQU5fODAyMVFgLiBWTEFOIHN1cHBvcnQgaXMgZXNzZW50aWFsIGluIG1hbnkgZW52aXJvbm1lbnRzLiBHaXZlbiB0aGUgb3RoZXIgY29uZmlndXJhdGlvbnMsIGl0JiMzOTtzIGEgZ29vZCBpZGVhIHRvIGluY2x1ZGUgaXQuIEp1c3QgdG8gYmUgc2FmZSwgSSYjMzk7bSBnb2luZyB0byBhZGQgdGhhdCB0byBteSBzdGFuZGFyZCBjb25maWdzLCBhcyBpdCB3b24mIzM5O3QgaHVydCwgYW5kIG1heSBpbmRlZWQgbWFrZSBhIGJpZyBkaWZmZXJlbmNlIGluIGEgbW9yZSBjb21wbGV4IHNldHVwLgoKTm93IHRoYXQgSSYjMzk7dmUgcmV2aWV3ZWQgdGhvc2UgY29tcG9uZW50cywgSSYjMzk7bSBoYXBweSB0byBnbyBhaGVhZCBhbmQgJiMzNDtzZXQtcmVzdWx0cyYjMzQ7LiBJdCYjMzk7cyBhIHF1aWNrIGNvbmZpZyBhbmQgSSYjMzk7bSBjb25maWRlbnQgYWJvdXQgdGhlc2Ugc2V0dGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFX0lORVQmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtORVRfSVBJUCYjMzQ7LAogICAgJiMzNDtJUFY2X1RVTk5FTCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2smIzM0OywKICAgICYjMzQ7bmZ0X2Zsb3dfcm91dGUmIzM0OywKICAgICYjMzQ7ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBvZmZsb2FkIHBhdGggdG8gcHJvcGVybHkgaGFuZGxlIGlubmVyIHByb3RvY29scyBhbmQgZXRoZXJfdHlwZSwgZXNwZWNpYWxseSBmb3IgSVAtaW4tSVAgYW5kIElQdjYgdHVubmVscy4gSXQgY2hhbmdlcyBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCB0byB0YWtlIGEgY29udGV4dCBzdHJ1Y3QgaW5zdGVhZCBvZiBqdXN0IHRoZSBkZXZpY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3MsIGFuZCB1cGRhdGVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBob29rcyB0byB1c2UgdGhpcyBjb250ZXh0IGFuZCBjb3JyZWN0bHkgaWRlbnRpZnkgZW5jYXBzdWxhdGVkIHByb3RvY29scy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORl9GTE9XX1RBQkxFX0lORVQmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtORVRfSVBJUCYjMzQ7LAogICAgJiMzNDtJUFY2X1RVTk5FTCYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2smIzM0OywKICAgICYjMzQ7bmZ0X2Zsb3dfcm91dGUmIzM0OywKICAgICYjMzQ7ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBvZmZsb2FkIHBhdGggdG8gcHJvcGVybHkgaGFuZGxlIGlubmVyIHByb3RvY29scyBhbmQgZXRoZXJfdHlwZSwgZXNwZWNpYWxseSBmb3IgSVAtaW4tSVAgYW5kIElQdjYgdHVubmVscy4gSXQgY2hhbmdlcyBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCB0byB0YWtlIGEgY29udGV4dCBzdHJ1Y3QgaW5zdGVhZCBvZiBqdXN0IHRoZSBkZXZpY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3MsIGFuZCB1cGRhdGVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBob29rcyB0byB1c2UgdGhpcyBjb250ZXh0IGFuZCBjb3JyZWN0bHkgaWRlbnRpZnkgZW5jYXBzdWxhdGVkIHByb3RvY29scy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjg6MDcuMzQ5NzEzNTEzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMzc4Njg3NDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZfRkxPV19UQUJMRV9JTkVUXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCIsXG4gICAgXCJORVRfSVBJUFwiLFxuICAgIFwiSVBWNl9UVU5ORUxcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiVkxBTl84MDIxUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rXCIsXG4gICAgXCJuZnRfZmxvd19yb3V0ZVwiLFxuICAgIFwiZGV2X2ZpbGxfZm9yd2FyZF9wYXRoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIG9mZmxvYWQgcGF0aCB0byBwcm9wZXJseSBoYW5kbGUgaW5uZXIgcHJvdG9jb2xzIGFuZCBldGhlcl90eXBlLCBlc3BlY2lhbGx5IGZvciBJUC1pbi1JUCBhbmQgSVB2NiB0dW5uZWxzLiBJdCBjaGFuZ2VzIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIHRvIHRha2UgYSBjb250ZXh0IHN0cnVjdCBpbnN0ZWFkIG9mIGp1c3QgdGhlIGRldmljZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzcywgYW5kIHVwZGF0ZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGhvb2tzIHRvIHVzZSB0aGlzIGNvbnRleHQgYW5kIGNvcnJlY3RseSBpZGVudGlmeSBlbmNhcHN1bGF0ZWQgcHJvdG9jb2xzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBzdWJzeXN0ZW1zIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjA3LjM0OTcyMDM3M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyMTM5MTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGQ2YWEwOTBmOGQ1OGYxMTg5OTlhMzJkM2M1MjhmMTY4Yzk1YTdlZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDAyOjI4OjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXFxuaW5kZXggYTAzYWY5NzUwNTczMS4uOTI2MTE4MDI4MDFlYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xcbkBAIC0yODMsMTQgKzI4MywxOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBhaXJvaGFfd2RtYV9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgc3RhY2s7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IGN0eCA9IHtcXG4rXFx0XFx0LmRldiA9IGRldixcXG4rXFx0fTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdGlmICghZGV2KVxcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFxuK1xcdGV0aGVyX2FkZHJfY29weShjdHguZGFkZHIsIGFkZHIpO1xcbitcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBcXHUwMDI2c3RhY2spO1xcbitcXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoXFx1MDAyNmN0eCwgXFx1MDAyNnN0YWNrKTtcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcXG5pbmRleCA3NzFkOTExOGY5NGFkLi45OWIyOGFhYTdjYzQ3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmNcXG5AQCAtOTIsNiArOTIsOSBAQCBzdGF0aWMgaW50XFxuIG10a19mbG93X2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsIHN0cnVjdCBtdGtfd2RtYV9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgc3RhY2s7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IGN0eCA9IHtcXG4rXFx0XFx0LmRldiA9IGRldixcXG4rXFx0fTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcXG4gXFx0aW50IGVycjtcXG4gXFxuQEAgLTEwMSw4ICsxMDQsMTAgQEAgbXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwgc3RydWN0IG10a193ZG1hX2lcXG4gXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRfTUVESUFURUtfU09DX1dFRCkpXFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFxuK1xcdGV0aGVyX2FkZHJfY29weShjdHguZGFkZHIsIGFkZHIpO1xcbitcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBcXHUwMDI2c3RhY2spO1xcbitcXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoXFx1MDAyNmN0eCwgXFx1MDAyNnN0YWNrKTtcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuaW5kZXggNjJjZmFkN2U2Yjc5YS4uNjhjY2I1ODY4MDcwZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbkBAIC05MDIsNyArOTAyLDcgQEAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCB7XFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBpbjZfYWRkclxcdGRzdF92NjtcXG4gXFx0XFx0XFx0fTtcXG4gXFxuLVxcdFxcdFxcdHU4XFx0bDNfcHJvdG87XFxuK1xcdFxcdFxcdHU4XFx0aW5uZXJfcHJvdG87XFxuIFxcdFxcdH0gdHVuO1xcbiBcXHRcXHRzdHJ1Y3Qge1xcbiBcXHRcXHRcXHRlbnVtIHtcXG5AQCAtOTM5LDYgKzkzOSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sge1xcbiBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCB7XFxuIFxcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuIFxcdHU4XFx0XFx0XFx0ZGFkZHJbRVRIX0FMRU5dO1xcbitcXHRfX2JlMTZcXHRcXHRcXHRldGhlcl90eXBlO1xcbiBcXG4gXFx0aW50XFx0XFx0XFx0bnVtX3ZsYW5zO1xcbiBcXHRzdHJ1Y3Qge1xcbkBAIC0zNDI2LDcgKzM0MjcsNyBAQCB2b2lkIGRldl9yZW1vdmVfb2ZmbG9hZChzdHJ1Y3QgcGFja2V0X29mZmxvYWQgKnBvKTtcXG4gXFxuIGludCBkZXZfZ2V0X2lmbGluayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gaW50IGRldl9maWxsX21ldGFkYXRhX2RzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4taW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsXFxuK2ludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayk7XFxuIHZvaWQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xcbiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXFxuaW5kZXggYTA5MGVjM2ZmZWYyZS4uZjJlMjc3MWYxODhmNCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxcbkBAIC0xMTcsNyArMTE3LDcgQEAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWwge1xcbiBcXHRcXHRzdHJ1Y3QgaW42X2FkZHJcXHRkc3RfdjY7XFxuIFxcdH07XFxuIFxcbi1cXHR1OFxcdGwzX3Byb3RvO1xcbitcXHR1OFxcdGlubmVyX3Byb3RvO1xcbiB9O1xcbiBcXG4gc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcXG5pbmRleCBlNTBlZDY3N2RlNzI1Li4xM2RmZDIxMTNhNWFiIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2Rldi5jXFxuKysrIGIvbmV0L2NvcmUvZGV2LmNcXG5AQCAtNzY5LDM1ICs3NjksMzEgQEAgdm9pZCBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZSk7XFxuIFxcbi1pbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcXG4raW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpsYXN0X2RldjtcXG4tXFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0ge1xcbi1cXHRcXHQuZGV2XFx0PSBkZXYsXFxuLVxcdH07XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXG4tXFx0bWVtY3B5KGN0eC5kYWRkciwgZGFkZHIsIHNpemVvZihjdHguZGFkZHIpKTtcXG4gXFx0c3RhY2stXFx1MDAzZW51bV9wYXRocyA9IDA7XFxuLVxcdHdoaWxlIChjdHguZGV2IFxcdTAwMjZcXHUwMDI2IGN0eC5kZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aCkge1xcbi1cXHRcXHRsYXN0X2RldiA9IGN0eC5kZXY7XFxuK1xcdHdoaWxlIChjdHgtXFx1MDAzZWRldiBcXHUwMDI2XFx1MDAyNiBjdHgtXFx1MDAzZWRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKSB7XFxuK1xcdFxcdGxhc3RfZGV2ID0gY3R4LVxcdTAwM2VkZXY7XFxuIFxcdFxcdHBhdGggPSBkZXZfZndkX3BhdGgoc3RhY2spO1xcbiBcXHRcXHRpZiAoIXBhdGgpXFxuIFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gXFxuIFxcdFxcdG1lbXNldChwYXRoLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2VfcGF0aCkpO1xcbi1cXHRcXHRyZXQgPSBjdHguZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgoXFx1MDAyNmN0eCwgcGF0aCk7XFxuK1xcdFxcdHJldCA9IGN0eC1cXHUwMDNlZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBwYXRoKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gXFxuIFxcdFxcdHN0YWNrLVxcdTAwM2VudW1fcGF0aHMrKztcXG4tXFx0XFx0aWYgKFdBUk5fT05fT05DRShsYXN0X2RldiA9PSBjdHguZGV2KSlcXG4rXFx0XFx0aWYgKFdBUk5fT05fT05DRShsYXN0X2RldiA9PSBjdHgtXFx1MDAzZWRldikpXFxuIFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFjdHguZGV2KVxcbitcXHRpZiAoIWN0eC1cXHUwMDNlZGV2KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XFxuQEAgLTgwNSw3ICs4MDEsNyBAQCBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcXG4gXFx0XFx0Z290byBlcnJfb3V0O1xcbiBcXG4gXFx0cGF0aC1cXHUwMDNldHlwZSA9IERFVl9QQVRIX0VUSEVSTkVUO1xcbi1cXHRwYXRoLVxcdTAwM2VkZXYgPSBjdHguZGV2O1xcbitcXHRwYXRoLVxcdTAwM2VkZXYgPSBjdHgtXFx1MDAzZWRldjtcXG4gXFx0c3RhY2stXFx1MDAzZW51bV9wYXRocysrO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuY1xcbmluZGV4IGZiN2Q5NmY5OWIwNmIuLjE2MzAzMjVjNzdkMzQgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBpcC5jXFxuKysrIGIvbmV0L2lwdjQvaXBpcC5jXFxuQEAgLTM2MCw2ICszNjAsOSBAQCBzdGF0aWMgaW50IGlwaXBfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcXG4gXFx0Y29uc3Qgc3RydWN0IGlwaGRyICp0aXBoID0gXFx1MDAyNnR1bm5lbC1cXHUwMDNlcGFybXMuaXBoO1xcbiBcXHRzdHJ1Y3QgcnRhYmxlICpydDtcXG4gXFxuK1xcdGlmIChjdHgtXFx1MDAzZWV0aGVyX3R5cGUgIT0gY3B1X3RvX2JlMTYoRVRIX1BfSVApKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbiBcXHRpZiAodHVubmVsLVxcdTAwM2Vjb2xsZWN0X21kKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbkBAIC0zNzUsNyArMzc4LDcgQEAgc3RhdGljIGludCBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxuIFxcdHBhdGgtXFx1MDAzZXR5cGUgPSBERVZfUEFUSF9UVU47XFxuIFxcdHBhdGgtXFx1MDAzZXR1bi5zcmNfdjQuc19hZGRyID0gdGlwaC1cXHUwMDNlc2FkZHI7XFxuIFxcdHBhdGgtXFx1MDAzZXR1bi5kc3RfdjQuc19hZGRyID0gdGlwaC1cXHUwMDNlZGFkZHI7XFxuLVxcdHBhdGgtXFx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBJUDtcXG4rXFx0cGF0aC1cXHUwMDNldHVuLmlubmVyX3Byb3RvID0gSVBQUk9UT19JUElQO1xcbiBcXHRwYXRoLVxcdTAwM2V0dW4uZHN0ID0gXFx1MDAyNnJ0LVxcdTAwM2Vkc3Q7XFxuIFxcdHBhdGgtXFx1MDAzZWRldiA9IGN0eC1cXHUwMDNlZGV2O1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXFxuaW5kZXggZDgwMDIwYmMyNjIwZS4uN2I1NDkxOTIzMmJhMyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcXG4rKysgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcXG5AQCAtMTg0OSw2ICsxODQ5LDkgQEAgc3RhdGljIGludCBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxuIFxcdHN0cnVjdCBmbG93aTYgZmw2O1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKGN0eC1cXHUwMDNlZXRoZXJfdHlwZSAhPSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4gXFx0aWYgKHQtXFx1MDAzZXBhcm1zLmZsYWdzIFxcdTAwMjYgKElQNl9UTkxfRl9VU0VfT1JJR19UQ0xBU1MgfFxcbiBcXHRcXHRcXHQgICAgICBJUDZfVE5MX0ZfVVNFX09SSUdfRkxPV0xBQkVMIHxcXG4gXFx0XFx0XFx0ICAgICAgSVA2X1ROTF9GX1VTRV9PUklHX0ZXTUFSSykpXFxuQEAgLTE4NjksNyArMTg3Miw3IEBAIHN0YXRpYyBpbnQgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbiBcXHRcXHRwYXRoLVxcdTAwM2V0eXBlID0gREVWX1BBVEhfVFVOO1xcbiBcXHRcXHRwYXRoLVxcdTAwM2V0dW4uc3JjX3Y2ID0gZmw2LnNhZGRyO1xcbiBcXHRcXHRwYXRoLVxcdTAwM2V0dW4uZHN0X3Y2ID0gZmw2LmRhZGRyO1xcbi1cXHRcXHRwYXRoLVxcdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQVjY7XFxuK1xcdFxcdHBhdGgtXFx1MDAzZXR1bi5pbm5lcl9wcm90byA9IElQUFJPVE9fSVBWNjtcXG4gXFx0XFx0cGF0aC1cXHUwMDNldHVuLmRzdCA9IGRzdDtcXG4gXFx0XFx0cGF0aC1cXHUwMDNlZGV2ID0gY3R4LVxcdTAwM2VkZXY7XFxuIFxcdFxcdGN0eC1cXHUwMDNlZGV2ID0gZHN0LVxcdTAwM2VkZXY7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcXG5pbmRleCAwYjMxNGIxMGU3MDVhLi5hZjUzNDAwMGEyODdhIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcXG5AQCAtMTQ3LDEzICsxNDcsMTQgQEAgc3RhdGljIGJvb2wgaXBfaGFzX29wdGlvbnModW5zaWduZWQgaW50IHRob2ZmKVxcbiBcXG4gc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHgge1xcbiBcXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZVxcdCppbjtcXG4rXFx0X19iZTE2XFx0XFx0XFx0ZXRoZXJfdHlwZTtcXG4gXFx0dTMyXFx0XFx0XFx0b2Zmc2V0O1xcbiBcXHR1MzJcXHRcXHRcXHRoZHJzaXplO1xcbiBcXHRzdHJ1Y3Qge1xcbiBcXHRcXHQvKiBUdW5uZWwgSVAgaGVhZGVyIHNpemUgKi9cXG4gXFx0XFx0dTMyIGhkcl9zaXplO1xcbiBcXHRcXHQvKiBJUCB0dW5uZWwgcHJvdG9jb2wgKi9cXG4tXFx0XFx0dTggcHJvdG87XFxuK1xcdFxcdHU4IGlubmVyX3Byb3RvO1xcbiBcXHR9IHR1bjtcXG4gfTtcXG4gXFxuQEAgLTE2MSw3ICsxNjIsNiBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X3R1cGxlX2VuY2FwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlKVxcbiB7XFxuLVxcdF9fYmUxNiBpbm5lcl9wcm90byA9IHNrYi1cXHUwMDNlcHJvdG9jb2w7XFxuIFxcdHN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aDtcXG4gXFx0c3RydWN0IHBwcG9lX2hkciAqcGhkcjtcXG4gXFx0c3RydWN0IGlwdjZoZHIgKmlwNmg7XFxuQEAgLTE3OSwzMyArMTc5LDMxIEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfdHVwbGVfZW5jYXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4gXFx0XFx0dmV0aCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpO1xcbiBcXHRcXHR0dXBsZS1cXHUwMDNlZW5jYXBbaV0uaWQgPSBudG9ocyh2ZXRoLVxcdTAwM2VoX3ZsYW5fVENJKTtcXG4gXFx0XFx0dHVwbGUtXFx1MDAzZWVuY2FwW2ldLnByb3RvID0gc2tiLVxcdTAwM2Vwcm90b2NvbDtcXG4tXFx0XFx0aW5uZXJfcHJvdG8gPSB2ZXRoLVxcdTAwM2VoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvO1xcbiBcXHRcXHRvZmZzZXQgKz0gVkxBTl9ITEVOO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBodG9ucyhFVEhfUF9QUFBfU0VTKTpcXG4gXFx0XFx0cGhkciA9IChzdHJ1Y3QgcHBwb2VfaGRyICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIFxcdFxcdHR1cGxlLVxcdTAwM2VlbmNhcFtpXS5pZCA9IG50b2hzKHBoZHItXFx1MDAzZXNpZCk7XFxuIFxcdFxcdHR1cGxlLVxcdTAwM2VlbmNhcFtpXS5wcm90byA9IHNrYi1cXHUwMDNlcHJvdG9jb2w7XFxuLVxcdFxcdGlubmVyX3Byb3RvID0gKigoX19iZTE2ICopKHBoZHIgKyAxKSk7XFxuIFxcdFxcdG9mZnNldCArPSBQUFBPRV9TRVNfSExFTjtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuLVxcdHN3aXRjaCAoaW5uZXJfcHJvdG8pIHtcXG4rXFx0c3dpdGNoIChjdHgtXFx1MDAzZWV0aGVyX3R5cGUpIHtcXG4gXFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XFxuIFxcdFxcdGlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBvZmZzZXQpO1xcbi1cXHRcXHRpZiAoY3R4LVxcdTAwM2V0dW4ucHJvdG8gPT0gSVBQUk9UT19JUElQKSB7XFxuK1xcdFxcdGlmIChjdHgtXFx1MDAzZXR1bi5pbm5lcl9wcm90byA9PSBJUFBST1RPX0lQSVApIHtcXG4gXFx0XFx0XFx0dHVwbGUtXFx1MDAzZXR1bi5kc3RfdjQuc19hZGRyID0gaXBoLVxcdTAwM2VkYWRkcjtcXG4gXFx0XFx0XFx0dHVwbGUtXFx1MDAzZXR1bi5zcmNfdjQuc19hZGRyID0gaXBoLVxcdTAwM2VzYWRkcjtcXG4tXFx0XFx0XFx0dHVwbGUtXFx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBJUDtcXG4rXFx0XFx0XFx0dHVwbGUtXFx1MDAzZXR1bi5pbm5lcl9wcm90byA9IElQUFJPVE9fSVBJUDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG4gXFx0XFx0aXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIG9mZnNldCk7XFxuLVxcdFxcdGlmIChjdHgtXFx1MDAzZXR1bi5wcm90byA9PSBJUFBST1RPX0lQVjYpIHtcXG4rXFx0XFx0aWYgKGN0eC1cXHUwMDNldHVuLmlubmVyX3Byb3RvID09IElQUFJPVE9fSVBWNikge1xcbiBcXHRcXHRcXHR0dXBsZS1cXHUwMDNldHVuLmRzdF92NiA9IGlwNmgtXFx1MDAzZWRhZGRyO1xcbiBcXHRcXHRcXHR0dXBsZS1cXHUwMDNldHVuLnNyY192NiA9IGlwNmgtXFx1MDAzZXNhZGRyO1xcbi1cXHRcXHRcXHR0dXBsZS1cXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUFY2O1xcbitcXHRcXHRcXHR0dXBsZS1cXHUwMDNldHVuLmlubmVyX3Byb3RvID0gSVBQUk9UT19JUFY2O1xcbiBcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbkBAIC0zMjgsNyArMzI2LDcgQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdGlmIChpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fSVBJUCkge1xcbi1cXHRcXHRjdHgtXFx1MDAzZXR1bi5wcm90byA9IGlwaC1cXHUwMDNlcHJvdG9jb2w7XFxuK1xcdFxcdGN0eC1cXHUwMDNldHVuLmlubmVyX3Byb3RvID0gaXBoLVxcdTAwM2Vwcm90b2NvbDtcXG4gXFx0XFx0Y3R4LVxcdTAwM2V0dW4uaGRyX3NpemUgPSBzaXplO1xcbiBcXHRcXHRjdHgtXFx1MDAzZW9mZnNldCArPSBjdHgtXFx1MDAzZXR1bi5oZHJfc2l6ZTtcXG4gXFx0fVxcbkBAIC0zNTMsNyArMzUxLDcgQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDZfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdGlmIChpcDZoLVxcdTAwM2VuZXh0aGRyID09IElQUFJPVE9fSVBWNikge1xcbi1cXHRcXHRjdHgtXFx1MDAzZXR1bi5wcm90byA9IGlwNmgtXFx1MDAzZW5leHRoZHI7XFxuK1xcdFxcdGN0eC1cXHUwMDNldHVuLmlubmVyX3Byb3RvID0gaXA2aC1cXHUwMDNlbmV4dGhkcjtcXG4gXFx0XFx0Y3R4LVxcdTAwM2V0dW4uaGRyX3NpemUgPSBzaXplb2YoKmlwNmgpO1xcbiBcXHRcXHRjdHgtXFx1MDAzZW9mZnNldCArPSBjdHgtXFx1MDAzZXR1bi5oZHJfc2l6ZTtcXG4gXFx0fVxcbkBAIC0zNjcsOCArMzY1LDggQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDZfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIHN0YXRpYyB2b2lkIG5mX2Zsb3dfaXBfdHVubmVsX3BvcChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4tXFx0aWYgKGN0eC1cXHUwMDNldHVuLnByb3RvICE9IElQUFJPVE9fSVBJUCBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgY3R4LVxcdTAwM2V0dW4ucHJvdG8gIT0gSVBQUk9UT19JUFY2KVxcbitcXHRpZiAoY3R4LVxcdTAwM2V0dW4uaW5uZXJfcHJvdG8gIT0gSVBQUk9UT19JUElQIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBjdHgtXFx1MDAzZXR1bi5pbm5lcl9wcm90byAhPSBJUFBST1RPX0lQVjYpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHNrYl9wdWxsKHNrYiwgY3R4LVxcdTAwM2V0dW4uaGRyX3NpemUpO1xcbkBAIC0zNzYsMTAgKzM3NCwxMCBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X2lwX3R1bm5lbF9wb3Aoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiBwcm90bylcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4tXFx0X19iZTE2IGlubmVyX3Byb3RvID0gc2tiLVxcdTAwM2Vwcm90b2NvbDtcXG4gXFx0c3RydWN0IHZsYW5fZXRoaGRyICp2ZXRoO1xcbitcXHRfX2JlMTYgZXRoZXJfdHlwZTtcXG4gXFx0Ym9vbCByZXQgPSBmYWxzZTtcXG4gXFxuIFxcdHN3aXRjaCAoc2tiLVxcdTAwM2Vwcm90b2NvbCkge1xcbkBAIC0zODgsMjIgKzM4NiwyNyBAQCBzdGF0aWMgYm9vbCBuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRcXHR2ZXRoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKXNrYl9tYWNfaGVhZGVyKHNrYik7XFxuLVxcdFxcdGlmICh2ZXRoLVxcdTAwM2VoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvID09IHByb3RvKSB7XFxuLVxcdFxcdFxcdGN0eC1cXHUwMDNlb2Zmc2V0ICs9IFZMQU5fSExFTjtcXG4tXFx0XFx0XFx0aW5uZXJfcHJvdG8gPSBwcm90bztcXG4tXFx0XFx0XFx0cmV0ID0gdHJ1ZTtcXG4tXFx0XFx0fVxcbitcXHRcXHRjdHgtXFx1MDAzZWV0aGVyX3R5cGUgPSB2ZXRoLVxcdTAwM2VoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvO1xcbitcXHRcXHRjdHgtXFx1MDAzZW9mZnNldCArPSBWTEFOX0hMRU47XFxuK1xcdFxcdHJldCA9IHRydWU7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIGh0b25zKEVUSF9QX1BQUF9TRVMpOlxcbi1cXHRcXHRpZiAobmZfZmxvd19wcHBvZV9wcm90byhza2IsIFxcdTAwMjZpbm5lcl9wcm90bykgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIGlubmVyX3Byb3RvID09IHByb3RvKSB7XFxuLVxcdFxcdFxcdGN0eC1cXHUwMDNlb2Zmc2V0ICs9IFBQUE9FX1NFU19ITEVOO1xcbi1cXHRcXHRcXHRyZXQgPSB0cnVlO1xcbi1cXHRcXHR9XFxuK1xcdFxcdGlmICghbmZfZmxvd19wcHBvZV9wcm90byhza2IsIFxcdTAwMjZldGhlcl90eXBlKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0XFx0Y3R4LVxcdTAwM2VldGhlcl90eXBlID0gZXRoZXJfdHlwZTtcXG4rXFx0XFx0Y3R4LVxcdTAwM2VvZmZzZXQgKz0gUFBQT0VfU0VTX0hMRU47XFxuK1xcdFxcdHJldCA9IHRydWU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4rXFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG4rXFx0XFx0Y3R4LVxcdTAwM2VldGhlcl90eXBlID0gc2tiLVxcdTAwM2Vwcm90b2NvbDtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbiBcXG4tXFx0c3dpdGNoIChpbm5lcl9wcm90bykge1xcbitcXHRzd2l0Y2ggKGN0eC1cXHUwMDNlZXRoZXJfdHlwZSkge1xcbiBcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4gXFx0XFx0cmV0ID0gbmZfZmxvd19pcDRfdHVubmVsX3Byb3RvKGN0eCwgc2tiKTtcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTQ1NSw5ICs0NTgsNiBAQCBuZl9mbG93X29mZmxvYWRfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXFxuIHtcXG4gXFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB0dXBsZSA9IHt9O1xcbiBcXG4tXFx0aWYgKCFuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChjdHgsIHNrYiwgaHRvbnMoRVRIX1BfSVApKSlcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcbiBcXHRpZiAobmZfZmxvd190dXBsZV9pcChjdHgsIHNrYiwgXFx1MDAyNnR1cGxlKSBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG5AQCAtNjExLDcgKzYxMSw3IEBAIHN0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXBpcF9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aXBoLVxcdTAwM2V2ZXJzaW9uXFx0PSA0O1xcbiBcXHRpcGgtXFx1MDAzZWlobFxcdD0gc2l6ZW9mKCppcGgpIFxcdTAwM2VcXHUwMDNlIDI7XFxuIFxcdGlwaC1cXHUwMDNlZnJhZ19vZmZcXHQ9IGlwX210dV9sb2NrZWQoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpID8gMCA6IGZyYWdfb2ZmO1xcbi1cXHRpcGgtXFx1MDAzZXByb3RvY29sXFx0PSB0dXBsZS1cXHUwMDNldHVuLmwzX3Byb3RvO1xcbitcXHRpcGgtXFx1MDAzZXByb3RvY29sXFx0PSB0dXBsZS1cXHUwMDNldHVuLmlubmVyX3Byb3RvO1xcbiBcXHRpcGgtXFx1MDAzZXRvc1xcdD0gdG9zO1xcbiBcXHRpcGgtXFx1MDAzZWRhZGRyXFx0PSB0dXBsZS1cXHUwMDNldHVuLnNyY192NC5zX2FkZHI7XFxuIFxcdGlwaC1cXHUwMDNlc2FkZHJcXHQ9IHR1cGxlLVxcdTAwM2V0dW4uZHN0X3Y0LnNfYWRkcjtcXG5AQCAtNzk0LDMzICs3OTQsMTcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBuZl9mbG93X3F1ZXVlX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRyZXR1cm4gTkZfU1RPTEVOO1xcbiB9XFxuIFxcbi11bnNpZ25lZCBpbnRcXG4tbmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbitzdGF0aWMgaW50IG5mX2Zsb3dfcXVldWVfeG1pdDQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaCxcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2g7XFxuLVxcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUgPSBwcml2O1xcbiBcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZTtcXG4gXFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjtcXG4tXFx0c3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggY3R4ID0ge1xcbi1cXHRcXHQuaW5cXHQ9IHN0YXRlLVxcdTAwM2VpbixcXG4tXFx0fTtcXG4gXFx0c3RydWN0IG5mX2Zsb3dfeG1pdCB4bWl0ID0ge307XFxuIFxcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XFxuIFxcdHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoO1xcbiBcXHRzdHJ1Y3QgcnRhYmxlICpydDtcXG4gXFx0X19iZTMyIGlwX2RhZGRyO1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0dHVwbGVoYXNoID0gbmZfZmxvd19vZmZsb2FkX2xvb2t1cChcXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCBza2IpO1xcbi1cXHRpZiAoIXR1cGxlaGFzaClcXG4tXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4tXFxuLVxcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKFxcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdHJldHVybiBORl9EUk9QO1xcbi1cXHRlbHNlIGlmIChyZXQgPT0gMClcXG4tXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFxuIFxcdGlmICh1bmxpa2VseSh0dXBsZWhhc2gtXFx1MDAzZXR1cGxlLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9YRlJNKSkge1xcbiBcXHRcXHRydCA9IGRzdF9ydGFibGUodHVwbGVoYXNoLVxcdTAwM2V0dXBsZS5kc3RfY2FjaGUpO1xcbkBAIC04NzMsNiArODU3LDM2IEBAIG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcbiBcXHRyZXR1cm4gbmZfZmxvd19xdWV1ZV94bWl0KHN0YXRlLVxcdTAwM2VuZXQsIHNrYiwgXFx1MDAyNnhtaXQpO1xcbiB9XFxuK1xcbit1bnNpZ25lZCBpbnRcXG4rbmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcXG4rXFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9IHByaXY7XFxuK1xcdHN0cnVjdCBuZl9mbG93dGFibGVfY3R4IGN0eCA9IHtcXG4rXFx0XFx0LmluXFx0PSBzdGF0ZS1cXHUwMDNlaW4sXFxuK1xcdH07XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIW5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKFxcdTAwMjZjdHgsIHNrYikpXFxuK1xcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuK1xcbitcXHRpZiAodW5saWtlbHkoY3R4LmV0aGVyX3R5cGUgIT0gaHRvbnMoRVRIX1BfSVApKSlcXG4rXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4rXFxuK1xcdHR1cGxlaGFzaCA9IG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoXFx1MDAyNmN0eCwgZmxvd190YWJsZSwgc2tiKTtcXG4rXFx0aWYgKCF0dXBsZWhhc2gpXFxuK1xcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuK1xcbitcXHRyZXQgPSBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChcXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gTkZfRFJPUDtcXG4rXFx0ZWxzZSBpZiAocmV0ID09IDApXFxuK1xcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuK1xcbitcXHRyZXR1cm4gbmZfZmxvd19xdWV1ZV94bWl0NChza2IsIHR1cGxlaGFzaCwgc3RhdGUpO1xcbit9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKTtcXG4gXFxuIHN0YXRpYyB2b2lkIG5mX2Zsb3dfbmF0X2lwdjZfdGNwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0aG9mZixcXG5AQCAtMTEwMSw0MiArMTExNSwyMyBAQCBuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcXG4ge1xcbiBcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlIHR1cGxlID0ge307XFxuIFxcbi1cXHRpZiAoIW5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKGN0eCwgc2tiLCBodG9ucyhFVEhfUF9JUFY2KSkpXFxuLVxcdFxcdHJldHVybiBOVUxMO1xcbi1cXG4gXFx0aWYgKG5mX2Zsb3dfdHVwbGVfaXB2NihjdHgsIHNrYiwgXFx1MDAyNnR1cGxlKSBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4gXFx0cmV0dXJuIGZsb3dfb2ZmbG9hZF9sb29rdXAoZmxvd190YWJsZSwgXFx1MDAyNnR1cGxlKTtcXG4gfVxcbiBcXG4tdW5zaWduZWQgaW50XFxuLW5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxuK3N0YXRpYyBpbnQgbmZfZmxvd19xdWV1ZV94bWl0NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLFxcbitcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbiB7XFxuLVxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcXG4tXFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9IHByaXY7XFxuIFxcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm90aGVyX3R1cGxlO1xcbiBcXHRlbnVtIGZsb3dfb2ZmbG9hZF90dXBsZV9kaXIgZGlyO1xcbi1cXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCBjdHggPSB7XFxuLVxcdFxcdC5pblxcdD0gc3RhdGUtXFx1MDAzZWluLFxcbi1cXHR9O1xcbiBcXHRzdHJ1Y3QgbmZfZmxvd194bWl0IHhtaXQgPSB7fTtcXG4gXFx0c3RydWN0IGluNl9hZGRyICppcDZfZGFkZHI7XFxuIFxcdHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3c7XFxuIFxcdHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoO1xcbiBcXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0O1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0dHVwbGVoYXNoID0gbmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKFxcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHNrYik7XFxuLVxcdGlmICh0dXBsZWhhc2ggPT0gTlVMTClcXG4tXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4tXFxuLVxcdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2ZvcndhcmQoXFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xcbi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuLVxcdGVsc2UgaWYgKHJldCA9PSAwKVxcbi1cXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KHR1cGxlaGFzaC1cXHUwMDNldHVwbGUueG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX1hGUk0pKSB7XFxuIFxcdFxcdHJ0ID0gZHN0X3J0Nl9pbmZvKHR1cGxlaGFzaC1cXHUwMDNldHVwbGUuZHN0X2NhY2hlKTtcXG5AQCAtMTE5MCw0ICsxMTg1LDM0IEBAIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFxuIFxcdHJldHVybiBuZl9mbG93X3F1ZXVlX3htaXQoc3RhdGUtXFx1MDAzZW5ldCwgc2tiLCBcXHUwMDI2eG1pdCk7XFxuIH1cXG4rXFxuK3Vuc2lnbmVkIGludFxcbituZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2ggKnR1cGxlaGFzaDtcXG4rXFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9IHByaXY7XFxuK1xcdHN0cnVjdCBuZl9mbG93dGFibGVfY3R4IGN0eCA9IHtcXG4rXFx0XFx0LmluXFx0PSBzdGF0ZS1cXHUwMDNlaW4sXFxuK1xcdH07XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIW5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKFxcdTAwMjZjdHgsIHNrYikpXFxuK1xcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuK1xcbitcXHRpZiAodW5saWtlbHkoY3R4LmV0aGVyX3R5cGUgIT0gaHRvbnMoRVRIX1BfSVBWNikpKVxcbitcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbitcXG4rXFx0dHVwbGVoYXNoID0gbmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKFxcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHNrYik7XFxuK1xcdGlmICghdHVwbGVoYXNoKVxcbitcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbitcXG4rXFx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChcXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCB0dXBsZWhhc2gsIHNrYik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gTkZfRFJPUDtcXG4rXFx0ZWxzZSBpZiAocmV0ID09IDApXFxuK1xcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuK1xcbitcXHRyZXR1cm4gbmZfZmxvd19xdWV1ZV94bWl0Nihza2IsIHR1cGxlaGFzaCwgc3RhdGUpO1xcbit9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2spO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xcbmluZGV4IDU2MjE5YjAyZTEyMjcuLjFlNTU2NDRmMmVkYjggMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcXG5AQCAtNDQsMTEgKzQ0LDE2IEBAIHN0YXRpYyBib29sIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfY2FjaGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi1cXHRcXHRcXHRcXHQgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsIHU4ICpoYSxcXG4rXFx0XFx0XFx0XFx0ICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxcbitcXHRcXHRcXHRcXHQgICAgIHU4ICpoYSwgX19iZTE2IGV0aGVyX3R5cGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXFxuIHtcXG4gXFx0Y29uc3Qgdm9pZCAqZGFkZHIgPSBcXHUwMDI2Y3QtXFx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTM7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkc3RfY2FjaGUtXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0ge1xcbitcXHRcXHQuZGV2ID0gZGV2LFxcbitcXHRcXHQuZXRoZXJfdHlwZSA9IGV0aGVyX3R5cGUsXFxuK1xcdH07XFxuIFxcdHN0cnVjdCBuZWlnaGJvdXIgKm47XFxuIFxcdHU4IG51ZF9zdGF0ZTtcXG4gXFxuQEAgLTcxLDcgKzc2LDkgQEAgc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdF9jYWNoZSxcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4gb3V0Olxcbi1cXHRyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgaGEsIHN0YWNrKTtcXG4rXFx0ZXRoZXJfYWRkcl9jb3B5KGN0eC5kYWRkciwgaGEpO1xcbitcXG4rXFx0cmV0dXJuIGRldl9maWxsX2ZvcndhcmRfcGF0aChcXHUwMDI2Y3R4LCBzdGFjayk7XFxuIH1cXG4gXFxuIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHtcXG5AQCAtMTI2LDcgKzEzMyw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXFxuIFxcbiBcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2V0dW4uc3JjX3Y2ID0gcGF0aC1cXHUwMDNldHVuLnNyY192NjtcXG4gXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNldHVuLmRzdF92NiA9IHBhdGgtXFx1MDAzZXR1bi5kc3RfdjY7XFxuLVxcdFxcdFxcdFxcdGluZm8tXFx1MDAzZXR1bi5sM19wcm90byA9IHBhdGgtXFx1MDAzZXR1bi5sM19wcm90bztcXG4rXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNldHVuLmlubmVyX3Byb3RvID0gcGF0aC1cXHUwMDNldHVuLmlubmVyX3Byb3RvO1xcbiBcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2V0dW5fZHN0ID0gcGF0aC1cXHUwMDNldHVuLmRzdDtcXG4gXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlbnVtX3R1bnMrKztcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG5AQCAtMjIzLDcgKzIzMCw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuIFxcdHVuc2lnbmVkIGNoYXIgaGFbRVRIX0FMRU5dO1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdGlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRzdCwgY3QsIGRpciwgaGEsIFxcdTAwMjZzdGFjaykgXFx1MDAzYyAwIHx8XFxuK1xcdGlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRzdCwgY3QsIGRpciwgaGEsIHBrdC1cXHUwMDNlZXRoZXJ0eXBlLCBcXHUwMDI2c3RhY2spIFxcdTAwM2MgMCB8fFxcbiBcXHQgICAgbmZ0X2Rldl9wYXRoX2luZm8oXFx1MDAyNnN0YWNrLCBcXHUwMDI2aW5mbywgaGEsIGZ0KSBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiBcXG5AQCAtMjM4LDcgKzI0NSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuIFxcdGlmIChpbmZvLm51bV90dW5zKSB7XFxuIFxcdFxcdHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS5pbi50dW4uc3JjX3Y2ID0gaW5mby50dW4uZHN0X3Y2O1xcbiBcXHRcXHRyb3V0ZS1cXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLmRzdF92NiA9IGluZm8udHVuLnNyY192NjtcXG4tXFx0XFx0cm91dGUtXFx1MDAzZXR1cGxlWyFkaXJdLmluLnR1bi5sM19wcm90byA9IGluZm8udHVuLmwzX3Byb3RvO1xcbitcXHRcXHRyb3V0ZS1cXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLmlubmVyX3Byb3RvID0gaW5mby50dW4uaW5uZXJfcHJvdG87XFxuIFxcdFxcdHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS5pbi5udW1fdHVucyA9IGluZm8ubnVtX3R1bnM7XFxuIFxcdFxcdGRzdF9yZWxlYXNlKHJvdXRlLVxcdTAwM2V0dXBsZVtkaXJdLmRzdCk7XFxuIFxcdFxcdHJvdXRlLVxcdTAwM2V0dXBsZVtkaXJdLmRzdCA9IGluZm8udHVuX2RzdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjg6MDcuODYyNjIwNTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzk4NjU3NjcwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORl9GTE9XX1RBQkxFX0lORVRcIixcbiAgICBcIk5GVF9GTE9XX09GRkxPQURcIixcbiAgICBcIk5FVF9JUElQXCIsXG4gICAgXCJJUFY2X1RVTk5FTFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJWTEFOXzgwMjFRXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwX2hvb2tcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tcIixcbiAgICBcIm5mdF9mbG93X3JvdXRlXCIsXG4gICAgXCJkZXZfZmlsbF9mb3J3YXJkX3BhdGhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgb2ZmbG9hZCBwYXRoIHRvIHByb3Blcmx5IGhhbmRsZSBpbm5lciBwcm90b2NvbHMgYW5kIGV0aGVyX3R5cGUsIGVzcGVjaWFsbHkgZm9yIElQLWluLUlQIGFuZCBJUHY2IHR1bm5lbHMuIEl0IGNoYW5nZXMgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgdG8gdGFrZSBhIGNvbnRleHQgc3RydWN0IGluc3RlYWQgb2YganVzdCB0aGUgZGV2aWNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzLCBhbmQgdXBkYXRlcyB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgaG9va3MgdG8gdXNlIHRoaXMgY29udGV4dCBhbmQgY29ycmVjdGx5IGlkZW50aWZ5IGVuY2Fwc3VsYXRlZCBwcm90b2NvbHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIHN1YnN5c3RlbXMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGQ2YWEwOTBmOGQ1OGYxMTg5OTlhMzJkM2M1MjhmMTY4Yzk1YTdlZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMDI6Mjg6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuaW5kZXggYTAzYWY5NzUwNTczMS4uOTI2MTE4MDI4MDFlYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcbkBAIC0yODMsMTQgKzI4MywxOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcixcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgYWlyb2hhX3dkbWFfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrIHN0YWNrO1xuK1x0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0ge1xuK1x0XHQuZGV2ID0gZGV2LFxuK1x0fTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XG4gXHRpbnQgZXJyO1xuIFxuIFx0aWYgKCFkZXYpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuK1x0ZXRoZXJfYWRkcl9jb3B5KGN0eC5kYWRkciwgYWRkcik7XG4rXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBcdTAwMjZzdGFjayk7XG4rXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoXHUwMDI2Y3R4LCBcdTAwMjZzdGFjayk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuY1xuaW5kZXggNzcxZDkxMThmOTRhZC4uOTliMjhhYWE3Y2M0NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuY1xuQEAgLTkyLDYgKzkyLDkgQEAgc3RhdGljIGludFxuIG10a19mbG93X2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsIHN0cnVjdCBtdGtfd2RtYV9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgc3RhY2s7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XG4rXHRcdC5kZXYgPSBkZXYsXG4rXHR9O1xuIFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcbiBcdGludCBlcnI7XG4gXG5AQCAtMTAxLDggKzEwNCwxMCBAQCBtdGtfZmxvd19nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLCBzdHJ1Y3QgbXRrX3dkbWFfaVxuIFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRfTUVESUFURUtfU09DX1dFRCkpXG4gXHRcdHJldHVybiAtMTtcbiBcbitcdGV0aGVyX2FkZHJfY29weShjdHguZGFkZHIsIGFkZHIpO1xuK1xuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0ZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgYWRkciwgXHUwMDI2c3RhY2spO1xuK1x0ZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKFx1MDAyNmN0eCwgXHUwMDI2c3RhY2spO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA2MmNmYWQ3ZTZiNzlhLi42OGNjYjU4NjgwNzBlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTkwMiw3ICs5MDIsNyBAQCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoIHtcbiBcdFx0XHRcdHN0cnVjdCBpbjZfYWRkclx0ZHN0X3Y2O1xuIFx0XHRcdH07XG4gXG4tXHRcdFx0dThcdGwzX3Byb3RvO1xuK1x0XHRcdHU4XHRpbm5lcl9wcm90bztcbiBcdFx0fSB0dW47XG4gXHRcdHN0cnVjdCB7XG4gXHRcdFx0ZW51bSB7XG5AQCAtOTM5LDYgKzkzOSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sge1xuIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IHtcbiBcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gXHR1OFx0XHRcdGRhZGRyW0VUSF9BTEVOXTtcbitcdF9fYmUxNlx0XHRcdGV0aGVyX3R5cGU7XG4gXG4gXHRpbnRcdFx0XHRudW1fdmxhbnM7XG4gXHRzdHJ1Y3Qge1xuQEAgLTM0MjYsNyArMzQyNyw3IEBAIHZvaWQgZGV2X3JlbW92ZV9vZmZsb2FkKHN0cnVjdCBwYWNrZXRfb2ZmbG9hZCAqcG8pO1xuIFxuIGludCBkZXZfZ2V0X2lmbGluayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBpbnQgZGV2X2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xuLWludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuK2ludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcbiB2b2lkIGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcbiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmhcbmluZGV4IGEwOTBlYzNmZmVmMmUuLmYyZTI3NzFmMTg4ZjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXG5AQCAtMTE3LDcgKzExNyw3IEBAIHN0cnVjdCBmbG93X29mZmxvYWRfdHVubmVsIHtcbiBcdFx0c3RydWN0IGluNl9hZGRyXHRkc3RfdjY7XG4gXHR9O1xuIFxuLVx0dThcdGwzX3Byb3RvO1xuK1x0dThcdGlubmVyX3Byb3RvO1xuIH07XG4gXG4gc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggZTUwZWQ2NzdkZTcyNS4uMTNkZmQyMTEzYTVhYiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4rKysgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTc2OSwzNSArNzY5LDMxIEBAIHZvaWQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKTtcbiBcbi1pbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcbitpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4gXHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbGFzdF9kZXY7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XG4tXHRcdC5kZXZcdD0gZGV2LFxuLVx0fTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbi1cdG1lbWNweShjdHguZGFkZHIsIGRhZGRyLCBzaXplb2YoY3R4LmRhZGRyKSk7XG4gXHRzdGFjay1cdTAwM2VudW1fcGF0aHMgPSAwO1xuLVx0d2hpbGUgKGN0eC5kZXYgXHUwMDI2XHUwMDI2IGN0eC5kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgpIHtcbi1cdFx0bGFzdF9kZXYgPSBjdHguZGV2O1xuK1x0d2hpbGUgKGN0eC1cdTAwM2VkZXYgXHUwMDI2XHUwMDI2IGN0eC1cdTAwM2VkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgpIHtcbitcdFx0bGFzdF9kZXYgPSBjdHgtXHUwMDNlZGV2O1xuIFx0XHRwYXRoID0gZGV2X2Z3ZF9wYXRoKHN0YWNrKTtcbiBcdFx0aWYgKCFwYXRoKVxuIFx0XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdFx0bWVtc2V0KHBhdGgsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9wYXRoKSk7XG4tXHRcdHJldCA9IGN0eC5kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgoXHUwMDI2Y3R4LCBwYXRoKTtcbitcdFx0cmV0ID0gY3R4LVx1MDAzZWRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aChjdHgsIHBhdGgpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdFx0c3RhY2stXHUwMDNlbnVtX3BhdGhzKys7XG4tXHRcdGlmIChXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LmRldikpXG4rXHRcdGlmIChXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LVx1MDAzZWRldikpXG4gXHRcdFx0Z290byBlcnJfb3V0O1xuIFx0fVxuIFxuLVx0aWYgKCFjdHguZGV2KVxuK1x0aWYgKCFjdHgtXHUwMDNlZGV2KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XG5AQCAtODA1LDcgKzgwMSw3IEBAIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuIFx0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRwYXRoLVx1MDAzZXR5cGUgPSBERVZfUEFUSF9FVEhFUk5FVDtcbi1cdHBhdGgtXHUwMDNlZGV2ID0gY3R4LmRldjtcbitcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldjtcbiBcdHN0YWNrLVx1MDAzZW51bV9wYXRocysrO1xuIFxuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBpcC5jIGIvbmV0L2lwdjQvaXBpcC5jXG5pbmRleCBmYjdkOTZmOTliMDZiLi4xNjMwMzI1Yzc3ZDM0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBpcC5jXG4rKysgYi9uZXQvaXB2NC9pcGlwLmNcbkBAIC0zNjAsNiArMzYwLDkgQEAgc3RhdGljIGludCBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4gXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKnRpcGggPSBcdTAwMjZ0dW5uZWwtXHUwMDNlcGFybXMuaXBoO1xuIFx0c3RydWN0IHJ0YWJsZSAqcnQ7XG4gXG4rXHRpZiAoY3R4LVx1MDAzZWV0aGVyX3R5cGUgIT0gY3B1X3RvX2JlMTYoRVRIX1BfSVApKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4gXHRpZiAodHVubmVsLVx1MDAzZWNvbGxlY3RfbWQpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbkBAIC0zNzUsNyArMzc4LDcgQEAgc3RhdGljIGludCBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4gXHRwYXRoLVx1MDAzZXR5cGUgPSBERVZfUEFUSF9UVU47XG4gXHRwYXRoLVx1MDAzZXR1bi5zcmNfdjQuc19hZGRyID0gdGlwaC1cdTAwM2VzYWRkcjtcbiBcdHBhdGgtXHUwMDNldHVuLmRzdF92NC5zX2FkZHIgPSB0aXBoLVx1MDAzZWRhZGRyO1xuLVx0cGF0aC1cdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQSVA7XG4rXHRwYXRoLVx1MDAzZXR1bi5pbm5lcl9wcm90byA9IElQUFJPVE9fSVBJUDtcbiBcdHBhdGgtXHUwMDNldHVuLmRzdCA9IFx1MDAyNnJ0LVx1MDAzZWRzdDtcbiBcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldjtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbmluZGV4IGQ4MDAyMGJjMjYyMGUuLjdiNTQ5MTkyMzJiYTMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuQEAgLTE4NDksNiArMTg0OSw5IEBAIHN0YXRpYyBpbnQgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0c3RydWN0IGZsb3dpNiBmbDY7XG4gXHRpbnQgZXJyO1xuIFxuK1x0aWYgKGN0eC1cdTAwM2VldGhlcl90eXBlICE9IGNwdV90b19iZTE2KEVUSF9QX0lQVjYpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4gXHRpZiAodC1cdTAwM2VwYXJtcy5mbGFncyBcdTAwMjYgKElQNl9UTkxfRl9VU0VfT1JJR19UQ0xBU1MgfFxuIFx0XHRcdCAgICAgIElQNl9UTkxfRl9VU0VfT1JJR19GTE9XTEFCRUwgfFxuIFx0XHRcdCAgICAgIElQNl9UTkxfRl9VU0VfT1JJR19GV01BUkspKVxuQEAgLTE4NjksNyArMTg3Miw3IEBAIHN0YXRpYyBpbnQgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuIFx0XHRwYXRoLVx1MDAzZXR5cGUgPSBERVZfUEFUSF9UVU47XG4gXHRcdHBhdGgtXHUwMDNldHVuLnNyY192NiA9IGZsNi5zYWRkcjtcbiBcdFx0cGF0aC1cdTAwM2V0dW4uZHN0X3Y2ID0gZmw2LmRhZGRyO1xuLVx0XHRwYXRoLVx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBWNjtcbitcdFx0cGF0aC1cdTAwM2V0dW4uaW5uZXJfcHJvdG8gPSBJUFBST1RPX0lQVjY7XG4gXHRcdHBhdGgtXHUwMDNldHVuLmRzdCA9IGRzdDtcbiBcdFx0cGF0aC1cdTAwM2VkZXYgPSBjdHgtXHUwMDNlZGV2O1xuIFx0XHRjdHgtXHUwMDNlZGV2ID0gZHN0LVx1MDAzZWRldjtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG5pbmRleCAwYjMxNGIxMGU3MDVhLi5hZjUzNDAwMGEyODdhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jXG5AQCAtMTQ3LDEzICsxNDcsMTQgQEAgc3RhdGljIGJvb2wgaXBfaGFzX29wdGlvbnModW5zaWduZWQgaW50IHRob2ZmKVxuIFxuIHN0cnVjdCBuZl9mbG93dGFibGVfY3R4IHtcbiBcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlXHQqaW47XG4rXHRfX2JlMTZcdFx0XHRldGhlcl90eXBlO1xuIFx0dTMyXHRcdFx0b2Zmc2V0O1xuIFx0dTMyXHRcdFx0aGRyc2l6ZTtcbiBcdHN0cnVjdCB7XG4gXHRcdC8qIFR1bm5lbCBJUCBoZWFkZXIgc2l6ZSAqL1xuIFx0XHR1MzIgaGRyX3NpemU7XG4gXHRcdC8qIElQIHR1bm5lbCBwcm90b2NvbCAqL1xuLVx0XHR1OCBwcm90bztcbitcdFx0dTggaW5uZXJfcHJvdG87XG4gXHR9IHR1bjtcbiB9O1xuIFxuQEAgLTE2MSw3ICsxNjIsNiBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X3R1cGxlX2VuY2FwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUpXG4ge1xuLVx0X19iZTE2IGlubmVyX3Byb3RvID0gc2tiLVx1MDAzZXByb3RvY29sO1xuIFx0c3RydWN0IHZsYW5fZXRoaGRyICp2ZXRoO1xuIFx0c3RydWN0IHBwcG9lX2hkciAqcGhkcjtcbiBcdHN0cnVjdCBpcHY2aGRyICppcDZoO1xuQEAgLTE3OSwzMyArMTc5LDMxIEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfdHVwbGVfZW5jYXAoc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcdFx0dmV0aCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpO1xuIFx0XHR0dXBsZS1cdTAwM2VlbmNhcFtpXS5pZCA9IG50b2hzKHZldGgtXHUwMDNlaF92bGFuX1RDSSk7XG4gXHRcdHR1cGxlLVx1MDAzZWVuY2FwW2ldLnByb3RvID0gc2tiLVx1MDAzZXByb3RvY29sO1xuLVx0XHRpbm5lcl9wcm90byA9IHZldGgtXHUwMDNlaF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bztcbiBcdFx0b2Zmc2V0ICs9IFZMQU5fSExFTjtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIGh0b25zKEVUSF9QX1BQUF9TRVMpOlxuIFx0XHRwaGRyID0gKHN0cnVjdCBwcHBvZV9oZHIgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbiBcdFx0dHVwbGUtXHUwMDNlZW5jYXBbaV0uaWQgPSBudG9ocyhwaGRyLVx1MDAzZXNpZCk7XG4gXHRcdHR1cGxlLVx1MDAzZWVuY2FwW2ldLnByb3RvID0gc2tiLVx1MDAzZXByb3RvY29sO1xuLVx0XHRpbm5lcl9wcm90byA9ICooKF9fYmUxNiAqKShwaGRyICsgMSkpO1xuIFx0XHRvZmZzZXQgKz0gUFBQT0VfU0VTX0hMRU47XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0c3dpdGNoIChpbm5lcl9wcm90bykge1xuK1x0c3dpdGNoIChjdHgtXHUwMDNlZXRoZXJfdHlwZSkge1xuIFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4gXHRcdGlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBvZmZzZXQpO1xuLVx0XHRpZiAoY3R4LVx1MDAzZXR1bi5wcm90byA9PSBJUFBST1RPX0lQSVApIHtcbitcdFx0aWYgKGN0eC1cdTAwM2V0dW4uaW5uZXJfcHJvdG8gPT0gSVBQUk9UT19JUElQKSB7XG4gXHRcdFx0dHVwbGUtXHUwMDNldHVuLmRzdF92NC5zX2FkZHIgPSBpcGgtXHUwMDNlZGFkZHI7XG4gXHRcdFx0dHVwbGUtXHUwMDNldHVuLnNyY192NC5zX2FkZHIgPSBpcGgtXHUwMDNlc2FkZHI7XG4tXHRcdFx0dHVwbGUtXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUElQO1xuK1x0XHRcdHR1cGxlLVx1MDAzZXR1bi5pbm5lcl9wcm90byA9IElQUFJPVE9fSVBJUDtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4gXHRcdGlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBvZmZzZXQpO1xuLVx0XHRpZiAoY3R4LVx1MDAzZXR1bi5wcm90byA9PSBJUFBST1RPX0lQVjYpIHtcbitcdFx0aWYgKGN0eC1cdTAwM2V0dW4uaW5uZXJfcHJvdG8gPT0gSVBQUk9UT19JUFY2KSB7XG4gXHRcdFx0dHVwbGUtXHUwMDNldHVuLmRzdF92NiA9IGlwNmgtXHUwMDNlZGFkZHI7XG4gXHRcdFx0dHVwbGUtXHUwMDNldHVuLnNyY192NiA9IGlwNmgtXHUwMDNlc2FkZHI7XG4tXHRcdFx0dHVwbGUtXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUFY2O1xuK1x0XHRcdHR1cGxlLVx1MDAzZXR1bi5pbm5lcl9wcm90byA9IElQUFJPVE9fSVBWNjtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG5AQCAtMzI4LDcgKzMyNiw3IEBAIHN0YXRpYyBib29sIG5mX2Zsb3dfaXA0X3R1bm5lbF9wcm90byhzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRpZiAoaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fSVBJUCkge1xuLVx0XHRjdHgtXHUwMDNldHVuLnByb3RvID0gaXBoLVx1MDAzZXByb3RvY29sO1xuK1x0XHRjdHgtXHUwMDNldHVuLmlubmVyX3Byb3RvID0gaXBoLVx1MDAzZXByb3RvY29sO1xuIFx0XHRjdHgtXHUwMDNldHVuLmhkcl9zaXplID0gc2l6ZTtcbiBcdFx0Y3R4LVx1MDAzZW9mZnNldCArPSBjdHgtXHUwMDNldHVuLmhkcl9zaXplO1xuIFx0fVxuQEAgLTM1Myw3ICszNTEsNyBAQCBzdGF0aWMgYm9vbCBuZl9mbG93X2lwNl90dW5uZWxfcHJvdG8oc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0aWYgKGlwNmgtXHUwMDNlbmV4dGhkciA9PSBJUFBST1RPX0lQVjYpIHtcbi1cdFx0Y3R4LVx1MDAzZXR1bi5wcm90byA9IGlwNmgtXHUwMDNlbmV4dGhkcjtcbitcdFx0Y3R4LVx1MDAzZXR1bi5pbm5lcl9wcm90byA9IGlwNmgtXHUwMDNlbmV4dGhkcjtcbiBcdFx0Y3R4LVx1MDAzZXR1bi5oZHJfc2l6ZSA9IHNpemVvZigqaXA2aCk7XG4gXHRcdGN0eC1cdTAwM2VvZmZzZXQgKz0gY3R4LVx1MDAzZXR1bi5oZHJfc2l6ZTtcbiBcdH1cbkBAIC0zNjcsOCArMzY1LDggQEAgc3RhdGljIGJvb2wgbmZfZmxvd19pcDZfdHVubmVsX3Byb3RvKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gc3RhdGljIHZvaWQgbmZfZmxvd19pcF90dW5uZWxfcG9wKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4gXHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0aWYgKGN0eC1cdTAwM2V0dW4ucHJvdG8gIT0gSVBQUk9UT19JUElQIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGN0eC1cdTAwM2V0dW4ucHJvdG8gIT0gSVBQUk9UT19JUFY2KVxuK1x0aWYgKGN0eC1cdTAwM2V0dW4uaW5uZXJfcHJvdG8gIT0gSVBQUk9UT19JUElQIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGN0eC1cdTAwM2V0dW4uaW5uZXJfcHJvdG8gIT0gSVBQUk9UT19JUFY2KVxuIFx0XHRyZXR1cm47XG4gXG4gXHRza2JfcHVsbChza2IsIGN0eC1cdTAwM2V0dW4uaGRyX3NpemUpO1xuQEAgLTM3NiwxMCArMzc0LDEwIEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfaXBfdHVubmVsX3BvcChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIH1cbiBcbiBzdGF0aWMgYm9vbCBuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiBwcm90bylcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdF9fYmUxNiBpbm5lcl9wcm90byA9IHNrYi1cdTAwM2Vwcm90b2NvbDtcbiBcdHN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aDtcbitcdF9fYmUxNiBldGhlcl90eXBlO1xuIFx0Ym9vbCByZXQgPSBmYWxzZTtcbiBcbiBcdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG5AQCAtMzg4LDIyICszODYsMjcgQEAgc3RhdGljIGJvb2wgbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woc3RydWN0IG5mX2Zsb3d0YWJsZV9jdHggKmN0eCxcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRcdHZldGggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopc2tiX21hY19oZWFkZXIoc2tiKTtcbi1cdFx0aWYgKHZldGgtXHUwMDNlaF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90byA9PSBwcm90bykge1xuLVx0XHRcdGN0eC1cdTAwM2VvZmZzZXQgKz0gVkxBTl9ITEVOO1xuLVx0XHRcdGlubmVyX3Byb3RvID0gcHJvdG87XG4tXHRcdFx0cmV0ID0gdHJ1ZTtcbi1cdFx0fVxuK1x0XHRjdHgtXHUwMDNlZXRoZXJfdHlwZSA9IHZldGgtXHUwMDNlaF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bztcbitcdFx0Y3R4LVx1MDAzZW9mZnNldCArPSBWTEFOX0hMRU47XG4rXHRcdHJldCA9IHRydWU7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBodG9ucyhFVEhfUF9QUFBfU0VTKTpcbi1cdFx0aWYgKG5mX2Zsb3dfcHBwb2VfcHJvdG8oc2tiLCBcdTAwMjZpbm5lcl9wcm90bykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBpbm5lcl9wcm90byA9PSBwcm90bykge1xuLVx0XHRcdGN0eC1cdTAwM2VvZmZzZXQgKz0gUFBQT0VfU0VTX0hMRU47XG4tXHRcdFx0cmV0ID0gdHJ1ZTtcbi1cdFx0fVxuK1x0XHRpZiAoIW5mX2Zsb3dfcHBwb2VfcHJvdG8oc2tiLCBcdTAwMjZldGhlcl90eXBlKSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRcdGN0eC1cdTAwM2VldGhlcl90eXBlID0gZXRoZXJfdHlwZTtcbitcdFx0Y3R4LVx1MDAzZW9mZnNldCArPSBQUFBPRV9TRVNfSExFTjtcbitcdFx0cmV0ID0gdHJ1ZTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbitcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4rXHRcdGN0eC1cdTAwM2VldGhlcl90eXBlID0gc2tiLVx1MDAzZXByb3RvY29sO1xuIFx0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbi1cdHN3aXRjaCAoaW5uZXJfcHJvdG8pIHtcbitcdHN3aXRjaCAoY3R4LVx1MDAzZWV0aGVyX3R5cGUpIHtcbiBcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuIFx0XHRyZXQgPSBuZl9mbG93X2lwNF90dW5uZWxfcHJvdG8oY3R4LCBza2IpO1xuIFx0XHRicmVhaztcbkBAIC00NTUsOSArNDU4LDYgQEAgbmZfZmxvd19vZmZsb2FkX2xvb2t1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCAqY3R4LFxuIHtcbiBcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgdHVwbGUgPSB7fTtcbiBcbi1cdGlmICghbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2woY3R4LCBza2IsIGh0b25zKEVUSF9QX0lQKSkpXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuIFx0aWYgKG5mX2Zsb3dfdHVwbGVfaXAoY3R4LCBza2IsIFx1MDAyNnR1cGxlKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG5AQCAtNjExLDcgKzYxMSw3IEBAIHN0YXRpYyBpbnQgbmZfZmxvd190dW5uZWxfaXBpcF9wdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlwaC1cdTAwM2V2ZXJzaW9uXHQ9IDQ7XG4gXHRpcGgtXHUwMDNlaWhsXHQ9IHNpemVvZigqaXBoKSBcdTAwM2VcdTAwM2UgMjtcbiBcdGlwaC1cdTAwM2VmcmFnX29mZlx0PSBpcF9tdHVfbG9ja2VkKFx1MDAyNnJ0LVx1MDAzZWRzdCkgPyAwIDogZnJhZ19vZmY7XG4tXHRpcGgtXHUwMDNlcHJvdG9jb2xcdD0gdHVwbGUtXHUwMDNldHVuLmwzX3Byb3RvO1xuK1x0aXBoLVx1MDAzZXByb3RvY29sXHQ9IHR1cGxlLVx1MDAzZXR1bi5pbm5lcl9wcm90bztcbiBcdGlwaC1cdTAwM2V0b3NcdD0gdG9zO1xuIFx0aXBoLVx1MDAzZWRhZGRyXHQ9IHR1cGxlLVx1MDAzZXR1bi5zcmNfdjQuc19hZGRyO1xuIFx0aXBoLVx1MDAzZXNhZGRyXHQ9IHR1cGxlLVx1MDAzZXR1bi5kc3RfdjQuc19hZGRyO1xuQEAgLTc5NCwzMyArNzk0LDE3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfZmxvd19xdWV1ZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHJldHVybiBORl9TVE9MRU47XG4gfVxuIFxuLXVuc2lnbmVkIGludFxuLW5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxuK3N0YXRpYyBpbnQgbmZfZmxvd19xdWV1ZV94bWl0NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2gsXG4rXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbiB7XG4tXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2g7XG4tXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlID0gcHJpdjtcbiBcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm90aGVyX3R1cGxlO1xuIFx0ZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcjtcbi1cdHN0cnVjdCBuZl9mbG93dGFibGVfY3R4IGN0eCA9IHtcbi1cdFx0LmluXHQ9IHN0YXRlLVx1MDAzZWluLFxuLVx0fTtcbiBcdHN0cnVjdCBuZl9mbG93X3htaXQgeG1pdCA9IHt9O1xuIFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcbiBcdHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoO1xuIFx0c3RydWN0IHJ0YWJsZSAqcnQ7XG4gXHRfX2JlMzIgaXBfZGFkZHI7XG4tXHRpbnQgcmV0O1xuLVxuLVx0dHVwbGVoYXNoID0gbmZfZmxvd19vZmZsb2FkX2xvb2t1cChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHNrYik7XG4tXHRpZiAoIXR1cGxlaGFzaClcbi1cdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbi1cbi1cdHJldCA9IG5mX2Zsb3dfb2ZmbG9hZF9mb3J3YXJkKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIE5GX0RST1A7XG4tXHRlbHNlIGlmIChyZXQgPT0gMClcbi1cdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbiBcdGlmICh1bmxpa2VseSh0dXBsZWhhc2gtXHUwMDNldHVwbGUueG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX1hGUk0pKSB7XG4gXHRcdHJ0ID0gZHN0X3J0YWJsZSh0dXBsZWhhc2gtXHUwMDNldHVwbGUuZHN0X2NhY2hlKTtcbkBAIC04NzMsNiArODU3LDM2IEBAIG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRyZXR1cm4gbmZfZmxvd19xdWV1ZV94bWl0KHN0YXRlLVx1MDAzZW5ldCwgc2tiLCBcdTAwMjZ4bWl0KTtcbiB9XG4rXG4rdW5zaWduZWQgaW50XG4rbmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4re1xuK1x0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoO1xuK1x0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9IHByaXY7XG4rXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCBjdHggPSB7XG4rXHRcdC5pblx0PSBzdGF0ZS1cdTAwM2VpbixcbitcdH07XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChcdTAwMjZjdHgsIHNrYikpXG4rXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4rXG4rXHRpZiAodW5saWtlbHkoY3R4LmV0aGVyX3R5cGUgIT0gaHRvbnMoRVRIX1BfSVApKSlcbitcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbitcbitcdHR1cGxlaGFzaCA9IG5mX2Zsb3dfb2ZmbG9hZF9sb29rdXAoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCBza2IpO1xuK1x0aWYgKCF0dXBsZWhhc2gpXG4rXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4rXG4rXHRyZXQgPSBuZl9mbG93X29mZmxvYWRfZm9yd2FyZChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiBORl9EUk9QO1xuK1x0ZWxzZSBpZiAocmV0ID09IDApXG4rXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4rXG4rXHRyZXR1cm4gbmZfZmxvd19xdWV1ZV94bWl0NChza2IsIHR1cGxlaGFzaCwgc3RhdGUpO1xuK31cbiBFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X29mZmxvYWRfaXBfaG9vayk7XG4gXG4gc3RhdGljIHZvaWQgbmZfZmxvd19uYXRfaXB2Nl90Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHRob2ZmLFxuQEAgLTExMDEsNDIgKzExMTUsMjMgQEAgbmZfZmxvd19vZmZsb2FkX2lwdjZfbG9va3VwKHN0cnVjdCBuZl9mbG93dGFibGVfY3R4ICpjdHgsXG4ge1xuIFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSB0dXBsZSA9IHt9O1xuIFxuLVx0aWYgKCFuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbChjdHgsIHNrYiwgaHRvbnMoRVRIX1BfSVBWNikpKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbiBcdGlmIChuZl9mbG93X3R1cGxlX2lwdjYoY3R4LCBza2IsIFx1MDAyNnR1cGxlKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRyZXR1cm4gZmxvd19vZmZsb2FkX2xvb2t1cChmbG93X3RhYmxlLCBcdTAwMjZ0dXBsZSk7XG4gfVxuIFxuLXVuc2lnbmVkIGludFxuLW5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHQgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbitzdGF0aWMgaW50IG5mX2Zsb3dfcXVldWVfeG1pdDYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHQgICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoLFxuK1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4ge1xuLVx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCAqdHVwbGVoYXNoO1xuLVx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9IHByaXY7XG4gXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICpvdGhlcl90dXBsZTtcbiBcdGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciBkaXI7XG4tXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlX2N0eCBjdHggPSB7XG4tXHRcdC5pblx0PSBzdGF0ZS1cdTAwM2Vpbixcbi1cdH07XG4gXHRzdHJ1Y3QgbmZfZmxvd194bWl0IHhtaXQgPSB7fTtcbiBcdHN0cnVjdCBpbjZfYWRkciAqaXA2X2RhZGRyO1xuIFx0c3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdztcbiBcdHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoO1xuIFx0c3RydWN0IHJ0Nl9pbmZvICpydDtcbi1cdGludCByZXQ7XG4tXG4tXHR0dXBsZWhhc2ggPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXAoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCBza2IpO1xuLVx0aWYgKHR1cGxlaGFzaCA9PSBOVUxMKVxuLVx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuLVxuLVx0cmV0ID0gbmZfZmxvd19vZmZsb2FkX2lwdjZfZm9yd2FyZChcdTAwMjZjdHgsIGZsb3dfdGFibGUsIHR1cGxlaGFzaCwgc2tiKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiBORl9EUk9QO1xuLVx0ZWxzZSBpZiAocmV0ID09IDApXG4tXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRpZiAodW5saWtlbHkodHVwbGVoYXNoLVx1MDAzZXR1cGxlLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9YRlJNKSkge1xuIFx0XHRydCA9IGRzdF9ydDZfaW5mbyh0dXBsZWhhc2gtXHUwMDNldHVwbGUuZHN0X2NhY2hlKTtcbkBAIC0xMTkwLDQgKzExODUsMzQgQEAgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0cmV0dXJuIG5mX2Zsb3dfcXVldWVfeG1pdChzdGF0ZS1cdTAwM2VuZXQsIHNrYiwgXHUwMDI2eG1pdCk7XG4gfVxuK1xuK3Vuc2lnbmVkIGludFxuK25mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbit7XG4rXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoICp0dXBsZWhhc2g7XG4rXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlID0gcHJpdjtcbitcdHN0cnVjdCBuZl9mbG93dGFibGVfY3R4IGN0eCA9IHtcbitcdFx0LmluXHQ9IHN0YXRlLVx1MDAzZWluLFxuK1x0fTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIW5mX2Zsb3dfc2tiX2VuY2FwX3Byb3RvY29sKFx1MDAyNmN0eCwgc2tiKSlcbitcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbitcbitcdGlmICh1bmxpa2VseShjdHguZXRoZXJfdHlwZSAhPSBodG9ucyhFVEhfUF9JUFY2KSkpXG4rXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4rXG4rXHR0dXBsZWhhc2ggPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9sb29rdXAoXHUwMDI2Y3R4LCBmbG93X3RhYmxlLCBza2IpO1xuK1x0aWYgKCF0dXBsZWhhc2gpXG4rXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4rXG4rXHRyZXQgPSBuZl9mbG93X29mZmxvYWRfaXB2Nl9mb3J3YXJkKFx1MDAyNmN0eCwgZmxvd190YWJsZSwgdHVwbGVoYXNoLCBza2IpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIE5GX0RST1A7XG4rXHRlbHNlIGlmIChyZXQgPT0gMClcbitcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbitcbitcdHJldHVybiBuZl9mbG93X3F1ZXVlX3htaXQ2KHNrYiwgdHVwbGVoYXNoLCBzdGF0ZSk7XG4rfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2spO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXG5pbmRleCA1NjIxOWIwMmUxMjI3Li4xZTU1NjQ0ZjJlZGI4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xuQEAgLTQ0LDExICs0NCwxNiBAQCBzdGF0aWMgYm9vbCBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdF9jYWNoZSxcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLVx0XHRcdFx0ICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLCB1OCAqaGEsXG4rXHRcdFx0XHQgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4rXHRcdFx0XHQgICAgIHU4ICpoYSwgX19iZTE2IGV0aGVyX3R5cGUsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuIHtcbiBcdGNvbnN0IHZvaWQgKmRhZGRyID0gXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MztcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkc3RfY2FjaGUtXHUwMDNlZGV2O1xuK1x0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0ge1xuK1x0XHQuZGV2ID0gZGV2LFxuK1x0XHQuZXRoZXJfdHlwZSA9IGV0aGVyX3R5cGUsXG4rXHR9O1xuIFx0c3RydWN0IG5laWdoYm91ciAqbjtcbiBcdHU4IG51ZF9zdGF0ZTtcbiBcbkBAIC03MSw3ICs3Niw5IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfY2FjaGUsXG4gXHRcdHJldHVybiAtMTtcbiBcbiBvdXQ6XG4tXHRyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgaGEsIHN0YWNrKTtcbitcdGV0aGVyX2FkZHJfY29weShjdHguZGFkZHIsIGhhKTtcbitcbitcdHJldHVybiBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoXHUwMDI2Y3R4LCBzdGFjayk7XG4gfVxuIFxuIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHtcbkBAIC0xMjYsNyArMTMzLDcgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcbiBcbiBcdFx0XHRcdGluZm8tXHUwMDNldHVuLnNyY192NiA9IHBhdGgtXHUwMDNldHVuLnNyY192NjtcbiBcdFx0XHRcdGluZm8tXHUwMDNldHVuLmRzdF92NiA9IHBhdGgtXHUwMDNldHVuLmRzdF92Njtcbi1cdFx0XHRcdGluZm8tXHUwMDNldHVuLmwzX3Byb3RvID0gcGF0aC1cdTAwM2V0dW4ubDNfcHJvdG87XG4rXHRcdFx0XHRpbmZvLVx1MDAzZXR1bi5pbm5lcl9wcm90byA9IHBhdGgtXHUwMDNldHVuLmlubmVyX3Byb3RvO1xuIFx0XHRcdFx0aW5mby1cdTAwM2V0dW5fZHN0ID0gcGF0aC1cdTAwM2V0dW4uZHN0O1xuIFx0XHRcdFx0aW5mby1cdTAwM2VudW1fdHVucysrO1xuIFx0XHRcdH0gZWxzZSB7XG5AQCAtMjIzLDcgKzIzMCw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gXHR1bnNpZ25lZCBjaGFyIGhhW0VUSF9BTEVOXTtcbiBcdGludCBpO1xuIFxuLVx0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoZHN0LCBjdCwgZGlyLCBoYSwgXHUwMDI2c3RhY2spIFx1MDAzYyAwIHx8XG4rXHRpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChkc3QsIGN0LCBkaXIsIGhhLCBwa3QtXHUwMDNlZXRoZXJ0eXBlLCBcdTAwMjZzdGFjaykgXHUwMDNjIDAgfHxcbiBcdCAgICBuZnRfZGV2X3BhdGhfaW5mbyhcdTAwMjZzdGFjaywgXHUwMDI2aW5mbywgaGEsIGZ0KSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG5AQCAtMjM4LDcgKzI0NSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gXHRpZiAoaW5mby5udW1fdHVucykge1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi50dW4uc3JjX3Y2ID0gaW5mby50dW4uZHN0X3Y2O1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi50dW4uZHN0X3Y2ID0gaW5mby50dW4uc3JjX3Y2O1xuLVx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi50dW4ubDNfcHJvdG8gPSBpbmZvLnR1bi5sM19wcm90bztcbitcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLmlubmVyX3Byb3RvID0gaW5mby50dW4uaW5uZXJfcHJvdG87XG4gXHRcdHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmluLm51bV90dW5zID0gaW5mby5udW1fdHVucztcbiBcdFx0ZHN0X3JlbGVhc2Uocm91dGUtXHUwMDNldHVwbGVbZGlyXS5kc3QpO1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLmRzdCA9IGluZm8udHVuX2RzdDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjA3Ljg2MjYyMTk4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI5MjQzNjU0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JraW5nIEZsb3cgVGFibGUgT2ZmbG9hZCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSwgYW5kIGl0IGxvb2tzIGxpa2UgYSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gaG93IHdlIGhhbmRsZSB0aGUgZmxvdyB0YWJsZSBvZmZsb2FkIHBhdGgsIHNwZWNpZmljYWxseSBpbiB0aGUgbmV0d29ya2luZyBjb3JlLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIGFkZHJlc3Npbmcgc29tZSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggdGhlIHdheSB3ZSB3ZXJlIGRlYWxpbmcgd2l0aCBpbm5lciBwcm90b2NvbHMgYW5kIEV0aGVybmV0IHR5cGVzLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGNlbnRlciBhcm91bmQgYSBuZXcgYHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4YC4gSW5zdGVhZCBvZiBwYXNzaW5nIHRoZSBkZXZpY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3Mgc2VwYXJhdGVseSB0byBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCwgd2UncmUgbm93IHBhc3NpbmcgdGhpcyBgY3R4YCBzdHJ1Y3R1cmUuIFRoaXMgYGN0eGAgaW5jbHVkZXMgdGhlIGRldmljZSwgZGVzdGluYXRpb24gYWRkcmVzcywgYW5kIGEgY3J1Y2lhbCBuZXcgZmllbGQ6IGBldGhlcl90eXBlYC4gVGhhdCdzIHRoZSBrZXkuIFRoaXMgYWxsb3dzIHRoZSBgaXBpcF9maWxsX2ZvcndhcmRfcGF0aGAgYW5kIGBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoYCBmdW5jdGlvbnMgdG8gcHJvcGVybHkgY2hlY2sgYW5kIGFjY291bnQgZm9yIHRoZSBFdGhlcm5ldCB0eXBlIGluIHRoZWlyIHByb2Nlc3NpbmcuXG5cbkltcG9ydGFudGx5LCBpdCBsb29rcyBsaWtlIGBuZl9mbG93X3RhYmxlX2lwLmNgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGFjdHVhbGx5IHV0aWxpemUgdGhpcyBuZXcgYGV0aGVyX3R5cGVgIGZpZWxkLCBhbG9uZyB3aXRoIGBpbm5lcl9wcm90b2AsIGluc3RlYWQgb2Ygc29sZWx5IHJlbHlpbmcgb24gdGhlIGV4aXN0aW5nIGBsM19wcm90b2AuIFRoaXMgaXMgY3JpdGljYWwgZm9yIG9mZmxvYWQgZnVuY3Rpb25hbGl0eS5cblxuTGV0IG1lIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gdmVyaWZ5IHRoaXM6IEknbSBzZWVpbmcgY2hhbmdlcyBpbiBhIGJ1bmNoIG9mIHBsYWNlcywgaW5jbHVkaW5nIGEgY291cGxlIG9mIFBQRSBvZmZsb2FkIGRyaXZlcnMgKGBhaXJvaGFfcHBlLmNgLCBgbXRrX3BwZV9vZmZsb2FkLmNgKSwgc29tZSBoZWFkZXIgZmlsZXMgKGBuZXRkZXZpY2UuaGAsIGBuZl9mbG93X3RhYmxlLmhgKSwgYW5kIGNvcmUgbmV0d29ya2luZyBjb2RlIChgZGV2LmNgLCBgaXBpcC5jYCwgYGlwNl90dW5uZWwuY2AsIGFuZCBhIGNvdXBsZSBvZiBrZXkgbmV0ZmlsdGVyIGZpbGVzKS5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCdzIHRvdWNoaW5nIHNvbWUgcHJldHR5IGxvdy1sZXZlbCBzdHVmZjogYGRldl9maWxsX2ZvcndhcmRfcGF0aGAsIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AsIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYCwgYW5kIGBuZnRfZGV2X2ZvcndhcmRfcGF0aGAuIFRoZXNlIGFyZSBhbGwgcmVhY2hhYmxlLCB0ZXN0YWJsZSBmdW5jdGlvbnMgaW4gYW55IHZpcnR1YWwgZW52aXJvbm1lbnQuXG5cbkknbSBzdGFydGluZyB0byB0aGluayBhYm91dCBob3cgdG8gdmFsaWRhdGUgdGhpcy4gV2UnbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGBDT05GSUdgIG9wdGlvbnMgYXJlIGVuYWJsZWQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgYENPTkZJR19ORVRGSUxURVJgLCBgQ09ORklHX05GX0ZMT1dfVEFCTEVgLCBgQ09ORklHX05GX0ZMT1dfVEFCTEVfSVBWNGAsIGBDT05GSUdfTkZfRkxPV19UQUJMRV9JUFY2YCwgYW5kIHRoZSB0dW5uZWwgb3B0aW9ucywgc3BlY2lmaWNhbGx5IGBDT05GSUdfTkVUX0lQR1JFYCwgYENPTkZJR19JUElQYCwgb3IgYENPTkZJR19JUFY2X1RVTk5FTGAuIEknbGwgbmVlZCB0byBsb29rIHVwIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aG9zZS4gSSBuZWVkIHRvIHNlYXJjaCBgTkZfRkxPV19UQUJMRWAgaW4gS2NvbmZpZyB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBjb3JyZWN0LiBMZXQncyBzZWUgaG93IHRoZXkgcmVsYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODU0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjg6MTYuMTU1MDYwNzQyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTExMjQzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0ZMT1dfVEFCTEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMzpjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTItXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcyMTpjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIyLVxcdGJvb2wgXFxcIlN1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyODoxOC4wMDYxOTA4NzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzAyMTQzOTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBUdW5uZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuQWxyaWdodCwgc28gd2UncmUgdGFsa2luZyB0dW5uZWxzLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8ganVtcCBpbnRvIHRoZSBrZXJuZWwgY29uZmlnIGZpbGVzIHRvIHNlZSB3aGF0J3MgYXZhaWxhYmxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBgbmV0L2lwdjQvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgYXZhaWxhYmlsaXR5IGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBJUElQYC4gVGhlbiwgdG8gY292ZXIgYWxsIGJhc2VzLCBhbmQgY29uc2lkZXJpbmcgd2UncmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIG1vZGVybiBzZXR1cCwgSSdsbCBuZWVkIHRvIGhpdCBgbmV0L2lwdjYvS2NvbmZpZ2AgdG8gdmVyaWZ5IHRoZSBzdGF0dXMgb2YgYElQVjZfVFVOTkVMYC4gVGhhdCdzIHdoZXJlIHRoZSBjb250cm9sIGZvciBJUHY2IHR1bm5lbGluZyB3b3VsZCBiZS4gS25vd2luZyB0aGVzZSB0d28gb3B0aW9ucyB3aWxsIGdpdmUgbWUgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUgb2Ygd2hhdCB0dW5uZWxpbmcgY2FwYWJpbGl0aWVzIGFyZSBlbmFibGVkLCBhbmQgaG93IHRoZXkgYXJlIGhhbmRsZWQsIHdpdGhpbiB0aGUgY3VycmVudCBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhpcyB3aWxsIHRlbGwgbWUgaWYgdGhlIGtlcm5lbCBoYXMgdGhlIG5lY2Vzc2FyeSBjb21wb25lbnRzIGJ1aWx0LWluIHRvIHN1cHBvcnQgb3VyIG5lZWRzLCBvciB3aGV0aGVyIHdlIG5lZWQgdG8gdHdlYWsgdGhlIGJ1aWxkIHRvIHN1cHBvcnQgYSBwYXJ0aWN1bGFyIHR1bm5lbGluZyBzY2VuYXJpby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNzMsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyODoyMS4zMDgzMzY1NzdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyNzgzNjE5MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQSVBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjIzLjQzNjE4MTA4OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2OTA5ODM4MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOZXR3b3JrIFByb3RvY29sIENvbmZ1c2lvbiBDbGVhcmVkKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMganVzdCByZXZpZXdpbmcgdGhlc2UgY29uZmlndXJhdGlvbnMsIGFuZCBhIGNvbm5lY3Rpb24ganVzdCBjbGlja2VkIGluIG15IGhlYWQuIEkgd2FzIHRoaW5raW5nIGFib3V0IHRoZSBgSVBJUGAgcHJvdG9jb2wsIGFuZCB0aGVuIGl0IGhpdCBtZTogYElQSVBgIGlzICphY3R1YWxseSogdGhlIHNhbWUgdGhpbmcgYXMgYE5FVF9JUElQYC4gSXQncyBqdXN0IGEgZGlmZmVyZW50IHdheSBvZiByZXByZXNlbnRpbmcgdGhlIHNhbWUgdW5kZXJseWluZyBmdW5jdGlvbmFsaXR5LiBBbGwgdGhlIHBpZWNlcyBhcmUgZmFsbGluZyBpbnRvIHBsYWNlIG5vdywgYW5kIEkgY2FuIG1vdmUgb24gdG8gdGhlIG5leHQgc2V0IG9mIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ0MywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjI2LjEyNzE2NzI5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjMyOTU1NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9JUElQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MTQ5PWNvbmZpZyBJUF9QTlBfUkFSUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0xNjEtXFxubmV0L2lwdjQvS2NvbmZpZzoxNjI6Y29uZmlnIE5FVF9JUElQXFxubmV0L2lwdjQvS2NvbmZpZy0xNjMtXFx0dHJpc3RhdGUgXFxcIklQOiB0dW5uZWxpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjI3Ljc5MDQ2NzExN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTY2ODIxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBhcyBpZiBJLCBhbiBleHBlcnQsIGFtIHByb2Nlc3NpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQ29uc2lkZXJpbmcgdGhlIE5ldHdvcmsgSW50ZXJmYWNlIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQgbWUgc2VlLi4uIEknbSB0aGlua2luZyBhYm91dCB0aGUgbmV0d29yayBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiwgYW5kIHNwZWNpZmljYWxseSwgdGhlIHVzZSBvZiBgSVBWNl9UVU5ORUxgLiBJdCBpbW1lZGlhdGVseSBicmluZ3MgdG8gbWluZCBzZXZlcmFsIGNvbnNpZGVyYXRpb25zLiBJJ20gbGlrZWx5IGRlYWxpbmcgd2l0aCBhbiBJUHY2IHRyYW5zaXRpb24gbWVjaGFuaXNtLCBtb3N0IGxpa2VseSBhIHR1bm5lbCBvZiBzb21lIGtpbmQuIE5vdyBJIG5lZWQgdG8gY29uc2lkZXIgZXhhY3RseSB3aGF0IGtpbmQgb2YgdHVubmVsLiBJcyBpdCBhIDZpbjQgdHVubmVsLCBhIDZ0bzQgcmVsYXksIGEgVGVyZWRvIHR1bm5lbCwgb3IgcG90ZW50aWFsbHkgZXZlbiBhIG1vcmUgY29tcGxleCwgY29uZmlndXJlZCB0dW5uZWwgc3VjaCBhcyBhIEdSRSB0dW5uZWwgb3IgYW4gSVBJUCB0dW5uZWw/IEknZCBoYXZlIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgdHVubmVsIGlzIGJlaW5nIGltcGxlbWVudGVkLiBUaGUgY29tbWFuZCBpdHNlbGYgc3VnZ2VzdHMgdGhlIGV4aXN0ZW5jZSBvZiBhIHR1bm5lbCwgYnV0IHByb3ZpZGVzIG5vIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIHVuZGVybHlpbmcgSVB2NCBuZXR3b3JrIGxvb2tzIGxpa2UsIGFzIHRoYXQncyBnZW5lcmFsbHkgd2hlcmUgdGhlIG90aGVyIHNpZGUgb2YgdGhlIHR1bm5lbCByZXNpZGVzLiBBbmQgSSBoYXZlIHRvIGtlZXAgaW4gbWluZCwgb2YgY291cnNlLCB0aGUgaW1wbGljYXRpb25zIGZvciByb3V0aW5nLCBNVFUgc2l6ZSwgYW5kIHBvdGVudGlhbCBmaXJld2FsbCBydWxlcyBhdCBib3RoIHRoZSBsb2NhbCBhbmQgcmVtb3RlIGVuZHMgb2YgdGhpcyBjb25uZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY3OCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjg6MzEuNjQ3MTUxNTA4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc2NjE1NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUFY2X1RVTk5FTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnPTE5Nj1jb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xOTgtXFxubmV0L2lwdjYvS2NvbmZpZzoxOTk6Y29uZmlnIElQVjZfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjg6MzMuMzIzNzc1NzY0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTM5MjIxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2suXG5cbioqSW52ZXN0aWdhdGluZyBOZXRmaWx0ZXIgRmxvdyBPZmZsb2FkIEhvb2tzKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmNgLiBNeSBwcmltYXJ5IGludGVyZXN0IGF0IHRoZSBtb21lbnQgbGllcyB3aXRoIHVuZGVyc3RhbmRpbmcgdGhlIGludHJpY2FjaWVzIG9mIHRoZSBmbG93IG9mZmxvYWQgbWVjaGFuaXNtcyB3aXRoaW4gTmV0ZmlsdGVyLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBJUCBwcm90b2NvbCBmYW1pbHkuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgc2NydXRpbml6ZSB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AgYW5kIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYC4gSXQncyBjcnVjaWFsIHRvIGdyYXNwIGhvdyB0aGVzZSBob29rcyBmdW5jdGlvbiwgdGhlIGRhdGEgc3RydWN0dXJlcyB0aGV5IGVtcGxveSwgYW5kIHRoZWlyIGludGVycGxheSB3aXRoIHRoZSBvdmVyYWxsIGZsb3cgdGFibGUgYXJjaGl0ZWN0dXJlLiBNeSBhaW0gaXMgdG8gZ2FpbiBhIHNvbGlkIGNvbXByZWhlbnNpb24gb2YgaG93IElQdjQgYW5kIElQdjYgdHJhZmZpYyBpcyBoYW5kbGVkIHdpdGhpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQsIHBhcnRpY3VsYXJseSB0aGUgbG9naWMgYmVoaW5kIHRoZSBvZmZsb2FkIGRlY2lzaW9uIGFuZCB0aGUgc3Vic2VxdWVudCBleGVjdXRpb24gb2Ygb2ZmbG9hZCBvcGVyYXRpb25zLiBJIGFudGljaXBhdGUgZmluZGluZyBrZXkgaW5zaWdodHMgaW50byBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MgYnkgdGhvcm91Z2hseSBhbmFseXppbmcgdGhlc2UgZnVuY3Rpb25zLiBJJ20gcmVhZHkgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHN0YXJ0IGZpZ3VyaW5nIG91dCB3aGF0J3MgcmVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA0NSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjM2LjczNzcwMDQwMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MTU5MzIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X29mZmxvYWRfaXBfaG9va1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTM0NT1pbnQgbmZfZmxvd19vZmZsb2FkX3hkcF9zZXR1cChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTM0OC1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjM0OTp1bnNpZ25lZCBpbnQgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTM1MC1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTEyPW5mX2Zsb3dfb2ZmbG9hZF9pbmV0X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtMzYtXFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzozNzpcXHRcXHRyZXR1cm4gbmZfZmxvd19vZmZsb2FkX2lwX2hvb2socHJpdiwgc2tiLCBzdGF0ZSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy0zOC1cXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz03OD1zdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZV90eXBlIGZsb3d0YWJsZV9pcHY0ID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy04My1cXHQuZnJlZVxcdFxcdD0gbmZfZmxvd190YWJsZV9mcmVlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6ODQ6XFx0Lmhvb2tcXHRcXHQ9IG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODUtXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jPTg2MT11bnNpZ25lZCBpbnRcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4NjI6bmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04NjMtXFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODg5LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzo4OTA6RVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd19vZmZsb2FkX2lwX2hvb2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg5MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjg6MzguMzg5Mjk3OTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0MTc1NzE1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIElQIGFuZCBJUHY2IG9mZmxvYWRpbmcsIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipNeSBNZW50YWwgTW9kZWwgb2YgSVAgRmxvdyBPZmZsb2FkIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSBhIGtlcm5lbCBuZXR3b3JraW5nIHBlcnNwZWN0aXZlLCBJJ20ga2V5aW5nIGluIG9uIHRoZSBmbG93IG9mZmxvYWQgaG9va3MuIEkgc2VlIHRoYXQgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgIGFyZSB0aGUgY3J1Y2lhbCBlbnRyeSBwb2ludHMgZm9yIHRoaXMgd2hvbGUgSVAgYW5kIElQdjYgb2ZmbG9hZCBwcm9jZXNzLiBUaGF0J3Mgd2hlcmUgdGhlIGluaXRpYWwgZGVjaXNpb25zIGdldCBtYWRlLCB0aGUgaW5zcGVjdGlvbiBzdGFydHMsIHRoZSBjbGFzc2lmaWNhdGlvbiBoYXBwZW5zIOKAkyB0aGlzIGlzIHRoZSBjb3JlIG9mIGdldHRpbmcgdGhlIHRyYWZmaWMgb2ZmbG9hZGVkLiBcblxuSSdtIGFsc28gbm90aW5nIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgLiBUaGlzIHNvdW5kcyBjcml0aWNhbC4gV2hpbGUgdGhlIGhvb2tzIG1pZ2h0IGluaXRpYXRlIHRoZSBwcm9jZXNzLCBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBpcyBsaWtlbHkgd2hlcmUgdGhlIGFjdHVhbCBmb3J3YXJkaW5nIGluZm9ybWF0aW9uIGdldHMgcG9wdWxhdGVkLiBJIGJldCBpdCdzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgZGF0YSBzdHJ1Y3R1cmVzLCBsaWtlIHRoZSBmbG93IGNhY2hlIGVudHJpZXMsIGFuZCBwb3B1bGF0aW5nIHRoZW0gd2l0aCB0aGUgZGV0YWlscyB0aGUgaGFyZHdhcmUgbmVlZHMgdG8gYWNjZWxlcmF0ZSB0aGUgdHJhZmZpYy4gVGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJseSB0aWdodGx5IGNvdXBsZWQgd2l0aCB0aGUgZGV2aWNlIGRyaXZlciwgYW5kIGtub3dzIGV4YWN0bHkgaG93IHRvIHRlbGwgdGhlIE5JQyB3aGljaCBwYWNrZXRzIHRvIGhhbmRsZSBpbiBoYXJkd2FyZS4gVGhpcyBtZWFucyB0aGlzIGlzIHRoZSBwb2ludCB3aGVyZSB0aGUgZGVjaXNpb25zIG1hZGUgYXQgdGhlIGhvb2sgYXJlIG1hdGVyaWFsaXplZCwgYW5kIHR1cm5lZCBpbnRvIGFjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NTgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyODo0MS45MzEwNTc1MDNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODQ0NTE4OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2X2ZpbGxfZm9yd2FyZF9wYXRoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9MjgyPXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0yOTctXFx0cmN1X3JlYWRfbG9jaygpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6Mjk4OlxcdGVyciA9IGRldl9maWxsX2ZvcndhcmRfcGF0aChcXHUwMDI2Y3R4LCBcXHUwMDI2c3RhY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMjk5LVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0zMTItZXJyX291dDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjMxMzpcXHRkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShcXHUwMDI2c3RhY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMzE0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmM9OTI9bXRrX2Zsb3dfZ2V0X3dkbWFfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwgc3RydWN0IG10a193ZG1hX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYy0xMDktXFx0cmN1X3JlYWRfbG9jaygpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jOjExMDpcXHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoXFx1MDAyNmN0eCwgXFx1MDAyNnN0YWNrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYy0xMTEtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYy0xMjYtZXJyX291dDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYzoxMjc6XFx0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UoXFx1MDAyNnN0YWNrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYy0xMjgtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTM0Mjk9aW50IGRldl9maWxsX21ldGFkYXRhX2RzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjM0MzA6aW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzQzMS1cXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjM0MzI6dm9pZCBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayk7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zNDMzLXN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0X2J5X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jPTc1Nj1zdGF0aWMgaW50IHZsYW5fZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTc2Mi1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYzo3NjM6c3RhdGljIGludCB2bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTc2NC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoKVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM9MTA3OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZsYW5fbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTExMDktXFx0Lm5kb19nZXRfaWZsaW5rXFx0XFx0PSB2bGFuX2Rldl9nZXRfaWZsaW5rLFxcbm5ldC84MDIxcS92bGFuX2Rldi5jOjExMTA6XFx0Lm5kb19maWxsX2ZvcndhcmRfcGF0aFxcdD0gdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGgsXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTExMS1cXHQubmRvX2h3dHN0YW1wX2dldFxcdD0gdmxhbl9od3RzdGFtcF9nZXQsXFxuLS1cXG5uZXQvY29yZS9kZXYuYz03NDM9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKmRldl9md2RfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc1MC1cXG5uZXQvY29yZS9kZXYuYzo3NTE6dm9pZCBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcXG5uZXQvY29yZS9kZXYuYy03NTIte1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzY5LX1cXG5uZXQvY29yZS9kZXYuYzo3NzA6RVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2UpO1xcbm5ldC9jb3JlL2Rldi5jLTc3MS1cXG5uZXQvY29yZS9kZXYuYzo3NzI6aW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbm5ldC9jb3JlL2Rldi5jLTc3My1cXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtODA4LWVycl9vdXQ6XFxubmV0L2NvcmUvZGV2LmM6ODA5OlxcdGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0YWNrKTtcXG5uZXQvY29yZS9kZXYuYy04MTAtXFxuLS1cXG5uZXQvY29yZS9kZXYuYy04MTItfVxcbm5ldC9jb3JlL2Rldi5jOjgxMzpFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGgpO1xcbm5ldC9jb3JlL2Rldi5jLTgxNC1cXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTk3OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9tb25pdG9yaWZfb3BzID0ge1xcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtOTg4LVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjk4OTpzdGF0aWMgaW50IGllZWU4MDIxMV9uZXRkZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy05OTAtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTEwNDc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfZGF0YWlmXzgwMjNfb3BzID0ge1xcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtMTA1My1cXHQubmRvX3NldF9tYWNfYWRkcmVzc1xcdD0gaWVlZTgwMjExX2NoYW5nZV9tYWMsXFxubmV0L21hYzgwMjExL2lmYWNlLmM6MTA1NDpcXHQubmRvX2ZpbGxfZm9yd2FyZF9wYXRoXFx0PSBpZWVlODAyMTFfbmV0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoLFxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTEwNTUtXFx0Lm5kb19zZXR1cF90Y1xcdFxcdD0gaWVlZTgwMjExX25ldGRldl9zZXR1cF90YyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MzY9c3RhdGljIGJvb2wgbmZ0X2lzX3ZhbGlkX2V0aGVyX2RldmljZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy00NC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjQ1OnN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfY2FjaGUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy00Ni1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtODAtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzo4MTpcXHRyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKFxcdTAwMjZjdHgsIHN0YWNrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTgyLX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MTA0PXN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTE5OC1lcnJfb3V0Olxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MTk5OlxcdGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0YWNrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTIwMC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MjIxPXN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTIzMi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjIzMzpcXHRpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChkc3QsIGN0LCBkaXIsIGhhLCBwa3QtXFx1MDAzZWV0aGVydHlwZSwgXFx1MDAyNnN0YWNrKSBcXHUwMDNjIDAgfHxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTIzNC1cXHQgICAgbmZ0X2Rldl9wYXRoX2luZm8oXFx1MDAyNnN0YWNrLCBcXHUwMDI2aW5mbywgaGEsIGZ0KSBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjQzLjYxNTUxNDc1OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDEzNDgwMDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlByaW9yaXRpemluZyBGdXp6aW5nIFRhcmdldHMgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgd2hlcmUgdG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cy4gTG9va2luZyBhdCB0aGlzIGxpc3QsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZXNlIGZ1bmN0aW9uczogYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgLCBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCwgYG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGhgLCBgaXBpcF9maWxsX2ZvcndhcmRfcGF0aGAsIGFuZCBgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aGAuXG5cbkhvd2V2ZXIsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBsZXQncyBqdXN0IGNvbmZpcm0gaWYgYGlwaXBfZmlsbF9mb3J3YXJkX3BhdGhgIGFuZCBgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aGAgYXJlIHN0YXRpY2FsbHkgZGVmaW5lZC4gWWVwLCB0aGV5IGFyZS4gVGhhdCByZWR1Y2VzIHRoZSBpbml0aWFsIGZvY3VzIGEgYml0LiBTbywgZm9yIGZ1enppbmcsIEknbSBnb2luZyB0byBwdXQgdGhlc2UgYXQgdGhlIHRvcCBvZiBteSBsaXN0OiBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCwgYW5kIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYC4gSG9sZCBvbiwgYG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGlzIGFsc28gc3RhdGljLCBzbyBJIGNhbiBpZ25vcmUgdGhhdCBhcyB3ZWxsLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gaWYgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCBhbmQgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgIGFyZSBleHBvcnRlZC4gWWVzLCB0aGV5IGFyZSEgQW5kIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGlzIGV4cG9ydGVkIGFzIHdlbGwuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBrZXkuIFNpbmNlIHRoZXkncmUgZXhwb3J0ZWQsIHRoZXkncmUgbGlrZWx5IGdvaW5nIHRvIHByb3ZpZGUgbW9yZSB0ZXN0IGNvdmVyYWdlLlxuXG5OZXh0IHN0ZXA6IEknbGwgc3RhcnQgYnkgdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCBpbiB0aGUgYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jYCBmaWxlLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQzNywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyODo0OC42Mjg5OTczNDlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDkzNTUzOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd19vZmZsb2FkX2lwX2hvb2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD0zNDU9aW50IG5mX2Zsb3dfb2ZmbG9hZF94ZHBfc2V0dXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zNDgtXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDozNDk6dW5zaWduZWQgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0zNTAtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYz0xMj1uZl9mbG93X29mZmxvYWRfaW5ldF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTM2LVxcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6Mzc6XFx0XFx0cmV0dXJuIG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKHByaXYsIHNrYiwgc3RhdGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtMzgtXFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9Nzg9c3RhdGljIHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZSBmbG93dGFibGVfaXB2NCA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmMtODMtXFx0LmZyZWVcXHRcXHQ9IG5mX2Zsb3dfdGFibGVfZnJlZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jOjg0OlxcdC5ob29rXFx0XFx0PSBuZl9mbG93X29mZmxvYWRfaXBfaG9vayxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTg1LVxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz04NjE9dW5zaWduZWQgaW50XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6ODYyOm5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMtODYzLVxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTg4OS19XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmM6ODkwOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy04OTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjUwLjIzODM1OTM3M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTc3Njg0NzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBJUHY2IEZsb3cgT2ZmbG9hZCBIb29rKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYC4gSSdtIGltbWVkaWF0ZWx5IGZvY3VzaW5nIG9uIHRoaXMgc3BlY2lmaWMgaG9vayBwb2ludCwgbGlrZWx5IHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgYmVjYXVzZSBpdCdzIHRoZSBnYXRld2F5IGZvciBJUHY2IGZsb3cgb2ZmbG9hZC4gS25vd2luZyB0aGlzIGhvb2sgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgSVB2NiB0cmFmZmljIGlzIGludGVyY2VwdGVkLCBpbnNwZWN0ZWQsIGFuZCB0aGVuIHBvdGVudGlhbGx5IGhhbmRlZCBvZmYgdG8gaGFyZHdhcmUgZm9yIGFjY2VsZXJhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSB0aGlzIGhvb2sgc2l0cyBpbiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgcGlwZWxpbmUuIElzIGl0IGJlZm9yZSBvciBhZnRlciBjb25uZWN0aW9uIHRyYWNraW5nPyBIb3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIG90aGVyIE5ldGZpbHRlciBtb2R1bGVzIGxpa2UgY29ubnRyYWNrIGFuZCBOQVQ/IFRoZSBzcGVjaWZpY3Mgb2YgaXRzIHBsYWNlbWVudCB3aWxsIGRpY3RhdGUgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgYW5kIHRoZSB0eXBlcyBvZiBvZmZsb2FkIG9wcG9ydHVuaXRpZXMgaXQgcHJlc2VudHMuIEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgbG9naWMgd2l0aGluIHRoZSBob29rIHRvIHByb3Blcmx5IGV2YWx1YXRlIGl0cyBiZWhhdmlvciBhbmQgYW55IHBvdGVudGlhbCBmb3Igb3B0aW1pemF0aW9uIG9yIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3MDcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyODo1My4yMTYwNDY2NDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjEyMjg4NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTM0OT11bnNpZ25lZCBpbnQgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTM1MC1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDozNTE6dW5zaWduZWQgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTM1Mi1cXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM9MTI9bmZfZmxvd19vZmZsb2FkX2luZXRfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy0zOC1cXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pbmV0LmM6Mzk6XFx0XFx0cmV0dXJuIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2socHJpdiwgc2tiLCBzdGF0ZSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYy00MC1cXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jPTg4PXN0YXRpYyBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgZmxvd3RhYmxlX2lwdjYgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTkzLVxcdC5mcmVlXFx0XFx0PSBuZl9mbG93X3RhYmxlX2ZyZWUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2luZXQuYzo5NDpcXHQuaG9va1xcdFxcdD0gbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaW5ldC5jLTk1LVxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYz0xMTg5PXVuc2lnbmVkIGludFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jOjExOTA6bmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jLTExOTEtXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYy0xMjE3LX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaXAuYzoxMjE4OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyODo1NC44MzcyODQwMjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0OTk4NDYxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBGbG93IE9mZmxvYWQgUGF0Y2hlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgaGl0dGluZyB0aGUgY29yZSBvZiB0aGUgTmV0ZmlsdGVyIGZsb3cgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5LiBTcGVjaWZpY2FsbHksIGl0J3MgbW9kaWZ5aW5nIHRoZSBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AgZnVuY3Rpb25zLiBUaGUga2V5IGNoYW5nZSBoZXJlIHNlZW1zIHRvIGJlIHRoZSBhZGRlZCBjaGVja3MgZm9yIGBuZl9mbG93X3NrYl9lbmNhcF9wcm90b2NvbGAgYW5kIGBjdHguZXRoZXJfdHlwZWAuIFJpZ2h0IGF3YXksIHRoaXMgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIGVuY2Fwc3VsYXRlZCB0cmFmZmljIG9mIHNvbWUga2luZCDigJMgcG90ZW50aWFsbHkgR1JFLCBWWExBTiwgb3Igc29tZXRoaW5nIHNpbWlsYXIuIFRoZXnigJlyZSBsaWtlbHkgdHJ5aW5nIHRvIGNvcnJlY3RseSBpZGVudGlmeSBvciBoYW5kbGUgcGFja2V0cyB0aGF0IGFyZSBuZXN0ZWQgb3IgdHVubmVsZWQuXG5cbkJleW9uZCB0aGUgaG9vayBtb2RpZmljYXRpb25zLCBJIHNlZSB0aGF0IGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGlzIGFsc28gYmVpbmcgdG91Y2hlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBmb3J3YXJkaW5nIHBhdGggZm9yIHRoZSBlbmNhcHN1bGF0ZWQgb3IgbmVzdGVkIHBhY2tldHMgaXMgYmVpbmcgY29uc3RydWN0ZWQgYW5kIHByb3BhZ2F0ZWQuXG5cblRvIGdldCBhIGJldHRlciBncmlwIG9uIGhvdyBhbGwgdGhpcyBmaXRzIHRvZ2V0aGVyLCBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBuZnRfZGV2X2ZvcndhcmRfcGF0aGAgd2hpY2gsIGJhc2VkIG9uIHRoZSBjb250ZXh0LCBJJ20gcHJldHR5IHN1cmUgaXMgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNgLiBUaGF0IHNob3VsZCBwcm92aWRlIHRoZSBjb250ZXh0IG5lZWRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHVwZGF0ZXMgYXJlIGZpdHRpbmcgaW50byB0aGUgZmxvdyB0YWJsZSBwYXRoaW5nIG9mIHRoZSBlbmNhcHN1bGF0ZWQgdHJhZmZpYy4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGNoYW5nZSBhZmZlY3RzIHRoZSBwcm9jZXNzaW5nIHRoYXQgZGVjaWRlcyB3aGVyZSB0byBmb3J3YXJkIHRoZSBlbmNhcHN1bGF0ZWQgdHJhZmZpYywgb3IgdG8gYWx0ZXIgaXQgaW4gYW55IHdheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1NjksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyODo1OC44ODcyNzIwMjdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mzg4NzE5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2Rldl9mb3J3YXJkX3BhdGhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0yMDQ9c3RhdGljIGJvb2wgbmZ0X2Zsb3d0YWJsZV9maW5kX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yMjAtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzoyMjE6c3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTIyMi1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTI2Nz1pbnQgbmZ0X2Zsb3dfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMzA5LVxcdGlmIChyb3V0ZS1cXHUwMDNldHVwbGVbZGlyXS54bWl0X3R5cGVcXHQ9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MzEwOlxcdCAgICBuZnRfZGV2X2ZvcndhcmRfcGF0aChwa3QsIHJvdXRlLCBjdCwgZGlyLCBmdCkgXFx1MDAzYyAwKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMzExLVxcdFxcdGdvdG8gZXJyX2RzdF9yZWxlYXNlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0zMTMtXFx0aWYgKHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS54bWl0X3R5cGUgPT0gRkxPV19PRkZMT0FEX1hNSVRfTkVJR0ggXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjMxNDpcXHQgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCByb3V0ZSwgY3QsICFkaXIsIGZ0KSBcXHUwMDNjIDApXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0zMTUtXFx0XFx0Z290byBlcnJfZHN0X3JlbGVhc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI5OjAwLjUyNjE0ODg0N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDYxODAyMDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIHRoZSBFeHBvcnQgU3RhdHVzIG9mIGBuZnRfZmxvd19yb3V0ZWAqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIGBuZnRfZmxvd19yb3V0ZWAgY29tcG9uZW50IG1lbnRpb25lZC4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGlzIGFyY2hpdGVjdHVyZSwgaXMgdG8gZGV0ZXJtaW5lIGl0cyBhY2Nlc3NpYmlsaXR5LiBJcyBpdCBhY3R1YWxseSBleHBvcnRlZD8gSXMgaXQgYXZhaWxhYmxlIGZvciB1c2UgYnkgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBvciBhIG1vZHVsZSwgb3IgaXMgaXQgaW50ZW5kZWQgdG8gYmUgaW50ZXJuYWwgdG8gYSBwYXJ0aWN1bGFyIGNvbnRleHQ/IFRoYXQncyB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZS4gVGhlIHdheSB0aGlzIGlzIGFyY2hpdGVjdGVkIHNpZ25pZmljYW50bHkgaW1wYWN0cyB0aGUgb3ZlcmFsbCBmbG93IGRlc2lnbiBhbmQgdGhlIGxldmVsIG9mIG1vZHVsYXJpdHkuIElmIGl0J3MgZXhwb3J0ZWQsIHRoZW4gaXRzIGZ1bmN0aW9uYWxpdHkgaXMgYSBrZXkgcGllY2UuIElmIGl0J3Mgbm90LCBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCBfaXNfIHZpc2libGUgZnJvbS4gTm93IGxldCdzIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCB2ZXJpZnkgaXRzIGV4cG9ydCBzdGF0dXM7IGEgcXVpY2sgZ2xhbmNlIGF0IHRoZSByZWxldmFudCBmaWxlcyBzaG91bGQgYW5zd2VyIHRoYXQgcXVlc3Rpb24uIFRpbWUgdG8gY29uZmlybSBpZiB0aGlzIGNvbXBvbmVudCBjYW4gYmUgcmVhZGlseSBsZXZlcmFnZWQgb3IgaWYgSSdtIGxvb2tpbmcgYXQgc29tZXRoaW5nIG1vcmUgbGltaXRlZCBpbiBzY29wZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg0MjYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyOTowMy45ODc5NTUwMDhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODgzNjc3NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2Zsb3dfcm91dGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD0yNDc9c3RydWN0IG5mdF9wa3RpbmZvO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6MjQ4OmludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMjQ5LVxcdFxcdCAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MjIxPXN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTI2Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjI2NzppbnQgbmZ0X2Zsb3dfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTI2OC1cXHRcXHQgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTMyMy19XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzozMjQ6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X2Zsb3dfcm91dGUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9NTA9c3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTEwOC1cXHRkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MTA5OlxcdGlmIChuZnRfZmxvd19yb3V0ZShwa3QsIGN0LCBcXHUwMDI2cm91dGUsIGRpciwgcHJpdi1cXHUwMDNlZmxvd3RhYmxlKSBcXHUwMDNjIDApXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTEwLVxcdFxcdGdvdG8gZXJyX2Zsb3dfcm91dGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI5OjA1LjY3NjMyODY5M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjk3NzQ5Njc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IE5ldGZpbHRlciBGbG93IE9mZmxvYWQgQnJlYWtkb3duKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGBuZnRfZmxvd19yb3V0ZWAgZnVuY3Rpb24sIGNydWNpYWwgZm9yIG91ciBuZXRmaWx0ZXIgZmxvdyBvZmZsb2FkIHRhcmdldCwgaXMgaW52b2tlZCBmcm9tIHdpdGhpbiBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCwgd2hpY2ggcmVzaWRlcyBpbiB0aGUgYG5mdF9mbG93X29mZmxvYWQuY2AgZmlsZS4gVGhpcyBpcyBvdXIgdGFyZ2V0IGZ1bmN0aW9uLCB0aGUgY29yZSBvZiB0aGUgZmxvdyBvZmZsb2FkaW5nIG1lY2hhbmlzbS5cblxuVGhlcmVmb3JlLCB0byB0aG9yb3VnaGx5IHVuZGVyc3RhbmQgdGhlIGZsb3csIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBrZXkgc3ltYm9sczogYGRldl9maWxsX2ZvcndhcmRfcGF0aGAsIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AsIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYCwgYW5kIG9mIGNvdXJzZSwgYG5mdF9mbG93X3JvdXRlYCBpdHNlbGYuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgd2lsbCBnaXZlIG1lIGEgZ3Jhc3Agb24gdGhlIGlubmVyIHdvcmtpbmdzIG9mIHRoaXMgc3lzdGVtLlxuXG5GdXJ0aGVybW9yZSwgSSBzaG91bGQgaW52ZXN0aWdhdGUgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIHByZXNlbmNlIGFuZCBzZXR1cCBvZiBgTkZfRkxPV19UQUJMRWAgYW5kIGBORl9GTE9XX1RBQkxFX0lORVRgLCB3aGljaCB3b3VsZCBlc3RhYmxpc2ggdGhlIGZsb3cgdGFibGUgaW5mcmFzdHJ1Y3R1cmUuIEknbGwgbmVlZCB0byB2ZXJpZnkgYE5GVF9GTE9XX09GRkxPQURgIGV4aXN0cywgYXMgaXQncyBmb3VuZGF0aW9uYWwgdG8gdGhlIG9mZmxvYWQgZmVhdHVyZS4gQW5kIGZpbmFsbHksIEkgbXVzdCBjb25maXJtIGBORVRfSVBJUGAgYW5kIGBJUFY2X1RVTk5FTGAgYXJlIGFwcHJvcHJpYXRlbHkgY29uZmlndXJlZCwgc2luY2UgdHVubmVsaW5nIHdpbGwgcGxheSBhIHJvbGUgaW4gdGhpcyBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTEzNywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyOTowOS45NzQwODEzMjlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTE5MzA0NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GVF9GTE9XX09GRkxPQURcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ5OD1jb25maWcgTkZUX0VYVEhEUl9EQ0NQXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTAzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1MDQ6Y29uZmlnIE5GVF9GTE9XX09GRkxPQURcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTA1LVxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2IE5GX0ZMT1dfVEFCTEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjk6MTEuODI2MDE3Nzc3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjI1NzYzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipFeGFtaW5pbmcgRmxvdyBUYWJsZSBJbXBsZW1lbnRhdGlvbnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGFydCBpbiBmbG93IHRhYmxlIGltcGxlbWVudGF0aW9ucy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBzcGVjaWZpY2FsbHkgYXQgdGhlIElQdjQgYW5kIElQdjYgdmVyc2lvbnMuIEkgbmVlZCB0byBjaGVjayBgTkZfRkxPV19UQUJMRV9JUFY0YCBhbmQgYE5GX0ZMT1dfVEFCTEVfSVBWNmAuIEkgbmVlZCB0byBjb21wYXJlIHRoZWlyIHN0cnVjdHVyZSBhbmQgZnVuY3Rpb25hbGl0eS4gQXJlIHRoZXkgc2ltaWxhcj8gQXJlIHRoZXJlIHNpZ25pZmljYW50IGRpZmZlcmVuY2VzIGluIGhvdyB0aGV5IGhhbmRsZSBhZGRyZXNzIGZhbWlsaWVzPyBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGluaGVyZW50IGluIG9uZSB2ZXJzdXMgdGhlIG90aGVyPyBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBmbG93IHRhYmxlcyBhcmUgaW50ZWdyYXRlZCB3aXRoIHRoZSBicm9hZGVyIG5ldGZpbHRlciBmcmFtZXdvcmsgYXMgd2VsbC4gVGhpcyB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uIGZvciBmaWd1cmluZyBvdXQgd2hhdCB0aGV5IGRvIGFuZCBob3cgdGhleSBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2OTcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyOToxNC45ODg1OTcxMTlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDM5ODkwNTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9GTE9XX1RBQkxFX0lQVlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjk6MTYuNzkyNTk4ODUyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NDU3MTUwODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byBOZXR3b3JrIEZsb3cgVGFibGUgSW1wbGVtZW50YXRpb24qKlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIEkgZGlzdGluY3RseSByZW1lbWJlciBzZWVpbmcgc29tZXRoaW5nIGFib3V0IGBORl9GTE9XX1RBQkxFX0lORVRgIGluIHRoZSBjb2RlIGEgYml0IGFnby4gVGhhdCBuYW1lIGlzIHJpbmdpbmcgYSBiZWxsLiBHaXZlbiB0aGF0IGNvbnRleHQsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbi4gTGV0J3Mgc2VlIGlmIHRoZXJlJ3MgYSBtb3JlIHNwZWNpZmljIHZlcnNpb24gZGVmaW5lZCBmb3IgSVB2NCwgc29tZXRoaW5nIGxpa2UgYE5GX0ZMT1dfVEFCTEVfSVBWNGAgb3IgcGVyaGFwcyBhIG5hbWluZyBjb252ZW50aW9uIHRoYXQgd291bGQgaW5jbHVkZSBzb21ldGhpbmcgc2ltaWxhci4gSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZSwgc28gSSdsbCBnbyBiYWNrIGFuZCBjcm9zcy1yZWZlcmVuY2UsIHZlcmlmeSB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGEgbW9yZSBzcGVjaWZpYyBvciBvcHRpbWl6ZWQgZmxvdyB0YWJsZSBzdHJ1Y3R1cmUgZm9yIElQdjQuIEknbSBzdXJlIGl0J3Mgc2ltaWxhciwgYnV0IEkgd2FudCB0byBiZSAxMDAlIGFjY3VyYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTkxOCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI5OjIxLjQzODMxNjQ1MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxNDcxNDE1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfRkxPV19UQUJMRV9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMzpjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MTE9Y29uZmlnIE5GX0ZMT1dfVEFCTEVcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcyMTpjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIyLVxcdGJvb2wgXFxcIlN1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyOToyMy40NTMwMzU1NjJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzNzQ4Mjg0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqSWRlbnRpZnlpbmcgdGhlIENvcnJlY3QgTmV0ZmlsdGVyIEZsb3cgVGFibGUgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGJhc2VkIG9uIHdoYXQgSSdtIGxvb2tpbmcgYXQsIGl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGBORl9GTE9XX1RBQkxFX0lORVRgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gSSBuZWVkIHRvIGZvY3VzIG9uLiBUaGF0J3MgdGhlIG9uZS5cblxuTm93LCBsZXQgbWUganVzdCBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEkgc2VlIGBORl9GTE9XX1RBQkxFYCwgb2J2aW91c2x5LCBhbmQgdGhlbiB0aGUgbW9yZSBzcGVjaWZpYyBgTkZfRkxPV19UQUJMRV9JTkVUYCDigJMgdGhhdCByZWluZm9yY2VzIG15IGluaXRpYWwgaW1wcmVzc2lvbi4gSSBhbHNvIHNlZSBgTkZUX0ZMT1dfT0ZGTE9BRGAsIHdoaWNoIG1pZ2h0IGJlIHJlbGF0ZWQsIGFuZCB0aGVuIHRoZXNlIHR1bm5lbCBvcHRpb25zOiBgTkVUX0lQSVBgIGFuZCBgSVBWNl9UVU5ORUxgLlxuXG5HaXZlbiB0aGUgY29udGV4dCwgSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IGBORVRfSVBJUGAgYW5kIGBJUFY2X1RVTk5FTGAgZG9uJ3QgaW50cm9kdWNlIGFueSB1bmV4cGVjdGVkIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMgdGhhdCBJIG5lZWQgdG8gYWNjb3VudCBmb3IuIEJlc3QgdG8gdmVyaWZ5IHRob3NlIHJlcXVpcmVtZW50cyBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyBub3csIGJlZm9yZSBJIG1vdmUgYW55IGZ1cnRoZXIuIExldCdzIHNlZSB3aGF0IHRob3NlIGxvb2sgbGlrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMzEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyOToyNy40OTA1MzEzMzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDQ2ODY4MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9JUElQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MTQ5PWNvbmZpZyBJUF9QTlBfUkFSUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0xNjEtXFxubmV0L2lwdjQvS2NvbmZpZzoxNjI6Y29uZmlnIE5FVF9JUElQXFxubmV0L2lwdjQvS2NvbmZpZy0xNjMtXFx0dHJpc3RhdGUgXFxcIklQOiB0dW5uZWxpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI5OjI5LjI5NTIzNjg4NloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTIxNjY3NzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSwgYW4gZXhwZXJ0LCBhbSBwcm9jZXNzaW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkNvbnNpZGVyaW5nIHRoZSBOZXR3b3JrIEludGVyZmFjZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IG5ldHdvcmsgY29uZmlndXJhdGlvbiBhbmQgaW1tZWRpYXRlbHksIHRoZSBgSVBWNl9UVU5ORUxgIGFzcGVjdCBjb21lcyB0byBtaW5kLiBJdCdzIGEga2V5IGNvbnNpZGVyYXRpb24uIEkgbmVlZCB0byBlbnN1cmUgYSBwcm9wZXIgYW5kIGZ1bmN0aW9uYWwgSVB2NiB0dW5uZWwgY29uZmlndXJhdGlvbi4gVGhhdCBtZWFucyBJIG5lZWQgdG8gdGhpbmsgdGhyb3VnaCB0aGUgZW5jYXBzdWxhdGlvbiBtZXRob2QsIHRoZSB0dW5uZWwgZW5kcG9pbnRzLCBhbmQgYW55IHBvdGVudGlhbCByb3V0aW5nIGltcGxpY2F0aW9ucy4gVGhlIGltcGxpY2F0aW9ucyBhcmUgYSBzbW9vdGggdHJhbnNpdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgaW1wbGVtZW50YXRpb24gaXMgc2VhbWxlc3MuIEknbGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgYW5kIHRoZSByZXF1aXJlbWVudHMgb2YgaW1wbGVtZW50aW5nIHRoaXMgcHJvdG9jb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzM3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyOTozMi44MTY5MDc1OTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjMwODAwNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZfVFVOTkVMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWc9MTk2PWNvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cXG5uZXQvaXB2Ni9LY29uZmlnOjE5OTpjb25maWcgSVBWNl9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTIwMC1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyOTozNC41Mzk5OTIwNzJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2NDcwNDQ0MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFBhdGNoIG9uIE5ldHdvcmsgRm9yd2FyZGluZyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCdzIG1vZGlmaWNhdGlvbiBvZiBgdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGhgIG5lY2Vzc2l0YXRlcyB0aGUgYFZMQU5fODAyMVFgIGNvbmZpZyBvcHRpb24uIEkgdGhvdWdodCBgdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGhgIHdhcyB0b3VjaGVkLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gVGhlIHBhdGNoIGRpZmYgSSB3YXMgZ2l2ZW4gaW5pdGlhbGx5IGRpZG4ndCBsaXN0IGB2bGFuX2Rldi5jYC4gSSBuZWVkIHRvIHJlLWV4YW1pbmUgdGhlIGNvbnRleHQuXG5cblJpZ2h0LCB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIHNpZ25hdHVyZSBvZiBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYC4gSXQgbG9va3MgbGlrZSBpdCBkaWRuJ3QgY2hhbmdlIHRoZSBzaWduYXR1cmUgb2YgYG5kb19maWxsX2ZvcndhcmRfcGF0aGAuIE5vdywgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgdGFrZXMgYHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHhgIGluc3RlYWQgb2YgdGhlIGRldmljZSBhbmQgZGVzdGluYXRpb24gTUFDIGFkZHJlc3MuIFRoaXMgYWxsb3dzIHRoZSBjYWxsZXIgdG8gaW5pdGlhbGl6ZSBgZXRoZXJfdHlwZWAgd2l0aGluIHRoZSBjb250ZXh0LlxuXG5TbywgYFZMQU5fODAyMVFgIGlzbid0IHN0cmljdGx5ICpyZXF1aXJlZCogYnkgdGhpcyBjaGFuZ2UsIHRob3VnaCBpdCBtaWdodCBiZSBoZWxwZnVsIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiBNeSBhbmFseXNpcyBzaG93cyB0aGUgY29yZSBtb2RpZmljYXRpb25zIGFyZSBjZW50ZXJlZCBhcm91bmQgYG5mX2Zsb3dfdGFibGVfaXAuY2AgYW5kIGBuZl9mbG93X3RhYmxlX3BhdGguY2AuIFRoZXJlIGFyZSBhbHNvIGNoYW5nZXMgaW4gYGlwaXAuY2AgYW5kIGBpcDZfdHVubmVsLmNgLlxuXG5Ob3csIEkgbmVlZCB0byB6b29tIGluIG9uIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBmb3IgZmxvdyB0YWJsZSBvZmZsb2FkOiBgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2tgIGFuZCBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2AuIEkgY2FuIHNlZSB0aGF0IGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGlzIGNhbGxlZCBmcm9tIGBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgIHdoaWNoIGlzIHRoZW4gY2FsbGVkIGZyb20gYG5mdF9mbG93X3JvdXRlYC5cblxuVGhlcmVmb3JlLCB0aGUga2V5IHN5bWJvbHMgdG8ga2VlcCBhbiBleWUgb24gYXJlOlxuKiAgIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2BcbiogICBgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va2BcbiogICBgbmZ0X2Zsb3dfcm91dGVgXG4qICAgYGRldl9maWxsX2ZvcndhcmRfcGF0aGBcblxuUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb25zLCB0aGUgcGF0Y2ggbGlrZWx5IGRlcGVuZHMgb246XG4qICAgYE5GX0ZMT1dfVEFCTEVgXG4qICAgYE5GX0ZMT1dfVEFCTEVfSU5FVGBcbiogICBgTkZUX0ZMT1dfT0ZGTE9BRGBcbiogICBgTkVUX0lQSVBgXG4qICAgYElQVjZfVFVOTkVMYFxuXG5JIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgYE5GVF9GTE9XX09GRkxPQURgIGhhcyBhbnkgb3RoZXIgc3BlY2lmaWMgZGVwZW5kZW5jaWVzIG9yIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMDQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI5OjQ1LjE4NzA0MDM1OFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNzY1OTMzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDk4PWNvbmZpZyBORlRfRVhUSERSX0RDQ1BcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjUwNDpjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDUtXFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfRkxPV19UQUJMRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyOTo0Ni45MDQ3MDc2MloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTcxOTI5MjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHdoYXQgbmVlZHMgdG8gYmUgY29uc2lkZXJlZCwgdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGxvZ2ljYWxseTpcblxuKipOZXR3b3JrIEZ1bmN0aW9uYWxpdHkgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBoaW5nZSBvbiBib3RoIGBORl9DT05OVFJBQ0tgIGFuZCBgTkZfRkxPV19UQUJMRWAuIEdpdmVuIHRoZSBpbnRlcnBsYXkgaW1wbGllZCwgaXQncyBjbGVhciB3ZSBhYnNvbHV0ZWx5ICptdXN0KiBpbmNsdWRlIGBORl9DT05OVFJBQ0tgIHRvIHByb2NlZWQuIFRoYXQncyBhIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrLlxuXG5Ob3csIGxldCdzIHBpdm90IHRvIHNvbWUgbW9yZSBzcGVjaWZpYyBuZXR3b3JraW5nIGZlYXR1cmVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGFjY291bnQgZm9yIGBORVRfSVBJUGAgYW5kIGBJUFY2X1RVTk5FTGAuIFRpbWUgdG8gY2hlY2sgdGhlaXIgcmVzcGVjdGl2ZSBjb25maWd1cmF0aW9uIGxvY2F0aW9ucy4gT2theSwgSSBzZWUgdGhhdCBgTkVUX0lQSVBgIGlzIGRlZmluZWQgd2l0aGluIGBuZXQvaXB2NC9LY29uZmlnYCwgYW5kIGBJUFY2X1RVTk5FTGAgcmVzaWRlcyBpbiBgbmV0L2lwdjYvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSB0byBmaW5kIHRoZW0uXG5cbkZpbmFsbHksIHRoZSBwb3RlbnRpYWwgZGVwZW5kZW5jeSBvZiBgTkZfRkxPV19UQUJMRV9JTkVUYCBvbiBgTkZfVEFCTEVTYC4uLiBBIGNydWNpYWwgcG9pbnQuIFRoZSBjb25maWd1cmF0aW9uIGVudHJ5IGBORlRfRkxPV19PRkZMT0FEYCBpcyBzaXR1YXRlZCBpbiBgbmV0L25ldGZpbHRlci9LY29uZmlnYCwgYnV0IGl0J3MgKmNvbmRpdGlvbmFsbHkqIGluY2x1ZGVkLCBzcGVjaWZpY2FsbHkgd2hlbiBgTkZfVEFCTEVTYCBpcyBlbmFibGVkLiBUaGVyZWZvcmUsIGBORl9UQUJMRVNgIG1heSB3ZWxsIGFsc28gYmUgYSByZXF1aXJlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3MzcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjk6NTEuMDc2NjM5ODc3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE0MTIxODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlmIE5GX1RBQkxFU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTY9bWVudWNvbmZpZyBORl9UQUJMRVNfQlJJREdFXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTEwLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTE6aWYgTkZfVEFCTEVTX0JSSURHRVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTItXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz0zMD1jb25maWcgTkZfVFBST1hZX0lQVjRcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTMyLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjMzOmlmIE5GX1RBQkxFU1xcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTM0LVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTM1PWNvbmZpZyBORl9UQUJMRVNfSVBWNFxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzktXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6NDA6aWYgTkZfVEFCTEVTX0lQVjRcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy00MS1cXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnPTI2PWNvbmZpZyBORl9UUFJPWFlfSVBWNlxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMjgtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6Mjk6aWYgTkZfVEFCTEVTXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctMzAtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9MzE9Y29uZmlnIE5GX1RBQkxFU19JUFY2XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0zNS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzozNjppZiBORl9UQUJMRVNfSVBWNlxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTM3LVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ1NT1jb25maWcgTkZfVEFCTEVTXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDcwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzE6aWYgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3Mi1jb25maWcgTkZfVEFCTEVTX0lORVRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02MjU9Y29uZmlnIE5GVF9TT0NLRVRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MjctXFx0c2VsZWN0IE5GX1NPQ0tFVF9JUFY0XFxubmV0L25ldGZpbHRlci9LY29uZmlnOjYyODpcXHRzZWxlY3QgTkZfU09DS0VUX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjI5LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NDA9Y29uZmlnIE5GVF9UUFJPWFlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDItXFx0c2VsZWN0IE5GX0RFRlJBR19JUFY0XFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY0MzpcXHRzZWxlY3QgTkZfREVGUkFHX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQ0LVxcdHNlbGVjdCBORl9UUFJPWFlfSVBWNFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NDU6XFx0c2VsZWN0IE5GX1RQUk9YWV9JUFY2IGlmIE5GX1RBQkxFU19JUFY2XFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY0Ni1cXHRoZWxwXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NjQ5PWNvbmZpZyBORlRfU1lOUFJPWFlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NTktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY2MDppZiBORl9UQUJMRVNfTkVUREVWXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY2MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjk6NTIuNzkwNzY3MTlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyMDAxNzE4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgTmV0ZmlsdGVyIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGNvbmNlcm4gaXMgcHJldHR5IGNsZWFyOiB3ZSBuZWVkIGBORl9UQUJMRVNgLiBUaGF0J3Mgbm9uLW5lZ290aWFibGUgZm9yIHByZXR0eSBtdWNoIGFueXRoaW5nIG1vZGVybiBpbiBOZXRmaWx0ZXIuIEl04oCZcyB0aGUgZm91bmRhdGlvbmFsIGNvbXBvbmVudC5cblxuTm93LCBsZXQncyBjaXJjbGUgYmFjayB0byBgTkZfRkxPV19UQUJMRV9JTkVUYC4gSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgZW5hYmxlZCBhbmQgZnVuY3Rpb25pbmcgYXMgZXhwZWN0ZWQuIEl0J3MgY3J1Y2lhbCBmb3IgdGhlIGZsb3cgdGFibGUgZnVuY3Rpb25hbGl0eSwgb2J2aW91c2x5LCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3MgbGluZWQgdXAuIEknbSB0aGlua2luZyBvZiBwb3NzaWJsZSBpbnRlcmFjdGlvbnMgYW5kIHBvdGVudGlhbCBjb25mbGljdHMuIFRpbWUgdG8gYW5hbHl6ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM5MjgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyOTo1NS43MTA3ODcyMjdaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTUwOTYwMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzAxPWVuZGlmICMgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzAzOmNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzA0LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyOTo1Ny40MjU4ODg0NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTM2OTM0MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE5ldGZpbHRlciBGbG93IFRhYmxlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzb21lIE5ldGZpbHRlciBjb2RlIGFuZCBpdCBzZWVtcyB0aGlzIHBhcnQgaXMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgYE5GX1RBQkxFU2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCdzIHNlZS4uLiBJJ3ZlIGdvdCBhIGxpc3QgaGVyZTogYE5GX1RBQkxFU2AsIGBORl9GTE9XX1RBQkxFYCwgYE5GX0ZMT1dfVEFCTEVfSU5FVGAsIGBORlRfRkxPV19PRkZMT0FEYCwgYE5FVF9JUElQYCwgYElQVjZfVFVOTkVMYCwgYW5kIGBORl9DT05OVFJBQ0tgLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBjYW4gYE5GVF9GTE9XX09GRkxPQURgIGdldCB1cyB0byBgbmZ0X2Zsb3dfcm91dGVgPyBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgZnVuY3Rpb24ncyBpbiBgbmZfZmxvd190YWJsZV9wYXRoLmNgLCB3aGljaCwgaWYgSSByZW1lbWJlciBjb3JyZWN0bHksIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgTkZfRkxPV19UQUJMRWAgaXMgZW5hYmxlZC4gT2theSwgbGV0IG1lIGRvdWJsZS1jaGVjay4gSSBzaG91bGQgcmVhbGx5IHZlcmlmeSB0aGlzIGJ5IGNvbnN1bHRpbmcgdGhlIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbXBpbGF0aW9uIGNvbmRpdGlvbnMuIE5lZWQgdG8gYmUgc3VyZSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDIxMywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjozMDowMS41NjI4MjU4MTlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzA0MzA4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfZmxvd190YWJsZV9wYXRoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTQzPW5mX2Zsb3dfdGFibGUtb2Jqc1xcdFxcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDQ6XFx0XFx0XFx0XFx0ICAgbmZfZmxvd190YWJsZV9wYXRoLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ1LVxcdFxcdFxcdFxcdCAgIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5vIG5mX2Zsb3dfdGFibGVfeGRwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6MzA6MDMuMjkzMjYyMVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTU1ODAyNzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIEZsb3cgVGFibGUgT2ZmbG9hZCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGhlcmUncyBteSBicmVha2Rvd24uIEl0J3MgcHJldHR5IGNsZWFyIHRoYXQgYG5mX2Zsb3dfdGFibGVfcGF0aC5vYCBhbmQgYG5mX2Zsb3dfdGFibGVfaXAub2AgYXJlIGludGVncmFsIHBhcnRzIG9mIHRoZSBgbmZfZmxvd190YWJsZWAgbW9kdWxlLiBTbywgdGhlIGBORl9GTE9XX1RBQkxFYCBjb25maWcgb3B0aW9uIGlzIHRoZSBwcmltYXJ5IG9uZSBoZXJlLlxuXG5JJ3ZlIHplcm9lZCBpbiBvbiB0aGUga2V5IHN5bWJvbHMsIHByaW1hcmlseTogYG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rYCwgYG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tgLCBgbmZ0X2Zsb3dfcm91dGVgLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAuIEkgaGFkIHRvIGNvbmZpcm0sIGJ1dCB0aGUgZnVuY3Rpb25zIGBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoYCwgYGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGhgLCBgbmZfZmxvd19za2JfZW5jYXBfcHJvdG9jb2xgLCBhbmQgYG5mX2Zsb3dfdHVwbGVfZW5jYXBgIGFyZSBhbGwgc3RhdGljIGFuZCB0aGVyZWZvcmUgdW5saWtlbHkgdG8gYmUgZXh0ZXJuYWxseSB0b3VjaGVkLlxuXG5Ob3csIGNoZWNraW5nIHRoZSBleHBvcnRzLi4uIHllcywgSSBjYW4gc2VlIHRoYXQgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAsIGBuZl9mbG93X29mZmxvYWRfaXBfaG9va2AsIGBuZl9mbG93X29mZmxvYWRfaXB2Nl9ob29rYCwgYW5kIGBuZnRfZmxvd19yb3V0ZWAgYXJlIGFsbCBleHBvcnRlZC4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIHVuZGVyc3RhbmRpbmcuXG5cblRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIHBpZWNlIG9mIHdvcmsuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgcmVmaW5pbmcgdGhlIGZsb3cgdGFibGUgb2ZmbG9hZCBwYXRod2F5LCBmb2N1c2luZyBvbiB0aGUgY29ycmVjdCBoYW5kbGluZyBvZiBpbm5lciBwcm90b2NvbHMgYW5kIHRoZSBldGhlcl90eXBlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIElQLWluLUlQIGFuZCBJUHY2IHR1bm5lbHMuIFRoZSBjaGFuZ2UgdG8gYGRldl9maWxsX2ZvcndhcmRfcGF0aGAg4oCTIHRha2luZyBhIGNvbnRleHQgc3RydWN0IHJhdGhlciB0aGFuIGp1c3QgdGhlIGRldmljZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzcyDigJMgaXMgYSBzaWduaWZpY2FudCBwb2ludGVyLiBUaGVuLCB0aGUgdXBkYXRlZCBOZXRmaWx0ZXIgZmxvdyB0YWJsZSBob29rcyB0aGF0IGxldmVyYWdlIHRoaXMgY29udGV4dCB0byBhY2N1cmF0ZWx5IGlkZW50aWZ5IGVuY2Fwc3VsYXRlZCBwcm90b2NvbHMsIGFyZSBmdXJ0aGVyIGVuaGFuY2VtZW50cy4gVGhlc2UgbW9kaWZpY2F0aW9ucyBzdWdnZXN0IHRoYXQgdGhlc2UgYXJlIGNyaXRpY2FsIGNoYW5nZXMgd2l0aGluIGJvdGggY29yZSBuZXR3b3JraW5nIGFuZCBOZXRmaWx0ZXIgc3Vic3lzdGVtcyB0aGF0IGFyZSBpbmRlZWQgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cblxuVG8gY29uZmlybSB0aGUgY29udGV4dCwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBoZXJlLiBJdCdzIGNsZWFybHkgdGllZCB0byBgTkZfVEFCTEVTYCwgYE5GX0ZMT1dfVEFCTEVgLCBhbmQgYE5GX0ZMT1dfVEFCTEVfSU5FVGAsIGBORlRfRkxPV19PRkZMT0FEYC4gQWxzbywgIGBORVRfSVBJUGAsIGBJUFY2X1RVTk5FTGAgYW5kIGBORl9DT05OVFJBQ0tgIGFyZSBsaWtlbHkgcmVsYXRlZC5cblxuSnVzdCBhIGZpbmFsIHNhbml0eSBjaGVjay4uLiBJIHNob3VsZCB2ZXJpZnkgdGhhdCBgTkZfRkxPV19UQUJMRV9JTkVUYCBpcyB0aGUgY29ycmVjdCBzY29wZS4gSXMgdGhlcmUgYW4gYE5GX0ZMT1dfVEFCTEVfSVBWNGAgb3B0aW9uLCBvciBpcyB0aGUgXCJpbmV0XCIgc2NvcGUgYnJvYWQgZW5vdWdoP1xuXG5cbiIsIklucHV0VG9rZW5zIjoyNDcyMiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjozMDoxMC44NDkwNjc1MDZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDMwMjUzNjksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9GTE9XX1RBQkxFX0lQVjRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjMwOjEyLjY5MjEwMjY1NVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTE4OTIxODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgaW5jb3JyZWN0OyBpdCBhcHBlYXJzIHRoZSBmdW5jdGlvbmFsaXR5IEkgd2FzIGxvb2tpbmcgZm9yIHdhcyBtZXJnZWQsIGxpa2VseSBpbnRvIHNvbWV0aGluZyBsaWtlIGBORl9GTE9XX1RBQkxFX0lORVRgIG9yIGEgc2ltaWxhciBzdHJ1Y3R1cmUuXG5cbk5vdywgdG8gdHJhY2sgZG93biB0aGUgcmVsZXZhbnQgY29kZS4uLiBMZXQncyBjaGVjayB0aGUgYE5FVF9JUEdSRWAgbW9kdWxlLiBEb2VzIGl0IGhhdmUgYSBgZmlsbF9mb3J3YXJkX3BhdGhgIGZ1bmN0aW9uIGRlZmluZWQ/IFRoYXQgd291bGQgYmUgYSBsb2dpY2FsIHBsYWNlIHRvIGxvb2sgZm9yIGZvcndhcmRpbmcgcGF0aCBsb2dpYywgZ2l2ZW4gdGhlIGNvbnRleHQuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU4MTUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjozMDoxNS42MTEwMjcwODNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDczMjQxOTAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbGxfZm9yd2FyZF9wYXRoLipncmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjMwOjE4LjAxODM2MjEzM1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODgwMTgyMDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIHRoZSBMYW5kc2NhcGUqKlxuXG5ObywgdGhhdCdzIG5vdCBpdC4gT2theSwgbGV0J3MgcGl2b3QuIFRoZSBzaXR1YXRpb24gc2VlbXMgZmFtaWxpYXIsIHNvIEkgbmVlZCB0byBjaGVjayBgdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGhgLiBUaGF0IGZ1bmN0aW9uLCBpbiB0aGUgY29udGV4dCBvZiBWTEFOIGRldmljZSBmb3J3YXJkaW5nLCBpcyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNydWNpYWwgbG9naWMgcmVsYXRlZCB0byBwYWNrZXQgaGFuZGxpbmcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgdmVyaWZ5IGlmIG15IGluaXRpYWwgaHVuY2ggaXMgY29ycmVjdCBieSBleGFtaW5pbmcgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uIGFuZCBndWlkZSBteSB0cm91Ymxlc2hvb3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTk2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6MzA6MjAuODk4NTQ2MTI1WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkzNTc1MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZsYW5fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC84MDIxcS92bGFuX2Rldi5jPTc1Nj1zdGF0aWMgaW50IHZsYW5fZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTc2Mi1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYzo3NjM6c3RhdGljIGludCB2bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTc2NC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoKVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM9MTA3OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZsYW5fbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTExMDktXFx0Lm5kb19nZXRfaWZsaW5rXFx0XFx0PSB2bGFuX2Rldl9nZXRfaWZsaW5rLFxcbm5ldC84MDIxcS92bGFuX2Rldi5jOjExMTA6XFx0Lm5kb19maWxsX2ZvcndhcmRfcGF0aFxcdD0gdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGgsXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTExMS1cXHQubmRvX2h3dHN0YW1wX2dldFxcdD0gdmxhbl9od3RzdGFtcF9nZXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjMwOjIyLjU5MjEyODI1OVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDU4MDQ0MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMgY29uZmlndXJhdGlvbiwgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkNvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBJJ20gbG9va2luZyBhdCB0aGlzIGxpc3Qgb2YgY29uZmlndXJhdGlvbnMsIGFuZCBpdCBsb29rcyBsaWtlIGEgZ29vZCwgYmFzaWMgc2V0LiBJJ3ZlIGdvdCBgTkZfVEFCTEVTYCBhbmQgaXRzIGFzc29jaWF0ZWQgY29tcG9uZW50cyBgTkZfRkxPV19UQUJMRWAsIGBORl9GTE9XX1RBQkxFX0lORVRgLCBhbmQgYE5GVF9GTE9XX09GRkxPQURgLiBFeGNlbGxlbnQsIHRoYXQncyB0aGUgbW9kZXJuLCBwZXJmb3JtYW50IHdheSB0byBoYW5kbGUgbmV0d29yayBmaWx0ZXJpbmcgYW5kIGZvcndhcmRpbmcuIFRoZW4gSSBzZWUgYE5FVF9JUElQYCBhbmQgYElQVjZfVFVOTkVMYCwgc3VnZ2VzdGluZyB3ZSdyZSBkZWFsaW5nIHdpdGggc29tZSB0dW5uZWxpbmcsIHdoaWNoIGlzIHNlbnNpYmxlIGluIG1hbnkgZW52aXJvbm1lbnRzLiBXZSBoYXZlIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVsZW1lbnQgd2l0aCBgTkZfQ09OTlRSQUNLYCB3aGljaCBJIHdpbGwga2VlcC5cblxuVGhlIG9uZSB0aGF0IGp1bXBzIG91dCB0byBtZSBpcyBgVkxBTl84MDIxUWAuIFZMQU4gc3VwcG9ydCBpcyBlc3NlbnRpYWwgaW4gbWFueSBlbnZpcm9ubWVudHMuIEdpdmVuIHRoZSBvdGhlciBjb25maWd1cmF0aW9ucywgaXQncyBhIGdvb2QgaWRlYSB0byBpbmNsdWRlIGl0LiBKdXN0IHRvIGJlIHNhZmUsIEknbSBnb2luZyB0byBhZGQgdGhhdCB0byBteSBzdGFuZGFyZCBjb25maWdzLCBhcyBpdCB3b24ndCBodXJ0LCBhbmQgbWF5IGluZGVlZCBtYWtlIGEgYmlnIGRpZmZlcmVuY2UgaW4gYSBtb3JlIGNvbXBsZXggc2V0dXAuXG5cbk5vdyB0aGF0IEkndmUgcmV2aWV3ZWQgdGhvc2UgY29tcG9uZW50cywgSSdtIGhhcHB5IHRvIGdvIGFoZWFkIGFuZCBcInNldC1yZXN1bHRzXCIuIEl0J3MgYSBxdWljayBjb25maWcgYW5kIEknbSBjb25maWRlbnQgYWJvdXQgdGhlc2Ugc2V0dGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NDc1LCJPdXRwdXRUb2tlbnMiOjIzOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjozMDoyNy42NTAxNzUzMDVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODIxMDA5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORl9GTE9XX1RBQkxFX0lORVRcIixcbiAgICBcIk5GVF9GTE9XX09GRkxPQURcIixcbiAgICBcIk5FVF9JUElQXCIsXG4gICAgXCJJUFY2X1RVTk5FTFwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJWTEFOXzgwMjFRXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwX2hvb2tcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2tcIixcbiAgICBcIm5mdF9mbG93X3JvdXRlXCIsXG4gICAgXCJkZXZfZmlsbF9mb3J3YXJkX3BhdGhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgb2ZmbG9hZCBwYXRoIHRvIHByb3Blcmx5IGhhbmRsZSBpbm5lciBwcm90b2NvbHMgYW5kIGV0aGVyX3R5cGUsIGVzcGVjaWFsbHkgZm9yIElQLWluLUlQIGFuZCBJUHY2IHR1bm5lbHMuIEl0IGNoYW5nZXMgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgdG8gdGFrZSBhIGNvbnRleHQgc3RydWN0IGluc3RlYWQgb2YganVzdCB0aGUgZGV2aWNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzLCBhbmQgdXBkYXRlcyB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgaG9va3MgdG8gdXNlIHRoaXMgY29udGV4dCBhbmQgY29ycmVjdGx5IGlkZW50aWZ5IGVuY2Fwc3VsYXRlZCBwcm90b2NvbHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIHN1YnN5c3RlbXMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5GX0ZMT1dfVEFCTEVfSU5FVFwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiTkVUX0lQSVBcIixcbiAgICBcIklQVjZfVFVOTkVMXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIlZMQU5fODAyMVFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9mbG93X29mZmxvYWRfaXBfaG9va1wiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2lwdjZfaG9va1wiLFxuICAgIFwibmZ0X2Zsb3dfcm91dGVcIixcbiAgICBcImRldl9maWxsX2ZvcndhcmRfcGF0aFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBvZmZsb2FkIHBhdGggdG8gcHJvcGVybHkgaGFuZGxlIGlubmVyIHByb3RvY29scyBhbmQgZXRoZXJfdHlwZSwgZXNwZWNpYWxseSBmb3IgSVAtaW4tSVAgYW5kIElQdjYgdHVubmVscy4gSXQgY2hhbmdlcyBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCB0byB0YWtlIGEgY29udGV4dCBzdHJ1Y3QgaW5zdGVhZCBvZiBqdXN0IHRoZSBkZXZpY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3MsIGFuZCB1cGRhdGVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBob29rcyB0byB1c2UgdGhpcyBjb250ZXh0IGFuZCBjb3JyZWN0bHkgaWRlbnRpZnkgZW5jYXBzdWxhdGVkIHByb3RvY29scy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlgg9[1] Phase: Succeeded StartedAt: 2026-08-07 02:30:39 +0000 UTC FinishedAt: 2026-08-07 02:30:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlgg9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 02:30:39 +0000 UTC FinishedAt: 2026-08-07 02:30:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlgg9[2] Phase: Running StartedAt: 2026-08-07 02:30:39 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlgg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_flow_route","dev_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"ec3678cf-46a4-4bdc-b7da-de91ba101ff5","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-08-07 02:30:39 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_flow_route","dev_fill_forward_path"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"ec3678cf-46a4-4bdc-b7da-de91ba101ff5","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhlgg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_flow_route","dev_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"ec3678cf-46a4-4bdc-b7da-de91ba101ff5","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-07 02:30:39 +0000 UTC FinishedAt: 2026-08-07 02:30:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlgg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_flow_route","dev_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"ec3678cf-46a4-4bdc-b7da-de91ba101ff5","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-07 02:30:39 +0000 UTC FinishedAt: 2026-08-07 02:30:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhlgg9/series-workflowhlgg9-convert-artifact-1739594972/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlgg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_flow_route","dev_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"ec3678cf-46a4-4bdc-b7da-de91ba101ff5","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-07 02:30:49 +0000 UTC FinishedAt: 2026-08-07 02:50:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlgg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_flow_route","dev_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"ec3678cf-46a4-4bdc-b7da-de91ba101ff5","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-07 02:30:49 +0000 UTC FinishedAt: 2026-08-07 02:50:49 +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:*2ef97cb0-135f-4712-8ffc-28a26295e487,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-workflowhlgg9/series-workflowhlgg9-convert-artifact-1739594972/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": "8bedce00-553a-4ea2-ac9c-af9aff763839", "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-workflowhlgg9/series-workflowhlgg9-build-action-3061993482/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlgg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_flow_route","dev_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"ec3678cf-46a4-4bdc-b7da-de91ba101ff5","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-07 02:30:49 +0000 UTC FinishedAt: 2026-08-07 02:50:39 +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:*2ef97cb0-135f-4712-8ffc-28a26295e487,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-workflowhlgg9/series-workflowhlgg9-convert-artifact-1739594972/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": "8bedce00-553a-4ea2-ac9c-af9aff763839", "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-workflowhlgg9/series-workflowhlgg9-build-action-3061993482/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlgg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_flow_route","dev_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"ec3678cf-46a4-4bdc-b7da-de91ba101ff5","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-07 02:50:49 +0000 UTC FinishedAt: 2026-08-07 02:50:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlgg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_flow_route","dev_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"ec3678cf-46a4-4bdc-b7da-de91ba101ff5","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-07 02:50:49 +0000 UTC FinishedAt: 2026-08-07 02:50:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlgg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_flow_route","dev_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"ec3678cf-46a4-4bdc-b7da-de91ba101ff5","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-07 02:50:49 +0000 UTC FinishedAt: 2026-08-07 02:50:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlgg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_flow_route","dev_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"ec3678cf-46a4-4bdc-b7da-de91ba101ff5","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-07 02:50:49 +0000 UTC FinishedAt: 2026-08-07 02:50:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"ec3678cf-46a4-4bdc-b7da-de91ba101ff5","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhlgg9/series-workflowhlgg9-convert-artifact-3401559323/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlgg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_flow_route","dev_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"ec3678cf-46a4-4bdc-b7da-de91ba101ff5","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-07 02:50:59 +0000 UTC FinishedAt: 2026-08-07 02:52:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlgg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_flow_route","dev_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"ec3678cf-46a4-4bdc-b7da-de91ba101ff5","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-07 02:50:59 +0000 UTC FinishedAt: 2026-08-07 02:52:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8bedce00-553a-4ea2-ac9c-af9aff763839,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-workflowhlgg9/series-workflowhlgg9-build-action-3061993482/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-workflowhlgg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_flow_route","dev_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"ec3678cf-46a4-4bdc-b7da-de91ba101ff5","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-07 02:52:41 +0000 UTC FinishedAt: 2026-08-07 02:52:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlgg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_flow_route","dev_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"ec3678cf-46a4-4bdc-b7da-de91ba101ff5","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-07 02:52:41 +0000 UTC FinishedAt: 2026-08-07 02:52:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlgg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_flow_route","dev_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"ec3678cf-46a4-4bdc-b7da-de91ba101ff5","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-07 02:52:41 +0000 UTC FinishedAt: 2026-08-07 03:08:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlgg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_flow_route","dev_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"ec3678cf-46a4-4bdc-b7da-de91ba101ff5","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-07 02:52:41 +0000 UTC FinishedAt: 2026-08-07 03:08:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*2ef97cb0-135f-4712-8ffc-28a26295e487,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-workflowhlgg9/series-workflowhlgg9-convert-artifact-3401559323/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": "c12da028-09f8-46a7-a8f4-c7327f6a629f", "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-workflowhlgg9/series-workflowhlgg9-build-action-755964095/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlgg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_flow_route","dev_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"ec3678cf-46a4-4bdc-b7da-de91ba101ff5","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-07 02:52:41 +0000 UTC FinishedAt: 2026-08-07 03:08:31 +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:*2ef97cb0-135f-4712-8ffc-28a26295e487,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-workflowhlgg9/series-workflowhlgg9-convert-artifact-3401559323/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": "c12da028-09f8-46a7-a8f4-c7327f6a629f", "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-workflowhlgg9/series-workflowhlgg9-build-action-755964095/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhlgg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_flow_route","dev_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"ec3678cf-46a4-4bdc-b7da-de91ba101ff5","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-07 03:08:41 +0000 UTC FinishedAt: 2026-08-07 03:08:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlgg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_flow_route","dev_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"ec3678cf-46a4-4bdc-b7da-de91ba101ff5","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-07 03:08:41 +0000 UTC FinishedAt: 2026-08-07 03:08:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlgg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_flow_route","dev_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"ec3678cf-46a4-4bdc-b7da-de91ba101ff5","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8] Phase: Running StartedAt: 2026-08-07 03:08:41 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhlgg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_offload_ip_hook","nf_flow_offload_ipv6_hook","nft_flow_route","dev_fill_forward_path"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bf80e6802273a900311b44e47c9b1a59c6d2473c","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_FLOW_TABLE","NF_FLOW_TABLE_INET","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NF_CONNTRACK","VLAN_8021Q"],"series_id":"ec3678cf-46a4-4bdc-b7da-de91ba101ff5","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Pending StartedAt: 2026-08-07 03:08:41 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*c12da028-09f8-46a7-a8f4-c7327f6a629f,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-workflowhlgg9/series-workflowhlgg9-build-action-755964095/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil