Name: series-workflow4qsnz Phase: Succeeded StartedAt: 2026-09-14 08:10:59 +0000 UTC FinishedAt: 2026-09-14 12:52:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4qsnz[0] Phase: Succeeded StartedAt: 2026-09-14 08:10:59 +0000 UTC FinishedAt: 2026-09-14 09:04:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4qsnz[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 08:10:59 +0000 UTC FinishedAt: 2026-09-14 09:04:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_HFSC", "NET_CLS_ACT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_HFSC", "NET_CLS_ACT" ], "series_id": "421245ff-cc03-423c-b2ba-49620dc0277d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "hfsc_classify", "hfsc_enqueue", "hfsc_bind_tcf" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0hGU0MmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNjX2NsYXNzaWZ5JiMzNDssCiAgICAmIzM0O2hmc2NfZW5xdWV1ZSYjMzQ7LAogICAgJiMzNDtoZnNjX2JpbmRfdGNmJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGhmc2NfY2xhc3NpZnlgIGluIGBuZXQvc2NoZWQvc2NoX2hmc2MuY2AgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcyBjYXVzZWQgYnkgbGF0ZXJhbCBvciB1cHdhcmQgY2xhc3NpZmljYXRpb24gaG9wcyBieSBpbnRyb2R1Y2luZyBhIGxvb3AgY291bnRlciAoYGRyaWZ0YCkuIFRoZSBgZHJpZnRgIGxvY2FsIHZhcmlhYmxlIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYEhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUYCAoOCkgYmVmb3JlIHRoZSBjbGFzc2lmaWNhdGlvbiBsb29wLCBhbmQgYWxsIGNvbXBhcmVkIGZpZWxkcyAoYGNsLVx1MDAzZWxldmVsYCwgYGhlYWQtXHUwMDNlbGV2ZWxgKSBhcmUgZXhpc3RpbmcgaW5pdGlhbGl6ZWQgY2xhc3MgYXR0cmlidXRlcy5cblxuTm8ga2VybmVsLXRvLXVzZXIgZGF0YSB0cmFuc2ZlcnMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYnVmZmVyIHNpemUvb2Zmc2V0IGNhbGN1bGF0aW9ucyBhcmUgbW9kaWZpZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbWVhbmluZyBpdCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaGZzY19jbGFzc2lmeSBpbiBuZXQvc2NoZWQvc2NoX2hmc2MuYyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIGR1cmluZyBwYWNrZXQgY2xhc3NpZmljYXRpb24gd2hlbiBmaWx0ZXIgY2xhc3MgYmluZGluZ3MgZXhwZXJpZW5jZSBsYXRlcmFsIG9yIHVwd2FyZCBsZXZlbCBkcmlmdCBmb2xsb3dpbmcgY2xhc3MgaGllcmFyY2h5IHVwZGF0ZXMuIFRoZSBjb2RlIGlzIHBhcnQgb2YgdGhlIGNvcmUgdHJhZmZpYyBjb250cm9sIHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgcnRuZXRsaW5rIChjb25maWd1cmluZyBIRlNDIHFkaXNjcywgY2xhc3NlcywgYW5kIGZpbHRlcnMpIGFuZCBzZW5kaW5nIG5ldHdvcmsgdHJhZmZpYy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBlZGdlIGNhc2VzIGluIGNsYXNzIGhpZXJhcmNoeSBtYW5pcHVsYXRpb24sIGZpbHRlciBiaW5kaW5nLCBhbmQgY2xhc3NpZnkgbG9vcCBib3VuZGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGVmYzMwNzQ4YTE3NWE1NmNhOTYzY2YxNmRlYzc1MmNhZTEwNGI0ZDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAwOTowMDoxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hmc2MuYyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jXG5pbmRleCBlODdmNTAyMWExOTk1Li5iMDczZWZhZjJiZjVmIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9oZnNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jXG5AQCAtMzg2LDYgJiM0MzszODYsMTIgQEAgY2Z0cmVlX3VwZGF0ZShzdHJ1Y3QgaGZzY19jbGFzcyAqY2wpXG4gI2RlZmluZVx0U01fTUFTS1x0XHQoKDFVTEwgXHUwMDNjXHUwMDNjIFNNX1NISUZUKSAtIDEpXG4gI2RlZmluZVx0SVNNX01BU0tcdCgoMVVMTCBcdTAwM2NcdTAwM2MgSVNNX1NISUZUKSAtIDEpXG4gXG4mIzQzOy8qXG4mIzQzOyAqIGJvdW5kIG9uIGNvbnNlY3V0aXZlIG5vbi1kZXNjZW5kaW5nIChsYXRlcmFsIC8gdXB3YXJkKSBob3BzIGluIGFcbiYjNDM7ICogY2xhc3NpZnkgd2FsaywgbWlycm9yaW5nIGh0YiYjMzk7cyBUQ19IVEJfTUFYREVQVEggaGVhZHJvb21cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmVcdEhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUXHQ4XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdTY0XG4gc2VnX3gyeSh1NjQgeCwgdTY0IHNtKVxuIHtcbkBAIC0xMTMzLDYgJiM0MzsxMTM5LDcgQEAgaGZzY19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKVxuIFx0c3RydWN0IGhmc2NfY2xhc3MgKmhlYWQsICpjbDtcbiBcdHN0cnVjdCB0Y2ZfcmVzdWx0IHJlcztcbiBcdHN0cnVjdCB0Y2ZfcHJvdG8gKnRjZjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZHJpZnQ7XG4gXHRpbnQgcmVzdWx0O1xuIFxuIFx0aWYgKFRDX0hfTUFKKHNrYi1cdTAwM2Vwcmlvcml0eSBeIHNjaC1cdTAwM2VoYW5kbGUpID09IDAgXHUwMDI2XHUwMDI2XG5AQCAtMTE0Miw2ICYjNDM7MTE0OSw3IEBAIGhmc2NfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsIGludCAqcWVycilcbiBcbiBcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xuIFx0aGVhZCA9IFx1MDAyNnEtXHUwMDNlcm9vdDtcbiYjNDM7XHRkcmlmdCA9IEhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUO1xuIFx0dGNmID0gcmN1X2RlcmVmZXJlbmNlX2JoKHEtXHUwMDNlcm9vdC5maWx0ZXJfbGlzdCk7XG4gXHR3aGlsZSAodGNmIFx1MDAyNlx1MDAyNiAocmVzdWx0ID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgdGNmLCBcdTAwMjZyZXMsIGZhbHNlKSkgXHUwMDNlPSAwKSB7XG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxuQEAgLTExNjcsNiAmIzQzOzExNzUsMTYgQEAgaGZzY19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKVxuIFx0XHRpZiAoY2wtXHUwMDNlbGV2ZWwgPT0gMClcbiBcdFx0XHRyZXR1cm4gY2w7IC8qIGhpdCBsZWFmIGNsYXNzICovXG4gXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogZmxvd2lkIGJpbmRzIHNraXAgdGhlIGxldmVsIGNoZWNrIGFib3ZlIChyZXMuY2xhc3MgaXMgc2V0XG4mIzQzO1x0XHQgKiBhdCBiaW5kIHRpbWUgYW5kIGxldmVscyBkcmlmdCBhZnRlciksIHNvIGEgd2FsayBjYW4gZm9sbG93XG4mIzQzO1x0XHQgKiBsYXRlcmFsIGhvcHMgd2l0aG91dCBkZXNjZW5kaW5nOyBib3VuZCB0aGVtIGhlcmUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChjbC1cdTAwM2VsZXZlbCBcdTAwM2U9IGhlYWQtXHUwMDNlbGV2ZWwgXHUwMDI2XHUwMDI2IGRyaWZ0LS0gPT0gMCkge1xuJiM0MztcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O2hmc2M6IGNsYXNzaWZ5IGxvb3AgZGV0ZWN0ZWQsIGRyb3BwaW5nIHBhY2tldFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0LyogYXBwbHkgaW5uZXIgZmlsdGVyIGNoYWluICovXG4gXHRcdHRjZiA9IHJjdV9kZXJlZmVyZW5jZV9iaChjbC1cdTAwM2VmaWx0ZXJfbGlzdCk7XG4gXHRcdGhlYWQgPSBjbDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9oZnNjLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9oZnNjLmpzb25cbmluZGV4IGM5OGMzMzk0MjRkNGUuLjgyZDJmOGFmMTQ2MGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9oZnNjLmpzb25cbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2hmc2MuanNvblxuQEAgLTE2OSw1ICYjNDM7MTY5LDM5IEBAXG4gICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1xuICAgICAgICAgICAgIFwmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwmIzM0O1xuICAgICAgICAgXVxuJiM0MzsgICAgfSxcbiYjNDM7ICAgIHtcbiYjNDM7ICAgICAgICBcJiMzNDtpZFwmIzM0OzogXCYjMzQ7OGMzOVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtuYW1lXCYjMzQ7OiBcJiMzNDtIRlNDIGNsYXNzaWZ5IHdhbGsgc3RpbGwgcmVhY2hlcyBsZWFmIGFmdGVyIGxhdGVyYWwgZHJpZnRcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7Y2F0ZWdvcnlcJiMzNDs6IFtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cWRpc2NcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2hmc2NcJiMzNDtcbiYjNDM7ICAgICAgICBdLFxuJiM0MzsgICAgICAgIFwmIzM0O3BsdWdpbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cmVxdWlyZXNcJiMzNDs6IFwmIzM0O25zUGx1Z2luXCYjMzQ7XG4mIzQzOyAgICAgICAgfSxcbiYjNDM7ICAgICAgICBcJiMzNDtzZXR1cFwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtpcCBsaW5rIHNldCBsbyB1cFwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgbG8gaGFuZGxlIDE6IHJvb3QgaGZzYyBkZWZhdWx0IDMxXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMTogY2xhc3NpZCAxOjEgaGZzYyBydCBtMiAxMDBrYml0XCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMTogY2xhc3NpZCAxOjIgaGZzYyBydCBtMiAxMDBrYml0XCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMTogY2xhc3NpZCAxOjMgaGZzYyBydCBtMiAxMDBrYml0XCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMToxIGNsYXNzaWQgMToxMCBoZnNjIHJ0IG0yIDUwa2JpdFwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6MiBjbGFzc2lkIDE6MjAgaGZzYyBydCBtMiAxMGtiaXRcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0OyRUQyBjbGFzcyBhZGQgZGV2IGxvIHBhcmVudCAxOjMgY2xhc3NpZCAxOjMwIGhmc2MgcnQgbTIgMTBrYml0XCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMTozIGNsYXNzaWQgMTozMSBoZnNjIHJ0IG0yIDEwMGtiaXRcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiBsbyBwYXJlbnQgMTogcHJvdG9jb2wgaXAgcHJpbyAxIHUzMiBtYXRjaCB1OCAwIDAgYXQgMCBmbG93aWQgMToxXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgbG8gcGFyZW50IDE6MSBwcm90b2NvbCBpcCBwcmlvIDEgdTMyIG1hdGNoIHU4IDAgMCBhdCAwIGZsb3dpZCAxOjJcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiBsbyBwYXJlbnQgMToyIHByb3RvY29sIGlwIHByaW8gMSB1MzIgbWF0Y2ggdTggMCAwIGF0IDAgZmxvd2lkIDE6M1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIGZpbHRlciBhZGQgZGV2IGxvIHBhcmVudCAxOjMgcHJvdG9jb2wgaXAgcHJpbyAxIHUzMiBtYXRjaCB1OCAwIDAgYXQgMCBmbG93aWQgMTozMVwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7Y21kVW5kZXJUZXN0XCYjMzQ7OiBcJiMzNDtwaW5nIC1uIC1jIDEwIC1XIDEgMTI3LjAuMC4xOyBzbGVlcCAxXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2V4cEV4aXRDb2RlXCYjMzQ7OiBcJiMzNDswXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O3ZlcmlmeUNtZFwmIzM0OzogXCYjMzQ7JFRDIC1zIGNsYXNzIHNob3cgZGV2IGxvXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoUGF0dGVyblwmIzM0OzogXCYjMzQ7Y2xhc3MgaGZzYyAxOjMxIHBhcmVudCAxOjMgcnQuKlxcXFxuLipTZW50IFswLTldJiM0MzsgYnl0ZXMgWzEtOV1bMC05XSogcGt0XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoQ291bnRcJiMzNDs6IFwmIzM0OzFcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7dGVhcmRvd25cJiMzNDs6IFtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgbG8gaGFuZGxlIDE6IHJvb3RcJiMzNDtcbiYjNDM7ICAgICAgICBdXG4gICAgIH1cbiBdXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfSEZTQyYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hmc2NfY2xhc3NpZnkmIzM0OywKICAgICYjMzQ7aGZzY19lbnF1ZXVlJiMzNDssCiAgICAmIzM0O2hmc2NfYmluZF90Y2YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaGZzY19jbGFzc2lmeSBpbiBuZXQvc2NoZWQvc2NoX2hmc2MuYyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIGR1cmluZyBwYWNrZXQgY2xhc3NpZmljYXRpb24gd2hlbiBmaWx0ZXIgY2xhc3MgYmluZGluZ3MgZXhwZXJpZW5jZSBsYXRlcmFsIG9yIHVwd2FyZCBsZXZlbCBkcmlmdCBmb2xsb3dpbmcgY2xhc3MgaGllcmFyY2h5IHVwZGF0ZXMuIFRoZSBjb2RlIGlzIHBhcnQgb2YgdGhlIGNvcmUgdHJhZmZpYyBjb250cm9sIHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgcnRuZXRsaW5rIChjb25maWd1cmluZyBIRlNDIHFkaXNjcywgY2xhc3NlcywgYW5kIGZpbHRlcnMpIGFuZCBzZW5kaW5nIG5ldHdvcmsgdHJhZmZpYy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBlZGdlIGNhc2VzIGluIGNsYXNzIGhpZXJhcmNoeSBtYW5pcHVsYXRpb24sIGZpbHRlciBiaW5kaW5nLCBhbmQgY2xhc3NpZnkgbG9vcCBib3VuZGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVmYzMwNzQ4YTE3NWE1NmNhOTYzY2YxNmRlYzc1MmNhZTEwNGI0ZDUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAwOTowMDoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaGZzYy5jIGIvbmV0L3NjaGVkL3NjaF9oZnNjLmMKaW5kZXggZTg3ZjUwMjFhMTk5NS4uYjA3M2VmYWYyYmY1ZiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9oZnNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9oZnNjLmMKQEAgLTM4Niw2ICYjNDM7Mzg2LDEyIEBAIGNmdHJlZV91cGRhdGUoc3RydWN0IGhmc2NfY2xhc3MgKmNsKQogI2RlZmluZQlTTV9NQVNLCQkoKDFVTEwgJmx0OyZsdDsgU01fU0hJRlQpIC0gMSkKICNkZWZpbmUJSVNNX01BU0sJKCgxVUxMICZsdDsmbHQ7IElTTV9TSElGVCkgLSAxKQogCiYjNDM7LyoKJiM0MzsgKiBib3VuZCBvbiBjb25zZWN1dGl2ZSBub24tZGVzY2VuZGluZyAobGF0ZXJhbCAvIHVwd2FyZCkgaG9wcyBpbiBhCiYjNDM7ICogY2xhc3NpZnkgd2FsaywgbWlycm9yaW5nIGh0YiYjMzk7cyBUQ19IVEJfTUFYREVQVEggaGVhZHJvb20KJiM0MzsgKi8KJiM0MzsjZGVmaW5lCUhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUCTgKJiM0MzsKIHN0YXRpYyBpbmxpbmUgdTY0CiBzZWdfeDJ5KHU2NCB4LCB1NjQgc20pCiB7CkBAIC0xMTMzLDYgJiM0MzsxMTM5LDcgQEAgaGZzY19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKQogCXN0cnVjdCBoZnNjX2NsYXNzICpoZWFkLCAqY2w7CiAJc3RydWN0IHRjZl9yZXN1bHQgcmVzOwogCXN0cnVjdCB0Y2ZfcHJvdG8gKnRjZjsKJiM0MzsJdW5zaWduZWQgaW50IGRyaWZ0OwogCWludCByZXN1bHQ7CiAKIAlpZiAoVENfSF9NQUooc2tiLSZndDtwcmlvcml0eSBeIHNjaC0mZ3Q7aGFuZGxlKSA9PSAwICZhbXA7JmFtcDsKQEAgLTExNDIsNiAmIzQzOzExNDksNyBAQCBoZnNjX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgKnFlcnIpCiAKIAkqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUzsKIAloZWFkID0gJmFtcDtxLSZndDtyb290OwomIzQzOwlkcmlmdCA9IEhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUOwogCXRjZiA9IHJjdV9kZXJlZmVyZW5jZV9iaChxLSZndDtyb290LmZpbHRlcl9saXN0KTsKIAl3aGlsZSAodGNmICZhbXA7JmFtcDsgKHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIHRjZiwgJmFtcDtyZXMsIGZhbHNlKSkgJmd0Oz0gMCkgewogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVApAQCAtMTE2Nyw2ICYjNDM7MTE3NSwxNiBAQCBoZnNjX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgKnFlcnIpCiAJCWlmIChjbC0mZ3Q7bGV2ZWwgPT0gMCkKIAkJCXJldHVybiBjbDsgLyogaGl0IGxlYWYgY2xhc3MgKi8KIAomIzQzOwkJLyoKJiM0MzsJCSAqIGZsb3dpZCBiaW5kcyBza2lwIHRoZSBsZXZlbCBjaGVjayBhYm92ZSAocmVzLmNsYXNzIGlzIHNldAomIzQzOwkJICogYXQgYmluZCB0aW1lIGFuZCBsZXZlbHMgZHJpZnQgYWZ0ZXIpLCBzbyBhIHdhbGsgY2FuIGZvbGxvdwomIzQzOwkJICogbGF0ZXJhbCBob3BzIHdpdGhvdXQgZGVzY2VuZGluZzsgYm91bmQgdGhlbSBoZXJlLgomIzQzOwkJICovCiYjNDM7CQlpZiAoY2wtJmd0O2xldmVsICZndDs9IGhlYWQtJmd0O2xldmVsICZhbXA7JmFtcDsgZHJpZnQtLSA9PSAwKSB7CiYjNDM7CQkJcHJfd2Fybl9yYXRlbGltaXRlZCgmIzM0O2hmc2M6IGNsYXNzaWZ5IGxvb3AgZGV0ZWN0ZWQsIGRyb3BwaW5nIHBhY2tldFxuJiMzNDspOwomIzQzOwkJCXJldHVybiBOVUxMOwomIzQzOwkJfQomIzQzOwogCQkvKiBhcHBseSBpbm5lciBmaWx0ZXIgY2hhaW4gKi8KIAkJdGNmID0gcmN1X2RlcmVmZXJlbmNlX2JoKGNsLSZndDtmaWx0ZXJfbGlzdCk7CiAJCWhlYWQgPSBjbDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2hmc2MuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2hmc2MuanNvbgppbmRleCBjOThjMzM5NDI0ZDRlLi44MmQyZjhhZjE0NjBkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9oZnNjLmpzb24KJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvaGZzYy5qc29uCkBAIC0xNjksNSAmIzQzOzE2OSwzOSBAQAogICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsKICAgICAgICAgICAgICYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290JiMzNDsKICAgICAgICAgXQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7OGMzOSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7SEZTQyBjbGFzc2lmeSB3YWxrIHN0aWxsIHJlYWNoZXMgbGVhZiBhZnRlciBsYXRlcmFsIGRyaWZ0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtoZnNjJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtpcCBsaW5rIHNldCBsbyB1cCYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgbG8gaGFuZGxlIDE6IHJvb3QgaGZzYyBkZWZhdWx0IDMxJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMTogY2xhc3NpZCAxOjEgaGZzYyBydCBtMiAxMDBrYml0JiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMTogY2xhc3NpZCAxOjIgaGZzYyBydCBtMiAxMDBrYml0JiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMTogY2xhc3NpZCAxOjMgaGZzYyBydCBtMiAxMDBrYml0JiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMToxIGNsYXNzaWQgMToxMCBoZnNjIHJ0IG0yIDUwa2JpdCYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6MiBjbGFzc2lkIDE6MjAgaGZzYyBydCBtMiAxMGtiaXQmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBjbGFzcyBhZGQgZGV2IGxvIHBhcmVudCAxOjMgY2xhc3NpZCAxOjMwIGhmc2MgcnQgbTIgMTBrYml0JiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMTozIGNsYXNzaWQgMTozMSBoZnNjIHJ0IG0yIDEwMGtiaXQmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiBsbyBwYXJlbnQgMTogcHJvdG9jb2wgaXAgcHJpbyAxIHUzMiBtYXRjaCB1OCAwIDAgYXQgMCBmbG93aWQgMToxJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgbG8gcGFyZW50IDE6MSBwcm90b2NvbCBpcCBwcmlvIDEgdTMyIG1hdGNoIHU4IDAgMCBhdCAwIGZsb3dpZCAxOjImIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiBsbyBwYXJlbnQgMToyIHByb3RvY29sIGlwIHByaW8gMSB1MzIgbWF0Y2ggdTggMCAwIGF0IDAgZmxvd2lkIDE6MyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGZpbHRlciBhZGQgZGV2IGxvIHBhcmVudCAxOjMgcHJvdG9jb2wgaXAgcHJpbyAxIHUzMiBtYXRjaCB1OCAwIDAgYXQgMCBmbG93aWQgMTozMSYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDtwaW5nIC1uIC1jIDEwIC1XIDEgMTI3LjAuMC4xOyBzbGVlcCAxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgLXMgY2xhc3Mgc2hvdyBkZXYgbG8mIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7Y2xhc3MgaGZzYyAxOjMxIHBhcmVudCAxOjMgcnQuKlxcbi4qU2VudCBbMC05XSYjNDM7IGJ5dGVzIFsxLTldWzAtOV0qIHBrdCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgcWRpc2MgZGVsIGRldiBsbyBoYW5kbGUgMTogcm9vdCYjMzQ7CiYjNDM7ICAgICAgICBdCiAgICAgfQogXQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjYxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSEZTQyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIFRoZSBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIHNvIHRoYXQmIzM5O3MgdGhlIGNvbnRleHQuIFRoZSBkaWZmIGFmZmVjdHMgYG5ldC9zY2hlZC9zY2hfaGZzYy5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2hmc2MuanNvbmAuIFNvdW5kcyBsaWtlIGEgZml4IGFuZCBzb21lIGFzc29jaWF0ZWQgdGVzdGluZy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQuCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSBpcyB3aXRoaW4gYGhmc2NfY2xhc3NpZnlgIGluIGBzY2hfaGZzYy5jYC4gVGhleSYjMzk7cmUgaW50cm9kdWNpbmcgYSBgSEZTQ19DTEFTU0lGWV9NQVhfRFJJRlRgIGxpbWl0IHdpdGggYSB2YWx1ZSBvZiA4LiBUaGlzIGlzIGludGVyZXN0aW5nLiBGcm9tIHRoZSBjb2RlLCBpdCBzZWVtcyB0aGV5JiMzOTtyZSBhZGRpbmcgYSBjaGVjayBmb3IgcG90ZW50aWFsIGNsYXNzaWZpY2F0aW9uIGxvb3BzLCBwYXJ0aWN1bGFybHkgd2hlbiBmbG93IElEcyBhcmUgaW52b2x2ZWQuIEVzc2VudGlhbGx5LCB0aGV5IGFyZSBwcmV2ZW50aW5nIHBvdGVudGlhbCBpbmZpbml0ZSBsb29wcyBieSBkZWNyZW1lbnRpbmcgdGhlIGBkcmlmdGAgdmFyaWFibGUgd2hlbiB0aGUgYGxldmVsYCBvZiB0aGUgY3VycmVudCBjbGFzcyAoYGNsYCkgaXMgZ3JlYXRlciBvciBlcXVhbCB0byB0aGUgYGxldmVsYCBvZiB0aGUgaGVhZCBjbGFzcyAoYGhlYWRgKS4gSWYgYGRyaWZ0YCByZWFjaGVzIHplcm8sIGl0IGluZGljYXRlcyBhIGNsYXNzaWZpY2F0aW9uIGxvb3AgYW5kIHRoZSBwYWNrZXQgZ2V0cyBkcm9wcGVkLiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBzYWZlZ3VhcmQuIFRoZSBgcHJfd2Fybl9yYXRlbGltaXRlZGAgc3VnZ2VzdHMgdGhleSB3YW50IHRvIGF2b2lkIGZsb29kaW5nIHRoZSBsb2dzLgoKTm93LCBJJiMzOTtkIGxpa2UgdG8gcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyByZXF1aXJlbWVudCBmb3IgdGhlIGluY2x1c2lvbiBvZiBgc2NoX2hmc2MuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcHJlcmVxdWlzaXRlcyBvciBkZXBlbmRlbmNpZXMgdGhhdCB0aGlzIGNoYW5nZSBtaWdodCBiZSBpbXBhY3RpbmcuIFVzaW5nIGdyZXBwZXIgc2hvdWxkIGJlIHRoZSBxdWlja2VzdCB3YXkgdG8gZmluZCB0aGF0LiBJJiMzOTtsbCBzZWFyY2ggYG5ldC9zY2hlZC9LY29uZmlnYCB0byBnZXQgdGhhdCBpbmZvcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfU0NIX0hGU0MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9NDg9Y29uZmlnIE5FVF9TQ0hfSFRCXG4tLVxubmV0L3NjaGVkL0tjb25maWctNjEtXG5uZXQvc2NoZWQvS2NvbmZpZzo2Mjpjb25maWcgTkVUX1NDSF9IRlNDXG5uZXQvc2NoZWQvS2NvbmZpZy02My1cdHRyaXN0YXRlIFwmIzM0O0hpZXJhcmNoaWNhbCBGYWlyIFNlcnZpY2UgQ3VydmUgKEhGU0MpXCYjMzQ7XG4tLVxubmV0L3NjaGVkL01ha2VmaWxlPTM1PW9iai0kKENPTkZJR19ORVRfU0NIX0hUQilcdCYjNDM7PSBzY2hfaHRiLm9cbm5ldC9zY2hlZC9NYWtlZmlsZTozNjpvYmotJChDT05GSUdfTkVUX1NDSF9IRlNDKVx0JiM0Mzs9IHNjaF9oZnNjLm9cbm5ldC9zY2hlZC9NYWtlZmlsZS0zNy1vYmotJChDT05GSUdfTkVUX1NDSF9SRUQpXHQmIzQzOz0gc2NoX3JlZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTExNQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzLCB0YXJnZXRpbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEtjb25maWcgQ29udGV4dCoqCgpPa2F5LCBsZXQmIzM5O3Mgem9vbSBpbi4gTGluZSA2MiBvZiBgbmV0L3NjaGVkL0tjb25maWdgLi4uIHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGdyYXNwIHRoZSBpbnRlbnQgb2YgdGhlIGF1dGhvciBhbmQgdGhlIGltcGxpY2F0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNjYW4gYWJvdXQgMTAtMjAgbGluZXMgb24gZWl0aGVyIHNpZGUuIEkmIzM5O20gbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiB0aGUgc2VjdGlvbi4gV2hhdCYjMzk7cyBiZWluZyBlbmFibGVkIG9yIGRpc2FibGVkIGluIHRoZSBjb250ZXh0IG9mIHRoaXMgbGluZT8gSXMgaXQgcmVsYXRlZCB0byBhIHNwZWNpZmljIHF1ZXVlaW5nIGRpc2NpcGxpbmUsIGEgcGFydGljdWxhciBmZWF0dXJlLCBvciBtYXliZSBzb21lIGRlYnVnZ2luZyBvcHRpb24/IEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gcHJvdmlkZSB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24uIFRoaXMgd2lsbCBoZWxwIGluZm9ybSB3aGV0aGVyIHRoaXMgc2VjdGlvbiBpcyBrZXkgdG8gdGhlIG92ZXJhbGwgZnJhbWV3b3JrIG9yIHBvc3NpYmx5IGFuY2lsbGFyeSB0byBtb3JlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gSSYjMzk7bGwgbWVudGFsbHkgbWFwIG91dCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBsaW5lcyBhcm91bmQgNjIsIGFuZCB0aGVuIGNpcmNsZSBiYWNrIHRvIGFuYWx5emUgbGluZSA2MiBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTg6XHRcbiAgNTk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICA2MDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX2h0Yi5cbiAgNjE6XHRcbiAgNjI6XHRjb25maWcgTkVUX1NDSF9IRlNDXG4gIDYzOlx0XHR0cmlzdGF0ZSBcJiMzNDtIaWVyYXJjaGljYWwgRmFpciBTZXJ2aWNlIEN1cnZlIChIRlNDKVwmIzM0O1xuICA2NDpcdFx0aGVscFxuICA2NTpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgSGllcmFyY2hpY2FsIEZhaXIgU2VydmljZSBDdXJ2ZVxuICA2NjpcdFx0ICAoSEZTQykgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxuICA2NzpcdFxuICA2ODpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gIDY5Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzY2hfaGZzYy5cbiAgNzA6XHRcbiAgNzE6XHRjb25maWcgTkVUX1NDSF9QUklPXG4gIDcyOlx0XHR0cmlzdGF0ZSBcJiMzNDtNdWx0aSBCYW5kIFByaW9yaXR5IFF1ZXVlaW5nIChQUklPKVwmIzM0O1xuICA3MzpcdFx0aGVscFxuICA3NDpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhbiBuLWJhbmQgcHJpb3JpdHkgcXVldWUgcGFja2V0XG4gIDc1Olx0XHQgIHNjaGVkdWxlci5cbiAgNzY6XHRcbiAgNzc6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NjMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipOYXZpZ2F0aW5nIHRoZSBIRlNDIEtjb25maWcgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYE5FVF9TQ0hfSEZTQ2AuIFRpbWUgdG8gZGlnIGludG8gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBhc3N1bWluZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBkZWZpbml0aW9uIGFuZCBhbnkgY29uc3RyYWludHMgb24gdGhhdCBzY2hlZHVsZXIgd2lsbCBiZS4gSSBuZWVkIHRvIHNlZSBpZiBpdCYjMzk7cyBkZXBlbmRlbnQgb24gYW55IG90aGVyIGZlYXR1cmVzIG9yIGtlcm5lbCBvcHRpb25zLiBBcmUgdGhlcmUgYW55IHBhcmVudCBkZXBlbmRlbmNpZXMsIG9yIHBlcmhhcHMgY2hpbGQgZGVwZW5kZW5jaWVzPyBXaGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG11c3QgYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBmb3IgYE5FVF9TQ0hfSEZTQ2AgdG8gd29yayBjb3JyZWN0bHksIG9yIGV2ZW4gdG8gYmUgYXZhaWxhYmxlIGF0IGFsbD8gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHBsYWNlIGluIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgc2NoZWR1bGVyIGVjb3N5c3RlbS4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVHJhZmZpYyBjb250cm9sIGNvbmZpZ3VyYXRpb24uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgTkVUX1NDSEVEXG4gICA3Olx0XHRib29sIFwmIzM0O1FvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1wmIzM0O1xuICAgODpcdFx0c2VsZWN0IE5FVF9TQ0hfRklGT1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBXaGVuIHRoZSBrZXJuZWwgaGFzIHNldmVyYWwgcGFja2V0cyB0byBzZW5kIG91dCBvdmVyIGEgbmV0d29ya1xuICAxMTpcdFx0ICBkZXZpY2UsIGl0IGhhcyB0byBkZWNpZGUgd2hpY2ggb25lcyB0byBzZW5kIGZpcnN0LCB3aGljaCBvbmVzIHRvXG4gIDEyOlx0XHQgIGRlbGF5LCBhbmQgd2hpY2ggb25lcyB0byBkcm9wLiBUaGlzIGlzIHRoZSBqb2Igb2YgdGhlIHF1ZXVlaW5nXG4gIDEzOlx0XHQgIGRpc2NpcGxpbmVzLCBzZXZlcmFsIGRpZmZlcmVudCBhbGdvcml0aG1zIGZvciBob3cgdG8gZG8gdGhpc1xuICAxNDpcdFx0ICBcJiMzNDtmYWlybHlcJiMzNDsgaGF2ZSBiZWVuIHByb3Bvc2VkLlxuICAxNTpcdFxuICAxNjpcdFx0ICBJZiB5b3Ugc2F5IE4gaGVyZSwgeW91IHdpbGwgZ2V0IHRoZSBzdGFuZGFyZCBwYWNrZXQgc2NoZWR1bGVyLCB3aGljaFxuICAxNzpcdFx0ICBpcyBhIEZJRk8gKGZpcnN0IGNvbWUsIGZpcnN0IHNlcnZlZCkuIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZVxuICAxODpcdFx0ICBhYmxlIHRvIGNob29zZSBmcm9tIGFtb25nIHNldmVyYWwgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtcyB3aGljaCBjYW5cbiAgMTk6XHRcdCAgdGhlbiBiZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbmV0d29yayBkZXZpY2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3JcbiAgMjA6XHRcdCAgZXhhbXBsZSBpZiBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzIGFyZSByZWFsIHRpbWUgZGV2aWNlcyB0aGF0XG4gIDIxOlx0XHQgIG5lZWQgYSBjZXJ0YWluIG1pbmltdW0gZGF0YSBmbG93IHJhdGUsIG9yIGlmIHlvdSBuZWVkIHRvIGxpbWl0IHRoZVxuICAyMjpcdFx0ICBtYXhpbXVtIGRhdGEgZmxvdyByYXRlIGZvciB0cmFmZmljIHdoaWNoIG1hdGNoZXMgc3BlY2lmaWVkIGNyaXRlcmlhLlxuICAyMzpcdFx0ICBUaGlzIGNvZGUgaXMgY29uc2lkZXJlZCB0byBiZSBleHBlcmltZW50YWwuXG4gIDI0Olx0XG4gIDI1Olx0XHQgIFRvIGFkbWluaXN0ZXIgdGhlc2Ugc2NoZWR1bGVycywgeW91JiMzOTtsbCBuZWVkIHRoZSB1c2VyLWxldmVsIHV0aWxpdGllc1xuICAyNjpcdFx0ICBmcm9tIHRoZSBwYWNrYWdlIGlwcm91dGUyJiM0Mzt0YyBhdFxuICAyNzpcdFx0ICBcdTAwM2NodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9uZXQvaXByb3V0ZTIvXHUwMDNlLiAgVGhhdCBwYWNrYWdlXG4gIDI4Olx0XHQgIGFsc28gY29udGFpbnMgc29tZSBkb2N1bWVudGF0aW9uOyBmb3IgbW9yZSwgY2hlY2sgb3V0XG4gIDI5Olx0XHQgIFx1MDAzY2h0dHA6Ly93d3cubGludXhmb3VuZGF0aW9uLm9yZy9jb2xsYWJvcmF0ZS93b3JrZ3JvdXBzL25ldHdvcmtpbmcvaXByb3V0ZTJcdTAwM2UuXG4gIDMwOlx0XG4gIDMxOlx0XHQgIFRoaXMgUXVhbGl0eSBvZiBTZXJ2aWNlIChRb1MpIHN1cHBvcnQgd2lsbCBlbmFibGUgeW91IHRvIHVzZVxuICAzMjpcdFx0ICBEaWZmZXJlbnRpYXRlZCBTZXJ2aWNlcyAoZGlmZnNlcnYpIGFuZCBSZXNvdXJjZSBSZXNlcnZhdGlvbiBQcm90b2NvbFxuICAzMzpcdFx0ICAoUlNWUCkgb24geW91ciBMaW51eCByb3V0ZXIgaWYgeW91IGFsc28gc2F5IFkgdG8gdGhlIGNvcnJlc3BvbmRpbmdcbiAgMzQ6XHRcdCAgY2xhc3NpZmllcnMgYmVsb3cuICBEb2N1bWVudGF0aW9uIGFuZCBzb2Z0d2FyZSBpcyBhdFxuICAzNTpcdFx0ICBcdTAwM2NodHRwOi8vZGlmZnNlcnYuc291cmNlZm9yZ2UubmV0L1x1MDAzZS5cbiAgMzY6XHRcbiAgMzc6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUgYW5kIHRvIFwmIzM0Oy9wcm9jIGZpbGUgc3lzdGVtXCYjMzQ7IGJlbG93LCB5b3Ugd2lsbCBiZSBhYmxlXG4gIDM4Olx0XHQgIHRvIHJlYWQgc3RhdHVzIGluZm9ybWF0aW9uIGFib3V0IHBhY2tldCBzY2hlZHVsZXJzIGZyb20gdGhlIGZpbGVcbiAgMzk6XHRcdCAgL3Byb2MvbmV0L3BzY2hlZC5cbiAgNDA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTM0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGlnZ2luZyBpbnRvIE5ldHdvcmsgU2NoZWR1bGluZyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBORVRfU0NIRURgIGFuZCBgTkVUX1NDSF9IRlNDYCwgY2xhc3NpYyBuZXR3b3JrIHNjaGVkdWxlciBzdHVmZi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJIGJldCBgTkVUX1NDSEVEYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGEgbW9yZSBmdW5kYW1lbnRhbCBuZXR3b3JrIGZlYXR1cmUsIGxpa2VseSBgTkVUYC4gIFRpbWUgdG8gY29uZmlybSB0aGlzIGluIGBuZXQvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBORVRfU0NIRURgIGVudHJ5LiBJIG5lZWQgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuIFRoaXMgaW5pdGlhbCBhc3Nlc3NtZW50IHByb3ZpZGVzIHRoZSBiYXNlbGluZSBjb250ZXh0IG9mIG90aGVyIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb24gaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb3VyY2UgXCYjMzQ7bmV0L3NjaGVkL0tjb25maWdcJiMzNDsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9MjY5PXNvdXJjZSBcJiMzNDtuZXQvbWFjODAyMTU0L0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI3MDpzb3VyY2UgXCYjMzQ7bmV0L3NjaGVkL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnLTI3MS1zb3VyY2UgXCYjMzQ7bmV0L2RjYi9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NTYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGl2aW5nIGludG8gdGhlIEhGU0MgQ2xhc3NpZmljYXRpb24gTG9naWMqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIEhGU0Mgc2NoZWR1bGVyIGlzc3VlLiBUaGUgcGxhY2UgdG8gc3RhcnQgaXMgYWxtb3N0IGFsd2F5cyB0aGUgY2xhc3NpZmljYXRpb24gcHJvY2VzcywgYW5kIGZvciBIRlNDLCB0aGF0IG1lYW5zIHRha2luZyBhIGxvb2sgYXQgYG5ldC9zY2hlZC9zY2hfaGZzYy5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGhmc2NfY2xhc3NpZnlgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBpbiB0aGlzIGNhc2UsIHdoZXJlIHRoZSBwb3RlbnRpYWwgcHJvYmxlbSBpcyBicmV3aW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IEhGU0MgaGFuZGxlcyBwYWNrZXQgY2xhc3NpZmljYXRpb24g4oCTIGlzIGl0IHVzaW5nIHRoZSB0cmFkaXRpb25hbCBjbGFzc2lmaWVycywgb3Igc29tZXRoaW5nIHVuaXF1ZSB0byBpdHMgaGllcmFyY2hpY2FsIHN0cnVjdHVyZT8gQXJlIHdlIGRlYWxpbmcgd2l0aCBxZGlzYy1zcGVjaWZpYyBtYXRjaCBjcml0ZXJpYSwgb3IgYXJlIHRoZXkgaW50ZWdyYXRlZCB3aXRoIHRoZSBnZW5lcmljIGNsYXNzaWZpZXIgaG9va3M/IEdvdHRhIHVuZGVyc3RhbmQgaG93IGl0IGRlY2lkZXMgd2hpY2ggbGVhZiBxdWV1ZSBhIHBhY2tldCBnZXRzIHN0ZWVyZWQgaW50by4gVGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBvciB0aGUgbWlzLWNsYXNzaWZpY2F0aW9uIGxpZXMuIExldCYjMzk7cyBzZWUgaG93IHRoZSBmbG93IGlzIGhhbmRsZWQgaW4gdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBpbmVmZmljaWVudCBsb29wcywgb3IgZXZlbiBhbiBpbmNvcnJlY3QgcHJpb3JpdHkgbWFwcGluZyB0aGF0JiMzOTtzIGNhdXNpbmcgdGhlIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9oZnNjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMzA6XHRcbjExMzE6XHRcdGhmc2NfZGVzdHJveV9jbGFzcyhzY2gsIGNsKTtcbjExMzI6XHRcdHJldHVybiAwO1xuMTEzMzpcdH1cbjExMzQ6XHRcbjExMzU6XHRzdGF0aWMgc3RydWN0IGhmc2NfY2xhc3MgKlxuMTEzNjpcdGhmc2NfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsIGludCAqcWVycilcbjExMzc6XHR7XG4xMTM4Olx0XHRzdHJ1Y3QgaGZzY19zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcbjExMzk6XHRcdHN0cnVjdCBoZnNjX2NsYXNzICpoZWFkLCAqY2w7XG4xMTQwOlx0XHRzdHJ1Y3QgdGNmX3Jlc3VsdCByZXM7XG4xMTQxOlx0XHRzdHJ1Y3QgdGNmX3Byb3RvICp0Y2Y7XG4xMTQyOlx0XHR1bnNpZ25lZCBpbnQgZHJpZnQ7XG4xMTQzOlx0XHRpbnQgcmVzdWx0O1xuMTE0NDpcdFxuMTE0NTpcdFx0aWYgKFRDX0hfTUFKKHNrYi1cdTAwM2Vwcmlvcml0eSBeIHNjaC1cdTAwM2VoYW5kbGUpID09IDAgXHUwMDI2XHUwMDI2XG4xMTQ2Olx0XHQgICAgKGNsID0gaGZzY19maW5kX2NsYXNzKHNrYi1cdTAwM2Vwcmlvcml0eSwgc2NoKSkgIT0gTlVMTClcbjExNDc6XHRcdFx0aWYgKGNsLVx1MDAzZWxldmVsID09IDApXG4xMTQ4Olx0XHRcdFx0cmV0dXJuIGNsO1xuMTE0OTpcdFxuMTE1MDpcdFx0KnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7XG4xMTUxOlx0XHRoZWFkID0gXHUwMDI2cS1cdTAwM2Vyb290O1xuMTE1MjpcdFx0ZHJpZnQgPSBIRlNDX0NMQVNTSUZZX01BWF9EUklGVDtcbjExNTM6XHRcdHRjZiA9IHJjdV9kZXJlZmVyZW5jZV9iaChxLVx1MDAzZXJvb3QuZmlsdGVyX2xpc3QpO1xuMTE1NDpcdFx0d2hpbGUgKHRjZiBcdTAwMjZcdTAwMjYgKHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIHRjZiwgXHUwMDI2cmVzLCBmYWxzZSkpIFx1MDAzZT0gMCkge1xuMTE1NTpcdCNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcbjExNTY6XHRcdFx0c3dpdGNoIChyZXN1bHQpIHtcbjExNTc6XHRcdFx0Y2FzZSBUQ19BQ1RfUVVFVUVEOlxuMTE1ODpcdFx0XHRjYXNlIFRDX0FDVF9TVE9MRU46XG4xMTU5Olx0XHRcdGNhc2UgVENfQUNUX1RSQVA6XG4xMTYwOlx0XHRcdFx0KnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9TVE9MRU47XG4xMTYxOlx0XHRcdFx0ZmFsbHRocm91Z2g7XG4xMTYyOlx0XHRcdGNhc2UgVENfQUNUX1NIT1Q6XG4xMTYzOlx0XHRcdFx0cmV0dXJuIE5VTEw7XG4xMTY0Olx0XHRcdH1cbjExNjU6XHQjZW5kaWZcbjExNjY6XHRcdFx0Y2wgPSAoc3RydWN0IGhmc2NfY2xhc3MgKilyZXMuY2xhc3M7XG4xMTY3Olx0XHRcdGlmICghY2wpIHtcbjExNjg6XHRcdFx0XHRjbCA9IGhmc2NfZmluZF9jbGFzcyhyZXMuY2xhc3NpZCwgc2NoKTtcbjExNjk6XHRcdFx0XHRpZiAoIWNsKVxuMTE3MDpcdFx0XHRcdFx0YnJlYWs7IC8qIGZpbHRlciBzZWxlY3RlZCBpbnZhbGlkIGNsYXNzaWQgKi9cbjExNzE6XHRcdFx0XHRpZiAoY2wtXHUwMDNlbGV2ZWwgXHUwMDNlPSBoZWFkLVx1MDAzZWxldmVsKVxuMTE3MjpcdFx0XHRcdFx0YnJlYWs7IC8qIGZpbHRlciBtYXkgb25seSBwb2ludCBkb3dud2FyZHMgKi9cbjExNzM6XHRcdFx0fVxuMTE3NDpcdFxuMTE3NTpcdFx0XHRpZiAoY2wtXHUwMDNlbGV2ZWwgPT0gMClcbjExNzY6XHRcdFx0XHRyZXR1cm4gY2w7IC8qIGhpdCBsZWFmIGNsYXNzICovXG4xMTc3Olx0XG4xMTc4Olx0XHRcdC8qXG4xMTc5Olx0XHRcdCAqIGZsb3dpZCBiaW5kcyBza2lwIHRoZSBsZXZlbCBjaGVjayBhYm92ZSAocmVzLmNsYXNzIGlzIHNldFxuMTE4MDpcdFx0XHQgKiBhdCBiaW5kIHRpbWUgYW5kIGxldmVscyBkcmlmdCBhZnRlciksIHNvIGEgd2FsayBjYW4gZm9sbG93XG4xMTgxOlx0XHRcdCAqIGxhdGVyYWwgaG9wcyB3aXRob3V0IGRlc2NlbmRpbmc7IGJvdW5kIHRoZW0gaGVyZS5cbjExODI6XHRcdFx0ICovXG4xMTgzOlx0XHRcdGlmIChjbC1cdTAwM2VsZXZlbCBcdTAwM2U9IGhlYWQtXHUwMDNlbGV2ZWwgXHUwMDI2XHUwMDI2IGRyaWZ0LS0gPT0gMCkge1xuMTE4NDpcdFx0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7aGZzYzogY2xhc3NpZnkgbG9vcCBkZXRlY3RlZCwgZHJvcHBpbmcgcGFja2V0XFxuXCYjMzQ7KTtcbjExODU6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbjExODY6XHRcdFx0fVxuMTE4NzpcdFxuMTE4ODpcdFx0XHQvKiBhcHBseSBpbm5lciBmaWx0ZXIgY2hhaW4gKi9cbjExODk6XHRcdFx0dGNmID0gcmN1X2RlcmVmZXJlbmNlX2JoKGNsLVx1MDAzZWZpbHRlcl9saXN0KTtcbjExOTA6XHRcdFx0aGVhZCA9IGNsO1xuMTE5MTpcdFx0fVxuMTE5MjpcdFxuMTE5MzpcdFx0LyogY2xhc3NpZmljYXRpb24gZmFpbGVkLCB0cnkgZGVmYXVsdCBjbGFzcyAqL1xuMTE5NDpcdFx0Y2wgPSBoZnNjX2ZpbmRfY2xhc3MoVENfSF9NQUtFKFRDX0hfTUFKKHNjaC1cdTAwM2VoYW5kbGUpLFxuMTE5NTpcdFx0XHRcdFx0ICAgICAgIFJFQURfT05DRShxLVx1MDAzZWRlZmNscykpLCBzY2gpO1xuMTE5NjpcdFx0aWYgKGNsID09IE5VTEwgfHwgY2wtXHUwMDNlbGV2ZWwgXHUwMDNlIDApXG4xMTk3Olx0XHRcdHJldHVybiBOVUxMO1xuMTE5ODpcdFxuMTE5OTpcdFx0cmV0dXJuIGNsO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjM1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBoZnNjX2NsYXNzaWZ5YCBDYWxsc2l0ZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doZXJlICpleGFjdGx5KiBpcyBgaGZzY19jbGFzc2lmeWAgYmVpbmcgaW52b2tlZD8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gS25vd2luZyB0aGUgY2FsbCBoaWVyYXJjaHkgaXMgZnVuZGFtZW50YWwgdG8gY29tcHJlaGVuZGluZyBpdHMgcm9sZSwgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgc3lzdGVtLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSB2YXJpb3VzIG1vZHVsZXMgb3IgY29tcG9uZW50cyB0aGF0IG1pZ2h0IGJlIGxldmVyYWdpbmcgdGhpcyBmdW5jdGlvbiBhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIGl0cyBleGVjdXRpb24uIEkgbmVlZCB0byB0cmFjZSBpdHMgdXRpbGl6YXRpb24gdG8gYnVpbGQgYSBzb2xpZCBwaWN0dXJlIG9mIGl0cyBpbnRlZ3JhdGlvbiBhbmQgYmVoYXZpb3IuIEFyZSB3ZSBsb29raW5nIGF0IGl0IGFzIGEgdG9wLWxldmVsIGZ1bmN0aW9uLCBvciBpcyBpdCBidXJpZWQgZGVlcCB3aXRoaW4gYSBjYWxsIHN0YWNrPyBUaGUgY2FsbGluZyBjb250ZXh0IGlzIGdvaW5nIHRvIGRyaXZlIGhvdyBJIGludGVycHJldCBpdHMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hmc2NfY2xhc3NpZnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9oZnNjLmM9MTEzNT1zdGF0aWMgc3RydWN0IGhmc2NfY2xhc3MgKlxubmV0L3NjaGVkL3NjaF9oZnNjLmM6MTEzNjpoZnNjX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgKnFlcnIpXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMTM3LXtcbi0tXG5uZXQvc2NoZWQvc2NoX2hmc2MuYz0xNTU2PWhmc2NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlKVxuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTE1NjItXG5uZXQvc2NoZWQvc2NoX2hmc2MuYzoxNTYzOlx0Y2wgPSBoZnNjX2NsYXNzaWZ5KHNrYiwgc2NoLCBcdTAwMjZlcnIpO1xubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTU2NC1cdGlmIChjbCA9PSBOVUxMKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NTcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqSEZTQyBDb2RlIFdhbGt0aHJvdWdoOiBJbml0aWFsIEV4cGxvcmF0aW9uKioKCk9rYXksIHNvIGBoZnNjX2NsYXNzaWZ5YCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgZGVmaW5lZCB3aXRoaW4gYG5ldC9zY2hlZC9zY2hfaGZzYy5jYC4gSW50ZXJlc3RpbmcuIFRoYXQgbWVhbnMgaXQmIzM5O3Mgb25seSBjYWxsZWQgaW50ZXJuYWxseSB3aXRoaW4gdGhhdCBmaWxlLCBzcGVjaWZpY2FsbHkgYnkgYGhmc2NfZW5xdWV1ZWAuIEFscmlnaHQsIG5vdyBJIHdhbnQgdG8gZ2V0IGEgYnJvYWRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCBmaXRzIGludG8gdGhlIHdob2xlIHBpY3R1cmUuIEkgbmVlZCB0byBzZWUgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW4gYHNjaF9oZnNjLmNgIHRoYXQgYXJlICpyZWxhdGVkKiB0byBgaGZzY19jbGFzc2lmeWAsIHBlcmhhcHMgdGhyb3VnaCBiZWluZyBleHBvcnRlZCBvciBvdGhlcndpc2UgaW50ZXJhY3RpbmcuIExldCYjMzk7cyBzZWUgaG93IEkgY2FuIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIHRoaXMgcGFydCBvZiB0aGUga2VybmVsLiBOZXh0LCBsZXQmIzM5O3Mgem9vbSBpbiBhIGJpdCBhbmQgdGhvcm91Z2hseSBleGFtaW5lIGBoZnNjX2VucXVldWVgLiBJJiMzOTtsbCBhbHNvIG5lZWQgdG8gcmV2aXNpdCB0aGUgUWRpc2Mgb3BlcmF0aW9ucyBmb3IgSEZTQyB0byBzZWUgaG93IGl0IGFsbCBjb21lcyB0b2dldGhlci4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfaGZzYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTU1Olx0c3RhdGljIGludFxuMTU1NjpcdGhmc2NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlKVxuMTU1NzpcdHtcbjE1NTg6XHRcdHVuc2lnbmVkIGludCBsZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7XG4xNTU5Olx0XHRzdHJ1Y3QgaGZzY19jbGFzcyAqY2w7XG4xNTYwOlx0XHRpbnQgZXJyO1xuMTU2MTpcdFx0Ym9vbCBmaXJzdDtcbjE1NjI6XHRcbjE1NjM6XHRcdGNsID0gaGZzY19jbGFzc2lmeShza2IsIHNjaCwgXHUwMDI2ZXJyKTtcbjE1NjQ6XHRcdGlmIChjbCA9PSBOVUxMKSB7XG4xNTY1Olx0XHRcdGlmIChlcnIgXHUwMDI2IF9fTkVUX1hNSVRfQllQQVNTKVxuMTU2NjpcdFx0XHRcdHFkaXNjX3FzdGF0c19kcm9wKHNjaCk7XG4xNTY3Olx0XHRcdF9fcWRpc2NfZHJvcChza2IsIHRvX2ZyZWUpO1xuMTU2ODpcdFx0XHRyZXR1cm4gZXJyO1xuMTU2OTpcdFx0fVxuMTU3MDpcdFxuMTU3MTpcdFx0Zmlyc3QgPSAhY2wtXHUwMDNlcWRpc2MtXHUwMDNlcS5xbGVuO1xuMTU3MjpcdFx0ZXJyID0gcWRpc2NfZW5xdWV1ZShza2IsIGNsLVx1MDAzZXFkaXNjLCB0b19mcmVlKTtcbjE1NzM6XHRcdGlmICh1bmxpa2VseShlcnIgIT0gTkVUX1hNSVRfU1VDQ0VTUykpIHtcbjE1NzQ6XHRcdFx0aWYgKG5ldF94bWl0X2Ryb3BfY291bnQoZXJyKSkge1xuMTU3NTpcdFx0XHRcdGNsLVx1MDAzZXFzdGF0cy5kcm9wcyYjNDM7JiM0Mzs7XG4xNTc2Olx0XHRcdFx0cWRpc2NfcXN0YXRzX2Ryb3Aoc2NoKTtcbjE1Nzc6XHRcdFx0fVxuMTU3ODpcdFx0XHRyZXR1cm4gZXJyO1xuMTU3OTpcdFx0fVxuMTU4MDpcdFxuMTU4MTpcdFx0cXN0YXRzX2JhY2tsb2dfYWRkKHNjaCwgbGVuKTtcbjE1ODI6XHRcdHFkaXNjX3FsZW5faW5jKHNjaCk7XG4xNTgzOlx0XG4xNTg0Olx0XHRpZiAoZmlyc3QgXHUwMDI2XHUwMDI2ICFjbF9pbl9lbF9vcl92dHRyZWUoY2wpKSB7XG4xNTg1Olx0XHRcdGlmIChjbC1cdTAwM2VjbF9mbGFncyBcdTAwMjYgSEZTQ19SU0MpXG4xNTg2Olx0XHRcdFx0aW5pdF9lZChjbCwgbGVuKTtcbjE1ODc6XHRcdFx0aWYgKGNsLVx1MDAzZWNsX2ZsYWdzIFx1MDAyNiBIRlNDX0ZTQylcbjE1ODg6XHRcdFx0XHRpbml0X3ZmKGNsLCBsZW4pO1xuMTU4OTpcdFx0XHQvKlxuMTU5MDpcdFx0XHQgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBwYWNrZXQsIGlzb2xhdGUgdGhlIGhlYWQgc28gYW4gZXZlbnR1YWxcbjE1OTE6XHRcdFx0ICogaGVhZCBkcm9wIGJlZm9yZSB0aGUgZmlyc3QgZGVxdWV1ZSBvcGVyYXRpb24gaGFzIG5vIGNoYW5jZVxuMTU5MjpcdFx0XHQgKiB0byBpbnZhbGlkYXRlIHRoZSBkZWFkbGluZS5cbjE1OTM6XHRcdFx0ICovXG4xNTk0Olx0XHRcdGlmIChjbC1cdTAwM2VjbF9mbGFncyBcdTAwMjYgSEZTQ19SU0MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MDQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgY29kZSwgcHJlc2VudGVkIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYHNjaF9oZnNjLmNgIC0gUWRpc2MgYW5kIENsYXNzIE9wZXJhdGlvbnMqKgoKUmlnaHQsIHRpbWUgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IGhvdyB0aGUgSGlnaCBGaWRlbGl0eSBTY2hlZHVsaW5nIChIRlNDKSBxZGlzYyBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRob3NlIGBxZGlzY19vcHNgIGFuZCBgY2xhc3Nfb3BzYCBzdHJ1Y3R1cmVzIGRlZmluZWQgd2l0aGluIGBzY2hfaGZzYy5jYC4gVGhlc2UgYXJlIHRoZSBoZWFydCBvZiBob3cgSEZTQyBhY3R1YWxseSAqd29ya3MqIGF0IHRoZSBrZXJuZWwgbGV2ZWwuIFRoZXkmIzM5O2xsIGRpY3RhdGUgZXZlcnl0aGluZyDigJMgZnJvbSBob3cgbmV3IEhGU0MgaW5zdGFuY2VzIGFyZSBjcmVhdGVkIGFuZCBjb25maWd1cmVkICh0aGUgYHFkaXNjX29wc2ApLCB0byBob3cgY2xhc3NlcyBhcmUgYWRkZWQsIHJlbW92ZWQsIHNjaGVkdWxlZCwgYW5kIG1ldHJpY3MgYXJlIGdhdGhlcmVkICh0aGF0JiMzOTtzIHRoZSBgY2xhc3Nfb3BzYCkuIEl0JiMzOTtzIGFsbCBhYm91dCB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBvcHMgaG9vayBpbnRvIHRoZSBjb3JlIHRyYWZmaWMgY29udHJvbCBmcmFtZXdvcmsuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IGRpc3NlY3QgZWFjaCBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiB0aG9zZSBzdHJ1Y3R1cmVzLCBtYWtpbmcgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIEhGU0Mgc2NoZWR1bGluZyBiZWhhdmlvciB0aGV5IGVuY2Fwc3VsYXRlLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBRZGlzY19vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2hmc2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2hmc2MuYz0xNjc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzIGhmc2NfY2xhc3Nfb3BzID0ge1xuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTE2OTAtXG5uZXQvc2NoZWQvc2NoX2hmc2MuYzoxNjkxOnN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIGhmc2NfcWRpc2Nfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xNjkyLVx0LmlkXHRcdD0gXCYjMzQ7aGZzY1wmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMDgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipQZWVyaW5nIGludG8gdGhlIENvcmU6IENsYXNzIE9wcyBhbmQgUWRpc2MgT3BzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyB0cmFmZmljIHNoYXBpbmcgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGRlZmluaXRpb25zIG9mIHRoZSBjbGFzcyBvcGVyYXRpb25zIChjbGFzcyBvcHMpIGFuZCBxdWV1ZWluZyBkaXNjaXBsaW5lIG9wZXJhdGlvbnMgKHFkaXNjIG9wcykuIFRoZXNlIGFyZSB0aGUgYmVkcm9jaywgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiB0aGUgZW50aXJlIG1lY2hhbmlzbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBtZXRob2RzIHRoZXkgZXhwb3NlLCB3aGF0IGRhdGEgc3RydWN0dXJlcyB0aGV5IGludGVyYWN0IHdpdGgsIGFuZCBob3cgdGhleSBkZWZpbmUgdGhlIGJlaGF2aW9yIG9mIHRoZSB0cmFmZmljIGNvbnRyb2wgc3lzdGVtLiBFc3NlbnRpYWxseSwgSSB3YW50IHRvIHNlZSB3aGF0IGtub2JzIGFyZSBhdmFpbGFibGUgYW5kIGhvdyB0aG9zZSBrbm9icyBhcmUgZGVmaW5lZCB0byBhY3R1YWxseSBtYW5pcHVsYXRlIHRoZSBuZXR3b3JrIHRyYWZmaWMuIFVuZGVyc3RhbmRpbmcgdGhlaXIgZnVuY3Rpb24gYXQgdGhlIGxvd2VzdCBsZXZlbCB3aWxsIGlsbHVtaW5hdGUgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgc3lzdGVtIGFzIGEgd2hvbGUuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBkaXNzZWN0IHRoZXNlIGRlZmluaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfaGZzYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjcwOlx0XHRxZGlzY19xc3RhdHNfYmFja2xvZ19kZWMoc2NoLCBza2IpO1xuMTY3MTpcdFx0cWRpc2NfcWxlbl9kZWMoc2NoKTtcbjE2NzI6XHRcbjE2NzM6XHRcdHJldHVybiBza2I7XG4xNjc0Olx0fVxuMTY3NTpcdFxuMTY3NjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzIGhmc2NfY2xhc3Nfb3BzID0ge1xuMTY3NzpcdFx0LmNoYW5nZVx0XHQ9IGhmc2NfY2hhbmdlX2NsYXNzLFxuMTY3ODpcdFx0LmRlbGV0ZVx0XHQ9IGhmc2NfZGVsZXRlX2NsYXNzLFxuMTY3OTpcdFx0LmdyYWZ0XHRcdD0gaGZzY19ncmFmdF9jbGFzcyxcbjE2ODA6XHRcdC5sZWFmXHRcdD0gaGZzY19jbGFzc19sZWFmLFxuMTY4MTpcdFx0LnFsZW5fbm90aWZ5XHQ9IGhmc2NfcWxlbl9ub3RpZnksXG4xNjgyOlx0XHQuZmluZFx0XHQ9IGhmc2Nfc2VhcmNoX2NsYXNzLFxuMTY4MzpcdFx0LmJpbmRfdGNmXHQ9IGhmc2NfYmluZF90Y2YsXG4xNjg0Olx0XHQudW5iaW5kX3RjZlx0PSBoZnNjX3VuYmluZF90Y2YsXG4xNjg1Olx0XHQudGNmX2Jsb2NrXHQ9IGhmc2NfdGNmX2Jsb2NrLFxuMTY4NjpcdFx0LmR1bXBcdFx0PSBoZnNjX2R1bXBfY2xhc3MsXG4xNjg3Olx0XHQuZHVtcF9zdGF0c1x0PSBoZnNjX2R1bXBfY2xhc3Nfc3RhdHMsXG4xNjg4Olx0XHQud2Fsa1x0XHQ9IGhmc2Nfd2Fsa1xuMTY4OTpcdH07XG4xNjkwOlx0XG4xNjkxOlx0c3RhdGljIHN0cnVjdCBRZGlzY19vcHMgaGZzY19xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcbjE2OTI6XHRcdC5pZFx0XHQ9IFwmIzM0O2hmc2NcJiMzNDssXG4xNjkzOlx0XHQuaW5pdFx0XHQ9IGhmc2NfaW5pdF9xZGlzYyxcbjE2OTQ6XHRcdC5jaGFuZ2VcdFx0PSBoZnNjX2NoYW5nZV9xZGlzYyxcbjE2OTU6XHRcdC5yZXNldFx0XHQ9IGhmc2NfcmVzZXRfcWRpc2MsXG4xNjk2Olx0XHQuZGVzdHJveVx0PSBoZnNjX2Rlc3Ryb3lfcWRpc2MsXG4xNjk3Olx0XHQuZHVtcFx0XHQ9IGhmc2NfZHVtcF9xZGlzYyxcbjE2OTg6XHRcdC5lbnF1ZXVlXHQ9IGhmc2NfZW5xdWV1ZSxcbjE2OTk6XHRcdC5kZXF1ZXVlXHQ9IGhmc2NfZGVxdWV1ZSxcbjE3MDA6XHRcdC5wZWVrXHRcdD0gcWRpc2NfcGVla19kZXF1ZXVlZCxcbjE3MDE6XHRcdC5jbF9vcHNcdFx0PSBcdTAwMjZoZnNjX2NsYXNzX29wcyxcbjE3MDI6XHRcdC5wcml2X3NpemVcdD0gc2l6ZW9mKHN0cnVjdCBoZnNjX3NjaGVkKSxcbjE3MDM6XHRcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFXG4xNzA0Olx0fTtcbjE3MDU6XHRNT0RVTEVfQUxJQVNfTkVUX1NDSChcJiMzNDtoZnNjXCYjMzQ7KTtcbjE3MDY6XHRcbjE3MDc6XHRzdGF0aWMgaW50IF9faW5pdFxuMTcwODpcdGhmc2NfaW5pdCh2b2lkKVxuMTcwOTpcdHtcbjE3MTA6XHRcdHJldHVybiByZWdpc3Rlcl9xZGlzYyhcdTAwMjZoZnNjX3FkaXNjX29wcyk7XG4xNzExOlx0fVxuMTcxMjpcdFxuMTcxMzpcdHN0YXRpYyB2b2lkIF9fZXhpdFxuMTcxNDpcdGhmc2NfY2xlYW51cCh2b2lkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk4NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3ltYm9sIENvdmVyYWdlIGZvciBIRlNDIFNjaGVkdWxlciBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0byBiZXN0IGhhbmRsZSBzeW1ib2wgY292ZXJhZ2UgZm9yIHRoZSBIRlNDIHNjaGVkdWxlciwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBoZnNjX2NsYXNzaWZ5YC4gIFJpZ2h0LCBgaGZzY19jbGFzc2lmeWAgaXMgKnN0YXRpYyouIE15IGluaXRpYWwgdGhvdWdodCB3YXM6IGNhbiB0aGF0IGJlIGEgZm9jdXMgc3ltYm9sPwoKSG9sZCBvbi4uLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhlIG51YW5jZXMgb2YgdGhlIExpbnV4IGtlcm5lbCBzeW1ib2wgdGFibGVzLiBTdGF0aWMgZnVuY3Rpb25zIGluIGAuY2AgZmlsZXMgKm9mdGVuKiBoYXZlIHN5bWJvbHMsIGxpa2UgYGhmc2NfY2xhc3NpZnlgIG9yIHNvbWV0aGluZyBsaWtlIGBoZnNjX2NsYXNzaWZ5LmlzcmEuMGAuICBTbywgbGV0JiMzOTtzIG5haWwgZG93biB3aGV0aGVyIGBoZnNjX2NsYXNzaWZ5YCBpdHNlbGYgaXMgdXNhYmxlLCBvciBpZiBJIG5lZWQgdG8gbG9vayBhdCBhbHRlcm5hdGl2ZXMgbGlrZSBgaGZzY19lbnF1ZXVlYCwgb3IgYm90aC4KCkFoLCBTZWN0aW9uIDQgb2YgdGhlIGRvY3VtZW50YXRpb24gaXMgY3J1Y2lhbCBoZXJlLiBUaGUgZG9jcyBjbGVhcmx5IGV4cGxhaW4gdGhlIGlzc3VlIG9mIGlubGluZWQgKnN0YXRpYyogZnVuY3Rpb25zIGluIGhlYWRlcnM6IHRob3NlIGRvbiYjMzk7dCBnZXQgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gQnV0LCBgaGZzY19jbGFzc2lmeWAgaXNuJiMzOTt0IGluIGEgaGVhZGVyOyBpdCYjMzk7cyBgc3RhdGljIHN0cnVjdCBoZnNjX2NsYXNzICogaGZzY19jbGFzc2lmeSguLi4pYCBpbiBgc2NoX2hmc2MuY2AuICBHb29kLgoKTm93LCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciBgaGZzY19jbGFzc2lmeWAgaXMgKmlubGluZWQqIGludG8gYGhmc2NfZW5xdWV1ZWAuICBJdCYjMzk7cyBvbmx5IGNhbGxlZCBvbmNlIGluIGBzY2hfaGZzYy5jYCwgYXQgbGluZSAxNTYzLCBzbyBkZXBlbmRpbmcgb24gY29tcGlsZXIgb3B0aW1pemF0aW9uLCB0aGUgY29tcGlsZXIgKm1pZ2h0KiBpbmxpbmUgYGhmc2NfY2xhc3NpZnlgIGludG8gYGhmc2NfZW5xdWV1ZWAuCgpTbywgaXQmIzM5O3MgcHJvYmFibHkgYmVzdCB0byBsaXN0ICpib3RoKiBgaGZzY19jbGFzc2lmeWAgYW5kIGBoZnNjX2VucXVldWVgIChhbmQgbWF5YmUgZXZlbiBgaGZzY19iaW5kX3RjZmAgYW5kIGBoZnNjX2NoYW5nZV9jbGFzc2ApIGFzIHBvdGVudGlhbCBmb2N1cyBzeW1ib2xzLiAgVGhhdCBnaXZlcyBtZSBnb29kIGNvdmVyYWdlLCByZWdhcmRsZXNzIG9mIHRoZSBjb21waWxlciYjMzk7cyBpbmxpbmluZyBkZWNpc2lvbnMuCgpCdXQgSSByZWFsbHkgc2hvdWxkIHRha2UgYSBzdGVwIGJhY2sgYmVmb3JlIG1ha2luZyBhIGRlY2lzaW9uLiAgTGV0JiMzOTtzIG5vdCBqdW1wIHRoZSBndW4gYW5kIGJsaW5kbHkgZGVmaW5lIHRoZXNlIHN5bWJvbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY29kZSBjaGFuZ2VkIGluIHRoZSBmaXJzdCBwbGFjZS4gSSBzaG91bGQgY2hlY2sgdGhlIGdpdCBsb2cgb2YgdGhpcyBjb21taXQsIG9yIHRoZSBzdXJyb3VuZGluZyBjb21taXRzLCB0byBnZXQgdGhlIGNvbnRleHQgb2YgdGhlIHBhdGNoLiBUaGF0IHdpbGwgY2xhcmlmeSB0aGUgaW1wYWN0IG9mIHRoZXNlIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SEZTQ19DTEFTU0lGWV9NQVhfRFJJRlQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9oZnNjLmM9MzUyPWNmdHJlZV91cGRhdGUoc3RydWN0IGhmc2NfY2xhc3MgKmNsKVxuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTM5Mi0gKi9cbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjM5MzojZGVmaW5lXHRIRlNDX0NMQVNTSUZZX01BWF9EUklGVFx0OFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMzk0LVxuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jPTExMzY9aGZzY19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKVxuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTExNTEtXHRoZWFkID0gXHUwMDI2cS1cdTAwM2Vyb290O1xubmV0L3NjaGVkL3NjaF9oZnNjLmM6MTE1MjpcdGRyaWZ0ID0gSEZTQ19DTEFTU0lGWV9NQVhfRFJJRlQ7XG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMTUzLVx0dGNmID0gcmN1X2RlcmVmZXJlbmNlX2JoKHEtXHUwMDNlcm9vdC5maWx0ZXJfbGlzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTA0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBDbGFzc2lmaWNhdGlvbiBMb29wIGluIEhGU0MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgc3BlY2lmaWMgcHJvYmxlbSBiZWluZyBhZGRyZXNzZWQuIEkgc2VlIHRoaXMgc25pcHBldCBmcm9tIGBzY2hfaGZzYy5jYCBhbmQgaW1tZWRpYXRlbHkgemVybyBpbiBvbiB0aGUgY29yZSBpc3N1ZTogYSBwb3NzaWJsZSBjbGFzc2lmaWNhdGlvbiBsb29wIHdpdGhpbiB0aGUgSEZTQyBzY2hlZHVsZXIuIFRoZSBjb2RlIHN1Z2dlc3RzIGEgY2hlY2sgcmVsYXRlZCB0byBgZmxvd2lkYCBiaW5kaW5ncywgYnlwYXNzaW5nIGEgbGV2ZWwgY2hlY2ssIGFuZCB0aGVuIHdoYXQgYXBwZWFycyB0byBiZSBhIG1lY2hhbmlzbSB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3AuIFRoZSBgZHJpZnQtLSA9PSAwYCBjaGVjayB3aXRoaW4gdGhhdCBgaWZgIHN0YXRlbWVudCBpcyB3aGF0JiMzOTtzIGNhdGNoaW5nIG15IGV5ZSBhcyBhIHBvdGVudGlhbCBsb29wIGJyZWFrZXIsIGJ1dCB0aGUgYHByX3dhcm5fcmF0ZWxpbWl0ZWRgIG91dHB1dCBzaG93cyB0aGF0IHNvbWV0aGluZyBjb3VsZCBoYXZlIGJlZW4gZGV0ZWN0ZWQuCgpCdXQgdGhlIGNvbW1lbnQhIEl04oCZcyB0aGUgY2x1ZSBJJiMzOTttIGxvb2tpbmcgZm9yLiAmIzM0O01pcnJvcmluZyBodGImIzM5O3MgVENfSFRCX01BWERFUFRIIGhlYWRyb29tLiYjMzQ7IFRoZSBtZW50aW9uIG9mIGBodGJgIGlzIGNyaXRpY2FsIGhlcmU7IGl0IGltcGxpZXMgYSBjb21wYXJpc29uIG9yIHBvdGVudGlhbCBib3Jyb3dpbmcgb2YgY29uY2VwdHMgZnJvbSB0aGUgSGllcmFyY2hpY2FsIFRva2VuIEJ1Y2tldCBzY2hlZHVsZXIuIFNpbmNlIEhGU0MgaXMgcmVsYXRlZCwgbGV0JiMzOTtzIHNlZSBob3cgYGh0YmAgaGFuZGxlcyB0aGluZ3MhIEkgbmVlZCB0byBjb25zdWx0IHRoZSBgbmV0L3NjaGVkL3NjaF9odGIuY2AgY29kZSB0byB1bmRlcnN0YW5kIGl0cyBkZXNpZ24gYW5kIGFueSBzdHJhdGVnaWVzIGl0IGVtcGxveXMgdG8gcHJldmVudCBzaW1pbGFyIGlzc3Vlcy4gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwOyB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIHByaW5jaXBsZXMgYW5kIHBvdGVudGlhbCBzaW1pbGFyaXRpZXMgb3IgZGlmZmVyZW5jZXMgaW4gaG93IGBodGJgIGFwcHJvYWNoZXMgdHJhZmZpYyBjbGFzc2lmaWNhdGlvbiBhbmQgbG9vcCBwcmV2ZW50aW9uIGNvdWxkIGlsbHVtaW5hdGUgdGhlIGlzc3VlIGluIEhGU0MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1RDX0hUQl9NQVhERVBUSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2hmc2MuYz0zNTI9Y2Z0cmVlX3VwZGF0ZShzdHJ1Y3QgaGZzY19jbGFzcyAqY2wpXG4tLVxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMzkwLSAqIGJvdW5kIG9uIGNvbnNlY3V0aXZlIG5vbi1kZXNjZW5kaW5nIChsYXRlcmFsIC8gdXB3YXJkKSBob3BzIGluIGFcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjM5MTogKiBjbGFzc2lmeSB3YWxrLCBtaXJyb3JpbmcgaHRiJiMzOTtzIFRDX0hUQl9NQVhERVBUSCBoZWFkcm9vbVxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMzkyLSAqL1xuLS1cbm5ldC9zY2hlZC9zY2hfaHRiLmMtNDktICAgIEVhY2ggY2xhc3MgaXMgYXNzaWduZWQgbGV2ZWwuIExlYWYgaGFzIEFMV0FZUyBsZXZlbCAwIGFuZCByb290XG5uZXQvc2NoZWQvc2NoX2h0Yi5jOjUwOiAgICBjbGFzc2VzIGhhdmUgbGV2ZWwgVENfSFRCX01BWERFUFRILTEuIEludGVyaW9yIG5vZGVzIGhhcyBsZXZlbFxubmV0L3NjaGVkL3NjaF9odGIuYy01MS0gICAgb25lIGxlc3MgdGhhbiB0aGVpciBwYXJlbnQuXG4tLVxubmV0L3NjaGVkL3NjaF9odGIuYz05ND1zdHJ1Y3QgaHRiX2NsYXNzIHtcbi0tXG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTEyNS1cdFx0c3RydWN0IGh0Yl9jbGFzc19sZWFmIHtcbm5ldC9zY2hlZC9zY2hfaHRiLmM6MTI2Olx0XHRcdGludFx0XHRkZWZpY2l0W1RDX0hUQl9NQVhERVBUSF07XG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTEyNy1cdFx0XHRzdHJ1Y3QgUWRpc2NcdCpxO1xuLS1cbm5ldC9zY2hlZC9zY2hfaHRiLmM9MTUwPXN0cnVjdCBodGJfc2NoZWQge1xuLS1cbm5ldC9zY2hlZC9zY2hfaHRiLmMtMTczLVx0LyogdGltZSBvZiBuZWFyZXN0IGV2ZW50IHBlciBsZXZlbCAocm93KSAqL1xubmV0L3NjaGVkL3NjaF9odGIuYzoxNzQ6XHRzNjRcdFx0XHRuZWFyX2V2X2NhY2hlW1RDX0hUQl9NQVhERVBUSF07XG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTE3NS1cbm5ldC9zY2hlZC9zY2hfaHRiLmM6MTc2Olx0aW50XHRcdFx0cm93X21hc2tbVENfSFRCX01BWERFUFRIXTtcbm5ldC9zY2hlZC9zY2hfaHRiLmMtMTc3LVxubmV0L3NjaGVkL3NjaF9odGIuYzoxNzg6XHRzdHJ1Y3QgaHRiX2xldmVsXHRobGV2ZWxbVENfSFRCX01BWERFUFRIXTtcbm5ldC9zY2hlZC9zY2hfaHRiLmMtMTc5LVxuLS1cbm5ldC9zY2hlZC9zY2hfaHRiLmM9MjIwPXN0YXRpYyBzdHJ1Y3QgaHRiX2NsYXNzICpodGJfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG4tLVxubmV0L3NjaGVkL3NjaF9odGIuYy0yNjktXG5uZXQvc2NoZWQvc2NoX2h0Yi5jOjI3MDpcdFx0aWYgKCYjNDM7JiM0Mztob3BzIFx1MDAzZSBUQ19IVEJfTUFYREVQVEgpIHtcbm5ldC9zY2hlZC9zY2hfaHRiLmMtMjcxLVx0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7aHRiOiBjbGFzc2lmeSBsb29wIGRldGVjdGVkLCBkcm9wcGluZyBwYWNrZXRcXG5cJiMzNDspO1xuLS1cbm5ldC9zY2hlZC9zY2hfaHRiLmM9ODIwPXN0YXRpYyBzdHJ1Y3QgaHRiX2NsYXNzICpodGJfbG9va3VwX2xlYWYoc3RydWN0IGh0Yl9wcmlvICpocHJpbywgY29uc3QgaW50IHByaW8pXG4tLVxubmV0L3NjaGVkL3NjaF9odGIuYy04MjYtXHRcdHUzMiAqcGlkO1xubmV0L3NjaGVkL3NjaF9odGIuYzo4Mjc6XHR9IHN0a1tUQ19IVEJfTUFYREVQVEhdLCAqc3AgPSBzdGs7XG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTgyOC1cbi0tXG5uZXQvc2NoZWQvc2NoX2h0Yi5jPTk0NT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmh0Yl9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuLS1cbm5ldC9zY2hlZC9zY2hfaHRiLmMtOTY5LVxubmV0L3NjaGVkL3NjaF9odGIuYzo5NzA6XHRmb3IgKGxldmVsID0gMDsgbGV2ZWwgXHUwMDNjIFRDX0hUQl9NQVhERVBUSDsgbGV2ZWwmIzQzOyYjNDM7KSB7XG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTk3MS1cdFx0LyogY29tbW9uIGNhc2Ugb3B0aW1pemF0aW9uIC0gc2tpcCBldmVudCBoYW5kbGVyIHF1aWNrbHkgKi9cbi0tXG5uZXQvc2NoZWQvc2NoX2h0Yi5jPTE3NjU9c3RhdGljIGludCBodGJfY2hhbmdlX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZCxcbi0tXG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTE5NjUtXHRcdFx0cGFyZW50LVx1MDAzZWxldmVsID0gKHBhcmVudC1cdTAwM2VwYXJlbnQgPyBwYXJlbnQtXHUwMDNlcGFyZW50LVx1MDAzZWxldmVsXG5uZXQvc2NoZWQvc2NoX2h0Yi5jOjE5NjY6XHRcdFx0XHRcdCA6IFRDX0hUQl9NQVhERVBUSCkgLSAxO1xubmV0L3NjaGVkL3NjaF9odGIuYy0xOTY3LVx0XHRcdG1lbXNldChcdTAwMjZwYXJlbnQtXHUwMDNlaW5uZXIsIDAsIHNpemVvZihwYXJlbnQtXHUwMDNlaW5uZXIpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1ODgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGh0Yl9jbGFzc2lmeWAqKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjbGFzc2lmaWNhdGlvbiBwcm9jZXNzIHdpdGhpbiB0aGUgSGllcmFyY2hpY2FsIFRva2VuIEJ1Y2tldCAoSFRCKSBzY2hlZHVsZXIuIEkmIzM5O20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgYHNjaF9odGIuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBhaW1pbmcgZm9yIGxpbmVzIDIyMCB0byAyODAuIEkgZXhwZWN0IHRoaXMgc2VjdGlvbiB0byBjb250YWluIHRoZSBjb3JlIGxvZ2ljIGZvciBob3cgaW5jb21pbmcgcGFja2V0cyBhcmUgY2F0ZWdvcml6ZWQgYW5kIGFzc2lnbmVkIHRvIHRoZSBhcHByb3ByaWF0ZSBIVEIgY2xhc3MuIEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgZXNzZW50aWFsIGZ1bmN0aW9uIGNhbGxzLCBsaWtlbHkgZGVhbGluZyB3aXRoIHBhY2tldCBtZXRhZGF0YSwgY2xhc3MgbG9va3VwLCBhbmQgbWF5YmUgZXZlbiBzb21lIGJhc2ljIHJhdGUgbGltaXRpbmcgY29uc2lkZXJhdGlvbnMuIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgdW5kZXIgdGhlIGhvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9odGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjIwOlx0c3RhdGljIHN0cnVjdCBodGJfY2xhc3MgKmh0Yl9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbiAyMjE6XHRcdFx0XHRcdCAgICAgIGludCAqcWVycilcbiAyMjI6XHR7XG4gMjIzOlx0XHRzdHJ1Y3QgaHRiX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpO1xuIDIyNDpcdFx0c3RydWN0IGh0Yl9jbGFzcyAqY2w7XG4gMjI1Olx0XHRzdHJ1Y3QgdGNmX3Jlc3VsdCByZXM7XG4gMjI2Olx0XHRzdHJ1Y3QgdGNmX3Byb3RvICp0Y2Y7XG4gMjI3Olx0XHR1bnNpZ25lZCBpbnQgaG9wcyA9IDA7XG4gMjI4Olx0XHRpbnQgcmVzdWx0O1xuIDIyOTpcdFxuIDIzMDpcdFx0LyogYWxsb3cgdG8gc2VsZWN0IGNsYXNzIGJ5IHNldHRpbmcgc2tiLVx1MDAzZXByaW9yaXR5IHRvIHZhbGlkIGNsYXNzaWQ7XG4gMjMxOlx0XHQgKiBub3RlIHRoYXQgbmZtYXJrIGNhbiBiZSB1c2VkIHRvbyBieSBhdHRhY2hpbmcgZmlsdGVyIGZ3IHdpdGggbm9cbiAyMzI6XHRcdCAqIHJ1bGVzIGluIGl0XG4gMjMzOlx0XHQgKi9cbiAyMzQ6XHRcdGlmIChza2ItXHUwMDNlcHJpb3JpdHkgPT0gc2NoLVx1MDAzZWhhbmRsZSlcbiAyMzU6XHRcdFx0cmV0dXJuIEhUQl9ESVJFQ1Q7XHQvKiBYOjAgKGRpcmVjdCBmbG93KSBzZWxlY3RlZCAqL1xuIDIzNjpcdFx0Y2wgPSBodGJfZmluZChza2ItXHUwMDNlcHJpb3JpdHksIHNjaCk7XG4gMjM3Olx0XHRpZiAoY2wpIHtcbiAyMzg6XHRcdFx0aWYgKGNsLVx1MDAzZWxldmVsID09IDApXG4gMjM5Olx0XHRcdFx0cmV0dXJuIGNsO1xuIDI0MDpcdFx0XHQvKiBTdGFydCB3aXRoIGlubmVyIGZpbHRlciBjaGFpbiBpZiBhIG5vbi1sZWFmIGNsYXNzIGlzIHNlbGVjdGVkICovXG4gMjQxOlx0XHRcdHRjZiA9IHJjdV9kZXJlZmVyZW5jZV9iaChjbC1cdTAwM2VmaWx0ZXJfbGlzdCk7XG4gMjQyOlx0XHR9IGVsc2Uge1xuIDI0MzpcdFx0XHR0Y2YgPSByY3VfZGVyZWZlcmVuY2VfYmgocS1cdTAwM2VmaWx0ZXJfbGlzdCk7XG4gMjQ0Olx0XHR9XG4gMjQ1Olx0XG4gMjQ2Olx0XHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcbiAyNDc6XHRcdHdoaWxlICh0Y2YgXHUwMDI2XHUwMDI2IChyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCB0Y2YsIFx1MDAyNnJlcywgZmFsc2UpKSBcdTAwM2U9IDApIHtcbiAyNDg6XHQjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG4gMjQ5Olx0XHRcdHN3aXRjaCAocmVzdWx0KSB7XG4gMjUwOlx0XHRcdGNhc2UgVENfQUNUX1FVRVVFRDpcbiAyNTE6XHRcdFx0Y2FzZSBUQ19BQ1RfU1RPTEVOOlxuIDI1MjpcdFx0XHRjYXNlIFRDX0FDVF9UUkFQOlxuIDI1MzpcdFx0XHRcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfU1RPTEVOO1xuIDI1NDpcdFx0XHRcdGZhbGx0aHJvdWdoO1xuIDI1NTpcdFx0XHRjYXNlIFRDX0FDVF9TSE9UOlxuIDI1NjpcdFx0XHRcdHJldHVybiBOVUxMO1xuIDI1NzpcdFx0XHR9XG4gMjU4Olx0I2VuZGlmXG4gMjU5Olx0XHRcdGNsID0gKHZvaWQgKilyZXMuY2xhc3M7XG4gMjYwOlx0XHRcdGlmICghY2wpIHtcbiAyNjE6XHRcdFx0XHRpZiAocmVzLmNsYXNzaWQgPT0gc2NoLVx1MDAzZWhhbmRsZSlcbiAyNjI6XHRcdFx0XHRcdHJldHVybiBIVEJfRElSRUNUO1x0LyogWDowIChkaXJlY3QgZmxvdykgKi9cbiAyNjM6XHRcdFx0XHRjbCA9IGh0Yl9maW5kKHJlcy5jbGFzc2lkLCBzY2gpO1xuIDI2NDpcdFx0XHRcdGlmICghY2wpXG4gMjY1Olx0XHRcdFx0XHRicmVhaztcdC8qIGZpbHRlciBzZWxlY3RlZCBpbnZhbGlkIGNsYXNzaWQgKi9cbiAyNjY6XHRcdFx0fVxuIDI2NzpcdFx0XHRpZiAoIWNsLVx1MDAzZWxldmVsKVxuIDI2ODpcdFx0XHRcdHJldHVybiBjbDtcdC8qIHdlIGhpdCBsZWFmOyByZXR1cm4gaXQgKi9cbiAyNjk6XHRcbiAyNzA6XHRcdFx0aWYgKCYjNDM7JiM0Mztob3BzIFx1MDAzZSBUQ19IVEJfTUFYREVQVEgpIHtcbiAyNzE6XHRcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O2h0YjogY2xhc3NpZnkgbG9vcCBkZXRlY3RlZCwgZHJvcHBpbmcgcGFja2V0XFxuXCYjMzQ7KTtcbiAyNzI6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiAyNzM6XHRcdFx0fVxuIDI3NDpcdFx0XHQvKiB3ZSBoYXZlIGdvdCBpbm5lciBjbGFzczsgYXBwbHkgaW5uZXIgZmlsdGVyIGNoYWluICovXG4gMjc1Olx0XHRcdHRjZiA9IHJjdV9kZXJlZmVyZW5jZV9iaChjbC1cdTAwM2VmaWx0ZXJfbGlzdCk7XG4gMjc2Olx0XHR9XG4gMjc3Olx0XHQvKiBjbGFzc2lmaWNhdGlvbiBmYWlsZWQ7IHRyeSB0byB1c2UgZGVmYXVsdCBjbGFzcyAqL1xuIDI3ODpcdFx0Y2wgPSBodGJfZmluZChUQ19IX01BS0UoVENfSF9NQUooc2NoLVx1MDAzZWhhbmRsZSksIHEtXHUwMDNlZGVmY2xzKSwgc2NoKTtcbiAyNzk6XHRcdGlmICghY2wgfHwgY2wtXHUwMDNlbGV2ZWwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODAzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkhGU0MgQ2xhc3NpZmljYXRpb24gTG9vcCBEZXRlY3Rpb246IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBoZnNjX2NsYXNzaWZ5YCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyB0cnlpbmcgdG8gcHJldmVudCBjbGFzc2lmaWNhdGlvbiBsb29wcywgYW5kIHRoYXQmIzM5O3Mgc21hcnQuIFRoZSBjb2RlIHVzZXMgdGhpcyBgZHJpZnRgIHZhcmlhYmxlIGFzIGEgY291bnRlci4gTGV0IG1lIHNlZS4uLiBgZHJpZnQgPSBIRlNDX0NMQVNTSUZZX01BWF9EUklGVDtgIC0gb2theSwgaXQmIzM5O3MgaW5pdGlhbGl6ZWQgdG8gOC4gVGhlbiwgd2l0aGluIHRoZSBtYWluIGxvb3AsIHRoZXJlJiMzOTtzIHRoaXMgY2hlY2s6IGBpZiAoY2wtJmd0O2xldmVsICZndDs9IGhlYWQtJmd0O2xldmVsICZhbXA7JmFtcDsgZHJpZnQtLSA9PSAwKWAuCgpBaGEhIGBkcmlmdGAgaXMgYW4gYHVuc2lnbmVkIGludGAsIHdoaWNoIGlzIGtleS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhczogd2hlbiBgY2wtJmd0O2xldmVsICZndDs9IGhlYWQtJmd0O2xldmVsYCBhbmQgYGRyaWZ0YCByZWFjaGVzIHplcm8sIGl0IHVuZGVyZmxvd3MgdG8gYFVJTlRfTUFYYCwgYnJlYWtpbmcgdGhlIGxvb3AuIEJ1dCwgYWN0dWFsbHksIHRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaGFuZGxlZC4gU28gdGhhdCYjMzk7cyBob3cgaXQgd29ya3MgYXQgbGVhc3QuCgpCdXQgaG9sZCBvbiEgV2hhdCBpZiBgY2wtJmd0O2xldmVsYCBpcyAqbGVzcyogdGhhbiBgaGVhZC0mZ3Q7bGV2ZWxgPyBUaGVuIGBkcmlmdGAgZG9lc24mIzM5O3QgZ2V0IGRlY3JlbWVudGVkISBDb3VsZCB0aGlzIGxlYWQgdG8gaW5maW5pdGUgbG9vcGluZyB3aXRoIGFsdGVybmF0aW5nIGxldmVscywgbGlrZSAxLSZndDsyLSZndDsxLSZndDsyPyBXaGVuIHRoZSBoZWFkIGlzIGxldmVsIDIgYW5kIHRoZSBjdXJyZW50IGNsYXNzIGlzIGxldmVsIDEsIHRoZSBjb25kaXRpb24gaXMgZmFsc2UsIGBkcmlmdGAgZG9lc24mIzM5O3QgY2hhbmdlLiBCdXQgd2hlbiBoZWFkIGlzIGxldmVsIDEsIGFuZCB0aGUgY3VycmVudCBjbGFzcyBpcyBsZXZlbCAyLCB0aGUgY29uZGl0aW9uIGlzIHRydWUsIGFuZCBgZHJpZnRgIGRlY3JlbWVudHMuIEFmdGVyIG5pbmUgaG9wcyBsaWtlIHRoYXQsIGBkcmlmdGAgd2lsbCBoaXQgemVybywgYW5kIHRoZSBsb29wIGlzIHRlcm1pbmF0ZWQuIE9rYXksIHNvIHRoYXQgc29ydCBvZiBsb29wIGlzIGNvdmVyZWQuCgpOb3csIHdoYXQgYWJvdXQgbG9vcHMgKndpdGhpbiogdGhlIHNhbWUgbGV2ZWw/IFNheSwgMS0mZ3Q7MS0mZ3Q7MS4gSW4gdGhhdCBjYXNlLCBgY2wtJmd0O2xldmVsICZndDs9IGhlYWQtJmd0O2xldmVsYCBpcyBhbHdheXMgdHJ1ZSAoMSAmZ3Q7PSAxKSwgYW5kIGBkcmlmdGAgaXMgZGVjcmVtZW50ZWQgZWFjaCB0aW1lLiBUaGF0IG1ha2VzIHNlbnNlLCB3ZSYjMzk7cmUgbm90IGFsbG93aW5nIGEgbG9vcC4KClNvLCBva2F5LiBXZSBoYXZlIHRoaXMgbG9vcCBkZXRlY3Rpb24gbWVjaGFuaXNtLiBXaGF0IGFib3V0IGxvb3BzIGdvaW5nICpkb3dud2FyZHMqPyBDYW4gYSBjbGFzc2lmaWNhdGlvbiBkZXNjZW5kIGluZmluaXRlbHk/IFdpdGggdGhlIEhGU0Mgc2NoZWR1bGVyLCBjYW4gd2UgYnVpbGQgYW4gaW5maW5pdGVseSBkZWVwIHRyZWU/IE5vLCBIRlNDIHRyZWVzIGFyZSBmaW5pdGUuIEJ1dCwgd2FpdC4uLiBjb3VsZCBhIGZpbHRlciBzb21laG93IGJlICpib3VuZCogdG8gYW4gYW5jZXN0b3Igb3Igc29tZXRoaW5nPyBIbW1tLCBubywgbGV2ZWxzIGFyZSBvcmRlcmVkLCBzbyBhbmNlc3RvcnMgd291bGQgaGF2ZSBoaWdoZXIgbGV2ZWxzICh0aGUgcm9vdCBoYXMgdGhlIGhpZ2hlc3QgbGV2ZWwsIG9yIGxldmVsIDApLgoKTGV0JiMzOTtzIGRpZyBhIGJpdCBkZWVwZXIgaW50byB0aGlzIGBsZXZlbGAgY29uY2VwdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGBsZXZlbGAgZmllbGQgaXMgdXNlZCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIHN0cnVjdHVyZSBvZiB0aGUgSEZTQyBzY2hlZHVsZXIuIFRpbWUgdG8gZ3JlcCBmb3IgYC0mZ3Q7bGV2ZWxgIHRocm91Z2hvdXQgdGhlIGBuZXQvc2NoZWQvc2NoX2hmc2MuY2AgY29kZSB0byBzZWUgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7LVx1MDAzZWxldmVsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9oZnNjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9oZnNjLmM9MzA3PXZ0dHJlZV9nZXRfbWludnQoc3RydWN0IGhmc2NfY2xhc3MgKmNsLCB1NjQgY3VyX3RpbWUpXG4tLVxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMzEyLVxubmV0L3NjaGVkL3NjaF9oZnNjLmM6MzEzOlx0d2hpbGUgKGNsLVx1MDAzZWxldmVsIFx1MDAzZSAwKSB7XG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0zMTQtXHRcdGNsID0gdnR0cmVlX2ZpcnN0Zml0KGNsLCBjdXJfdGltZSk7XG4tLVxubmV0L3NjaGVkL3NjaF9oZnNjLmM9ODQ1PWhmc2NfYWRqdXN0X2xldmVscyhzdHJ1Y3QgaGZzY19jbGFzcyAqY2wpXG4tLVxubmV0L3NjaGVkL3NjaF9oZnNjLmMtODUyLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIFx1MDAyNmNsLVx1MDAzZWNoaWxkcmVuLCBzaWJsaW5ncykge1xubmV0L3NjaGVkL3NjaF9oZnNjLmM6ODUzOlx0XHRcdGlmIChwLVx1MDAzZWxldmVsIFx1MDAzZT0gbGV2ZWwpXG5uZXQvc2NoZWQvc2NoX2hmc2MuYzo4NTQ6XHRcdFx0XHRsZXZlbCA9IHAtXHUwMDNlbGV2ZWwgJiM0MzsgMTtcbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTg1NS1cdFx0fVxubmV0L3NjaGVkL3NjaF9oZnNjLmM6ODU2Olx0XHRXUklURV9PTkNFKGNsLVx1MDAzZWxldmVsLCBsZXZlbCk7XG5uZXQvc2NoZWQvc2NoX2hmc2MuYy04NTctXHR9IHdoaWxlICgoY2wgPSBjbC1cdTAwM2VjbF9wYXJlbnQpICE9IE5VTEwpO1xuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jPTkxOD1oZnNjX2NoYW5nZV9jbGFzcyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGNsYXNzaWQsIHUzMiBwYXJlbnRpZCxcbi0tXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMDg0LVx0bGlzdF9hZGRfdGFpbChcdTAwMjZjbC1cdTAwM2VzaWJsaW5ncywgXHUwMDI2cGFyZW50LVx1MDAzZWNoaWxkcmVuKTtcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjEwODU6XHRpZiAocGFyZW50LVx1MDAzZWxldmVsID09IDApXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMDg2LVx0XHRxZGlzY19wdXJnZV9xdWV1ZShwYXJlbnQtXHUwMDNlcWRpc2MpO1xuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jPTExMDk9aGZzY19kZWxldGVfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnLFxuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTExMTQtXG5uZXQvc2NoZWQvc2NoX2hmc2MuYzoxMTE1Olx0aWYgKGNsLVx1MDAzZWxldmVsIFx1MDAzZSAwIHx8IHFkaXNjX2NsYXNzX2luX3VzZShcdTAwMjZjbC1cdTAwM2VjbF9jb21tb24pIHx8XG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMTE2LVx0ICAgIGNsID09IFx1MDAyNnEtXHUwMDNlcm9vdCkge1xuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jPTExMzY9aGZzY19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKVxuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTExNDYtXHQgICAgKGNsID0gaGZzY19maW5kX2NsYXNzKHNrYi1cdTAwM2Vwcmlvcml0eSwgc2NoKSkgIT0gTlVMTClcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjExNDc6XHRcdGlmIChjbC1cdTAwM2VsZXZlbCA9PSAwKVxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTE0OC1cdFx0XHRyZXR1cm4gY2w7XG4tLVxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTE3MC1cdFx0XHRcdGJyZWFrOyAvKiBmaWx0ZXIgc2VsZWN0ZWQgaW52YWxpZCBjbGFzc2lkICovXG5uZXQvc2NoZWQvc2NoX2hmc2MuYzoxMTcxOlx0XHRcdGlmIChjbC1cdTAwM2VsZXZlbCBcdTAwM2U9IGhlYWQtXHUwMDNlbGV2ZWwpXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMTcyLVx0XHRcdFx0YnJlYWs7IC8qIGZpbHRlciBtYXkgb25seSBwb2ludCBkb3dud2FyZHMgKi9cbi0tXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMTc0LVxubmV0L3NjaGVkL3NjaF9oZnNjLmM6MTE3NTpcdFx0aWYgKGNsLVx1MDAzZWxldmVsID09IDApXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMTc2LVx0XHRcdHJldHVybiBjbDsgLyogaGl0IGxlYWYgY2xhc3MgKi9cbi0tXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMTgyLVx0XHQgKi9cbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjExODM6XHRcdGlmIChjbC1cdTAwM2VsZXZlbCBcdTAwM2U9IGhlYWQtXHUwMDNlbGV2ZWwgXHUwMDI2XHUwMDI2IGRyaWZ0LS0gPT0gMCkge1xubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTE4NC1cdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O2hmc2M6IGNsYXNzaWZ5IGxvb3AgZGV0ZWN0ZWQsIGRyb3BwaW5nIHBhY2tldFxcblwmIzM0Oyk7XG4tLVxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTE5NS1cdFx0XHRcdCAgICAgICBSRUFEX09OQ0UocS1cdTAwM2VkZWZjbHMpKSwgc2NoKTtcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjExOTY6XHRpZiAoY2wgPT0gTlVMTCB8fCBjbC1cdTAwM2VsZXZlbCBcdTAwM2UgMClcbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTExOTctXHRcdHJldHVybiBOVUxMO1xuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jPTEyMDM9aGZzY19ncmFmdF9jbGFzcyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBhcmcsIHN0cnVjdCBRZGlzYyAqbmV3LFxuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTEyMDctXG5uZXQvc2NoZWQvc2NoX2hmc2MuYzoxMjA4Olx0aWYgKGNsLVx1MDAzZWxldmVsIFx1MDAzZSAwKVxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTIwOS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L3NjaGVkL3NjaF9oZnNjLmM9MTIyMj1oZnNjX2NsYXNzX2xlYWYoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTEyMjUtXG5uZXQvc2NoZWQvc2NoX2hmc2MuYzoxMjI2Olx0aWYgKGNsLVx1MDAzZWxldmVsID09IDApXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMjI3LVx0XHRyZXR1cm4gY2wtXHUwMDNlcWRpc2M7XG4tLVxubmV0L3NjaGVkL3NjaF9oZnNjLmM9MTI1Mz1oZnNjX2JpbmRfdGNmKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIHBhcmVudCwgdTMyIGNsYXNzaWQpXG4tLVxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTI1OC1cdGlmIChjbCAhPSBOVUxMKSB7XG5uZXQvc2NoZWQvc2NoX2hmc2MuYzoxMjU5Olx0XHRpZiAocCAhPSBOVUxMIFx1MDAyNlx1MDAyNiBwLVx1MDAzZWxldmVsIFx1MDAzYz0gY2wtXHUwMDNlbGV2ZWwpXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMjYwLVx0XHRcdHJldHVybiAwO1xuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jPTEzMjY9aGZzY19kdW1wX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMzM0LVx0dGNtLVx1MDAzZXRjbV9oYW5kbGUgPSBjbC1cdTAwM2VjbF9jb21tb24uY2xhc3NpZDtcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjEzMzU6XHRpZiAoY2wtXHUwMDNlbGV2ZWwgPT0gMClcbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTEzMzYtXHRcdHRjbS1cdTAwM2V0Y21faW5mbyA9IGNsLVx1MDAzZXFkaXNjLVx1MDAzZWhhbmRsZTtcbi0tXG5uZXQvc2NoZWQvc2NoX2hmc2MuYz0xMzUxPWhmc2NfZHVtcF9jbGFzc19zdGF0cyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBhcmcsXG4tLVxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTM1OC1cdHFkaXNjX3FzdGF0c19xbGVuX2JhY2tsb2coY2wtXHUwMDNlcWRpc2MsIFx1MDAyNnFsZW4sIFx1MDAyNmNsLVx1MDAzZXFzdGF0cy5iYWNrbG9nKTtcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjEzNTk6XHR4c3RhdHMubGV2ZWwgICA9IFJFQURfT05DRShjbC1cdTAwM2VsZXZlbCk7XG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMzYwLVx0eHN0YXRzLnBlcmlvZCAgPSBSRUFEX09OQ0UoY2wtXHUwMDNlY2xfdnRwZXJpb2QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY1OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDExOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggRXZhbHVhdGlvbjogSEZTQyBDbGFzc2lmaWNhdGlvbiBMb29wIFByZXZlbnRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmcm9tIGFuIGV4cGVydCBwZXJzcGVjdGl2ZS4gSSYjMzk7bSBsb29raW5nIGF0IGBoZnNjX2JpbmRfdGNmYCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBjbGFzcyBsZXZlbHMgd2l0aGluIHRoZSBIRlNDIHFkaXNjLiBUaGUga2V5IGlzc3VlIGlzIHRoaXMgcG90ZW50aWFsIGRyaWZ0IGluIGNsYXNzIGxldmVscyBhZnRlciBiaW5kaW5nLCBzcGVjaWZpY2FsbHkgaG93IGBjbC0mZ3Q7bGV2ZWxgIGNhbiBiZSBhZGp1c3RlZCBieSBgaGZzY19hZGp1c3RfbGV2ZWxzYCBwb3N0LWJpbmRpbmcuCgpJbml0aWFsbHksIGBwLSZndDtsZXZlbCAmbHQ7PSBjbC0mZ3Q7bGV2ZWxgIGFjdHMgYXMgYSBzYWZlZ3VhcmQgZHVyaW5nIHRoZSBiaW5kIG9wZXJhdGlvbi4gSG93ZXZlciwgcG9zdC1iaW5kLCB0aGUgbGV2ZWwgb2YgYGNsYCBjYW4gY2hhbmdlLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBwcm9ibGVtLiBQcmV2aW91c2x5LCBpbiBgaGZzY19jbGFzc2lmeWAsIGlmIGByZXMuY2xhc3NgIHdhcyBub24tTlVMTCAoaW5kaWNhdGluZyBhIGRpcmVjdCBiaW5kIHdpdGgsIHNheSwgYSBmbG93aWQpLCB0aGUgbGV2ZWwgY2hlY2sgYGlmIChjbC0mZ3Q7bGV2ZWwgJmd0Oz0gaGVhZC0mZ3Q7bGV2ZWwpIGJyZWFrO2Agd2FzIGJ5cGFzc2VkLiBUaGlzIGlzIGJhZC4gVGhpcyBtZWFudCB0aGF0IGlmIGxldmVscyBkcmlmdGVkIGFmdGVyIHRoZSBiaW5kLCB0aGVyZSB3YXMgbm90aGluZyB0byBwcmV2ZW50IHVzIGZyb20gZW50ZXJpbmcgYSBjbGFzc2lmaWNhdGlvbiBsb29wIGJlY2F1c2UgdGhlIGNvbXBhcmlzb24gYGNsLSZndDtsZXZlbCAmZ3Q7PSBoZWFkLSZndDtsZXZlbGAgd2FzIHNraXBwZWQuCgpUaGlzIGxlYWRzIGRpcmVjdGx5IHRvIHRoZSBjb3JlIHByb2JsZW06IGEgcG90ZW50aWFsIGluZmluaXRlIGxvb3Agd2l0aGluIGBoZnNjX2NsYXNzaWZ5YCBkdXJpbmcgcGFja2V0IGVucXVldWUsIHVsdGltYXRlbHkgdHJpZ2dlcmluZyBhIHNvZnQgbG9ja3VwLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgd2l0aCB0aGUgYEhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUYCBjb3VudGVyLCBhY3RpbmcgYXMgYSBmYWlsc2FmZSBhbmQgbG9nZ2luZyBhIHdhcm5pbmcuIFRoZSBwYXRjaCBhZGRzIGEgdGVybWluYXRpb24gdG8gdGhpcyBjbGFzc2lmaWNhdGlvbiBsb29wLgoKTm93LCBsZXQmIzM5O3MgYXNzZXNzIHRoZSBmdXp6aW5nIHBvdGVudGlhbC4KCjEuICAqKlJlYWNoYWJpbGl0eToqKiBBYnNvbHV0ZWx5IHJlYWNoYWJsZSEgSEZTQyBpcyBhIHN0YW5kYXJkIHFkaXNjLCBjb25maWd1cmVkIHZpYSBuZXRsaW5rIChydG5ldGxpbmspLCBhbmQgdGh1cyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHdpdGggdGhlIGBDQVBfTkVUX0FETUlOYCBjYXBhYmlsaXR5LCBtZWFuaW5nIGl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSB1c2luZyBsb29wYmFjaywgZHVtbXksIG9yIHZldGggaW50ZXJmYWNlcy4gUGFja2V0IGVucXVldWUgdGhyb3VnaCBzb2NrZXRzIChgc2VuZHRvYCwgYHNlbmRtc2dgLCBldGMuKSBoaXRzIGBoZnNjX2VucXVldWVgIGFuZCB1bHRpbWF0ZWx5IGBoZnNjX2NsYXNzaWZ5YC4KCjIuICAqKkNvcmUgVHJpYWdlIFBoaWxvc29waHk6KioKICAgICogICBSZWFjaGFibGU/IFllcy4KICAgICogICBDb3JlIFN1YnN5c3RlbXM/IFRoaXMgcGF0Y2ggZGlyZWN0bHkgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcsIHNwZWNpZmljYWxseSBwYWNrZXQgc2NoZWR1bGluZyAoYG5ldC9zY2hlZGApLgogICAgKiAgIE5ldy9Nb2RpZmllZCBDaGVja3M/IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY3JpdGljYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSBjbGFzc2lmaWNhdGlvbiBsb29wIHRlcm1pbmF0aW9uIGFuZCBlcnJvciBoYW5kbGluZywgbWFraW5nIHRoZSBwYXRjaCBldmVuIG1vcmUgaW50ZXJlc3RpbmcuCiAgICAqICAgTmVnYXRpdmUgQ3JpdGVyaWE/IE5vOiBrZXJuZWwgY29kZSwgc3RydWN0dXJhbGx5IHJlYWNoYWJsZSBhbmQgZXhlY3V0aW9uIHBhdGggcmVhY2hhYmxlIQoKKipUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBXb3J0aEZ1enppbmcuKiogVGhlIG1vZGlmaWNhdGlvbnMgZGlyZWN0bHkgaW1wYWN0IGEgY3JpdGljYWwgZGF0YSBwYXRoIGFuZCBlcnJvciBoYW5kbGluZyB3aXRoaW4gYSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50LgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gVG8gZWZmZWN0aXZlbHkgdGFyZ2V0IHRoaXMsIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBIRlNDIHFkaXNjIGlzIGVuYWJsZWQsIGFsb25nIHdpdGggdGhlIHJlbGV2YW50IGNsYXNzaWZpZXIgYW5kIGFjdGlvbiBzdXBwb3J0LCBzaW5jZSBjbGFzc2lmaWNhdGlvbiBhbmQgYXNzb2NpYXRlZCBmaWx0ZXJzIGFyZSBpbnRlZ3JhbCB0byB0aGUgYnVnOgoKMS4gICoqYE5FVF9TQ0hfSEZTQ2A6KiogVGhpcyBpcyB0aGUgcHJpbWFyeSBjb25maWcsIHNvdXJjZWQgZnJvbSBgbmV0L3NjaGVkL0tjb25maWdgLiBJdCYjMzk7cyBhIHRyaXN0YXRlLCBhbmQgcmVxdWlyZXMgYE5FVF9TQ0hFRGAgdG8gYmUgZW5hYmxlZCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBORVRgLgoyLiAgKipgTkVUX1NDSEVEYDoqKiBSZXF1aXJlZCwgZGVwZW5kcyBvbiBgTkVUYC4KMy4gICoqYENPTkZJR19ORVRfQ0xTX0FDVGA6KiogVGhpcyBpcyBuZWVkZWQgZm9yIGNsYXNzaWZpZXJzIGFuZCBhY3Rpb25zLCB0byBjbGFzc2lmeSBhbmQgYXBwbHkgYSBkaWZmZXJlbnQgYWN0aW9uIHRvIGEgcGFja2V0IGJhc2VkIG9uIGEgbWF0Y2hpbmcgZmlsdGVyLgo0LiAgKipgTkVUX0NMU19VMzJgIG9yIHNpbWlsYXIgZmlsdGVycyAoYE5FVF9DTFNfQkFTSUNgLCBgTkVUX0NMU19BQ1RgKSoqOiB0byBtYWtlIHRoZSBjbGFzc2lmaWNhdGlvbiBsb2dpYyBpbiBgaGZzY19jbGFzc2lmeWAgcnVuLgoKVGhlcmVmb3JlLCB3ZSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYE5FVGAsIGBORVRfU0NIRURgLCBgTkVUX1NDSF9IRlNDYCwgYE5FVF9DTFNfQUNUYCwgYW5kIGEgc3VpdGFibGUgZmlsdGVyIGxpa2UgYE5FVF9DTFNfVTMyYC4gV2l0aCB0aGF0LCB3ZSYjMzk7cmUgc2V0IHRvIGJlZ2luIGEgZnV6emluZyBjYW1wYWlnbiB0byB0YXJnZXQgdGhpcyBIRlNDIHFkaXNjLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0NMU19BQ1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9NjkwPWNvbmZpZyBORVRfRU1BVENIX0lQVFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTcwMS1cbm5ldC9zY2hlZC9LY29uZmlnOjcwMjpjb25maWcgTkVUX0NMU19BQ1Rcbm5ldC9zY2hlZC9LY29uZmlnLTcwMy1cdGJvb2wgXCYjMzQ7QWN0aW9uc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc3NAoJCQkJCQkJb3V0cHV0OiAxODAKCQkJCQkJCXRob3VnaHRzOiA4MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gSEZTQyBUcmFmZmljIENvbnRyb2wgZm9yIEZ1enppbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgZnV6emluZyB0aGUgSEZTQyAoSGllcmFyY2hpY2FsIEZhaXIgU2VydmljZSBDdXJ2ZSkgdHJhZmZpYyBjb250cm9sIHNjaGVkdWxlci4gRmlyc3QgdGhpbmdzIGZpcnN0LCB3ZSBuZWVkIHRvIGNvbmZpcm0gb3VyIGtlcm5lbCBjb25maWdzIGFyZSBpbiBwbGFjZTogYE5FVF9TQ0hFRGAsIGBORVRfU0NIX0hGU0NgLCBhbmQgYE5FVF9DTFNfQUNUYCDigJMgY2hlY2suCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIHRoZSBmdXp6ZXIuIFRoZSBndWlkaW5nIHByaW5jaXBsZSBmcm9tIFNlY3Rpb24gNCBvZiBvdXIgZG9jdW1lbnQgaXMga2V5IGhlcmU6IGF2b2lkIGdlbmVyaWMgZnVuY3Rpb25zLCB0YXJnZXQgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnkgcG9pbnRzLiBXZSYjMzk7cmUgaW50ZXJlc3RlZCBpbiB0aGUgY29kZSBkaXJlY3RseSB0b3VjaGVkIGJ5IHRoZSBwYXRjaC4KCkxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gYG5ldC9zY2hlZC9zY2hfaGZzYy5jYC4gVGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgaXMgYGhmc2NfY2xhc3NpZnlgLCB0aGUgZnVuY3Rpb24gZGlyZWN0bHkgbW9kaWZpZWQgYnkgdGhlIHBhdGNoLiBCdXQgbGV0JiMzOTtzIGdvIGRlZXBlci4gYGhmc2NfZW5xdWV1ZWAgaXMgdGhlIGRpcmVjdCBjYWxsZXIgb2YgYGhmc2NfY2xhc3NpZnlgIGluIHRoZSBxdWV1aW5nIHBhdGgg4oCTIGNyaXRpY2FsISBUaGVuLCBgaGZzY19iaW5kX3RjZmAgYmluZHMgdGhlIGZpbHRlciwgd2hpY2ggbWlnaHQgbGVhZCB1cyBkb3duIHRoaXMgcGF0aC4gVGhlbiBgaGZzY19jaGFuZ2VfY2xhc3NgIGFuZCBgaGZzY19pbml0X3FkaXNjYCAvIGBoZnNjX2Rlc3Ryb3lfcWRpc2NgIGFyZSB0aGVyZS4KCkNhbiB3ZSBsaXN0IGBoZnNjX2NsYXNzaWZ5YCBhbmQgYGhmc2NfZW5xdWV1ZWA/IEFic29sdXRlbHkuIGBoZnNjX2NsYXNzaWZ5YCBoYW5kbGVzIHBhY2tldCBjbGFzc2lmaWNhdGlvbiwgYW5kIGBoZnNjX2VucXVldWVgIGhhbmRsZXMgdGhlIGVucXVldWUgcGF0aC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBgaGZzY19jbGFzc2lmeWAgaXNuJiMzOTt0IGlubGluZWQgLSBhbmQgaXQmIzM5O3Mgc3RhdGljIG9uIGxpbmUgMTEzNTogYHN0YXRpYyBzdHJ1Y3QgaGZzY19jbGFzcyAqIGhmc2NfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsIGludCAqcWVycilgLiBJdCYjMzk7cyBub3QgaW5saW5lLCBzbyBpdCYjMzk7cyBsaWtlbHkgcHJlc2VudCBpbiB0aGUgc3ltYm9sIHRhYmxlIGluIGFueSBzYW5lIGJ1aWxkLiBFdmVuIGlmIGl0JiMzOTtzIGlubGluZWQgaW4gdGhlIGZ1dHVyZSwgd2Ugc3RpbGwgaGF2ZSBgaGZzY19lbnF1ZXVlYCB3aGljaCB3aWxsIGJlIHByZXNlbnQuIFRoZXJlZm9yZSwgYGhmc2NfY2xhc3NpZnlgIGFuZCBgaGZzY19lbnF1ZXVlYCAoYW5kIHBlcmhhcHMgYGhmc2NfYmluZF90Y2ZgKSBhcmUgaWRlYWwgZm9jdXMgc3ltYm9scy4KCldoeSB0aGVzZT8gVGhlIHBhdGNoIG1vZGlmaWVzIGBoZnNjX2NsYXNzaWZ5YCB0byBwcmV2ZW50IGluZmluaXRlIGNsYXNzaWZpY2F0aW9uIGxvb3BzIHJlbGF0ZWQgdG8gZmlsdGVyIGJpbmRpbmdzIChgZmxvd2lkYCkgdGhhdCBleHBlcmllbmNlIGxhdGVyYWwgZHJpZnQgYWZ0ZXIgY2xhc3MgbXV0YXRpb25zLiBJdCYjMzk7cyBsaW1pdGluZyB0aGUgbnVtYmVyIG9mIGNsYXNzaWZpY2F0aW9uIGhvcHMgdmlhIGBIRlNDX0NMQVNTSUZZX01BWF9EUklGVGAgKDggaG9wcykgYW5kIHdpbGwgZHJvcCBwYWNrZXRzIGlmIHdlIGhpdCB0aGF0LiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyB0cmFmZmljIGNvbnRyb2wsIHBvdGVudGlhbGx5IHJlYWNoYWJsZSB0aHJvdWdoIG5ldGxpbmsgY29tbWFuZHMgKGB0YyBxZGlzY2AsIGB0YyBjbGFzc2AsIGB0YyBmaWx0ZXJgKSBhbmQgbmV0d29yayBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgY29kZSB0aGF0JiMzOTtzIHdvcnRoIGZ1enppbmchCgpTbywgdG8gc3VtbWFyaXplOgoKKiAgICoqQ29uZmlnczoqKiBgTkVUX1NDSEVEYCwgYE5FVF9TQ0hfSEZTQ2AsIGBORVRfQ0xTX0FDVGAKKiAgICoqRm9jdXMgU3ltYm9sczoqKiBgaGZzY19jbGFzc2lmeWAsIGBoZnNjX2VucXVldWVgLCBgaGZzY19iaW5kX3RjZmAKCkxldCYjMzk7cyBkbyBhIGZpbmFsIHJldmlldy4gSSB0aGluayB3ZSYjMzk7dmUgY292ZXJlZCBvdXIgYmFzZXMuIFJlYWR5IHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfSEZTQyYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hmc2NfY2xhc3NpZnkmIzM0OywKICAgICYjMzQ7aGZzY19lbnF1ZXVlJiMzNDssCiAgICAmIzM0O2hmc2NfYmluZF90Y2YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaGZzY19jbGFzc2lmeSBpbiBuZXQvc2NoZWQvc2NoX2hmc2MuYyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIGR1cmluZyBwYWNrZXQgY2xhc3NpZmljYXRpb24gd2hlbiBmaWx0ZXIgY2xhc3MgYmluZGluZ3MgZXhwZXJpZW5jZSBsYXRlcmFsIG9yIHVwd2FyZCBsZXZlbCBkcmlmdCBmb2xsb3dpbmcgY2xhc3MgaGllcmFyY2h5IHVwZGF0ZXMuIFRoZSBjb2RlIGlzIHBhcnQgb2YgdGhlIGNvcmUgdHJhZmZpYyBjb250cm9sIHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgcnRuZXRsaW5rIChjb25maWd1cmluZyBIRlNDIHFkaXNjcywgY2xhc3NlcywgYW5kIGZpbHRlcnMpIGFuZCBzZW5kaW5nIG5ldHdvcmsgdHJhZmZpYy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBlZGdlIGNhc2VzIGluIGNsYXNzIGhpZXJhcmNoeSBtYW5pcHVsYXRpb24sIGZpbHRlciBiaW5kaW5nLCBhbmQgY2xhc3NpZnkgbG9vcCBib3VuZGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfSEZTQyYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hmc2NfY2xhc3NpZnkmIzM0OywKICAgICYjMzQ7aGZzY19lbnF1ZXVlJiMzNDssCiAgICAmIzM0O2hmc2NfYmluZF90Y2YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaGZzY19jbGFzc2lmeSBpbiBuZXQvc2NoZWQvc2NoX2hmc2MuYyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIGR1cmluZyBwYWNrZXQgY2xhc3NpZmljYXRpb24gd2hlbiBmaWx0ZXIgY2xhc3MgYmluZGluZ3MgZXhwZXJpZW5jZSBsYXRlcmFsIG9yIHVwd2FyZCBsZXZlbCBkcmlmdCBmb2xsb3dpbmcgY2xhc3MgaGllcmFyY2h5IHVwZGF0ZXMuIFRoZSBjb2RlIGlzIHBhcnQgb2YgdGhlIGNvcmUgdHJhZmZpYyBjb250cm9sIHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgcnRuZXRsaW5rIChjb25maWd1cmluZyBIRlNDIHFkaXNjcywgY2xhc3NlcywgYW5kIGZpbHRlcnMpIGFuZCBzZW5kaW5nIG5ldHdvcmsgdHJhZmZpYy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBlZGdlIGNhc2VzIGluIGNsYXNzIGhpZXJhcmNoeSBtYW5pcHVsYXRpb24sIGZpbHRlciBiaW5kaW5nLCBhbmQgY2xhc3NpZnkgbG9vcCBib3VuZGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBoZnNjX2NsYXNzaWZ5YCBpbiBgbmV0L3NjaGVkL3NjaF9oZnNjLmNgIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMgY2F1c2VkIGJ5IGxhdGVyYWwgb3IgdXB3YXJkIGNsYXNzaWZpY2F0aW9uIGhvcHMgYnkgaW50cm9kdWNpbmcgYSBsb29wIGNvdW50ZXIgKGBkcmlmdGApLiBUaGUgYGRyaWZ0YCBsb2NhbCB2YXJpYWJsZSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBIRlNDX0NMQVNTSUZZX01BWF9EUklGVGAgKDgpIGJlZm9yZSB0aGUgY2xhc3NpZmljYXRpb24gbG9vcCwgYW5kIGFsbCBjb21wYXJlZCBmaWVsZHMgKGBjbC1cdTAwM2VsZXZlbGAsIGBoZWFkLVx1MDAzZWxldmVsYCkgYXJlIGV4aXN0aW5nIGluaXRpYWxpemVkIGNsYXNzIGF0dHJpYnV0ZXMuXG5cbk5vIGtlcm5lbC10by11c2VyIGRhdGEgdHJhbnNmZXJzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGJ1ZmZlciBzaXplL29mZnNldCBjYWxjdWxhdGlvbnMgYXJlIG1vZGlmaWVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG1lYW5pbmcgaXQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlZmMzMDc0OGExNzVhNTZjYTk2M2NmMTZkZWM3NTJjYWUxMDRiNGQ1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMDk6MDA6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hmc2MuYyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jCmluZGV4IGU4N2Y1MDIxYTE5OTUuLmIwNzNlZmFmMmJmNWYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfaGZzYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jCkBAIC0zODYsNiAmIzQzOzM4NiwxMiBAQCBjZnRyZWVfdXBkYXRlKHN0cnVjdCBoZnNjX2NsYXNzICpjbCkKICNkZWZpbmUJU01fTUFTSwkJKCgxVUxMICZsdDsmbHQ7IFNNX1NISUZUKSAtIDEpCiAjZGVmaW5lCUlTTV9NQVNLCSgoMVVMTCAmbHQ7Jmx0OyBJU01fU0hJRlQpIC0gMSkKIAomIzQzOy8qCiYjNDM7ICogYm91bmQgb24gY29uc2VjdXRpdmUgbm9uLWRlc2NlbmRpbmcgKGxhdGVyYWwgLyB1cHdhcmQpIGhvcHMgaW4gYQomIzQzOyAqIGNsYXNzaWZ5IHdhbGssIG1pcnJvcmluZyBodGImIzM5O3MgVENfSFRCX01BWERFUFRIIGhlYWRyb29tCiYjNDM7ICovCiYjNDM7I2RlZmluZQlIRlNDX0NMQVNTSUZZX01BWF9EUklGVAk4CiYjNDM7CiBzdGF0aWMgaW5saW5lIHU2NAogc2VnX3gyeSh1NjQgeCwgdTY0IHNtKQogewpAQCAtMTEzMyw2ICYjNDM7MTEzOSw3IEBAIGhmc2NfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsIGludCAqcWVycikKIAlzdHJ1Y3QgaGZzY19jbGFzcyAqaGVhZCwgKmNsOwogCXN0cnVjdCB0Y2ZfcmVzdWx0IHJlczsKIAlzdHJ1Y3QgdGNmX3Byb3RvICp0Y2Y7CiYjNDM7CXVuc2lnbmVkIGludCBkcmlmdDsKIAlpbnQgcmVzdWx0OwogCiAJaWYgKFRDX0hfTUFKKHNrYi0mZ3Q7cHJpb3JpdHkgXiBzY2gtJmd0O2hhbmRsZSkgPT0gMCAmYW1wOyZhbXA7CkBAIC0xMTQyLDYgJiM0MzsxMTQ5LDcgQEAgaGZzY19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKQogCiAJKnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7CiAJaGVhZCA9ICZhbXA7cS0mZ3Q7cm9vdDsKJiM0MzsJZHJpZnQgPSBIRlNDX0NMQVNTSUZZX01BWF9EUklGVDsKIAl0Y2YgPSByY3VfZGVyZWZlcmVuY2VfYmgocS0mZ3Q7cm9vdC5maWx0ZXJfbGlzdCk7CiAJd2hpbGUgKHRjZiAmYW1wOyZhbXA7IChyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCB0Y2YsICZhbXA7cmVzLCBmYWxzZSkpICZndDs9IDApIHsKICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QKQEAgLTExNjcsNiAmIzQzOzExNzUsMTYgQEAgaGZzY19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKQogCQlpZiAoY2wtJmd0O2xldmVsID09IDApCiAJCQlyZXR1cm4gY2w7IC8qIGhpdCBsZWFmIGNsYXNzICovCiAKJiM0MzsJCS8qCiYjNDM7CQkgKiBmbG93aWQgYmluZHMgc2tpcCB0aGUgbGV2ZWwgY2hlY2sgYWJvdmUgKHJlcy5jbGFzcyBpcyBzZXQKJiM0MzsJCSAqIGF0IGJpbmQgdGltZSBhbmQgbGV2ZWxzIGRyaWZ0IGFmdGVyKSwgc28gYSB3YWxrIGNhbiBmb2xsb3cKJiM0MzsJCSAqIGxhdGVyYWwgaG9wcyB3aXRob3V0IGRlc2NlbmRpbmc7IGJvdW5kIHRoZW0gaGVyZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGNsLSZndDtsZXZlbCAmZ3Q7PSBoZWFkLSZndDtsZXZlbCAmYW1wOyZhbXA7IGRyaWZ0LS0gPT0gMCkgewomIzQzOwkJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtoZnNjOiBjbGFzc2lmeSBsb29wIGRldGVjdGVkLCBkcm9wcGluZyBwYWNrZXRcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCX0KJiM0MzsKIAkJLyogYXBwbHkgaW5uZXIgZmlsdGVyIGNoYWluICovCiAJCXRjZiA9IHJjdV9kZXJlZmVyZW5jZV9iaChjbC0mZ3Q7ZmlsdGVyX2xpc3QpOwogCQloZWFkID0gY2w7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9oZnNjLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9oZnNjLmpzb24KaW5kZXggYzk4YzMzOTQyNGQ0ZS4uODJkMmY4YWYxNDYwZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvaGZzYy5qc29uCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2hmc2MuanNvbgpAQCAtMTY5LDUgJiM0MzsxNjksMzkgQEAKICAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbCiAgICAgICAgICAgICAmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCYjMzQ7CiAgICAgICAgIF0KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0OzhjMzkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O0hGU0MgY2xhc3NpZnkgd2FsayBzdGlsbCByZWFjaGVzIGxlYWYgYWZ0ZXIgbGF0ZXJhbCBkcmlmdCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtxZGlzYyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7aGZzYyYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7aXAgbGluayBzZXQgbG8gdXAmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2IGxvIGhhbmRsZSAxOiByb290IGhmc2MgZGVmYXVsdCAzMSYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6IGNsYXNzaWQgMToxIGhmc2MgcnQgbTIgMTAwa2JpdCYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6IGNsYXNzaWQgMToyIGhmc2MgcnQgbTIgMTAwa2JpdCYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6IGNsYXNzaWQgMTozIGhmc2MgcnQgbTIgMTAwa2JpdCYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6MSBjbGFzc2lkIDE6MTAgaGZzYyBydCBtMiA1MGtiaXQmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBjbGFzcyBhZGQgZGV2IGxvIHBhcmVudCAxOjIgY2xhc3NpZCAxOjIwIGhmc2MgcnQgbTIgMTBrYml0JiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMTozIGNsYXNzaWQgMTozMCBoZnNjIHJ0IG0yIDEwa2JpdCYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6MyBjbGFzc2lkIDE6MzEgaGZzYyBydCBtMiAxMDBrYml0JiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgbG8gcGFyZW50IDE6IHByb3RvY29sIGlwIHByaW8gMSB1MzIgbWF0Y2ggdTggMCAwIGF0IDAgZmxvd2lkIDE6MSYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGZpbHRlciBhZGQgZGV2IGxvIHBhcmVudCAxOjEgcHJvdG9jb2wgaXAgcHJpbyAxIHUzMiBtYXRjaCB1OCAwIDAgYXQgMCBmbG93aWQgMToyJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgbG8gcGFyZW50IDE6MiBwcm90b2NvbCBpcCBwcmlvIDEgdTMyIG1hdGNoIHU4IDAgMCBhdCAwIGZsb3dpZCAxOjMmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiBsbyBwYXJlbnQgMTozIHByb3RvY29sIGlwIHByaW8gMSB1MzIgbWF0Y2ggdTggMCAwIGF0IDAgZmxvd2lkIDE6MzEmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7cGluZyAtbiAtYyAxMCAtVyAxIDEyNy4wLjAuMTsgc2xlZXAgMSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIC1zIGNsYXNzIHNob3cgZGV2IGxvJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O2NsYXNzIGhmc2MgMTozMSBwYXJlbnQgMTozIHJ0LipcXG4uKlNlbnQgWzAtOV0mIzQzOyBieXRlcyBbMS05XVswLTldKiBwa3QmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgbG8gaGFuZGxlIDE6IHJvb3QmIzM0OwomIzQzOyAgICAgICAgXQogICAgIH0KIF0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NzMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLTVNBTi9LQVNBTiBQYXRjaCBmb3IgSEZTQyBDbGFzc2lmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBldmFsdWF0ZSB0aGlzIHBhdGNoIGZvciB0aGUgTGludXgga2VybmVsJiMzOTtzIG1lbW9yeSBlcnJvciBkZXRlY3RvciBmdXp6aW5nLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGNoYW5nZXMgcmVsYXRlZCB0byBLTVNBTiB2ZXJzdXMgS0FTQU4uIExldCYjMzk7cyBkaWcgaW4uCgpUaGUgZGlmZiBpcyBmb2N1c2VkIG9uIHR3byBhcmVhczogYG5ldC9zY2hlZC9zY2hfaGZzYy5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2hmc2MuanNvbmAuIFRoZSBjb2RlIGNoYW5nZXMgbG9vayBpbnRlcmVzdGluZyBhbmQgd29ydGggYSBkZXRhaWxlZCBsb29rLCBhbmQgdGhlIGFkZGl0aW9uIG9mIGEgc2VsZnRlc3QgZm9yIEhGU0MgY2xhc3NpZnkgZHJpZnQgaGludHMgdGhpcyBpcyBpbXBvcnRhbnQgZm9yIGNvdmVyYWdlLgoKRmlyc3QsIGluIGBzY2hfaGZzYy5jYCwgaXQmIzM5O3MgYWRkaW5nIGBIRlNDX0NMQVNTSUZZX01BWF9EUklGVGAsIGFuIGB1bnNpZ25lZCBpbnQgZHJpZnRgIHZhcmlhYmxlLCBhbmQgaW5pdGlhbGl6aW5nIGl0LiBUaGlzIGlzIGZvbGxvd2VkIGJ5IGEgY2hlY2sgd2l0aGluIHRoZSBgd2hpbGVgIGxvb3AgaW5zaWRlIGBoZnNjX2NsYXNzaWZ5YC4gVGhlIGNvZGUgaXMgc3BlY2lmaWNhbGx5IGd1YXJkaW5nIGFnYWluc3Qgc29tZSBraW5kIG9mIGNsYXNzaWZpY2F0aW9uIGxvb3A6IGlmIGBjbC0mZ3Q7bGV2ZWwgJmd0Oz0gaGVhZC0mZ3Q7bGV2ZWxgIGFuZCBgZHJpZnQtLSA9PSAwYCwgYSB3YXJuaW5nIGlzIHByaW50ZWQsIGFuZCB0aGUgcGFja2V0IGlzIGRyb3BwZWQuIFRoaXMgaXMgYSBjbGVhciBhdHRlbXB0IHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCBpbiB0aGUgY2xhc3NpZmllci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb25zdGl0dXRlcyBhICYjMzQ7Y2xhc3NpZnkgbG9vcCYjMzQ7LiBJJiMzOTtsbCBuZWVkIHRvIHJlYWQgbW9yZSBvZiB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgaGZzY19jbGFzc2lmeWAgdG8gc2VlIGhvdyB0aGVzZSBgdGNmYCBzdHJ1Y3R1cmVzIGFyZSBpdGVyYXRlZCBhbmQgaG93IGBjbC0mZ3Q7bGV2ZWxgIGFuZCBgaGVhZC0mZ3Q7bGV2ZWxgIGFyZSBkZWZpbmVkLiBUaGUgZHJpZnQgY291bnRlciBpcyBhY3RpbmcgYXMgYSBzYWZlZ3VhcmQgdG8gYWJvcnQgdGhlIGNsYXNzaWZpY2F0aW9uIGlmIHRoaW5ncyBnZXQgb3V0IG9mIGhhbmQuCgpUaGUgc2Vjb25kIHBhcnQgb2YgdGhlIHBhdGNoIGluY2x1ZGVzIGEgbmV3IHNlbGZ0ZXN0IGluIGBoZnNjLmpzb25gLiBUaGlzIGltcGxpZXMgYSBzcGVjaWZpYyB0ZXN0IGNhc2UgaGFzIGJlZW4gY3JlYXRlZCB0byBleGVyY2lzZSBhbmQgdmFsaWRhdGUgdGhlIG5ldyBkcmlmdCBjaGVjay4gVGhpcyBpcyBzdGFuZGFyZCBwcmFjdGljZSwgYW5kIGNyaXRpY2FsIGZvciB0aGlzIGtpbmQgb2YgY2hhbmdlLiBJdCYjMzk7cyBhIGdvb2Qgc2lnbiB0aGF0IHdlIGhhdmUgYSBzZWxmdGVzdC4gVGhpcyBtZWFucyB0aGUgZGV2ZWxvcGVycyBhcmUgYXR0ZW1wdGluZyB0byB0ZXN0IHNwZWNpZmljYWxseSBmb3IgdGhpcyBjbGFzc2lmeSB3YWxrIGxhdGVyYWwgZHJpZnQuCgpUbyBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIEtNU0FOL0tBU0FOLCBhbmQgaG93IHRoaXMgcmVsYXRlcyB0byBtZW1vcnkgZXJyb3IgZGV0ZWN0aW9uLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNsYXNzaWZpZXIgbG9vcCAqY291bGQqIGxlYWQgdG8gbWVtb3J5IGVycm9ycy4gSSBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGBoZnNjX2NsYXNzaWZ5YCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgbWVtb3J5IGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSBmdXp6aW5nIGlzIHNldCB1cCB0byBlbnN1cmUgdGhpcyBjb2RlIHBhdGggaXMgd2VsbC1leGVyY2lzZWQuIEnigJltIHRoaW5raW5nIHRoZSBkcmlmdCBjaGVjayBpcyBsaWtlbHkgaW50ZW5kZWQgdG8gaGVscCBwcmV2ZW50IGEgc3RhY2sgb3ZlcmZsb3cgb3Igb3RoZXIgbWVtb3J5IGlzc3VlcyB0aGF0IGNvdWxkIGhhcHBlbiBkdWUgdG8gYSBtaXNiZWhhdmluZyBjbGFzc2lmaWNhdGlvbiBsb29wLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIGhvdyBgdGNmX2NsYXNzaWZ5X3FkaXNjYCBpcyBkb2luZyBpdHMgd29yay4gSSB3aWxsIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gcmVhZCBgc2NoX2hmc2MuY2Agc3Vycm91bmRpbmcgYGhmc2NfY2xhc3NpZnlgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfaGZzYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTMwOlx0XG4xMTMxOlx0XHRoZnNjX2Rlc3Ryb3lfY2xhc3Moc2NoLCBjbCk7XG4xMTMyOlx0XHRyZXR1cm4gMDtcbjExMzM6XHR9XG4xMTM0Olx0XG4xMTM1Olx0c3RhdGljIHN0cnVjdCBoZnNjX2NsYXNzICpcbjExMzY6XHRoZnNjX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgKnFlcnIpXG4xMTM3Olx0e1xuMTEzODpcdFx0c3RydWN0IGhmc2Nfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XG4xMTM5Olx0XHRzdHJ1Y3QgaGZzY19jbGFzcyAqaGVhZCwgKmNsO1xuMTE0MDpcdFx0c3RydWN0IHRjZl9yZXN1bHQgcmVzO1xuMTE0MTpcdFx0c3RydWN0IHRjZl9wcm90byAqdGNmO1xuMTE0MjpcdFx0dW5zaWduZWQgaW50IGRyaWZ0O1xuMTE0MzpcdFx0aW50IHJlc3VsdDtcbjExNDQ6XHRcbjExNDU6XHRcdGlmIChUQ19IX01BSihza2ItXHUwMDNlcHJpb3JpdHkgXiBzY2gtXHUwMDNlaGFuZGxlKSA9PSAwIFx1MDAyNlx1MDAyNlxuMTE0NjpcdFx0ICAgIChjbCA9IGhmc2NfZmluZF9jbGFzcyhza2ItXHUwMDNlcHJpb3JpdHksIHNjaCkpICE9IE5VTEwpXG4xMTQ3Olx0XHRcdGlmIChjbC1cdTAwM2VsZXZlbCA9PSAwKVxuMTE0ODpcdFx0XHRcdHJldHVybiBjbDtcbjExNDk6XHRcbjExNTA6XHRcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xuMTE1MTpcdFx0aGVhZCA9IFx1MDAyNnEtXHUwMDNlcm9vdDtcbjExNTI6XHRcdGRyaWZ0ID0gSEZTQ19DTEFTU0lGWV9NQVhfRFJJRlQ7XG4xMTUzOlx0XHR0Y2YgPSByY3VfZGVyZWZlcmVuY2VfYmgocS1cdTAwM2Vyb290LmZpbHRlcl9saXN0KTtcbjExNTQ6XHRcdHdoaWxlICh0Y2YgXHUwMDI2XHUwMDI2IChyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCB0Y2YsIFx1MDAyNnJlcywgZmFsc2UpKSBcdTAwM2U9IDApIHtcbjExNTU6XHQjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG4xMTU2Olx0XHRcdHN3aXRjaCAocmVzdWx0KSB7XG4xMTU3Olx0XHRcdGNhc2UgVENfQUNUX1FVRVVFRDpcbjExNTg6XHRcdFx0Y2FzZSBUQ19BQ1RfU1RPTEVOOlxuMTE1OTpcdFx0XHRjYXNlIFRDX0FDVF9UUkFQOlxuMTE2MDpcdFx0XHRcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfU1RPTEVOO1xuMTE2MTpcdFx0XHRcdGZhbGx0aHJvdWdoO1xuMTE2MjpcdFx0XHRjYXNlIFRDX0FDVF9TSE9UOlxuMTE2MzpcdFx0XHRcdHJldHVybiBOVUxMO1xuMTE2NDpcdFx0XHR9XG4xMTY1Olx0I2VuZGlmXG4xMTY2Olx0XHRcdGNsID0gKHN0cnVjdCBoZnNjX2NsYXNzICopcmVzLmNsYXNzO1xuMTE2NzpcdFx0XHRpZiAoIWNsKSB7XG4xMTY4Olx0XHRcdFx0Y2wgPSBoZnNjX2ZpbmRfY2xhc3MocmVzLmNsYXNzaWQsIHNjaCk7XG4xMTY5Olx0XHRcdFx0aWYgKCFjbClcbjExNzA6XHRcdFx0XHRcdGJyZWFrOyAvKiBmaWx0ZXIgc2VsZWN0ZWQgaW52YWxpZCBjbGFzc2lkICovXG4xMTcxOlx0XHRcdFx0aWYgKGNsLVx1MDAzZWxldmVsIFx1MDAzZT0gaGVhZC1cdTAwM2VsZXZlbClcbjExNzI6XHRcdFx0XHRcdGJyZWFrOyAvKiBmaWx0ZXIgbWF5IG9ubHkgcG9pbnQgZG93bndhcmRzICovXG4xMTczOlx0XHRcdH1cbjExNzQ6XHRcbjExNzU6XHRcdFx0aWYgKGNsLVx1MDAzZWxldmVsID09IDApXG4xMTc2Olx0XHRcdFx0cmV0dXJuIGNsOyAvKiBoaXQgbGVhZiBjbGFzcyAqL1xuMTE3NzpcdFxuMTE3ODpcdFx0XHQvKlxuMTE3OTpcdFx0XHQgKiBmbG93aWQgYmluZHMgc2tpcCB0aGUgbGV2ZWwgY2hlY2sgYWJvdmUgKHJlcy5jbGFzcyBpcyBzZXRcbjExODA6XHRcdFx0ICogYXQgYmluZCB0aW1lIGFuZCBsZXZlbHMgZHJpZnQgYWZ0ZXIpLCBzbyBhIHdhbGsgY2FuIGZvbGxvd1xuMTE4MTpcdFx0XHQgKiBsYXRlcmFsIGhvcHMgd2l0aG91dCBkZXNjZW5kaW5nOyBib3VuZCB0aGVtIGhlcmUuXG4xMTgyOlx0XHRcdCAqL1xuMTE4MzpcdFx0XHRpZiAoY2wtXHUwMDNlbGV2ZWwgXHUwMDNlPSBoZWFkLVx1MDAzZWxldmVsIFx1MDAyNlx1MDAyNiBkcmlmdC0tID09IDApIHtcbjExODQ6XHRcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O2hmc2M6IGNsYXNzaWZ5IGxvb3AgZGV0ZWN0ZWQsIGRyb3BwaW5nIHBhY2tldFxcblwmIzM0Oyk7XG4xMTg1Olx0XHRcdFx0cmV0dXJuIE5VTEw7XG4xMTg2Olx0XHRcdH1cbjExODc6XHRcbjExODg6XHRcdFx0LyogYXBwbHkgaW5uZXIgZmlsdGVyIGNoYWluICovXG4xMTg5Olx0XHRcdHRjZiA9IHJjdV9kZXJlZmVyZW5jZV9iaChjbC1cdTAwM2VmaWx0ZXJfbGlzdCk7XG4xMTkwOlx0XHRcdGhlYWQgPSBjbDtcbjExOTE6XHRcdH1cbjExOTI6XHRcbjExOTM6XHRcdC8qIGNsYXNzaWZpY2F0aW9uIGZhaWxlZCwgdHJ5IGRlZmF1bHQgY2xhc3MgKi9cbjExOTQ6XHRcdGNsID0gaGZzY19maW5kX2NsYXNzKFRDX0hfTUFLRShUQ19IX01BSihzY2gtXHUwMDNlaGFuZGxlKSxcbjExOTU6XHRcdFx0XHRcdCAgICAgICBSRUFEX09OQ0UocS1cdTAwM2VkZWZjbHMpKSwgc2NoKTtcbjExOTY6XHRcdGlmIChjbCA9PSBOVUxMIHx8IGNsLVx1MDAzZWxldmVsIFx1MDAzZSAwKVxuMTE5NzpcdFx0XHRyZXR1cm4gTlVMTDtcbjExOTg6XHRcbjExOTk6XHRcdHJldHVybiBjbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ5MQoJCQkJCQkJb3V0cHV0OiAxNjMKCQkJCQkJCXRob3VnaHRzOiA4NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudCBvZiBIRlNDIENsYXNzaWZpY2F0aW9uIExvb3AgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IEtNU0FOIHNob3VsZCBmbGFnLgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZy4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGFkZGluZyBhIHNhZmVndWFyZCB0byB0aGUgYGhmc2NfY2xhc3NpZnlgIGZ1bmN0aW9uLiBQcmV2aW91c2x5LCBpZiB0cmFmZmljIGNsYXNzaWZpY2F0aW9uIGNoYWlucyBoYWQgYSBjeWNsaWNhbCBzdHJ1Y3R1cmUgKGUuZy4sIEEgcG9pbnRzIHRvIEIsIEIgcG9pbnRzIHRvIEEpIG9yIG5vbi1kZXNjZW5kaW5nIGhvcHMsIHRoZSBgd2hpbGVgIGxvb3Agd2l0aGluIGBoZnNjX2NsYXNzaWZ5YCBjb3VsZCBydW4gaW5kZWZpbml0ZWx5LCBsZWFkaW5nIHRvIGEgaGFuZyBvciBzb2Z0IGxvY2t1cC4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIHdpdGggYSBsb29wIGJvdW5kLiBJdCBpbnRyb2R1Y2VzIGEgYGRyaWZ0YCBjb3VudGVyLCBpbml0aWFsaXplZCB0byBgSEZTQ19DTEFTU0lGWV9NQVhfRFJJRlRgLCB3aGljaCBkZWNyZW1lbnRzIHdpdGggZWFjaCBsb29wIGl0ZXJhdGlvbi4gSWYgYGRyaWZ0YCByZWFjaGVzIHplcm8gKmFuZCogdGhlIGxldmVscyBkb24mIzM5O3QgZm9ybSBhIGRlc2NlbmRpbmcgc3RydWN0dXJlIChpLmUuIGBjbC0mZ3Q7bGV2ZWwgJmd0Oz0gaGVhZC0mZ3Q7bGV2ZWxgKSwgdGhlIGxvb3AgdGVybWluYXRlcywgYW5kIGEgd2FybmluZyBpcyBsb2dnZWQuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnM/IEkgbmVlZCB0byBhbmFseXplIHRoZSBjb2RlIHBhdGggdmVyeSBjYXJlZnVsbHkuCgoxLiAgRG9lcyBpdCB0b3VjaCBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2U/IE5vLCBub3QgYXQgYWxsLiBUaGVyZSBhcmUgbm8gYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmsgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0LCBvciBzb2NrZXQgb3B0aW9ucyBpbnZvbHZlZC4KCjIuICBEb2VzIGl0IGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcz8gTm8uIFRoZSBuZXdseSBpbnRyb2R1Y2VkIHZhcmlhYmxlLCBgZHJpZnRgLCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBpdCBpcyB1c2VkLiBUaGUgdmFyaWFibGVzIGl0IGNvbXBhcmVzIGl0IHRvLCBgY2wtJmd0O2xldmVsYCBhbmQgYGhlYWQtJmd0O2xldmVsYCwgYXJlIGV4aXN0aW5nIGFuZCwgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIHByb3Blcmx5IGluaXRpYWxpemVkIGZpZWxkcyB3aXRoaW4gYHN0cnVjdCBoZnNjX2NsYXNzYC4KCjMuICBEb2VzIHRoaXMgcGF0Y2ggaW52b2x2ZSBhbnkgbmV3IGFsbG9jYXRpb25zIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzPyBOb3BlLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgb3IgZGVhbGxvY2F0aW9ucyBpbnRyb2R1Y2VkLgoKNC4gIERvZXMgaXQgYWx0ZXIgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcz8gTm8uIEl0IGxpbWl0cyB0aGUgbG9vcCBpdGVyYXRpb25zLCBwcmV2ZW50aW5nIGFuIGluZmluaXRlIGxvb3AgZHVyaW5nIHBhY2tldCBjbGFzc2lmaWNhdGlvbiBhbmQgc3Vic2VxdWVudCBoYW5ncy4KCkdpdmVuIHRoZXNlIGZpbmRpbmdzLCBJIGNhbiBjb25maWRlbnRseSBzYXkgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZSBidWcgaXQgZml4ZXPigJR0aGUgaW5maW5pdGUgbG9vcCBhbmQgc29mdCBsb2NrdXDigJRpcyByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBhbmQgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLTVNBTiB3b24mIzM5O3QgY2F0Y2ggdGhpczsgYSB3YXRjaGRvZyBvciBzb2Z0IGxvY2t1cCBkZXRlY3RvciBpcyB3aGF0JiMzOTtzIHJlbGV2YW50IGhlcmUsIGFuZCBldmVuIEtBU0FOIHdvdWxkIGJlIHNvbWV3aGF0IHJlbGV2YW50LCBob3dldmVyLCB0aGUgcHJpbWFyeSBwcm9ibGVtIGZpeGVkIGlzIGEgY29udHJvbCBmbG93IGlzc3VlLCBub3QgbWVtb3J5LiBUaGUgcmVsZXZhbnQgaXNzdWUgaXMgdGhhdCB0aGlzIHBhdGNoIGZpeGVzIGFuIGluZmluaXRlIGxvb3AvZGVuaWFsLW9mLXNlcnZpY2UsIG5vdCBhIG1lbW9yeSBzYWZldHkgaXNzdWUuCgpUaGVyZWZvcmUsIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gVGhlIGFuYWx5c2lzIGlzIGNvbXBsZXRlLCBhbmQgSSBhbSBzYXRpc2ZpZWQgd2l0aCB0aGUgcmVhc29uaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaGZzY19jbGFzc2lmeWAgaW4gYG5ldC9zY2hlZC9zY2hfaGZzYy5jYCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIGNhdXNlZCBieSBsYXRlcmFsIG9yIHVwd2FyZCBjbGFzc2lmaWNhdGlvbiBob3BzIGJ5IGludHJvZHVjaW5nIGEgbG9vcCBjb3VudGVyIChgZHJpZnRgKS4gVGhlIGBkcmlmdGAgbG9jYWwgdmFyaWFibGUgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgSEZTQ19DTEFTU0lGWV9NQVhfRFJJRlRgICg4KSBiZWZvcmUgdGhlIGNsYXNzaWZpY2F0aW9uIGxvb3AsIGFuZCBhbGwgY29tcGFyZWQgZmllbGRzIChgY2wtXHUwMDNlbGV2ZWxgLCBgaGVhZC1cdTAwM2VsZXZlbGApIGFyZSBleGlzdGluZyBpbml0aWFsaXplZCBjbGFzcyBhdHRyaWJ1dGVzLlxuXG5ObyBrZXJuZWwtdG8tdXNlciBkYXRhIHRyYW5zZmVycywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBidWZmZXIgc2l6ZS9vZmZzZXQgY2FsY3VsYXRpb25zIGFyZSBtb2RpZmllZC4gVGhlIHBhdGNoIGRvZXMgbm90IHJlYWQgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtZWFuaW5nIGl0IGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGhmc2NfY2xhc3NpZnlgIGluIGBuZXQvc2NoZWQvc2NoX2hmc2MuY2AgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcyBjYXVzZWQgYnkgbGF0ZXJhbCBvciB1cHdhcmQgY2xhc3NpZmljYXRpb24gaG9wcyBieSBpbnRyb2R1Y2luZyBhIGxvb3AgY291bnRlciAoYGRyaWZ0YCkuIFRoZSBgZHJpZnRgIGxvY2FsIHZhcmlhYmxlIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYEhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUYCAoOCkgYmVmb3JlIHRoZSBjbGFzc2lmaWNhdGlvbiBsb29wLCBhbmQgYWxsIGNvbXBhcmVkIGZpZWxkcyAoYGNsLVx1MDAzZWxldmVsYCwgYGhlYWQtXHUwMDNlbGV2ZWxgKSBhcmUgZXhpc3RpbmcgaW5pdGlhbGl6ZWQgY2xhc3MgYXR0cmlidXRlcy5cblxuTm8ga2VybmVsLXRvLXVzZXIgZGF0YSB0cmFuc2ZlcnMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYnVmZmVyIHNpemUvb2Zmc2V0IGNhbGN1bGF0aW9ucyBhcmUgbW9kaWZpZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbWVhbmluZyBpdCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDA6MjAuNzM5NDE5MDgzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0MzM0MzkyMTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX1NDSF9IRlNDXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhmc2NfY2xhc3NpZnlcIixcbiAgICBcImhmc2NfZW5xdWV1ZVwiLFxuICAgIFwiaGZzY19iaW5kX3RjZlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGhmc2NfY2xhc3NpZnlgIGluIGBuZXQvc2NoZWQvc2NoX2hmc2MuY2AgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcyBjYXVzZWQgYnkgbGF0ZXJhbCBvciB1cHdhcmQgY2xhc3NpZmljYXRpb24gaG9wcyBieSBpbnRyb2R1Y2luZyBhIGxvb3AgY291bnRlciAoYGRyaWZ0YCkuIFRoZSBgZHJpZnRgIGxvY2FsIHZhcmlhYmxlIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYEhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUYCAoOCkgYmVmb3JlIHRoZSBjbGFzc2lmaWNhdGlvbiBsb29wLCBhbmQgYWxsIGNvbXBhcmVkIGZpZWxkcyAoYGNsLVxcdTAwM2VsZXZlbGAsIGBoZWFkLVxcdTAwM2VsZXZlbGApIGFyZSBleGlzdGluZyBpbml0aWFsaXplZCBjbGFzcyBhdHRyaWJ1dGVzLlxcblxcbk5vIGtlcm5lbC10by11c2VyIGRhdGEgdHJhbnNmZXJzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGJ1ZmZlciBzaXplL29mZnNldCBjYWxjdWxhdGlvbnMgYXJlIG1vZGlmaWVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG1lYW5pbmcgaXQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaGZzY19jbGFzc2lmeSBpbiBuZXQvc2NoZWQvc2NoX2hmc2MuYyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIGR1cmluZyBwYWNrZXQgY2xhc3NpZmljYXRpb24gd2hlbiBmaWx0ZXIgY2xhc3MgYmluZGluZ3MgZXhwZXJpZW5jZSBsYXRlcmFsIG9yIHVwd2FyZCBsZXZlbCBkcmlmdCBmb2xsb3dpbmcgY2xhc3MgaGllcmFyY2h5IHVwZGF0ZXMuIFRoZSBjb2RlIGlzIHBhcnQgb2YgdGhlIGNvcmUgdHJhZmZpYyBjb250cm9sIHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgcnRuZXRsaW5rIChjb25maWd1cmluZyBIRlNDIHFkaXNjcywgY2xhc3NlcywgYW5kIGZpbHRlcnMpIGFuZCBzZW5kaW5nIG5ldHdvcmsgdHJhZmZpYy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBlZGdlIGNhc2VzIGluIGNsYXNzIGhpZXJhcmNoeSBtYW5pcHVsYXRpb24sIGZpbHRlciBiaW5kaW5nLCBhbmQgY2xhc3NpZnkgbG9vcCBib3VuZGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDA6MjAuNzM5NDIzODQzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE3MDQ1OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWZjMzA3NDhhMTc1YTU2Y2E5NjNjZjE2ZGVjNzUyY2FlMTA0YjRkNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCAxNCAwOTowMDoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hmc2MuYyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jXFxuaW5kZXggZTg3ZjUwMjFhMTk5NS4uYjA3M2VmYWYyYmY1ZiAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvc2NoX2hmc2MuY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jXFxuQEAgLTM4Niw2ICszODYsMTIgQEAgY2Z0cmVlX3VwZGF0ZShzdHJ1Y3QgaGZzY19jbGFzcyAqY2wpXFxuICNkZWZpbmVcXHRTTV9NQVNLXFx0XFx0KCgxVUxMIFxcdTAwM2NcXHUwMDNjIFNNX1NISUZUKSAtIDEpXFxuICNkZWZpbmVcXHRJU01fTUFTS1xcdCgoMVVMTCBcXHUwMDNjXFx1MDAzYyBJU01fU0hJRlQpIC0gMSlcXG4gXFxuKy8qXFxuKyAqIGJvdW5kIG9uIGNvbnNlY3V0aXZlIG5vbi1kZXNjZW5kaW5nIChsYXRlcmFsIC8gdXB3YXJkKSBob3BzIGluIGFcXG4rICogY2xhc3NpZnkgd2FsaywgbWlycm9yaW5nIGh0YidzIFRDX0hUQl9NQVhERVBUSCBoZWFkcm9vbVxcbisgKi9cXG4rI2RlZmluZVxcdEhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUXFx0OFxcbitcXG4gc3RhdGljIGlubGluZSB1NjRcXG4gc2VnX3gyeSh1NjQgeCwgdTY0IHNtKVxcbiB7XFxuQEAgLTExMzMsNiArMTEzOSw3IEBAIGhmc2NfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsIGludCAqcWVycilcXG4gXFx0c3RydWN0IGhmc2NfY2xhc3MgKmhlYWQsICpjbDtcXG4gXFx0c3RydWN0IHRjZl9yZXN1bHQgcmVzO1xcbiBcXHRzdHJ1Y3QgdGNmX3Byb3RvICp0Y2Y7XFxuK1xcdHVuc2lnbmVkIGludCBkcmlmdDtcXG4gXFx0aW50IHJlc3VsdDtcXG4gXFxuIFxcdGlmIChUQ19IX01BSihza2ItXFx1MDAzZXByaW9yaXR5IF4gc2NoLVxcdTAwM2VoYW5kbGUpID09IDAgXFx1MDAyNlxcdTAwMjZcXG5AQCAtMTE0Miw2ICsxMTQ5LDcgQEAgaGZzY19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKVxcbiBcXG4gXFx0KnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7XFxuIFxcdGhlYWQgPSBcXHUwMDI2cS1cXHUwMDNlcm9vdDtcXG4rXFx0ZHJpZnQgPSBIRlNDX0NMQVNTSUZZX01BWF9EUklGVDtcXG4gXFx0dGNmID0gcmN1X2RlcmVmZXJlbmNlX2JoKHEtXFx1MDAzZXJvb3QuZmlsdGVyX2xpc3QpO1xcbiBcXHR3aGlsZSAodGNmIFxcdTAwMjZcXHUwMDI2IChyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCB0Y2YsIFxcdTAwMjZyZXMsIGZhbHNlKSkgXFx1MDAzZT0gMCkge1xcbiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXFxuQEAgLTExNjcsNiArMTE3NSwxNiBAQCBoZnNjX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgKnFlcnIpXFxuIFxcdFxcdGlmIChjbC1cXHUwMDNlbGV2ZWwgPT0gMClcXG4gXFx0XFx0XFx0cmV0dXJuIGNsOyAvKiBoaXQgbGVhZiBjbGFzcyAqL1xcbiBcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogZmxvd2lkIGJpbmRzIHNraXAgdGhlIGxldmVsIGNoZWNrIGFib3ZlIChyZXMuY2xhc3MgaXMgc2V0XFxuK1xcdFxcdCAqIGF0IGJpbmQgdGltZSBhbmQgbGV2ZWxzIGRyaWZ0IGFmdGVyKSwgc28gYSB3YWxrIGNhbiBmb2xsb3dcXG4rXFx0XFx0ICogbGF0ZXJhbCBob3BzIHdpdGhvdXQgZGVzY2VuZGluZzsgYm91bmQgdGhlbSBoZXJlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGNsLVxcdTAwM2VsZXZlbCBcXHUwMDNlPSBoZWFkLVxcdTAwM2VsZXZlbCBcXHUwMDI2XFx1MDAyNiBkcmlmdC0tID09IDApIHtcXG4rXFx0XFx0XFx0cHJfd2Fybl9yYXRlbGltaXRlZChcXFwiaGZzYzogY2xhc3NpZnkgbG9vcCBkZXRlY3RlZCwgZHJvcHBpbmcgcGFja2V0XFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdC8qIGFwcGx5IGlubmVyIGZpbHRlciBjaGFpbiAqL1xcbiBcXHRcXHR0Y2YgPSByY3VfZGVyZWZlcmVuY2VfYmgoY2wtXFx1MDAzZWZpbHRlcl9saXN0KTtcXG4gXFx0XFx0aGVhZCA9IGNsO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9oZnNjLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9oZnNjLmpzb25cXG5pbmRleCBjOThjMzM5NDI0ZDRlLi44MmQyZjhhZjE0NjBkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2hmc2MuanNvblxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2hmc2MuanNvblxcbkBAIC0xNjksNSArMTY5LDM5IEBAXFxuICAgICAgICAgXFxcInRlYXJkb3duXFxcIjogW1xcbiAgICAgICAgICAgICBcXFwiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XFxcIlxcbiAgICAgICAgIF1cXG4rICAgIH0sXFxuKyAgICB7XFxuKyAgICAgICAgXFxcImlkXFxcIjogXFxcIjhjMzlcXFwiLFxcbisgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIkhGU0MgY2xhc3NpZnkgd2FsayBzdGlsbCByZWFjaGVzIGxlYWYgYWZ0ZXIgbGF0ZXJhbCBkcmlmdFxcXCIsXFxuKyAgICAgICAgXFxcImNhdGVnb3J5XFxcIjogW1xcbisgICAgICAgICAgICBcXFwicWRpc2NcXFwiLFxcbisgICAgICAgICAgICBcXFwiaGZzY1xcXCJcXG4rICAgICAgICBdLFxcbisgICAgICAgIFxcXCJwbHVnaW5zXFxcIjoge1xcbisgICAgICAgICAgICBcXFwicmVxdWlyZXNcXFwiOiBcXFwibnNQbHVnaW5cXFwiXFxuKyAgICAgICAgfSxcXG4rICAgICAgICBcXFwic2V0dXBcXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCJpcCBsaW5rIHNldCBsbyB1cFxcXCIsXFxuKyAgICAgICAgICAgIFxcXCIkVEMgcWRpc2MgYWRkIGRldiBsbyBoYW5kbGUgMTogcm9vdCBoZnNjIGRlZmF1bHQgMzFcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6IGNsYXNzaWQgMToxIGhmc2MgcnQgbTIgMTAwa2JpdFxcXCIsXFxuKyAgICAgICAgICAgIFxcXCIkVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMTogY2xhc3NpZCAxOjIgaGZzYyBydCBtMiAxMDBrYml0XFxcIixcXG4rICAgICAgICAgICAgXFxcIiRUQyBjbGFzcyBhZGQgZGV2IGxvIHBhcmVudCAxOiBjbGFzc2lkIDE6MyBoZnNjIHJ0IG0yIDEwMGtiaXRcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6MSBjbGFzc2lkIDE6MTAgaGZzYyBydCBtMiA1MGtiaXRcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6MiBjbGFzc2lkIDE6MjAgaGZzYyBydCBtMiAxMGtiaXRcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6MyBjbGFzc2lkIDE6MzAgaGZzYyBydCBtMiAxMGtiaXRcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6MyBjbGFzc2lkIDE6MzEgaGZzYyBydCBtMiAxMDBrYml0XFxcIixcXG4rICAgICAgICAgICAgXFxcIiRUQyBmaWx0ZXIgYWRkIGRldiBsbyBwYXJlbnQgMTogcHJvdG9jb2wgaXAgcHJpbyAxIHUzMiBtYXRjaCB1OCAwIDAgYXQgMCBmbG93aWQgMToxXFxcIixcXG4rICAgICAgICAgICAgXFxcIiRUQyBmaWx0ZXIgYWRkIGRldiBsbyBwYXJlbnQgMToxIHByb3RvY29sIGlwIHByaW8gMSB1MzIgbWF0Y2ggdTggMCAwIGF0IDAgZmxvd2lkIDE6MlxcXCIsXFxuKyAgICAgICAgICAgIFxcXCIkVEMgZmlsdGVyIGFkZCBkZXYgbG8gcGFyZW50IDE6MiBwcm90b2NvbCBpcCBwcmlvIDEgdTMyIG1hdGNoIHU4IDAgMCBhdCAwIGZsb3dpZCAxOjNcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGZpbHRlciBhZGQgZGV2IGxvIHBhcmVudCAxOjMgcHJvdG9jb2wgaXAgcHJpbyAxIHUzMiBtYXRjaCB1OCAwIDAgYXQgMCBmbG93aWQgMTozMVxcXCJcXG4rICAgICAgICBdLFxcbisgICAgICAgIFxcXCJjbWRVbmRlclRlc3RcXFwiOiBcXFwicGluZyAtbiAtYyAxMCAtVyAxIDEyNy4wLjAuMTsgc2xlZXAgMVxcXCIsXFxuKyAgICAgICAgXFxcImV4cEV4aXRDb2RlXFxcIjogXFxcIjBcXFwiLFxcbisgICAgICAgIFxcXCJ2ZXJpZnlDbWRcXFwiOiBcXFwiJFRDIC1zIGNsYXNzIHNob3cgZGV2IGxvXFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hQYXR0ZXJuXFxcIjogXFxcImNsYXNzIGhmc2MgMTozMSBwYXJlbnQgMTozIHJ0LipcXFxcXFxcXG4uKlNlbnQgWzAtOV0rIGJ5dGVzIFsxLTldWzAtOV0qIHBrdFxcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoQ291bnRcXFwiOiBcXFwiMVxcXCIsXFxuKyAgICAgICAgXFxcInRlYXJkb3duXFxcIjogW1xcbisgICAgICAgICAgICBcXFwiJFRDIHFkaXNjIGRlbCBkZXYgbG8gaGFuZGxlIDE6IHJvb3RcXFwiXFxuKyAgICAgICAgXVxcbiAgICAgfVxcbiBdXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAwOjIyLjM1NzIwMDY5MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjA1MTkxMDExNjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX1NDSF9IRlNDXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhmc2NfY2xhc3NpZnlcIixcbiAgICBcImhmc2NfZW5xdWV1ZVwiLFxuICAgIFwiaGZzY19iaW5kX3RjZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhmc2NfY2xhc3NpZnkgaW4gbmV0L3NjaGVkL3NjaF9oZnNjLmMgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcyBkdXJpbmcgcGFja2V0IGNsYXNzaWZpY2F0aW9uIHdoZW4gZmlsdGVyIGNsYXNzIGJpbmRpbmdzIGV4cGVyaWVuY2UgbGF0ZXJhbCBvciB1cHdhcmQgbGV2ZWwgZHJpZnQgZm9sbG93aW5nIGNsYXNzIGhpZXJhcmNoeSB1cGRhdGVzLiBUaGUgY29kZSBpcyBwYXJ0IG9mIHRoZSBjb3JlIHRyYWZmaWMgY29udHJvbCBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHJ0bmV0bGluayAoY29uZmlndXJpbmcgSEZTQyBxZGlzY3MsIGNsYXNzZXMsIGFuZCBmaWx0ZXJzKSBhbmQgc2VuZGluZyBuZXR3b3JrIHRyYWZmaWMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgZWRnZSBjYXNlcyBpbiBjbGFzcyBoaWVyYXJjaHkgbWFuaXB1bGF0aW9uLCBmaWx0ZXIgYmluZGluZywgYW5kIGNsYXNzaWZ5IGxvb3AgYm91bmRpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWZjMzA3NDhhMTc1YTU2Y2E5NjNjZjE2ZGVjNzUyY2FlMTA0YjRkNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDA5OjAwOjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9oZnNjLmMgYi9uZXQvc2NoZWQvc2NoX2hmc2MuY1xuaW5kZXggZTg3ZjUwMjFhMTk5NS4uYjA3M2VmYWYyYmY1ZiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfaGZzYy5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2hmc2MuY1xuQEAgLTM4Niw2ICszODYsMTIgQEAgY2Z0cmVlX3VwZGF0ZShzdHJ1Y3QgaGZzY19jbGFzcyAqY2wpXG4gI2RlZmluZVx0U01fTUFTS1x0XHQoKDFVTEwgXHUwMDNjXHUwMDNjIFNNX1NISUZUKSAtIDEpXG4gI2RlZmluZVx0SVNNX01BU0tcdCgoMVVMTCBcdTAwM2NcdTAwM2MgSVNNX1NISUZUKSAtIDEpXG4gXG4rLypcbisgKiBib3VuZCBvbiBjb25zZWN1dGl2ZSBub24tZGVzY2VuZGluZyAobGF0ZXJhbCAvIHVwd2FyZCkgaG9wcyBpbiBhXG4rICogY2xhc3NpZnkgd2FsaywgbWlycm9yaW5nIGh0YidzIFRDX0hUQl9NQVhERVBUSCBoZWFkcm9vbVxuKyAqL1xuKyNkZWZpbmVcdEhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUXHQ4XG4rXG4gc3RhdGljIGlubGluZSB1NjRcbiBzZWdfeDJ5KHU2NCB4LCB1NjQgc20pXG4ge1xuQEAgLTExMzMsNiArMTEzOSw3IEBAIGhmc2NfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsIGludCAqcWVycilcbiBcdHN0cnVjdCBoZnNjX2NsYXNzICpoZWFkLCAqY2w7XG4gXHRzdHJ1Y3QgdGNmX3Jlc3VsdCByZXM7XG4gXHRzdHJ1Y3QgdGNmX3Byb3RvICp0Y2Y7XG4rXHR1bnNpZ25lZCBpbnQgZHJpZnQ7XG4gXHRpbnQgcmVzdWx0O1xuIFxuIFx0aWYgKFRDX0hfTUFKKHNrYi1cdTAwM2Vwcmlvcml0eSBeIHNjaC1cdTAwM2VoYW5kbGUpID09IDAgXHUwMDI2XHUwMDI2XG5AQCAtMTE0Miw2ICsxMTQ5LDcgQEAgaGZzY19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKVxuIFxuIFx0KnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7XG4gXHRoZWFkID0gXHUwMDI2cS1cdTAwM2Vyb290O1xuK1x0ZHJpZnQgPSBIRlNDX0NMQVNTSUZZX01BWF9EUklGVDtcbiBcdHRjZiA9IHJjdV9kZXJlZmVyZW5jZV9iaChxLVx1MDAzZXJvb3QuZmlsdGVyX2xpc3QpO1xuIFx0d2hpbGUgKHRjZiBcdTAwMjZcdTAwMjYgKHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIHRjZiwgXHUwMDI2cmVzLCBmYWxzZSkpIFx1MDAzZT0gMCkge1xuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcbkBAIC0xMTY3LDYgKzExNzUsMTYgQEAgaGZzY19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKVxuIFx0XHRpZiAoY2wtXHUwMDNlbGV2ZWwgPT0gMClcbiBcdFx0XHRyZXR1cm4gY2w7IC8qIGhpdCBsZWFmIGNsYXNzICovXG4gXG4rXHRcdC8qXG4rXHRcdCAqIGZsb3dpZCBiaW5kcyBza2lwIHRoZSBsZXZlbCBjaGVjayBhYm92ZSAocmVzLmNsYXNzIGlzIHNldFxuK1x0XHQgKiBhdCBiaW5kIHRpbWUgYW5kIGxldmVscyBkcmlmdCBhZnRlciksIHNvIGEgd2FsayBjYW4gZm9sbG93XG4rXHRcdCAqIGxhdGVyYWwgaG9wcyB3aXRob3V0IGRlc2NlbmRpbmc7IGJvdW5kIHRoZW0gaGVyZS5cbitcdFx0ICovXG4rXHRcdGlmIChjbC1cdTAwM2VsZXZlbCBcdTAwM2U9IGhlYWQtXHUwMDNlbGV2ZWwgXHUwMDI2XHUwMDI2IGRyaWZ0LS0gPT0gMCkge1xuK1x0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCJoZnNjOiBjbGFzc2lmeSBsb29wIGRldGVjdGVkLCBkcm9wcGluZyBwYWNrZXRcXG5cIik7XG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXHRcdH1cbitcbiBcdFx0LyogYXBwbHkgaW5uZXIgZmlsdGVyIGNoYWluICovXG4gXHRcdHRjZiA9IHJjdV9kZXJlZmVyZW5jZV9iaChjbC1cdTAwM2VmaWx0ZXJfbGlzdCk7XG4gXHRcdGhlYWQgPSBjbDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9oZnNjLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9oZnNjLmpzb25cbmluZGV4IGM5OGMzMzk0MjRkNGUuLjgyZDJmOGFmMTQ2MGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9oZnNjLmpzb25cbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2hmc2MuanNvblxuQEAgLTE2OSw1ICsxNjksMzkgQEBcbiAgICAgICAgIFwidGVhcmRvd25cIjogW1xuICAgICAgICAgICAgIFwiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCJcbiAgICAgICAgIF1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcIjhjMzlcIixcbisgICAgICAgIFwibmFtZVwiOiBcIkhGU0MgY2xhc3NpZnkgd2FsayBzdGlsbCByZWFjaGVzIGxlYWYgYWZ0ZXIgbGF0ZXJhbCBkcmlmdFwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiaGZzY1wiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW1xuKyAgICAgICAgICAgIFwiaXAgbGluayBzZXQgbG8gdXBcIixcbisgICAgICAgICAgICBcIiRUQyBxZGlzYyBhZGQgZGV2IGxvIGhhbmRsZSAxOiByb290IGhmc2MgZGVmYXVsdCAzMVwiLFxuKyAgICAgICAgICAgIFwiJFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6IGNsYXNzaWQgMToxIGhmc2MgcnQgbTIgMTAwa2JpdFwiLFxuKyAgICAgICAgICAgIFwiJFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6IGNsYXNzaWQgMToyIGhmc2MgcnQgbTIgMTAwa2JpdFwiLFxuKyAgICAgICAgICAgIFwiJFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6IGNsYXNzaWQgMTozIGhmc2MgcnQgbTIgMTAwa2JpdFwiLFxuKyAgICAgICAgICAgIFwiJFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6MSBjbGFzc2lkIDE6MTAgaGZzYyBydCBtMiA1MGtiaXRcIixcbisgICAgICAgICAgICBcIiRUQyBjbGFzcyBhZGQgZGV2IGxvIHBhcmVudCAxOjIgY2xhc3NpZCAxOjIwIGhmc2MgcnQgbTIgMTBrYml0XCIsXG4rICAgICAgICAgICAgXCIkVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMTozIGNsYXNzaWQgMTozMCBoZnNjIHJ0IG0yIDEwa2JpdFwiLFxuKyAgICAgICAgICAgIFwiJFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6MyBjbGFzc2lkIDE6MzEgaGZzYyBydCBtMiAxMDBrYml0XCIsXG4rICAgICAgICAgICAgXCIkVEMgZmlsdGVyIGFkZCBkZXYgbG8gcGFyZW50IDE6IHByb3RvY29sIGlwIHByaW8gMSB1MzIgbWF0Y2ggdTggMCAwIGF0IDAgZmxvd2lkIDE6MVwiLFxuKyAgICAgICAgICAgIFwiJFRDIGZpbHRlciBhZGQgZGV2IGxvIHBhcmVudCAxOjEgcHJvdG9jb2wgaXAgcHJpbyAxIHUzMiBtYXRjaCB1OCAwIDAgYXQgMCBmbG93aWQgMToyXCIsXG4rICAgICAgICAgICAgXCIkVEMgZmlsdGVyIGFkZCBkZXYgbG8gcGFyZW50IDE6MiBwcm90b2NvbCBpcCBwcmlvIDEgdTMyIG1hdGNoIHU4IDAgMCBhdCAwIGZsb3dpZCAxOjNcIixcbisgICAgICAgICAgICBcIiRUQyBmaWx0ZXIgYWRkIGRldiBsbyBwYXJlbnQgMTozIHByb3RvY29sIGlwIHByaW8gMSB1MzIgbWF0Y2ggdTggMCAwIGF0IDAgZmxvd2lkIDE6MzFcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwicGluZyAtbiAtYyAxMCAtVyAxIDEyNy4wLjAuMTsgc2xlZXAgMVwiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIC1zIGNsYXNzIHNob3cgZGV2IGxvXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcImNsYXNzIGhmc2MgMTozMSBwYXJlbnQgMTozIHJ0LipcXFxcbi4qU2VudCBbMC05XSsgYnl0ZXMgWzEtOV1bMC05XSogcGt0XCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcbisgICAgICAgICAgICBcIiRUQyBxZGlzYyBkZWwgZGV2IGxvIGhhbmRsZSAxOiByb290XCJcbisgICAgICAgIF1cbiAgICAgfVxuIF1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAwOjIyLjM1NzIwMjIyMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI5NDUxOTQ0Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSEZTQyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBUaGUgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCBzbyB0aGF0J3MgdGhlIGNvbnRleHQuIFRoZSBkaWZmIGFmZmVjdHMgYG5ldC9zY2hlZC9zY2hfaGZzYy5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2hmc2MuanNvbmAuIFNvdW5kcyBsaWtlIGEgZml4IGFuZCBzb21lIGFzc29jaWF0ZWQgdGVzdGluZy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdC5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgd2l0aGluIGBoZnNjX2NsYXNzaWZ5YCBpbiBgc2NoX2hmc2MuY2AuIFRoZXkncmUgaW50cm9kdWNpbmcgYSBgSEZTQ19DTEFTU0lGWV9NQVhfRFJJRlRgIGxpbWl0IHdpdGggYSB2YWx1ZSBvZiA4LiBUaGlzIGlzIGludGVyZXN0aW5nLiBGcm9tIHRoZSBjb2RlLCBpdCBzZWVtcyB0aGV5J3JlIGFkZGluZyBhIGNoZWNrIGZvciBwb3RlbnRpYWwgY2xhc3NpZmljYXRpb24gbG9vcHMsIHBhcnRpY3VsYXJseSB3aGVuIGZsb3cgSURzIGFyZSBpbnZvbHZlZC4gRXNzZW50aWFsbHksIHRoZXkgYXJlIHByZXZlbnRpbmcgcG90ZW50aWFsIGluZmluaXRlIGxvb3BzIGJ5IGRlY3JlbWVudGluZyB0aGUgYGRyaWZ0YCB2YXJpYWJsZSB3aGVuIHRoZSBgbGV2ZWxgIG9mIHRoZSBjdXJyZW50IGNsYXNzIChgY2xgKSBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIHRoZSBgbGV2ZWxgIG9mIHRoZSBoZWFkIGNsYXNzIChgaGVhZGApLiBJZiBgZHJpZnRgIHJlYWNoZXMgemVybywgaXQgaW5kaWNhdGVzIGEgY2xhc3NpZmljYXRpb24gbG9vcCBhbmQgdGhlIHBhY2tldCBnZXRzIGRyb3BwZWQuIFRoYXQncyBhIHJlYXNvbmFibGUgc2FmZWd1YXJkLiBUaGUgYHByX3dhcm5fcmF0ZWxpbWl0ZWRgIHN1Z2dlc3RzIHRoZXkgd2FudCB0byBhdm9pZCBmbG9vZGluZyB0aGUgbG9ncy5cblxuTm93LCBJJ2QgbGlrZSB0byBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIHJlcXVpcmVtZW50IGZvciB0aGUgaW5jbHVzaW9uIG9mIGBzY2hfaGZzYy5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBwcmVyZXF1aXNpdGVzIG9yIGRlcGVuZGVuY2llcyB0aGF0IHRoaXMgY2hhbmdlIG1pZ2h0IGJlIGltcGFjdGluZy4gVXNpbmcgZ3JlcHBlciBzaG91bGQgYmUgdGhlIHF1aWNrZXN0IHdheSB0byBmaW5kIHRoYXQuIEknbGwgc2VhcmNoIGBuZXQvc2NoZWQvS2NvbmZpZ2AgdG8gZ2V0IHRoYXQgaW5mb3JtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNjEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMDo1MS44MDkxNDkxNDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyNjE2MjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9TQ0hfSEZTQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9NDg9Y29uZmlnIE5FVF9TQ0hfSFRCXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy02MS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo2Mjpjb25maWcgTkVUX1NDSF9IRlNDXFxubmV0L3NjaGVkL0tjb25maWctNjMtXFx0dHJpc3RhdGUgXFxcIkhpZXJhcmNoaWNhbCBGYWlyIFNlcnZpY2UgQ3VydmUgKEhGU0MpXFxcIlxcbi0tXFxubmV0L3NjaGVkL01ha2VmaWxlPTM1PW9iai0kKENPTkZJR19ORVRfU0NIX0hUQilcXHQrPSBzY2hfaHRiLm9cXG5uZXQvc2NoZWQvTWFrZWZpbGU6MzY6b2JqLSQoQ09ORklHX05FVF9TQ0hfSEZTQylcXHQrPSBzY2hfaGZzYy5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTM3LW9iai0kKENPTkZJR19ORVRfU0NIX1JFRClcXHQrPSBzY2hfcmVkLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDA6NTEuOTQxNzc2MjI5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTA1ODEzMjcyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0cywgdGFyZ2V0aW5nIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEtjb25maWcgQ29udGV4dCoqXG5cbk9rYXksIGxldCdzIHpvb20gaW4uIExpbmUgNjIgb2YgYG5ldC9zY2hlZC9LY29uZmlnYC4uLiByaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBncmFzcCB0aGUgaW50ZW50IG9mIHRoZSBhdXRob3IgYW5kIHRoZSBpbXBsaWNhdGlvbnMuIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gYWJvdXQgMTAtMjAgbGluZXMgb24gZWl0aGVyIHNpZGUuIEknbSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZSBzZWN0aW9uLiBXaGF0J3MgYmVpbmcgZW5hYmxlZCBvciBkaXNhYmxlZCBpbiB0aGUgY29udGV4dCBvZiB0aGlzIGxpbmU/IElzIGl0IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBxdWV1ZWluZyBkaXNjaXBsaW5lLCBhIHBhcnRpY3VsYXIgZmVhdHVyZSwgb3IgbWF5YmUgc29tZSBkZWJ1Z2dpbmcgb3B0aW9uPyBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gcHJvdmlkZSB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHdoYXQncyBnb2luZyBvbi4gVGhpcyB3aWxsIGhlbHAgaW5mb3JtIHdoZXRoZXIgdGhpcyBzZWN0aW9uIGlzIGtleSB0byB0aGUgb3ZlcmFsbCBmcmFtZXdvcmsgb3IgcG9zc2libHkgYW5jaWxsYXJ5IHRvIG1vcmUgY3JpdGljYWwgZnVuY3Rpb25zLiBJJ2xsIG1lbnRhbGx5IG1hcCBvdXQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgbGluZXMgYXJvdW5kIDYyLCBhbmQgdGhlbiBjaXJjbGUgYmFjayB0byBhbmFseXplIGxpbmUgNjIgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTE1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDE6MDIuNTI0MTQzNzMyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDU4OlxcdFxcbiAgNTk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICA2MDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzY2hfaHRiLlxcbiAgNjE6XFx0XFxuICA2MjpcXHRjb25maWcgTkVUX1NDSF9IRlNDXFxuICA2MzpcXHRcXHR0cmlzdGF0ZSBcXFwiSGllcmFyY2hpY2FsIEZhaXIgU2VydmljZSBDdXJ2ZSAoSEZTQylcXFwiXFxuICA2NDpcXHRcXHRoZWxwXFxuICA2NTpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBIaWVyYXJjaGljYWwgRmFpciBTZXJ2aWNlIEN1cnZlXFxuICA2NjpcXHRcXHQgIChIRlNDKSBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0uXFxuICA2NzpcXHRcXG4gIDY4OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgNjk6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX2hmc2MuXFxuICA3MDpcXHRcXG4gIDcxOlxcdGNvbmZpZyBORVRfU0NIX1BSSU9cXG4gIDcyOlxcdFxcdHRyaXN0YXRlIFxcXCJNdWx0aSBCYW5kIFByaW9yaXR5IFF1ZXVlaW5nIChQUklPKVxcXCJcXG4gIDczOlxcdFxcdGhlbHBcXG4gIDc0OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYW4gbi1iYW5kIHByaW9yaXR5IHF1ZXVlIHBhY2tldFxcbiAgNzU6XFx0XFx0ICBzY2hlZHVsZXIuXFxuICA3NjpcXHRcXG4gIDc3OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMTowMi41MjQzMDc1MjJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzgzNDYwMTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipOYXZpZ2F0aW5nIHRoZSBIRlNDIEtjb25maWcgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBgTkVUX1NDSF9IRlNDYC4gVGltZSB0byBkaWcgaW50byB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLiBJJ20gYXNzdW1pbmcgdGhhdCdzIHdoZXJlIHRoZSBkZWZpbml0aW9uIGFuZCBhbnkgY29uc3RyYWludHMgb24gdGhhdCBzY2hlZHVsZXIgd2lsbCBiZS4gSSBuZWVkIHRvIHNlZSBpZiBpdCdzIGRlcGVuZGVudCBvbiBhbnkgb3RoZXIgZmVhdHVyZXMgb3Iga2VybmVsIG9wdGlvbnMuIEFyZSB0aGVyZSBhbnkgcGFyZW50IGRlcGVuZGVuY2llcywgb3IgcGVyaGFwcyBjaGlsZCBkZXBlbmRlbmNpZXM/IFdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbXVzdCBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGZvciBgTkVUX1NDSF9IRlNDYCB0byB3b3JrIGNvcnJlY3RseSwgb3IgZXZlbiB0byBiZSBhdmFpbGFibGUgYXQgYWxsPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcGxhY2UgaW4gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzY2hlZHVsZXIgZWNvc3lzdGVtLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NjMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAxOjA1LjMwNzc3MDk5M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBUcmFmZmljIGNvbnRyb2wgY29uZmlndXJhdGlvbi5cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBORVRfU0NIRURcXG4gICA3OlxcdFxcdGJvb2wgXFxcIlFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1xcXCJcXG4gICA4OlxcdFxcdHNlbGVjdCBORVRfU0NIX0ZJRk9cXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgV2hlbiB0aGUga2VybmVsIGhhcyBzZXZlcmFsIHBhY2tldHMgdG8gc2VuZCBvdXQgb3ZlciBhIG5ldHdvcmtcXG4gIDExOlxcdFxcdCAgZGV2aWNlLCBpdCBoYXMgdG8gZGVjaWRlIHdoaWNoIG9uZXMgdG8gc2VuZCBmaXJzdCwgd2hpY2ggb25lcyB0b1xcbiAgMTI6XFx0XFx0ICBkZWxheSwgYW5kIHdoaWNoIG9uZXMgdG8gZHJvcC4gVGhpcyBpcyB0aGUgam9iIG9mIHRoZSBxdWV1ZWluZ1xcbiAgMTM6XFx0XFx0ICBkaXNjaXBsaW5lcywgc2V2ZXJhbCBkaWZmZXJlbnQgYWxnb3JpdGhtcyBmb3IgaG93IHRvIGRvIHRoaXNcXG4gIDE0OlxcdFxcdCAgXFxcImZhaXJseVxcXCIgaGF2ZSBiZWVuIHByb3Bvc2VkLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHQgIElmIHlvdSBzYXkgTiBoZXJlLCB5b3Ugd2lsbCBnZXQgdGhlIHN0YW5kYXJkIHBhY2tldCBzY2hlZHVsZXIsIHdoaWNoXFxuICAxNzpcXHRcXHQgIGlzIGEgRklGTyAoZmlyc3QgY29tZSwgZmlyc3Qgc2VydmVkKS4gSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlXFxuICAxODpcXHRcXHQgIGFibGUgdG8gY2hvb3NlIGZyb20gYW1vbmcgc2V2ZXJhbCBhbHRlcm5hdGl2ZSBhbGdvcml0aG1zIHdoaWNoIGNhblxcbiAgMTk6XFx0XFx0ICB0aGVuIGJlIGF0dGFjaGVkIHRvIGRpZmZlcmVudCBuZXR3b3JrIGRldmljZXMuIFRoaXMgaXMgdXNlZnVsIGZvclxcbiAgMjA6XFx0XFx0ICBleGFtcGxlIGlmIHNvbWUgb2YgeW91ciBuZXR3b3JrIGRldmljZXMgYXJlIHJlYWwgdGltZSBkZXZpY2VzIHRoYXRcXG4gIDIxOlxcdFxcdCAgbmVlZCBhIGNlcnRhaW4gbWluaW11bSBkYXRhIGZsb3cgcmF0ZSwgb3IgaWYgeW91IG5lZWQgdG8gbGltaXQgdGhlXFxuICAyMjpcXHRcXHQgIG1heGltdW0gZGF0YSBmbG93IHJhdGUgZm9yIHRyYWZmaWMgd2hpY2ggbWF0Y2hlcyBzcGVjaWZpZWQgY3JpdGVyaWEuXFxuICAyMzpcXHRcXHQgIFRoaXMgY29kZSBpcyBjb25zaWRlcmVkIHRvIGJlIGV4cGVyaW1lbnRhbC5cXG4gIDI0OlxcdFxcbiAgMjU6XFx0XFx0ICBUbyBhZG1pbmlzdGVyIHRoZXNlIHNjaGVkdWxlcnMsIHlvdSdsbCBuZWVkIHRoZSB1c2VyLWxldmVsIHV0aWxpdGllc1xcbiAgMjY6XFx0XFx0ICBmcm9tIHRoZSBwYWNrYWdlIGlwcm91dGUyK3RjIGF0XFxuICAyNzpcXHRcXHQgIFxcdTAwM2NodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9uZXQvaXByb3V0ZTIvXFx1MDAzZS4gIFRoYXQgcGFja2FnZVxcbiAgMjg6XFx0XFx0ICBhbHNvIGNvbnRhaW5zIHNvbWUgZG9jdW1lbnRhdGlvbjsgZm9yIG1vcmUsIGNoZWNrIG91dFxcbiAgMjk6XFx0XFx0ICBcXHUwMDNjaHR0cDovL3d3dy5saW51eGZvdW5kYXRpb24ub3JnL2NvbGxhYm9yYXRlL3dvcmtncm91cHMvbmV0d29ya2luZy9pcHJvdXRlMlxcdTAwM2UuXFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdCAgVGhpcyBRdWFsaXR5IG9mIFNlcnZpY2UgKFFvUykgc3VwcG9ydCB3aWxsIGVuYWJsZSB5b3UgdG8gdXNlXFxuICAzMjpcXHRcXHQgIERpZmZlcmVudGlhdGVkIFNlcnZpY2VzIChkaWZmc2VydikgYW5kIFJlc291cmNlIFJlc2VydmF0aW9uIFByb3RvY29sXFxuICAzMzpcXHRcXHQgIChSU1ZQKSBvbiB5b3VyIExpbnV4IHJvdXRlciBpZiB5b3UgYWxzbyBzYXkgWSB0byB0aGUgY29ycmVzcG9uZGluZ1xcbiAgMzQ6XFx0XFx0ICBjbGFzc2lmaWVycyBiZWxvdy4gIERvY3VtZW50YXRpb24gYW5kIHNvZnR3YXJlIGlzIGF0XFxuICAzNTpcXHRcXHQgIFxcdTAwM2NodHRwOi8vZGlmZnNlcnYuc291cmNlZm9yZ2UubmV0L1xcdTAwM2UuXFxuICAzNjpcXHRcXG4gIDM3OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUgYW5kIHRvIFxcXCIvcHJvYyBmaWxlIHN5c3RlbVxcXCIgYmVsb3csIHlvdSB3aWxsIGJlIGFibGVcXG4gIDM4OlxcdFxcdCAgdG8gcmVhZCBzdGF0dXMgaW5mb3JtYXRpb24gYWJvdXQgcGFja2V0IHNjaGVkdWxlcnMgZnJvbSB0aGUgZmlsZVxcbiAgMzk6XFx0XFx0ICAvcHJvYy9uZXQvcHNjaGVkLlxcbiAgNDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAxOjA1LjMwNzk3NjQ1M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc4MjgyMjE2NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkRpZ2dpbmcgaW50byBOZXR3b3JrIFNjaGVkdWxpbmcgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYE5FVF9TQ0hFRGAgYW5kIGBORVRfU0NIX0hGU0NgLCBjbGFzc2ljIG5ldHdvcmsgc2NoZWR1bGVyIHN0dWZmLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSBiZXQgYE5FVF9TQ0hFRGAgaGFzIGEgZGVwZW5kZW5jeSBvbiBhIG1vcmUgZnVuZGFtZW50YWwgbmV0d29yayBmZWF0dXJlLCBsaWtlbHkgYE5FVGAuICBUaW1lIHRvIGNvbmZpcm0gdGhpcyBpbiBgbmV0L0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgTkVUX1NDSEVEYCBlbnRyeS4gSSBuZWVkIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBUaGlzIGluaXRpYWwgYXNzZXNzbWVudCBwcm92aWRlcyB0aGUgYmFzZWxpbmUgY29udGV4dCBvZiBvdGhlciBwb3NzaWJsZSBjb25maWd1cmF0aW9uIGludGVyYWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUzNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDE6MTMuMTM2MjAwNjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDgyMzA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UgXFxcIm5ldC9zY2hlZC9LY29uZmlnXFxcIlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9MjY5PXNvdXJjZSBcXFwibmV0L21hYzgwMjE1NC9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjI3MDpzb3VyY2UgXFxcIm5ldC9zY2hlZC9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTI3MS1zb3VyY2UgXFxcIm5ldC9kY2IvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDE6MTMuMjYxMDMyMzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzcwNzU0ODIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gdGhlIEhGU0MgQ2xhc3NpZmljYXRpb24gTG9naWMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgSEZTQyBzY2hlZHVsZXIgaXNzdWUuIFRoZSBwbGFjZSB0byBzdGFydCBpcyBhbG1vc3QgYWx3YXlzIHRoZSBjbGFzc2lmaWNhdGlvbiBwcm9jZXNzLCBhbmQgZm9yIEhGU0MsIHRoYXQgbWVhbnMgdGFraW5nIGEgbG9vayBhdCBgbmV0L3NjaGVkL3NjaF9oZnNjLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgaGZzY19jbGFzc2lmeWAgZnVuY3Rpb24uIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3IgaW4gdGhpcyBjYXNlLCB3aGVyZSB0aGUgcG90ZW50aWFsIHByb2JsZW0gaXMgYnJld2luZy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBIRlNDIGhhbmRsZXMgcGFja2V0IGNsYXNzaWZpY2F0aW9uIOKAkyBpcyBpdCB1c2luZyB0aGUgdHJhZGl0aW9uYWwgY2xhc3NpZmllcnMsIG9yIHNvbWV0aGluZyB1bmlxdWUgdG8gaXRzIGhpZXJhcmNoaWNhbCBzdHJ1Y3R1cmU/IEFyZSB3ZSBkZWFsaW5nIHdpdGggcWRpc2Mtc3BlY2lmaWMgbWF0Y2ggY3JpdGVyaWEsIG9yIGFyZSB0aGV5IGludGVncmF0ZWQgd2l0aCB0aGUgZ2VuZXJpYyBjbGFzc2lmaWVyIGhvb2tzPyBHb3R0YSB1bmRlcnN0YW5kIGhvdyBpdCBkZWNpZGVzIHdoaWNoIGxlYWYgcXVldWUgYSBwYWNrZXQgZ2V0cyBzdGVlcmVkIGludG8uIFRoaXMgY291bGQgYmUgd2hlcmUgdGhlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgb3IgdGhlIG1pcy1jbGFzc2lmaWNhdGlvbiBsaWVzLiBMZXQncyBzZWUgaG93IHRoZSBmbG93IGlzIGhhbmRsZWQgaW4gdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGluZWZmaWNpZW50IGxvb3BzLCBvciBldmVuIGFuIGluY29ycmVjdCBwcmlvcml0eSBtYXBwaW5nIHRoYXQncyBjYXVzaW5nIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODU2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDE6MTYuOTY4NTgzNjMyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX2hmc2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTMwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTMwOlxcdFxcbjExMzE6XFx0XFx0aGZzY19kZXN0cm95X2NsYXNzKHNjaCwgY2wpO1xcbjExMzI6XFx0XFx0cmV0dXJuIDA7XFxuMTEzMzpcXHR9XFxuMTEzNDpcXHRcXG4xMTM1OlxcdHN0YXRpYyBzdHJ1Y3QgaGZzY19jbGFzcyAqXFxuMTEzNjpcXHRoZnNjX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgKnFlcnIpXFxuMTEzNzpcXHR7XFxuMTEzODpcXHRcXHRzdHJ1Y3QgaGZzY19zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG4xMTM5OlxcdFxcdHN0cnVjdCBoZnNjX2NsYXNzICpoZWFkLCAqY2w7XFxuMTE0MDpcXHRcXHRzdHJ1Y3QgdGNmX3Jlc3VsdCByZXM7XFxuMTE0MTpcXHRcXHRzdHJ1Y3QgdGNmX3Byb3RvICp0Y2Y7XFxuMTE0MjpcXHRcXHR1bnNpZ25lZCBpbnQgZHJpZnQ7XFxuMTE0MzpcXHRcXHRpbnQgcmVzdWx0O1xcbjExNDQ6XFx0XFxuMTE0NTpcXHRcXHRpZiAoVENfSF9NQUooc2tiLVxcdTAwM2Vwcmlvcml0eSBeIHNjaC1cXHUwMDNlaGFuZGxlKSA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuMTE0NjpcXHRcXHQgICAgKGNsID0gaGZzY19maW5kX2NsYXNzKHNrYi1cXHUwMDNlcHJpb3JpdHksIHNjaCkpICE9IE5VTEwpXFxuMTE0NzpcXHRcXHRcXHRpZiAoY2wtXFx1MDAzZWxldmVsID09IDApXFxuMTE0ODpcXHRcXHRcXHRcXHRyZXR1cm4gY2w7XFxuMTE0OTpcXHRcXG4xMTUwOlxcdFxcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xcbjExNTE6XFx0XFx0aGVhZCA9IFxcdTAwMjZxLVxcdTAwM2Vyb290O1xcbjExNTI6XFx0XFx0ZHJpZnQgPSBIRlNDX0NMQVNTSUZZX01BWF9EUklGVDtcXG4xMTUzOlxcdFxcdHRjZiA9IHJjdV9kZXJlZmVyZW5jZV9iaChxLVxcdTAwM2Vyb290LmZpbHRlcl9saXN0KTtcXG4xMTU0OlxcdFxcdHdoaWxlICh0Y2YgXFx1MDAyNlxcdTAwMjYgKHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIHRjZiwgXFx1MDAyNnJlcywgZmFsc2UpKSBcXHUwMDNlPSAwKSB7XFxuMTE1NTpcXHQjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXFxuMTE1NjpcXHRcXHRcXHRzd2l0Y2ggKHJlc3VsdCkge1xcbjExNTc6XFx0XFx0XFx0Y2FzZSBUQ19BQ1RfUVVFVUVEOlxcbjExNTg6XFx0XFx0XFx0Y2FzZSBUQ19BQ1RfU1RPTEVOOlxcbjExNTk6XFx0XFx0XFx0Y2FzZSBUQ19BQ1RfVFJBUDpcXG4xMTYwOlxcdFxcdFxcdFxcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfU1RPTEVOO1xcbjExNjE6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuMTE2MjpcXHRcXHRcXHRjYXNlIFRDX0FDVF9TSE9UOlxcbjExNjM6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTE2NDpcXHRcXHRcXHR9XFxuMTE2NTpcXHQjZW5kaWZcXG4xMTY2OlxcdFxcdFxcdGNsID0gKHN0cnVjdCBoZnNjX2NsYXNzICopcmVzLmNsYXNzO1xcbjExNjc6XFx0XFx0XFx0aWYgKCFjbCkge1xcbjExNjg6XFx0XFx0XFx0XFx0Y2wgPSBoZnNjX2ZpbmRfY2xhc3MocmVzLmNsYXNzaWQsIHNjaCk7XFxuMTE2OTpcXHRcXHRcXHRcXHRpZiAoIWNsKVxcbjExNzA6XFx0XFx0XFx0XFx0XFx0YnJlYWs7IC8qIGZpbHRlciBzZWxlY3RlZCBpbnZhbGlkIGNsYXNzaWQgKi9cXG4xMTcxOlxcdFxcdFxcdFxcdGlmIChjbC1cXHUwMDNlbGV2ZWwgXFx1MDAzZT0gaGVhZC1cXHUwMDNlbGV2ZWwpXFxuMTE3MjpcXHRcXHRcXHRcXHRcXHRicmVhazsgLyogZmlsdGVyIG1heSBvbmx5IHBvaW50IGRvd253YXJkcyAqL1xcbjExNzM6XFx0XFx0XFx0fVxcbjExNzQ6XFx0XFxuMTE3NTpcXHRcXHRcXHRpZiAoY2wtXFx1MDAzZWxldmVsID09IDApXFxuMTE3NjpcXHRcXHRcXHRcXHRyZXR1cm4gY2w7IC8qIGhpdCBsZWFmIGNsYXNzICovXFxuMTE3NzpcXHRcXG4xMTc4OlxcdFxcdFxcdC8qXFxuMTE3OTpcXHRcXHRcXHQgKiBmbG93aWQgYmluZHMgc2tpcCB0aGUgbGV2ZWwgY2hlY2sgYWJvdmUgKHJlcy5jbGFzcyBpcyBzZXRcXG4xMTgwOlxcdFxcdFxcdCAqIGF0IGJpbmQgdGltZSBhbmQgbGV2ZWxzIGRyaWZ0IGFmdGVyKSwgc28gYSB3YWxrIGNhbiBmb2xsb3dcXG4xMTgxOlxcdFxcdFxcdCAqIGxhdGVyYWwgaG9wcyB3aXRob3V0IGRlc2NlbmRpbmc7IGJvdW5kIHRoZW0gaGVyZS5cXG4xMTgyOlxcdFxcdFxcdCAqL1xcbjExODM6XFx0XFx0XFx0aWYgKGNsLVxcdTAwM2VsZXZlbCBcXHUwMDNlPSBoZWFkLVxcdTAwM2VsZXZlbCBcXHUwMDI2XFx1MDAyNiBkcmlmdC0tID09IDApIHtcXG4xMTg0OlxcdFxcdFxcdFxcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXFxcImhmc2M6IGNsYXNzaWZ5IGxvb3AgZGV0ZWN0ZWQsIGRyb3BwaW5nIHBhY2tldFxcXFxuXFxcIik7XFxuMTE4NTpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMTg2OlxcdFxcdFxcdH1cXG4xMTg3OlxcdFxcbjExODg6XFx0XFx0XFx0LyogYXBwbHkgaW5uZXIgZmlsdGVyIGNoYWluICovXFxuMTE4OTpcXHRcXHRcXHR0Y2YgPSByY3VfZGVyZWZlcmVuY2VfYmgoY2wtXFx1MDAzZWZpbHRlcl9saXN0KTtcXG4xMTkwOlxcdFxcdFxcdGhlYWQgPSBjbDtcXG4xMTkxOlxcdFxcdH1cXG4xMTkyOlxcdFxcbjExOTM6XFx0XFx0LyogY2xhc3NpZmljYXRpb24gZmFpbGVkLCB0cnkgZGVmYXVsdCBjbGFzcyAqL1xcbjExOTQ6XFx0XFx0Y2wgPSBoZnNjX2ZpbmRfY2xhc3MoVENfSF9NQUtFKFRDX0hfTUFKKHNjaC1cXHUwMDNlaGFuZGxlKSxcXG4xMTk1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBSRUFEX09OQ0UocS1cXHUwMDNlZGVmY2xzKSksIHNjaCk7XFxuMTE5NjpcXHRcXHRpZiAoY2wgPT0gTlVMTCB8fCBjbC1cXHUwMDNlbGV2ZWwgXFx1MDAzZSAwKVxcbjExOTc6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTE5ODpcXHRcXG4xMTk5OlxcdFxcdHJldHVybiBjbDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDE6MTYuOTY4Nzc1NzYyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4OTQwMTQ0MTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGhmc2NfY2xhc3NpZnlgIENhbGxzaXRlcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoZXJlICpleGFjdGx5KiBpcyBgaGZzY19jbGFzc2lmeWAgYmVpbmcgaW52b2tlZD9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gS25vd2luZyB0aGUgY2FsbCBoaWVyYXJjaHkgaXMgZnVuZGFtZW50YWwgdG8gY29tcHJlaGVuZGluZyBpdHMgcm9sZSwgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgc3lzdGVtLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHZhcmlvdXMgbW9kdWxlcyBvciBjb21wb25lbnRzIHRoYXQgbWlnaHQgYmUgbGV2ZXJhZ2luZyB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgaXRzIGV4ZWN1dGlvbi4gSSBuZWVkIHRvIHRyYWNlIGl0cyB1dGlsaXphdGlvbiB0byBidWlsZCBhIHNvbGlkIHBpY3R1cmUgb2YgaXRzIGludGVncmF0aW9uIGFuZCBiZWhhdmlvci4gQXJlIHdlIGxvb2tpbmcgYXQgaXQgYXMgYSB0b3AtbGV2ZWwgZnVuY3Rpb24sIG9yIGlzIGl0IGJ1cmllZCBkZWVwIHdpdGhpbiBhIGNhbGwgc3RhY2s/IFRoZSBjYWxsaW5nIGNvbnRleHQgaXMgZ29pbmcgdG8gZHJpdmUgaG93IEkgaW50ZXJwcmV0IGl0cyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIzNSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDE6MzUuOTA4OTI0MDU3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTUzNTc0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoZnNjX2NsYXNzaWZ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2hmc2MuYz0xMTM1PXN0YXRpYyBzdHJ1Y3QgaGZzY19jbGFzcyAqXFxubmV0L3NjaGVkL3NjaF9oZnNjLmM6MTEzNjpoZnNjX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgKnFlcnIpXFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTEzNy17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYz0xNTU2PWhmc2NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTU2Mi1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYzoxNTYzOlxcdGNsID0gaGZzY19jbGFzc2lmeShza2IsIHNjaCwgXFx1MDAyNmVycik7XFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTU2NC1cXHRpZiAoY2wgPT0gTlVMTCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMTozNi4wMDg0NjY4NDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODQxNzg2NDc2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqSEZTQyBDb2RlIFdhbGt0aHJvdWdoOiBJbml0aWFsIEV4cGxvcmF0aW9uKipcblxuT2theSwgc28gYGhmc2NfY2xhc3NpZnlgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBkZWZpbmVkIHdpdGhpbiBgbmV0L3NjaGVkL3NjaF9oZnNjLmNgLiBJbnRlcmVzdGluZy4gVGhhdCBtZWFucyBpdCdzIG9ubHkgY2FsbGVkIGludGVybmFsbHkgd2l0aGluIHRoYXQgZmlsZSwgc3BlY2lmaWNhbGx5IGJ5IGBoZnNjX2VucXVldWVgLiBBbHJpZ2h0LCBub3cgSSB3YW50IHRvIGdldCBhIGJyb2FkZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQgZml0cyBpbnRvIHRoZSB3aG9sZSBwaWN0dXJlLiBJIG5lZWQgdG8gc2VlIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIGBzY2hfaGZzYy5jYCB0aGF0IGFyZSAqcmVsYXRlZCogdG8gYGhmc2NfY2xhc3NpZnlgLCBwZXJoYXBzIHRocm91Z2ggYmVpbmcgZXhwb3J0ZWQgb3Igb3RoZXJ3aXNlIGludGVyYWN0aW5nLiBMZXQncyBzZWUgaG93IEkgY2FuIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIHRoaXMgcGFydCBvZiB0aGUga2VybmVsLiBOZXh0LCBsZXQncyB6b29tIGluIGEgYml0IGFuZCB0aG9yb3VnaGx5IGV4YW1pbmUgYGhmc2NfZW5xdWV1ZWAuIEknbGwgYWxzbyBuZWVkIHRvIHJldmlzaXQgdGhlIFFkaXNjIG9wZXJhdGlvbnMgZm9yIEhGU0MgdG8gc2VlIGhvdyBpdCBhbGwgY29tZXMgdG9nZXRoZXIuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBpdHMgcm9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY1NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAxOjQ0LjQyNjMzNDcwM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL3NjaF9oZnNjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTU1NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU1NTpcXHRzdGF0aWMgaW50XFxuMTU1NjpcXHRoZnNjX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSlcXG4xNTU3OlxcdHtcXG4xNTU4OlxcdFxcdHVuc2lnbmVkIGludCBsZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7XFxuMTU1OTpcXHRcXHRzdHJ1Y3QgaGZzY19jbGFzcyAqY2w7XFxuMTU2MDpcXHRcXHRpbnQgZXJyO1xcbjE1NjE6XFx0XFx0Ym9vbCBmaXJzdDtcXG4xNTYyOlxcdFxcbjE1NjM6XFx0XFx0Y2wgPSBoZnNjX2NsYXNzaWZ5KHNrYiwgc2NoLCBcXHUwMDI2ZXJyKTtcXG4xNTY0OlxcdFxcdGlmIChjbCA9PSBOVUxMKSB7XFxuMTU2NTpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwMjYgX19ORVRfWE1JVF9CWVBBU1MpXFxuMTU2NjpcXHRcXHRcXHRcXHRxZGlzY19xc3RhdHNfZHJvcChzY2gpO1xcbjE1Njc6XFx0XFx0XFx0X19xZGlzY19kcm9wKHNrYiwgdG9fZnJlZSk7XFxuMTU2ODpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE1Njk6XFx0XFx0fVxcbjE1NzA6XFx0XFxuMTU3MTpcXHRcXHRmaXJzdCA9ICFjbC1cXHUwMDNlcWRpc2MtXFx1MDAzZXEucWxlbjtcXG4xNTcyOlxcdFxcdGVyciA9IHFkaXNjX2VucXVldWUoc2tiLCBjbC1cXHUwMDNlcWRpc2MsIHRvX2ZyZWUpO1xcbjE1NzM6XFx0XFx0aWYgKHVubGlrZWx5KGVyciAhPSBORVRfWE1JVF9TVUNDRVNTKSkge1xcbjE1NzQ6XFx0XFx0XFx0aWYgKG5ldF94bWl0X2Ryb3BfY291bnQoZXJyKSkge1xcbjE1NzU6XFx0XFx0XFx0XFx0Y2wtXFx1MDAzZXFzdGF0cy5kcm9wcysrO1xcbjE1NzY6XFx0XFx0XFx0XFx0cWRpc2NfcXN0YXRzX2Ryb3Aoc2NoKTtcXG4xNTc3OlxcdFxcdFxcdH1cXG4xNTc4OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTU3OTpcXHRcXHR9XFxuMTU4MDpcXHRcXG4xNTgxOlxcdFxcdHFzdGF0c19iYWNrbG9nX2FkZChzY2gsIGxlbik7XFxuMTU4MjpcXHRcXHRxZGlzY19xbGVuX2luYyhzY2gpO1xcbjE1ODM6XFx0XFxuMTU4NDpcXHRcXHRpZiAoZmlyc3QgXFx1MDAyNlxcdTAwMjYgIWNsX2luX2VsX29yX3Z0dHJlZShjbCkpIHtcXG4xNTg1OlxcdFxcdFxcdGlmIChjbC1cXHUwMDNlY2xfZmxhZ3MgXFx1MDAyNiBIRlNDX1JTQylcXG4xNTg2OlxcdFxcdFxcdFxcdGluaXRfZWQoY2wsIGxlbik7XFxuMTU4NzpcXHRcXHRcXHRpZiAoY2wtXFx1MDAzZWNsX2ZsYWdzIFxcdTAwMjYgSEZTQ19GU0MpXFxuMTU4ODpcXHRcXHRcXHRcXHRpbml0X3ZmKGNsLCBsZW4pO1xcbjE1ODk6XFx0XFx0XFx0LypcXG4xNTkwOlxcdFxcdFxcdCAqIElmIHRoaXMgaXMgdGhlIGZpcnN0IHBhY2tldCwgaXNvbGF0ZSB0aGUgaGVhZCBzbyBhbiBldmVudHVhbFxcbjE1OTE6XFx0XFx0XFx0ICogaGVhZCBkcm9wIGJlZm9yZSB0aGUgZmlyc3QgZGVxdWV1ZSBvcGVyYXRpb24gaGFzIG5vIGNoYW5jZVxcbjE1OTI6XFx0XFx0XFx0ICogdG8gaW52YWxpZGF0ZSB0aGUgZGVhZGxpbmUuXFxuMTU5MzpcXHRcXHRcXHQgKi9cXG4xNTk0OlxcdFxcdFxcdGlmIChjbC1cXHUwMDNlY2xfZmxhZ3MgXFx1MDAyNiBIRlNDX1JTQylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDE6NDQuNDI2NTA0MzYzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU2NDQyOTQ3MjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgY29kZSwgcHJlc2VudGVkIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgc2NoX2hmc2MuY2AgLSBRZGlzYyBhbmQgQ2xhc3MgT3BlcmF0aW9ucyoqXG5cblJpZ2h0LCB0aW1lIHRvIGdldCBhIGdvb2QgbG9vayBhdCBob3cgdGhlIEhpZ2ggRmlkZWxpdHkgU2NoZWR1bGluZyAoSEZTQykgcWRpc2MgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmb2N1cyBvbiB0aG9zZSBgcWRpc2Nfb3BzYCBhbmQgYGNsYXNzX29wc2Agc3RydWN0dXJlcyBkZWZpbmVkIHdpdGhpbiBgc2NoX2hmc2MuY2AuIFRoZXNlIGFyZSB0aGUgaGVhcnQgb2YgaG93IEhGU0MgYWN0dWFsbHkgKndvcmtzKiBhdCB0aGUga2VybmVsIGxldmVsLiBUaGV5J2xsIGRpY3RhdGUgZXZlcnl0aGluZyDigJMgZnJvbSBob3cgbmV3IEhGU0MgaW5zdGFuY2VzIGFyZSBjcmVhdGVkIGFuZCBjb25maWd1cmVkICh0aGUgYHFkaXNjX29wc2ApLCB0byBob3cgY2xhc3NlcyBhcmUgYWRkZWQsIHJlbW92ZWQsIHNjaGVkdWxlZCwgYW5kIG1ldHJpY3MgYXJlIGdhdGhlcmVkICh0aGF0J3MgdGhlIGBjbGFzc19vcHNgKS4gSXQncyBhbGwgYWJvdXQgdW5kZXJzdGFuZGluZyBob3cgdGhlc2Ugb3BzIGhvb2sgaW50byB0aGUgY29yZSB0cmFmZmljIGNvbnRyb2wgZnJhbWV3b3JrLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IGRpc3NlY3QgZWFjaCBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiB0aG9zZSBzdHJ1Y3R1cmVzLCBtYWtpbmcgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIEhGU0Mgc2NoZWR1bGluZyBiZWhhdmlvciB0aGV5IGVuY2Fwc3VsYXRlLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAyOjQwLjg2OTQ1NDQ3OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU2OTYyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IFFkaXNjX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2hmc2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2hmc2MuYz0xNjc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzIGhmc2NfY2xhc3Nfb3BzID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTY5MC1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYzoxNjkxOnN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIGhmc2NfcWRpc2Nfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTY5Mi1cXHQuaWRcXHRcXHQ9IFxcXCJoZnNjXFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDI6NDAuOTM1MTU3NDc3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk5MDUyNjAzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlBlZXJpbmcgaW50byB0aGUgQ29yZTogQ2xhc3MgT3BzIGFuZCBRZGlzYyBPcHMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyB0cmFmZmljIHNoYXBpbmcgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGRlZmluaXRpb25zIG9mIHRoZSBjbGFzcyBvcGVyYXRpb25zIChjbGFzcyBvcHMpIGFuZCBxdWV1ZWluZyBkaXNjaXBsaW5lIG9wZXJhdGlvbnMgKHFkaXNjIG9wcykuIFRoZXNlIGFyZSB0aGUgYmVkcm9jaywgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiB0aGUgZW50aXJlIG1lY2hhbmlzbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBtZXRob2RzIHRoZXkgZXhwb3NlLCB3aGF0IGRhdGEgc3RydWN0dXJlcyB0aGV5IGludGVyYWN0IHdpdGgsIGFuZCBob3cgdGhleSBkZWZpbmUgdGhlIGJlaGF2aW9yIG9mIHRoZSB0cmFmZmljIGNvbnRyb2wgc3lzdGVtLiBFc3NlbnRpYWxseSwgSSB3YW50IHRvIHNlZSB3aGF0IGtub2JzIGFyZSBhdmFpbGFibGUgYW5kIGhvdyB0aG9zZSBrbm9icyBhcmUgZGVmaW5lZCB0byBhY3R1YWxseSBtYW5pcHVsYXRlIHRoZSBuZXR3b3JrIHRyYWZmaWMuIFVuZGVyc3RhbmRpbmcgdGhlaXIgZnVuY3Rpb24gYXQgdGhlIGxvd2VzdCBsZXZlbCB3aWxsIGlsbHVtaW5hdGUgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgc3lzdGVtIGFzIGEgd2hvbGUuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBkaXNzZWN0IHRoZXNlIGRlZmluaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDAwOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAyOjUwLjg0MDQxOTk4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX2hmc2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjcwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjcwOlxcdFxcdHFkaXNjX3FzdGF0c19iYWNrbG9nX2RlYyhzY2gsIHNrYik7XFxuMTY3MTpcXHRcXHRxZGlzY19xbGVuX2RlYyhzY2gpO1xcbjE2NzI6XFx0XFxuMTY3MzpcXHRcXHRyZXR1cm4gc2tiO1xcbjE2NzQ6XFx0fVxcbjE2NzU6XFx0XFxuMTY3NjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IFFkaXNjX2NsYXNzX29wcyBoZnNjX2NsYXNzX29wcyA9IHtcXG4xNjc3OlxcdFxcdC5jaGFuZ2VcXHRcXHQ9IGhmc2NfY2hhbmdlX2NsYXNzLFxcbjE2Nzg6XFx0XFx0LmRlbGV0ZVxcdFxcdD0gaGZzY19kZWxldGVfY2xhc3MsXFxuMTY3OTpcXHRcXHQuZ3JhZnRcXHRcXHQ9IGhmc2NfZ3JhZnRfY2xhc3MsXFxuMTY4MDpcXHRcXHQubGVhZlxcdFxcdD0gaGZzY19jbGFzc19sZWFmLFxcbjE2ODE6XFx0XFx0LnFsZW5fbm90aWZ5XFx0PSBoZnNjX3FsZW5fbm90aWZ5LFxcbjE2ODI6XFx0XFx0LmZpbmRcXHRcXHQ9IGhmc2Nfc2VhcmNoX2NsYXNzLFxcbjE2ODM6XFx0XFx0LmJpbmRfdGNmXFx0PSBoZnNjX2JpbmRfdGNmLFxcbjE2ODQ6XFx0XFx0LnVuYmluZF90Y2ZcXHQ9IGhmc2NfdW5iaW5kX3RjZixcXG4xNjg1OlxcdFxcdC50Y2ZfYmxvY2tcXHQ9IGhmc2NfdGNmX2Jsb2NrLFxcbjE2ODY6XFx0XFx0LmR1bXBcXHRcXHQ9IGhmc2NfZHVtcF9jbGFzcyxcXG4xNjg3OlxcdFxcdC5kdW1wX3N0YXRzXFx0PSBoZnNjX2R1bXBfY2xhc3Nfc3RhdHMsXFxuMTY4ODpcXHRcXHQud2Fsa1xcdFxcdD0gaGZzY193YWxrXFxuMTY4OTpcXHR9O1xcbjE2OTA6XFx0XFxuMTY5MTpcXHRzdGF0aWMgc3RydWN0IFFkaXNjX29wcyBoZnNjX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbjE2OTI6XFx0XFx0LmlkXFx0XFx0PSBcXFwiaGZzY1xcXCIsXFxuMTY5MzpcXHRcXHQuaW5pdFxcdFxcdD0gaGZzY19pbml0X3FkaXNjLFxcbjE2OTQ6XFx0XFx0LmNoYW5nZVxcdFxcdD0gaGZzY19jaGFuZ2VfcWRpc2MsXFxuMTY5NTpcXHRcXHQucmVzZXRcXHRcXHQ9IGhmc2NfcmVzZXRfcWRpc2MsXFxuMTY5NjpcXHRcXHQuZGVzdHJveVxcdD0gaGZzY19kZXN0cm95X3FkaXNjLFxcbjE2OTc6XFx0XFx0LmR1bXBcXHRcXHQ9IGhmc2NfZHVtcF9xZGlzYyxcXG4xNjk4OlxcdFxcdC5lbnF1ZXVlXFx0PSBoZnNjX2VucXVldWUsXFxuMTY5OTpcXHRcXHQuZGVxdWV1ZVxcdD0gaGZzY19kZXF1ZXVlLFxcbjE3MDA6XFx0XFx0LnBlZWtcXHRcXHQ9IHFkaXNjX3BlZWtfZGVxdWV1ZWQsXFxuMTcwMTpcXHRcXHQuY2xfb3BzXFx0XFx0PSBcXHUwMDI2aGZzY19jbGFzc19vcHMsXFxuMTcwMjpcXHRcXHQucHJpdl9zaXplXFx0PSBzaXplb2Yoc3RydWN0IGhmc2Nfc2NoZWQpLFxcbjE3MDM6XFx0XFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRVxcbjE3MDQ6XFx0fTtcXG4xNzA1OlxcdE1PRFVMRV9BTElBU19ORVRfU0NIKFxcXCJoZnNjXFxcIik7XFxuMTcwNjpcXHRcXG4xNzA3OlxcdHN0YXRpYyBpbnQgX19pbml0XFxuMTcwODpcXHRoZnNjX2luaXQodm9pZClcXG4xNzA5OlxcdHtcXG4xNzEwOlxcdFxcdHJldHVybiByZWdpc3Rlcl9xZGlzYyhcXHUwMDI2aGZzY19xZGlzY19vcHMpO1xcbjE3MTE6XFx0fVxcbjE3MTI6XFx0XFxuMTcxMzpcXHRzdGF0aWMgdm9pZCBfX2V4aXRcXG4xNzE0OlxcdGhmc2NfY2xlYW51cCh2b2lkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMjo1MC44NDA1ODM1NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MDEyNDM3MDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTeW1ib2wgQ292ZXJhZ2UgZm9yIEhGU0MgU2NoZWR1bGVyIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0byBiZXN0IGhhbmRsZSBzeW1ib2wgY292ZXJhZ2UgZm9yIHRoZSBIRlNDIHNjaGVkdWxlciwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBoZnNjX2NsYXNzaWZ5YC4gIFJpZ2h0LCBgaGZzY19jbGFzc2lmeWAgaXMgKnN0YXRpYyouIE15IGluaXRpYWwgdGhvdWdodCB3YXM6IGNhbiB0aGF0IGJlIGEgZm9jdXMgc3ltYm9sP1xuXG5Ib2xkIG9uLi4uIEkgbmVlZCB0byByZW1lbWJlciB0aGUgbnVhbmNlcyBvZiB0aGUgTGludXgga2VybmVsIHN5bWJvbCB0YWJsZXMuIFN0YXRpYyBmdW5jdGlvbnMgaW4gYC5jYCBmaWxlcyAqb2Z0ZW4qIGhhdmUgc3ltYm9scywgbGlrZSBgaGZzY19jbGFzc2lmeWAgb3Igc29tZXRoaW5nIGxpa2UgYGhmc2NfY2xhc3NpZnkuaXNyYS4wYC4gIFNvLCBsZXQncyBuYWlsIGRvd24gd2hldGhlciBgaGZzY19jbGFzc2lmeWAgaXRzZWxmIGlzIHVzYWJsZSwgb3IgaWYgSSBuZWVkIHRvIGxvb2sgYXQgYWx0ZXJuYXRpdmVzIGxpa2UgYGhmc2NfZW5xdWV1ZWAsIG9yIGJvdGguXG5cbkFoLCBTZWN0aW9uIDQgb2YgdGhlIGRvY3VtZW50YXRpb24gaXMgY3J1Y2lhbCBoZXJlLiBUaGUgZG9jcyBjbGVhcmx5IGV4cGxhaW4gdGhlIGlzc3VlIG9mIGlubGluZWQgKnN0YXRpYyogZnVuY3Rpb25zIGluIGhlYWRlcnM6IHRob3NlIGRvbid0IGdldCBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBCdXQsIGBoZnNjX2NsYXNzaWZ5YCBpc24ndCBpbiBhIGhlYWRlcjsgaXQncyBgc3RhdGljIHN0cnVjdCBoZnNjX2NsYXNzICogaGZzY19jbGFzc2lmeSguLi4pYCBpbiBgc2NoX2hmc2MuY2AuICBHb29kLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGBoZnNjX2NsYXNzaWZ5YCBpcyAqaW5saW5lZCogaW50byBgaGZzY19lbnF1ZXVlYC4gIEl0J3Mgb25seSBjYWxsZWQgb25jZSBpbiBgc2NoX2hmc2MuY2AsIGF0IGxpbmUgMTU2Mywgc28gZGVwZW5kaW5nIG9uIGNvbXBpbGVyIG9wdGltaXphdGlvbiwgdGhlIGNvbXBpbGVyICptaWdodCogaW5saW5lIGBoZnNjX2NsYXNzaWZ5YCBpbnRvIGBoZnNjX2VucXVldWVgLlxuXG5TbywgaXQncyBwcm9iYWJseSBiZXN0IHRvIGxpc3QgKmJvdGgqIGBoZnNjX2NsYXNzaWZ5YCBhbmQgYGhmc2NfZW5xdWV1ZWAgKGFuZCBtYXliZSBldmVuIGBoZnNjX2JpbmRfdGNmYCBhbmQgYGhmc2NfY2hhbmdlX2NsYXNzYCkgYXMgcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMuICBUaGF0IGdpdmVzIG1lIGdvb2QgY292ZXJhZ2UsIHJlZ2FyZGxlc3Mgb2YgdGhlIGNvbXBpbGVyJ3MgaW5saW5pbmcgZGVjaXNpb25zLlxuXG5CdXQgSSByZWFsbHkgc2hvdWxkIHRha2UgYSBzdGVwIGJhY2sgYmVmb3JlIG1ha2luZyBhIGRlY2lzaW9uLiAgTGV0J3Mgbm90IGp1bXAgdGhlIGd1biBhbmQgYmxpbmRseSBkZWZpbmUgdGhlc2Ugc3ltYm9scy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjb2RlIGNoYW5nZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBJIHNob3VsZCBjaGVjayB0aGUgZ2l0IGxvZyBvZiB0aGlzIGNvbW1pdCwgb3IgdGhlIHN1cnJvdW5kaW5nIGNvbW1pdHMsIHRvIGdldCB0aGUgY29udGV4dCBvZiB0aGUgcGF0Y2guIFRoYXQgd2lsbCBjbGFyaWZ5IHRoZSBpbXBhY3Qgb2YgdGhlc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk4NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAyOjU0Ljg1MzAyMjkyM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA4MjA4NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSEZTQ19DTEFTU0lGWV9NQVhfRFJJRlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfaGZzYy5jPTM1Mj1jZnRyZWVfdXBkYXRlKHN0cnVjdCBoZnNjX2NsYXNzICpjbClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTM5Mi0gKi9cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYzozOTM6I2RlZmluZVxcdEhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUXFx0OFxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTM5NC1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jPTExMzY9aGZzY19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTE1MS1cXHRoZWFkID0gXFx1MDAyNnEtXFx1MDAzZXJvb3Q7XFxubmV0L3NjaGVkL3NjaF9oZnNjLmM6MTE1MjpcXHRkcmlmdCA9IEhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUO1xcbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTExNTMtXFx0dGNmID0gcmN1X2RlcmVmZXJlbmNlX2JoKHEtXFx1MDAzZXJvb3QuZmlsdGVyX2xpc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMjo1NC45MzM4NTAyM1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NDUwOTk3MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBDbGFzc2lmaWNhdGlvbiBMb29wIGluIEhGU0MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIHNwZWNpZmljIHByb2JsZW0gYmVpbmcgYWRkcmVzc2VkLiBJIHNlZSB0aGlzIHNuaXBwZXQgZnJvbSBgc2NoX2hmc2MuY2AgYW5kIGltbWVkaWF0ZWx5IHplcm8gaW4gb24gdGhlIGNvcmUgaXNzdWU6IGEgcG9zc2libGUgY2xhc3NpZmljYXRpb24gbG9vcCB3aXRoaW4gdGhlIEhGU0Mgc2NoZWR1bGVyLiBUaGUgY29kZSBzdWdnZXN0cyBhIGNoZWNrIHJlbGF0ZWQgdG8gYGZsb3dpZGAgYmluZGluZ3MsIGJ5cGFzc2luZyBhIGxldmVsIGNoZWNrLCBhbmQgdGhlbiB3aGF0IGFwcGVhcnMgdG8gYmUgYSBtZWNoYW5pc20gdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wLiBUaGUgYGRyaWZ0LS0gPT0gMGAgY2hlY2sgd2l0aGluIHRoYXQgYGlmYCBzdGF0ZW1lbnQgaXMgd2hhdCdzIGNhdGNoaW5nIG15IGV5ZSBhcyBhIHBvdGVudGlhbCBsb29wIGJyZWFrZXIsIGJ1dCB0aGUgYHByX3dhcm5fcmF0ZWxpbWl0ZWRgIG91dHB1dCBzaG93cyB0aGF0IHNvbWV0aGluZyBjb3VsZCBoYXZlIGJlZW4gZGV0ZWN0ZWQuXG5cbkJ1dCB0aGUgY29tbWVudCEgSXTigJlzIHRoZSBjbHVlIEknbSBsb29raW5nIGZvci4gXCJNaXJyb3JpbmcgaHRiJ3MgVENfSFRCX01BWERFUFRIIGhlYWRyb29tLlwiIFRoZSBtZW50aW9uIG9mIGBodGJgIGlzIGNyaXRpY2FsIGhlcmU7IGl0IGltcGxpZXMgYSBjb21wYXJpc29uIG9yIHBvdGVudGlhbCBib3Jyb3dpbmcgb2YgY29uY2VwdHMgZnJvbSB0aGUgSGllcmFyY2hpY2FsIFRva2VuIEJ1Y2tldCBzY2hlZHVsZXIuIFNpbmNlIEhGU0MgaXMgcmVsYXRlZCwgbGV0J3Mgc2VlIGhvdyBgaHRiYCBoYW5kbGVzIHRoaW5ncyEgSSBuZWVkIHRvIGNvbnN1bHQgdGhlIGBuZXQvc2NoZWQvc2NoX2h0Yi5jYCBjb2RlIHRvIHVuZGVyc3RhbmQgaXRzIGRlc2lnbiBhbmQgYW55IHN0cmF0ZWdpZXMgaXQgZW1wbG95cyB0byBwcmV2ZW50IHNpbWlsYXIgaXNzdWVzLiBUaGF0J3MgdGhlIG5leHQgc3RlcDsgdW5kZXJzdGFuZGluZyB0aGUgdW5kZXJseWluZyBwcmluY2lwbGVzIGFuZCBwb3RlbnRpYWwgc2ltaWxhcml0aWVzIG9yIGRpZmZlcmVuY2VzIGluIGhvdyBgaHRiYCBhcHByb2FjaGVzIHRyYWZmaWMgY2xhc3NpZmljYXRpb24gYW5kIGxvb3AgcHJldmVudGlvbiBjb3VsZCBpbGx1bWluYXRlIHRoZSBpc3N1ZSBpbiBIRlNDLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEwNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMzowMS4zODQ4NTE2NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM4MzU3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVENfSFRCX01BWERFUFRIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2hmc2MuYz0zNTI9Y2Z0cmVlX3VwZGF0ZShzdHJ1Y3QgaGZzY19jbGFzcyAqY2wpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0zOTAtICogYm91bmQgb24gY29uc2VjdXRpdmUgbm9uLWRlc2NlbmRpbmcgKGxhdGVyYWwgLyB1cHdhcmQpIGhvcHMgaW4gYVxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjM5MTogKiBjbGFzc2lmeSB3YWxrLCBtaXJyb3JpbmcgaHRiJ3MgVENfSFRCX01BWERFUFRIIGhlYWRyb29tXFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMzkyLSAqL1xcbi0tXFxubmV0L3NjaGVkL3NjaF9odGIuYy00OS0gICAgRWFjaCBjbGFzcyBpcyBhc3NpZ25lZCBsZXZlbC4gTGVhZiBoYXMgQUxXQVlTIGxldmVsIDAgYW5kIHJvb3RcXG5uZXQvc2NoZWQvc2NoX2h0Yi5jOjUwOiAgICBjbGFzc2VzIGhhdmUgbGV2ZWwgVENfSFRCX01BWERFUFRILTEuIEludGVyaW9yIG5vZGVzIGhhcyBsZXZlbFxcbm5ldC9zY2hlZC9zY2hfaHRiLmMtNTEtICAgIG9uZSBsZXNzIHRoYW4gdGhlaXIgcGFyZW50Llxcbi0tXFxubmV0L3NjaGVkL3NjaF9odGIuYz05ND1zdHJ1Y3QgaHRiX2NsYXNzIHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfaHRiLmMtMTI1LVxcdFxcdHN0cnVjdCBodGJfY2xhc3NfbGVhZiB7XFxubmV0L3NjaGVkL3NjaF9odGIuYzoxMjY6XFx0XFx0XFx0aW50XFx0XFx0ZGVmaWNpdFtUQ19IVEJfTUFYREVQVEhdO1xcbm5ldC9zY2hlZC9zY2hfaHRiLmMtMTI3LVxcdFxcdFxcdHN0cnVjdCBRZGlzY1xcdCpxO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9odGIuYz0xNTA9c3RydWN0IGh0Yl9zY2hlZCB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTE3My1cXHQvKiB0aW1lIG9mIG5lYXJlc3QgZXZlbnQgcGVyIGxldmVsIChyb3cpICovXFxubmV0L3NjaGVkL3NjaF9odGIuYzoxNzQ6XFx0czY0XFx0XFx0XFx0bmVhcl9ldl9jYWNoZVtUQ19IVEJfTUFYREVQVEhdO1xcbm5ldC9zY2hlZC9zY2hfaHRiLmMtMTc1LVxcbm5ldC9zY2hlZC9zY2hfaHRiLmM6MTc2OlxcdGludFxcdFxcdFxcdHJvd19tYXNrW1RDX0hUQl9NQVhERVBUSF07XFxubmV0L3NjaGVkL3NjaF9odGIuYy0xNzctXFxubmV0L3NjaGVkL3NjaF9odGIuYzoxNzg6XFx0c3RydWN0IGh0Yl9sZXZlbFxcdGhsZXZlbFtUQ19IVEJfTUFYREVQVEhdO1xcbm5ldC9zY2hlZC9zY2hfaHRiLmMtMTc5LVxcbi0tXFxubmV0L3NjaGVkL3NjaF9odGIuYz0yMjA9c3RhdGljIHN0cnVjdCBodGJfY2xhc3MgKmh0Yl9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfaHRiLmMtMjY5LVxcbm5ldC9zY2hlZC9zY2hfaHRiLmM6MjcwOlxcdFxcdGlmICgrK2hvcHMgXFx1MDAzZSBUQ19IVEJfTUFYREVQVEgpIHtcXG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTI3MS1cXHRcXHRcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCJodGI6IGNsYXNzaWZ5IGxvb3AgZGV0ZWN0ZWQsIGRyb3BwaW5nIHBhY2tldFxcXFxuXFxcIik7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2h0Yi5jPTgyMD1zdGF0aWMgc3RydWN0IGh0Yl9jbGFzcyAqaHRiX2xvb2t1cF9sZWFmKHN0cnVjdCBodGJfcHJpbyAqaHByaW8sIGNvbnN0IGludCBwcmlvKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9odGIuYy04MjYtXFx0XFx0dTMyICpwaWQ7XFxubmV0L3NjaGVkL3NjaF9odGIuYzo4Mjc6XFx0fSBzdGtbVENfSFRCX01BWERFUFRIXSwgKnNwID0gc3RrO1xcbm5ldC9zY2hlZC9zY2hfaHRiLmMtODI4LVxcbi0tXFxubmV0L3NjaGVkL3NjaF9odGIuYz05NDU9c3RhdGljIHN0cnVjdCBza19idWZmICpodGJfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfaHRiLmMtOTY5LVxcbm5ldC9zY2hlZC9zY2hfaHRiLmM6OTcwOlxcdGZvciAobGV2ZWwgPSAwOyBsZXZlbCBcXHUwMDNjIFRDX0hUQl9NQVhERVBUSDsgbGV2ZWwrKykge1xcbm5ldC9zY2hlZC9zY2hfaHRiLmMtOTcxLVxcdFxcdC8qIGNvbW1vbiBjYXNlIG9wdGltaXphdGlvbiAtIHNraXAgZXZlbnQgaGFuZGxlciBxdWlja2x5ICovXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2h0Yi5jPTE3NjU9c3RhdGljIGludCBodGJfY2hhbmdlX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfaHRiLmMtMTk2NS1cXHRcXHRcXHRwYXJlbnQtXFx1MDAzZWxldmVsID0gKHBhcmVudC1cXHUwMDNlcGFyZW50ID8gcGFyZW50LVxcdTAwM2VwYXJlbnQtXFx1MDAzZWxldmVsXFxubmV0L3NjaGVkL3NjaF9odGIuYzoxOTY2OlxcdFxcdFxcdFxcdFxcdCA6IFRDX0hUQl9NQVhERVBUSCkgLSAxO1xcbm5ldC9zY2hlZC9zY2hfaHRiLmMtMTk2Ny1cXHRcXHRcXHRtZW1zZXQoXFx1MDAyNnBhcmVudC1cXHUwMDNlaW5uZXIsIDAsIHNpemVvZihwYXJlbnQtXFx1MDAzZWlubmVyKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAzOjAxLjQ2ODY5NDMyN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NTg4NzIxMzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGh0Yl9jbGFzc2lmeWAqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2xhc3NpZmljYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIEhpZXJhcmNoaWNhbCBUb2tlbiBCdWNrZXQgKEhUQikgc2NoZWR1bGVyLiBJJ20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgYHNjaF9odGIuY2AuIFNwZWNpZmljYWxseSwgSSdtIGFpbWluZyBmb3IgbGluZXMgMjIwIHRvIDI4MC4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIHRvIGNvbnRhaW4gdGhlIGNvcmUgbG9naWMgZm9yIGhvdyBpbmNvbWluZyBwYWNrZXRzIGFyZSBjYXRlZ29yaXplZCBhbmQgYXNzaWduZWQgdG8gdGhlIGFwcHJvcHJpYXRlIEhUQiBjbGFzcy4gSSdtIGFudGljaXBhdGluZyBzb21lIGVzc2VudGlhbCBmdW5jdGlvbiBjYWxscywgbGlrZWx5IGRlYWxpbmcgd2l0aCBwYWNrZXQgbWV0YWRhdGEsIGNsYXNzIGxvb2t1cCwgYW5kIG1heWJlIGV2ZW4gc29tZSBiYXNpYyByYXRlIGxpbWl0aW5nIGNvbnNpZGVyYXRpb25zLiBUaW1lIHRvIHNlZSB3aGF0J3MgYWN0dWFsbHkgdW5kZXIgdGhlIGhvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTg4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDM6MDYuMDU3NDE4NjY3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX2h0Yi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIyMDpcXHRzdGF0aWMgc3RydWN0IGh0Yl9jbGFzcyAqaHRiX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxcbiAyMjE6XFx0XFx0XFx0XFx0XFx0ICAgICAgaW50ICpxZXJyKVxcbiAyMjI6XFx0e1xcbiAyMjM6XFx0XFx0c3RydWN0IGh0Yl9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG4gMjI0OlxcdFxcdHN0cnVjdCBodGJfY2xhc3MgKmNsO1xcbiAyMjU6XFx0XFx0c3RydWN0IHRjZl9yZXN1bHQgcmVzO1xcbiAyMjY6XFx0XFx0c3RydWN0IHRjZl9wcm90byAqdGNmO1xcbiAyMjc6XFx0XFx0dW5zaWduZWQgaW50IGhvcHMgPSAwO1xcbiAyMjg6XFx0XFx0aW50IHJlc3VsdDtcXG4gMjI5OlxcdFxcbiAyMzA6XFx0XFx0LyogYWxsb3cgdG8gc2VsZWN0IGNsYXNzIGJ5IHNldHRpbmcgc2tiLVxcdTAwM2Vwcmlvcml0eSB0byB2YWxpZCBjbGFzc2lkO1xcbiAyMzE6XFx0XFx0ICogbm90ZSB0aGF0IG5mbWFyayBjYW4gYmUgdXNlZCB0b28gYnkgYXR0YWNoaW5nIGZpbHRlciBmdyB3aXRoIG5vXFxuIDIzMjpcXHRcXHQgKiBydWxlcyBpbiBpdFxcbiAyMzM6XFx0XFx0ICovXFxuIDIzNDpcXHRcXHRpZiAoc2tiLVxcdTAwM2Vwcmlvcml0eSA9PSBzY2gtXFx1MDAzZWhhbmRsZSlcXG4gMjM1OlxcdFxcdFxcdHJldHVybiBIVEJfRElSRUNUO1xcdC8qIFg6MCAoZGlyZWN0IGZsb3cpIHNlbGVjdGVkICovXFxuIDIzNjpcXHRcXHRjbCA9IGh0Yl9maW5kKHNrYi1cXHUwMDNlcHJpb3JpdHksIHNjaCk7XFxuIDIzNzpcXHRcXHRpZiAoY2wpIHtcXG4gMjM4OlxcdFxcdFxcdGlmIChjbC1cXHUwMDNlbGV2ZWwgPT0gMClcXG4gMjM5OlxcdFxcdFxcdFxcdHJldHVybiBjbDtcXG4gMjQwOlxcdFxcdFxcdC8qIFN0YXJ0IHdpdGggaW5uZXIgZmlsdGVyIGNoYWluIGlmIGEgbm9uLWxlYWYgY2xhc3MgaXMgc2VsZWN0ZWQgKi9cXG4gMjQxOlxcdFxcdFxcdHRjZiA9IHJjdV9kZXJlZmVyZW5jZV9iaChjbC1cXHUwMDNlZmlsdGVyX2xpc3QpO1xcbiAyNDI6XFx0XFx0fSBlbHNlIHtcXG4gMjQzOlxcdFxcdFxcdHRjZiA9IHJjdV9kZXJlZmVyZW5jZV9iaChxLVxcdTAwM2VmaWx0ZXJfbGlzdCk7XFxuIDI0NDpcXHRcXHR9XFxuIDI0NTpcXHRcXG4gMjQ2OlxcdFxcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xcbiAyNDc6XFx0XFx0d2hpbGUgKHRjZiBcXHUwMDI2XFx1MDAyNiAocmVzdWx0ID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgdGNmLCBcXHUwMDI2cmVzLCBmYWxzZSkpIFxcdTAwM2U9IDApIHtcXG4gMjQ4OlxcdCNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcXG4gMjQ5OlxcdFxcdFxcdHN3aXRjaCAocmVzdWx0KSB7XFxuIDI1MDpcXHRcXHRcXHRjYXNlIFRDX0FDVF9RVUVVRUQ6XFxuIDI1MTpcXHRcXHRcXHRjYXNlIFRDX0FDVF9TVE9MRU46XFxuIDI1MjpcXHRcXHRcXHRjYXNlIFRDX0FDVF9UUkFQOlxcbiAyNTM6XFx0XFx0XFx0XFx0KnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9TVE9MRU47XFxuIDI1NDpcXHRcXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4gMjU1OlxcdFxcdFxcdGNhc2UgVENfQUNUX1NIT1Q6XFxuIDI1NjpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMjU3OlxcdFxcdFxcdH1cXG4gMjU4OlxcdCNlbmRpZlxcbiAyNTk6XFx0XFx0XFx0Y2wgPSAodm9pZCAqKXJlcy5jbGFzcztcXG4gMjYwOlxcdFxcdFxcdGlmICghY2wpIHtcXG4gMjYxOlxcdFxcdFxcdFxcdGlmIChyZXMuY2xhc3NpZCA9PSBzY2gtXFx1MDAzZWhhbmRsZSlcXG4gMjYyOlxcdFxcdFxcdFxcdFxcdHJldHVybiBIVEJfRElSRUNUO1xcdC8qIFg6MCAoZGlyZWN0IGZsb3cpICovXFxuIDI2MzpcXHRcXHRcXHRcXHRjbCA9IGh0Yl9maW5kKHJlcy5jbGFzc2lkLCBzY2gpO1xcbiAyNjQ6XFx0XFx0XFx0XFx0aWYgKCFjbClcXG4gMjY1OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcdC8qIGZpbHRlciBzZWxlY3RlZCBpbnZhbGlkIGNsYXNzaWQgKi9cXG4gMjY2OlxcdFxcdFxcdH1cXG4gMjY3OlxcdFxcdFxcdGlmICghY2wtXFx1MDAzZWxldmVsKVxcbiAyNjg6XFx0XFx0XFx0XFx0cmV0dXJuIGNsO1xcdC8qIHdlIGhpdCBsZWFmOyByZXR1cm4gaXQgKi9cXG4gMjY5OlxcdFxcbiAyNzA6XFx0XFx0XFx0aWYgKCsraG9wcyBcXHUwMDNlIFRDX0hUQl9NQVhERVBUSCkge1xcbiAyNzE6XFx0XFx0XFx0XFx0cHJfd2Fybl9yYXRlbGltaXRlZChcXFwiaHRiOiBjbGFzc2lmeSBsb29wIGRldGVjdGVkLCBkcm9wcGluZyBwYWNrZXRcXFxcblxcXCIpO1xcbiAyNzI6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDI3MzpcXHRcXHRcXHR9XFxuIDI3NDpcXHRcXHRcXHQvKiB3ZSBoYXZlIGdvdCBpbm5lciBjbGFzczsgYXBwbHkgaW5uZXIgZmlsdGVyIGNoYWluICovXFxuIDI3NTpcXHRcXHRcXHR0Y2YgPSByY3VfZGVyZWZlcmVuY2VfYmgoY2wtXFx1MDAzZWZpbHRlcl9saXN0KTtcXG4gMjc2OlxcdFxcdH1cXG4gMjc3OlxcdFxcdC8qIGNsYXNzaWZpY2F0aW9uIGZhaWxlZDsgdHJ5IHRvIHVzZSBkZWZhdWx0IGNsYXNzICovXFxuIDI3ODpcXHRcXHRjbCA9IGh0Yl9maW5kKFRDX0hfTUFLRShUQ19IX01BSihzY2gtXFx1MDAzZWhhbmRsZSksIHEtXFx1MDAzZWRlZmNscyksIHNjaCk7XFxuIDI3OTpcXHRcXHRpZiAoIWNsIHx8IGNsLVxcdTAwM2VsZXZlbClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDM6MDYuMDU3NTM5ODg3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjkwNjExMzgyODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSEZTQyBDbGFzc2lmaWNhdGlvbiBMb29wIERldGVjdGlvbjogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBoZnNjX2NsYXNzaWZ5YCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSBpdCdzIHRyeWluZyB0byBwcmV2ZW50IGNsYXNzaWZpY2F0aW9uIGxvb3BzLCBhbmQgdGhhdCdzIHNtYXJ0LiBUaGUgY29kZSB1c2VzIHRoaXMgYGRyaWZ0YCB2YXJpYWJsZSBhcyBhIGNvdW50ZXIuIExldCBtZSBzZWUuLi4gYGRyaWZ0ID0gSEZTQ19DTEFTU0lGWV9NQVhfRFJJRlQ7YCAtIG9rYXksIGl0J3MgaW5pdGlhbGl6ZWQgdG8gOC4gVGhlbiwgd2l0aGluIHRoZSBtYWluIGxvb3AsIHRoZXJlJ3MgdGhpcyBjaGVjazogYGlmIChjbC1cdTAwM2VsZXZlbCBcdTAwM2U9IGhlYWQtXHUwMDNlbGV2ZWwgXHUwMDI2XHUwMDI2IGRyaWZ0LS0gPT0gMClgLlxuXG5BaGEhIGBkcmlmdGAgaXMgYW4gYHVuc2lnbmVkIGludGAsIHdoaWNoIGlzIGtleS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhczogd2hlbiBgY2wtXHUwMDNlbGV2ZWwgXHUwMDNlPSBoZWFkLVx1MDAzZWxldmVsYCBhbmQgYGRyaWZ0YCByZWFjaGVzIHplcm8sIGl0IHVuZGVyZmxvd3MgdG8gYFVJTlRfTUFYYCwgYnJlYWtpbmcgdGhlIGxvb3AuIEJ1dCwgYWN0dWFsbHksIHRoYXQncyBpbW1lZGlhdGVseSBoYW5kbGVkLiBTbyB0aGF0J3MgaG93IGl0IHdvcmtzIGF0IGxlYXN0LlxuXG5CdXQgaG9sZCBvbiEgV2hhdCBpZiBgY2wtXHUwMDNlbGV2ZWxgIGlzICpsZXNzKiB0aGFuIGBoZWFkLVx1MDAzZWxldmVsYD8gVGhlbiBgZHJpZnRgIGRvZXNuJ3QgZ2V0IGRlY3JlbWVudGVkISBDb3VsZCB0aGlzIGxlYWQgdG8gaW5maW5pdGUgbG9vcGluZyB3aXRoIGFsdGVybmF0aW5nIGxldmVscywgbGlrZSAxLVx1MDAzZTItXHUwMDNlMS1cdTAwM2UyPyBXaGVuIHRoZSBoZWFkIGlzIGxldmVsIDIgYW5kIHRoZSBjdXJyZW50IGNsYXNzIGlzIGxldmVsIDEsIHRoZSBjb25kaXRpb24gaXMgZmFsc2UsIGBkcmlmdGAgZG9lc24ndCBjaGFuZ2UuIEJ1dCB3aGVuIGhlYWQgaXMgbGV2ZWwgMSwgYW5kIHRoZSBjdXJyZW50IGNsYXNzIGlzIGxldmVsIDIsIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSwgYW5kIGBkcmlmdGAgZGVjcmVtZW50cy4gQWZ0ZXIgbmluZSBob3BzIGxpa2UgdGhhdCwgYGRyaWZ0YCB3aWxsIGhpdCB6ZXJvLCBhbmQgdGhlIGxvb3AgaXMgdGVybWluYXRlZC4gT2theSwgc28gdGhhdCBzb3J0IG9mIGxvb3AgaXMgY292ZXJlZC5cblxuTm93LCB3aGF0IGFib3V0IGxvb3BzICp3aXRoaW4qIHRoZSBzYW1lIGxldmVsPyBTYXksIDEtXHUwMDNlMS1cdTAwM2UxLiBJbiB0aGF0IGNhc2UsIGBjbC1cdTAwM2VsZXZlbCBcdTAwM2U9IGhlYWQtXHUwMDNlbGV2ZWxgIGlzIGFsd2F5cyB0cnVlICgxIFx1MDAzZT0gMSksIGFuZCBgZHJpZnRgIGlzIGRlY3JlbWVudGVkIGVhY2ggdGltZS4gVGhhdCBtYWtlcyBzZW5zZSwgd2UncmUgbm90IGFsbG93aW5nIGEgbG9vcC5cblxuU28sIG9rYXkuIFdlIGhhdmUgdGhpcyBsb29wIGRldGVjdGlvbiBtZWNoYW5pc20uIFdoYXQgYWJvdXQgbG9vcHMgZ29pbmcgKmRvd253YXJkcyo/IENhbiBhIGNsYXNzaWZpY2F0aW9uIGRlc2NlbmQgaW5maW5pdGVseT8gV2l0aCB0aGUgSEZTQyBzY2hlZHVsZXIsIGNhbiB3ZSBidWlsZCBhbiBpbmZpbml0ZWx5IGRlZXAgdHJlZT8gTm8sIEhGU0MgdHJlZXMgYXJlIGZpbml0ZS4gQnV0LCB3YWl0Li4uIGNvdWxkIGEgZmlsdGVyIHNvbWVob3cgYmUgKmJvdW5kKiB0byBhbiBhbmNlc3RvciBvciBzb21ldGhpbmc/IEhtbW0sIG5vLCBsZXZlbHMgYXJlIG9yZGVyZWQsIHNvIGFuY2VzdG9ycyB3b3VsZCBoYXZlIGhpZ2hlciBsZXZlbHMgKHRoZSByb290IGhhcyB0aGUgaGlnaGVzdCBsZXZlbCwgb3IgbGV2ZWwgMCkuXG5cbkxldCdzIGRpZyBhIGJpdCBkZWVwZXIgaW50byB0aGlzIGBsZXZlbGAgY29uY2VwdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGBsZXZlbGAgZmllbGQgaXMgdXNlZCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIHN0cnVjdHVyZSBvZiB0aGUgSEZTQyBzY2hlZHVsZXIuIFRpbWUgdG8gZ3JlcCBmb3IgYC1cdTAwM2VsZXZlbGAgdGhyb3VnaG91dCB0aGUgYG5ldC9zY2hlZC9zY2hfaGZzYy5jYCBjb2RlIHRvIHNlZSB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDgwMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAzOjE1LjExODY4MTY3NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5MjUxODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIi1cXHUwMDNlbGV2ZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF9oZnNjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9oZnNjLmM9MzA3PXZ0dHJlZV9nZXRfbWludnQoc3RydWN0IGhmc2NfY2xhc3MgKmNsLCB1NjQgY3VyX3RpbWUpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0zMTItXFxubmV0L3NjaGVkL3NjaF9oZnNjLmM6MzEzOlxcdHdoaWxlIChjbC1cXHUwMDNlbGV2ZWwgXFx1MDAzZSAwKSB7XFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMzE0LVxcdFxcdGNsID0gdnR0cmVlX2ZpcnN0Zml0KGNsLCBjdXJfdGltZSk7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYz04NDU9aGZzY19hZGp1c3RfbGV2ZWxzKHN0cnVjdCBoZnNjX2NsYXNzICpjbClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTg1Mi1cXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIFxcdTAwMjZjbC1cXHUwMDNlY2hpbGRyZW4sIHNpYmxpbmdzKSB7XFxubmV0L3NjaGVkL3NjaF9oZnNjLmM6ODUzOlxcdFxcdFxcdGlmIChwLVxcdTAwM2VsZXZlbCBcXHUwMDNlPSBsZXZlbClcXG5uZXQvc2NoZWQvc2NoX2hmc2MuYzo4NTQ6XFx0XFx0XFx0XFx0bGV2ZWwgPSBwLVxcdTAwM2VsZXZlbCArIDE7XFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtODU1LVxcdFxcdH1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYzo4NTY6XFx0XFx0V1JJVEVfT05DRShjbC1cXHUwMDNlbGV2ZWwsIGxldmVsKTtcXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy04NTctXFx0fSB3aGlsZSAoKGNsID0gY2wtXFx1MDAzZWNsX3BhcmVudCkgIT0gTlVMTCk7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYz05MTg9aGZzY19jaGFuZ2VfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkLCB1MzIgcGFyZW50aWQsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMDg0LVxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmNsLVxcdTAwM2VzaWJsaW5ncywgXFx1MDAyNnBhcmVudC1cXHUwMDNlY2hpbGRyZW4pO1xcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjEwODU6XFx0aWYgKHBhcmVudC1cXHUwMDNlbGV2ZWwgPT0gMClcXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMDg2LVxcdFxcdHFkaXNjX3B1cmdlX3F1ZXVlKHBhcmVudC1cXHUwMDNlcWRpc2MpO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9oZnNjLmM9MTEwOT1oZnNjX2RlbGV0ZV9jbGFzcyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBhcmcsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMTE0LVxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjExMTU6XFx0aWYgKGNsLVxcdTAwM2VsZXZlbCBcXHUwMDNlIDAgfHwgcWRpc2NfY2xhc3NfaW5fdXNlKFxcdTAwMjZjbC1cXHUwMDNlY2xfY29tbW9uKSB8fFxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTExMTYtXFx0ICAgIGNsID09IFxcdTAwMjZxLVxcdTAwM2Vyb290KSB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYz0xMTM2PWhmc2NfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsIGludCAqcWVycilcXG4tLVxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTExNDYtXFx0ICAgIChjbCA9IGhmc2NfZmluZF9jbGFzcyhza2ItXFx1MDAzZXByaW9yaXR5LCBzY2gpKSAhPSBOVUxMKVxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjExNDc6XFx0XFx0aWYgKGNsLVxcdTAwM2VsZXZlbCA9PSAwKVxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTExNDgtXFx0XFx0XFx0cmV0dXJuIGNsO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTE3MC1cXHRcXHRcXHRcXHRicmVhazsgLyogZmlsdGVyIHNlbGVjdGVkIGludmFsaWQgY2xhc3NpZCAqL1xcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjExNzE6XFx0XFx0XFx0aWYgKGNsLVxcdTAwM2VsZXZlbCBcXHUwMDNlPSBoZWFkLVxcdTAwM2VsZXZlbClcXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMTcyLVxcdFxcdFxcdFxcdGJyZWFrOyAvKiBmaWx0ZXIgbWF5IG9ubHkgcG9pbnQgZG93bndhcmRzICovXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMTc0LVxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjExNzU6XFx0XFx0aWYgKGNsLVxcdTAwM2VsZXZlbCA9PSAwKVxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTExNzYtXFx0XFx0XFx0cmV0dXJuIGNsOyAvKiBoaXQgbGVhZiBjbGFzcyAqL1xcbi0tXFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTE4Mi1cXHRcXHQgKi9cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYzoxMTgzOlxcdFxcdGlmIChjbC1cXHUwMDNlbGV2ZWwgXFx1MDAzZT0gaGVhZC1cXHUwMDNlbGV2ZWwgXFx1MDAyNlxcdTAwMjYgZHJpZnQtLSA9PSAwKSB7XFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTE4NC1cXHRcXHRcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCJoZnNjOiBjbGFzc2lmeSBsb29wIGRldGVjdGVkLCBkcm9wcGluZyBwYWNrZXRcXFxcblxcXCIpO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTE5NS1cXHRcXHRcXHRcXHQgICAgICAgUkVBRF9PTkNFKHEtXFx1MDAzZWRlZmNscykpLCBzY2gpO1xcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjExOTY6XFx0aWYgKGNsID09IE5VTEwgfHwgY2wtXFx1MDAzZWxldmVsIFxcdTAwM2UgMClcXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMTk3LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9oZnNjLmM9MTIwMz1oZnNjX2dyYWZ0X2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZywgc3RydWN0IFFkaXNjICpuZXcsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMjA3LVxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjEyMDg6XFx0aWYgKGNsLVxcdTAwM2VsZXZlbCBcXHUwMDNlIDApXFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTIwOS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jPTEyMjI9aGZzY19jbGFzc19sZWFmKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTEyMjUtXFxubmV0L3NjaGVkL3NjaF9oZnNjLmM6MTIyNjpcXHRpZiAoY2wtXFx1MDAzZWxldmVsID09IDApXFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTIyNy1cXHRcXHRyZXR1cm4gY2wtXFx1MDAzZXFkaXNjO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9oZnNjLmM9MTI1Mz1oZnNjX2JpbmRfdGNmKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIHBhcmVudCwgdTMyIGNsYXNzaWQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMjU4LVxcdGlmIChjbCAhPSBOVUxMKSB7XFxubmV0L3NjaGVkL3NjaF9oZnNjLmM6MTI1OTpcXHRcXHRpZiAocCAhPSBOVUxMIFxcdTAwMjZcXHUwMDI2IHAtXFx1MDAzZWxldmVsIFxcdTAwM2M9IGNsLVxcdTAwM2VsZXZlbClcXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMjYwLVxcdFxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9oZnNjLmM9MTMyNj1oZnNjX2R1bXBfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTMzNC1cXHR0Y20tXFx1MDAzZXRjbV9oYW5kbGUgPSBjbC1cXHUwMDNlY2xfY29tbW9uLmNsYXNzaWQ7XFxubmV0L3NjaGVkL3NjaF9oZnNjLmM6MTMzNTpcXHRpZiAoY2wtXFx1MDAzZWxldmVsID09IDApXFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTMzNi1cXHRcXHR0Y20tXFx1MDAzZXRjbV9pbmZvID0gY2wtXFx1MDAzZXFkaXNjLVxcdTAwM2VoYW5kbGU7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYz0xMzUxPWhmc2NfZHVtcF9jbGFzc19zdGF0cyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBhcmcsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMzU4LVxcdHFkaXNjX3FzdGF0c19xbGVuX2JhY2tsb2coY2wtXFx1MDAzZXFkaXNjLCBcXHUwMDI2cWxlbiwgXFx1MDAyNmNsLVxcdTAwM2Vxc3RhdHMuYmFja2xvZyk7XFxubmV0L3NjaGVkL3NjaF9oZnNjLmM6MTM1OTpcXHR4c3RhdHMubGV2ZWwgICA9IFJFQURfT05DRShjbC1cXHUwMDNlbGV2ZWwpO1xcbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTEzNjAtXFx0eHN0YXRzLnBlcmlvZCAgPSBSRUFEX09OQ0UoY2wtXFx1MDAzZWNsX3Z0cGVyaW9kKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDM6MTUuMjM3OTM4NTU2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEyNTE2NTAzMzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEV2YWx1YXRpb246IEhGU0MgQ2xhc3NpZmljYXRpb24gTG9vcCBQcmV2ZW50aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYW4gZXhwZXJ0IHBlcnNwZWN0aXZlLiBJJ20gbG9va2luZyBhdCBgaGZzY19iaW5kX3RjZmAgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY2xhc3MgbGV2ZWxzIHdpdGhpbiB0aGUgSEZTQyBxZGlzYy4gVGhlIGtleSBpc3N1ZSBpcyB0aGlzIHBvdGVudGlhbCBkcmlmdCBpbiBjbGFzcyBsZXZlbHMgYWZ0ZXIgYmluZGluZywgc3BlY2lmaWNhbGx5IGhvdyBgY2wtXHUwMDNlbGV2ZWxgIGNhbiBiZSBhZGp1c3RlZCBieSBgaGZzY19hZGp1c3RfbGV2ZWxzYCBwb3N0LWJpbmRpbmcuXG5cbkluaXRpYWxseSwgYHAtXHUwMDNlbGV2ZWwgXHUwMDNjPSBjbC1cdTAwM2VsZXZlbGAgYWN0cyBhcyBhIHNhZmVndWFyZCBkdXJpbmcgdGhlIGJpbmQgb3BlcmF0aW9uLiBIb3dldmVyLCBwb3N0LWJpbmQsIHRoZSBsZXZlbCBvZiBgY2xgIGNhbiBjaGFuZ2UuIFRoaXMgaXMgdGhlIGNydXggb2YgdGhlIHByb2JsZW0uIFByZXZpb3VzbHksIGluIGBoZnNjX2NsYXNzaWZ5YCwgaWYgYHJlcy5jbGFzc2Agd2FzIG5vbi1OVUxMIChpbmRpY2F0aW5nIGEgZGlyZWN0IGJpbmQgd2l0aCwgc2F5LCBhIGZsb3dpZCksIHRoZSBsZXZlbCBjaGVjayBgaWYgKGNsLVx1MDAzZWxldmVsIFx1MDAzZT0gaGVhZC1cdTAwM2VsZXZlbCkgYnJlYWs7YCB3YXMgYnlwYXNzZWQuIFRoaXMgaXMgYmFkLiBUaGlzIG1lYW50IHRoYXQgaWYgbGV2ZWxzIGRyaWZ0ZWQgYWZ0ZXIgdGhlIGJpbmQsIHRoZXJlIHdhcyBub3RoaW5nIHRvIHByZXZlbnQgdXMgZnJvbSBlbnRlcmluZyBhIGNsYXNzaWZpY2F0aW9uIGxvb3AgYmVjYXVzZSB0aGUgY29tcGFyaXNvbiBgY2wtXHUwMDNlbGV2ZWwgXHUwMDNlPSBoZWFkLVx1MDAzZWxldmVsYCB3YXMgc2tpcHBlZC5cblxuVGhpcyBsZWFkcyBkaXJlY3RseSB0byB0aGUgY29yZSBwcm9ibGVtOiBhIHBvdGVudGlhbCBpbmZpbml0ZSBsb29wIHdpdGhpbiBgaGZzY19jbGFzc2lmeWAgZHVyaW5nIHBhY2tldCBlbnF1ZXVlLCB1bHRpbWF0ZWx5IHRyaWdnZXJpbmcgYSBzb2Z0IGxvY2t1cC4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIHdpdGggdGhlIGBIRlNDX0NMQVNTSUZZX01BWF9EUklGVGAgY291bnRlciwgYWN0aW5nIGFzIGEgZmFpbHNhZmUgYW5kIGxvZ2dpbmcgYSB3YXJuaW5nLiBUaGUgcGF0Y2ggYWRkcyBhIHRlcm1pbmF0aW9uIHRvIHRoaXMgY2xhc3NpZmljYXRpb24gbG9vcC5cblxuTm93LCBsZXQncyBhc3Nlc3MgdGhlIGZ1enppbmcgcG90ZW50aWFsLlxuXG4xLiAgKipSZWFjaGFiaWxpdHk6KiogQWJzb2x1dGVseSByZWFjaGFibGUhIEhGU0MgaXMgYSBzdGFuZGFyZCBxZGlzYywgY29uZmlndXJlZCB2aWEgbmV0bGluayAocnRuZXRsaW5rKSwgYW5kIHRodXMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB3aXRoIHRoZSBgQ0FQX05FVF9BRE1JTmAgY2FwYWJpbGl0eSwgbWVhbmluZyBpdCdzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSB1c2luZyBsb29wYmFjaywgZHVtbXksIG9yIHZldGggaW50ZXJmYWNlcy4gUGFja2V0IGVucXVldWUgdGhyb3VnaCBzb2NrZXRzIChgc2VuZHRvYCwgYHNlbmRtc2dgLCBldGMuKSBoaXRzIGBoZnNjX2VucXVldWVgIGFuZCB1bHRpbWF0ZWx5IGBoZnNjX2NsYXNzaWZ5YC5cblxuMi4gICoqQ29yZSBUcmlhZ2UgUGhpbG9zb3BoeToqKlxuICAgICogICBSZWFjaGFibGU/IFllcy5cbiAgICAqICAgQ29yZSBTdWJzeXN0ZW1zPyBUaGlzIHBhdGNoIGRpcmVjdGx5IHRvdWNoZXMgY29yZSBuZXR3b3JraW5nLCBzcGVjaWZpY2FsbHkgcGFja2V0IHNjaGVkdWxpbmcgKGBuZXQvc2NoZWRgKS5cbiAgICAqICAgTmV3L01vZGlmaWVkIENoZWNrcz8gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjcml0aWNhbCBtb2RpZmljYXRpb24gdG8gdGhlIGNsYXNzaWZpY2F0aW9uIGxvb3AgdGVybWluYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nLCBtYWtpbmcgdGhlIHBhdGNoIGV2ZW4gbW9yZSBpbnRlcmVzdGluZy5cbiAgICAqICAgTmVnYXRpdmUgQ3JpdGVyaWE/IE5vOiBrZXJuZWwgY29kZSwgc3RydWN0dXJhbGx5IHJlYWNoYWJsZSBhbmQgZXhlY3V0aW9uIHBhdGggcmVhY2hhYmxlIVxuXG4qKlRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IFdvcnRoRnV6emluZy4qKiBUaGUgbW9kaWZpY2F0aW9ucyBkaXJlY3RseSBpbXBhY3QgYSBjcml0aWNhbCBkYXRhIHBhdGggYW5kIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBhIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnQuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gVG8gZWZmZWN0aXZlbHkgdGFyZ2V0IHRoaXMsIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBIRlNDIHFkaXNjIGlzIGVuYWJsZWQsIGFsb25nIHdpdGggdGhlIHJlbGV2YW50IGNsYXNzaWZpZXIgYW5kIGFjdGlvbiBzdXBwb3J0LCBzaW5jZSBjbGFzc2lmaWNhdGlvbiBhbmQgYXNzb2NpYXRlZCBmaWx0ZXJzIGFyZSBpbnRlZ3JhbCB0byB0aGUgYnVnOlxuXG4xLiAgKipgTkVUX1NDSF9IRlNDYDoqKiBUaGlzIGlzIHRoZSBwcmltYXJ5IGNvbmZpZywgc291cmNlZCBmcm9tIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIEl0J3MgYSB0cmlzdGF0ZSwgYW5kIHJlcXVpcmVzIGBORVRfU0NIRURgIHRvIGJlIGVuYWJsZWQsIHdoaWNoIGluIHR1cm4gZGVwZW5kcyBvbiBgTkVUYC5cbjIuICAqKmBORVRfU0NIRURgOioqIFJlcXVpcmVkLCBkZXBlbmRzIG9uIGBORVRgLlxuMy4gICoqYENPTkZJR19ORVRfQ0xTX0FDVGA6KiogVGhpcyBpcyBuZWVkZWQgZm9yIGNsYXNzaWZpZXJzIGFuZCBhY3Rpb25zLCB0byBjbGFzc2lmeSBhbmQgYXBwbHkgYSBkaWZmZXJlbnQgYWN0aW9uIHRvIGEgcGFja2V0IGJhc2VkIG9uIGEgbWF0Y2hpbmcgZmlsdGVyLlxuNC4gICoqYE5FVF9DTFNfVTMyYCBvciBzaW1pbGFyIGZpbHRlcnMgKGBORVRfQ0xTX0JBU0lDYCwgYE5FVF9DTFNfQUNUYCkqKjogdG8gbWFrZSB0aGUgY2xhc3NpZmljYXRpb24gbG9naWMgaW4gYGhmc2NfY2xhc3NpZnlgIHJ1bi5cblxuVGhlcmVmb3JlLCB3ZSdsbCBuZWVkIHRvIGVuYWJsZSBgTkVUYCwgYE5FVF9TQ0hFRGAsIGBORVRfU0NIX0hGU0NgLCBgTkVUX0NMU19BQ1RgLCBhbmQgYSBzdWl0YWJsZSBmaWx0ZXIgbGlrZSBgTkVUX0NMU19VMzJgLiBXaXRoIHRoYXQsIHdlJ3JlIHNldCB0byBiZWdpbiBhIGZ1enppbmcgY2FtcGFpZ24gdG8gdGFyZ2V0IHRoaXMgSEZTQyBxZGlzYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2NTksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAzOjI3Ljc1NDQ0NDAxOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMjIxNjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQ0xTX0FDVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9NjkwPWNvbmZpZyBORVRfRU1BVENIX0lQVFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNzAxLVxcbm5ldC9zY2hlZC9LY29uZmlnOjcwMjpjb25maWcgTkVUX0NMU19BQ1RcXG5uZXQvc2NoZWQvS2NvbmZpZy03MDMtXFx0Ym9vbCBcXFwiQWN0aW9uc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDM6MjcuODU1NjcwNzcyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5NTQwODQ2Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEhGU0MgVHJhZmZpYyBDb250cm9sIGZvciBGdXp6aW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGZ1enppbmcgdGhlIEhGU0MgKEhpZXJhcmNoaWNhbCBGYWlyIFNlcnZpY2UgQ3VydmUpIHRyYWZmaWMgY29udHJvbCBzY2hlZHVsZXIuIEZpcnN0IHRoaW5ncyBmaXJzdCwgd2UgbmVlZCB0byBjb25maXJtIG91ciBrZXJuZWwgY29uZmlncyBhcmUgaW4gcGxhY2U6IGBORVRfU0NIRURgLCBgTkVUX1NDSF9IRlNDYCwgYW5kIGBORVRfQ0xTX0FDVGAg4oCTIGNoZWNrLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gZm9jdXMgdGhlIGZ1enplci4gVGhlIGd1aWRpbmcgcHJpbmNpcGxlIGZyb20gU2VjdGlvbiA0IG9mIG91ciBkb2N1bWVudCBpcyBrZXkgaGVyZTogYXZvaWQgZ2VuZXJpYyBmdW5jdGlvbnMsIHRhcmdldCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeSBwb2ludHMuIFdlJ3JlIGludGVyZXN0ZWQgaW4gdGhlIGNvZGUgZGlyZWN0bHkgdG91Y2hlZCBieSB0aGUgcGF0Y2guXG5cbkxldCdzIGRyaWxsIGRvd24gaW50byBgbmV0L3NjaGVkL3NjaF9oZnNjLmNgLiBUaGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBpcyBgaGZzY19jbGFzc2lmeWAsIHRoZSBmdW5jdGlvbiBkaXJlY3RseSBtb2RpZmllZCBieSB0aGUgcGF0Y2guIEJ1dCBsZXQncyBnbyBkZWVwZXIuIGBoZnNjX2VucXVldWVgIGlzIHRoZSBkaXJlY3QgY2FsbGVyIG9mIGBoZnNjX2NsYXNzaWZ5YCBpbiB0aGUgcXVldWluZyBwYXRoIOKAkyBjcml0aWNhbCEgVGhlbiwgYGhmc2NfYmluZF90Y2ZgIGJpbmRzIHRoZSBmaWx0ZXIsIHdoaWNoIG1pZ2h0IGxlYWQgdXMgZG93biB0aGlzIHBhdGguIFRoZW4gYGhmc2NfY2hhbmdlX2NsYXNzYCBhbmQgYGhmc2NfaW5pdF9xZGlzY2AgLyBgaGZzY19kZXN0cm95X3FkaXNjYCBhcmUgdGhlcmUuXG5cbkNhbiB3ZSBsaXN0IGBoZnNjX2NsYXNzaWZ5YCBhbmQgYGhmc2NfZW5xdWV1ZWA/IEFic29sdXRlbHkuIGBoZnNjX2NsYXNzaWZ5YCBoYW5kbGVzIHBhY2tldCBjbGFzc2lmaWNhdGlvbiwgYW5kIGBoZnNjX2VucXVldWVgIGhhbmRsZXMgdGhlIGVucXVldWUgcGF0aC4gTGV0J3MgbWFrZSBzdXJlIGBoZnNjX2NsYXNzaWZ5YCBpc24ndCBpbmxpbmVkIC0gYW5kIGl0J3Mgc3RhdGljIG9uIGxpbmUgMTEzNTogYHN0YXRpYyBzdHJ1Y3QgaGZzY19jbGFzcyAqIGhmc2NfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsIGludCAqcWVycilgLiBJdCdzIG5vdCBpbmxpbmUsIHNvIGl0J3MgbGlrZWx5IHByZXNlbnQgaW4gdGhlIHN5bWJvbCB0YWJsZSBpbiBhbnkgc2FuZSBidWlsZC4gRXZlbiBpZiBpdCdzIGlubGluZWQgaW4gdGhlIGZ1dHVyZSwgd2Ugc3RpbGwgaGF2ZSBgaGZzY19lbnF1ZXVlYCB3aGljaCB3aWxsIGJlIHByZXNlbnQuIFRoZXJlZm9yZSwgYGhmc2NfY2xhc3NpZnlgIGFuZCBgaGZzY19lbnF1ZXVlYCAoYW5kIHBlcmhhcHMgYGhmc2NfYmluZF90Y2ZgKSBhcmUgaWRlYWwgZm9jdXMgc3ltYm9scy5cblxuV2h5IHRoZXNlPyBUaGUgcGF0Y2ggbW9kaWZpZXMgYGhmc2NfY2xhc3NpZnlgIHRvIHByZXZlbnQgaW5maW5pdGUgY2xhc3NpZmljYXRpb24gbG9vcHMgcmVsYXRlZCB0byBmaWx0ZXIgYmluZGluZ3MgKGBmbG93aWRgKSB0aGF0IGV4cGVyaWVuY2UgbGF0ZXJhbCBkcmlmdCBhZnRlciBjbGFzcyBtdXRhdGlvbnMuIEl0J3MgbGltaXRpbmcgdGhlIG51bWJlciBvZiBjbGFzc2lmaWNhdGlvbiBob3BzIHZpYSBgSEZTQ19DTEFTU0lGWV9NQVhfRFJJRlRgICg4IGhvcHMpIGFuZCB3aWxsIGRyb3AgcGFja2V0cyBpZiB3ZSBoaXQgdGhhdC4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgdHJhZmZpYyBjb250cm9sLCBwb3RlbnRpYWxseSByZWFjaGFibGUgdGhyb3VnaCBuZXRsaW5rIGNvbW1hbmRzIChgdGMgcWRpc2NgLCBgdGMgY2xhc3NgLCBgdGMgZmlsdGVyYCkgYW5kIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgY29kZSB0aGF0J3Mgd29ydGggZnV6emluZyFcblxuU28sIHRvIHN1bW1hcml6ZTpcblxuKiAgICoqQ29uZmlnczoqKiBgTkVUX1NDSEVEYCwgYE5FVF9TQ0hfSEZTQ2AsIGBORVRfQ0xTX0FDVGBcbiogICAqKkZvY3VzIFN5bWJvbHM6KiogYGhmc2NfY2xhc3NpZnlgLCBgaGZzY19lbnF1ZXVlYCwgYGhmc2NfYmluZF90Y2ZgXG5cbkxldCdzIGRvIGEgZmluYWwgcmV2aWV3LiBJIHRoaW5rIHdlJ3ZlIGNvdmVyZWQgb3VyIGJhc2VzLiBSZWFkeSB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3NzQsIk91dHB1dFRva2VucyI6MTgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAzOjQ3LjM5NjUyMTAxMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTY4NzI1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfU0NIX0hGU0NcIixcbiAgICBcIk5FVF9DTFNfQUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGZzY19jbGFzc2lmeVwiLFxuICAgIFwiaGZzY19lbnF1ZXVlXCIsXG4gICAgXCJoZnNjX2JpbmRfdGNmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaGZzY19jbGFzc2lmeSBpbiBuZXQvc2NoZWQvc2NoX2hmc2MuYyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIGR1cmluZyBwYWNrZXQgY2xhc3NpZmljYXRpb24gd2hlbiBmaWx0ZXIgY2xhc3MgYmluZGluZ3MgZXhwZXJpZW5jZSBsYXRlcmFsIG9yIHVwd2FyZCBsZXZlbCBkcmlmdCBmb2xsb3dpbmcgY2xhc3MgaGllcmFyY2h5IHVwZGF0ZXMuIFRoZSBjb2RlIGlzIHBhcnQgb2YgdGhlIGNvcmUgdHJhZmZpYyBjb250cm9sIHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgcnRuZXRsaW5rIChjb25maWd1cmluZyBIRlNDIHFkaXNjcywgY2xhc3NlcywgYW5kIGZpbHRlcnMpIGFuZCBzZW5kaW5nIG5ldHdvcmsgdHJhZmZpYy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBlZGdlIGNhc2VzIGluIGNsYXNzIGhpZXJhcmNoeSBtYW5pcHVsYXRpb24sIGZpbHRlciBiaW5kaW5nLCBhbmQgY2xhc3NpZnkgbG9vcCBib3VuZGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfSEZTQ1wiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNjX2NsYXNzaWZ5XCIsXG4gICAgXCJoZnNjX2VucXVldWVcIixcbiAgICBcImhmc2NfYmluZF90Y2ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBoZnNjX2NsYXNzaWZ5IGluIG5ldC9zY2hlZC9zY2hfaGZzYy5jIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMgZHVyaW5nIHBhY2tldCBjbGFzc2lmaWNhdGlvbiB3aGVuIGZpbHRlciBjbGFzcyBiaW5kaW5ncyBleHBlcmllbmNlIGxhdGVyYWwgb3IgdXB3YXJkIGxldmVsIGRyaWZ0IGZvbGxvd2luZyBjbGFzcyBoaWVyYXJjaHkgdXBkYXRlcy4gVGhlIGNvZGUgaXMgcGFydCBvZiB0aGUgY29yZSB0cmFmZmljIGNvbnRyb2wgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBydG5ldGxpbmsgKGNvbmZpZ3VyaW5nIEhGU0MgcWRpc2NzLCBjbGFzc2VzLCBhbmQgZmlsdGVycykgYW5kIHNlbmRpbmcgbmV0d29yayB0cmFmZmljLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGVkZ2UgY2FzZXMgaW4gY2xhc3MgaGllcmFyY2h5IG1hbmlwdWxhdGlvbiwgZmlsdGVyIGJpbmRpbmcsIGFuZCBjbGFzc2lmeSBsb29wIGJvdW5kaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMzo0Ny41NDgyMTY2MjdaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTI1NTc5MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDM6NDcuNTQ4ODk1Njg2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTc1MjQ4OTIxMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBoZnNjX2NsYXNzaWZ5YCBpbiBgbmV0L3NjaGVkL3NjaF9oZnNjLmNgIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMgY2F1c2VkIGJ5IGxhdGVyYWwgb3IgdXB3YXJkIGNsYXNzaWZpY2F0aW9uIGhvcHMgYnkgaW50cm9kdWNpbmcgYSBsb29wIGNvdW50ZXIgKGBkcmlmdGApLiBUaGUgYGRyaWZ0YCBsb2NhbCB2YXJpYWJsZSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBIRlNDX0NMQVNTSUZZX01BWF9EUklGVGAgKDgpIGJlZm9yZSB0aGUgY2xhc3NpZmljYXRpb24gbG9vcCwgYW5kIGFsbCBjb21wYXJlZCBmaWVsZHMgKGBjbC1cXHUwMDNlbGV2ZWxgLCBgaGVhZC1cXHUwMDNlbGV2ZWxgKSBhcmUgZXhpc3RpbmcgaW5pdGlhbGl6ZWQgY2xhc3MgYXR0cmlidXRlcy5cXG5cXG5ObyBrZXJuZWwtdG8tdXNlciBkYXRhIHRyYW5zZmVycywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBidWZmZXIgc2l6ZS9vZmZzZXQgY2FsY3VsYXRpb25zIGFyZSBtb2RpZmllZC4gVGhlIHBhdGNoIGRvZXMgbm90IHJlYWQgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtZWFuaW5nIGl0IGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVmYzMwNzQ4YTE3NWE1NmNhOTYzY2YxNmRlYzc1MmNhZTEwNGI0ZDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAwOTowMDoxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaGZzYy5jIGIvbmV0L3NjaGVkL3NjaF9oZnNjLmNcbmluZGV4IGU4N2Y1MDIxYTE5OTUuLmIwNzNlZmFmMmJmNWYgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2hmc2MuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9oZnNjLmNcbkBAIC0zODYsNiArMzg2LDEyIEBAIGNmdHJlZV91cGRhdGUoc3RydWN0IGhmc2NfY2xhc3MgKmNsKVxuICNkZWZpbmVcdFNNX01BU0tcdFx0KCgxVUxMIFx1MDAzY1x1MDAzYyBTTV9TSElGVCkgLSAxKVxuICNkZWZpbmVcdElTTV9NQVNLXHQoKDFVTEwgXHUwMDNjXHUwMDNjIElTTV9TSElGVCkgLSAxKVxuIFxuKy8qXG4rICogYm91bmQgb24gY29uc2VjdXRpdmUgbm9uLWRlc2NlbmRpbmcgKGxhdGVyYWwgLyB1cHdhcmQpIGhvcHMgaW4gYVxuKyAqIGNsYXNzaWZ5IHdhbGssIG1pcnJvcmluZyBodGIncyBUQ19IVEJfTUFYREVQVEggaGVhZHJvb21cbisgKi9cbisjZGVmaW5lXHRIRlNDX0NMQVNTSUZZX01BWF9EUklGVFx0OFxuK1xuIHN0YXRpYyBpbmxpbmUgdTY0XG4gc2VnX3gyeSh1NjQgeCwgdTY0IHNtKVxuIHtcbkBAIC0xMTMzLDYgKzExMzksNyBAQCBoZnNjX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgKnFlcnIpXG4gXHRzdHJ1Y3QgaGZzY19jbGFzcyAqaGVhZCwgKmNsO1xuIFx0c3RydWN0IHRjZl9yZXN1bHQgcmVzO1xuIFx0c3RydWN0IHRjZl9wcm90byAqdGNmO1xuK1x0dW5zaWduZWQgaW50IGRyaWZ0O1xuIFx0aW50IHJlc3VsdDtcbiBcbiBcdGlmIChUQ19IX01BSihza2ItXHUwMDNlcHJpb3JpdHkgXiBzY2gtXHUwMDNlaGFuZGxlKSA9PSAwIFx1MDAyNlx1MDAyNlxuQEAgLTExNDIsNiArMTE0OSw3IEBAIGhmc2NfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsIGludCAqcWVycilcbiBcbiBcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xuIFx0aGVhZCA9IFx1MDAyNnEtXHUwMDNlcm9vdDtcbitcdGRyaWZ0ID0gSEZTQ19DTEFTU0lGWV9NQVhfRFJJRlQ7XG4gXHR0Y2YgPSByY3VfZGVyZWZlcmVuY2VfYmgocS1cdTAwM2Vyb290LmZpbHRlcl9saXN0KTtcbiBcdHdoaWxlICh0Y2YgXHUwMDI2XHUwMDI2IChyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCB0Y2YsIFx1MDAyNnJlcywgZmFsc2UpKSBcdTAwM2U9IDApIHtcbiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG5AQCAtMTE2Nyw2ICsxMTc1LDE2IEBAIGhmc2NfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsIGludCAqcWVycilcbiBcdFx0aWYgKGNsLVx1MDAzZWxldmVsID09IDApXG4gXHRcdFx0cmV0dXJuIGNsOyAvKiBoaXQgbGVhZiBjbGFzcyAqL1xuIFxuK1x0XHQvKlxuK1x0XHQgKiBmbG93aWQgYmluZHMgc2tpcCB0aGUgbGV2ZWwgY2hlY2sgYWJvdmUgKHJlcy5jbGFzcyBpcyBzZXRcbitcdFx0ICogYXQgYmluZCB0aW1lIGFuZCBsZXZlbHMgZHJpZnQgYWZ0ZXIpLCBzbyBhIHdhbGsgY2FuIGZvbGxvd1xuK1x0XHQgKiBsYXRlcmFsIGhvcHMgd2l0aG91dCBkZXNjZW5kaW5nOyBib3VuZCB0aGVtIGhlcmUuXG4rXHRcdCAqL1xuK1x0XHRpZiAoY2wtXHUwMDNlbGV2ZWwgXHUwMDNlPSBoZWFkLVx1MDAzZWxldmVsIFx1MDAyNlx1MDAyNiBkcmlmdC0tID09IDApIHtcbitcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiaGZzYzogY2xhc3NpZnkgbG9vcCBkZXRlY3RlZCwgZHJvcHBpbmcgcGFja2V0XFxuXCIpO1xuK1x0XHRcdHJldHVybiBOVUxMO1xuK1x0XHR9XG4rXG4gXHRcdC8qIGFwcGx5IGlubmVyIGZpbHRlciBjaGFpbiAqL1xuIFx0XHR0Y2YgPSByY3VfZGVyZWZlcmVuY2VfYmgoY2wtXHUwMDNlZmlsdGVyX2xpc3QpO1xuIFx0XHRoZWFkID0gY2w7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvaGZzYy5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvaGZzYy5qc29uXG5pbmRleCBjOThjMzM5NDI0ZDRlLi44MmQyZjhhZjE0NjBkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvaGZzYy5qc29uXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9oZnNjLmpzb25cbkBAIC0xNjksNSArMTY5LDM5IEBAXG4gICAgICAgICBcInRlYXJkb3duXCI6IFtcbiAgICAgICAgICAgICBcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwiXG4gICAgICAgICBdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCI4YzM5XCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJIRlNDIGNsYXNzaWZ5IHdhbGsgc3RpbGwgcmVhY2hlcyBsZWFmIGFmdGVyIGxhdGVyYWwgZHJpZnRcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwicWRpc2NcIixcbisgICAgICAgICAgICBcImhmc2NcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtcbisgICAgICAgICAgICBcImlwIGxpbmsgc2V0IGxvIHVwXCIsXG4rICAgICAgICAgICAgXCIkVEMgcWRpc2MgYWRkIGRldiBsbyBoYW5kbGUgMTogcm9vdCBoZnNjIGRlZmF1bHQgMzFcIixcbisgICAgICAgICAgICBcIiRUQyBjbGFzcyBhZGQgZGV2IGxvIHBhcmVudCAxOiBjbGFzc2lkIDE6MSBoZnNjIHJ0IG0yIDEwMGtiaXRcIixcbisgICAgICAgICAgICBcIiRUQyBjbGFzcyBhZGQgZGV2IGxvIHBhcmVudCAxOiBjbGFzc2lkIDE6MiBoZnNjIHJ0IG0yIDEwMGtiaXRcIixcbisgICAgICAgICAgICBcIiRUQyBjbGFzcyBhZGQgZGV2IGxvIHBhcmVudCAxOiBjbGFzc2lkIDE6MyBoZnNjIHJ0IG0yIDEwMGtiaXRcIixcbisgICAgICAgICAgICBcIiRUQyBjbGFzcyBhZGQgZGV2IGxvIHBhcmVudCAxOjEgY2xhc3NpZCAxOjEwIGhmc2MgcnQgbTIgNTBrYml0XCIsXG4rICAgICAgICAgICAgXCIkVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMToyIGNsYXNzaWQgMToyMCBoZnNjIHJ0IG0yIDEwa2JpdFwiLFxuKyAgICAgICAgICAgIFwiJFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6MyBjbGFzc2lkIDE6MzAgaGZzYyBydCBtMiAxMGtiaXRcIixcbisgICAgICAgICAgICBcIiRUQyBjbGFzcyBhZGQgZGV2IGxvIHBhcmVudCAxOjMgY2xhc3NpZCAxOjMxIGhmc2MgcnQgbTIgMTAwa2JpdFwiLFxuKyAgICAgICAgICAgIFwiJFRDIGZpbHRlciBhZGQgZGV2IGxvIHBhcmVudCAxOiBwcm90b2NvbCBpcCBwcmlvIDEgdTMyIG1hdGNoIHU4IDAgMCBhdCAwIGZsb3dpZCAxOjFcIixcbisgICAgICAgICAgICBcIiRUQyBmaWx0ZXIgYWRkIGRldiBsbyBwYXJlbnQgMToxIHByb3RvY29sIGlwIHByaW8gMSB1MzIgbWF0Y2ggdTggMCAwIGF0IDAgZmxvd2lkIDE6MlwiLFxuKyAgICAgICAgICAgIFwiJFRDIGZpbHRlciBhZGQgZGV2IGxvIHBhcmVudCAxOjIgcHJvdG9jb2wgaXAgcHJpbyAxIHUzMiBtYXRjaCB1OCAwIDAgYXQgMCBmbG93aWQgMTozXCIsXG4rICAgICAgICAgICAgXCIkVEMgZmlsdGVyIGFkZCBkZXYgbG8gcGFyZW50IDE6MyBwcm90b2NvbCBpcCBwcmlvIDEgdTMyIG1hdGNoIHU4IDAgMCBhdCAwIGZsb3dpZCAxOjMxXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcInBpbmcgLW4gLWMgMTAgLVcgMSAxMjcuMC4wLjE7IHNsZWVwIDFcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIwXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyAtcyBjbGFzcyBzaG93IGRldiBsb1wiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJjbGFzcyBoZnNjIDE6MzEgcGFyZW50IDE6MyBydC4qXFxcXG4uKlNlbnQgWzAtOV0rIGJ5dGVzIFsxLTldWzAtOV0qIHBrdFwiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXG4rICAgICAgICAgICAgXCIkVEMgcWRpc2MgZGVsIGRldiBsbyBoYW5kbGUgMTogcm9vdFwiXG4rICAgICAgICBdXG4gICAgIH1cbiBdXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMzo0Ny41NDg4OTY3OTdaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTY5MTMyNDAzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtNU0FOL0tBU0FOIFBhdGNoIGZvciBIRlNDIENsYXNzaWZpY2F0aW9uKipcblxuT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gZXZhbHVhdGUgdGhpcyBwYXRjaCBmb3IgdGhlIExpbnV4IGtlcm5lbCdzIG1lbW9yeSBlcnJvciBkZXRlY3RvciBmdXp6aW5nLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGNoYW5nZXMgcmVsYXRlZCB0byBLTVNBTiB2ZXJzdXMgS0FTQU4uIExldCdzIGRpZyBpbi5cblxuVGhlIGRpZmYgaXMgZm9jdXNlZCBvbiB0d28gYXJlYXM6IGBuZXQvc2NoZWQvc2NoX2hmc2MuY2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9oZnNjLmpzb25gLiBUaGUgY29kZSBjaGFuZ2VzIGxvb2sgaW50ZXJlc3RpbmcgYW5kIHdvcnRoIGEgZGV0YWlsZWQgbG9vaywgYW5kIHRoZSBhZGRpdGlvbiBvZiBhIHNlbGZ0ZXN0IGZvciBIRlNDIGNsYXNzaWZ5IGRyaWZ0IGhpbnRzIHRoaXMgaXMgaW1wb3J0YW50IGZvciBjb3ZlcmFnZS5cblxuRmlyc3QsIGluIGBzY2hfaGZzYy5jYCwgaXQncyBhZGRpbmcgYEhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUYCwgYW4gYHVuc2lnbmVkIGludCBkcmlmdGAgdmFyaWFibGUsIGFuZCBpbml0aWFsaXppbmcgaXQuIFRoaXMgaXMgZm9sbG93ZWQgYnkgYSBjaGVjayB3aXRoaW4gdGhlIGB3aGlsZWAgbG9vcCBpbnNpZGUgYGhmc2NfY2xhc3NpZnlgLiBUaGUgY29kZSBpcyBzcGVjaWZpY2FsbHkgZ3VhcmRpbmcgYWdhaW5zdCBzb21lIGtpbmQgb2YgY2xhc3NpZmljYXRpb24gbG9vcDogaWYgYGNsLVx1MDAzZWxldmVsIFx1MDAzZT0gaGVhZC1cdTAwM2VsZXZlbGAgYW5kIGBkcmlmdC0tID09IDBgLCBhIHdhcm5pbmcgaXMgcHJpbnRlZCwgYW5kIHRoZSBwYWNrZXQgaXMgZHJvcHBlZC4gVGhpcyBpcyBhIGNsZWFyIGF0dGVtcHQgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wIGluIHRoZSBjbGFzc2lmaWVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbnN0aXR1dGVzIGEgXCJjbGFzc2lmeSBsb29wXCIuIEknbGwgbmVlZCB0byByZWFkIG1vcmUgb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGhmc2NfY2xhc3NpZnlgIHRvIHNlZSBob3cgdGhlc2UgYHRjZmAgc3RydWN0dXJlcyBhcmUgaXRlcmF0ZWQgYW5kIGhvdyBgY2wtXHUwMDNlbGV2ZWxgIGFuZCBgaGVhZC1cdTAwM2VsZXZlbGAgYXJlIGRlZmluZWQuIFRoZSBkcmlmdCBjb3VudGVyIGlzIGFjdGluZyBhcyBhIHNhZmVndWFyZCB0byBhYm9ydCB0aGUgY2xhc3NpZmljYXRpb24gaWYgdGhpbmdzIGdldCBvdXQgb2YgaGFuZC5cblxuVGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBwYXRjaCBpbmNsdWRlcyBhIG5ldyBzZWxmdGVzdCBpbiBgaGZzYy5qc29uYC4gVGhpcyBpbXBsaWVzIGEgc3BlY2lmaWMgdGVzdCBjYXNlIGhhcyBiZWVuIGNyZWF0ZWQgdG8gZXhlcmNpc2UgYW5kIHZhbGlkYXRlIHRoZSBuZXcgZHJpZnQgY2hlY2suIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UsIGFuZCBjcml0aWNhbCBmb3IgdGhpcyBraW5kIG9mIGNoYW5nZS4gSXQncyBhIGdvb2Qgc2lnbiB0aGF0IHdlIGhhdmUgYSBzZWxmdGVzdC4gVGhpcyBtZWFucyB0aGUgZGV2ZWxvcGVycyBhcmUgYXR0ZW1wdGluZyB0byB0ZXN0IHNwZWNpZmljYWxseSBmb3IgdGhpcyBjbGFzc2lmeSB3YWxrIGxhdGVyYWwgZHJpZnQuXG5cblRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgS01TQU4vS0FTQU4sIGFuZCBob3cgdGhpcyByZWxhdGVzIHRvIG1lbW9yeSBlcnJvciBkZXRlY3Rpb24sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2xhc3NpZmllciBsb29wICpjb3VsZCogbGVhZCB0byBtZW1vcnkgZXJyb3JzLiBJIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgYGhmc2NfY2xhc3NpZnlgIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBtZW1vcnkgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMsIGFuZCBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgZnV6emluZyBpcyBzZXQgdXAgdG8gZW5zdXJlIHRoaXMgY29kZSBwYXRoIGlzIHdlbGwtZXhlcmNpc2VkLiBJ4oCZbSB0aGlua2luZyB0aGUgZHJpZnQgY2hlY2sgaXMgbGlrZWx5IGludGVuZGVkIHRvIGhlbHAgcHJldmVudCBhIHN0YWNrIG92ZXJmbG93IG9yIG90aGVyIG1lbW9yeSBpc3N1ZXMgdGhhdCBjb3VsZCBoYXBwZW4gZHVlIHRvIGEgbWlzYmVoYXZpbmcgY2xhc3NpZmljYXRpb24gbG9vcC4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSBob3cgYHRjZl9jbGFzc2lmeV9xZGlzY2AgaXMgZG9pbmcgaXRzIHdvcmsuIEkgd2lsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHJlYWQgYHNjaF9oZnNjLmNgIHN1cnJvdW5kaW5nIGBoZnNjX2NsYXNzaWZ5YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ3MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAzOjUzLjI0MDIyMzY3OVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL3NjaF9oZnNjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEzMCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEzMDpcXHRcXG4xMTMxOlxcdFxcdGhmc2NfZGVzdHJveV9jbGFzcyhzY2gsIGNsKTtcXG4xMTMyOlxcdFxcdHJldHVybiAwO1xcbjExMzM6XFx0fVxcbjExMzQ6XFx0XFxuMTEzNTpcXHRzdGF0aWMgc3RydWN0IGhmc2NfY2xhc3MgKlxcbjExMzY6XFx0aGZzY19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKVxcbjExMzc6XFx0e1xcbjExMzg6XFx0XFx0c3RydWN0IGhmc2Nfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxuMTEzOTpcXHRcXHRzdHJ1Y3QgaGZzY19jbGFzcyAqaGVhZCwgKmNsO1xcbjExNDA6XFx0XFx0c3RydWN0IHRjZl9yZXN1bHQgcmVzO1xcbjExNDE6XFx0XFx0c3RydWN0IHRjZl9wcm90byAqdGNmO1xcbjExNDI6XFx0XFx0dW5zaWduZWQgaW50IGRyaWZ0O1xcbjExNDM6XFx0XFx0aW50IHJlc3VsdDtcXG4xMTQ0OlxcdFxcbjExNDU6XFx0XFx0aWYgKFRDX0hfTUFKKHNrYi1cXHUwMDNlcHJpb3JpdHkgXiBzY2gtXFx1MDAzZWhhbmRsZSkgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbjExNDY6XFx0XFx0ICAgIChjbCA9IGhmc2NfZmluZF9jbGFzcyhza2ItXFx1MDAzZXByaW9yaXR5LCBzY2gpKSAhPSBOVUxMKVxcbjExNDc6XFx0XFx0XFx0aWYgKGNsLVxcdTAwM2VsZXZlbCA9PSAwKVxcbjExNDg6XFx0XFx0XFx0XFx0cmV0dXJuIGNsO1xcbjExNDk6XFx0XFxuMTE1MDpcXHRcXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcXG4xMTUxOlxcdFxcdGhlYWQgPSBcXHUwMDI2cS1cXHUwMDNlcm9vdDtcXG4xMTUyOlxcdFxcdGRyaWZ0ID0gSEZTQ19DTEFTU0lGWV9NQVhfRFJJRlQ7XFxuMTE1MzpcXHRcXHR0Y2YgPSByY3VfZGVyZWZlcmVuY2VfYmgocS1cXHUwMDNlcm9vdC5maWx0ZXJfbGlzdCk7XFxuMTE1NDpcXHRcXHR3aGlsZSAodGNmIFxcdTAwMjZcXHUwMDI2IChyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCB0Y2YsIFxcdTAwMjZyZXMsIGZhbHNlKSkgXFx1MDAzZT0gMCkge1xcbjExNTU6XFx0I2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxcbjExNTY6XFx0XFx0XFx0c3dpdGNoIChyZXN1bHQpIHtcXG4xMTU3OlxcdFxcdFxcdGNhc2UgVENfQUNUX1FVRVVFRDpcXG4xMTU4OlxcdFxcdFxcdGNhc2UgVENfQUNUX1NUT0xFTjpcXG4xMTU5OlxcdFxcdFxcdGNhc2UgVENfQUNUX1RSQVA6XFxuMTE2MDpcXHRcXHRcXHRcXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX1NUT0xFTjtcXG4xMTYxOlxcdFxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbjExNjI6XFx0XFx0XFx0Y2FzZSBUQ19BQ1RfU0hPVDpcXG4xMTYzOlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjExNjQ6XFx0XFx0XFx0fVxcbjExNjU6XFx0I2VuZGlmXFxuMTE2NjpcXHRcXHRcXHRjbCA9IChzdHJ1Y3QgaGZzY19jbGFzcyAqKXJlcy5jbGFzcztcXG4xMTY3OlxcdFxcdFxcdGlmICghY2wpIHtcXG4xMTY4OlxcdFxcdFxcdFxcdGNsID0gaGZzY19maW5kX2NsYXNzKHJlcy5jbGFzc2lkLCBzY2gpO1xcbjExNjk6XFx0XFx0XFx0XFx0aWYgKCFjbClcXG4xMTcwOlxcdFxcdFxcdFxcdFxcdGJyZWFrOyAvKiBmaWx0ZXIgc2VsZWN0ZWQgaW52YWxpZCBjbGFzc2lkICovXFxuMTE3MTpcXHRcXHRcXHRcXHRpZiAoY2wtXFx1MDAzZWxldmVsIFxcdTAwM2U9IGhlYWQtXFx1MDAzZWxldmVsKVxcbjExNzI6XFx0XFx0XFx0XFx0XFx0YnJlYWs7IC8qIGZpbHRlciBtYXkgb25seSBwb2ludCBkb3dud2FyZHMgKi9cXG4xMTczOlxcdFxcdFxcdH1cXG4xMTc0OlxcdFxcbjExNzU6XFx0XFx0XFx0aWYgKGNsLVxcdTAwM2VsZXZlbCA9PSAwKVxcbjExNzY6XFx0XFx0XFx0XFx0cmV0dXJuIGNsOyAvKiBoaXQgbGVhZiBjbGFzcyAqL1xcbjExNzc6XFx0XFxuMTE3ODpcXHRcXHRcXHQvKlxcbjExNzk6XFx0XFx0XFx0ICogZmxvd2lkIGJpbmRzIHNraXAgdGhlIGxldmVsIGNoZWNrIGFib3ZlIChyZXMuY2xhc3MgaXMgc2V0XFxuMTE4MDpcXHRcXHRcXHQgKiBhdCBiaW5kIHRpbWUgYW5kIGxldmVscyBkcmlmdCBhZnRlciksIHNvIGEgd2FsayBjYW4gZm9sbG93XFxuMTE4MTpcXHRcXHRcXHQgKiBsYXRlcmFsIGhvcHMgd2l0aG91dCBkZXNjZW5kaW5nOyBib3VuZCB0aGVtIGhlcmUuXFxuMTE4MjpcXHRcXHRcXHQgKi9cXG4xMTgzOlxcdFxcdFxcdGlmIChjbC1cXHUwMDNlbGV2ZWwgXFx1MDAzZT0gaGVhZC1cXHUwMDNlbGV2ZWwgXFx1MDAyNlxcdTAwMjYgZHJpZnQtLSA9PSAwKSB7XFxuMTE4NDpcXHRcXHRcXHRcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCJoZnNjOiBjbGFzc2lmeSBsb29wIGRldGVjdGVkLCBkcm9wcGluZyBwYWNrZXRcXFxcblxcXCIpO1xcbjExODU6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTE4NjpcXHRcXHRcXHR9XFxuMTE4NzpcXHRcXG4xMTg4OlxcdFxcdFxcdC8qIGFwcGx5IGlubmVyIGZpbHRlciBjaGFpbiAqL1xcbjExODk6XFx0XFx0XFx0dGNmID0gcmN1X2RlcmVmZXJlbmNlX2JoKGNsLVxcdTAwM2VmaWx0ZXJfbGlzdCk7XFxuMTE5MDpcXHRcXHRcXHRoZWFkID0gY2w7XFxuMTE5MTpcXHRcXHR9XFxuMTE5MjpcXHRcXG4xMTkzOlxcdFxcdC8qIGNsYXNzaWZpY2F0aW9uIGZhaWxlZCwgdHJ5IGRlZmF1bHQgY2xhc3MgKi9cXG4xMTk0OlxcdFxcdGNsID0gaGZzY19maW5kX2NsYXNzKFRDX0hfTUFLRShUQ19IX01BSihzY2gtXFx1MDAzZWhhbmRsZSksXFxuMTE5NTpcXHRcXHRcXHRcXHRcXHQgICAgICAgUkVBRF9PTkNFKHEtXFx1MDAzZWRlZmNscykpLCBzY2gpO1xcbjExOTY6XFx0XFx0aWYgKGNsID09IE5VTEwgfHwgY2wtXFx1MDAzZWxldmVsIFxcdTAwM2UgMClcXG4xMTk3OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjExOTg6XFx0XFxuMTE5OTpcXHRcXHRyZXR1cm4gY2w7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAzOjUzLjI0MDM1NDM5OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMTgzMzQwNDg2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50IG9mIEhGU0MgQ2xhc3NpZmljYXRpb24gTG9vcCBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IEtNU0FOIHNob3VsZCBmbGFnLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBFc3NlbnRpYWxseSwgaXQncyBhZGRpbmcgYSBzYWZlZ3VhcmQgdG8gdGhlIGBoZnNjX2NsYXNzaWZ5YCBmdW5jdGlvbi4gUHJldmlvdXNseSwgaWYgdHJhZmZpYyBjbGFzc2lmaWNhdGlvbiBjaGFpbnMgaGFkIGEgY3ljbGljYWwgc3RydWN0dXJlIChlLmcuLCBBIHBvaW50cyB0byBCLCBCIHBvaW50cyB0byBBKSBvciBub24tZGVzY2VuZGluZyBob3BzLCB0aGUgYHdoaWxlYCBsb29wIHdpdGhpbiBgaGZzY19jbGFzc2lmeWAgY291bGQgcnVuIGluZGVmaW5pdGVseSwgbGVhZGluZyB0byBhIGhhbmcgb3Igc29mdCBsb2NrdXAuIFRoZSBwYXRjaCBhZGRyZXNzZXMgdGhpcyB3aXRoIGEgbG9vcCBib3VuZC4gSXQgaW50cm9kdWNlcyBhIGBkcmlmdGAgY291bnRlciwgaW5pdGlhbGl6ZWQgdG8gYEhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUYCwgd2hpY2ggZGVjcmVtZW50cyB3aXRoIGVhY2ggbG9vcCBpdGVyYXRpb24uIElmIGBkcmlmdGAgcmVhY2hlcyB6ZXJvICphbmQqIHRoZSBsZXZlbHMgZG9uJ3QgZm9ybSBhIGRlc2NlbmRpbmcgc3RydWN0dXJlIChpLmUuIGBjbC1cdTAwM2VsZXZlbCBcdTAwM2U9IGhlYWQtXHUwMDNlbGV2ZWxgKSwgdGhlIGxvb3AgdGVybWluYXRlcywgYW5kIGEgd2FybmluZyBpcyBsb2dnZWQuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBEb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucz8gSSBuZWVkIHRvIGFuYWx5emUgdGhlIGNvZGUgcGF0aCB2ZXJ5IGNhcmVmdWxseS5cblxuMS4gIERvZXMgaXQgdG91Y2gga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlPyBObywgbm90IGF0IGFsbC4gVGhlcmUgYXJlIG5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCwgb3Igc29ja2V0IG9wdGlvbnMgaW52b2x2ZWQuXG5cbjIuICBEb2VzIGl0IGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcz8gTm8uIFRoZSBuZXdseSBpbnRyb2R1Y2VkIHZhcmlhYmxlLCBgZHJpZnRgLCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBpdCBpcyB1c2VkLiBUaGUgdmFyaWFibGVzIGl0IGNvbXBhcmVzIGl0IHRvLCBgY2wtXHUwMDNlbGV2ZWxgIGFuZCBgaGVhZC1cdTAwM2VsZXZlbGAsIGFyZSBleGlzdGluZyBhbmQsIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCBwcm9wZXJseSBpbml0aWFsaXplZCBmaWVsZHMgd2l0aGluIGBzdHJ1Y3QgaGZzY19jbGFzc2AuXG5cbjMuICBEb2VzIHRoaXMgcGF0Y2ggaW52b2x2ZSBhbnkgbmV3IGFsbG9jYXRpb25zIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzPyBOb3BlLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgb3IgZGVhbGxvY2F0aW9ucyBpbnRyb2R1Y2VkLlxuXG40LiAgRG9lcyBpdCBhbHRlciBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzPyBOby4gSXQgbGltaXRzIHRoZSBsb29wIGl0ZXJhdGlvbnMsIHByZXZlbnRpbmcgYW4gaW5maW5pdGUgbG9vcCBkdXJpbmcgcGFja2V0IGNsYXNzaWZpY2F0aW9uIGFuZCBzdWJzZXF1ZW50IGhhbmdzLlxuXG5HaXZlbiB0aGVzZSBmaW5kaW5ncywgSSBjYW4gY29uZmlkZW50bHkgc2F5IHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZSBidWcgaXQgZml4ZXPigJR0aGUgaW5maW5pdGUgbG9vcCBhbmQgc29mdCBsb2NrdXDigJRpcyByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBhbmQgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLTVNBTiB3b24ndCBjYXRjaCB0aGlzOyBhIHdhdGNoZG9nIG9yIHNvZnQgbG9ja3VwIGRldGVjdG9yIGlzIHdoYXQncyByZWxldmFudCBoZXJlLCBhbmQgZXZlbiBLQVNBTiB3b3VsZCBiZSBzb21ld2hhdCByZWxldmFudCwgaG93ZXZlciwgdGhlIHByaW1hcnkgcHJvYmxlbSBmaXhlZCBpcyBhIGNvbnRyb2wgZmxvdyBpc3N1ZSwgbm90IG1lbW9yeS4gVGhlIHJlbGV2YW50IGlzc3VlIGlzIHRoYXQgdGhpcyBwYXRjaCBmaXhlcyBhbiBpbmZpbml0ZSBsb29wL2RlbmlhbC1vZi1zZXJ2aWNlLCBub3QgYSBtZW1vcnkgc2FmZXR5IGlzc3VlLlxuXG5UaGVyZWZvcmUsIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgYW5hbHlzaXMgaXMgY29tcGxldGUsIGFuZCBJIGFtIHNhdGlzZmllZCB3aXRoIHRoZSByZWFzb25pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0OTEsIk91dHB1dFRva2VucyI6MTYzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDQ6MDUuMDczNzYyMTUxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaGZzY19jbGFzc2lmeWAgaW4gYG5ldC9zY2hlZC9zY2hfaGZzYy5jYCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIGNhdXNlZCBieSBsYXRlcmFsIG9yIHVwd2FyZCBjbGFzc2lmaWNhdGlvbiBob3BzIGJ5IGludHJvZHVjaW5nIGEgbG9vcCBjb3VudGVyIChgZHJpZnRgKS4gVGhlIGBkcmlmdGAgbG9jYWwgdmFyaWFibGUgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgSEZTQ19DTEFTU0lGWV9NQVhfRFJJRlRgICg4KSBiZWZvcmUgdGhlIGNsYXNzaWZpY2F0aW9uIGxvb3AsIGFuZCBhbGwgY29tcGFyZWQgZmllbGRzIChgY2wtXFx1MDAzZWxldmVsYCwgYGhlYWQtXFx1MDAzZWxldmVsYCkgYXJlIGV4aXN0aW5nIGluaXRpYWxpemVkIGNsYXNzIGF0dHJpYnV0ZXMuXFxuXFxuTm8ga2VybmVsLXRvLXVzZXIgZGF0YSB0cmFuc2ZlcnMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYnVmZmVyIHNpemUvb2Zmc2V0IGNhbGN1bGF0aW9ucyBhcmUgbW9kaWZpZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbWVhbmluZyBpdCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaGZzY19jbGFzc2lmeWAgaW4gYG5ldC9zY2hlZC9zY2hfaGZzYy5jYCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIGNhdXNlZCBieSBsYXRlcmFsIG9yIHVwd2FyZCBjbGFzc2lmaWNhdGlvbiBob3BzIGJ5IGludHJvZHVjaW5nIGEgbG9vcCBjb3VudGVyIChgZHJpZnRgKS4gVGhlIGBkcmlmdGAgbG9jYWwgdmFyaWFibGUgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgSEZTQ19DTEFTU0lGWV9NQVhfRFJJRlRgICg4KSBiZWZvcmUgdGhlIGNsYXNzaWZpY2F0aW9uIGxvb3AsIGFuZCBhbGwgY29tcGFyZWQgZmllbGRzIChgY2wtXFx1MDAzZWxldmVsYCwgYGhlYWQtXFx1MDAzZWxldmVsYCkgYXJlIGV4aXN0aW5nIGluaXRpYWxpemVkIGNsYXNzIGF0dHJpYnV0ZXMuXFxuXFxuTm8ga2VybmVsLXRvLXVzZXIgZGF0YSB0cmFuc2ZlcnMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYnVmZmVyIHNpemUvb2Zmc2V0IGNhbGN1bGF0aW9ucyBhcmUgbW9kaWZpZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbWVhbmluZyBpdCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow4qsnz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 08:10:59 +0000 UTC FinishedAt: 2026-09-14 09:04:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_HFSC", "NET_CLS_ACT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_SCH_HFSC", "NET_CLS_ACT" ], "series_id": "421245ff-cc03-423c-b2ba-49620dc0277d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "hfsc_classify", "hfsc_enqueue", "hfsc_bind_tcf" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0hGU0MmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNjX2NsYXNzaWZ5JiMzNDssCiAgICAmIzM0O2hmc2NfZW5xdWV1ZSYjMzQ7LAogICAgJiMzNDtoZnNjX2JpbmRfdGNmJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGhmc2NfY2xhc3NpZnlgIGluIGBuZXQvc2NoZWQvc2NoX2hmc2MuY2AgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcyBjYXVzZWQgYnkgbGF0ZXJhbCBvciB1cHdhcmQgY2xhc3NpZmljYXRpb24gaG9wcyBieSBpbnRyb2R1Y2luZyBhIGxvb3AgY291bnRlciAoYGRyaWZ0YCkuIFRoZSBgZHJpZnRgIGxvY2FsIHZhcmlhYmxlIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYEhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUYCAoOCkgYmVmb3JlIHRoZSBjbGFzc2lmaWNhdGlvbiBsb29wLCBhbmQgYWxsIGNvbXBhcmVkIGZpZWxkcyAoYGNsLVx1MDAzZWxldmVsYCwgYGhlYWQtXHUwMDNlbGV2ZWxgKSBhcmUgZXhpc3RpbmcgaW5pdGlhbGl6ZWQgY2xhc3MgYXR0cmlidXRlcy5cblxuTm8ga2VybmVsLXRvLXVzZXIgZGF0YSB0cmFuc2ZlcnMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYnVmZmVyIHNpemUvb2Zmc2V0IGNhbGN1bGF0aW9ucyBhcmUgbW9kaWZpZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbWVhbmluZyBpdCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaGZzY19jbGFzc2lmeSBpbiBuZXQvc2NoZWQvc2NoX2hmc2MuYyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIGR1cmluZyBwYWNrZXQgY2xhc3NpZmljYXRpb24gd2hlbiBmaWx0ZXIgY2xhc3MgYmluZGluZ3MgZXhwZXJpZW5jZSBsYXRlcmFsIG9yIHVwd2FyZCBsZXZlbCBkcmlmdCBmb2xsb3dpbmcgY2xhc3MgaGllcmFyY2h5IHVwZGF0ZXMuIFRoZSBjb2RlIGlzIHBhcnQgb2YgdGhlIGNvcmUgdHJhZmZpYyBjb250cm9sIHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgcnRuZXRsaW5rIChjb25maWd1cmluZyBIRlNDIHFkaXNjcywgY2xhc3NlcywgYW5kIGZpbHRlcnMpIGFuZCBzZW5kaW5nIG5ldHdvcmsgdHJhZmZpYy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBlZGdlIGNhc2VzIGluIGNsYXNzIGhpZXJhcmNoeSBtYW5pcHVsYXRpb24sIGZpbHRlciBiaW5kaW5nLCBhbmQgY2xhc3NpZnkgbG9vcCBib3VuZGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGVmYzMwNzQ4YTE3NWE1NmNhOTYzY2YxNmRlYzc1MmNhZTEwNGI0ZDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAwOTowMDoxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hmc2MuYyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jXG5pbmRleCBlODdmNTAyMWExOTk1Li5iMDczZWZhZjJiZjVmIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9oZnNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jXG5AQCAtMzg2LDYgJiM0MzszODYsMTIgQEAgY2Z0cmVlX3VwZGF0ZShzdHJ1Y3QgaGZzY19jbGFzcyAqY2wpXG4gI2RlZmluZVx0U01fTUFTS1x0XHQoKDFVTEwgXHUwMDNjXHUwMDNjIFNNX1NISUZUKSAtIDEpXG4gI2RlZmluZVx0SVNNX01BU0tcdCgoMVVMTCBcdTAwM2NcdTAwM2MgSVNNX1NISUZUKSAtIDEpXG4gXG4mIzQzOy8qXG4mIzQzOyAqIGJvdW5kIG9uIGNvbnNlY3V0aXZlIG5vbi1kZXNjZW5kaW5nIChsYXRlcmFsIC8gdXB3YXJkKSBob3BzIGluIGFcbiYjNDM7ICogY2xhc3NpZnkgd2FsaywgbWlycm9yaW5nIGh0YiYjMzk7cyBUQ19IVEJfTUFYREVQVEggaGVhZHJvb21cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmVcdEhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUXHQ4XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdTY0XG4gc2VnX3gyeSh1NjQgeCwgdTY0IHNtKVxuIHtcbkBAIC0xMTMzLDYgJiM0MzsxMTM5LDcgQEAgaGZzY19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKVxuIFx0c3RydWN0IGhmc2NfY2xhc3MgKmhlYWQsICpjbDtcbiBcdHN0cnVjdCB0Y2ZfcmVzdWx0IHJlcztcbiBcdHN0cnVjdCB0Y2ZfcHJvdG8gKnRjZjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZHJpZnQ7XG4gXHRpbnQgcmVzdWx0O1xuIFxuIFx0aWYgKFRDX0hfTUFKKHNrYi1cdTAwM2Vwcmlvcml0eSBeIHNjaC1cdTAwM2VoYW5kbGUpID09IDAgXHUwMDI2XHUwMDI2XG5AQCAtMTE0Miw2ICYjNDM7MTE0OSw3IEBAIGhmc2NfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsIGludCAqcWVycilcbiBcbiBcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xuIFx0aGVhZCA9IFx1MDAyNnEtXHUwMDNlcm9vdDtcbiYjNDM7XHRkcmlmdCA9IEhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUO1xuIFx0dGNmID0gcmN1X2RlcmVmZXJlbmNlX2JoKHEtXHUwMDNlcm9vdC5maWx0ZXJfbGlzdCk7XG4gXHR3aGlsZSAodGNmIFx1MDAyNlx1MDAyNiAocmVzdWx0ID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgdGNmLCBcdTAwMjZyZXMsIGZhbHNlKSkgXHUwMDNlPSAwKSB7XG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxuQEAgLTExNjcsNiAmIzQzOzExNzUsMTYgQEAgaGZzY19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKVxuIFx0XHRpZiAoY2wtXHUwMDNlbGV2ZWwgPT0gMClcbiBcdFx0XHRyZXR1cm4gY2w7IC8qIGhpdCBsZWFmIGNsYXNzICovXG4gXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogZmxvd2lkIGJpbmRzIHNraXAgdGhlIGxldmVsIGNoZWNrIGFib3ZlIChyZXMuY2xhc3MgaXMgc2V0XG4mIzQzO1x0XHQgKiBhdCBiaW5kIHRpbWUgYW5kIGxldmVscyBkcmlmdCBhZnRlciksIHNvIGEgd2FsayBjYW4gZm9sbG93XG4mIzQzO1x0XHQgKiBsYXRlcmFsIGhvcHMgd2l0aG91dCBkZXNjZW5kaW5nOyBib3VuZCB0aGVtIGhlcmUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChjbC1cdTAwM2VsZXZlbCBcdTAwM2U9IGhlYWQtXHUwMDNlbGV2ZWwgXHUwMDI2XHUwMDI2IGRyaWZ0LS0gPT0gMCkge1xuJiM0MztcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O2hmc2M6IGNsYXNzaWZ5IGxvb3AgZGV0ZWN0ZWQsIGRyb3BwaW5nIHBhY2tldFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0LyogYXBwbHkgaW5uZXIgZmlsdGVyIGNoYWluICovXG4gXHRcdHRjZiA9IHJjdV9kZXJlZmVyZW5jZV9iaChjbC1cdTAwM2VmaWx0ZXJfbGlzdCk7XG4gXHRcdGhlYWQgPSBjbDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9oZnNjLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9oZnNjLmpzb25cbmluZGV4IGM5OGMzMzk0MjRkNGUuLjgyZDJmOGFmMTQ2MGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9oZnNjLmpzb25cbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2hmc2MuanNvblxuQEAgLTE2OSw1ICYjNDM7MTY5LDM5IEBAXG4gICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1xuICAgICAgICAgICAgIFwmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwmIzM0O1xuICAgICAgICAgXVxuJiM0MzsgICAgfSxcbiYjNDM7ICAgIHtcbiYjNDM7ICAgICAgICBcJiMzNDtpZFwmIzM0OzogXCYjMzQ7OGMzOVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtuYW1lXCYjMzQ7OiBcJiMzNDtIRlNDIGNsYXNzaWZ5IHdhbGsgc3RpbGwgcmVhY2hlcyBsZWFmIGFmdGVyIGxhdGVyYWwgZHJpZnRcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7Y2F0ZWdvcnlcJiMzNDs6IFtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cWRpc2NcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2hmc2NcJiMzNDtcbiYjNDM7ICAgICAgICBdLFxuJiM0MzsgICAgICAgIFwmIzM0O3BsdWdpbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cmVxdWlyZXNcJiMzNDs6IFwmIzM0O25zUGx1Z2luXCYjMzQ7XG4mIzQzOyAgICAgICAgfSxcbiYjNDM7ICAgICAgICBcJiMzNDtzZXR1cFwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtpcCBsaW5rIHNldCBsbyB1cFwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgbG8gaGFuZGxlIDE6IHJvb3QgaGZzYyBkZWZhdWx0IDMxXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMTogY2xhc3NpZCAxOjEgaGZzYyBydCBtMiAxMDBrYml0XCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMTogY2xhc3NpZCAxOjIgaGZzYyBydCBtMiAxMDBrYml0XCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMTogY2xhc3NpZCAxOjMgaGZzYyBydCBtMiAxMDBrYml0XCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMToxIGNsYXNzaWQgMToxMCBoZnNjIHJ0IG0yIDUwa2JpdFwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6MiBjbGFzc2lkIDE6MjAgaGZzYyBydCBtMiAxMGtiaXRcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0OyRUQyBjbGFzcyBhZGQgZGV2IGxvIHBhcmVudCAxOjMgY2xhc3NpZCAxOjMwIGhmc2MgcnQgbTIgMTBrYml0XCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMTozIGNsYXNzaWQgMTozMSBoZnNjIHJ0IG0yIDEwMGtiaXRcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiBsbyBwYXJlbnQgMTogcHJvdG9jb2wgaXAgcHJpbyAxIHUzMiBtYXRjaCB1OCAwIDAgYXQgMCBmbG93aWQgMToxXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgbG8gcGFyZW50IDE6MSBwcm90b2NvbCBpcCBwcmlvIDEgdTMyIG1hdGNoIHU4IDAgMCBhdCAwIGZsb3dpZCAxOjJcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiBsbyBwYXJlbnQgMToyIHByb3RvY29sIGlwIHByaW8gMSB1MzIgbWF0Y2ggdTggMCAwIGF0IDAgZmxvd2lkIDE6M1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIGZpbHRlciBhZGQgZGV2IGxvIHBhcmVudCAxOjMgcHJvdG9jb2wgaXAgcHJpbyAxIHUzMiBtYXRjaCB1OCAwIDAgYXQgMCBmbG93aWQgMTozMVwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7Y21kVW5kZXJUZXN0XCYjMzQ7OiBcJiMzNDtwaW5nIC1uIC1jIDEwIC1XIDEgMTI3LjAuMC4xOyBzbGVlcCAxXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2V4cEV4aXRDb2RlXCYjMzQ7OiBcJiMzNDswXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O3ZlcmlmeUNtZFwmIzM0OzogXCYjMzQ7JFRDIC1zIGNsYXNzIHNob3cgZGV2IGxvXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoUGF0dGVyblwmIzM0OzogXCYjMzQ7Y2xhc3MgaGZzYyAxOjMxIHBhcmVudCAxOjMgcnQuKlxcXFxuLipTZW50IFswLTldJiM0MzsgYnl0ZXMgWzEtOV1bMC05XSogcGt0XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoQ291bnRcJiMzNDs6IFwmIzM0OzFcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7dGVhcmRvd25cJiMzNDs6IFtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgbG8gaGFuZGxlIDE6IHJvb3RcJiMzNDtcbiYjNDM7ICAgICAgICBdXG4gICAgIH1cbiBdXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfSEZTQyYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hmc2NfY2xhc3NpZnkmIzM0OywKICAgICYjMzQ7aGZzY19lbnF1ZXVlJiMzNDssCiAgICAmIzM0O2hmc2NfYmluZF90Y2YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaGZzY19jbGFzc2lmeSBpbiBuZXQvc2NoZWQvc2NoX2hmc2MuYyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIGR1cmluZyBwYWNrZXQgY2xhc3NpZmljYXRpb24gd2hlbiBmaWx0ZXIgY2xhc3MgYmluZGluZ3MgZXhwZXJpZW5jZSBsYXRlcmFsIG9yIHVwd2FyZCBsZXZlbCBkcmlmdCBmb2xsb3dpbmcgY2xhc3MgaGllcmFyY2h5IHVwZGF0ZXMuIFRoZSBjb2RlIGlzIHBhcnQgb2YgdGhlIGNvcmUgdHJhZmZpYyBjb250cm9sIHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgcnRuZXRsaW5rIChjb25maWd1cmluZyBIRlNDIHFkaXNjcywgY2xhc3NlcywgYW5kIGZpbHRlcnMpIGFuZCBzZW5kaW5nIG5ldHdvcmsgdHJhZmZpYy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBlZGdlIGNhc2VzIGluIGNsYXNzIGhpZXJhcmNoeSBtYW5pcHVsYXRpb24sIGZpbHRlciBiaW5kaW5nLCBhbmQgY2xhc3NpZnkgbG9vcCBib3VuZGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVmYzMwNzQ4YTE3NWE1NmNhOTYzY2YxNmRlYzc1MmNhZTEwNGI0ZDUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAwOTowMDoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaGZzYy5jIGIvbmV0L3NjaGVkL3NjaF9oZnNjLmMKaW5kZXggZTg3ZjUwMjFhMTk5NS4uYjA3M2VmYWYyYmY1ZiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9oZnNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9oZnNjLmMKQEAgLTM4Niw2ICYjNDM7Mzg2LDEyIEBAIGNmdHJlZV91cGRhdGUoc3RydWN0IGhmc2NfY2xhc3MgKmNsKQogI2RlZmluZQlTTV9NQVNLCQkoKDFVTEwgJmx0OyZsdDsgU01fU0hJRlQpIC0gMSkKICNkZWZpbmUJSVNNX01BU0sJKCgxVUxMICZsdDsmbHQ7IElTTV9TSElGVCkgLSAxKQogCiYjNDM7LyoKJiM0MzsgKiBib3VuZCBvbiBjb25zZWN1dGl2ZSBub24tZGVzY2VuZGluZyAobGF0ZXJhbCAvIHVwd2FyZCkgaG9wcyBpbiBhCiYjNDM7ICogY2xhc3NpZnkgd2FsaywgbWlycm9yaW5nIGh0YiYjMzk7cyBUQ19IVEJfTUFYREVQVEggaGVhZHJvb20KJiM0MzsgKi8KJiM0MzsjZGVmaW5lCUhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUCTgKJiM0MzsKIHN0YXRpYyBpbmxpbmUgdTY0CiBzZWdfeDJ5KHU2NCB4LCB1NjQgc20pCiB7CkBAIC0xMTMzLDYgJiM0MzsxMTM5LDcgQEAgaGZzY19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKQogCXN0cnVjdCBoZnNjX2NsYXNzICpoZWFkLCAqY2w7CiAJc3RydWN0IHRjZl9yZXN1bHQgcmVzOwogCXN0cnVjdCB0Y2ZfcHJvdG8gKnRjZjsKJiM0MzsJdW5zaWduZWQgaW50IGRyaWZ0OwogCWludCByZXN1bHQ7CiAKIAlpZiAoVENfSF9NQUooc2tiLSZndDtwcmlvcml0eSBeIHNjaC0mZ3Q7aGFuZGxlKSA9PSAwICZhbXA7JmFtcDsKQEAgLTExNDIsNiAmIzQzOzExNDksNyBAQCBoZnNjX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgKnFlcnIpCiAKIAkqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUzsKIAloZWFkID0gJmFtcDtxLSZndDtyb290OwomIzQzOwlkcmlmdCA9IEhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUOwogCXRjZiA9IHJjdV9kZXJlZmVyZW5jZV9iaChxLSZndDtyb290LmZpbHRlcl9saXN0KTsKIAl3aGlsZSAodGNmICZhbXA7JmFtcDsgKHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIHRjZiwgJmFtcDtyZXMsIGZhbHNlKSkgJmd0Oz0gMCkgewogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVApAQCAtMTE2Nyw2ICYjNDM7MTE3NSwxNiBAQCBoZnNjX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgKnFlcnIpCiAJCWlmIChjbC0mZ3Q7bGV2ZWwgPT0gMCkKIAkJCXJldHVybiBjbDsgLyogaGl0IGxlYWYgY2xhc3MgKi8KIAomIzQzOwkJLyoKJiM0MzsJCSAqIGZsb3dpZCBiaW5kcyBza2lwIHRoZSBsZXZlbCBjaGVjayBhYm92ZSAocmVzLmNsYXNzIGlzIHNldAomIzQzOwkJICogYXQgYmluZCB0aW1lIGFuZCBsZXZlbHMgZHJpZnQgYWZ0ZXIpLCBzbyBhIHdhbGsgY2FuIGZvbGxvdwomIzQzOwkJICogbGF0ZXJhbCBob3BzIHdpdGhvdXQgZGVzY2VuZGluZzsgYm91bmQgdGhlbSBoZXJlLgomIzQzOwkJICovCiYjNDM7CQlpZiAoY2wtJmd0O2xldmVsICZndDs9IGhlYWQtJmd0O2xldmVsICZhbXA7JmFtcDsgZHJpZnQtLSA9PSAwKSB7CiYjNDM7CQkJcHJfd2Fybl9yYXRlbGltaXRlZCgmIzM0O2hmc2M6IGNsYXNzaWZ5IGxvb3AgZGV0ZWN0ZWQsIGRyb3BwaW5nIHBhY2tldFxuJiMzNDspOwomIzQzOwkJCXJldHVybiBOVUxMOwomIzQzOwkJfQomIzQzOwogCQkvKiBhcHBseSBpbm5lciBmaWx0ZXIgY2hhaW4gKi8KIAkJdGNmID0gcmN1X2RlcmVmZXJlbmNlX2JoKGNsLSZndDtmaWx0ZXJfbGlzdCk7CiAJCWhlYWQgPSBjbDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2hmc2MuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2hmc2MuanNvbgppbmRleCBjOThjMzM5NDI0ZDRlLi44MmQyZjhhZjE0NjBkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9oZnNjLmpzb24KJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvaGZzYy5qc29uCkBAIC0xNjksNSAmIzQzOzE2OSwzOSBAQAogICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsKICAgICAgICAgICAgICYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290JiMzNDsKICAgICAgICAgXQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7OGMzOSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7SEZTQyBjbGFzc2lmeSB3YWxrIHN0aWxsIHJlYWNoZXMgbGVhZiBhZnRlciBsYXRlcmFsIGRyaWZ0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O3FkaXNjJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDtoZnNjJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtpcCBsaW5rIHNldCBsbyB1cCYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgbG8gaGFuZGxlIDE6IHJvb3QgaGZzYyBkZWZhdWx0IDMxJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMTogY2xhc3NpZCAxOjEgaGZzYyBydCBtMiAxMDBrYml0JiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMTogY2xhc3NpZCAxOjIgaGZzYyBydCBtMiAxMDBrYml0JiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMTogY2xhc3NpZCAxOjMgaGZzYyBydCBtMiAxMDBrYml0JiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMToxIGNsYXNzaWQgMToxMCBoZnNjIHJ0IG0yIDUwa2JpdCYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6MiBjbGFzc2lkIDE6MjAgaGZzYyBydCBtMiAxMGtiaXQmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBjbGFzcyBhZGQgZGV2IGxvIHBhcmVudCAxOjMgY2xhc3NpZCAxOjMwIGhmc2MgcnQgbTIgMTBrYml0JiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMTozIGNsYXNzaWQgMTozMSBoZnNjIHJ0IG0yIDEwMGtiaXQmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiBsbyBwYXJlbnQgMTogcHJvdG9jb2wgaXAgcHJpbyAxIHUzMiBtYXRjaCB1OCAwIDAgYXQgMCBmbG93aWQgMToxJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgbG8gcGFyZW50IDE6MSBwcm90b2NvbCBpcCBwcmlvIDEgdTMyIG1hdGNoIHU4IDAgMCBhdCAwIGZsb3dpZCAxOjImIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiBsbyBwYXJlbnQgMToyIHByb3RvY29sIGlwIHByaW8gMSB1MzIgbWF0Y2ggdTggMCAwIGF0IDAgZmxvd2lkIDE6MyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGZpbHRlciBhZGQgZGV2IGxvIHBhcmVudCAxOjMgcHJvdG9jb2wgaXAgcHJpbyAxIHUzMiBtYXRjaCB1OCAwIDAgYXQgMCBmbG93aWQgMTozMSYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDtwaW5nIC1uIC1jIDEwIC1XIDEgMTI3LjAuMC4xOyBzbGVlcCAxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgLXMgY2xhc3Mgc2hvdyBkZXYgbG8mIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hQYXR0ZXJuJiMzNDs6ICYjMzQ7Y2xhc3MgaGZzYyAxOjMxIHBhcmVudCAxOjMgcnQuKlxcbi4qU2VudCBbMC05XSYjNDM7IGJ5dGVzIFsxLTldWzAtOV0qIHBrdCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaENvdW50JiMzNDs6ICYjMzQ7MSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgcWRpc2MgZGVsIGRldiBsbyBoYW5kbGUgMTogcm9vdCYjMzQ7CiYjNDM7ICAgICAgICBdCiAgICAgfQogXQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjYxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSEZTQyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIFRoZSBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIHNvIHRoYXQmIzM5O3MgdGhlIGNvbnRleHQuIFRoZSBkaWZmIGFmZmVjdHMgYG5ldC9zY2hlZC9zY2hfaGZzYy5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2hmc2MuanNvbmAuIFNvdW5kcyBsaWtlIGEgZml4IGFuZCBzb21lIGFzc29jaWF0ZWQgdGVzdGluZy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQuCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSBpcyB3aXRoaW4gYGhmc2NfY2xhc3NpZnlgIGluIGBzY2hfaGZzYy5jYC4gVGhleSYjMzk7cmUgaW50cm9kdWNpbmcgYSBgSEZTQ19DTEFTU0lGWV9NQVhfRFJJRlRgIGxpbWl0IHdpdGggYSB2YWx1ZSBvZiA4LiBUaGlzIGlzIGludGVyZXN0aW5nLiBGcm9tIHRoZSBjb2RlLCBpdCBzZWVtcyB0aGV5JiMzOTtyZSBhZGRpbmcgYSBjaGVjayBmb3IgcG90ZW50aWFsIGNsYXNzaWZpY2F0aW9uIGxvb3BzLCBwYXJ0aWN1bGFybHkgd2hlbiBmbG93IElEcyBhcmUgaW52b2x2ZWQuIEVzc2VudGlhbGx5LCB0aGV5IGFyZSBwcmV2ZW50aW5nIHBvdGVudGlhbCBpbmZpbml0ZSBsb29wcyBieSBkZWNyZW1lbnRpbmcgdGhlIGBkcmlmdGAgdmFyaWFibGUgd2hlbiB0aGUgYGxldmVsYCBvZiB0aGUgY3VycmVudCBjbGFzcyAoYGNsYCkgaXMgZ3JlYXRlciBvciBlcXVhbCB0byB0aGUgYGxldmVsYCBvZiB0aGUgaGVhZCBjbGFzcyAoYGhlYWRgKS4gSWYgYGRyaWZ0YCByZWFjaGVzIHplcm8sIGl0IGluZGljYXRlcyBhIGNsYXNzaWZpY2F0aW9uIGxvb3AgYW5kIHRoZSBwYWNrZXQgZ2V0cyBkcm9wcGVkLiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBzYWZlZ3VhcmQuIFRoZSBgcHJfd2Fybl9yYXRlbGltaXRlZGAgc3VnZ2VzdHMgdGhleSB3YW50IHRvIGF2b2lkIGZsb29kaW5nIHRoZSBsb2dzLgoKTm93LCBJJiMzOTtkIGxpa2UgdG8gcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyByZXF1aXJlbWVudCBmb3IgdGhlIGluY2x1c2lvbiBvZiBgc2NoX2hmc2MuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcHJlcmVxdWlzaXRlcyBvciBkZXBlbmRlbmNpZXMgdGhhdCB0aGlzIGNoYW5nZSBtaWdodCBiZSBpbXBhY3RpbmcuIFVzaW5nIGdyZXBwZXIgc2hvdWxkIGJlIHRoZSBxdWlja2VzdCB3YXkgdG8gZmluZCB0aGF0LiBJJiMzOTtsbCBzZWFyY2ggYG5ldC9zY2hlZC9LY29uZmlnYCB0byBnZXQgdGhhdCBpbmZvcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfU0NIX0hGU0MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9NDg9Y29uZmlnIE5FVF9TQ0hfSFRCXG4tLVxubmV0L3NjaGVkL0tjb25maWctNjEtXG5uZXQvc2NoZWQvS2NvbmZpZzo2Mjpjb25maWcgTkVUX1NDSF9IRlNDXG5uZXQvc2NoZWQvS2NvbmZpZy02My1cdHRyaXN0YXRlIFwmIzM0O0hpZXJhcmNoaWNhbCBGYWlyIFNlcnZpY2UgQ3VydmUgKEhGU0MpXCYjMzQ7XG4tLVxubmV0L3NjaGVkL01ha2VmaWxlPTM1PW9iai0kKENPTkZJR19ORVRfU0NIX0hUQilcdCYjNDM7PSBzY2hfaHRiLm9cbm5ldC9zY2hlZC9NYWtlZmlsZTozNjpvYmotJChDT05GSUdfTkVUX1NDSF9IRlNDKVx0JiM0Mzs9IHNjaF9oZnNjLm9cbm5ldC9zY2hlZC9NYWtlZmlsZS0zNy1vYmotJChDT05GSUdfTkVUX1NDSF9SRUQpXHQmIzQzOz0gc2NoX3JlZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTExNQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzLCB0YXJnZXRpbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEtjb25maWcgQ29udGV4dCoqCgpPa2F5LCBsZXQmIzM5O3Mgem9vbSBpbi4gTGluZSA2MiBvZiBgbmV0L3NjaGVkL0tjb25maWdgLi4uIHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGdyYXNwIHRoZSBpbnRlbnQgb2YgdGhlIGF1dGhvciBhbmQgdGhlIGltcGxpY2F0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNjYW4gYWJvdXQgMTAtMjAgbGluZXMgb24gZWl0aGVyIHNpZGUuIEkmIzM5O20gbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiB0aGUgc2VjdGlvbi4gV2hhdCYjMzk7cyBiZWluZyBlbmFibGVkIG9yIGRpc2FibGVkIGluIHRoZSBjb250ZXh0IG9mIHRoaXMgbGluZT8gSXMgaXQgcmVsYXRlZCB0byBhIHNwZWNpZmljIHF1ZXVlaW5nIGRpc2NpcGxpbmUsIGEgcGFydGljdWxhciBmZWF0dXJlLCBvciBtYXliZSBzb21lIGRlYnVnZ2luZyBvcHRpb24/IEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gcHJvdmlkZSB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24uIFRoaXMgd2lsbCBoZWxwIGluZm9ybSB3aGV0aGVyIHRoaXMgc2VjdGlvbiBpcyBrZXkgdG8gdGhlIG92ZXJhbGwgZnJhbWV3b3JrIG9yIHBvc3NpYmx5IGFuY2lsbGFyeSB0byBtb3JlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gSSYjMzk7bGwgbWVudGFsbHkgbWFwIG91dCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBsaW5lcyBhcm91bmQgNjIsIGFuZCB0aGVuIGNpcmNsZSBiYWNrIHRvIGFuYWx5emUgbGluZSA2MiBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTg6XHRcbiAgNTk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICA2MDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX2h0Yi5cbiAgNjE6XHRcbiAgNjI6XHRjb25maWcgTkVUX1NDSF9IRlNDXG4gIDYzOlx0XHR0cmlzdGF0ZSBcJiMzNDtIaWVyYXJjaGljYWwgRmFpciBTZXJ2aWNlIEN1cnZlIChIRlNDKVwmIzM0O1xuICA2NDpcdFx0aGVscFxuICA2NTpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgSGllcmFyY2hpY2FsIEZhaXIgU2VydmljZSBDdXJ2ZVxuICA2NjpcdFx0ICAoSEZTQykgcGFja2V0IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxuICA2NzpcdFxuICA2ODpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gIDY5Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzY2hfaGZzYy5cbiAgNzA6XHRcbiAgNzE6XHRjb25maWcgTkVUX1NDSF9QUklPXG4gIDcyOlx0XHR0cmlzdGF0ZSBcJiMzNDtNdWx0aSBCYW5kIFByaW9yaXR5IFF1ZXVlaW5nIChQUklPKVwmIzM0O1xuICA3MzpcdFx0aGVscFxuICA3NDpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhbiBuLWJhbmQgcHJpb3JpdHkgcXVldWUgcGFja2V0XG4gIDc1Olx0XHQgIHNjaGVkdWxlci5cbiAgNzY6XHRcbiAgNzc6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NjMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipOYXZpZ2F0aW5nIHRoZSBIRlNDIEtjb25maWcgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYE5FVF9TQ0hfSEZTQ2AuIFRpbWUgdG8gZGlnIGludG8gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBhc3N1bWluZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBkZWZpbml0aW9uIGFuZCBhbnkgY29uc3RyYWludHMgb24gdGhhdCBzY2hlZHVsZXIgd2lsbCBiZS4gSSBuZWVkIHRvIHNlZSBpZiBpdCYjMzk7cyBkZXBlbmRlbnQgb24gYW55IG90aGVyIGZlYXR1cmVzIG9yIGtlcm5lbCBvcHRpb25zLiBBcmUgdGhlcmUgYW55IHBhcmVudCBkZXBlbmRlbmNpZXMsIG9yIHBlcmhhcHMgY2hpbGQgZGVwZW5kZW5jaWVzPyBXaGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG11c3QgYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBmb3IgYE5FVF9TQ0hfSEZTQ2AgdG8gd29yayBjb3JyZWN0bHksIG9yIGV2ZW4gdG8gYmUgYXZhaWxhYmxlIGF0IGFsbD8gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHBsYWNlIGluIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgc2NoZWR1bGVyIGVjb3N5c3RlbS4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVHJhZmZpYyBjb250cm9sIGNvbmZpZ3VyYXRpb24uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgTkVUX1NDSEVEXG4gICA3Olx0XHRib29sIFwmIzM0O1FvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1wmIzM0O1xuICAgODpcdFx0c2VsZWN0IE5FVF9TQ0hfRklGT1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBXaGVuIHRoZSBrZXJuZWwgaGFzIHNldmVyYWwgcGFja2V0cyB0byBzZW5kIG91dCBvdmVyIGEgbmV0d29ya1xuICAxMTpcdFx0ICBkZXZpY2UsIGl0IGhhcyB0byBkZWNpZGUgd2hpY2ggb25lcyB0byBzZW5kIGZpcnN0LCB3aGljaCBvbmVzIHRvXG4gIDEyOlx0XHQgIGRlbGF5LCBhbmQgd2hpY2ggb25lcyB0byBkcm9wLiBUaGlzIGlzIHRoZSBqb2Igb2YgdGhlIHF1ZXVlaW5nXG4gIDEzOlx0XHQgIGRpc2NpcGxpbmVzLCBzZXZlcmFsIGRpZmZlcmVudCBhbGdvcml0aG1zIGZvciBob3cgdG8gZG8gdGhpc1xuICAxNDpcdFx0ICBcJiMzNDtmYWlybHlcJiMzNDsgaGF2ZSBiZWVuIHByb3Bvc2VkLlxuICAxNTpcdFxuICAxNjpcdFx0ICBJZiB5b3Ugc2F5IE4gaGVyZSwgeW91IHdpbGwgZ2V0IHRoZSBzdGFuZGFyZCBwYWNrZXQgc2NoZWR1bGVyLCB3aGljaFxuICAxNzpcdFx0ICBpcyBhIEZJRk8gKGZpcnN0IGNvbWUsIGZpcnN0IHNlcnZlZCkuIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZVxuICAxODpcdFx0ICBhYmxlIHRvIGNob29zZSBmcm9tIGFtb25nIHNldmVyYWwgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtcyB3aGljaCBjYW5cbiAgMTk6XHRcdCAgdGhlbiBiZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbmV0d29yayBkZXZpY2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3JcbiAgMjA6XHRcdCAgZXhhbXBsZSBpZiBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzIGFyZSByZWFsIHRpbWUgZGV2aWNlcyB0aGF0XG4gIDIxOlx0XHQgIG5lZWQgYSBjZXJ0YWluIG1pbmltdW0gZGF0YSBmbG93IHJhdGUsIG9yIGlmIHlvdSBuZWVkIHRvIGxpbWl0IHRoZVxuICAyMjpcdFx0ICBtYXhpbXVtIGRhdGEgZmxvdyByYXRlIGZvciB0cmFmZmljIHdoaWNoIG1hdGNoZXMgc3BlY2lmaWVkIGNyaXRlcmlhLlxuICAyMzpcdFx0ICBUaGlzIGNvZGUgaXMgY29uc2lkZXJlZCB0byBiZSBleHBlcmltZW50YWwuXG4gIDI0Olx0XG4gIDI1Olx0XHQgIFRvIGFkbWluaXN0ZXIgdGhlc2Ugc2NoZWR1bGVycywgeW91JiMzOTtsbCBuZWVkIHRoZSB1c2VyLWxldmVsIHV0aWxpdGllc1xuICAyNjpcdFx0ICBmcm9tIHRoZSBwYWNrYWdlIGlwcm91dGUyJiM0Mzt0YyBhdFxuICAyNzpcdFx0ICBcdTAwM2NodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9uZXQvaXByb3V0ZTIvXHUwMDNlLiAgVGhhdCBwYWNrYWdlXG4gIDI4Olx0XHQgIGFsc28gY29udGFpbnMgc29tZSBkb2N1bWVudGF0aW9uOyBmb3IgbW9yZSwgY2hlY2sgb3V0XG4gIDI5Olx0XHQgIFx1MDAzY2h0dHA6Ly93d3cubGludXhmb3VuZGF0aW9uLm9yZy9jb2xsYWJvcmF0ZS93b3JrZ3JvdXBzL25ldHdvcmtpbmcvaXByb3V0ZTJcdTAwM2UuXG4gIDMwOlx0XG4gIDMxOlx0XHQgIFRoaXMgUXVhbGl0eSBvZiBTZXJ2aWNlIChRb1MpIHN1cHBvcnQgd2lsbCBlbmFibGUgeW91IHRvIHVzZVxuICAzMjpcdFx0ICBEaWZmZXJlbnRpYXRlZCBTZXJ2aWNlcyAoZGlmZnNlcnYpIGFuZCBSZXNvdXJjZSBSZXNlcnZhdGlvbiBQcm90b2NvbFxuICAzMzpcdFx0ICAoUlNWUCkgb24geW91ciBMaW51eCByb3V0ZXIgaWYgeW91IGFsc28gc2F5IFkgdG8gdGhlIGNvcnJlc3BvbmRpbmdcbiAgMzQ6XHRcdCAgY2xhc3NpZmllcnMgYmVsb3cuICBEb2N1bWVudGF0aW9uIGFuZCBzb2Z0d2FyZSBpcyBhdFxuICAzNTpcdFx0ICBcdTAwM2NodHRwOi8vZGlmZnNlcnYuc291cmNlZm9yZ2UubmV0L1x1MDAzZS5cbiAgMzY6XHRcbiAgMzc6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUgYW5kIHRvIFwmIzM0Oy9wcm9jIGZpbGUgc3lzdGVtXCYjMzQ7IGJlbG93LCB5b3Ugd2lsbCBiZSBhYmxlXG4gIDM4Olx0XHQgIHRvIHJlYWQgc3RhdHVzIGluZm9ybWF0aW9uIGFib3V0IHBhY2tldCBzY2hlZHVsZXJzIGZyb20gdGhlIGZpbGVcbiAgMzk6XHRcdCAgL3Byb2MvbmV0L3BzY2hlZC5cbiAgNDA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTM0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGlnZ2luZyBpbnRvIE5ldHdvcmsgU2NoZWR1bGluZyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBORVRfU0NIRURgIGFuZCBgTkVUX1NDSF9IRlNDYCwgY2xhc3NpYyBuZXR3b3JrIHNjaGVkdWxlciBzdHVmZi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJIGJldCBgTkVUX1NDSEVEYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGEgbW9yZSBmdW5kYW1lbnRhbCBuZXR3b3JrIGZlYXR1cmUsIGxpa2VseSBgTkVUYC4gIFRpbWUgdG8gY29uZmlybSB0aGlzIGluIGBuZXQvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBORVRfU0NIRURgIGVudHJ5LiBJIG5lZWQgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuIFRoaXMgaW5pdGlhbCBhc3Nlc3NtZW50IHByb3ZpZGVzIHRoZSBiYXNlbGluZSBjb250ZXh0IG9mIG90aGVyIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb24gaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb3VyY2UgXCYjMzQ7bmV0L3NjaGVkL0tjb25maWdcJiMzNDsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9MjY5PXNvdXJjZSBcJiMzNDtuZXQvbWFjODAyMTU0L0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI3MDpzb3VyY2UgXCYjMzQ7bmV0L3NjaGVkL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnLTI3MS1zb3VyY2UgXCYjMzQ7bmV0L2RjYi9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NTYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGl2aW5nIGludG8gdGhlIEhGU0MgQ2xhc3NpZmljYXRpb24gTG9naWMqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIEhGU0Mgc2NoZWR1bGVyIGlzc3VlLiBUaGUgcGxhY2UgdG8gc3RhcnQgaXMgYWxtb3N0IGFsd2F5cyB0aGUgY2xhc3NpZmljYXRpb24gcHJvY2VzcywgYW5kIGZvciBIRlNDLCB0aGF0IG1lYW5zIHRha2luZyBhIGxvb2sgYXQgYG5ldC9zY2hlZC9zY2hfaGZzYy5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGhmc2NfY2xhc3NpZnlgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBpbiB0aGlzIGNhc2UsIHdoZXJlIHRoZSBwb3RlbnRpYWwgcHJvYmxlbSBpcyBicmV3aW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IEhGU0MgaGFuZGxlcyBwYWNrZXQgY2xhc3NpZmljYXRpb24g4oCTIGlzIGl0IHVzaW5nIHRoZSB0cmFkaXRpb25hbCBjbGFzc2lmaWVycywgb3Igc29tZXRoaW5nIHVuaXF1ZSB0byBpdHMgaGllcmFyY2hpY2FsIHN0cnVjdHVyZT8gQXJlIHdlIGRlYWxpbmcgd2l0aCBxZGlzYy1zcGVjaWZpYyBtYXRjaCBjcml0ZXJpYSwgb3IgYXJlIHRoZXkgaW50ZWdyYXRlZCB3aXRoIHRoZSBnZW5lcmljIGNsYXNzaWZpZXIgaG9va3M/IEdvdHRhIHVuZGVyc3RhbmQgaG93IGl0IGRlY2lkZXMgd2hpY2ggbGVhZiBxdWV1ZSBhIHBhY2tldCBnZXRzIHN0ZWVyZWQgaW50by4gVGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBvciB0aGUgbWlzLWNsYXNzaWZpY2F0aW9uIGxpZXMuIExldCYjMzk7cyBzZWUgaG93IHRoZSBmbG93IGlzIGhhbmRsZWQgaW4gdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBpbmVmZmljaWVudCBsb29wcywgb3IgZXZlbiBhbiBpbmNvcnJlY3QgcHJpb3JpdHkgbWFwcGluZyB0aGF0JiMzOTtzIGNhdXNpbmcgdGhlIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9oZnNjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMzA6XHRcbjExMzE6XHRcdGhmc2NfZGVzdHJveV9jbGFzcyhzY2gsIGNsKTtcbjExMzI6XHRcdHJldHVybiAwO1xuMTEzMzpcdH1cbjExMzQ6XHRcbjExMzU6XHRzdGF0aWMgc3RydWN0IGhmc2NfY2xhc3MgKlxuMTEzNjpcdGhmc2NfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsIGludCAqcWVycilcbjExMzc6XHR7XG4xMTM4Olx0XHRzdHJ1Y3QgaGZzY19zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcbjExMzk6XHRcdHN0cnVjdCBoZnNjX2NsYXNzICpoZWFkLCAqY2w7XG4xMTQwOlx0XHRzdHJ1Y3QgdGNmX3Jlc3VsdCByZXM7XG4xMTQxOlx0XHRzdHJ1Y3QgdGNmX3Byb3RvICp0Y2Y7XG4xMTQyOlx0XHR1bnNpZ25lZCBpbnQgZHJpZnQ7XG4xMTQzOlx0XHRpbnQgcmVzdWx0O1xuMTE0NDpcdFxuMTE0NTpcdFx0aWYgKFRDX0hfTUFKKHNrYi1cdTAwM2Vwcmlvcml0eSBeIHNjaC1cdTAwM2VoYW5kbGUpID09IDAgXHUwMDI2XHUwMDI2XG4xMTQ2Olx0XHQgICAgKGNsID0gaGZzY19maW5kX2NsYXNzKHNrYi1cdTAwM2Vwcmlvcml0eSwgc2NoKSkgIT0gTlVMTClcbjExNDc6XHRcdFx0aWYgKGNsLVx1MDAzZWxldmVsID09IDApXG4xMTQ4Olx0XHRcdFx0cmV0dXJuIGNsO1xuMTE0OTpcdFxuMTE1MDpcdFx0KnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7XG4xMTUxOlx0XHRoZWFkID0gXHUwMDI2cS1cdTAwM2Vyb290O1xuMTE1MjpcdFx0ZHJpZnQgPSBIRlNDX0NMQVNTSUZZX01BWF9EUklGVDtcbjExNTM6XHRcdHRjZiA9IHJjdV9kZXJlZmVyZW5jZV9iaChxLVx1MDAzZXJvb3QuZmlsdGVyX2xpc3QpO1xuMTE1NDpcdFx0d2hpbGUgKHRjZiBcdTAwMjZcdTAwMjYgKHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIHRjZiwgXHUwMDI2cmVzLCBmYWxzZSkpIFx1MDAzZT0gMCkge1xuMTE1NTpcdCNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcbjExNTY6XHRcdFx0c3dpdGNoIChyZXN1bHQpIHtcbjExNTc6XHRcdFx0Y2FzZSBUQ19BQ1RfUVVFVUVEOlxuMTE1ODpcdFx0XHRjYXNlIFRDX0FDVF9TVE9MRU46XG4xMTU5Olx0XHRcdGNhc2UgVENfQUNUX1RSQVA6XG4xMTYwOlx0XHRcdFx0KnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9TVE9MRU47XG4xMTYxOlx0XHRcdFx0ZmFsbHRocm91Z2g7XG4xMTYyOlx0XHRcdGNhc2UgVENfQUNUX1NIT1Q6XG4xMTYzOlx0XHRcdFx0cmV0dXJuIE5VTEw7XG4xMTY0Olx0XHRcdH1cbjExNjU6XHQjZW5kaWZcbjExNjY6XHRcdFx0Y2wgPSAoc3RydWN0IGhmc2NfY2xhc3MgKilyZXMuY2xhc3M7XG4xMTY3Olx0XHRcdGlmICghY2wpIHtcbjExNjg6XHRcdFx0XHRjbCA9IGhmc2NfZmluZF9jbGFzcyhyZXMuY2xhc3NpZCwgc2NoKTtcbjExNjk6XHRcdFx0XHRpZiAoIWNsKVxuMTE3MDpcdFx0XHRcdFx0YnJlYWs7IC8qIGZpbHRlciBzZWxlY3RlZCBpbnZhbGlkIGNsYXNzaWQgKi9cbjExNzE6XHRcdFx0XHRpZiAoY2wtXHUwMDNlbGV2ZWwgXHUwMDNlPSBoZWFkLVx1MDAzZWxldmVsKVxuMTE3MjpcdFx0XHRcdFx0YnJlYWs7IC8qIGZpbHRlciBtYXkgb25seSBwb2ludCBkb3dud2FyZHMgKi9cbjExNzM6XHRcdFx0fVxuMTE3NDpcdFxuMTE3NTpcdFx0XHRpZiAoY2wtXHUwMDNlbGV2ZWwgPT0gMClcbjExNzY6XHRcdFx0XHRyZXR1cm4gY2w7IC8qIGhpdCBsZWFmIGNsYXNzICovXG4xMTc3Olx0XG4xMTc4Olx0XHRcdC8qXG4xMTc5Olx0XHRcdCAqIGZsb3dpZCBiaW5kcyBza2lwIHRoZSBsZXZlbCBjaGVjayBhYm92ZSAocmVzLmNsYXNzIGlzIHNldFxuMTE4MDpcdFx0XHQgKiBhdCBiaW5kIHRpbWUgYW5kIGxldmVscyBkcmlmdCBhZnRlciksIHNvIGEgd2FsayBjYW4gZm9sbG93XG4xMTgxOlx0XHRcdCAqIGxhdGVyYWwgaG9wcyB3aXRob3V0IGRlc2NlbmRpbmc7IGJvdW5kIHRoZW0gaGVyZS5cbjExODI6XHRcdFx0ICovXG4xMTgzOlx0XHRcdGlmIChjbC1cdTAwM2VsZXZlbCBcdTAwM2U9IGhlYWQtXHUwMDNlbGV2ZWwgXHUwMDI2XHUwMDI2IGRyaWZ0LS0gPT0gMCkge1xuMTE4NDpcdFx0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7aGZzYzogY2xhc3NpZnkgbG9vcCBkZXRlY3RlZCwgZHJvcHBpbmcgcGFja2V0XFxuXCYjMzQ7KTtcbjExODU6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbjExODY6XHRcdFx0fVxuMTE4NzpcdFxuMTE4ODpcdFx0XHQvKiBhcHBseSBpbm5lciBmaWx0ZXIgY2hhaW4gKi9cbjExODk6XHRcdFx0dGNmID0gcmN1X2RlcmVmZXJlbmNlX2JoKGNsLVx1MDAzZWZpbHRlcl9saXN0KTtcbjExOTA6XHRcdFx0aGVhZCA9IGNsO1xuMTE5MTpcdFx0fVxuMTE5MjpcdFxuMTE5MzpcdFx0LyogY2xhc3NpZmljYXRpb24gZmFpbGVkLCB0cnkgZGVmYXVsdCBjbGFzcyAqL1xuMTE5NDpcdFx0Y2wgPSBoZnNjX2ZpbmRfY2xhc3MoVENfSF9NQUtFKFRDX0hfTUFKKHNjaC1cdTAwM2VoYW5kbGUpLFxuMTE5NTpcdFx0XHRcdFx0ICAgICAgIFJFQURfT05DRShxLVx1MDAzZWRlZmNscykpLCBzY2gpO1xuMTE5NjpcdFx0aWYgKGNsID09IE5VTEwgfHwgY2wtXHUwMDNlbGV2ZWwgXHUwMDNlIDApXG4xMTk3Olx0XHRcdHJldHVybiBOVUxMO1xuMTE5ODpcdFxuMTE5OTpcdFx0cmV0dXJuIGNsO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjM1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBoZnNjX2NsYXNzaWZ5YCBDYWxsc2l0ZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doZXJlICpleGFjdGx5KiBpcyBgaGZzY19jbGFzc2lmeWAgYmVpbmcgaW52b2tlZD8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gS25vd2luZyB0aGUgY2FsbCBoaWVyYXJjaHkgaXMgZnVuZGFtZW50YWwgdG8gY29tcHJlaGVuZGluZyBpdHMgcm9sZSwgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgc3lzdGVtLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSB2YXJpb3VzIG1vZHVsZXMgb3IgY29tcG9uZW50cyB0aGF0IG1pZ2h0IGJlIGxldmVyYWdpbmcgdGhpcyBmdW5jdGlvbiBhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIGl0cyBleGVjdXRpb24uIEkgbmVlZCB0byB0cmFjZSBpdHMgdXRpbGl6YXRpb24gdG8gYnVpbGQgYSBzb2xpZCBwaWN0dXJlIG9mIGl0cyBpbnRlZ3JhdGlvbiBhbmQgYmVoYXZpb3IuIEFyZSB3ZSBsb29raW5nIGF0IGl0IGFzIGEgdG9wLWxldmVsIGZ1bmN0aW9uLCBvciBpcyBpdCBidXJpZWQgZGVlcCB3aXRoaW4gYSBjYWxsIHN0YWNrPyBUaGUgY2FsbGluZyBjb250ZXh0IGlzIGdvaW5nIHRvIGRyaXZlIGhvdyBJIGludGVycHJldCBpdHMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hmc2NfY2xhc3NpZnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9oZnNjLmM9MTEzNT1zdGF0aWMgc3RydWN0IGhmc2NfY2xhc3MgKlxubmV0L3NjaGVkL3NjaF9oZnNjLmM6MTEzNjpoZnNjX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgKnFlcnIpXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMTM3LXtcbi0tXG5uZXQvc2NoZWQvc2NoX2hmc2MuYz0xNTU2PWhmc2NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlKVxuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTE1NjItXG5uZXQvc2NoZWQvc2NoX2hmc2MuYzoxNTYzOlx0Y2wgPSBoZnNjX2NsYXNzaWZ5KHNrYiwgc2NoLCBcdTAwMjZlcnIpO1xubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTU2NC1cdGlmIChjbCA9PSBOVUxMKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NTcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqSEZTQyBDb2RlIFdhbGt0aHJvdWdoOiBJbml0aWFsIEV4cGxvcmF0aW9uKioKCk9rYXksIHNvIGBoZnNjX2NsYXNzaWZ5YCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgZGVmaW5lZCB3aXRoaW4gYG5ldC9zY2hlZC9zY2hfaGZzYy5jYC4gSW50ZXJlc3RpbmcuIFRoYXQgbWVhbnMgaXQmIzM5O3Mgb25seSBjYWxsZWQgaW50ZXJuYWxseSB3aXRoaW4gdGhhdCBmaWxlLCBzcGVjaWZpY2FsbHkgYnkgYGhmc2NfZW5xdWV1ZWAuIEFscmlnaHQsIG5vdyBJIHdhbnQgdG8gZ2V0IGEgYnJvYWRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCBmaXRzIGludG8gdGhlIHdob2xlIHBpY3R1cmUuIEkgbmVlZCB0byBzZWUgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW4gYHNjaF9oZnNjLmNgIHRoYXQgYXJlICpyZWxhdGVkKiB0byBgaGZzY19jbGFzc2lmeWAsIHBlcmhhcHMgdGhyb3VnaCBiZWluZyBleHBvcnRlZCBvciBvdGhlcndpc2UgaW50ZXJhY3RpbmcuIExldCYjMzk7cyBzZWUgaG93IEkgY2FuIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIHRoaXMgcGFydCBvZiB0aGUga2VybmVsLiBOZXh0LCBsZXQmIzM5O3Mgem9vbSBpbiBhIGJpdCBhbmQgdGhvcm91Z2hseSBleGFtaW5lIGBoZnNjX2VucXVldWVgLiBJJiMzOTtsbCBhbHNvIG5lZWQgdG8gcmV2aXNpdCB0aGUgUWRpc2Mgb3BlcmF0aW9ucyBmb3IgSEZTQyB0byBzZWUgaG93IGl0IGFsbCBjb21lcyB0b2dldGhlci4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfaGZzYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTU1Olx0c3RhdGljIGludFxuMTU1NjpcdGhmc2NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlKVxuMTU1NzpcdHtcbjE1NTg6XHRcdHVuc2lnbmVkIGludCBsZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7XG4xNTU5Olx0XHRzdHJ1Y3QgaGZzY19jbGFzcyAqY2w7XG4xNTYwOlx0XHRpbnQgZXJyO1xuMTU2MTpcdFx0Ym9vbCBmaXJzdDtcbjE1NjI6XHRcbjE1NjM6XHRcdGNsID0gaGZzY19jbGFzc2lmeShza2IsIHNjaCwgXHUwMDI2ZXJyKTtcbjE1NjQ6XHRcdGlmIChjbCA9PSBOVUxMKSB7XG4xNTY1Olx0XHRcdGlmIChlcnIgXHUwMDI2IF9fTkVUX1hNSVRfQllQQVNTKVxuMTU2NjpcdFx0XHRcdHFkaXNjX3FzdGF0c19kcm9wKHNjaCk7XG4xNTY3Olx0XHRcdF9fcWRpc2NfZHJvcChza2IsIHRvX2ZyZWUpO1xuMTU2ODpcdFx0XHRyZXR1cm4gZXJyO1xuMTU2OTpcdFx0fVxuMTU3MDpcdFxuMTU3MTpcdFx0Zmlyc3QgPSAhY2wtXHUwMDNlcWRpc2MtXHUwMDNlcS5xbGVuO1xuMTU3MjpcdFx0ZXJyID0gcWRpc2NfZW5xdWV1ZShza2IsIGNsLVx1MDAzZXFkaXNjLCB0b19mcmVlKTtcbjE1NzM6XHRcdGlmICh1bmxpa2VseShlcnIgIT0gTkVUX1hNSVRfU1VDQ0VTUykpIHtcbjE1NzQ6XHRcdFx0aWYgKG5ldF94bWl0X2Ryb3BfY291bnQoZXJyKSkge1xuMTU3NTpcdFx0XHRcdGNsLVx1MDAzZXFzdGF0cy5kcm9wcyYjNDM7JiM0Mzs7XG4xNTc2Olx0XHRcdFx0cWRpc2NfcXN0YXRzX2Ryb3Aoc2NoKTtcbjE1Nzc6XHRcdFx0fVxuMTU3ODpcdFx0XHRyZXR1cm4gZXJyO1xuMTU3OTpcdFx0fVxuMTU4MDpcdFxuMTU4MTpcdFx0cXN0YXRzX2JhY2tsb2dfYWRkKHNjaCwgbGVuKTtcbjE1ODI6XHRcdHFkaXNjX3FsZW5faW5jKHNjaCk7XG4xNTgzOlx0XG4xNTg0Olx0XHRpZiAoZmlyc3QgXHUwMDI2XHUwMDI2ICFjbF9pbl9lbF9vcl92dHRyZWUoY2wpKSB7XG4xNTg1Olx0XHRcdGlmIChjbC1cdTAwM2VjbF9mbGFncyBcdTAwMjYgSEZTQ19SU0MpXG4xNTg2Olx0XHRcdFx0aW5pdF9lZChjbCwgbGVuKTtcbjE1ODc6XHRcdFx0aWYgKGNsLVx1MDAzZWNsX2ZsYWdzIFx1MDAyNiBIRlNDX0ZTQylcbjE1ODg6XHRcdFx0XHRpbml0X3ZmKGNsLCBsZW4pO1xuMTU4OTpcdFx0XHQvKlxuMTU5MDpcdFx0XHQgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBwYWNrZXQsIGlzb2xhdGUgdGhlIGhlYWQgc28gYW4gZXZlbnR1YWxcbjE1OTE6XHRcdFx0ICogaGVhZCBkcm9wIGJlZm9yZSB0aGUgZmlyc3QgZGVxdWV1ZSBvcGVyYXRpb24gaGFzIG5vIGNoYW5jZVxuMTU5MjpcdFx0XHQgKiB0byBpbnZhbGlkYXRlIHRoZSBkZWFkbGluZS5cbjE1OTM6XHRcdFx0ICovXG4xNTk0Olx0XHRcdGlmIChjbC1cdTAwM2VjbF9mbGFncyBcdTAwMjYgSEZTQ19SU0MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MDQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgY29kZSwgcHJlc2VudGVkIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYHNjaF9oZnNjLmNgIC0gUWRpc2MgYW5kIENsYXNzIE9wZXJhdGlvbnMqKgoKUmlnaHQsIHRpbWUgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IGhvdyB0aGUgSGlnaCBGaWRlbGl0eSBTY2hlZHVsaW5nIChIRlNDKSBxZGlzYyBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRob3NlIGBxZGlzY19vcHNgIGFuZCBgY2xhc3Nfb3BzYCBzdHJ1Y3R1cmVzIGRlZmluZWQgd2l0aGluIGBzY2hfaGZzYy5jYC4gVGhlc2UgYXJlIHRoZSBoZWFydCBvZiBob3cgSEZTQyBhY3R1YWxseSAqd29ya3MqIGF0IHRoZSBrZXJuZWwgbGV2ZWwuIFRoZXkmIzM5O2xsIGRpY3RhdGUgZXZlcnl0aGluZyDigJMgZnJvbSBob3cgbmV3IEhGU0MgaW5zdGFuY2VzIGFyZSBjcmVhdGVkIGFuZCBjb25maWd1cmVkICh0aGUgYHFkaXNjX29wc2ApLCB0byBob3cgY2xhc3NlcyBhcmUgYWRkZWQsIHJlbW92ZWQsIHNjaGVkdWxlZCwgYW5kIG1ldHJpY3MgYXJlIGdhdGhlcmVkICh0aGF0JiMzOTtzIHRoZSBgY2xhc3Nfb3BzYCkuIEl0JiMzOTtzIGFsbCBhYm91dCB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBvcHMgaG9vayBpbnRvIHRoZSBjb3JlIHRyYWZmaWMgY29udHJvbCBmcmFtZXdvcmsuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IGRpc3NlY3QgZWFjaCBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiB0aG9zZSBzdHJ1Y3R1cmVzLCBtYWtpbmcgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIEhGU0Mgc2NoZWR1bGluZyBiZWhhdmlvciB0aGV5IGVuY2Fwc3VsYXRlLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBRZGlzY19vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2hmc2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2hmc2MuYz0xNjc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzIGhmc2NfY2xhc3Nfb3BzID0ge1xuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTE2OTAtXG5uZXQvc2NoZWQvc2NoX2hmc2MuYzoxNjkxOnN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIGhmc2NfcWRpc2Nfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xNjkyLVx0LmlkXHRcdD0gXCYjMzQ7aGZzY1wmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMDgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipQZWVyaW5nIGludG8gdGhlIENvcmU6IENsYXNzIE9wcyBhbmQgUWRpc2MgT3BzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyB0cmFmZmljIHNoYXBpbmcgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGRlZmluaXRpb25zIG9mIHRoZSBjbGFzcyBvcGVyYXRpb25zIChjbGFzcyBvcHMpIGFuZCBxdWV1ZWluZyBkaXNjaXBsaW5lIG9wZXJhdGlvbnMgKHFkaXNjIG9wcykuIFRoZXNlIGFyZSB0aGUgYmVkcm9jaywgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiB0aGUgZW50aXJlIG1lY2hhbmlzbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBtZXRob2RzIHRoZXkgZXhwb3NlLCB3aGF0IGRhdGEgc3RydWN0dXJlcyB0aGV5IGludGVyYWN0IHdpdGgsIGFuZCBob3cgdGhleSBkZWZpbmUgdGhlIGJlaGF2aW9yIG9mIHRoZSB0cmFmZmljIGNvbnRyb2wgc3lzdGVtLiBFc3NlbnRpYWxseSwgSSB3YW50IHRvIHNlZSB3aGF0IGtub2JzIGFyZSBhdmFpbGFibGUgYW5kIGhvdyB0aG9zZSBrbm9icyBhcmUgZGVmaW5lZCB0byBhY3R1YWxseSBtYW5pcHVsYXRlIHRoZSBuZXR3b3JrIHRyYWZmaWMuIFVuZGVyc3RhbmRpbmcgdGhlaXIgZnVuY3Rpb24gYXQgdGhlIGxvd2VzdCBsZXZlbCB3aWxsIGlsbHVtaW5hdGUgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgc3lzdGVtIGFzIGEgd2hvbGUuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBkaXNzZWN0IHRoZXNlIGRlZmluaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfaGZzYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjcwOlx0XHRxZGlzY19xc3RhdHNfYmFja2xvZ19kZWMoc2NoLCBza2IpO1xuMTY3MTpcdFx0cWRpc2NfcWxlbl9kZWMoc2NoKTtcbjE2NzI6XHRcbjE2NzM6XHRcdHJldHVybiBza2I7XG4xNjc0Olx0fVxuMTY3NTpcdFxuMTY3NjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzIGhmc2NfY2xhc3Nfb3BzID0ge1xuMTY3NzpcdFx0LmNoYW5nZVx0XHQ9IGhmc2NfY2hhbmdlX2NsYXNzLFxuMTY3ODpcdFx0LmRlbGV0ZVx0XHQ9IGhmc2NfZGVsZXRlX2NsYXNzLFxuMTY3OTpcdFx0LmdyYWZ0XHRcdD0gaGZzY19ncmFmdF9jbGFzcyxcbjE2ODA6XHRcdC5sZWFmXHRcdD0gaGZzY19jbGFzc19sZWFmLFxuMTY4MTpcdFx0LnFsZW5fbm90aWZ5XHQ9IGhmc2NfcWxlbl9ub3RpZnksXG4xNjgyOlx0XHQuZmluZFx0XHQ9IGhmc2Nfc2VhcmNoX2NsYXNzLFxuMTY4MzpcdFx0LmJpbmRfdGNmXHQ9IGhmc2NfYmluZF90Y2YsXG4xNjg0Olx0XHQudW5iaW5kX3RjZlx0PSBoZnNjX3VuYmluZF90Y2YsXG4xNjg1Olx0XHQudGNmX2Jsb2NrXHQ9IGhmc2NfdGNmX2Jsb2NrLFxuMTY4NjpcdFx0LmR1bXBcdFx0PSBoZnNjX2R1bXBfY2xhc3MsXG4xNjg3Olx0XHQuZHVtcF9zdGF0c1x0PSBoZnNjX2R1bXBfY2xhc3Nfc3RhdHMsXG4xNjg4Olx0XHQud2Fsa1x0XHQ9IGhmc2Nfd2Fsa1xuMTY4OTpcdH07XG4xNjkwOlx0XG4xNjkxOlx0c3RhdGljIHN0cnVjdCBRZGlzY19vcHMgaGZzY19xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcbjE2OTI6XHRcdC5pZFx0XHQ9IFwmIzM0O2hmc2NcJiMzNDssXG4xNjkzOlx0XHQuaW5pdFx0XHQ9IGhmc2NfaW5pdF9xZGlzYyxcbjE2OTQ6XHRcdC5jaGFuZ2VcdFx0PSBoZnNjX2NoYW5nZV9xZGlzYyxcbjE2OTU6XHRcdC5yZXNldFx0XHQ9IGhmc2NfcmVzZXRfcWRpc2MsXG4xNjk2Olx0XHQuZGVzdHJveVx0PSBoZnNjX2Rlc3Ryb3lfcWRpc2MsXG4xNjk3Olx0XHQuZHVtcFx0XHQ9IGhmc2NfZHVtcF9xZGlzYyxcbjE2OTg6XHRcdC5lbnF1ZXVlXHQ9IGhmc2NfZW5xdWV1ZSxcbjE2OTk6XHRcdC5kZXF1ZXVlXHQ9IGhmc2NfZGVxdWV1ZSxcbjE3MDA6XHRcdC5wZWVrXHRcdD0gcWRpc2NfcGVla19kZXF1ZXVlZCxcbjE3MDE6XHRcdC5jbF9vcHNcdFx0PSBcdTAwMjZoZnNjX2NsYXNzX29wcyxcbjE3MDI6XHRcdC5wcml2X3NpemVcdD0gc2l6ZW9mKHN0cnVjdCBoZnNjX3NjaGVkKSxcbjE3MDM6XHRcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFXG4xNzA0Olx0fTtcbjE3MDU6XHRNT0RVTEVfQUxJQVNfTkVUX1NDSChcJiMzNDtoZnNjXCYjMzQ7KTtcbjE3MDY6XHRcbjE3MDc6XHRzdGF0aWMgaW50IF9faW5pdFxuMTcwODpcdGhmc2NfaW5pdCh2b2lkKVxuMTcwOTpcdHtcbjE3MTA6XHRcdHJldHVybiByZWdpc3Rlcl9xZGlzYyhcdTAwMjZoZnNjX3FkaXNjX29wcyk7XG4xNzExOlx0fVxuMTcxMjpcdFxuMTcxMzpcdHN0YXRpYyB2b2lkIF9fZXhpdFxuMTcxNDpcdGhmc2NfY2xlYW51cCh2b2lkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk4NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3ltYm9sIENvdmVyYWdlIGZvciBIRlNDIFNjaGVkdWxlciBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0byBiZXN0IGhhbmRsZSBzeW1ib2wgY292ZXJhZ2UgZm9yIHRoZSBIRlNDIHNjaGVkdWxlciwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBoZnNjX2NsYXNzaWZ5YC4gIFJpZ2h0LCBgaGZzY19jbGFzc2lmeWAgaXMgKnN0YXRpYyouIE15IGluaXRpYWwgdGhvdWdodCB3YXM6IGNhbiB0aGF0IGJlIGEgZm9jdXMgc3ltYm9sPwoKSG9sZCBvbi4uLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhlIG51YW5jZXMgb2YgdGhlIExpbnV4IGtlcm5lbCBzeW1ib2wgdGFibGVzLiBTdGF0aWMgZnVuY3Rpb25zIGluIGAuY2AgZmlsZXMgKm9mdGVuKiBoYXZlIHN5bWJvbHMsIGxpa2UgYGhmc2NfY2xhc3NpZnlgIG9yIHNvbWV0aGluZyBsaWtlIGBoZnNjX2NsYXNzaWZ5LmlzcmEuMGAuICBTbywgbGV0JiMzOTtzIG5haWwgZG93biB3aGV0aGVyIGBoZnNjX2NsYXNzaWZ5YCBpdHNlbGYgaXMgdXNhYmxlLCBvciBpZiBJIG5lZWQgdG8gbG9vayBhdCBhbHRlcm5hdGl2ZXMgbGlrZSBgaGZzY19lbnF1ZXVlYCwgb3IgYm90aC4KCkFoLCBTZWN0aW9uIDQgb2YgdGhlIGRvY3VtZW50YXRpb24gaXMgY3J1Y2lhbCBoZXJlLiBUaGUgZG9jcyBjbGVhcmx5IGV4cGxhaW4gdGhlIGlzc3VlIG9mIGlubGluZWQgKnN0YXRpYyogZnVuY3Rpb25zIGluIGhlYWRlcnM6IHRob3NlIGRvbiYjMzk7dCBnZXQgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gQnV0LCBgaGZzY19jbGFzc2lmeWAgaXNuJiMzOTt0IGluIGEgaGVhZGVyOyBpdCYjMzk7cyBgc3RhdGljIHN0cnVjdCBoZnNjX2NsYXNzICogaGZzY19jbGFzc2lmeSguLi4pYCBpbiBgc2NoX2hmc2MuY2AuICBHb29kLgoKTm93LCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciBgaGZzY19jbGFzc2lmeWAgaXMgKmlubGluZWQqIGludG8gYGhmc2NfZW5xdWV1ZWAuICBJdCYjMzk7cyBvbmx5IGNhbGxlZCBvbmNlIGluIGBzY2hfaGZzYy5jYCwgYXQgbGluZSAxNTYzLCBzbyBkZXBlbmRpbmcgb24gY29tcGlsZXIgb3B0aW1pemF0aW9uLCB0aGUgY29tcGlsZXIgKm1pZ2h0KiBpbmxpbmUgYGhmc2NfY2xhc3NpZnlgIGludG8gYGhmc2NfZW5xdWV1ZWAuCgpTbywgaXQmIzM5O3MgcHJvYmFibHkgYmVzdCB0byBsaXN0ICpib3RoKiBgaGZzY19jbGFzc2lmeWAgYW5kIGBoZnNjX2VucXVldWVgIChhbmQgbWF5YmUgZXZlbiBgaGZzY19iaW5kX3RjZmAgYW5kIGBoZnNjX2NoYW5nZV9jbGFzc2ApIGFzIHBvdGVudGlhbCBmb2N1cyBzeW1ib2xzLiAgVGhhdCBnaXZlcyBtZSBnb29kIGNvdmVyYWdlLCByZWdhcmRsZXNzIG9mIHRoZSBjb21waWxlciYjMzk7cyBpbmxpbmluZyBkZWNpc2lvbnMuCgpCdXQgSSByZWFsbHkgc2hvdWxkIHRha2UgYSBzdGVwIGJhY2sgYmVmb3JlIG1ha2luZyBhIGRlY2lzaW9uLiAgTGV0JiMzOTtzIG5vdCBqdW1wIHRoZSBndW4gYW5kIGJsaW5kbHkgZGVmaW5lIHRoZXNlIHN5bWJvbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY29kZSBjaGFuZ2VkIGluIHRoZSBmaXJzdCBwbGFjZS4gSSBzaG91bGQgY2hlY2sgdGhlIGdpdCBsb2cgb2YgdGhpcyBjb21taXQsIG9yIHRoZSBzdXJyb3VuZGluZyBjb21taXRzLCB0byBnZXQgdGhlIGNvbnRleHQgb2YgdGhlIHBhdGNoLiBUaGF0IHdpbGwgY2xhcmlmeSB0aGUgaW1wYWN0IG9mIHRoZXNlIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SEZTQ19DTEFTU0lGWV9NQVhfRFJJRlQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9oZnNjLmM9MzUyPWNmdHJlZV91cGRhdGUoc3RydWN0IGhmc2NfY2xhc3MgKmNsKVxuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTM5Mi0gKi9cbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjM5MzojZGVmaW5lXHRIRlNDX0NMQVNTSUZZX01BWF9EUklGVFx0OFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMzk0LVxuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jPTExMzY9aGZzY19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKVxuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTExNTEtXHRoZWFkID0gXHUwMDI2cS1cdTAwM2Vyb290O1xubmV0L3NjaGVkL3NjaF9oZnNjLmM6MTE1MjpcdGRyaWZ0ID0gSEZTQ19DTEFTU0lGWV9NQVhfRFJJRlQ7XG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMTUzLVx0dGNmID0gcmN1X2RlcmVmZXJlbmNlX2JoKHEtXHUwMDNlcm9vdC5maWx0ZXJfbGlzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTA0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBDbGFzc2lmaWNhdGlvbiBMb29wIGluIEhGU0MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgc3BlY2lmaWMgcHJvYmxlbSBiZWluZyBhZGRyZXNzZWQuIEkgc2VlIHRoaXMgc25pcHBldCBmcm9tIGBzY2hfaGZzYy5jYCBhbmQgaW1tZWRpYXRlbHkgemVybyBpbiBvbiB0aGUgY29yZSBpc3N1ZTogYSBwb3NzaWJsZSBjbGFzc2lmaWNhdGlvbiBsb29wIHdpdGhpbiB0aGUgSEZTQyBzY2hlZHVsZXIuIFRoZSBjb2RlIHN1Z2dlc3RzIGEgY2hlY2sgcmVsYXRlZCB0byBgZmxvd2lkYCBiaW5kaW5ncywgYnlwYXNzaW5nIGEgbGV2ZWwgY2hlY2ssIGFuZCB0aGVuIHdoYXQgYXBwZWFycyB0byBiZSBhIG1lY2hhbmlzbSB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3AuIFRoZSBgZHJpZnQtLSA9PSAwYCBjaGVjayB3aXRoaW4gdGhhdCBgaWZgIHN0YXRlbWVudCBpcyB3aGF0JiMzOTtzIGNhdGNoaW5nIG15IGV5ZSBhcyBhIHBvdGVudGlhbCBsb29wIGJyZWFrZXIsIGJ1dCB0aGUgYHByX3dhcm5fcmF0ZWxpbWl0ZWRgIG91dHB1dCBzaG93cyB0aGF0IHNvbWV0aGluZyBjb3VsZCBoYXZlIGJlZW4gZGV0ZWN0ZWQuCgpCdXQgdGhlIGNvbW1lbnQhIEl04oCZcyB0aGUgY2x1ZSBJJiMzOTttIGxvb2tpbmcgZm9yLiAmIzM0O01pcnJvcmluZyBodGImIzM5O3MgVENfSFRCX01BWERFUFRIIGhlYWRyb29tLiYjMzQ7IFRoZSBtZW50aW9uIG9mIGBodGJgIGlzIGNyaXRpY2FsIGhlcmU7IGl0IGltcGxpZXMgYSBjb21wYXJpc29uIG9yIHBvdGVudGlhbCBib3Jyb3dpbmcgb2YgY29uY2VwdHMgZnJvbSB0aGUgSGllcmFyY2hpY2FsIFRva2VuIEJ1Y2tldCBzY2hlZHVsZXIuIFNpbmNlIEhGU0MgaXMgcmVsYXRlZCwgbGV0JiMzOTtzIHNlZSBob3cgYGh0YmAgaGFuZGxlcyB0aGluZ3MhIEkgbmVlZCB0byBjb25zdWx0IHRoZSBgbmV0L3NjaGVkL3NjaF9odGIuY2AgY29kZSB0byB1bmRlcnN0YW5kIGl0cyBkZXNpZ24gYW5kIGFueSBzdHJhdGVnaWVzIGl0IGVtcGxveXMgdG8gcHJldmVudCBzaW1pbGFyIGlzc3Vlcy4gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwOyB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIHByaW5jaXBsZXMgYW5kIHBvdGVudGlhbCBzaW1pbGFyaXRpZXMgb3IgZGlmZmVyZW5jZXMgaW4gaG93IGBodGJgIGFwcHJvYWNoZXMgdHJhZmZpYyBjbGFzc2lmaWNhdGlvbiBhbmQgbG9vcCBwcmV2ZW50aW9uIGNvdWxkIGlsbHVtaW5hdGUgdGhlIGlzc3VlIGluIEhGU0MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1RDX0hUQl9NQVhERVBUSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2hmc2MuYz0zNTI9Y2Z0cmVlX3VwZGF0ZShzdHJ1Y3QgaGZzY19jbGFzcyAqY2wpXG4tLVxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMzkwLSAqIGJvdW5kIG9uIGNvbnNlY3V0aXZlIG5vbi1kZXNjZW5kaW5nIChsYXRlcmFsIC8gdXB3YXJkKSBob3BzIGluIGFcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjM5MTogKiBjbGFzc2lmeSB3YWxrLCBtaXJyb3JpbmcgaHRiJiMzOTtzIFRDX0hUQl9NQVhERVBUSCBoZWFkcm9vbVxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMzkyLSAqL1xuLS1cbm5ldC9zY2hlZC9zY2hfaHRiLmMtNDktICAgIEVhY2ggY2xhc3MgaXMgYXNzaWduZWQgbGV2ZWwuIExlYWYgaGFzIEFMV0FZUyBsZXZlbCAwIGFuZCByb290XG5uZXQvc2NoZWQvc2NoX2h0Yi5jOjUwOiAgICBjbGFzc2VzIGhhdmUgbGV2ZWwgVENfSFRCX01BWERFUFRILTEuIEludGVyaW9yIG5vZGVzIGhhcyBsZXZlbFxubmV0L3NjaGVkL3NjaF9odGIuYy01MS0gICAgb25lIGxlc3MgdGhhbiB0aGVpciBwYXJlbnQuXG4tLVxubmV0L3NjaGVkL3NjaF9odGIuYz05ND1zdHJ1Y3QgaHRiX2NsYXNzIHtcbi0tXG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTEyNS1cdFx0c3RydWN0IGh0Yl9jbGFzc19sZWFmIHtcbm5ldC9zY2hlZC9zY2hfaHRiLmM6MTI2Olx0XHRcdGludFx0XHRkZWZpY2l0W1RDX0hUQl9NQVhERVBUSF07XG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTEyNy1cdFx0XHRzdHJ1Y3QgUWRpc2NcdCpxO1xuLS1cbm5ldC9zY2hlZC9zY2hfaHRiLmM9MTUwPXN0cnVjdCBodGJfc2NoZWQge1xuLS1cbm5ldC9zY2hlZC9zY2hfaHRiLmMtMTczLVx0LyogdGltZSBvZiBuZWFyZXN0IGV2ZW50IHBlciBsZXZlbCAocm93KSAqL1xubmV0L3NjaGVkL3NjaF9odGIuYzoxNzQ6XHRzNjRcdFx0XHRuZWFyX2V2X2NhY2hlW1RDX0hUQl9NQVhERVBUSF07XG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTE3NS1cbm5ldC9zY2hlZC9zY2hfaHRiLmM6MTc2Olx0aW50XHRcdFx0cm93X21hc2tbVENfSFRCX01BWERFUFRIXTtcbm5ldC9zY2hlZC9zY2hfaHRiLmMtMTc3LVxubmV0L3NjaGVkL3NjaF9odGIuYzoxNzg6XHRzdHJ1Y3QgaHRiX2xldmVsXHRobGV2ZWxbVENfSFRCX01BWERFUFRIXTtcbm5ldC9zY2hlZC9zY2hfaHRiLmMtMTc5LVxuLS1cbm5ldC9zY2hlZC9zY2hfaHRiLmM9MjIwPXN0YXRpYyBzdHJ1Y3QgaHRiX2NsYXNzICpodGJfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG4tLVxubmV0L3NjaGVkL3NjaF9odGIuYy0yNjktXG5uZXQvc2NoZWQvc2NoX2h0Yi5jOjI3MDpcdFx0aWYgKCYjNDM7JiM0Mztob3BzIFx1MDAzZSBUQ19IVEJfTUFYREVQVEgpIHtcbm5ldC9zY2hlZC9zY2hfaHRiLmMtMjcxLVx0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7aHRiOiBjbGFzc2lmeSBsb29wIGRldGVjdGVkLCBkcm9wcGluZyBwYWNrZXRcXG5cJiMzNDspO1xuLS1cbm5ldC9zY2hlZC9zY2hfaHRiLmM9ODIwPXN0YXRpYyBzdHJ1Y3QgaHRiX2NsYXNzICpodGJfbG9va3VwX2xlYWYoc3RydWN0IGh0Yl9wcmlvICpocHJpbywgY29uc3QgaW50IHByaW8pXG4tLVxubmV0L3NjaGVkL3NjaF9odGIuYy04MjYtXHRcdHUzMiAqcGlkO1xubmV0L3NjaGVkL3NjaF9odGIuYzo4Mjc6XHR9IHN0a1tUQ19IVEJfTUFYREVQVEhdLCAqc3AgPSBzdGs7XG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTgyOC1cbi0tXG5uZXQvc2NoZWQvc2NoX2h0Yi5jPTk0NT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmh0Yl9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKVxuLS1cbm5ldC9zY2hlZC9zY2hfaHRiLmMtOTY5LVxubmV0L3NjaGVkL3NjaF9odGIuYzo5NzA6XHRmb3IgKGxldmVsID0gMDsgbGV2ZWwgXHUwMDNjIFRDX0hUQl9NQVhERVBUSDsgbGV2ZWwmIzQzOyYjNDM7KSB7XG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTk3MS1cdFx0LyogY29tbW9uIGNhc2Ugb3B0aW1pemF0aW9uIC0gc2tpcCBldmVudCBoYW5kbGVyIHF1aWNrbHkgKi9cbi0tXG5uZXQvc2NoZWQvc2NoX2h0Yi5jPTE3NjU9c3RhdGljIGludCBodGJfY2hhbmdlX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZCxcbi0tXG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTE5NjUtXHRcdFx0cGFyZW50LVx1MDAzZWxldmVsID0gKHBhcmVudC1cdTAwM2VwYXJlbnQgPyBwYXJlbnQtXHUwMDNlcGFyZW50LVx1MDAzZWxldmVsXG5uZXQvc2NoZWQvc2NoX2h0Yi5jOjE5NjY6XHRcdFx0XHRcdCA6IFRDX0hUQl9NQVhERVBUSCkgLSAxO1xubmV0L3NjaGVkL3NjaF9odGIuYy0xOTY3LVx0XHRcdG1lbXNldChcdTAwMjZwYXJlbnQtXHUwMDNlaW5uZXIsIDAsIHNpemVvZihwYXJlbnQtXHUwMDNlaW5uZXIpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1ODgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGh0Yl9jbGFzc2lmeWAqKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjbGFzc2lmaWNhdGlvbiBwcm9jZXNzIHdpdGhpbiB0aGUgSGllcmFyY2hpY2FsIFRva2VuIEJ1Y2tldCAoSFRCKSBzY2hlZHVsZXIuIEkmIzM5O20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgYHNjaF9odGIuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBhaW1pbmcgZm9yIGxpbmVzIDIyMCB0byAyODAuIEkgZXhwZWN0IHRoaXMgc2VjdGlvbiB0byBjb250YWluIHRoZSBjb3JlIGxvZ2ljIGZvciBob3cgaW5jb21pbmcgcGFja2V0cyBhcmUgY2F0ZWdvcml6ZWQgYW5kIGFzc2lnbmVkIHRvIHRoZSBhcHByb3ByaWF0ZSBIVEIgY2xhc3MuIEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgZXNzZW50aWFsIGZ1bmN0aW9uIGNhbGxzLCBsaWtlbHkgZGVhbGluZyB3aXRoIHBhY2tldCBtZXRhZGF0YSwgY2xhc3MgbG9va3VwLCBhbmQgbWF5YmUgZXZlbiBzb21lIGJhc2ljIHJhdGUgbGltaXRpbmcgY29uc2lkZXJhdGlvbnMuIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgdW5kZXIgdGhlIGhvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9odGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjIwOlx0c3RhdGljIHN0cnVjdCBodGJfY2xhc3MgKmh0Yl9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbiAyMjE6XHRcdFx0XHRcdCAgICAgIGludCAqcWVycilcbiAyMjI6XHR7XG4gMjIzOlx0XHRzdHJ1Y3QgaHRiX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpO1xuIDIyNDpcdFx0c3RydWN0IGh0Yl9jbGFzcyAqY2w7XG4gMjI1Olx0XHRzdHJ1Y3QgdGNmX3Jlc3VsdCByZXM7XG4gMjI2Olx0XHRzdHJ1Y3QgdGNmX3Byb3RvICp0Y2Y7XG4gMjI3Olx0XHR1bnNpZ25lZCBpbnQgaG9wcyA9IDA7XG4gMjI4Olx0XHRpbnQgcmVzdWx0O1xuIDIyOTpcdFxuIDIzMDpcdFx0LyogYWxsb3cgdG8gc2VsZWN0IGNsYXNzIGJ5IHNldHRpbmcgc2tiLVx1MDAzZXByaW9yaXR5IHRvIHZhbGlkIGNsYXNzaWQ7XG4gMjMxOlx0XHQgKiBub3RlIHRoYXQgbmZtYXJrIGNhbiBiZSB1c2VkIHRvbyBieSBhdHRhY2hpbmcgZmlsdGVyIGZ3IHdpdGggbm9cbiAyMzI6XHRcdCAqIHJ1bGVzIGluIGl0XG4gMjMzOlx0XHQgKi9cbiAyMzQ6XHRcdGlmIChza2ItXHUwMDNlcHJpb3JpdHkgPT0gc2NoLVx1MDAzZWhhbmRsZSlcbiAyMzU6XHRcdFx0cmV0dXJuIEhUQl9ESVJFQ1Q7XHQvKiBYOjAgKGRpcmVjdCBmbG93KSBzZWxlY3RlZCAqL1xuIDIzNjpcdFx0Y2wgPSBodGJfZmluZChza2ItXHUwMDNlcHJpb3JpdHksIHNjaCk7XG4gMjM3Olx0XHRpZiAoY2wpIHtcbiAyMzg6XHRcdFx0aWYgKGNsLVx1MDAzZWxldmVsID09IDApXG4gMjM5Olx0XHRcdFx0cmV0dXJuIGNsO1xuIDI0MDpcdFx0XHQvKiBTdGFydCB3aXRoIGlubmVyIGZpbHRlciBjaGFpbiBpZiBhIG5vbi1sZWFmIGNsYXNzIGlzIHNlbGVjdGVkICovXG4gMjQxOlx0XHRcdHRjZiA9IHJjdV9kZXJlZmVyZW5jZV9iaChjbC1cdTAwM2VmaWx0ZXJfbGlzdCk7XG4gMjQyOlx0XHR9IGVsc2Uge1xuIDI0MzpcdFx0XHR0Y2YgPSByY3VfZGVyZWZlcmVuY2VfYmgocS1cdTAwM2VmaWx0ZXJfbGlzdCk7XG4gMjQ0Olx0XHR9XG4gMjQ1Olx0XG4gMjQ2Olx0XHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcbiAyNDc6XHRcdHdoaWxlICh0Y2YgXHUwMDI2XHUwMDI2IChyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCB0Y2YsIFx1MDAyNnJlcywgZmFsc2UpKSBcdTAwM2U9IDApIHtcbiAyNDg6XHQjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG4gMjQ5Olx0XHRcdHN3aXRjaCAocmVzdWx0KSB7XG4gMjUwOlx0XHRcdGNhc2UgVENfQUNUX1FVRVVFRDpcbiAyNTE6XHRcdFx0Y2FzZSBUQ19BQ1RfU1RPTEVOOlxuIDI1MjpcdFx0XHRjYXNlIFRDX0FDVF9UUkFQOlxuIDI1MzpcdFx0XHRcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfU1RPTEVOO1xuIDI1NDpcdFx0XHRcdGZhbGx0aHJvdWdoO1xuIDI1NTpcdFx0XHRjYXNlIFRDX0FDVF9TSE9UOlxuIDI1NjpcdFx0XHRcdHJldHVybiBOVUxMO1xuIDI1NzpcdFx0XHR9XG4gMjU4Olx0I2VuZGlmXG4gMjU5Olx0XHRcdGNsID0gKHZvaWQgKilyZXMuY2xhc3M7XG4gMjYwOlx0XHRcdGlmICghY2wpIHtcbiAyNjE6XHRcdFx0XHRpZiAocmVzLmNsYXNzaWQgPT0gc2NoLVx1MDAzZWhhbmRsZSlcbiAyNjI6XHRcdFx0XHRcdHJldHVybiBIVEJfRElSRUNUO1x0LyogWDowIChkaXJlY3QgZmxvdykgKi9cbiAyNjM6XHRcdFx0XHRjbCA9IGh0Yl9maW5kKHJlcy5jbGFzc2lkLCBzY2gpO1xuIDI2NDpcdFx0XHRcdGlmICghY2wpXG4gMjY1Olx0XHRcdFx0XHRicmVhaztcdC8qIGZpbHRlciBzZWxlY3RlZCBpbnZhbGlkIGNsYXNzaWQgKi9cbiAyNjY6XHRcdFx0fVxuIDI2NzpcdFx0XHRpZiAoIWNsLVx1MDAzZWxldmVsKVxuIDI2ODpcdFx0XHRcdHJldHVybiBjbDtcdC8qIHdlIGhpdCBsZWFmOyByZXR1cm4gaXQgKi9cbiAyNjk6XHRcbiAyNzA6XHRcdFx0aWYgKCYjNDM7JiM0Mztob3BzIFx1MDAzZSBUQ19IVEJfTUFYREVQVEgpIHtcbiAyNzE6XHRcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O2h0YjogY2xhc3NpZnkgbG9vcCBkZXRlY3RlZCwgZHJvcHBpbmcgcGFja2V0XFxuXCYjMzQ7KTtcbiAyNzI6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiAyNzM6XHRcdFx0fVxuIDI3NDpcdFx0XHQvKiB3ZSBoYXZlIGdvdCBpbm5lciBjbGFzczsgYXBwbHkgaW5uZXIgZmlsdGVyIGNoYWluICovXG4gMjc1Olx0XHRcdHRjZiA9IHJjdV9kZXJlZmVyZW5jZV9iaChjbC1cdTAwM2VmaWx0ZXJfbGlzdCk7XG4gMjc2Olx0XHR9XG4gMjc3Olx0XHQvKiBjbGFzc2lmaWNhdGlvbiBmYWlsZWQ7IHRyeSB0byB1c2UgZGVmYXVsdCBjbGFzcyAqL1xuIDI3ODpcdFx0Y2wgPSBodGJfZmluZChUQ19IX01BS0UoVENfSF9NQUooc2NoLVx1MDAzZWhhbmRsZSksIHEtXHUwMDNlZGVmY2xzKSwgc2NoKTtcbiAyNzk6XHRcdGlmICghY2wgfHwgY2wtXHUwMDNlbGV2ZWwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODAzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkhGU0MgQ2xhc3NpZmljYXRpb24gTG9vcCBEZXRlY3Rpb246IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBoZnNjX2NsYXNzaWZ5YCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyB0cnlpbmcgdG8gcHJldmVudCBjbGFzc2lmaWNhdGlvbiBsb29wcywgYW5kIHRoYXQmIzM5O3Mgc21hcnQuIFRoZSBjb2RlIHVzZXMgdGhpcyBgZHJpZnRgIHZhcmlhYmxlIGFzIGEgY291bnRlci4gTGV0IG1lIHNlZS4uLiBgZHJpZnQgPSBIRlNDX0NMQVNTSUZZX01BWF9EUklGVDtgIC0gb2theSwgaXQmIzM5O3MgaW5pdGlhbGl6ZWQgdG8gOC4gVGhlbiwgd2l0aGluIHRoZSBtYWluIGxvb3AsIHRoZXJlJiMzOTtzIHRoaXMgY2hlY2s6IGBpZiAoY2wtJmd0O2xldmVsICZndDs9IGhlYWQtJmd0O2xldmVsICZhbXA7JmFtcDsgZHJpZnQtLSA9PSAwKWAuCgpBaGEhIGBkcmlmdGAgaXMgYW4gYHVuc2lnbmVkIGludGAsIHdoaWNoIGlzIGtleS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhczogd2hlbiBgY2wtJmd0O2xldmVsICZndDs9IGhlYWQtJmd0O2xldmVsYCBhbmQgYGRyaWZ0YCByZWFjaGVzIHplcm8sIGl0IHVuZGVyZmxvd3MgdG8gYFVJTlRfTUFYYCwgYnJlYWtpbmcgdGhlIGxvb3AuIEJ1dCwgYWN0dWFsbHksIHRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaGFuZGxlZC4gU28gdGhhdCYjMzk7cyBob3cgaXQgd29ya3MgYXQgbGVhc3QuCgpCdXQgaG9sZCBvbiEgV2hhdCBpZiBgY2wtJmd0O2xldmVsYCBpcyAqbGVzcyogdGhhbiBgaGVhZC0mZ3Q7bGV2ZWxgPyBUaGVuIGBkcmlmdGAgZG9lc24mIzM5O3QgZ2V0IGRlY3JlbWVudGVkISBDb3VsZCB0aGlzIGxlYWQgdG8gaW5maW5pdGUgbG9vcGluZyB3aXRoIGFsdGVybmF0aW5nIGxldmVscywgbGlrZSAxLSZndDsyLSZndDsxLSZndDsyPyBXaGVuIHRoZSBoZWFkIGlzIGxldmVsIDIgYW5kIHRoZSBjdXJyZW50IGNsYXNzIGlzIGxldmVsIDEsIHRoZSBjb25kaXRpb24gaXMgZmFsc2UsIGBkcmlmdGAgZG9lc24mIzM5O3QgY2hhbmdlLiBCdXQgd2hlbiBoZWFkIGlzIGxldmVsIDEsIGFuZCB0aGUgY3VycmVudCBjbGFzcyBpcyBsZXZlbCAyLCB0aGUgY29uZGl0aW9uIGlzIHRydWUsIGFuZCBgZHJpZnRgIGRlY3JlbWVudHMuIEFmdGVyIG5pbmUgaG9wcyBsaWtlIHRoYXQsIGBkcmlmdGAgd2lsbCBoaXQgemVybywgYW5kIHRoZSBsb29wIGlzIHRlcm1pbmF0ZWQuIE9rYXksIHNvIHRoYXQgc29ydCBvZiBsb29wIGlzIGNvdmVyZWQuCgpOb3csIHdoYXQgYWJvdXQgbG9vcHMgKndpdGhpbiogdGhlIHNhbWUgbGV2ZWw/IFNheSwgMS0mZ3Q7MS0mZ3Q7MS4gSW4gdGhhdCBjYXNlLCBgY2wtJmd0O2xldmVsICZndDs9IGhlYWQtJmd0O2xldmVsYCBpcyBhbHdheXMgdHJ1ZSAoMSAmZ3Q7PSAxKSwgYW5kIGBkcmlmdGAgaXMgZGVjcmVtZW50ZWQgZWFjaCB0aW1lLiBUaGF0IG1ha2VzIHNlbnNlLCB3ZSYjMzk7cmUgbm90IGFsbG93aW5nIGEgbG9vcC4KClNvLCBva2F5LiBXZSBoYXZlIHRoaXMgbG9vcCBkZXRlY3Rpb24gbWVjaGFuaXNtLiBXaGF0IGFib3V0IGxvb3BzIGdvaW5nICpkb3dud2FyZHMqPyBDYW4gYSBjbGFzc2lmaWNhdGlvbiBkZXNjZW5kIGluZmluaXRlbHk/IFdpdGggdGhlIEhGU0Mgc2NoZWR1bGVyLCBjYW4gd2UgYnVpbGQgYW4gaW5maW5pdGVseSBkZWVwIHRyZWU/IE5vLCBIRlNDIHRyZWVzIGFyZSBmaW5pdGUuIEJ1dCwgd2FpdC4uLiBjb3VsZCBhIGZpbHRlciBzb21laG93IGJlICpib3VuZCogdG8gYW4gYW5jZXN0b3Igb3Igc29tZXRoaW5nPyBIbW1tLCBubywgbGV2ZWxzIGFyZSBvcmRlcmVkLCBzbyBhbmNlc3RvcnMgd291bGQgaGF2ZSBoaWdoZXIgbGV2ZWxzICh0aGUgcm9vdCBoYXMgdGhlIGhpZ2hlc3QgbGV2ZWwsIG9yIGxldmVsIDApLgoKTGV0JiMzOTtzIGRpZyBhIGJpdCBkZWVwZXIgaW50byB0aGlzIGBsZXZlbGAgY29uY2VwdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGBsZXZlbGAgZmllbGQgaXMgdXNlZCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIHN0cnVjdHVyZSBvZiB0aGUgSEZTQyBzY2hlZHVsZXIuIFRpbWUgdG8gZ3JlcCBmb3IgYC0mZ3Q7bGV2ZWxgIHRocm91Z2hvdXQgdGhlIGBuZXQvc2NoZWQvc2NoX2hmc2MuY2AgY29kZSB0byBzZWUgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7LVx1MDAzZWxldmVsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9oZnNjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9oZnNjLmM9MzA3PXZ0dHJlZV9nZXRfbWludnQoc3RydWN0IGhmc2NfY2xhc3MgKmNsLCB1NjQgY3VyX3RpbWUpXG4tLVxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMzEyLVxubmV0L3NjaGVkL3NjaF9oZnNjLmM6MzEzOlx0d2hpbGUgKGNsLVx1MDAzZWxldmVsIFx1MDAzZSAwKSB7XG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0zMTQtXHRcdGNsID0gdnR0cmVlX2ZpcnN0Zml0KGNsLCBjdXJfdGltZSk7XG4tLVxubmV0L3NjaGVkL3NjaF9oZnNjLmM9ODQ1PWhmc2NfYWRqdXN0X2xldmVscyhzdHJ1Y3QgaGZzY19jbGFzcyAqY2wpXG4tLVxubmV0L3NjaGVkL3NjaF9oZnNjLmMtODUyLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIFx1MDAyNmNsLVx1MDAzZWNoaWxkcmVuLCBzaWJsaW5ncykge1xubmV0L3NjaGVkL3NjaF9oZnNjLmM6ODUzOlx0XHRcdGlmIChwLVx1MDAzZWxldmVsIFx1MDAzZT0gbGV2ZWwpXG5uZXQvc2NoZWQvc2NoX2hmc2MuYzo4NTQ6XHRcdFx0XHRsZXZlbCA9IHAtXHUwMDNlbGV2ZWwgJiM0MzsgMTtcbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTg1NS1cdFx0fVxubmV0L3NjaGVkL3NjaF9oZnNjLmM6ODU2Olx0XHRXUklURV9PTkNFKGNsLVx1MDAzZWxldmVsLCBsZXZlbCk7XG5uZXQvc2NoZWQvc2NoX2hmc2MuYy04NTctXHR9IHdoaWxlICgoY2wgPSBjbC1cdTAwM2VjbF9wYXJlbnQpICE9IE5VTEwpO1xuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jPTkxOD1oZnNjX2NoYW5nZV9jbGFzcyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGNsYXNzaWQsIHUzMiBwYXJlbnRpZCxcbi0tXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMDg0LVx0bGlzdF9hZGRfdGFpbChcdTAwMjZjbC1cdTAwM2VzaWJsaW5ncywgXHUwMDI2cGFyZW50LVx1MDAzZWNoaWxkcmVuKTtcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjEwODU6XHRpZiAocGFyZW50LVx1MDAzZWxldmVsID09IDApXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMDg2LVx0XHRxZGlzY19wdXJnZV9xdWV1ZShwYXJlbnQtXHUwMDNlcWRpc2MpO1xuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jPTExMDk9aGZzY19kZWxldGVfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnLFxuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTExMTQtXG5uZXQvc2NoZWQvc2NoX2hmc2MuYzoxMTE1Olx0aWYgKGNsLVx1MDAzZWxldmVsIFx1MDAzZSAwIHx8IHFkaXNjX2NsYXNzX2luX3VzZShcdTAwMjZjbC1cdTAwM2VjbF9jb21tb24pIHx8XG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMTE2LVx0ICAgIGNsID09IFx1MDAyNnEtXHUwMDNlcm9vdCkge1xuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jPTExMzY9aGZzY19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKVxuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTExNDYtXHQgICAgKGNsID0gaGZzY19maW5kX2NsYXNzKHNrYi1cdTAwM2Vwcmlvcml0eSwgc2NoKSkgIT0gTlVMTClcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjExNDc6XHRcdGlmIChjbC1cdTAwM2VsZXZlbCA9PSAwKVxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTE0OC1cdFx0XHRyZXR1cm4gY2w7XG4tLVxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTE3MC1cdFx0XHRcdGJyZWFrOyAvKiBmaWx0ZXIgc2VsZWN0ZWQgaW52YWxpZCBjbGFzc2lkICovXG5uZXQvc2NoZWQvc2NoX2hmc2MuYzoxMTcxOlx0XHRcdGlmIChjbC1cdTAwM2VsZXZlbCBcdTAwM2U9IGhlYWQtXHUwMDNlbGV2ZWwpXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMTcyLVx0XHRcdFx0YnJlYWs7IC8qIGZpbHRlciBtYXkgb25seSBwb2ludCBkb3dud2FyZHMgKi9cbi0tXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMTc0LVxubmV0L3NjaGVkL3NjaF9oZnNjLmM6MTE3NTpcdFx0aWYgKGNsLVx1MDAzZWxldmVsID09IDApXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMTc2LVx0XHRcdHJldHVybiBjbDsgLyogaGl0IGxlYWYgY2xhc3MgKi9cbi0tXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMTgyLVx0XHQgKi9cbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjExODM6XHRcdGlmIChjbC1cdTAwM2VsZXZlbCBcdTAwM2U9IGhlYWQtXHUwMDNlbGV2ZWwgXHUwMDI2XHUwMDI2IGRyaWZ0LS0gPT0gMCkge1xubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTE4NC1cdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O2hmc2M6IGNsYXNzaWZ5IGxvb3AgZGV0ZWN0ZWQsIGRyb3BwaW5nIHBhY2tldFxcblwmIzM0Oyk7XG4tLVxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTE5NS1cdFx0XHRcdCAgICAgICBSRUFEX09OQ0UocS1cdTAwM2VkZWZjbHMpKSwgc2NoKTtcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjExOTY6XHRpZiAoY2wgPT0gTlVMTCB8fCBjbC1cdTAwM2VsZXZlbCBcdTAwM2UgMClcbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTExOTctXHRcdHJldHVybiBOVUxMO1xuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jPTEyMDM9aGZzY19ncmFmdF9jbGFzcyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBhcmcsIHN0cnVjdCBRZGlzYyAqbmV3LFxuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTEyMDctXG5uZXQvc2NoZWQvc2NoX2hmc2MuYzoxMjA4Olx0aWYgKGNsLVx1MDAzZWxldmVsIFx1MDAzZSAwKVxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTIwOS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L3NjaGVkL3NjaF9oZnNjLmM9MTIyMj1oZnNjX2NsYXNzX2xlYWYoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTEyMjUtXG5uZXQvc2NoZWQvc2NoX2hmc2MuYzoxMjI2Olx0aWYgKGNsLVx1MDAzZWxldmVsID09IDApXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMjI3LVx0XHRyZXR1cm4gY2wtXHUwMDNlcWRpc2M7XG4tLVxubmV0L3NjaGVkL3NjaF9oZnNjLmM9MTI1Mz1oZnNjX2JpbmRfdGNmKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIHBhcmVudCwgdTMyIGNsYXNzaWQpXG4tLVxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTI1OC1cdGlmIChjbCAhPSBOVUxMKSB7XG5uZXQvc2NoZWQvc2NoX2hmc2MuYzoxMjU5Olx0XHRpZiAocCAhPSBOVUxMIFx1MDAyNlx1MDAyNiBwLVx1MDAzZWxldmVsIFx1MDAzYz0gY2wtXHUwMDNlbGV2ZWwpXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMjYwLVx0XHRcdHJldHVybiAwO1xuLS1cbm5ldC9zY2hlZC9zY2hfaGZzYy5jPTEzMjY9aGZzY19kdW1wX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMzM0LVx0dGNtLVx1MDAzZXRjbV9oYW5kbGUgPSBjbC1cdTAwM2VjbF9jb21tb24uY2xhc3NpZDtcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjEzMzU6XHRpZiAoY2wtXHUwMDNlbGV2ZWwgPT0gMClcbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTEzMzYtXHRcdHRjbS1cdTAwM2V0Y21faW5mbyA9IGNsLVx1MDAzZXFkaXNjLVx1MDAzZWhhbmRsZTtcbi0tXG5uZXQvc2NoZWQvc2NoX2hmc2MuYz0xMzUxPWhmc2NfZHVtcF9jbGFzc19zdGF0cyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBhcmcsXG4tLVxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTM1OC1cdHFkaXNjX3FzdGF0c19xbGVuX2JhY2tsb2coY2wtXHUwMDNlcWRpc2MsIFx1MDAyNnFsZW4sIFx1MDAyNmNsLVx1MDAzZXFzdGF0cy5iYWNrbG9nKTtcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjEzNTk6XHR4c3RhdHMubGV2ZWwgICA9IFJFQURfT05DRShjbC1cdTAwM2VsZXZlbCk7XG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMzYwLVx0eHN0YXRzLnBlcmlvZCAgPSBSRUFEX09OQ0UoY2wtXHUwMDNlY2xfdnRwZXJpb2QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY1OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDExOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggRXZhbHVhdGlvbjogSEZTQyBDbGFzc2lmaWNhdGlvbiBMb29wIFByZXZlbnRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmcm9tIGFuIGV4cGVydCBwZXJzcGVjdGl2ZS4gSSYjMzk7bSBsb29raW5nIGF0IGBoZnNjX2JpbmRfdGNmYCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBjbGFzcyBsZXZlbHMgd2l0aGluIHRoZSBIRlNDIHFkaXNjLiBUaGUga2V5IGlzc3VlIGlzIHRoaXMgcG90ZW50aWFsIGRyaWZ0IGluIGNsYXNzIGxldmVscyBhZnRlciBiaW5kaW5nLCBzcGVjaWZpY2FsbHkgaG93IGBjbC0mZ3Q7bGV2ZWxgIGNhbiBiZSBhZGp1c3RlZCBieSBgaGZzY19hZGp1c3RfbGV2ZWxzYCBwb3N0LWJpbmRpbmcuCgpJbml0aWFsbHksIGBwLSZndDtsZXZlbCAmbHQ7PSBjbC0mZ3Q7bGV2ZWxgIGFjdHMgYXMgYSBzYWZlZ3VhcmQgZHVyaW5nIHRoZSBiaW5kIG9wZXJhdGlvbi4gSG93ZXZlciwgcG9zdC1iaW5kLCB0aGUgbGV2ZWwgb2YgYGNsYCBjYW4gY2hhbmdlLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBwcm9ibGVtLiBQcmV2aW91c2x5LCBpbiBgaGZzY19jbGFzc2lmeWAsIGlmIGByZXMuY2xhc3NgIHdhcyBub24tTlVMTCAoaW5kaWNhdGluZyBhIGRpcmVjdCBiaW5kIHdpdGgsIHNheSwgYSBmbG93aWQpLCB0aGUgbGV2ZWwgY2hlY2sgYGlmIChjbC0mZ3Q7bGV2ZWwgJmd0Oz0gaGVhZC0mZ3Q7bGV2ZWwpIGJyZWFrO2Agd2FzIGJ5cGFzc2VkLiBUaGlzIGlzIGJhZC4gVGhpcyBtZWFudCB0aGF0IGlmIGxldmVscyBkcmlmdGVkIGFmdGVyIHRoZSBiaW5kLCB0aGVyZSB3YXMgbm90aGluZyB0byBwcmV2ZW50IHVzIGZyb20gZW50ZXJpbmcgYSBjbGFzc2lmaWNhdGlvbiBsb29wIGJlY2F1c2UgdGhlIGNvbXBhcmlzb24gYGNsLSZndDtsZXZlbCAmZ3Q7PSBoZWFkLSZndDtsZXZlbGAgd2FzIHNraXBwZWQuCgpUaGlzIGxlYWRzIGRpcmVjdGx5IHRvIHRoZSBjb3JlIHByb2JsZW06IGEgcG90ZW50aWFsIGluZmluaXRlIGxvb3Agd2l0aGluIGBoZnNjX2NsYXNzaWZ5YCBkdXJpbmcgcGFja2V0IGVucXVldWUsIHVsdGltYXRlbHkgdHJpZ2dlcmluZyBhIHNvZnQgbG9ja3VwLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgd2l0aCB0aGUgYEhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUYCBjb3VudGVyLCBhY3RpbmcgYXMgYSBmYWlsc2FmZSBhbmQgbG9nZ2luZyBhIHdhcm5pbmcuIFRoZSBwYXRjaCBhZGRzIGEgdGVybWluYXRpb24gdG8gdGhpcyBjbGFzc2lmaWNhdGlvbiBsb29wLgoKTm93LCBsZXQmIzM5O3MgYXNzZXNzIHRoZSBmdXp6aW5nIHBvdGVudGlhbC4KCjEuICAqKlJlYWNoYWJpbGl0eToqKiBBYnNvbHV0ZWx5IHJlYWNoYWJsZSEgSEZTQyBpcyBhIHN0YW5kYXJkIHFkaXNjLCBjb25maWd1cmVkIHZpYSBuZXRsaW5rIChydG5ldGxpbmspLCBhbmQgdGh1cyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHdpdGggdGhlIGBDQVBfTkVUX0FETUlOYCBjYXBhYmlsaXR5LCBtZWFuaW5nIGl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSB1c2luZyBsb29wYmFjaywgZHVtbXksIG9yIHZldGggaW50ZXJmYWNlcy4gUGFja2V0IGVucXVldWUgdGhyb3VnaCBzb2NrZXRzIChgc2VuZHRvYCwgYHNlbmRtc2dgLCBldGMuKSBoaXRzIGBoZnNjX2VucXVldWVgIGFuZCB1bHRpbWF0ZWx5IGBoZnNjX2NsYXNzaWZ5YC4KCjIuICAqKkNvcmUgVHJpYWdlIFBoaWxvc29waHk6KioKICAgICogICBSZWFjaGFibGU/IFllcy4KICAgICogICBDb3JlIFN1YnN5c3RlbXM/IFRoaXMgcGF0Y2ggZGlyZWN0bHkgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcsIHNwZWNpZmljYWxseSBwYWNrZXQgc2NoZWR1bGluZyAoYG5ldC9zY2hlZGApLgogICAgKiAgIE5ldy9Nb2RpZmllZCBDaGVja3M/IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY3JpdGljYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSBjbGFzc2lmaWNhdGlvbiBsb29wIHRlcm1pbmF0aW9uIGFuZCBlcnJvciBoYW5kbGluZywgbWFraW5nIHRoZSBwYXRjaCBldmVuIG1vcmUgaW50ZXJlc3RpbmcuCiAgICAqICAgTmVnYXRpdmUgQ3JpdGVyaWE/IE5vOiBrZXJuZWwgY29kZSwgc3RydWN0dXJhbGx5IHJlYWNoYWJsZSBhbmQgZXhlY3V0aW9uIHBhdGggcmVhY2hhYmxlIQoKKipUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBXb3J0aEZ1enppbmcuKiogVGhlIG1vZGlmaWNhdGlvbnMgZGlyZWN0bHkgaW1wYWN0IGEgY3JpdGljYWwgZGF0YSBwYXRoIGFuZCBlcnJvciBoYW5kbGluZyB3aXRoaW4gYSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50LgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gVG8gZWZmZWN0aXZlbHkgdGFyZ2V0IHRoaXMsIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBIRlNDIHFkaXNjIGlzIGVuYWJsZWQsIGFsb25nIHdpdGggdGhlIHJlbGV2YW50IGNsYXNzaWZpZXIgYW5kIGFjdGlvbiBzdXBwb3J0LCBzaW5jZSBjbGFzc2lmaWNhdGlvbiBhbmQgYXNzb2NpYXRlZCBmaWx0ZXJzIGFyZSBpbnRlZ3JhbCB0byB0aGUgYnVnOgoKMS4gICoqYE5FVF9TQ0hfSEZTQ2A6KiogVGhpcyBpcyB0aGUgcHJpbWFyeSBjb25maWcsIHNvdXJjZWQgZnJvbSBgbmV0L3NjaGVkL0tjb25maWdgLiBJdCYjMzk7cyBhIHRyaXN0YXRlLCBhbmQgcmVxdWlyZXMgYE5FVF9TQ0hFRGAgdG8gYmUgZW5hYmxlZCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBORVRgLgoyLiAgKipgTkVUX1NDSEVEYDoqKiBSZXF1aXJlZCwgZGVwZW5kcyBvbiBgTkVUYC4KMy4gICoqYENPTkZJR19ORVRfQ0xTX0FDVGA6KiogVGhpcyBpcyBuZWVkZWQgZm9yIGNsYXNzaWZpZXJzIGFuZCBhY3Rpb25zLCB0byBjbGFzc2lmeSBhbmQgYXBwbHkgYSBkaWZmZXJlbnQgYWN0aW9uIHRvIGEgcGFja2V0IGJhc2VkIG9uIGEgbWF0Y2hpbmcgZmlsdGVyLgo0LiAgKipgTkVUX0NMU19VMzJgIG9yIHNpbWlsYXIgZmlsdGVycyAoYE5FVF9DTFNfQkFTSUNgLCBgTkVUX0NMU19BQ1RgKSoqOiB0byBtYWtlIHRoZSBjbGFzc2lmaWNhdGlvbiBsb2dpYyBpbiBgaGZzY19jbGFzc2lmeWAgcnVuLgoKVGhlcmVmb3JlLCB3ZSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYE5FVGAsIGBORVRfU0NIRURgLCBgTkVUX1NDSF9IRlNDYCwgYE5FVF9DTFNfQUNUYCwgYW5kIGEgc3VpdGFibGUgZmlsdGVyIGxpa2UgYE5FVF9DTFNfVTMyYC4gV2l0aCB0aGF0LCB3ZSYjMzk7cmUgc2V0IHRvIGJlZ2luIGEgZnV6emluZyBjYW1wYWlnbiB0byB0YXJnZXQgdGhpcyBIRlNDIHFkaXNjLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0NMU19BQ1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9NjkwPWNvbmZpZyBORVRfRU1BVENIX0lQVFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTcwMS1cbm5ldC9zY2hlZC9LY29uZmlnOjcwMjpjb25maWcgTkVUX0NMU19BQ1Rcbm5ldC9zY2hlZC9LY29uZmlnLTcwMy1cdGJvb2wgXCYjMzQ7QWN0aW9uc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc3NAoJCQkJCQkJb3V0cHV0OiAxODAKCQkJCQkJCXRob3VnaHRzOiA4MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gSEZTQyBUcmFmZmljIENvbnRyb2wgZm9yIEZ1enppbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgZnV6emluZyB0aGUgSEZTQyAoSGllcmFyY2hpY2FsIEZhaXIgU2VydmljZSBDdXJ2ZSkgdHJhZmZpYyBjb250cm9sIHNjaGVkdWxlci4gRmlyc3QgdGhpbmdzIGZpcnN0LCB3ZSBuZWVkIHRvIGNvbmZpcm0gb3VyIGtlcm5lbCBjb25maWdzIGFyZSBpbiBwbGFjZTogYE5FVF9TQ0hFRGAsIGBORVRfU0NIX0hGU0NgLCBhbmQgYE5FVF9DTFNfQUNUYCDigJMgY2hlY2suCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIHRoZSBmdXp6ZXIuIFRoZSBndWlkaW5nIHByaW5jaXBsZSBmcm9tIFNlY3Rpb24gNCBvZiBvdXIgZG9jdW1lbnQgaXMga2V5IGhlcmU6IGF2b2lkIGdlbmVyaWMgZnVuY3Rpb25zLCB0YXJnZXQgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnkgcG9pbnRzLiBXZSYjMzk7cmUgaW50ZXJlc3RlZCBpbiB0aGUgY29kZSBkaXJlY3RseSB0b3VjaGVkIGJ5IHRoZSBwYXRjaC4KCkxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gYG5ldC9zY2hlZC9zY2hfaGZzYy5jYC4gVGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgaXMgYGhmc2NfY2xhc3NpZnlgLCB0aGUgZnVuY3Rpb24gZGlyZWN0bHkgbW9kaWZpZWQgYnkgdGhlIHBhdGNoLiBCdXQgbGV0JiMzOTtzIGdvIGRlZXBlci4gYGhmc2NfZW5xdWV1ZWAgaXMgdGhlIGRpcmVjdCBjYWxsZXIgb2YgYGhmc2NfY2xhc3NpZnlgIGluIHRoZSBxdWV1aW5nIHBhdGgg4oCTIGNyaXRpY2FsISBUaGVuLCBgaGZzY19iaW5kX3RjZmAgYmluZHMgdGhlIGZpbHRlciwgd2hpY2ggbWlnaHQgbGVhZCB1cyBkb3duIHRoaXMgcGF0aC4gVGhlbiBgaGZzY19jaGFuZ2VfY2xhc3NgIGFuZCBgaGZzY19pbml0X3FkaXNjYCAvIGBoZnNjX2Rlc3Ryb3lfcWRpc2NgIGFyZSB0aGVyZS4KCkNhbiB3ZSBsaXN0IGBoZnNjX2NsYXNzaWZ5YCBhbmQgYGhmc2NfZW5xdWV1ZWA/IEFic29sdXRlbHkuIGBoZnNjX2NsYXNzaWZ5YCBoYW5kbGVzIHBhY2tldCBjbGFzc2lmaWNhdGlvbiwgYW5kIGBoZnNjX2VucXVldWVgIGhhbmRsZXMgdGhlIGVucXVldWUgcGF0aC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBgaGZzY19jbGFzc2lmeWAgaXNuJiMzOTt0IGlubGluZWQgLSBhbmQgaXQmIzM5O3Mgc3RhdGljIG9uIGxpbmUgMTEzNTogYHN0YXRpYyBzdHJ1Y3QgaGZzY19jbGFzcyAqIGhmc2NfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsIGludCAqcWVycilgLiBJdCYjMzk7cyBub3QgaW5saW5lLCBzbyBpdCYjMzk7cyBsaWtlbHkgcHJlc2VudCBpbiB0aGUgc3ltYm9sIHRhYmxlIGluIGFueSBzYW5lIGJ1aWxkLiBFdmVuIGlmIGl0JiMzOTtzIGlubGluZWQgaW4gdGhlIGZ1dHVyZSwgd2Ugc3RpbGwgaGF2ZSBgaGZzY19lbnF1ZXVlYCB3aGljaCB3aWxsIGJlIHByZXNlbnQuIFRoZXJlZm9yZSwgYGhmc2NfY2xhc3NpZnlgIGFuZCBgaGZzY19lbnF1ZXVlYCAoYW5kIHBlcmhhcHMgYGhmc2NfYmluZF90Y2ZgKSBhcmUgaWRlYWwgZm9jdXMgc3ltYm9scy4KCldoeSB0aGVzZT8gVGhlIHBhdGNoIG1vZGlmaWVzIGBoZnNjX2NsYXNzaWZ5YCB0byBwcmV2ZW50IGluZmluaXRlIGNsYXNzaWZpY2F0aW9uIGxvb3BzIHJlbGF0ZWQgdG8gZmlsdGVyIGJpbmRpbmdzIChgZmxvd2lkYCkgdGhhdCBleHBlcmllbmNlIGxhdGVyYWwgZHJpZnQgYWZ0ZXIgY2xhc3MgbXV0YXRpb25zLiBJdCYjMzk7cyBsaW1pdGluZyB0aGUgbnVtYmVyIG9mIGNsYXNzaWZpY2F0aW9uIGhvcHMgdmlhIGBIRlNDX0NMQVNTSUZZX01BWF9EUklGVGAgKDggaG9wcykgYW5kIHdpbGwgZHJvcCBwYWNrZXRzIGlmIHdlIGhpdCB0aGF0LiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyB0cmFmZmljIGNvbnRyb2wsIHBvdGVudGlhbGx5IHJlYWNoYWJsZSB0aHJvdWdoIG5ldGxpbmsgY29tbWFuZHMgKGB0YyBxZGlzY2AsIGB0YyBjbGFzc2AsIGB0YyBmaWx0ZXJgKSBhbmQgbmV0d29yayBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgY29kZSB0aGF0JiMzOTtzIHdvcnRoIGZ1enppbmchCgpTbywgdG8gc3VtbWFyaXplOgoKKiAgICoqQ29uZmlnczoqKiBgTkVUX1NDSEVEYCwgYE5FVF9TQ0hfSEZTQ2AsIGBORVRfQ0xTX0FDVGAKKiAgICoqRm9jdXMgU3ltYm9sczoqKiBgaGZzY19jbGFzc2lmeWAsIGBoZnNjX2VucXVldWVgLCBgaGZzY19iaW5kX3RjZmAKCkxldCYjMzk7cyBkbyBhIGZpbmFsIHJldmlldy4gSSB0aGluayB3ZSYjMzk7dmUgY292ZXJlZCBvdXIgYmFzZXMuIFJlYWR5IHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfSEZTQyYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hmc2NfY2xhc3NpZnkmIzM0OywKICAgICYjMzQ7aGZzY19lbnF1ZXVlJiMzNDssCiAgICAmIzM0O2hmc2NfYmluZF90Y2YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaGZzY19jbGFzc2lmeSBpbiBuZXQvc2NoZWQvc2NoX2hmc2MuYyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIGR1cmluZyBwYWNrZXQgY2xhc3NpZmljYXRpb24gd2hlbiBmaWx0ZXIgY2xhc3MgYmluZGluZ3MgZXhwZXJpZW5jZSBsYXRlcmFsIG9yIHVwd2FyZCBsZXZlbCBkcmlmdCBmb2xsb3dpbmcgY2xhc3MgaGllcmFyY2h5IHVwZGF0ZXMuIFRoZSBjb2RlIGlzIHBhcnQgb2YgdGhlIGNvcmUgdHJhZmZpYyBjb250cm9sIHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgcnRuZXRsaW5rIChjb25maWd1cmluZyBIRlNDIHFkaXNjcywgY2xhc3NlcywgYW5kIGZpbHRlcnMpIGFuZCBzZW5kaW5nIG5ldHdvcmsgdHJhZmZpYy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBlZGdlIGNhc2VzIGluIGNsYXNzIGhpZXJhcmNoeSBtYW5pcHVsYXRpb24sIGZpbHRlciBiaW5kaW5nLCBhbmQgY2xhc3NpZnkgbG9vcCBib3VuZGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfSEZTQyYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hmc2NfY2xhc3NpZnkmIzM0OywKICAgICYjMzQ7aGZzY19lbnF1ZXVlJiMzNDssCiAgICAmIzM0O2hmc2NfYmluZF90Y2YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaGZzY19jbGFzc2lmeSBpbiBuZXQvc2NoZWQvc2NoX2hmc2MuYyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIGR1cmluZyBwYWNrZXQgY2xhc3NpZmljYXRpb24gd2hlbiBmaWx0ZXIgY2xhc3MgYmluZGluZ3MgZXhwZXJpZW5jZSBsYXRlcmFsIG9yIHVwd2FyZCBsZXZlbCBkcmlmdCBmb2xsb3dpbmcgY2xhc3MgaGllcmFyY2h5IHVwZGF0ZXMuIFRoZSBjb2RlIGlzIHBhcnQgb2YgdGhlIGNvcmUgdHJhZmZpYyBjb250cm9sIHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgcnRuZXRsaW5rIChjb25maWd1cmluZyBIRlNDIHFkaXNjcywgY2xhc3NlcywgYW5kIGZpbHRlcnMpIGFuZCBzZW5kaW5nIG5ldHdvcmsgdHJhZmZpYy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBlZGdlIGNhc2VzIGluIGNsYXNzIGhpZXJhcmNoeSBtYW5pcHVsYXRpb24sIGZpbHRlciBiaW5kaW5nLCBhbmQgY2xhc3NpZnkgbG9vcCBib3VuZGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBoZnNjX2NsYXNzaWZ5YCBpbiBgbmV0L3NjaGVkL3NjaF9oZnNjLmNgIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMgY2F1c2VkIGJ5IGxhdGVyYWwgb3IgdXB3YXJkIGNsYXNzaWZpY2F0aW9uIGhvcHMgYnkgaW50cm9kdWNpbmcgYSBsb29wIGNvdW50ZXIgKGBkcmlmdGApLiBUaGUgYGRyaWZ0YCBsb2NhbCB2YXJpYWJsZSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBIRlNDX0NMQVNTSUZZX01BWF9EUklGVGAgKDgpIGJlZm9yZSB0aGUgY2xhc3NpZmljYXRpb24gbG9vcCwgYW5kIGFsbCBjb21wYXJlZCBmaWVsZHMgKGBjbC1cdTAwM2VsZXZlbGAsIGBoZWFkLVx1MDAzZWxldmVsYCkgYXJlIGV4aXN0aW5nIGluaXRpYWxpemVkIGNsYXNzIGF0dHJpYnV0ZXMuXG5cbk5vIGtlcm5lbC10by11c2VyIGRhdGEgdHJhbnNmZXJzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGJ1ZmZlciBzaXplL29mZnNldCBjYWxjdWxhdGlvbnMgYXJlIG1vZGlmaWVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG1lYW5pbmcgaXQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlZmMzMDc0OGExNzVhNTZjYTk2M2NmMTZkZWM3NTJjYWUxMDRiNGQ1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMDk6MDA6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hmc2MuYyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jCmluZGV4IGU4N2Y1MDIxYTE5OTUuLmIwNzNlZmFmMmJmNWYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfaGZzYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jCkBAIC0zODYsNiAmIzQzOzM4NiwxMiBAQCBjZnRyZWVfdXBkYXRlKHN0cnVjdCBoZnNjX2NsYXNzICpjbCkKICNkZWZpbmUJU01fTUFTSwkJKCgxVUxMICZsdDsmbHQ7IFNNX1NISUZUKSAtIDEpCiAjZGVmaW5lCUlTTV9NQVNLCSgoMVVMTCAmbHQ7Jmx0OyBJU01fU0hJRlQpIC0gMSkKIAomIzQzOy8qCiYjNDM7ICogYm91bmQgb24gY29uc2VjdXRpdmUgbm9uLWRlc2NlbmRpbmcgKGxhdGVyYWwgLyB1cHdhcmQpIGhvcHMgaW4gYQomIzQzOyAqIGNsYXNzaWZ5IHdhbGssIG1pcnJvcmluZyBodGImIzM5O3MgVENfSFRCX01BWERFUFRIIGhlYWRyb29tCiYjNDM7ICovCiYjNDM7I2RlZmluZQlIRlNDX0NMQVNTSUZZX01BWF9EUklGVAk4CiYjNDM7CiBzdGF0aWMgaW5saW5lIHU2NAogc2VnX3gyeSh1NjQgeCwgdTY0IHNtKQogewpAQCAtMTEzMyw2ICYjNDM7MTEzOSw3IEBAIGhmc2NfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsIGludCAqcWVycikKIAlzdHJ1Y3QgaGZzY19jbGFzcyAqaGVhZCwgKmNsOwogCXN0cnVjdCB0Y2ZfcmVzdWx0IHJlczsKIAlzdHJ1Y3QgdGNmX3Byb3RvICp0Y2Y7CiYjNDM7CXVuc2lnbmVkIGludCBkcmlmdDsKIAlpbnQgcmVzdWx0OwogCiAJaWYgKFRDX0hfTUFKKHNrYi0mZ3Q7cHJpb3JpdHkgXiBzY2gtJmd0O2hhbmRsZSkgPT0gMCAmYW1wOyZhbXA7CkBAIC0xMTQyLDYgJiM0MzsxMTQ5LDcgQEAgaGZzY19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKQogCiAJKnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7CiAJaGVhZCA9ICZhbXA7cS0mZ3Q7cm9vdDsKJiM0MzsJZHJpZnQgPSBIRlNDX0NMQVNTSUZZX01BWF9EUklGVDsKIAl0Y2YgPSByY3VfZGVyZWZlcmVuY2VfYmgocS0mZ3Q7cm9vdC5maWx0ZXJfbGlzdCk7CiAJd2hpbGUgKHRjZiAmYW1wOyZhbXA7IChyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCB0Y2YsICZhbXA7cmVzLCBmYWxzZSkpICZndDs9IDApIHsKICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QKQEAgLTExNjcsNiAmIzQzOzExNzUsMTYgQEAgaGZzY19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKQogCQlpZiAoY2wtJmd0O2xldmVsID09IDApCiAJCQlyZXR1cm4gY2w7IC8qIGhpdCBsZWFmIGNsYXNzICovCiAKJiM0MzsJCS8qCiYjNDM7CQkgKiBmbG93aWQgYmluZHMgc2tpcCB0aGUgbGV2ZWwgY2hlY2sgYWJvdmUgKHJlcy5jbGFzcyBpcyBzZXQKJiM0MzsJCSAqIGF0IGJpbmQgdGltZSBhbmQgbGV2ZWxzIGRyaWZ0IGFmdGVyKSwgc28gYSB3YWxrIGNhbiBmb2xsb3cKJiM0MzsJCSAqIGxhdGVyYWwgaG9wcyB3aXRob3V0IGRlc2NlbmRpbmc7IGJvdW5kIHRoZW0gaGVyZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGNsLSZndDtsZXZlbCAmZ3Q7PSBoZWFkLSZndDtsZXZlbCAmYW1wOyZhbXA7IGRyaWZ0LS0gPT0gMCkgewomIzQzOwkJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtoZnNjOiBjbGFzc2lmeSBsb29wIGRldGVjdGVkLCBkcm9wcGluZyBwYWNrZXRcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCX0KJiM0MzsKIAkJLyogYXBwbHkgaW5uZXIgZmlsdGVyIGNoYWluICovCiAJCXRjZiA9IHJjdV9kZXJlZmVyZW5jZV9iaChjbC0mZ3Q7ZmlsdGVyX2xpc3QpOwogCQloZWFkID0gY2w7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9oZnNjLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9oZnNjLmpzb24KaW5kZXggYzk4YzMzOTQyNGQ0ZS4uODJkMmY4YWYxNDYwZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvaGZzYy5qc29uCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2hmc2MuanNvbgpAQCAtMTY5LDUgJiM0MzsxNjksMzkgQEAKICAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbCiAgICAgICAgICAgICAmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdCYjMzQ7CiAgICAgICAgIF0KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0OzhjMzkmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O0hGU0MgY2xhc3NpZnkgd2FsayBzdGlsbCByZWFjaGVzIGxlYWYgYWZ0ZXIgbGF0ZXJhbCBkcmlmdCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtxZGlzYyYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7aGZzYyYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtwbHVnaW5zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAmIzM0O3JlcXVpcmVzJiMzNDs6ICYjMzQ7bnNQbHVnaW4mIzM0OwomIzQzOyAgICAgICAgfSwKJiM0MzsgICAgICAgICYjMzQ7c2V0dXAmIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7aXAgbGluayBzZXQgbG8gdXAmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2IGxvIGhhbmRsZSAxOiByb290IGhmc2MgZGVmYXVsdCAzMSYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6IGNsYXNzaWQgMToxIGhmc2MgcnQgbTIgMTAwa2JpdCYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6IGNsYXNzaWQgMToyIGhmc2MgcnQgbTIgMTAwa2JpdCYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6IGNsYXNzaWQgMTozIGhmc2MgcnQgbTIgMTAwa2JpdCYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6MSBjbGFzc2lkIDE6MTAgaGZzYyBydCBtMiA1MGtiaXQmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBjbGFzcyBhZGQgZGV2IGxvIHBhcmVudCAxOjIgY2xhc3NpZCAxOjIwIGhmc2MgcnQgbTIgMTBrYml0JiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMTozIGNsYXNzaWQgMTozMCBoZnNjIHJ0IG0yIDEwa2JpdCYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6MyBjbGFzc2lkIDE6MzEgaGZzYyBydCBtMiAxMDBrYml0JiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgbG8gcGFyZW50IDE6IHByb3RvY29sIGlwIHByaW8gMSB1MzIgbWF0Y2ggdTggMCAwIGF0IDAgZmxvd2lkIDE6MSYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIGZpbHRlciBhZGQgZGV2IGxvIHBhcmVudCAxOjEgcHJvdG9jb2wgaXAgcHJpbyAxIHUzMiBtYXRjaCB1OCAwIDAgYXQgMCBmbG93aWQgMToyJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgbG8gcGFyZW50IDE6MiBwcm90b2NvbCBpcCBwcmlvIDEgdTMyIG1hdGNoIHU4IDAgMCBhdCAwIGZsb3dpZCAxOjMmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiBsbyBwYXJlbnQgMTozIHByb3RvY29sIGlwIHByaW8gMSB1MzIgbWF0Y2ggdTggMCAwIGF0IDAgZmxvd2lkIDE6MzEmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7cGluZyAtbiAtYyAxMCAtVyAxIDEyNy4wLjAuMTsgc2xlZXAgMSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIC1zIGNsYXNzIHNob3cgZGV2IGxvJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O21hdGNoUGF0dGVybiYjMzQ7OiAmIzM0O2NsYXNzIGhmc2MgMTozMSBwYXJlbnQgMTozIHJ0LipcXG4uKlNlbnQgWzAtOV0mIzQzOyBieXRlcyBbMS05XVswLTldKiBwa3QmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hDb3VudCYjMzQ7OiAmIzM0OzEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgbG8gaGFuZGxlIDE6IHJvb3QmIzM0OwomIzQzOyAgICAgICAgXQogICAgIH0KIF0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NzMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLTVNBTi9LQVNBTiBQYXRjaCBmb3IgSEZTQyBDbGFzc2lmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBldmFsdWF0ZSB0aGlzIHBhdGNoIGZvciB0aGUgTGludXgga2VybmVsJiMzOTtzIG1lbW9yeSBlcnJvciBkZXRlY3RvciBmdXp6aW5nLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGNoYW5nZXMgcmVsYXRlZCB0byBLTVNBTiB2ZXJzdXMgS0FTQU4uIExldCYjMzk7cyBkaWcgaW4uCgpUaGUgZGlmZiBpcyBmb2N1c2VkIG9uIHR3byBhcmVhczogYG5ldC9zY2hlZC9zY2hfaGZzYy5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2hmc2MuanNvbmAuIFRoZSBjb2RlIGNoYW5nZXMgbG9vayBpbnRlcmVzdGluZyBhbmQgd29ydGggYSBkZXRhaWxlZCBsb29rLCBhbmQgdGhlIGFkZGl0aW9uIG9mIGEgc2VsZnRlc3QgZm9yIEhGU0MgY2xhc3NpZnkgZHJpZnQgaGludHMgdGhpcyBpcyBpbXBvcnRhbnQgZm9yIGNvdmVyYWdlLgoKRmlyc3QsIGluIGBzY2hfaGZzYy5jYCwgaXQmIzM5O3MgYWRkaW5nIGBIRlNDX0NMQVNTSUZZX01BWF9EUklGVGAsIGFuIGB1bnNpZ25lZCBpbnQgZHJpZnRgIHZhcmlhYmxlLCBhbmQgaW5pdGlhbGl6aW5nIGl0LiBUaGlzIGlzIGZvbGxvd2VkIGJ5IGEgY2hlY2sgd2l0aGluIHRoZSBgd2hpbGVgIGxvb3AgaW5zaWRlIGBoZnNjX2NsYXNzaWZ5YC4gVGhlIGNvZGUgaXMgc3BlY2lmaWNhbGx5IGd1YXJkaW5nIGFnYWluc3Qgc29tZSBraW5kIG9mIGNsYXNzaWZpY2F0aW9uIGxvb3A6IGlmIGBjbC0mZ3Q7bGV2ZWwgJmd0Oz0gaGVhZC0mZ3Q7bGV2ZWxgIGFuZCBgZHJpZnQtLSA9PSAwYCwgYSB3YXJuaW5nIGlzIHByaW50ZWQsIGFuZCB0aGUgcGFja2V0IGlzIGRyb3BwZWQuIFRoaXMgaXMgYSBjbGVhciBhdHRlbXB0IHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCBpbiB0aGUgY2xhc3NpZmllci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb25zdGl0dXRlcyBhICYjMzQ7Y2xhc3NpZnkgbG9vcCYjMzQ7LiBJJiMzOTtsbCBuZWVkIHRvIHJlYWQgbW9yZSBvZiB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgaGZzY19jbGFzc2lmeWAgdG8gc2VlIGhvdyB0aGVzZSBgdGNmYCBzdHJ1Y3R1cmVzIGFyZSBpdGVyYXRlZCBhbmQgaG93IGBjbC0mZ3Q7bGV2ZWxgIGFuZCBgaGVhZC0mZ3Q7bGV2ZWxgIGFyZSBkZWZpbmVkLiBUaGUgZHJpZnQgY291bnRlciBpcyBhY3RpbmcgYXMgYSBzYWZlZ3VhcmQgdG8gYWJvcnQgdGhlIGNsYXNzaWZpY2F0aW9uIGlmIHRoaW5ncyBnZXQgb3V0IG9mIGhhbmQuCgpUaGUgc2Vjb25kIHBhcnQgb2YgdGhlIHBhdGNoIGluY2x1ZGVzIGEgbmV3IHNlbGZ0ZXN0IGluIGBoZnNjLmpzb25gLiBUaGlzIGltcGxpZXMgYSBzcGVjaWZpYyB0ZXN0IGNhc2UgaGFzIGJlZW4gY3JlYXRlZCB0byBleGVyY2lzZSBhbmQgdmFsaWRhdGUgdGhlIG5ldyBkcmlmdCBjaGVjay4gVGhpcyBpcyBzdGFuZGFyZCBwcmFjdGljZSwgYW5kIGNyaXRpY2FsIGZvciB0aGlzIGtpbmQgb2YgY2hhbmdlLiBJdCYjMzk7cyBhIGdvb2Qgc2lnbiB0aGF0IHdlIGhhdmUgYSBzZWxmdGVzdC4gVGhpcyBtZWFucyB0aGUgZGV2ZWxvcGVycyBhcmUgYXR0ZW1wdGluZyB0byB0ZXN0IHNwZWNpZmljYWxseSBmb3IgdGhpcyBjbGFzc2lmeSB3YWxrIGxhdGVyYWwgZHJpZnQuCgpUbyBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIEtNU0FOL0tBU0FOLCBhbmQgaG93IHRoaXMgcmVsYXRlcyB0byBtZW1vcnkgZXJyb3IgZGV0ZWN0aW9uLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNsYXNzaWZpZXIgbG9vcCAqY291bGQqIGxlYWQgdG8gbWVtb3J5IGVycm9ycy4gSSBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGBoZnNjX2NsYXNzaWZ5YCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgbWVtb3J5IGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSBmdXp6aW5nIGlzIHNldCB1cCB0byBlbnN1cmUgdGhpcyBjb2RlIHBhdGggaXMgd2VsbC1leGVyY2lzZWQuIEnigJltIHRoaW5raW5nIHRoZSBkcmlmdCBjaGVjayBpcyBsaWtlbHkgaW50ZW5kZWQgdG8gaGVscCBwcmV2ZW50IGEgc3RhY2sgb3ZlcmZsb3cgb3Igb3RoZXIgbWVtb3J5IGlzc3VlcyB0aGF0IGNvdWxkIGhhcHBlbiBkdWUgdG8gYSBtaXNiZWhhdmluZyBjbGFzc2lmaWNhdGlvbiBsb29wLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIGhvdyBgdGNmX2NsYXNzaWZ5X3FkaXNjYCBpcyBkb2luZyBpdHMgd29yay4gSSB3aWxsIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gcmVhZCBgc2NoX2hmc2MuY2Agc3Vycm91bmRpbmcgYGhmc2NfY2xhc3NpZnlgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfaGZzYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTMwOlx0XG4xMTMxOlx0XHRoZnNjX2Rlc3Ryb3lfY2xhc3Moc2NoLCBjbCk7XG4xMTMyOlx0XHRyZXR1cm4gMDtcbjExMzM6XHR9XG4xMTM0Olx0XG4xMTM1Olx0c3RhdGljIHN0cnVjdCBoZnNjX2NsYXNzICpcbjExMzY6XHRoZnNjX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgKnFlcnIpXG4xMTM3Olx0e1xuMTEzODpcdFx0c3RydWN0IGhmc2Nfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XG4xMTM5Olx0XHRzdHJ1Y3QgaGZzY19jbGFzcyAqaGVhZCwgKmNsO1xuMTE0MDpcdFx0c3RydWN0IHRjZl9yZXN1bHQgcmVzO1xuMTE0MTpcdFx0c3RydWN0IHRjZl9wcm90byAqdGNmO1xuMTE0MjpcdFx0dW5zaWduZWQgaW50IGRyaWZ0O1xuMTE0MzpcdFx0aW50IHJlc3VsdDtcbjExNDQ6XHRcbjExNDU6XHRcdGlmIChUQ19IX01BSihza2ItXHUwMDNlcHJpb3JpdHkgXiBzY2gtXHUwMDNlaGFuZGxlKSA9PSAwIFx1MDAyNlx1MDAyNlxuMTE0NjpcdFx0ICAgIChjbCA9IGhmc2NfZmluZF9jbGFzcyhza2ItXHUwMDNlcHJpb3JpdHksIHNjaCkpICE9IE5VTEwpXG4xMTQ3Olx0XHRcdGlmIChjbC1cdTAwM2VsZXZlbCA9PSAwKVxuMTE0ODpcdFx0XHRcdHJldHVybiBjbDtcbjExNDk6XHRcbjExNTA6XHRcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xuMTE1MTpcdFx0aGVhZCA9IFx1MDAyNnEtXHUwMDNlcm9vdDtcbjExNTI6XHRcdGRyaWZ0ID0gSEZTQ19DTEFTU0lGWV9NQVhfRFJJRlQ7XG4xMTUzOlx0XHR0Y2YgPSByY3VfZGVyZWZlcmVuY2VfYmgocS1cdTAwM2Vyb290LmZpbHRlcl9saXN0KTtcbjExNTQ6XHRcdHdoaWxlICh0Y2YgXHUwMDI2XHUwMDI2IChyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCB0Y2YsIFx1MDAyNnJlcywgZmFsc2UpKSBcdTAwM2U9IDApIHtcbjExNTU6XHQjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG4xMTU2Olx0XHRcdHN3aXRjaCAocmVzdWx0KSB7XG4xMTU3Olx0XHRcdGNhc2UgVENfQUNUX1FVRVVFRDpcbjExNTg6XHRcdFx0Y2FzZSBUQ19BQ1RfU1RPTEVOOlxuMTE1OTpcdFx0XHRjYXNlIFRDX0FDVF9UUkFQOlxuMTE2MDpcdFx0XHRcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfU1RPTEVOO1xuMTE2MTpcdFx0XHRcdGZhbGx0aHJvdWdoO1xuMTE2MjpcdFx0XHRjYXNlIFRDX0FDVF9TSE9UOlxuMTE2MzpcdFx0XHRcdHJldHVybiBOVUxMO1xuMTE2NDpcdFx0XHR9XG4xMTY1Olx0I2VuZGlmXG4xMTY2Olx0XHRcdGNsID0gKHN0cnVjdCBoZnNjX2NsYXNzICopcmVzLmNsYXNzO1xuMTE2NzpcdFx0XHRpZiAoIWNsKSB7XG4xMTY4Olx0XHRcdFx0Y2wgPSBoZnNjX2ZpbmRfY2xhc3MocmVzLmNsYXNzaWQsIHNjaCk7XG4xMTY5Olx0XHRcdFx0aWYgKCFjbClcbjExNzA6XHRcdFx0XHRcdGJyZWFrOyAvKiBmaWx0ZXIgc2VsZWN0ZWQgaW52YWxpZCBjbGFzc2lkICovXG4xMTcxOlx0XHRcdFx0aWYgKGNsLVx1MDAzZWxldmVsIFx1MDAzZT0gaGVhZC1cdTAwM2VsZXZlbClcbjExNzI6XHRcdFx0XHRcdGJyZWFrOyAvKiBmaWx0ZXIgbWF5IG9ubHkgcG9pbnQgZG93bndhcmRzICovXG4xMTczOlx0XHRcdH1cbjExNzQ6XHRcbjExNzU6XHRcdFx0aWYgKGNsLVx1MDAzZWxldmVsID09IDApXG4xMTc2Olx0XHRcdFx0cmV0dXJuIGNsOyAvKiBoaXQgbGVhZiBjbGFzcyAqL1xuMTE3NzpcdFxuMTE3ODpcdFx0XHQvKlxuMTE3OTpcdFx0XHQgKiBmbG93aWQgYmluZHMgc2tpcCB0aGUgbGV2ZWwgY2hlY2sgYWJvdmUgKHJlcy5jbGFzcyBpcyBzZXRcbjExODA6XHRcdFx0ICogYXQgYmluZCB0aW1lIGFuZCBsZXZlbHMgZHJpZnQgYWZ0ZXIpLCBzbyBhIHdhbGsgY2FuIGZvbGxvd1xuMTE4MTpcdFx0XHQgKiBsYXRlcmFsIGhvcHMgd2l0aG91dCBkZXNjZW5kaW5nOyBib3VuZCB0aGVtIGhlcmUuXG4xMTgyOlx0XHRcdCAqL1xuMTE4MzpcdFx0XHRpZiAoY2wtXHUwMDNlbGV2ZWwgXHUwMDNlPSBoZWFkLVx1MDAzZWxldmVsIFx1MDAyNlx1MDAyNiBkcmlmdC0tID09IDApIHtcbjExODQ6XHRcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O2hmc2M6IGNsYXNzaWZ5IGxvb3AgZGV0ZWN0ZWQsIGRyb3BwaW5nIHBhY2tldFxcblwmIzM0Oyk7XG4xMTg1Olx0XHRcdFx0cmV0dXJuIE5VTEw7XG4xMTg2Olx0XHRcdH1cbjExODc6XHRcbjExODg6XHRcdFx0LyogYXBwbHkgaW5uZXIgZmlsdGVyIGNoYWluICovXG4xMTg5Olx0XHRcdHRjZiA9IHJjdV9kZXJlZmVyZW5jZV9iaChjbC1cdTAwM2VmaWx0ZXJfbGlzdCk7XG4xMTkwOlx0XHRcdGhlYWQgPSBjbDtcbjExOTE6XHRcdH1cbjExOTI6XHRcbjExOTM6XHRcdC8qIGNsYXNzaWZpY2F0aW9uIGZhaWxlZCwgdHJ5IGRlZmF1bHQgY2xhc3MgKi9cbjExOTQ6XHRcdGNsID0gaGZzY19maW5kX2NsYXNzKFRDX0hfTUFLRShUQ19IX01BSihzY2gtXHUwMDNlaGFuZGxlKSxcbjExOTU6XHRcdFx0XHRcdCAgICAgICBSRUFEX09OQ0UocS1cdTAwM2VkZWZjbHMpKSwgc2NoKTtcbjExOTY6XHRcdGlmIChjbCA9PSBOVUxMIHx8IGNsLVx1MDAzZWxldmVsIFx1MDAzZSAwKVxuMTE5NzpcdFx0XHRyZXR1cm4gTlVMTDtcbjExOTg6XHRcbjExOTk6XHRcdHJldHVybiBjbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ5MQoJCQkJCQkJb3V0cHV0OiAxNjMKCQkJCQkJCXRob3VnaHRzOiA4NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudCBvZiBIRlNDIENsYXNzaWZpY2F0aW9uIExvb3AgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IEtNU0FOIHNob3VsZCBmbGFnLgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZy4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGFkZGluZyBhIHNhZmVndWFyZCB0byB0aGUgYGhmc2NfY2xhc3NpZnlgIGZ1bmN0aW9uLiBQcmV2aW91c2x5LCBpZiB0cmFmZmljIGNsYXNzaWZpY2F0aW9uIGNoYWlucyBoYWQgYSBjeWNsaWNhbCBzdHJ1Y3R1cmUgKGUuZy4sIEEgcG9pbnRzIHRvIEIsIEIgcG9pbnRzIHRvIEEpIG9yIG5vbi1kZXNjZW5kaW5nIGhvcHMsIHRoZSBgd2hpbGVgIGxvb3Agd2l0aGluIGBoZnNjX2NsYXNzaWZ5YCBjb3VsZCBydW4gaW5kZWZpbml0ZWx5LCBsZWFkaW5nIHRvIGEgaGFuZyBvciBzb2Z0IGxvY2t1cC4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIHdpdGggYSBsb29wIGJvdW5kLiBJdCBpbnRyb2R1Y2VzIGEgYGRyaWZ0YCBjb3VudGVyLCBpbml0aWFsaXplZCB0byBgSEZTQ19DTEFTU0lGWV9NQVhfRFJJRlRgLCB3aGljaCBkZWNyZW1lbnRzIHdpdGggZWFjaCBsb29wIGl0ZXJhdGlvbi4gSWYgYGRyaWZ0YCByZWFjaGVzIHplcm8gKmFuZCogdGhlIGxldmVscyBkb24mIzM5O3QgZm9ybSBhIGRlc2NlbmRpbmcgc3RydWN0dXJlIChpLmUuIGBjbC0mZ3Q7bGV2ZWwgJmd0Oz0gaGVhZC0mZ3Q7bGV2ZWxgKSwgdGhlIGxvb3AgdGVybWluYXRlcywgYW5kIGEgd2FybmluZyBpcyBsb2dnZWQuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnM/IEkgbmVlZCB0byBhbmFseXplIHRoZSBjb2RlIHBhdGggdmVyeSBjYXJlZnVsbHkuCgoxLiAgRG9lcyBpdCB0b3VjaCBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2U/IE5vLCBub3QgYXQgYWxsLiBUaGVyZSBhcmUgbm8gYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmsgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0LCBvciBzb2NrZXQgb3B0aW9ucyBpbnZvbHZlZC4KCjIuICBEb2VzIGl0IGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcz8gTm8uIFRoZSBuZXdseSBpbnRyb2R1Y2VkIHZhcmlhYmxlLCBgZHJpZnRgLCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBpdCBpcyB1c2VkLiBUaGUgdmFyaWFibGVzIGl0IGNvbXBhcmVzIGl0IHRvLCBgY2wtJmd0O2xldmVsYCBhbmQgYGhlYWQtJmd0O2xldmVsYCwgYXJlIGV4aXN0aW5nIGFuZCwgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIHByb3Blcmx5IGluaXRpYWxpemVkIGZpZWxkcyB3aXRoaW4gYHN0cnVjdCBoZnNjX2NsYXNzYC4KCjMuICBEb2VzIHRoaXMgcGF0Y2ggaW52b2x2ZSBhbnkgbmV3IGFsbG9jYXRpb25zIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzPyBOb3BlLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgb3IgZGVhbGxvY2F0aW9ucyBpbnRyb2R1Y2VkLgoKNC4gIERvZXMgaXQgYWx0ZXIgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcz8gTm8uIEl0IGxpbWl0cyB0aGUgbG9vcCBpdGVyYXRpb25zLCBwcmV2ZW50aW5nIGFuIGluZmluaXRlIGxvb3AgZHVyaW5nIHBhY2tldCBjbGFzc2lmaWNhdGlvbiBhbmQgc3Vic2VxdWVudCBoYW5ncy4KCkdpdmVuIHRoZXNlIGZpbmRpbmdzLCBJIGNhbiBjb25maWRlbnRseSBzYXkgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZSBidWcgaXQgZml4ZXPigJR0aGUgaW5maW5pdGUgbG9vcCBhbmQgc29mdCBsb2NrdXDigJRpcyByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBhbmQgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLTVNBTiB3b24mIzM5O3QgY2F0Y2ggdGhpczsgYSB3YXRjaGRvZyBvciBzb2Z0IGxvY2t1cCBkZXRlY3RvciBpcyB3aGF0JiMzOTtzIHJlbGV2YW50IGhlcmUsIGFuZCBldmVuIEtBU0FOIHdvdWxkIGJlIHNvbWV3aGF0IHJlbGV2YW50LCBob3dldmVyLCB0aGUgcHJpbWFyeSBwcm9ibGVtIGZpeGVkIGlzIGEgY29udHJvbCBmbG93IGlzc3VlLCBub3QgbWVtb3J5LiBUaGUgcmVsZXZhbnQgaXNzdWUgaXMgdGhhdCB0aGlzIHBhdGNoIGZpeGVzIGFuIGluZmluaXRlIGxvb3AvZGVuaWFsLW9mLXNlcnZpY2UsIG5vdCBhIG1lbW9yeSBzYWZldHkgaXNzdWUuCgpUaGVyZWZvcmUsIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gVGhlIGFuYWx5c2lzIGlzIGNvbXBsZXRlLCBhbmQgSSBhbSBzYXRpc2ZpZWQgd2l0aCB0aGUgcmVhc29uaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaGZzY19jbGFzc2lmeWAgaW4gYG5ldC9zY2hlZC9zY2hfaGZzYy5jYCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIGNhdXNlZCBieSBsYXRlcmFsIG9yIHVwd2FyZCBjbGFzc2lmaWNhdGlvbiBob3BzIGJ5IGludHJvZHVjaW5nIGEgbG9vcCBjb3VudGVyIChgZHJpZnRgKS4gVGhlIGBkcmlmdGAgbG9jYWwgdmFyaWFibGUgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgSEZTQ19DTEFTU0lGWV9NQVhfRFJJRlRgICg4KSBiZWZvcmUgdGhlIGNsYXNzaWZpY2F0aW9uIGxvb3AsIGFuZCBhbGwgY29tcGFyZWQgZmllbGRzIChgY2wtXHUwMDNlbGV2ZWxgLCBgaGVhZC1cdTAwM2VsZXZlbGApIGFyZSBleGlzdGluZyBpbml0aWFsaXplZCBjbGFzcyBhdHRyaWJ1dGVzLlxuXG5ObyBrZXJuZWwtdG8tdXNlciBkYXRhIHRyYW5zZmVycywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBidWZmZXIgc2l6ZS9vZmZzZXQgY2FsY3VsYXRpb25zIGFyZSBtb2RpZmllZC4gVGhlIHBhdGNoIGRvZXMgbm90IHJlYWQgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtZWFuaW5nIGl0IGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGhmc2NfY2xhc3NpZnlgIGluIGBuZXQvc2NoZWQvc2NoX2hmc2MuY2AgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcyBjYXVzZWQgYnkgbGF0ZXJhbCBvciB1cHdhcmQgY2xhc3NpZmljYXRpb24gaG9wcyBieSBpbnRyb2R1Y2luZyBhIGxvb3AgY291bnRlciAoYGRyaWZ0YCkuIFRoZSBgZHJpZnRgIGxvY2FsIHZhcmlhYmxlIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYEhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUYCAoOCkgYmVmb3JlIHRoZSBjbGFzc2lmaWNhdGlvbiBsb29wLCBhbmQgYWxsIGNvbXBhcmVkIGZpZWxkcyAoYGNsLVx1MDAzZWxldmVsYCwgYGhlYWQtXHUwMDNlbGV2ZWxgKSBhcmUgZXhpc3RpbmcgaW5pdGlhbGl6ZWQgY2xhc3MgYXR0cmlidXRlcy5cblxuTm8ga2VybmVsLXRvLXVzZXIgZGF0YSB0cmFuc2ZlcnMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYnVmZmVyIHNpemUvb2Zmc2V0IGNhbGN1bGF0aW9ucyBhcmUgbW9kaWZpZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbWVhbmluZyBpdCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDA6MjAuNzM5NDE5MDgzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0MzM0MzkyMTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX1NDSF9IRlNDXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhmc2NfY2xhc3NpZnlcIixcbiAgICBcImhmc2NfZW5xdWV1ZVwiLFxuICAgIFwiaGZzY19iaW5kX3RjZlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGhmc2NfY2xhc3NpZnlgIGluIGBuZXQvc2NoZWQvc2NoX2hmc2MuY2AgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcyBjYXVzZWQgYnkgbGF0ZXJhbCBvciB1cHdhcmQgY2xhc3NpZmljYXRpb24gaG9wcyBieSBpbnRyb2R1Y2luZyBhIGxvb3AgY291bnRlciAoYGRyaWZ0YCkuIFRoZSBgZHJpZnRgIGxvY2FsIHZhcmlhYmxlIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYEhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUYCAoOCkgYmVmb3JlIHRoZSBjbGFzc2lmaWNhdGlvbiBsb29wLCBhbmQgYWxsIGNvbXBhcmVkIGZpZWxkcyAoYGNsLVxcdTAwM2VsZXZlbGAsIGBoZWFkLVxcdTAwM2VsZXZlbGApIGFyZSBleGlzdGluZyBpbml0aWFsaXplZCBjbGFzcyBhdHRyaWJ1dGVzLlxcblxcbk5vIGtlcm5lbC10by11c2VyIGRhdGEgdHJhbnNmZXJzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGJ1ZmZlciBzaXplL29mZnNldCBjYWxjdWxhdGlvbnMgYXJlIG1vZGlmaWVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG1lYW5pbmcgaXQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaGZzY19jbGFzc2lmeSBpbiBuZXQvc2NoZWQvc2NoX2hmc2MuYyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIGR1cmluZyBwYWNrZXQgY2xhc3NpZmljYXRpb24gd2hlbiBmaWx0ZXIgY2xhc3MgYmluZGluZ3MgZXhwZXJpZW5jZSBsYXRlcmFsIG9yIHVwd2FyZCBsZXZlbCBkcmlmdCBmb2xsb3dpbmcgY2xhc3MgaGllcmFyY2h5IHVwZGF0ZXMuIFRoZSBjb2RlIGlzIHBhcnQgb2YgdGhlIGNvcmUgdHJhZmZpYyBjb250cm9sIHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgcnRuZXRsaW5rIChjb25maWd1cmluZyBIRlNDIHFkaXNjcywgY2xhc3NlcywgYW5kIGZpbHRlcnMpIGFuZCBzZW5kaW5nIG5ldHdvcmsgdHJhZmZpYy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBlZGdlIGNhc2VzIGluIGNsYXNzIGhpZXJhcmNoeSBtYW5pcHVsYXRpb24sIGZpbHRlciBiaW5kaW5nLCBhbmQgY2xhc3NpZnkgbG9vcCBib3VuZGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDA6MjAuNzM5NDIzODQzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE3MDQ1OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWZjMzA3NDhhMTc1YTU2Y2E5NjNjZjE2ZGVjNzUyY2FlMTA0YjRkNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCAxNCAwOTowMDoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hmc2MuYyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jXFxuaW5kZXggZTg3ZjUwMjFhMTk5NS4uYjA3M2VmYWYyYmY1ZiAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvc2NoX2hmc2MuY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jXFxuQEAgLTM4Niw2ICszODYsMTIgQEAgY2Z0cmVlX3VwZGF0ZShzdHJ1Y3QgaGZzY19jbGFzcyAqY2wpXFxuICNkZWZpbmVcXHRTTV9NQVNLXFx0XFx0KCgxVUxMIFxcdTAwM2NcXHUwMDNjIFNNX1NISUZUKSAtIDEpXFxuICNkZWZpbmVcXHRJU01fTUFTS1xcdCgoMVVMTCBcXHUwMDNjXFx1MDAzYyBJU01fU0hJRlQpIC0gMSlcXG4gXFxuKy8qXFxuKyAqIGJvdW5kIG9uIGNvbnNlY3V0aXZlIG5vbi1kZXNjZW5kaW5nIChsYXRlcmFsIC8gdXB3YXJkKSBob3BzIGluIGFcXG4rICogY2xhc3NpZnkgd2FsaywgbWlycm9yaW5nIGh0YidzIFRDX0hUQl9NQVhERVBUSCBoZWFkcm9vbVxcbisgKi9cXG4rI2RlZmluZVxcdEhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUXFx0OFxcbitcXG4gc3RhdGljIGlubGluZSB1NjRcXG4gc2VnX3gyeSh1NjQgeCwgdTY0IHNtKVxcbiB7XFxuQEAgLTExMzMsNiArMTEzOSw3IEBAIGhmc2NfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsIGludCAqcWVycilcXG4gXFx0c3RydWN0IGhmc2NfY2xhc3MgKmhlYWQsICpjbDtcXG4gXFx0c3RydWN0IHRjZl9yZXN1bHQgcmVzO1xcbiBcXHRzdHJ1Y3QgdGNmX3Byb3RvICp0Y2Y7XFxuK1xcdHVuc2lnbmVkIGludCBkcmlmdDtcXG4gXFx0aW50IHJlc3VsdDtcXG4gXFxuIFxcdGlmIChUQ19IX01BSihza2ItXFx1MDAzZXByaW9yaXR5IF4gc2NoLVxcdTAwM2VoYW5kbGUpID09IDAgXFx1MDAyNlxcdTAwMjZcXG5AQCAtMTE0Miw2ICsxMTQ5LDcgQEAgaGZzY19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKVxcbiBcXG4gXFx0KnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7XFxuIFxcdGhlYWQgPSBcXHUwMDI2cS1cXHUwMDNlcm9vdDtcXG4rXFx0ZHJpZnQgPSBIRlNDX0NMQVNTSUZZX01BWF9EUklGVDtcXG4gXFx0dGNmID0gcmN1X2RlcmVmZXJlbmNlX2JoKHEtXFx1MDAzZXJvb3QuZmlsdGVyX2xpc3QpO1xcbiBcXHR3aGlsZSAodGNmIFxcdTAwMjZcXHUwMDI2IChyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCB0Y2YsIFxcdTAwMjZyZXMsIGZhbHNlKSkgXFx1MDAzZT0gMCkge1xcbiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXFxuQEAgLTExNjcsNiArMTE3NSwxNiBAQCBoZnNjX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgKnFlcnIpXFxuIFxcdFxcdGlmIChjbC1cXHUwMDNlbGV2ZWwgPT0gMClcXG4gXFx0XFx0XFx0cmV0dXJuIGNsOyAvKiBoaXQgbGVhZiBjbGFzcyAqL1xcbiBcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogZmxvd2lkIGJpbmRzIHNraXAgdGhlIGxldmVsIGNoZWNrIGFib3ZlIChyZXMuY2xhc3MgaXMgc2V0XFxuK1xcdFxcdCAqIGF0IGJpbmQgdGltZSBhbmQgbGV2ZWxzIGRyaWZ0IGFmdGVyKSwgc28gYSB3YWxrIGNhbiBmb2xsb3dcXG4rXFx0XFx0ICogbGF0ZXJhbCBob3BzIHdpdGhvdXQgZGVzY2VuZGluZzsgYm91bmQgdGhlbSBoZXJlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGNsLVxcdTAwM2VsZXZlbCBcXHUwMDNlPSBoZWFkLVxcdTAwM2VsZXZlbCBcXHUwMDI2XFx1MDAyNiBkcmlmdC0tID09IDApIHtcXG4rXFx0XFx0XFx0cHJfd2Fybl9yYXRlbGltaXRlZChcXFwiaGZzYzogY2xhc3NpZnkgbG9vcCBkZXRlY3RlZCwgZHJvcHBpbmcgcGFja2V0XFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdC8qIGFwcGx5IGlubmVyIGZpbHRlciBjaGFpbiAqL1xcbiBcXHRcXHR0Y2YgPSByY3VfZGVyZWZlcmVuY2VfYmgoY2wtXFx1MDAzZWZpbHRlcl9saXN0KTtcXG4gXFx0XFx0aGVhZCA9IGNsO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9oZnNjLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9oZnNjLmpzb25cXG5pbmRleCBjOThjMzM5NDI0ZDRlLi44MmQyZjhhZjE0NjBkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2hmc2MuanNvblxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2hmc2MuanNvblxcbkBAIC0xNjksNSArMTY5LDM5IEBAXFxuICAgICAgICAgXFxcInRlYXJkb3duXFxcIjogW1xcbiAgICAgICAgICAgICBcXFwiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XFxcIlxcbiAgICAgICAgIF1cXG4rICAgIH0sXFxuKyAgICB7XFxuKyAgICAgICAgXFxcImlkXFxcIjogXFxcIjhjMzlcXFwiLFxcbisgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIkhGU0MgY2xhc3NpZnkgd2FsayBzdGlsbCByZWFjaGVzIGxlYWYgYWZ0ZXIgbGF0ZXJhbCBkcmlmdFxcXCIsXFxuKyAgICAgICAgXFxcImNhdGVnb3J5XFxcIjogW1xcbisgICAgICAgICAgICBcXFwicWRpc2NcXFwiLFxcbisgICAgICAgICAgICBcXFwiaGZzY1xcXCJcXG4rICAgICAgICBdLFxcbisgICAgICAgIFxcXCJwbHVnaW5zXFxcIjoge1xcbisgICAgICAgICAgICBcXFwicmVxdWlyZXNcXFwiOiBcXFwibnNQbHVnaW5cXFwiXFxuKyAgICAgICAgfSxcXG4rICAgICAgICBcXFwic2V0dXBcXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCJpcCBsaW5rIHNldCBsbyB1cFxcXCIsXFxuKyAgICAgICAgICAgIFxcXCIkVEMgcWRpc2MgYWRkIGRldiBsbyBoYW5kbGUgMTogcm9vdCBoZnNjIGRlZmF1bHQgMzFcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6IGNsYXNzaWQgMToxIGhmc2MgcnQgbTIgMTAwa2JpdFxcXCIsXFxuKyAgICAgICAgICAgIFxcXCIkVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMTogY2xhc3NpZCAxOjIgaGZzYyBydCBtMiAxMDBrYml0XFxcIixcXG4rICAgICAgICAgICAgXFxcIiRUQyBjbGFzcyBhZGQgZGV2IGxvIHBhcmVudCAxOiBjbGFzc2lkIDE6MyBoZnNjIHJ0IG0yIDEwMGtiaXRcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6MSBjbGFzc2lkIDE6MTAgaGZzYyBydCBtMiA1MGtiaXRcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6MiBjbGFzc2lkIDE6MjAgaGZzYyBydCBtMiAxMGtiaXRcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6MyBjbGFzc2lkIDE6MzAgaGZzYyBydCBtMiAxMGtiaXRcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6MyBjbGFzc2lkIDE6MzEgaGZzYyBydCBtMiAxMDBrYml0XFxcIixcXG4rICAgICAgICAgICAgXFxcIiRUQyBmaWx0ZXIgYWRkIGRldiBsbyBwYXJlbnQgMTogcHJvdG9jb2wgaXAgcHJpbyAxIHUzMiBtYXRjaCB1OCAwIDAgYXQgMCBmbG93aWQgMToxXFxcIixcXG4rICAgICAgICAgICAgXFxcIiRUQyBmaWx0ZXIgYWRkIGRldiBsbyBwYXJlbnQgMToxIHByb3RvY29sIGlwIHByaW8gMSB1MzIgbWF0Y2ggdTggMCAwIGF0IDAgZmxvd2lkIDE6MlxcXCIsXFxuKyAgICAgICAgICAgIFxcXCIkVEMgZmlsdGVyIGFkZCBkZXYgbG8gcGFyZW50IDE6MiBwcm90b2NvbCBpcCBwcmlvIDEgdTMyIG1hdGNoIHU4IDAgMCBhdCAwIGZsb3dpZCAxOjNcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGZpbHRlciBhZGQgZGV2IGxvIHBhcmVudCAxOjMgcHJvdG9jb2wgaXAgcHJpbyAxIHUzMiBtYXRjaCB1OCAwIDAgYXQgMCBmbG93aWQgMTozMVxcXCJcXG4rICAgICAgICBdLFxcbisgICAgICAgIFxcXCJjbWRVbmRlclRlc3RcXFwiOiBcXFwicGluZyAtbiAtYyAxMCAtVyAxIDEyNy4wLjAuMTsgc2xlZXAgMVxcXCIsXFxuKyAgICAgICAgXFxcImV4cEV4aXRDb2RlXFxcIjogXFxcIjBcXFwiLFxcbisgICAgICAgIFxcXCJ2ZXJpZnlDbWRcXFwiOiBcXFwiJFRDIC1zIGNsYXNzIHNob3cgZGV2IGxvXFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hQYXR0ZXJuXFxcIjogXFxcImNsYXNzIGhmc2MgMTozMSBwYXJlbnQgMTozIHJ0LipcXFxcXFxcXG4uKlNlbnQgWzAtOV0rIGJ5dGVzIFsxLTldWzAtOV0qIHBrdFxcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoQ291bnRcXFwiOiBcXFwiMVxcXCIsXFxuKyAgICAgICAgXFxcInRlYXJkb3duXFxcIjogW1xcbisgICAgICAgICAgICBcXFwiJFRDIHFkaXNjIGRlbCBkZXYgbG8gaGFuZGxlIDE6IHJvb3RcXFwiXFxuKyAgICAgICAgXVxcbiAgICAgfVxcbiBdXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAwOjIyLjM1NzIwMDY5MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjA1MTkxMDExNjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX1NDSF9IRlNDXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhmc2NfY2xhc3NpZnlcIixcbiAgICBcImhmc2NfZW5xdWV1ZVwiLFxuICAgIFwiaGZzY19iaW5kX3RjZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhmc2NfY2xhc3NpZnkgaW4gbmV0L3NjaGVkL3NjaF9oZnNjLmMgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcyBkdXJpbmcgcGFja2V0IGNsYXNzaWZpY2F0aW9uIHdoZW4gZmlsdGVyIGNsYXNzIGJpbmRpbmdzIGV4cGVyaWVuY2UgbGF0ZXJhbCBvciB1cHdhcmQgbGV2ZWwgZHJpZnQgZm9sbG93aW5nIGNsYXNzIGhpZXJhcmNoeSB1cGRhdGVzLiBUaGUgY29kZSBpcyBwYXJ0IG9mIHRoZSBjb3JlIHRyYWZmaWMgY29udHJvbCBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHJ0bmV0bGluayAoY29uZmlndXJpbmcgSEZTQyBxZGlzY3MsIGNsYXNzZXMsIGFuZCBmaWx0ZXJzKSBhbmQgc2VuZGluZyBuZXR3b3JrIHRyYWZmaWMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgZWRnZSBjYXNlcyBpbiBjbGFzcyBoaWVyYXJjaHkgbWFuaXB1bGF0aW9uLCBmaWx0ZXIgYmluZGluZywgYW5kIGNsYXNzaWZ5IGxvb3AgYm91bmRpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWZjMzA3NDhhMTc1YTU2Y2E5NjNjZjE2ZGVjNzUyY2FlMTA0YjRkNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDA5OjAwOjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9oZnNjLmMgYi9uZXQvc2NoZWQvc2NoX2hmc2MuY1xuaW5kZXggZTg3ZjUwMjFhMTk5NS4uYjA3M2VmYWYyYmY1ZiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfaGZzYy5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2hmc2MuY1xuQEAgLTM4Niw2ICszODYsMTIgQEAgY2Z0cmVlX3VwZGF0ZShzdHJ1Y3QgaGZzY19jbGFzcyAqY2wpXG4gI2RlZmluZVx0U01fTUFTS1x0XHQoKDFVTEwgXHUwMDNjXHUwMDNjIFNNX1NISUZUKSAtIDEpXG4gI2RlZmluZVx0SVNNX01BU0tcdCgoMVVMTCBcdTAwM2NcdTAwM2MgSVNNX1NISUZUKSAtIDEpXG4gXG4rLypcbisgKiBib3VuZCBvbiBjb25zZWN1dGl2ZSBub24tZGVzY2VuZGluZyAobGF0ZXJhbCAvIHVwd2FyZCkgaG9wcyBpbiBhXG4rICogY2xhc3NpZnkgd2FsaywgbWlycm9yaW5nIGh0YidzIFRDX0hUQl9NQVhERVBUSCBoZWFkcm9vbVxuKyAqL1xuKyNkZWZpbmVcdEhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUXHQ4XG4rXG4gc3RhdGljIGlubGluZSB1NjRcbiBzZWdfeDJ5KHU2NCB4LCB1NjQgc20pXG4ge1xuQEAgLTExMzMsNiArMTEzOSw3IEBAIGhmc2NfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsIGludCAqcWVycilcbiBcdHN0cnVjdCBoZnNjX2NsYXNzICpoZWFkLCAqY2w7XG4gXHRzdHJ1Y3QgdGNmX3Jlc3VsdCByZXM7XG4gXHRzdHJ1Y3QgdGNmX3Byb3RvICp0Y2Y7XG4rXHR1bnNpZ25lZCBpbnQgZHJpZnQ7XG4gXHRpbnQgcmVzdWx0O1xuIFxuIFx0aWYgKFRDX0hfTUFKKHNrYi1cdTAwM2Vwcmlvcml0eSBeIHNjaC1cdTAwM2VoYW5kbGUpID09IDAgXHUwMDI2XHUwMDI2XG5AQCAtMTE0Miw2ICsxMTQ5LDcgQEAgaGZzY19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKVxuIFxuIFx0KnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7XG4gXHRoZWFkID0gXHUwMDI2cS1cdTAwM2Vyb290O1xuK1x0ZHJpZnQgPSBIRlNDX0NMQVNTSUZZX01BWF9EUklGVDtcbiBcdHRjZiA9IHJjdV9kZXJlZmVyZW5jZV9iaChxLVx1MDAzZXJvb3QuZmlsdGVyX2xpc3QpO1xuIFx0d2hpbGUgKHRjZiBcdTAwMjZcdTAwMjYgKHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIHRjZiwgXHUwMDI2cmVzLCBmYWxzZSkpIFx1MDAzZT0gMCkge1xuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcbkBAIC0xMTY3LDYgKzExNzUsMTYgQEAgaGZzY19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKVxuIFx0XHRpZiAoY2wtXHUwMDNlbGV2ZWwgPT0gMClcbiBcdFx0XHRyZXR1cm4gY2w7IC8qIGhpdCBsZWFmIGNsYXNzICovXG4gXG4rXHRcdC8qXG4rXHRcdCAqIGZsb3dpZCBiaW5kcyBza2lwIHRoZSBsZXZlbCBjaGVjayBhYm92ZSAocmVzLmNsYXNzIGlzIHNldFxuK1x0XHQgKiBhdCBiaW5kIHRpbWUgYW5kIGxldmVscyBkcmlmdCBhZnRlciksIHNvIGEgd2FsayBjYW4gZm9sbG93XG4rXHRcdCAqIGxhdGVyYWwgaG9wcyB3aXRob3V0IGRlc2NlbmRpbmc7IGJvdW5kIHRoZW0gaGVyZS5cbitcdFx0ICovXG4rXHRcdGlmIChjbC1cdTAwM2VsZXZlbCBcdTAwM2U9IGhlYWQtXHUwMDNlbGV2ZWwgXHUwMDI2XHUwMDI2IGRyaWZ0LS0gPT0gMCkge1xuK1x0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCJoZnNjOiBjbGFzc2lmeSBsb29wIGRldGVjdGVkLCBkcm9wcGluZyBwYWNrZXRcXG5cIik7XG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXHRcdH1cbitcbiBcdFx0LyogYXBwbHkgaW5uZXIgZmlsdGVyIGNoYWluICovXG4gXHRcdHRjZiA9IHJjdV9kZXJlZmVyZW5jZV9iaChjbC1cdTAwM2VmaWx0ZXJfbGlzdCk7XG4gXHRcdGhlYWQgPSBjbDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9oZnNjLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9oZnNjLmpzb25cbmluZGV4IGM5OGMzMzk0MjRkNGUuLjgyZDJmOGFmMTQ2MGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9oZnNjLmpzb25cbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2hmc2MuanNvblxuQEAgLTE2OSw1ICsxNjksMzkgQEBcbiAgICAgICAgIFwidGVhcmRvd25cIjogW1xuICAgICAgICAgICAgIFwiJFRDIHFkaXNjIGRlbCBkZXYgJERVTU1ZIGhhbmRsZSAxOiByb290XCJcbiAgICAgICAgIF1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcIjhjMzlcIixcbisgICAgICAgIFwibmFtZVwiOiBcIkhGU0MgY2xhc3NpZnkgd2FsayBzdGlsbCByZWFjaGVzIGxlYWYgYWZ0ZXIgbGF0ZXJhbCBkcmlmdFwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJxZGlzY1wiLFxuKyAgICAgICAgICAgIFwiaGZzY1wiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW1xuKyAgICAgICAgICAgIFwiaXAgbGluayBzZXQgbG8gdXBcIixcbisgICAgICAgICAgICBcIiRUQyBxZGlzYyBhZGQgZGV2IGxvIGhhbmRsZSAxOiByb290IGhmc2MgZGVmYXVsdCAzMVwiLFxuKyAgICAgICAgICAgIFwiJFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6IGNsYXNzaWQgMToxIGhmc2MgcnQgbTIgMTAwa2JpdFwiLFxuKyAgICAgICAgICAgIFwiJFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6IGNsYXNzaWQgMToyIGhmc2MgcnQgbTIgMTAwa2JpdFwiLFxuKyAgICAgICAgICAgIFwiJFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6IGNsYXNzaWQgMTozIGhmc2MgcnQgbTIgMTAwa2JpdFwiLFxuKyAgICAgICAgICAgIFwiJFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6MSBjbGFzc2lkIDE6MTAgaGZzYyBydCBtMiA1MGtiaXRcIixcbisgICAgICAgICAgICBcIiRUQyBjbGFzcyBhZGQgZGV2IGxvIHBhcmVudCAxOjIgY2xhc3NpZCAxOjIwIGhmc2MgcnQgbTIgMTBrYml0XCIsXG4rICAgICAgICAgICAgXCIkVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMTozIGNsYXNzaWQgMTozMCBoZnNjIHJ0IG0yIDEwa2JpdFwiLFxuKyAgICAgICAgICAgIFwiJFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6MyBjbGFzc2lkIDE6MzEgaGZzYyBydCBtMiAxMDBrYml0XCIsXG4rICAgICAgICAgICAgXCIkVEMgZmlsdGVyIGFkZCBkZXYgbG8gcGFyZW50IDE6IHByb3RvY29sIGlwIHByaW8gMSB1MzIgbWF0Y2ggdTggMCAwIGF0IDAgZmxvd2lkIDE6MVwiLFxuKyAgICAgICAgICAgIFwiJFRDIGZpbHRlciBhZGQgZGV2IGxvIHBhcmVudCAxOjEgcHJvdG9jb2wgaXAgcHJpbyAxIHUzMiBtYXRjaCB1OCAwIDAgYXQgMCBmbG93aWQgMToyXCIsXG4rICAgICAgICAgICAgXCIkVEMgZmlsdGVyIGFkZCBkZXYgbG8gcGFyZW50IDE6MiBwcm90b2NvbCBpcCBwcmlvIDEgdTMyIG1hdGNoIHU4IDAgMCBhdCAwIGZsb3dpZCAxOjNcIixcbisgICAgICAgICAgICBcIiRUQyBmaWx0ZXIgYWRkIGRldiBsbyBwYXJlbnQgMTozIHByb3RvY29sIGlwIHByaW8gMSB1MzIgbWF0Y2ggdTggMCAwIGF0IDAgZmxvd2lkIDE6MzFcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwicGluZyAtbiAtYyAxMCAtVyAxIDEyNy4wLjAuMTsgc2xlZXAgMVwiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIC1zIGNsYXNzIHNob3cgZGV2IGxvXCIsXG4rICAgICAgICBcIm1hdGNoUGF0dGVyblwiOiBcImNsYXNzIGhmc2MgMTozMSBwYXJlbnQgMTozIHJ0LipcXFxcbi4qU2VudCBbMC05XSsgYnl0ZXMgWzEtOV1bMC05XSogcGt0XCIsXG4rICAgICAgICBcIm1hdGNoQ291bnRcIjogXCIxXCIsXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcbisgICAgICAgICAgICBcIiRUQyBxZGlzYyBkZWwgZGV2IGxvIGhhbmRsZSAxOiByb290XCJcbisgICAgICAgIF1cbiAgICAgfVxuIF1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAwOjIyLjM1NzIwMjIyMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI5NDUxOTQ0Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSEZTQyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBUaGUgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCBzbyB0aGF0J3MgdGhlIGNvbnRleHQuIFRoZSBkaWZmIGFmZmVjdHMgYG5ldC9zY2hlZC9zY2hfaGZzYy5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvcWRpc2NzL2hmc2MuanNvbmAuIFNvdW5kcyBsaWtlIGEgZml4IGFuZCBzb21lIGFzc29jaWF0ZWQgdGVzdGluZy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdC5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgd2l0aGluIGBoZnNjX2NsYXNzaWZ5YCBpbiBgc2NoX2hmc2MuY2AuIFRoZXkncmUgaW50cm9kdWNpbmcgYSBgSEZTQ19DTEFTU0lGWV9NQVhfRFJJRlRgIGxpbWl0IHdpdGggYSB2YWx1ZSBvZiA4LiBUaGlzIGlzIGludGVyZXN0aW5nLiBGcm9tIHRoZSBjb2RlLCBpdCBzZWVtcyB0aGV5J3JlIGFkZGluZyBhIGNoZWNrIGZvciBwb3RlbnRpYWwgY2xhc3NpZmljYXRpb24gbG9vcHMsIHBhcnRpY3VsYXJseSB3aGVuIGZsb3cgSURzIGFyZSBpbnZvbHZlZC4gRXNzZW50aWFsbHksIHRoZXkgYXJlIHByZXZlbnRpbmcgcG90ZW50aWFsIGluZmluaXRlIGxvb3BzIGJ5IGRlY3JlbWVudGluZyB0aGUgYGRyaWZ0YCB2YXJpYWJsZSB3aGVuIHRoZSBgbGV2ZWxgIG9mIHRoZSBjdXJyZW50IGNsYXNzIChgY2xgKSBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIHRoZSBgbGV2ZWxgIG9mIHRoZSBoZWFkIGNsYXNzIChgaGVhZGApLiBJZiBgZHJpZnRgIHJlYWNoZXMgemVybywgaXQgaW5kaWNhdGVzIGEgY2xhc3NpZmljYXRpb24gbG9vcCBhbmQgdGhlIHBhY2tldCBnZXRzIGRyb3BwZWQuIFRoYXQncyBhIHJlYXNvbmFibGUgc2FmZWd1YXJkLiBUaGUgYHByX3dhcm5fcmF0ZWxpbWl0ZWRgIHN1Z2dlc3RzIHRoZXkgd2FudCB0byBhdm9pZCBmbG9vZGluZyB0aGUgbG9ncy5cblxuTm93LCBJJ2QgbGlrZSB0byBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIHJlcXVpcmVtZW50IGZvciB0aGUgaW5jbHVzaW9uIG9mIGBzY2hfaGZzYy5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBwcmVyZXF1aXNpdGVzIG9yIGRlcGVuZGVuY2llcyB0aGF0IHRoaXMgY2hhbmdlIG1pZ2h0IGJlIGltcGFjdGluZy4gVXNpbmcgZ3JlcHBlciBzaG91bGQgYmUgdGhlIHF1aWNrZXN0IHdheSB0byBmaW5kIHRoYXQuIEknbGwgc2VhcmNoIGBuZXQvc2NoZWQvS2NvbmZpZ2AgdG8gZ2V0IHRoYXQgaW5mb3JtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNjEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMDo1MS44MDkxNDkxNDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyNjE2MjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9TQ0hfSEZTQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9NDg9Y29uZmlnIE5FVF9TQ0hfSFRCXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy02MS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo2Mjpjb25maWcgTkVUX1NDSF9IRlNDXFxubmV0L3NjaGVkL0tjb25maWctNjMtXFx0dHJpc3RhdGUgXFxcIkhpZXJhcmNoaWNhbCBGYWlyIFNlcnZpY2UgQ3VydmUgKEhGU0MpXFxcIlxcbi0tXFxubmV0L3NjaGVkL01ha2VmaWxlPTM1PW9iai0kKENPTkZJR19ORVRfU0NIX0hUQilcXHQrPSBzY2hfaHRiLm9cXG5uZXQvc2NoZWQvTWFrZWZpbGU6MzY6b2JqLSQoQ09ORklHX05FVF9TQ0hfSEZTQylcXHQrPSBzY2hfaGZzYy5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTM3LW9iai0kKENPTkZJR19ORVRfU0NIX1JFRClcXHQrPSBzY2hfcmVkLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDA6NTEuOTQxNzc2MjI5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTA1ODEzMjcyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0cywgdGFyZ2V0aW5nIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEtjb25maWcgQ29udGV4dCoqXG5cbk9rYXksIGxldCdzIHpvb20gaW4uIExpbmUgNjIgb2YgYG5ldC9zY2hlZC9LY29uZmlnYC4uLiByaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBncmFzcCB0aGUgaW50ZW50IG9mIHRoZSBhdXRob3IgYW5kIHRoZSBpbXBsaWNhdGlvbnMuIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gYWJvdXQgMTAtMjAgbGluZXMgb24gZWl0aGVyIHNpZGUuIEknbSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZSBzZWN0aW9uLiBXaGF0J3MgYmVpbmcgZW5hYmxlZCBvciBkaXNhYmxlZCBpbiB0aGUgY29udGV4dCBvZiB0aGlzIGxpbmU/IElzIGl0IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBxdWV1ZWluZyBkaXNjaXBsaW5lLCBhIHBhcnRpY3VsYXIgZmVhdHVyZSwgb3IgbWF5YmUgc29tZSBkZWJ1Z2dpbmcgb3B0aW9uPyBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gcHJvdmlkZSB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHdoYXQncyBnb2luZyBvbi4gVGhpcyB3aWxsIGhlbHAgaW5mb3JtIHdoZXRoZXIgdGhpcyBzZWN0aW9uIGlzIGtleSB0byB0aGUgb3ZlcmFsbCBmcmFtZXdvcmsgb3IgcG9zc2libHkgYW5jaWxsYXJ5IHRvIG1vcmUgY3JpdGljYWwgZnVuY3Rpb25zLiBJJ2xsIG1lbnRhbGx5IG1hcCBvdXQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgbGluZXMgYXJvdW5kIDYyLCBhbmQgdGhlbiBjaXJjbGUgYmFjayB0byBhbmFseXplIGxpbmUgNjIgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTE1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDE6MDIuNTI0MTQzNzMyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDU4OlxcdFxcbiAgNTk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICA2MDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzY2hfaHRiLlxcbiAgNjE6XFx0XFxuICA2MjpcXHRjb25maWcgTkVUX1NDSF9IRlNDXFxuICA2MzpcXHRcXHR0cmlzdGF0ZSBcXFwiSGllcmFyY2hpY2FsIEZhaXIgU2VydmljZSBDdXJ2ZSAoSEZTQylcXFwiXFxuICA2NDpcXHRcXHRoZWxwXFxuICA2NTpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBIaWVyYXJjaGljYWwgRmFpciBTZXJ2aWNlIEN1cnZlXFxuICA2NjpcXHRcXHQgIChIRlNDKSBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0uXFxuICA2NzpcXHRcXG4gIDY4OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgNjk6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX2hmc2MuXFxuICA3MDpcXHRcXG4gIDcxOlxcdGNvbmZpZyBORVRfU0NIX1BSSU9cXG4gIDcyOlxcdFxcdHRyaXN0YXRlIFxcXCJNdWx0aSBCYW5kIFByaW9yaXR5IFF1ZXVlaW5nIChQUklPKVxcXCJcXG4gIDczOlxcdFxcdGhlbHBcXG4gIDc0OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYW4gbi1iYW5kIHByaW9yaXR5IHF1ZXVlIHBhY2tldFxcbiAgNzU6XFx0XFx0ICBzY2hlZHVsZXIuXFxuICA3NjpcXHRcXG4gIDc3OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMTowMi41MjQzMDc1MjJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzgzNDYwMTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipOYXZpZ2F0aW5nIHRoZSBIRlNDIEtjb25maWcgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBgTkVUX1NDSF9IRlNDYC4gVGltZSB0byBkaWcgaW50byB0aGUgYG5ldC9zY2hlZC9LY29uZmlnYCBmaWxlLiBJJ20gYXNzdW1pbmcgdGhhdCdzIHdoZXJlIHRoZSBkZWZpbml0aW9uIGFuZCBhbnkgY29uc3RyYWludHMgb24gdGhhdCBzY2hlZHVsZXIgd2lsbCBiZS4gSSBuZWVkIHRvIHNlZSBpZiBpdCdzIGRlcGVuZGVudCBvbiBhbnkgb3RoZXIgZmVhdHVyZXMgb3Iga2VybmVsIG9wdGlvbnMuIEFyZSB0aGVyZSBhbnkgcGFyZW50IGRlcGVuZGVuY2llcywgb3IgcGVyaGFwcyBjaGlsZCBkZXBlbmRlbmNpZXM/IFdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbXVzdCBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGZvciBgTkVUX1NDSF9IRlNDYCB0byB3b3JrIGNvcnJlY3RseSwgb3IgZXZlbiB0byBiZSBhdmFpbGFibGUgYXQgYWxsPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcGxhY2UgaW4gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzY2hlZHVsZXIgZWNvc3lzdGVtLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NjMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAxOjA1LjMwNzc3MDk5M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBUcmFmZmljIGNvbnRyb2wgY29uZmlndXJhdGlvbi5cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBORVRfU0NIRURcXG4gICA3OlxcdFxcdGJvb2wgXFxcIlFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1xcXCJcXG4gICA4OlxcdFxcdHNlbGVjdCBORVRfU0NIX0ZJRk9cXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgV2hlbiB0aGUga2VybmVsIGhhcyBzZXZlcmFsIHBhY2tldHMgdG8gc2VuZCBvdXQgb3ZlciBhIG5ldHdvcmtcXG4gIDExOlxcdFxcdCAgZGV2aWNlLCBpdCBoYXMgdG8gZGVjaWRlIHdoaWNoIG9uZXMgdG8gc2VuZCBmaXJzdCwgd2hpY2ggb25lcyB0b1xcbiAgMTI6XFx0XFx0ICBkZWxheSwgYW5kIHdoaWNoIG9uZXMgdG8gZHJvcC4gVGhpcyBpcyB0aGUgam9iIG9mIHRoZSBxdWV1ZWluZ1xcbiAgMTM6XFx0XFx0ICBkaXNjaXBsaW5lcywgc2V2ZXJhbCBkaWZmZXJlbnQgYWxnb3JpdGhtcyBmb3IgaG93IHRvIGRvIHRoaXNcXG4gIDE0OlxcdFxcdCAgXFxcImZhaXJseVxcXCIgaGF2ZSBiZWVuIHByb3Bvc2VkLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHQgIElmIHlvdSBzYXkgTiBoZXJlLCB5b3Ugd2lsbCBnZXQgdGhlIHN0YW5kYXJkIHBhY2tldCBzY2hlZHVsZXIsIHdoaWNoXFxuICAxNzpcXHRcXHQgIGlzIGEgRklGTyAoZmlyc3QgY29tZSwgZmlyc3Qgc2VydmVkKS4gSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlXFxuICAxODpcXHRcXHQgIGFibGUgdG8gY2hvb3NlIGZyb20gYW1vbmcgc2V2ZXJhbCBhbHRlcm5hdGl2ZSBhbGdvcml0aG1zIHdoaWNoIGNhblxcbiAgMTk6XFx0XFx0ICB0aGVuIGJlIGF0dGFjaGVkIHRvIGRpZmZlcmVudCBuZXR3b3JrIGRldmljZXMuIFRoaXMgaXMgdXNlZnVsIGZvclxcbiAgMjA6XFx0XFx0ICBleGFtcGxlIGlmIHNvbWUgb2YgeW91ciBuZXR3b3JrIGRldmljZXMgYXJlIHJlYWwgdGltZSBkZXZpY2VzIHRoYXRcXG4gIDIxOlxcdFxcdCAgbmVlZCBhIGNlcnRhaW4gbWluaW11bSBkYXRhIGZsb3cgcmF0ZSwgb3IgaWYgeW91IG5lZWQgdG8gbGltaXQgdGhlXFxuICAyMjpcXHRcXHQgIG1heGltdW0gZGF0YSBmbG93IHJhdGUgZm9yIHRyYWZmaWMgd2hpY2ggbWF0Y2hlcyBzcGVjaWZpZWQgY3JpdGVyaWEuXFxuICAyMzpcXHRcXHQgIFRoaXMgY29kZSBpcyBjb25zaWRlcmVkIHRvIGJlIGV4cGVyaW1lbnRhbC5cXG4gIDI0OlxcdFxcbiAgMjU6XFx0XFx0ICBUbyBhZG1pbmlzdGVyIHRoZXNlIHNjaGVkdWxlcnMsIHlvdSdsbCBuZWVkIHRoZSB1c2VyLWxldmVsIHV0aWxpdGllc1xcbiAgMjY6XFx0XFx0ICBmcm9tIHRoZSBwYWNrYWdlIGlwcm91dGUyK3RjIGF0XFxuICAyNzpcXHRcXHQgIFxcdTAwM2NodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9uZXQvaXByb3V0ZTIvXFx1MDAzZS4gIFRoYXQgcGFja2FnZVxcbiAgMjg6XFx0XFx0ICBhbHNvIGNvbnRhaW5zIHNvbWUgZG9jdW1lbnRhdGlvbjsgZm9yIG1vcmUsIGNoZWNrIG91dFxcbiAgMjk6XFx0XFx0ICBcXHUwMDNjaHR0cDovL3d3dy5saW51eGZvdW5kYXRpb24ub3JnL2NvbGxhYm9yYXRlL3dvcmtncm91cHMvbmV0d29ya2luZy9pcHJvdXRlMlxcdTAwM2UuXFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdCAgVGhpcyBRdWFsaXR5IG9mIFNlcnZpY2UgKFFvUykgc3VwcG9ydCB3aWxsIGVuYWJsZSB5b3UgdG8gdXNlXFxuICAzMjpcXHRcXHQgIERpZmZlcmVudGlhdGVkIFNlcnZpY2VzIChkaWZmc2VydikgYW5kIFJlc291cmNlIFJlc2VydmF0aW9uIFByb3RvY29sXFxuICAzMzpcXHRcXHQgIChSU1ZQKSBvbiB5b3VyIExpbnV4IHJvdXRlciBpZiB5b3UgYWxzbyBzYXkgWSB0byB0aGUgY29ycmVzcG9uZGluZ1xcbiAgMzQ6XFx0XFx0ICBjbGFzc2lmaWVycyBiZWxvdy4gIERvY3VtZW50YXRpb24gYW5kIHNvZnR3YXJlIGlzIGF0XFxuICAzNTpcXHRcXHQgIFxcdTAwM2NodHRwOi8vZGlmZnNlcnYuc291cmNlZm9yZ2UubmV0L1xcdTAwM2UuXFxuICAzNjpcXHRcXG4gIDM3OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUgYW5kIHRvIFxcXCIvcHJvYyBmaWxlIHN5c3RlbVxcXCIgYmVsb3csIHlvdSB3aWxsIGJlIGFibGVcXG4gIDM4OlxcdFxcdCAgdG8gcmVhZCBzdGF0dXMgaW5mb3JtYXRpb24gYWJvdXQgcGFja2V0IHNjaGVkdWxlcnMgZnJvbSB0aGUgZmlsZVxcbiAgMzk6XFx0XFx0ICAvcHJvYy9uZXQvcHNjaGVkLlxcbiAgNDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAxOjA1LjMwNzk3NjQ1M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc4MjgyMjE2NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkRpZ2dpbmcgaW50byBOZXR3b3JrIFNjaGVkdWxpbmcgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYE5FVF9TQ0hFRGAgYW5kIGBORVRfU0NIX0hGU0NgLCBjbGFzc2ljIG5ldHdvcmsgc2NoZWR1bGVyIHN0dWZmLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSBiZXQgYE5FVF9TQ0hFRGAgaGFzIGEgZGVwZW5kZW5jeSBvbiBhIG1vcmUgZnVuZGFtZW50YWwgbmV0d29yayBmZWF0dXJlLCBsaWtlbHkgYE5FVGAuICBUaW1lIHRvIGNvbmZpcm0gdGhpcyBpbiBgbmV0L0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgTkVUX1NDSEVEYCBlbnRyeS4gSSBuZWVkIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBUaGlzIGluaXRpYWwgYXNzZXNzbWVudCBwcm92aWRlcyB0aGUgYmFzZWxpbmUgY29udGV4dCBvZiBvdGhlciBwb3NzaWJsZSBjb25maWd1cmF0aW9uIGludGVyYWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUzNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDE6MTMuMTM2MjAwNjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDgyMzA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UgXFxcIm5ldC9zY2hlZC9LY29uZmlnXFxcIlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9MjY5PXNvdXJjZSBcXFwibmV0L21hYzgwMjE1NC9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnOjI3MDpzb3VyY2UgXFxcIm5ldC9zY2hlZC9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTI3MS1zb3VyY2UgXFxcIm5ldC9kY2IvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDE6MTMuMjYxMDMyMzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzcwNzU0ODIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gdGhlIEhGU0MgQ2xhc3NpZmljYXRpb24gTG9naWMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgSEZTQyBzY2hlZHVsZXIgaXNzdWUuIFRoZSBwbGFjZSB0byBzdGFydCBpcyBhbG1vc3QgYWx3YXlzIHRoZSBjbGFzc2lmaWNhdGlvbiBwcm9jZXNzLCBhbmQgZm9yIEhGU0MsIHRoYXQgbWVhbnMgdGFraW5nIGEgbG9vayBhdCBgbmV0L3NjaGVkL3NjaF9oZnNjLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgaGZzY19jbGFzc2lmeWAgZnVuY3Rpb24uIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3IgaW4gdGhpcyBjYXNlLCB3aGVyZSB0aGUgcG90ZW50aWFsIHByb2JsZW0gaXMgYnJld2luZy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBIRlNDIGhhbmRsZXMgcGFja2V0IGNsYXNzaWZpY2F0aW9uIOKAkyBpcyBpdCB1c2luZyB0aGUgdHJhZGl0aW9uYWwgY2xhc3NpZmllcnMsIG9yIHNvbWV0aGluZyB1bmlxdWUgdG8gaXRzIGhpZXJhcmNoaWNhbCBzdHJ1Y3R1cmU/IEFyZSB3ZSBkZWFsaW5nIHdpdGggcWRpc2Mtc3BlY2lmaWMgbWF0Y2ggY3JpdGVyaWEsIG9yIGFyZSB0aGV5IGludGVncmF0ZWQgd2l0aCB0aGUgZ2VuZXJpYyBjbGFzc2lmaWVyIGhvb2tzPyBHb3R0YSB1bmRlcnN0YW5kIGhvdyBpdCBkZWNpZGVzIHdoaWNoIGxlYWYgcXVldWUgYSBwYWNrZXQgZ2V0cyBzdGVlcmVkIGludG8uIFRoaXMgY291bGQgYmUgd2hlcmUgdGhlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgb3IgdGhlIG1pcy1jbGFzc2lmaWNhdGlvbiBsaWVzLiBMZXQncyBzZWUgaG93IHRoZSBmbG93IGlzIGhhbmRsZWQgaW4gdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGluZWZmaWNpZW50IGxvb3BzLCBvciBldmVuIGFuIGluY29ycmVjdCBwcmlvcml0eSBtYXBwaW5nIHRoYXQncyBjYXVzaW5nIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODU2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDE6MTYuOTY4NTgzNjMyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX2hmc2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTMwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTMwOlxcdFxcbjExMzE6XFx0XFx0aGZzY19kZXN0cm95X2NsYXNzKHNjaCwgY2wpO1xcbjExMzI6XFx0XFx0cmV0dXJuIDA7XFxuMTEzMzpcXHR9XFxuMTEzNDpcXHRcXG4xMTM1OlxcdHN0YXRpYyBzdHJ1Y3QgaGZzY19jbGFzcyAqXFxuMTEzNjpcXHRoZnNjX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgKnFlcnIpXFxuMTEzNzpcXHR7XFxuMTEzODpcXHRcXHRzdHJ1Y3QgaGZzY19zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG4xMTM5OlxcdFxcdHN0cnVjdCBoZnNjX2NsYXNzICpoZWFkLCAqY2w7XFxuMTE0MDpcXHRcXHRzdHJ1Y3QgdGNmX3Jlc3VsdCByZXM7XFxuMTE0MTpcXHRcXHRzdHJ1Y3QgdGNmX3Byb3RvICp0Y2Y7XFxuMTE0MjpcXHRcXHR1bnNpZ25lZCBpbnQgZHJpZnQ7XFxuMTE0MzpcXHRcXHRpbnQgcmVzdWx0O1xcbjExNDQ6XFx0XFxuMTE0NTpcXHRcXHRpZiAoVENfSF9NQUooc2tiLVxcdTAwM2Vwcmlvcml0eSBeIHNjaC1cXHUwMDNlaGFuZGxlKSA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuMTE0NjpcXHRcXHQgICAgKGNsID0gaGZzY19maW5kX2NsYXNzKHNrYi1cXHUwMDNlcHJpb3JpdHksIHNjaCkpICE9IE5VTEwpXFxuMTE0NzpcXHRcXHRcXHRpZiAoY2wtXFx1MDAzZWxldmVsID09IDApXFxuMTE0ODpcXHRcXHRcXHRcXHRyZXR1cm4gY2w7XFxuMTE0OTpcXHRcXG4xMTUwOlxcdFxcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xcbjExNTE6XFx0XFx0aGVhZCA9IFxcdTAwMjZxLVxcdTAwM2Vyb290O1xcbjExNTI6XFx0XFx0ZHJpZnQgPSBIRlNDX0NMQVNTSUZZX01BWF9EUklGVDtcXG4xMTUzOlxcdFxcdHRjZiA9IHJjdV9kZXJlZmVyZW5jZV9iaChxLVxcdTAwM2Vyb290LmZpbHRlcl9saXN0KTtcXG4xMTU0OlxcdFxcdHdoaWxlICh0Y2YgXFx1MDAyNlxcdTAwMjYgKHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIHRjZiwgXFx1MDAyNnJlcywgZmFsc2UpKSBcXHUwMDNlPSAwKSB7XFxuMTE1NTpcXHQjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXFxuMTE1NjpcXHRcXHRcXHRzd2l0Y2ggKHJlc3VsdCkge1xcbjExNTc6XFx0XFx0XFx0Y2FzZSBUQ19BQ1RfUVVFVUVEOlxcbjExNTg6XFx0XFx0XFx0Y2FzZSBUQ19BQ1RfU1RPTEVOOlxcbjExNTk6XFx0XFx0XFx0Y2FzZSBUQ19BQ1RfVFJBUDpcXG4xMTYwOlxcdFxcdFxcdFxcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfU1RPTEVOO1xcbjExNjE6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuMTE2MjpcXHRcXHRcXHRjYXNlIFRDX0FDVF9TSE9UOlxcbjExNjM6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTE2NDpcXHRcXHRcXHR9XFxuMTE2NTpcXHQjZW5kaWZcXG4xMTY2OlxcdFxcdFxcdGNsID0gKHN0cnVjdCBoZnNjX2NsYXNzICopcmVzLmNsYXNzO1xcbjExNjc6XFx0XFx0XFx0aWYgKCFjbCkge1xcbjExNjg6XFx0XFx0XFx0XFx0Y2wgPSBoZnNjX2ZpbmRfY2xhc3MocmVzLmNsYXNzaWQsIHNjaCk7XFxuMTE2OTpcXHRcXHRcXHRcXHRpZiAoIWNsKVxcbjExNzA6XFx0XFx0XFx0XFx0XFx0YnJlYWs7IC8qIGZpbHRlciBzZWxlY3RlZCBpbnZhbGlkIGNsYXNzaWQgKi9cXG4xMTcxOlxcdFxcdFxcdFxcdGlmIChjbC1cXHUwMDNlbGV2ZWwgXFx1MDAzZT0gaGVhZC1cXHUwMDNlbGV2ZWwpXFxuMTE3MjpcXHRcXHRcXHRcXHRcXHRicmVhazsgLyogZmlsdGVyIG1heSBvbmx5IHBvaW50IGRvd253YXJkcyAqL1xcbjExNzM6XFx0XFx0XFx0fVxcbjExNzQ6XFx0XFxuMTE3NTpcXHRcXHRcXHRpZiAoY2wtXFx1MDAzZWxldmVsID09IDApXFxuMTE3NjpcXHRcXHRcXHRcXHRyZXR1cm4gY2w7IC8qIGhpdCBsZWFmIGNsYXNzICovXFxuMTE3NzpcXHRcXG4xMTc4OlxcdFxcdFxcdC8qXFxuMTE3OTpcXHRcXHRcXHQgKiBmbG93aWQgYmluZHMgc2tpcCB0aGUgbGV2ZWwgY2hlY2sgYWJvdmUgKHJlcy5jbGFzcyBpcyBzZXRcXG4xMTgwOlxcdFxcdFxcdCAqIGF0IGJpbmQgdGltZSBhbmQgbGV2ZWxzIGRyaWZ0IGFmdGVyKSwgc28gYSB3YWxrIGNhbiBmb2xsb3dcXG4xMTgxOlxcdFxcdFxcdCAqIGxhdGVyYWwgaG9wcyB3aXRob3V0IGRlc2NlbmRpbmc7IGJvdW5kIHRoZW0gaGVyZS5cXG4xMTgyOlxcdFxcdFxcdCAqL1xcbjExODM6XFx0XFx0XFx0aWYgKGNsLVxcdTAwM2VsZXZlbCBcXHUwMDNlPSBoZWFkLVxcdTAwM2VsZXZlbCBcXHUwMDI2XFx1MDAyNiBkcmlmdC0tID09IDApIHtcXG4xMTg0OlxcdFxcdFxcdFxcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXFxcImhmc2M6IGNsYXNzaWZ5IGxvb3AgZGV0ZWN0ZWQsIGRyb3BwaW5nIHBhY2tldFxcXFxuXFxcIik7XFxuMTE4NTpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMTg2OlxcdFxcdFxcdH1cXG4xMTg3OlxcdFxcbjExODg6XFx0XFx0XFx0LyogYXBwbHkgaW5uZXIgZmlsdGVyIGNoYWluICovXFxuMTE4OTpcXHRcXHRcXHR0Y2YgPSByY3VfZGVyZWZlcmVuY2VfYmgoY2wtXFx1MDAzZWZpbHRlcl9saXN0KTtcXG4xMTkwOlxcdFxcdFxcdGhlYWQgPSBjbDtcXG4xMTkxOlxcdFxcdH1cXG4xMTkyOlxcdFxcbjExOTM6XFx0XFx0LyogY2xhc3NpZmljYXRpb24gZmFpbGVkLCB0cnkgZGVmYXVsdCBjbGFzcyAqL1xcbjExOTQ6XFx0XFx0Y2wgPSBoZnNjX2ZpbmRfY2xhc3MoVENfSF9NQUtFKFRDX0hfTUFKKHNjaC1cXHUwMDNlaGFuZGxlKSxcXG4xMTk1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBSRUFEX09OQ0UocS1cXHUwMDNlZGVmY2xzKSksIHNjaCk7XFxuMTE5NjpcXHRcXHRpZiAoY2wgPT0gTlVMTCB8fCBjbC1cXHUwMDNlbGV2ZWwgXFx1MDAzZSAwKVxcbjExOTc6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTE5ODpcXHRcXG4xMTk5OlxcdFxcdHJldHVybiBjbDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDE6MTYuOTY4Nzc1NzYyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4OTQwMTQ0MTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGhmc2NfY2xhc3NpZnlgIENhbGxzaXRlcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoZXJlICpleGFjdGx5KiBpcyBgaGZzY19jbGFzc2lmeWAgYmVpbmcgaW52b2tlZD9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gS25vd2luZyB0aGUgY2FsbCBoaWVyYXJjaHkgaXMgZnVuZGFtZW50YWwgdG8gY29tcHJlaGVuZGluZyBpdHMgcm9sZSwgZGVwZW5kZW5jaWVzLCBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgc3lzdGVtLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHZhcmlvdXMgbW9kdWxlcyBvciBjb21wb25lbnRzIHRoYXQgbWlnaHQgYmUgbGV2ZXJhZ2luZyB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgaXRzIGV4ZWN1dGlvbi4gSSBuZWVkIHRvIHRyYWNlIGl0cyB1dGlsaXphdGlvbiB0byBidWlsZCBhIHNvbGlkIHBpY3R1cmUgb2YgaXRzIGludGVncmF0aW9uIGFuZCBiZWhhdmlvci4gQXJlIHdlIGxvb2tpbmcgYXQgaXQgYXMgYSB0b3AtbGV2ZWwgZnVuY3Rpb24sIG9yIGlzIGl0IGJ1cmllZCBkZWVwIHdpdGhpbiBhIGNhbGwgc3RhY2s/IFRoZSBjYWxsaW5nIGNvbnRleHQgaXMgZ29pbmcgdG8gZHJpdmUgaG93IEkgaW50ZXJwcmV0IGl0cyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIzNSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDE6MzUuOTA4OTI0MDU3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTUzNTc0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoZnNjX2NsYXNzaWZ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2hmc2MuYz0xMTM1PXN0YXRpYyBzdHJ1Y3QgaGZzY19jbGFzcyAqXFxubmV0L3NjaGVkL3NjaF9oZnNjLmM6MTEzNjpoZnNjX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgKnFlcnIpXFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTEzNy17XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYz0xNTU2PWhmc2NfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTU2Mi1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYzoxNTYzOlxcdGNsID0gaGZzY19jbGFzc2lmeShza2IsIHNjaCwgXFx1MDAyNmVycik7XFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTU2NC1cXHRpZiAoY2wgPT0gTlVMTCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMTozNi4wMDg0NjY4NDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODQxNzg2NDc2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqSEZTQyBDb2RlIFdhbGt0aHJvdWdoOiBJbml0aWFsIEV4cGxvcmF0aW9uKipcblxuT2theSwgc28gYGhmc2NfY2xhc3NpZnlgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBkZWZpbmVkIHdpdGhpbiBgbmV0L3NjaGVkL3NjaF9oZnNjLmNgLiBJbnRlcmVzdGluZy4gVGhhdCBtZWFucyBpdCdzIG9ubHkgY2FsbGVkIGludGVybmFsbHkgd2l0aGluIHRoYXQgZmlsZSwgc3BlY2lmaWNhbGx5IGJ5IGBoZnNjX2VucXVldWVgLiBBbHJpZ2h0LCBub3cgSSB3YW50IHRvIGdldCBhIGJyb2FkZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQgZml0cyBpbnRvIHRoZSB3aG9sZSBwaWN0dXJlLiBJIG5lZWQgdG8gc2VlIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIGBzY2hfaGZzYy5jYCB0aGF0IGFyZSAqcmVsYXRlZCogdG8gYGhmc2NfY2xhc3NpZnlgLCBwZXJoYXBzIHRocm91Z2ggYmVpbmcgZXhwb3J0ZWQgb3Igb3RoZXJ3aXNlIGludGVyYWN0aW5nLiBMZXQncyBzZWUgaG93IEkgY2FuIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIHRoaXMgcGFydCBvZiB0aGUga2VybmVsLiBOZXh0LCBsZXQncyB6b29tIGluIGEgYml0IGFuZCB0aG9yb3VnaGx5IGV4YW1pbmUgYGhmc2NfZW5xdWV1ZWAuIEknbGwgYWxzbyBuZWVkIHRvIHJldmlzaXQgdGhlIFFkaXNjIG9wZXJhdGlvbnMgZm9yIEhGU0MgdG8gc2VlIGhvdyBpdCBhbGwgY29tZXMgdG9nZXRoZXIuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBpdHMgcm9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY1NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAxOjQ0LjQyNjMzNDcwM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL3NjaF9oZnNjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTU1NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU1NTpcXHRzdGF0aWMgaW50XFxuMTU1NjpcXHRoZnNjX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSlcXG4xNTU3OlxcdHtcXG4xNTU4OlxcdFxcdHVuc2lnbmVkIGludCBsZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7XFxuMTU1OTpcXHRcXHRzdHJ1Y3QgaGZzY19jbGFzcyAqY2w7XFxuMTU2MDpcXHRcXHRpbnQgZXJyO1xcbjE1NjE6XFx0XFx0Ym9vbCBmaXJzdDtcXG4xNTYyOlxcdFxcbjE1NjM6XFx0XFx0Y2wgPSBoZnNjX2NsYXNzaWZ5KHNrYiwgc2NoLCBcXHUwMDI2ZXJyKTtcXG4xNTY0OlxcdFxcdGlmIChjbCA9PSBOVUxMKSB7XFxuMTU2NTpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwMjYgX19ORVRfWE1JVF9CWVBBU1MpXFxuMTU2NjpcXHRcXHRcXHRcXHRxZGlzY19xc3RhdHNfZHJvcChzY2gpO1xcbjE1Njc6XFx0XFx0XFx0X19xZGlzY19kcm9wKHNrYiwgdG9fZnJlZSk7XFxuMTU2ODpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE1Njk6XFx0XFx0fVxcbjE1NzA6XFx0XFxuMTU3MTpcXHRcXHRmaXJzdCA9ICFjbC1cXHUwMDNlcWRpc2MtXFx1MDAzZXEucWxlbjtcXG4xNTcyOlxcdFxcdGVyciA9IHFkaXNjX2VucXVldWUoc2tiLCBjbC1cXHUwMDNlcWRpc2MsIHRvX2ZyZWUpO1xcbjE1NzM6XFx0XFx0aWYgKHVubGlrZWx5KGVyciAhPSBORVRfWE1JVF9TVUNDRVNTKSkge1xcbjE1NzQ6XFx0XFx0XFx0aWYgKG5ldF94bWl0X2Ryb3BfY291bnQoZXJyKSkge1xcbjE1NzU6XFx0XFx0XFx0XFx0Y2wtXFx1MDAzZXFzdGF0cy5kcm9wcysrO1xcbjE1NzY6XFx0XFx0XFx0XFx0cWRpc2NfcXN0YXRzX2Ryb3Aoc2NoKTtcXG4xNTc3OlxcdFxcdFxcdH1cXG4xNTc4OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTU3OTpcXHRcXHR9XFxuMTU4MDpcXHRcXG4xNTgxOlxcdFxcdHFzdGF0c19iYWNrbG9nX2FkZChzY2gsIGxlbik7XFxuMTU4MjpcXHRcXHRxZGlzY19xbGVuX2luYyhzY2gpO1xcbjE1ODM6XFx0XFxuMTU4NDpcXHRcXHRpZiAoZmlyc3QgXFx1MDAyNlxcdTAwMjYgIWNsX2luX2VsX29yX3Z0dHJlZShjbCkpIHtcXG4xNTg1OlxcdFxcdFxcdGlmIChjbC1cXHUwMDNlY2xfZmxhZ3MgXFx1MDAyNiBIRlNDX1JTQylcXG4xNTg2OlxcdFxcdFxcdFxcdGluaXRfZWQoY2wsIGxlbik7XFxuMTU4NzpcXHRcXHRcXHRpZiAoY2wtXFx1MDAzZWNsX2ZsYWdzIFxcdTAwMjYgSEZTQ19GU0MpXFxuMTU4ODpcXHRcXHRcXHRcXHRpbml0X3ZmKGNsLCBsZW4pO1xcbjE1ODk6XFx0XFx0XFx0LypcXG4xNTkwOlxcdFxcdFxcdCAqIElmIHRoaXMgaXMgdGhlIGZpcnN0IHBhY2tldCwgaXNvbGF0ZSB0aGUgaGVhZCBzbyBhbiBldmVudHVhbFxcbjE1OTE6XFx0XFx0XFx0ICogaGVhZCBkcm9wIGJlZm9yZSB0aGUgZmlyc3QgZGVxdWV1ZSBvcGVyYXRpb24gaGFzIG5vIGNoYW5jZVxcbjE1OTI6XFx0XFx0XFx0ICogdG8gaW52YWxpZGF0ZSB0aGUgZGVhZGxpbmUuXFxuMTU5MzpcXHRcXHRcXHQgKi9cXG4xNTk0OlxcdFxcdFxcdGlmIChjbC1cXHUwMDNlY2xfZmxhZ3MgXFx1MDAyNiBIRlNDX1JTQylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDE6NDQuNDI2NTA0MzYzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU2NDQyOTQ3MjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgY29kZSwgcHJlc2VudGVkIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgc2NoX2hmc2MuY2AgLSBRZGlzYyBhbmQgQ2xhc3MgT3BlcmF0aW9ucyoqXG5cblJpZ2h0LCB0aW1lIHRvIGdldCBhIGdvb2QgbG9vayBhdCBob3cgdGhlIEhpZ2ggRmlkZWxpdHkgU2NoZWR1bGluZyAoSEZTQykgcWRpc2MgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmb2N1cyBvbiB0aG9zZSBgcWRpc2Nfb3BzYCBhbmQgYGNsYXNzX29wc2Agc3RydWN0dXJlcyBkZWZpbmVkIHdpdGhpbiBgc2NoX2hmc2MuY2AuIFRoZXNlIGFyZSB0aGUgaGVhcnQgb2YgaG93IEhGU0MgYWN0dWFsbHkgKndvcmtzKiBhdCB0aGUga2VybmVsIGxldmVsLiBUaGV5J2xsIGRpY3RhdGUgZXZlcnl0aGluZyDigJMgZnJvbSBob3cgbmV3IEhGU0MgaW5zdGFuY2VzIGFyZSBjcmVhdGVkIGFuZCBjb25maWd1cmVkICh0aGUgYHFkaXNjX29wc2ApLCB0byBob3cgY2xhc3NlcyBhcmUgYWRkZWQsIHJlbW92ZWQsIHNjaGVkdWxlZCwgYW5kIG1ldHJpY3MgYXJlIGdhdGhlcmVkICh0aGF0J3MgdGhlIGBjbGFzc19vcHNgKS4gSXQncyBhbGwgYWJvdXQgdW5kZXJzdGFuZGluZyBob3cgdGhlc2Ugb3BzIGhvb2sgaW50byB0aGUgY29yZSB0cmFmZmljIGNvbnRyb2wgZnJhbWV3b3JrLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IGRpc3NlY3QgZWFjaCBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiB0aG9zZSBzdHJ1Y3R1cmVzLCBtYWtpbmcgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIEhGU0Mgc2NoZWR1bGluZyBiZWhhdmlvciB0aGV5IGVuY2Fwc3VsYXRlLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAyOjQwLjg2OTQ1NDQ3OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU2OTYyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IFFkaXNjX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvc2NoX2hmc2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2hmc2MuYz0xNjc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzIGhmc2NfY2xhc3Nfb3BzID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTY5MC1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYzoxNjkxOnN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIGhmc2NfcWRpc2Nfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTY5Mi1cXHQuaWRcXHRcXHQ9IFxcXCJoZnNjXFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDI6NDAuOTM1MTU3NDc3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk5MDUyNjAzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlBlZXJpbmcgaW50byB0aGUgQ29yZTogQ2xhc3MgT3BzIGFuZCBRZGlzYyBPcHMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyB0cmFmZmljIHNoYXBpbmcgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGRlZmluaXRpb25zIG9mIHRoZSBjbGFzcyBvcGVyYXRpb25zIChjbGFzcyBvcHMpIGFuZCBxdWV1ZWluZyBkaXNjaXBsaW5lIG9wZXJhdGlvbnMgKHFkaXNjIG9wcykuIFRoZXNlIGFyZSB0aGUgYmVkcm9jaywgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiB0aGUgZW50aXJlIG1lY2hhbmlzbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBtZXRob2RzIHRoZXkgZXhwb3NlLCB3aGF0IGRhdGEgc3RydWN0dXJlcyB0aGV5IGludGVyYWN0IHdpdGgsIGFuZCBob3cgdGhleSBkZWZpbmUgdGhlIGJlaGF2aW9yIG9mIHRoZSB0cmFmZmljIGNvbnRyb2wgc3lzdGVtLiBFc3NlbnRpYWxseSwgSSB3YW50IHRvIHNlZSB3aGF0IGtub2JzIGFyZSBhdmFpbGFibGUgYW5kIGhvdyB0aG9zZSBrbm9icyBhcmUgZGVmaW5lZCB0byBhY3R1YWxseSBtYW5pcHVsYXRlIHRoZSBuZXR3b3JrIHRyYWZmaWMuIFVuZGVyc3RhbmRpbmcgdGhlaXIgZnVuY3Rpb24gYXQgdGhlIGxvd2VzdCBsZXZlbCB3aWxsIGlsbHVtaW5hdGUgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgc3lzdGVtIGFzIGEgd2hvbGUuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBkaXNzZWN0IHRoZXNlIGRlZmluaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDAwOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAyOjUwLjg0MDQxOTk4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX2hmc2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjcwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjcwOlxcdFxcdHFkaXNjX3FzdGF0c19iYWNrbG9nX2RlYyhzY2gsIHNrYik7XFxuMTY3MTpcXHRcXHRxZGlzY19xbGVuX2RlYyhzY2gpO1xcbjE2NzI6XFx0XFxuMTY3MzpcXHRcXHRyZXR1cm4gc2tiO1xcbjE2NzQ6XFx0fVxcbjE2NzU6XFx0XFxuMTY3NjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IFFkaXNjX2NsYXNzX29wcyBoZnNjX2NsYXNzX29wcyA9IHtcXG4xNjc3OlxcdFxcdC5jaGFuZ2VcXHRcXHQ9IGhmc2NfY2hhbmdlX2NsYXNzLFxcbjE2Nzg6XFx0XFx0LmRlbGV0ZVxcdFxcdD0gaGZzY19kZWxldGVfY2xhc3MsXFxuMTY3OTpcXHRcXHQuZ3JhZnRcXHRcXHQ9IGhmc2NfZ3JhZnRfY2xhc3MsXFxuMTY4MDpcXHRcXHQubGVhZlxcdFxcdD0gaGZzY19jbGFzc19sZWFmLFxcbjE2ODE6XFx0XFx0LnFsZW5fbm90aWZ5XFx0PSBoZnNjX3FsZW5fbm90aWZ5LFxcbjE2ODI6XFx0XFx0LmZpbmRcXHRcXHQ9IGhmc2Nfc2VhcmNoX2NsYXNzLFxcbjE2ODM6XFx0XFx0LmJpbmRfdGNmXFx0PSBoZnNjX2JpbmRfdGNmLFxcbjE2ODQ6XFx0XFx0LnVuYmluZF90Y2ZcXHQ9IGhmc2NfdW5iaW5kX3RjZixcXG4xNjg1OlxcdFxcdC50Y2ZfYmxvY2tcXHQ9IGhmc2NfdGNmX2Jsb2NrLFxcbjE2ODY6XFx0XFx0LmR1bXBcXHRcXHQ9IGhmc2NfZHVtcF9jbGFzcyxcXG4xNjg3OlxcdFxcdC5kdW1wX3N0YXRzXFx0PSBoZnNjX2R1bXBfY2xhc3Nfc3RhdHMsXFxuMTY4ODpcXHRcXHQud2Fsa1xcdFxcdD0gaGZzY193YWxrXFxuMTY4OTpcXHR9O1xcbjE2OTA6XFx0XFxuMTY5MTpcXHRzdGF0aWMgc3RydWN0IFFkaXNjX29wcyBoZnNjX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbjE2OTI6XFx0XFx0LmlkXFx0XFx0PSBcXFwiaGZzY1xcXCIsXFxuMTY5MzpcXHRcXHQuaW5pdFxcdFxcdD0gaGZzY19pbml0X3FkaXNjLFxcbjE2OTQ6XFx0XFx0LmNoYW5nZVxcdFxcdD0gaGZzY19jaGFuZ2VfcWRpc2MsXFxuMTY5NTpcXHRcXHQucmVzZXRcXHRcXHQ9IGhmc2NfcmVzZXRfcWRpc2MsXFxuMTY5NjpcXHRcXHQuZGVzdHJveVxcdD0gaGZzY19kZXN0cm95X3FkaXNjLFxcbjE2OTc6XFx0XFx0LmR1bXBcXHRcXHQ9IGhmc2NfZHVtcF9xZGlzYyxcXG4xNjk4OlxcdFxcdC5lbnF1ZXVlXFx0PSBoZnNjX2VucXVldWUsXFxuMTY5OTpcXHRcXHQuZGVxdWV1ZVxcdD0gaGZzY19kZXF1ZXVlLFxcbjE3MDA6XFx0XFx0LnBlZWtcXHRcXHQ9IHFkaXNjX3BlZWtfZGVxdWV1ZWQsXFxuMTcwMTpcXHRcXHQuY2xfb3BzXFx0XFx0PSBcXHUwMDI2aGZzY19jbGFzc19vcHMsXFxuMTcwMjpcXHRcXHQucHJpdl9zaXplXFx0PSBzaXplb2Yoc3RydWN0IGhmc2Nfc2NoZWQpLFxcbjE3MDM6XFx0XFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRVxcbjE3MDQ6XFx0fTtcXG4xNzA1OlxcdE1PRFVMRV9BTElBU19ORVRfU0NIKFxcXCJoZnNjXFxcIik7XFxuMTcwNjpcXHRcXG4xNzA3OlxcdHN0YXRpYyBpbnQgX19pbml0XFxuMTcwODpcXHRoZnNjX2luaXQodm9pZClcXG4xNzA5OlxcdHtcXG4xNzEwOlxcdFxcdHJldHVybiByZWdpc3Rlcl9xZGlzYyhcXHUwMDI2aGZzY19xZGlzY19vcHMpO1xcbjE3MTE6XFx0fVxcbjE3MTI6XFx0XFxuMTcxMzpcXHRzdGF0aWMgdm9pZCBfX2V4aXRcXG4xNzE0OlxcdGhmc2NfY2xlYW51cCh2b2lkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMjo1MC44NDA1ODM1NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MDEyNDM3MDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTeW1ib2wgQ292ZXJhZ2UgZm9yIEhGU0MgU2NoZWR1bGVyIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0byBiZXN0IGhhbmRsZSBzeW1ib2wgY292ZXJhZ2UgZm9yIHRoZSBIRlNDIHNjaGVkdWxlciwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBoZnNjX2NsYXNzaWZ5YC4gIFJpZ2h0LCBgaGZzY19jbGFzc2lmeWAgaXMgKnN0YXRpYyouIE15IGluaXRpYWwgdGhvdWdodCB3YXM6IGNhbiB0aGF0IGJlIGEgZm9jdXMgc3ltYm9sP1xuXG5Ib2xkIG9uLi4uIEkgbmVlZCB0byByZW1lbWJlciB0aGUgbnVhbmNlcyBvZiB0aGUgTGludXgga2VybmVsIHN5bWJvbCB0YWJsZXMuIFN0YXRpYyBmdW5jdGlvbnMgaW4gYC5jYCBmaWxlcyAqb2Z0ZW4qIGhhdmUgc3ltYm9scywgbGlrZSBgaGZzY19jbGFzc2lmeWAgb3Igc29tZXRoaW5nIGxpa2UgYGhmc2NfY2xhc3NpZnkuaXNyYS4wYC4gIFNvLCBsZXQncyBuYWlsIGRvd24gd2hldGhlciBgaGZzY19jbGFzc2lmeWAgaXRzZWxmIGlzIHVzYWJsZSwgb3IgaWYgSSBuZWVkIHRvIGxvb2sgYXQgYWx0ZXJuYXRpdmVzIGxpa2UgYGhmc2NfZW5xdWV1ZWAsIG9yIGJvdGguXG5cbkFoLCBTZWN0aW9uIDQgb2YgdGhlIGRvY3VtZW50YXRpb24gaXMgY3J1Y2lhbCBoZXJlLiBUaGUgZG9jcyBjbGVhcmx5IGV4cGxhaW4gdGhlIGlzc3VlIG9mIGlubGluZWQgKnN0YXRpYyogZnVuY3Rpb25zIGluIGhlYWRlcnM6IHRob3NlIGRvbid0IGdldCBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBCdXQsIGBoZnNjX2NsYXNzaWZ5YCBpc24ndCBpbiBhIGhlYWRlcjsgaXQncyBgc3RhdGljIHN0cnVjdCBoZnNjX2NsYXNzICogaGZzY19jbGFzc2lmeSguLi4pYCBpbiBgc2NoX2hmc2MuY2AuICBHb29kLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGBoZnNjX2NsYXNzaWZ5YCBpcyAqaW5saW5lZCogaW50byBgaGZzY19lbnF1ZXVlYC4gIEl0J3Mgb25seSBjYWxsZWQgb25jZSBpbiBgc2NoX2hmc2MuY2AsIGF0IGxpbmUgMTU2Mywgc28gZGVwZW5kaW5nIG9uIGNvbXBpbGVyIG9wdGltaXphdGlvbiwgdGhlIGNvbXBpbGVyICptaWdodCogaW5saW5lIGBoZnNjX2NsYXNzaWZ5YCBpbnRvIGBoZnNjX2VucXVldWVgLlxuXG5TbywgaXQncyBwcm9iYWJseSBiZXN0IHRvIGxpc3QgKmJvdGgqIGBoZnNjX2NsYXNzaWZ5YCBhbmQgYGhmc2NfZW5xdWV1ZWAgKGFuZCBtYXliZSBldmVuIGBoZnNjX2JpbmRfdGNmYCBhbmQgYGhmc2NfY2hhbmdlX2NsYXNzYCkgYXMgcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMuICBUaGF0IGdpdmVzIG1lIGdvb2QgY292ZXJhZ2UsIHJlZ2FyZGxlc3Mgb2YgdGhlIGNvbXBpbGVyJ3MgaW5saW5pbmcgZGVjaXNpb25zLlxuXG5CdXQgSSByZWFsbHkgc2hvdWxkIHRha2UgYSBzdGVwIGJhY2sgYmVmb3JlIG1ha2luZyBhIGRlY2lzaW9uLiAgTGV0J3Mgbm90IGp1bXAgdGhlIGd1biBhbmQgYmxpbmRseSBkZWZpbmUgdGhlc2Ugc3ltYm9scy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjb2RlIGNoYW5nZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBJIHNob3VsZCBjaGVjayB0aGUgZ2l0IGxvZyBvZiB0aGlzIGNvbW1pdCwgb3IgdGhlIHN1cnJvdW5kaW5nIGNvbW1pdHMsIHRvIGdldCB0aGUgY29udGV4dCBvZiB0aGUgcGF0Y2guIFRoYXQgd2lsbCBjbGFyaWZ5IHRoZSBpbXBhY3Qgb2YgdGhlc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk4NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAyOjU0Ljg1MzAyMjkyM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA4MjA4NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSEZTQ19DTEFTU0lGWV9NQVhfRFJJRlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfaGZzYy5jPTM1Mj1jZnRyZWVfdXBkYXRlKHN0cnVjdCBoZnNjX2NsYXNzICpjbClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTM5Mi0gKi9cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYzozOTM6I2RlZmluZVxcdEhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUXFx0OFxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTM5NC1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jPTExMzY9aGZzY19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTE1MS1cXHRoZWFkID0gXFx1MDAyNnEtXFx1MDAzZXJvb3Q7XFxubmV0L3NjaGVkL3NjaF9oZnNjLmM6MTE1MjpcXHRkcmlmdCA9IEhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUO1xcbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTExNTMtXFx0dGNmID0gcmN1X2RlcmVmZXJlbmNlX2JoKHEtXFx1MDAzZXJvb3QuZmlsdGVyX2xpc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMjo1NC45MzM4NTAyM1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NDUwOTk3MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBDbGFzc2lmaWNhdGlvbiBMb29wIGluIEhGU0MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIHNwZWNpZmljIHByb2JsZW0gYmVpbmcgYWRkcmVzc2VkLiBJIHNlZSB0aGlzIHNuaXBwZXQgZnJvbSBgc2NoX2hmc2MuY2AgYW5kIGltbWVkaWF0ZWx5IHplcm8gaW4gb24gdGhlIGNvcmUgaXNzdWU6IGEgcG9zc2libGUgY2xhc3NpZmljYXRpb24gbG9vcCB3aXRoaW4gdGhlIEhGU0Mgc2NoZWR1bGVyLiBUaGUgY29kZSBzdWdnZXN0cyBhIGNoZWNrIHJlbGF0ZWQgdG8gYGZsb3dpZGAgYmluZGluZ3MsIGJ5cGFzc2luZyBhIGxldmVsIGNoZWNrLCBhbmQgdGhlbiB3aGF0IGFwcGVhcnMgdG8gYmUgYSBtZWNoYW5pc20gdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wLiBUaGUgYGRyaWZ0LS0gPT0gMGAgY2hlY2sgd2l0aGluIHRoYXQgYGlmYCBzdGF0ZW1lbnQgaXMgd2hhdCdzIGNhdGNoaW5nIG15IGV5ZSBhcyBhIHBvdGVudGlhbCBsb29wIGJyZWFrZXIsIGJ1dCB0aGUgYHByX3dhcm5fcmF0ZWxpbWl0ZWRgIG91dHB1dCBzaG93cyB0aGF0IHNvbWV0aGluZyBjb3VsZCBoYXZlIGJlZW4gZGV0ZWN0ZWQuXG5cbkJ1dCB0aGUgY29tbWVudCEgSXTigJlzIHRoZSBjbHVlIEknbSBsb29raW5nIGZvci4gXCJNaXJyb3JpbmcgaHRiJ3MgVENfSFRCX01BWERFUFRIIGhlYWRyb29tLlwiIFRoZSBtZW50aW9uIG9mIGBodGJgIGlzIGNyaXRpY2FsIGhlcmU7IGl0IGltcGxpZXMgYSBjb21wYXJpc29uIG9yIHBvdGVudGlhbCBib3Jyb3dpbmcgb2YgY29uY2VwdHMgZnJvbSB0aGUgSGllcmFyY2hpY2FsIFRva2VuIEJ1Y2tldCBzY2hlZHVsZXIuIFNpbmNlIEhGU0MgaXMgcmVsYXRlZCwgbGV0J3Mgc2VlIGhvdyBgaHRiYCBoYW5kbGVzIHRoaW5ncyEgSSBuZWVkIHRvIGNvbnN1bHQgdGhlIGBuZXQvc2NoZWQvc2NoX2h0Yi5jYCBjb2RlIHRvIHVuZGVyc3RhbmQgaXRzIGRlc2lnbiBhbmQgYW55IHN0cmF0ZWdpZXMgaXQgZW1wbG95cyB0byBwcmV2ZW50IHNpbWlsYXIgaXNzdWVzLiBUaGF0J3MgdGhlIG5leHQgc3RlcDsgdW5kZXJzdGFuZGluZyB0aGUgdW5kZXJseWluZyBwcmluY2lwbGVzIGFuZCBwb3RlbnRpYWwgc2ltaWxhcml0aWVzIG9yIGRpZmZlcmVuY2VzIGluIGhvdyBgaHRiYCBhcHByb2FjaGVzIHRyYWZmaWMgY2xhc3NpZmljYXRpb24gYW5kIGxvb3AgcHJldmVudGlvbiBjb3VsZCBpbGx1bWluYXRlIHRoZSBpc3N1ZSBpbiBIRlNDLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEwNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMzowMS4zODQ4NTE2NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM4MzU3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVENfSFRCX01BWERFUFRIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2hmc2MuYz0zNTI9Y2Z0cmVlX3VwZGF0ZShzdHJ1Y3QgaGZzY19jbGFzcyAqY2wpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0zOTAtICogYm91bmQgb24gY29uc2VjdXRpdmUgbm9uLWRlc2NlbmRpbmcgKGxhdGVyYWwgLyB1cHdhcmQpIGhvcHMgaW4gYVxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjM5MTogKiBjbGFzc2lmeSB3YWxrLCBtaXJyb3JpbmcgaHRiJ3MgVENfSFRCX01BWERFUFRIIGhlYWRyb29tXFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMzkyLSAqL1xcbi0tXFxubmV0L3NjaGVkL3NjaF9odGIuYy00OS0gICAgRWFjaCBjbGFzcyBpcyBhc3NpZ25lZCBsZXZlbC4gTGVhZiBoYXMgQUxXQVlTIGxldmVsIDAgYW5kIHJvb3RcXG5uZXQvc2NoZWQvc2NoX2h0Yi5jOjUwOiAgICBjbGFzc2VzIGhhdmUgbGV2ZWwgVENfSFRCX01BWERFUFRILTEuIEludGVyaW9yIG5vZGVzIGhhcyBsZXZlbFxcbm5ldC9zY2hlZC9zY2hfaHRiLmMtNTEtICAgIG9uZSBsZXNzIHRoYW4gdGhlaXIgcGFyZW50Llxcbi0tXFxubmV0L3NjaGVkL3NjaF9odGIuYz05ND1zdHJ1Y3QgaHRiX2NsYXNzIHtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfaHRiLmMtMTI1LVxcdFxcdHN0cnVjdCBodGJfY2xhc3NfbGVhZiB7XFxubmV0L3NjaGVkL3NjaF9odGIuYzoxMjY6XFx0XFx0XFx0aW50XFx0XFx0ZGVmaWNpdFtUQ19IVEJfTUFYREVQVEhdO1xcbm5ldC9zY2hlZC9zY2hfaHRiLmMtMTI3LVxcdFxcdFxcdHN0cnVjdCBRZGlzY1xcdCpxO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9odGIuYz0xNTA9c3RydWN0IGh0Yl9zY2hlZCB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTE3My1cXHQvKiB0aW1lIG9mIG5lYXJlc3QgZXZlbnQgcGVyIGxldmVsIChyb3cpICovXFxubmV0L3NjaGVkL3NjaF9odGIuYzoxNzQ6XFx0czY0XFx0XFx0XFx0bmVhcl9ldl9jYWNoZVtUQ19IVEJfTUFYREVQVEhdO1xcbm5ldC9zY2hlZC9zY2hfaHRiLmMtMTc1LVxcbm5ldC9zY2hlZC9zY2hfaHRiLmM6MTc2OlxcdGludFxcdFxcdFxcdHJvd19tYXNrW1RDX0hUQl9NQVhERVBUSF07XFxubmV0L3NjaGVkL3NjaF9odGIuYy0xNzctXFxubmV0L3NjaGVkL3NjaF9odGIuYzoxNzg6XFx0c3RydWN0IGh0Yl9sZXZlbFxcdGhsZXZlbFtUQ19IVEJfTUFYREVQVEhdO1xcbm5ldC9zY2hlZC9zY2hfaHRiLmMtMTc5LVxcbi0tXFxubmV0L3NjaGVkL3NjaF9odGIuYz0yMjA9c3RhdGljIHN0cnVjdCBodGJfY2xhc3MgKmh0Yl9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfaHRiLmMtMjY5LVxcbm5ldC9zY2hlZC9zY2hfaHRiLmM6MjcwOlxcdFxcdGlmICgrK2hvcHMgXFx1MDAzZSBUQ19IVEJfTUFYREVQVEgpIHtcXG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTI3MS1cXHRcXHRcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCJodGI6IGNsYXNzaWZ5IGxvb3AgZGV0ZWN0ZWQsIGRyb3BwaW5nIHBhY2tldFxcXFxuXFxcIik7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2h0Yi5jPTgyMD1zdGF0aWMgc3RydWN0IGh0Yl9jbGFzcyAqaHRiX2xvb2t1cF9sZWFmKHN0cnVjdCBodGJfcHJpbyAqaHByaW8sIGNvbnN0IGludCBwcmlvKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9odGIuYy04MjYtXFx0XFx0dTMyICpwaWQ7XFxubmV0L3NjaGVkL3NjaF9odGIuYzo4Mjc6XFx0fSBzdGtbVENfSFRCX01BWERFUFRIXSwgKnNwID0gc3RrO1xcbm5ldC9zY2hlZC9zY2hfaHRiLmMtODI4LVxcbi0tXFxubmV0L3NjaGVkL3NjaF9odGIuYz05NDU9c3RhdGljIHN0cnVjdCBza19idWZmICpodGJfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfaHRiLmMtOTY5LVxcbm5ldC9zY2hlZC9zY2hfaHRiLmM6OTcwOlxcdGZvciAobGV2ZWwgPSAwOyBsZXZlbCBcXHUwMDNjIFRDX0hUQl9NQVhERVBUSDsgbGV2ZWwrKykge1xcbm5ldC9zY2hlZC9zY2hfaHRiLmMtOTcxLVxcdFxcdC8qIGNvbW1vbiBjYXNlIG9wdGltaXphdGlvbiAtIHNraXAgZXZlbnQgaGFuZGxlciBxdWlja2x5ICovXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2h0Yi5jPTE3NjU9c3RhdGljIGludCBodGJfY2hhbmdlX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfaHRiLmMtMTk2NS1cXHRcXHRcXHRwYXJlbnQtXFx1MDAzZWxldmVsID0gKHBhcmVudC1cXHUwMDNlcGFyZW50ID8gcGFyZW50LVxcdTAwM2VwYXJlbnQtXFx1MDAzZWxldmVsXFxubmV0L3NjaGVkL3NjaF9odGIuYzoxOTY2OlxcdFxcdFxcdFxcdFxcdCA6IFRDX0hUQl9NQVhERVBUSCkgLSAxO1xcbm5ldC9zY2hlZC9zY2hfaHRiLmMtMTk2Ny1cXHRcXHRcXHRtZW1zZXQoXFx1MDAyNnBhcmVudC1cXHUwMDNlaW5uZXIsIDAsIHNpemVvZihwYXJlbnQtXFx1MDAzZWlubmVyKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAzOjAxLjQ2ODY5NDMyN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NTg4NzIxMzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGh0Yl9jbGFzc2lmeWAqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2xhc3NpZmljYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhlIEhpZXJhcmNoaWNhbCBUb2tlbiBCdWNrZXQgKEhUQikgc2NoZWR1bGVyLiBJJ20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgYHNjaF9odGIuY2AuIFNwZWNpZmljYWxseSwgSSdtIGFpbWluZyBmb3IgbGluZXMgMjIwIHRvIDI4MC4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIHRvIGNvbnRhaW4gdGhlIGNvcmUgbG9naWMgZm9yIGhvdyBpbmNvbWluZyBwYWNrZXRzIGFyZSBjYXRlZ29yaXplZCBhbmQgYXNzaWduZWQgdG8gdGhlIGFwcHJvcHJpYXRlIEhUQiBjbGFzcy4gSSdtIGFudGljaXBhdGluZyBzb21lIGVzc2VudGlhbCBmdW5jdGlvbiBjYWxscywgbGlrZWx5IGRlYWxpbmcgd2l0aCBwYWNrZXQgbWV0YWRhdGEsIGNsYXNzIGxvb2t1cCwgYW5kIG1heWJlIGV2ZW4gc29tZSBiYXNpYyByYXRlIGxpbWl0aW5nIGNvbnNpZGVyYXRpb25zLiBUaW1lIHRvIHNlZSB3aGF0J3MgYWN0dWFsbHkgdW5kZXIgdGhlIGhvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTg4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDM6MDYuMDU3NDE4NjY3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX2h0Yi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIyMDpcXHRzdGF0aWMgc3RydWN0IGh0Yl9jbGFzcyAqaHRiX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxcbiAyMjE6XFx0XFx0XFx0XFx0XFx0ICAgICAgaW50ICpxZXJyKVxcbiAyMjI6XFx0e1xcbiAyMjM6XFx0XFx0c3RydWN0IGh0Yl9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTtcXG4gMjI0OlxcdFxcdHN0cnVjdCBodGJfY2xhc3MgKmNsO1xcbiAyMjU6XFx0XFx0c3RydWN0IHRjZl9yZXN1bHQgcmVzO1xcbiAyMjY6XFx0XFx0c3RydWN0IHRjZl9wcm90byAqdGNmO1xcbiAyMjc6XFx0XFx0dW5zaWduZWQgaW50IGhvcHMgPSAwO1xcbiAyMjg6XFx0XFx0aW50IHJlc3VsdDtcXG4gMjI5OlxcdFxcbiAyMzA6XFx0XFx0LyogYWxsb3cgdG8gc2VsZWN0IGNsYXNzIGJ5IHNldHRpbmcgc2tiLVxcdTAwM2Vwcmlvcml0eSB0byB2YWxpZCBjbGFzc2lkO1xcbiAyMzE6XFx0XFx0ICogbm90ZSB0aGF0IG5mbWFyayBjYW4gYmUgdXNlZCB0b28gYnkgYXR0YWNoaW5nIGZpbHRlciBmdyB3aXRoIG5vXFxuIDIzMjpcXHRcXHQgKiBydWxlcyBpbiBpdFxcbiAyMzM6XFx0XFx0ICovXFxuIDIzNDpcXHRcXHRpZiAoc2tiLVxcdTAwM2Vwcmlvcml0eSA9PSBzY2gtXFx1MDAzZWhhbmRsZSlcXG4gMjM1OlxcdFxcdFxcdHJldHVybiBIVEJfRElSRUNUO1xcdC8qIFg6MCAoZGlyZWN0IGZsb3cpIHNlbGVjdGVkICovXFxuIDIzNjpcXHRcXHRjbCA9IGh0Yl9maW5kKHNrYi1cXHUwMDNlcHJpb3JpdHksIHNjaCk7XFxuIDIzNzpcXHRcXHRpZiAoY2wpIHtcXG4gMjM4OlxcdFxcdFxcdGlmIChjbC1cXHUwMDNlbGV2ZWwgPT0gMClcXG4gMjM5OlxcdFxcdFxcdFxcdHJldHVybiBjbDtcXG4gMjQwOlxcdFxcdFxcdC8qIFN0YXJ0IHdpdGggaW5uZXIgZmlsdGVyIGNoYWluIGlmIGEgbm9uLWxlYWYgY2xhc3MgaXMgc2VsZWN0ZWQgKi9cXG4gMjQxOlxcdFxcdFxcdHRjZiA9IHJjdV9kZXJlZmVyZW5jZV9iaChjbC1cXHUwMDNlZmlsdGVyX2xpc3QpO1xcbiAyNDI6XFx0XFx0fSBlbHNlIHtcXG4gMjQzOlxcdFxcdFxcdHRjZiA9IHJjdV9kZXJlZmVyZW5jZV9iaChxLVxcdTAwM2VmaWx0ZXJfbGlzdCk7XFxuIDI0NDpcXHRcXHR9XFxuIDI0NTpcXHRcXG4gMjQ2OlxcdFxcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xcbiAyNDc6XFx0XFx0d2hpbGUgKHRjZiBcXHUwMDI2XFx1MDAyNiAocmVzdWx0ID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgdGNmLCBcXHUwMDI2cmVzLCBmYWxzZSkpIFxcdTAwM2U9IDApIHtcXG4gMjQ4OlxcdCNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcXG4gMjQ5OlxcdFxcdFxcdHN3aXRjaCAocmVzdWx0KSB7XFxuIDI1MDpcXHRcXHRcXHRjYXNlIFRDX0FDVF9RVUVVRUQ6XFxuIDI1MTpcXHRcXHRcXHRjYXNlIFRDX0FDVF9TVE9MRU46XFxuIDI1MjpcXHRcXHRcXHRjYXNlIFRDX0FDVF9UUkFQOlxcbiAyNTM6XFx0XFx0XFx0XFx0KnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9TVE9MRU47XFxuIDI1NDpcXHRcXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4gMjU1OlxcdFxcdFxcdGNhc2UgVENfQUNUX1NIT1Q6XFxuIDI1NjpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMjU3OlxcdFxcdFxcdH1cXG4gMjU4OlxcdCNlbmRpZlxcbiAyNTk6XFx0XFx0XFx0Y2wgPSAodm9pZCAqKXJlcy5jbGFzcztcXG4gMjYwOlxcdFxcdFxcdGlmICghY2wpIHtcXG4gMjYxOlxcdFxcdFxcdFxcdGlmIChyZXMuY2xhc3NpZCA9PSBzY2gtXFx1MDAzZWhhbmRsZSlcXG4gMjYyOlxcdFxcdFxcdFxcdFxcdHJldHVybiBIVEJfRElSRUNUO1xcdC8qIFg6MCAoZGlyZWN0IGZsb3cpICovXFxuIDI2MzpcXHRcXHRcXHRcXHRjbCA9IGh0Yl9maW5kKHJlcy5jbGFzc2lkLCBzY2gpO1xcbiAyNjQ6XFx0XFx0XFx0XFx0aWYgKCFjbClcXG4gMjY1OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcdC8qIGZpbHRlciBzZWxlY3RlZCBpbnZhbGlkIGNsYXNzaWQgKi9cXG4gMjY2OlxcdFxcdFxcdH1cXG4gMjY3OlxcdFxcdFxcdGlmICghY2wtXFx1MDAzZWxldmVsKVxcbiAyNjg6XFx0XFx0XFx0XFx0cmV0dXJuIGNsO1xcdC8qIHdlIGhpdCBsZWFmOyByZXR1cm4gaXQgKi9cXG4gMjY5OlxcdFxcbiAyNzA6XFx0XFx0XFx0aWYgKCsraG9wcyBcXHUwMDNlIFRDX0hUQl9NQVhERVBUSCkge1xcbiAyNzE6XFx0XFx0XFx0XFx0cHJfd2Fybl9yYXRlbGltaXRlZChcXFwiaHRiOiBjbGFzc2lmeSBsb29wIGRldGVjdGVkLCBkcm9wcGluZyBwYWNrZXRcXFxcblxcXCIpO1xcbiAyNzI6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDI3MzpcXHRcXHRcXHR9XFxuIDI3NDpcXHRcXHRcXHQvKiB3ZSBoYXZlIGdvdCBpbm5lciBjbGFzczsgYXBwbHkgaW5uZXIgZmlsdGVyIGNoYWluICovXFxuIDI3NTpcXHRcXHRcXHR0Y2YgPSByY3VfZGVyZWZlcmVuY2VfYmgoY2wtXFx1MDAzZWZpbHRlcl9saXN0KTtcXG4gMjc2OlxcdFxcdH1cXG4gMjc3OlxcdFxcdC8qIGNsYXNzaWZpY2F0aW9uIGZhaWxlZDsgdHJ5IHRvIHVzZSBkZWZhdWx0IGNsYXNzICovXFxuIDI3ODpcXHRcXHRjbCA9IGh0Yl9maW5kKFRDX0hfTUFLRShUQ19IX01BSihzY2gtXFx1MDAzZWhhbmRsZSksIHEtXFx1MDAzZWRlZmNscyksIHNjaCk7XFxuIDI3OTpcXHRcXHRpZiAoIWNsIHx8IGNsLVxcdTAwM2VsZXZlbClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDM6MDYuMDU3NTM5ODg3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjkwNjExMzgyODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSEZTQyBDbGFzc2lmaWNhdGlvbiBMb29wIERldGVjdGlvbjogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBoZnNjX2NsYXNzaWZ5YCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSBpdCdzIHRyeWluZyB0byBwcmV2ZW50IGNsYXNzaWZpY2F0aW9uIGxvb3BzLCBhbmQgdGhhdCdzIHNtYXJ0LiBUaGUgY29kZSB1c2VzIHRoaXMgYGRyaWZ0YCB2YXJpYWJsZSBhcyBhIGNvdW50ZXIuIExldCBtZSBzZWUuLi4gYGRyaWZ0ID0gSEZTQ19DTEFTU0lGWV9NQVhfRFJJRlQ7YCAtIG9rYXksIGl0J3MgaW5pdGlhbGl6ZWQgdG8gOC4gVGhlbiwgd2l0aGluIHRoZSBtYWluIGxvb3AsIHRoZXJlJ3MgdGhpcyBjaGVjazogYGlmIChjbC1cdTAwM2VsZXZlbCBcdTAwM2U9IGhlYWQtXHUwMDNlbGV2ZWwgXHUwMDI2XHUwMDI2IGRyaWZ0LS0gPT0gMClgLlxuXG5BaGEhIGBkcmlmdGAgaXMgYW4gYHVuc2lnbmVkIGludGAsIHdoaWNoIGlzIGtleS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhczogd2hlbiBgY2wtXHUwMDNlbGV2ZWwgXHUwMDNlPSBoZWFkLVx1MDAzZWxldmVsYCBhbmQgYGRyaWZ0YCByZWFjaGVzIHplcm8sIGl0IHVuZGVyZmxvd3MgdG8gYFVJTlRfTUFYYCwgYnJlYWtpbmcgdGhlIGxvb3AuIEJ1dCwgYWN0dWFsbHksIHRoYXQncyBpbW1lZGlhdGVseSBoYW5kbGVkLiBTbyB0aGF0J3MgaG93IGl0IHdvcmtzIGF0IGxlYXN0LlxuXG5CdXQgaG9sZCBvbiEgV2hhdCBpZiBgY2wtXHUwMDNlbGV2ZWxgIGlzICpsZXNzKiB0aGFuIGBoZWFkLVx1MDAzZWxldmVsYD8gVGhlbiBgZHJpZnRgIGRvZXNuJ3QgZ2V0IGRlY3JlbWVudGVkISBDb3VsZCB0aGlzIGxlYWQgdG8gaW5maW5pdGUgbG9vcGluZyB3aXRoIGFsdGVybmF0aW5nIGxldmVscywgbGlrZSAxLVx1MDAzZTItXHUwMDNlMS1cdTAwM2UyPyBXaGVuIHRoZSBoZWFkIGlzIGxldmVsIDIgYW5kIHRoZSBjdXJyZW50IGNsYXNzIGlzIGxldmVsIDEsIHRoZSBjb25kaXRpb24gaXMgZmFsc2UsIGBkcmlmdGAgZG9lc24ndCBjaGFuZ2UuIEJ1dCB3aGVuIGhlYWQgaXMgbGV2ZWwgMSwgYW5kIHRoZSBjdXJyZW50IGNsYXNzIGlzIGxldmVsIDIsIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSwgYW5kIGBkcmlmdGAgZGVjcmVtZW50cy4gQWZ0ZXIgbmluZSBob3BzIGxpa2UgdGhhdCwgYGRyaWZ0YCB3aWxsIGhpdCB6ZXJvLCBhbmQgdGhlIGxvb3AgaXMgdGVybWluYXRlZC4gT2theSwgc28gdGhhdCBzb3J0IG9mIGxvb3AgaXMgY292ZXJlZC5cblxuTm93LCB3aGF0IGFib3V0IGxvb3BzICp3aXRoaW4qIHRoZSBzYW1lIGxldmVsPyBTYXksIDEtXHUwMDNlMS1cdTAwM2UxLiBJbiB0aGF0IGNhc2UsIGBjbC1cdTAwM2VsZXZlbCBcdTAwM2U9IGhlYWQtXHUwMDNlbGV2ZWxgIGlzIGFsd2F5cyB0cnVlICgxIFx1MDAzZT0gMSksIGFuZCBgZHJpZnRgIGlzIGRlY3JlbWVudGVkIGVhY2ggdGltZS4gVGhhdCBtYWtlcyBzZW5zZSwgd2UncmUgbm90IGFsbG93aW5nIGEgbG9vcC5cblxuU28sIG9rYXkuIFdlIGhhdmUgdGhpcyBsb29wIGRldGVjdGlvbiBtZWNoYW5pc20uIFdoYXQgYWJvdXQgbG9vcHMgZ29pbmcgKmRvd253YXJkcyo/IENhbiBhIGNsYXNzaWZpY2F0aW9uIGRlc2NlbmQgaW5maW5pdGVseT8gV2l0aCB0aGUgSEZTQyBzY2hlZHVsZXIsIGNhbiB3ZSBidWlsZCBhbiBpbmZpbml0ZWx5IGRlZXAgdHJlZT8gTm8sIEhGU0MgdHJlZXMgYXJlIGZpbml0ZS4gQnV0LCB3YWl0Li4uIGNvdWxkIGEgZmlsdGVyIHNvbWVob3cgYmUgKmJvdW5kKiB0byBhbiBhbmNlc3RvciBvciBzb21ldGhpbmc/IEhtbW0sIG5vLCBsZXZlbHMgYXJlIG9yZGVyZWQsIHNvIGFuY2VzdG9ycyB3b3VsZCBoYXZlIGhpZ2hlciBsZXZlbHMgKHRoZSByb290IGhhcyB0aGUgaGlnaGVzdCBsZXZlbCwgb3IgbGV2ZWwgMCkuXG5cbkxldCdzIGRpZyBhIGJpdCBkZWVwZXIgaW50byB0aGlzIGBsZXZlbGAgY29uY2VwdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGBsZXZlbGAgZmllbGQgaXMgdXNlZCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIHN0cnVjdHVyZSBvZiB0aGUgSEZTQyBzY2hlZHVsZXIuIFRpbWUgdG8gZ3JlcCBmb3IgYC1cdTAwM2VsZXZlbGAgdGhyb3VnaG91dCB0aGUgYG5ldC9zY2hlZC9zY2hfaGZzYy5jYCBjb2RlIHRvIHNlZSB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDgwMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAzOjE1LjExODY4MTY3NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5MjUxODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIi1cXHUwMDNlbGV2ZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF9oZnNjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9oZnNjLmM9MzA3PXZ0dHJlZV9nZXRfbWludnQoc3RydWN0IGhmc2NfY2xhc3MgKmNsLCB1NjQgY3VyX3RpbWUpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0zMTItXFxubmV0L3NjaGVkL3NjaF9oZnNjLmM6MzEzOlxcdHdoaWxlIChjbC1cXHUwMDNlbGV2ZWwgXFx1MDAzZSAwKSB7XFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMzE0LVxcdFxcdGNsID0gdnR0cmVlX2ZpcnN0Zml0KGNsLCBjdXJfdGltZSk7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYz04NDU9aGZzY19hZGp1c3RfbGV2ZWxzKHN0cnVjdCBoZnNjX2NsYXNzICpjbClcXG4tLVxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTg1Mi1cXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIFxcdTAwMjZjbC1cXHUwMDNlY2hpbGRyZW4sIHNpYmxpbmdzKSB7XFxubmV0L3NjaGVkL3NjaF9oZnNjLmM6ODUzOlxcdFxcdFxcdGlmIChwLVxcdTAwM2VsZXZlbCBcXHUwMDNlPSBsZXZlbClcXG5uZXQvc2NoZWQvc2NoX2hmc2MuYzo4NTQ6XFx0XFx0XFx0XFx0bGV2ZWwgPSBwLVxcdTAwM2VsZXZlbCArIDE7XFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtODU1LVxcdFxcdH1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYzo4NTY6XFx0XFx0V1JJVEVfT05DRShjbC1cXHUwMDNlbGV2ZWwsIGxldmVsKTtcXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy04NTctXFx0fSB3aGlsZSAoKGNsID0gY2wtXFx1MDAzZWNsX3BhcmVudCkgIT0gTlVMTCk7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYz05MTg9aGZzY19jaGFuZ2VfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkLCB1MzIgcGFyZW50aWQsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMDg0LVxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmNsLVxcdTAwM2VzaWJsaW5ncywgXFx1MDAyNnBhcmVudC1cXHUwMDNlY2hpbGRyZW4pO1xcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjEwODU6XFx0aWYgKHBhcmVudC1cXHUwMDNlbGV2ZWwgPT0gMClcXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMDg2LVxcdFxcdHFkaXNjX3B1cmdlX3F1ZXVlKHBhcmVudC1cXHUwMDNlcWRpc2MpO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9oZnNjLmM9MTEwOT1oZnNjX2RlbGV0ZV9jbGFzcyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBhcmcsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMTE0LVxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjExMTU6XFx0aWYgKGNsLVxcdTAwM2VsZXZlbCBcXHUwMDNlIDAgfHwgcWRpc2NfY2xhc3NfaW5fdXNlKFxcdTAwMjZjbC1cXHUwMDNlY2xfY29tbW9uKSB8fFxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTExMTYtXFx0ICAgIGNsID09IFxcdTAwMjZxLVxcdTAwM2Vyb290KSB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYz0xMTM2PWhmc2NfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsIGludCAqcWVycilcXG4tLVxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTExNDYtXFx0ICAgIChjbCA9IGhmc2NfZmluZF9jbGFzcyhza2ItXFx1MDAzZXByaW9yaXR5LCBzY2gpKSAhPSBOVUxMKVxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjExNDc6XFx0XFx0aWYgKGNsLVxcdTAwM2VsZXZlbCA9PSAwKVxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTExNDgtXFx0XFx0XFx0cmV0dXJuIGNsO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTE3MC1cXHRcXHRcXHRcXHRicmVhazsgLyogZmlsdGVyIHNlbGVjdGVkIGludmFsaWQgY2xhc3NpZCAqL1xcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjExNzE6XFx0XFx0XFx0aWYgKGNsLVxcdTAwM2VsZXZlbCBcXHUwMDNlPSBoZWFkLVxcdTAwM2VsZXZlbClcXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMTcyLVxcdFxcdFxcdFxcdGJyZWFrOyAvKiBmaWx0ZXIgbWF5IG9ubHkgcG9pbnQgZG93bndhcmRzICovXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMTc0LVxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjExNzU6XFx0XFx0aWYgKGNsLVxcdTAwM2VsZXZlbCA9PSAwKVxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTExNzYtXFx0XFx0XFx0cmV0dXJuIGNsOyAvKiBoaXQgbGVhZiBjbGFzcyAqL1xcbi0tXFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTE4Mi1cXHRcXHQgKi9cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYzoxMTgzOlxcdFxcdGlmIChjbC1cXHUwMDNlbGV2ZWwgXFx1MDAzZT0gaGVhZC1cXHUwMDNlbGV2ZWwgXFx1MDAyNlxcdTAwMjYgZHJpZnQtLSA9PSAwKSB7XFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTE4NC1cXHRcXHRcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCJoZnNjOiBjbGFzc2lmeSBsb29wIGRldGVjdGVkLCBkcm9wcGluZyBwYWNrZXRcXFxcblxcXCIpO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTE5NS1cXHRcXHRcXHRcXHQgICAgICAgUkVBRF9PTkNFKHEtXFx1MDAzZWRlZmNscykpLCBzY2gpO1xcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjExOTY6XFx0aWYgKGNsID09IE5VTEwgfHwgY2wtXFx1MDAzZWxldmVsIFxcdTAwM2UgMClcXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMTk3LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9oZnNjLmM9MTIwMz1oZnNjX2dyYWZ0X2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZywgc3RydWN0IFFkaXNjICpuZXcsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMjA3LVxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jOjEyMDg6XFx0aWYgKGNsLVxcdTAwM2VsZXZlbCBcXHUwMDNlIDApXFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTIwOS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jPTEyMjI9aGZzY19jbGFzc19sZWFmKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTEyMjUtXFxubmV0L3NjaGVkL3NjaF9oZnNjLmM6MTIyNjpcXHRpZiAoY2wtXFx1MDAzZWxldmVsID09IDApXFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTIyNy1cXHRcXHRyZXR1cm4gY2wtXFx1MDAzZXFkaXNjO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9oZnNjLmM9MTI1Mz1oZnNjX2JpbmRfdGNmKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIHBhcmVudCwgdTMyIGNsYXNzaWQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMjU4LVxcdGlmIChjbCAhPSBOVUxMKSB7XFxubmV0L3NjaGVkL3NjaF9oZnNjLmM6MTI1OTpcXHRcXHRpZiAocCAhPSBOVUxMIFxcdTAwMjZcXHUwMDI2IHAtXFx1MDAzZWxldmVsIFxcdTAwM2M9IGNsLVxcdTAwM2VsZXZlbClcXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMjYwLVxcdFxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9oZnNjLmM9MTMyNj1oZnNjX2R1bXBfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTMzNC1cXHR0Y20tXFx1MDAzZXRjbV9oYW5kbGUgPSBjbC1cXHUwMDNlY2xfY29tbW9uLmNsYXNzaWQ7XFxubmV0L3NjaGVkL3NjaF9oZnNjLmM6MTMzNTpcXHRpZiAoY2wtXFx1MDAzZWxldmVsID09IDApXFxubmV0L3NjaGVkL3NjaF9oZnNjLmMtMTMzNi1cXHRcXHR0Y20tXFx1MDAzZXRjbV9pbmZvID0gY2wtXFx1MDAzZXFkaXNjLVxcdTAwM2VoYW5kbGU7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYz0xMzUxPWhmc2NfZHVtcF9jbGFzc19zdGF0cyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBhcmcsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2hmc2MuYy0xMzU4LVxcdHFkaXNjX3FzdGF0c19xbGVuX2JhY2tsb2coY2wtXFx1MDAzZXFkaXNjLCBcXHUwMDI2cWxlbiwgXFx1MDAyNmNsLVxcdTAwM2Vxc3RhdHMuYmFja2xvZyk7XFxubmV0L3NjaGVkL3NjaF9oZnNjLmM6MTM1OTpcXHR4c3RhdHMubGV2ZWwgICA9IFJFQURfT05DRShjbC1cXHUwMDNlbGV2ZWwpO1xcbm5ldC9zY2hlZC9zY2hfaGZzYy5jLTEzNjAtXFx0eHN0YXRzLnBlcmlvZCAgPSBSRUFEX09OQ0UoY2wtXFx1MDAzZWNsX3Z0cGVyaW9kKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDM6MTUuMjM3OTM4NTU2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEyNTE2NTAzMzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEV2YWx1YXRpb246IEhGU0MgQ2xhc3NpZmljYXRpb24gTG9vcCBQcmV2ZW50aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYW4gZXhwZXJ0IHBlcnNwZWN0aXZlLiBJJ20gbG9va2luZyBhdCBgaGZzY19iaW5kX3RjZmAgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY2xhc3MgbGV2ZWxzIHdpdGhpbiB0aGUgSEZTQyBxZGlzYy4gVGhlIGtleSBpc3N1ZSBpcyB0aGlzIHBvdGVudGlhbCBkcmlmdCBpbiBjbGFzcyBsZXZlbHMgYWZ0ZXIgYmluZGluZywgc3BlY2lmaWNhbGx5IGhvdyBgY2wtXHUwMDNlbGV2ZWxgIGNhbiBiZSBhZGp1c3RlZCBieSBgaGZzY19hZGp1c3RfbGV2ZWxzYCBwb3N0LWJpbmRpbmcuXG5cbkluaXRpYWxseSwgYHAtXHUwMDNlbGV2ZWwgXHUwMDNjPSBjbC1cdTAwM2VsZXZlbGAgYWN0cyBhcyBhIHNhZmVndWFyZCBkdXJpbmcgdGhlIGJpbmQgb3BlcmF0aW9uLiBIb3dldmVyLCBwb3N0LWJpbmQsIHRoZSBsZXZlbCBvZiBgY2xgIGNhbiBjaGFuZ2UuIFRoaXMgaXMgdGhlIGNydXggb2YgdGhlIHByb2JsZW0uIFByZXZpb3VzbHksIGluIGBoZnNjX2NsYXNzaWZ5YCwgaWYgYHJlcy5jbGFzc2Agd2FzIG5vbi1OVUxMIChpbmRpY2F0aW5nIGEgZGlyZWN0IGJpbmQgd2l0aCwgc2F5LCBhIGZsb3dpZCksIHRoZSBsZXZlbCBjaGVjayBgaWYgKGNsLVx1MDAzZWxldmVsIFx1MDAzZT0gaGVhZC1cdTAwM2VsZXZlbCkgYnJlYWs7YCB3YXMgYnlwYXNzZWQuIFRoaXMgaXMgYmFkLiBUaGlzIG1lYW50IHRoYXQgaWYgbGV2ZWxzIGRyaWZ0ZWQgYWZ0ZXIgdGhlIGJpbmQsIHRoZXJlIHdhcyBub3RoaW5nIHRvIHByZXZlbnQgdXMgZnJvbSBlbnRlcmluZyBhIGNsYXNzaWZpY2F0aW9uIGxvb3AgYmVjYXVzZSB0aGUgY29tcGFyaXNvbiBgY2wtXHUwMDNlbGV2ZWwgXHUwMDNlPSBoZWFkLVx1MDAzZWxldmVsYCB3YXMgc2tpcHBlZC5cblxuVGhpcyBsZWFkcyBkaXJlY3RseSB0byB0aGUgY29yZSBwcm9ibGVtOiBhIHBvdGVudGlhbCBpbmZpbml0ZSBsb29wIHdpdGhpbiBgaGZzY19jbGFzc2lmeWAgZHVyaW5nIHBhY2tldCBlbnF1ZXVlLCB1bHRpbWF0ZWx5IHRyaWdnZXJpbmcgYSBzb2Z0IGxvY2t1cC4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIHdpdGggdGhlIGBIRlNDX0NMQVNTSUZZX01BWF9EUklGVGAgY291bnRlciwgYWN0aW5nIGFzIGEgZmFpbHNhZmUgYW5kIGxvZ2dpbmcgYSB3YXJuaW5nLiBUaGUgcGF0Y2ggYWRkcyBhIHRlcm1pbmF0aW9uIHRvIHRoaXMgY2xhc3NpZmljYXRpb24gbG9vcC5cblxuTm93LCBsZXQncyBhc3Nlc3MgdGhlIGZ1enppbmcgcG90ZW50aWFsLlxuXG4xLiAgKipSZWFjaGFiaWxpdHk6KiogQWJzb2x1dGVseSByZWFjaGFibGUhIEhGU0MgaXMgYSBzdGFuZGFyZCBxZGlzYywgY29uZmlndXJlZCB2aWEgbmV0bGluayAocnRuZXRsaW5rKSwgYW5kIHRodXMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB3aXRoIHRoZSBgQ0FQX05FVF9BRE1JTmAgY2FwYWJpbGl0eSwgbWVhbmluZyBpdCdzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSB1c2luZyBsb29wYmFjaywgZHVtbXksIG9yIHZldGggaW50ZXJmYWNlcy4gUGFja2V0IGVucXVldWUgdGhyb3VnaCBzb2NrZXRzIChgc2VuZHRvYCwgYHNlbmRtc2dgLCBldGMuKSBoaXRzIGBoZnNjX2VucXVldWVgIGFuZCB1bHRpbWF0ZWx5IGBoZnNjX2NsYXNzaWZ5YC5cblxuMi4gICoqQ29yZSBUcmlhZ2UgUGhpbG9zb3BoeToqKlxuICAgICogICBSZWFjaGFibGU/IFllcy5cbiAgICAqICAgQ29yZSBTdWJzeXN0ZW1zPyBUaGlzIHBhdGNoIGRpcmVjdGx5IHRvdWNoZXMgY29yZSBuZXR3b3JraW5nLCBzcGVjaWZpY2FsbHkgcGFja2V0IHNjaGVkdWxpbmcgKGBuZXQvc2NoZWRgKS5cbiAgICAqICAgTmV3L01vZGlmaWVkIENoZWNrcz8gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjcml0aWNhbCBtb2RpZmljYXRpb24gdG8gdGhlIGNsYXNzaWZpY2F0aW9uIGxvb3AgdGVybWluYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nLCBtYWtpbmcgdGhlIHBhdGNoIGV2ZW4gbW9yZSBpbnRlcmVzdGluZy5cbiAgICAqICAgTmVnYXRpdmUgQ3JpdGVyaWE/IE5vOiBrZXJuZWwgY29kZSwgc3RydWN0dXJhbGx5IHJlYWNoYWJsZSBhbmQgZXhlY3V0aW9uIHBhdGggcmVhY2hhYmxlIVxuXG4qKlRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IFdvcnRoRnV6emluZy4qKiBUaGUgbW9kaWZpY2F0aW9ucyBkaXJlY3RseSBpbXBhY3QgYSBjcml0aWNhbCBkYXRhIHBhdGggYW5kIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBhIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnQuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gVG8gZWZmZWN0aXZlbHkgdGFyZ2V0IHRoaXMsIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBIRlNDIHFkaXNjIGlzIGVuYWJsZWQsIGFsb25nIHdpdGggdGhlIHJlbGV2YW50IGNsYXNzaWZpZXIgYW5kIGFjdGlvbiBzdXBwb3J0LCBzaW5jZSBjbGFzc2lmaWNhdGlvbiBhbmQgYXNzb2NpYXRlZCBmaWx0ZXJzIGFyZSBpbnRlZ3JhbCB0byB0aGUgYnVnOlxuXG4xLiAgKipgTkVUX1NDSF9IRlNDYDoqKiBUaGlzIGlzIHRoZSBwcmltYXJ5IGNvbmZpZywgc291cmNlZCBmcm9tIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIEl0J3MgYSB0cmlzdGF0ZSwgYW5kIHJlcXVpcmVzIGBORVRfU0NIRURgIHRvIGJlIGVuYWJsZWQsIHdoaWNoIGluIHR1cm4gZGVwZW5kcyBvbiBgTkVUYC5cbjIuICAqKmBORVRfU0NIRURgOioqIFJlcXVpcmVkLCBkZXBlbmRzIG9uIGBORVRgLlxuMy4gICoqYENPTkZJR19ORVRfQ0xTX0FDVGA6KiogVGhpcyBpcyBuZWVkZWQgZm9yIGNsYXNzaWZpZXJzIGFuZCBhY3Rpb25zLCB0byBjbGFzc2lmeSBhbmQgYXBwbHkgYSBkaWZmZXJlbnQgYWN0aW9uIHRvIGEgcGFja2V0IGJhc2VkIG9uIGEgbWF0Y2hpbmcgZmlsdGVyLlxuNC4gICoqYE5FVF9DTFNfVTMyYCBvciBzaW1pbGFyIGZpbHRlcnMgKGBORVRfQ0xTX0JBU0lDYCwgYE5FVF9DTFNfQUNUYCkqKjogdG8gbWFrZSB0aGUgY2xhc3NpZmljYXRpb24gbG9naWMgaW4gYGhmc2NfY2xhc3NpZnlgIHJ1bi5cblxuVGhlcmVmb3JlLCB3ZSdsbCBuZWVkIHRvIGVuYWJsZSBgTkVUYCwgYE5FVF9TQ0hFRGAsIGBORVRfU0NIX0hGU0NgLCBgTkVUX0NMU19BQ1RgLCBhbmQgYSBzdWl0YWJsZSBmaWx0ZXIgbGlrZSBgTkVUX0NMU19VMzJgLiBXaXRoIHRoYXQsIHdlJ3JlIHNldCB0byBiZWdpbiBhIGZ1enppbmcgY2FtcGFpZ24gdG8gdGFyZ2V0IHRoaXMgSEZTQyBxZGlzYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2NTksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAzOjI3Ljc1NDQ0NDAxOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMjIxNjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQ0xTX0FDVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9NjkwPWNvbmZpZyBORVRfRU1BVENIX0lQVFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNzAxLVxcbm5ldC9zY2hlZC9LY29uZmlnOjcwMjpjb25maWcgTkVUX0NMU19BQ1RcXG5uZXQvc2NoZWQvS2NvbmZpZy03MDMtXFx0Ym9vbCBcXFwiQWN0aW9uc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDM6MjcuODU1NjcwNzcyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5NTQwODQ2Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEhGU0MgVHJhZmZpYyBDb250cm9sIGZvciBGdXp6aW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGZ1enppbmcgdGhlIEhGU0MgKEhpZXJhcmNoaWNhbCBGYWlyIFNlcnZpY2UgQ3VydmUpIHRyYWZmaWMgY29udHJvbCBzY2hlZHVsZXIuIEZpcnN0IHRoaW5ncyBmaXJzdCwgd2UgbmVlZCB0byBjb25maXJtIG91ciBrZXJuZWwgY29uZmlncyBhcmUgaW4gcGxhY2U6IGBORVRfU0NIRURgLCBgTkVUX1NDSF9IRlNDYCwgYW5kIGBORVRfQ0xTX0FDVGAg4oCTIGNoZWNrLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gZm9jdXMgdGhlIGZ1enplci4gVGhlIGd1aWRpbmcgcHJpbmNpcGxlIGZyb20gU2VjdGlvbiA0IG9mIG91ciBkb2N1bWVudCBpcyBrZXkgaGVyZTogYXZvaWQgZ2VuZXJpYyBmdW5jdGlvbnMsIHRhcmdldCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeSBwb2ludHMuIFdlJ3JlIGludGVyZXN0ZWQgaW4gdGhlIGNvZGUgZGlyZWN0bHkgdG91Y2hlZCBieSB0aGUgcGF0Y2guXG5cbkxldCdzIGRyaWxsIGRvd24gaW50byBgbmV0L3NjaGVkL3NjaF9oZnNjLmNgLiBUaGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBpcyBgaGZzY19jbGFzc2lmeWAsIHRoZSBmdW5jdGlvbiBkaXJlY3RseSBtb2RpZmllZCBieSB0aGUgcGF0Y2guIEJ1dCBsZXQncyBnbyBkZWVwZXIuIGBoZnNjX2VucXVldWVgIGlzIHRoZSBkaXJlY3QgY2FsbGVyIG9mIGBoZnNjX2NsYXNzaWZ5YCBpbiB0aGUgcXVldWluZyBwYXRoIOKAkyBjcml0aWNhbCEgVGhlbiwgYGhmc2NfYmluZF90Y2ZgIGJpbmRzIHRoZSBmaWx0ZXIsIHdoaWNoIG1pZ2h0IGxlYWQgdXMgZG93biB0aGlzIHBhdGguIFRoZW4gYGhmc2NfY2hhbmdlX2NsYXNzYCBhbmQgYGhmc2NfaW5pdF9xZGlzY2AgLyBgaGZzY19kZXN0cm95X3FkaXNjYCBhcmUgdGhlcmUuXG5cbkNhbiB3ZSBsaXN0IGBoZnNjX2NsYXNzaWZ5YCBhbmQgYGhmc2NfZW5xdWV1ZWA/IEFic29sdXRlbHkuIGBoZnNjX2NsYXNzaWZ5YCBoYW5kbGVzIHBhY2tldCBjbGFzc2lmaWNhdGlvbiwgYW5kIGBoZnNjX2VucXVldWVgIGhhbmRsZXMgdGhlIGVucXVldWUgcGF0aC4gTGV0J3MgbWFrZSBzdXJlIGBoZnNjX2NsYXNzaWZ5YCBpc24ndCBpbmxpbmVkIC0gYW5kIGl0J3Mgc3RhdGljIG9uIGxpbmUgMTEzNTogYHN0YXRpYyBzdHJ1Y3QgaGZzY19jbGFzcyAqIGhmc2NfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsIGludCAqcWVycilgLiBJdCdzIG5vdCBpbmxpbmUsIHNvIGl0J3MgbGlrZWx5IHByZXNlbnQgaW4gdGhlIHN5bWJvbCB0YWJsZSBpbiBhbnkgc2FuZSBidWlsZC4gRXZlbiBpZiBpdCdzIGlubGluZWQgaW4gdGhlIGZ1dHVyZSwgd2Ugc3RpbGwgaGF2ZSBgaGZzY19lbnF1ZXVlYCB3aGljaCB3aWxsIGJlIHByZXNlbnQuIFRoZXJlZm9yZSwgYGhmc2NfY2xhc3NpZnlgIGFuZCBgaGZzY19lbnF1ZXVlYCAoYW5kIHBlcmhhcHMgYGhmc2NfYmluZF90Y2ZgKSBhcmUgaWRlYWwgZm9jdXMgc3ltYm9scy5cblxuV2h5IHRoZXNlPyBUaGUgcGF0Y2ggbW9kaWZpZXMgYGhmc2NfY2xhc3NpZnlgIHRvIHByZXZlbnQgaW5maW5pdGUgY2xhc3NpZmljYXRpb24gbG9vcHMgcmVsYXRlZCB0byBmaWx0ZXIgYmluZGluZ3MgKGBmbG93aWRgKSB0aGF0IGV4cGVyaWVuY2UgbGF0ZXJhbCBkcmlmdCBhZnRlciBjbGFzcyBtdXRhdGlvbnMuIEl0J3MgbGltaXRpbmcgdGhlIG51bWJlciBvZiBjbGFzc2lmaWNhdGlvbiBob3BzIHZpYSBgSEZTQ19DTEFTU0lGWV9NQVhfRFJJRlRgICg4IGhvcHMpIGFuZCB3aWxsIGRyb3AgcGFja2V0cyBpZiB3ZSBoaXQgdGhhdC4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgdHJhZmZpYyBjb250cm9sLCBwb3RlbnRpYWxseSByZWFjaGFibGUgdGhyb3VnaCBuZXRsaW5rIGNvbW1hbmRzIChgdGMgcWRpc2NgLCBgdGMgY2xhc3NgLCBgdGMgZmlsdGVyYCkgYW5kIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgY29kZSB0aGF0J3Mgd29ydGggZnV6emluZyFcblxuU28sIHRvIHN1bW1hcml6ZTpcblxuKiAgICoqQ29uZmlnczoqKiBgTkVUX1NDSEVEYCwgYE5FVF9TQ0hfSEZTQ2AsIGBORVRfQ0xTX0FDVGBcbiogICAqKkZvY3VzIFN5bWJvbHM6KiogYGhmc2NfY2xhc3NpZnlgLCBgaGZzY19lbnF1ZXVlYCwgYGhmc2NfYmluZF90Y2ZgXG5cbkxldCdzIGRvIGEgZmluYWwgcmV2aWV3LiBJIHRoaW5rIHdlJ3ZlIGNvdmVyZWQgb3VyIGJhc2VzLiBSZWFkeSB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3NzQsIk91dHB1dFRva2VucyI6MTgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAzOjQ3LjM5NjUyMTAxMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTY4NzI1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfU0NIX0hGU0NcIixcbiAgICBcIk5FVF9DTFNfQUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGZzY19jbGFzc2lmeVwiLFxuICAgIFwiaGZzY19lbnF1ZXVlXCIsXG4gICAgXCJoZnNjX2JpbmRfdGNmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaGZzY19jbGFzc2lmeSBpbiBuZXQvc2NoZWQvc2NoX2hmc2MuYyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIGR1cmluZyBwYWNrZXQgY2xhc3NpZmljYXRpb24gd2hlbiBmaWx0ZXIgY2xhc3MgYmluZGluZ3MgZXhwZXJpZW5jZSBsYXRlcmFsIG9yIHVwd2FyZCBsZXZlbCBkcmlmdCBmb2xsb3dpbmcgY2xhc3MgaGllcmFyY2h5IHVwZGF0ZXMuIFRoZSBjb2RlIGlzIHBhcnQgb2YgdGhlIGNvcmUgdHJhZmZpYyBjb250cm9sIHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgcnRuZXRsaW5rIChjb25maWd1cmluZyBIRlNDIHFkaXNjcywgY2xhc3NlcywgYW5kIGZpbHRlcnMpIGFuZCBzZW5kaW5nIG5ldHdvcmsgdHJhZmZpYy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBlZGdlIGNhc2VzIGluIGNsYXNzIGhpZXJhcmNoeSBtYW5pcHVsYXRpb24sIGZpbHRlciBiaW5kaW5nLCBhbmQgY2xhc3NpZnkgbG9vcCBib3VuZGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfSEZTQ1wiLFxuICAgIFwiTkVUX0NMU19BQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNjX2NsYXNzaWZ5XCIsXG4gICAgXCJoZnNjX2VucXVldWVcIixcbiAgICBcImhmc2NfYmluZF90Y2ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBoZnNjX2NsYXNzaWZ5IGluIG5ldC9zY2hlZC9zY2hfaGZzYy5jIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMgZHVyaW5nIHBhY2tldCBjbGFzc2lmaWNhdGlvbiB3aGVuIGZpbHRlciBjbGFzcyBiaW5kaW5ncyBleHBlcmllbmNlIGxhdGVyYWwgb3IgdXB3YXJkIGxldmVsIGRyaWZ0IGZvbGxvd2luZyBjbGFzcyBoaWVyYXJjaHkgdXBkYXRlcy4gVGhlIGNvZGUgaXMgcGFydCBvZiB0aGUgY29yZSB0cmFmZmljIGNvbnRyb2wgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBydG5ldGxpbmsgKGNvbmZpZ3VyaW5nIEhGU0MgcWRpc2NzLCBjbGFzc2VzLCBhbmQgZmlsdGVycykgYW5kIHNlbmRpbmcgbmV0d29yayB0cmFmZmljLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGVkZ2UgY2FzZXMgaW4gY2xhc3MgaGllcmFyY2h5IG1hbmlwdWxhdGlvbiwgZmlsdGVyIGJpbmRpbmcsIGFuZCBjbGFzc2lmeSBsb29wIGJvdW5kaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMzo0Ny41NDgyMTY2MjdaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTI1NTc5MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDM6NDcuNTQ4ODk1Njg2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTc1MjQ4OTIxMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBoZnNjX2NsYXNzaWZ5YCBpbiBgbmV0L3NjaGVkL3NjaF9oZnNjLmNgIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMgY2F1c2VkIGJ5IGxhdGVyYWwgb3IgdXB3YXJkIGNsYXNzaWZpY2F0aW9uIGhvcHMgYnkgaW50cm9kdWNpbmcgYSBsb29wIGNvdW50ZXIgKGBkcmlmdGApLiBUaGUgYGRyaWZ0YCBsb2NhbCB2YXJpYWJsZSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBIRlNDX0NMQVNTSUZZX01BWF9EUklGVGAgKDgpIGJlZm9yZSB0aGUgY2xhc3NpZmljYXRpb24gbG9vcCwgYW5kIGFsbCBjb21wYXJlZCBmaWVsZHMgKGBjbC1cXHUwMDNlbGV2ZWxgLCBgaGVhZC1cXHUwMDNlbGV2ZWxgKSBhcmUgZXhpc3RpbmcgaW5pdGlhbGl6ZWQgY2xhc3MgYXR0cmlidXRlcy5cXG5cXG5ObyBrZXJuZWwtdG8tdXNlciBkYXRhIHRyYW5zZmVycywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBidWZmZXIgc2l6ZS9vZmZzZXQgY2FsY3VsYXRpb25zIGFyZSBtb2RpZmllZC4gVGhlIHBhdGNoIGRvZXMgbm90IHJlYWQgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtZWFuaW5nIGl0IGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVmYzMwNzQ4YTE3NWE1NmNhOTYzY2YxNmRlYzc1MmNhZTEwNGI0ZDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAwOTowMDoxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaGZzYy5jIGIvbmV0L3NjaGVkL3NjaF9oZnNjLmNcbmluZGV4IGU4N2Y1MDIxYTE5OTUuLmIwNzNlZmFmMmJmNWYgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2hmc2MuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9oZnNjLmNcbkBAIC0zODYsNiArMzg2LDEyIEBAIGNmdHJlZV91cGRhdGUoc3RydWN0IGhmc2NfY2xhc3MgKmNsKVxuICNkZWZpbmVcdFNNX01BU0tcdFx0KCgxVUxMIFx1MDAzY1x1MDAzYyBTTV9TSElGVCkgLSAxKVxuICNkZWZpbmVcdElTTV9NQVNLXHQoKDFVTEwgXHUwMDNjXHUwMDNjIElTTV9TSElGVCkgLSAxKVxuIFxuKy8qXG4rICogYm91bmQgb24gY29uc2VjdXRpdmUgbm9uLWRlc2NlbmRpbmcgKGxhdGVyYWwgLyB1cHdhcmQpIGhvcHMgaW4gYVxuKyAqIGNsYXNzaWZ5IHdhbGssIG1pcnJvcmluZyBodGIncyBUQ19IVEJfTUFYREVQVEggaGVhZHJvb21cbisgKi9cbisjZGVmaW5lXHRIRlNDX0NMQVNTSUZZX01BWF9EUklGVFx0OFxuK1xuIHN0YXRpYyBpbmxpbmUgdTY0XG4gc2VnX3gyeSh1NjQgeCwgdTY0IHNtKVxuIHtcbkBAIC0xMTMzLDYgKzExMzksNyBAQCBoZnNjX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgKnFlcnIpXG4gXHRzdHJ1Y3QgaGZzY19jbGFzcyAqaGVhZCwgKmNsO1xuIFx0c3RydWN0IHRjZl9yZXN1bHQgcmVzO1xuIFx0c3RydWN0IHRjZl9wcm90byAqdGNmO1xuK1x0dW5zaWduZWQgaW50IGRyaWZ0O1xuIFx0aW50IHJlc3VsdDtcbiBcbiBcdGlmIChUQ19IX01BSihza2ItXHUwMDNlcHJpb3JpdHkgXiBzY2gtXHUwMDNlaGFuZGxlKSA9PSAwIFx1MDAyNlx1MDAyNlxuQEAgLTExNDIsNiArMTE0OSw3IEBAIGhmc2NfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsIGludCAqcWVycilcbiBcbiBcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xuIFx0aGVhZCA9IFx1MDAyNnEtXHUwMDNlcm9vdDtcbitcdGRyaWZ0ID0gSEZTQ19DTEFTU0lGWV9NQVhfRFJJRlQ7XG4gXHR0Y2YgPSByY3VfZGVyZWZlcmVuY2VfYmgocS1cdTAwM2Vyb290LmZpbHRlcl9saXN0KTtcbiBcdHdoaWxlICh0Y2YgXHUwMDI2XHUwMDI2IChyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCB0Y2YsIFx1MDAyNnJlcywgZmFsc2UpKSBcdTAwM2U9IDApIHtcbiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG5AQCAtMTE2Nyw2ICsxMTc1LDE2IEBAIGhmc2NfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsIGludCAqcWVycilcbiBcdFx0aWYgKGNsLVx1MDAzZWxldmVsID09IDApXG4gXHRcdFx0cmV0dXJuIGNsOyAvKiBoaXQgbGVhZiBjbGFzcyAqL1xuIFxuK1x0XHQvKlxuK1x0XHQgKiBmbG93aWQgYmluZHMgc2tpcCB0aGUgbGV2ZWwgY2hlY2sgYWJvdmUgKHJlcy5jbGFzcyBpcyBzZXRcbitcdFx0ICogYXQgYmluZCB0aW1lIGFuZCBsZXZlbHMgZHJpZnQgYWZ0ZXIpLCBzbyBhIHdhbGsgY2FuIGZvbGxvd1xuK1x0XHQgKiBsYXRlcmFsIGhvcHMgd2l0aG91dCBkZXNjZW5kaW5nOyBib3VuZCB0aGVtIGhlcmUuXG4rXHRcdCAqL1xuK1x0XHRpZiAoY2wtXHUwMDNlbGV2ZWwgXHUwMDNlPSBoZWFkLVx1MDAzZWxldmVsIFx1MDAyNlx1MDAyNiBkcmlmdC0tID09IDApIHtcbitcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwiaGZzYzogY2xhc3NpZnkgbG9vcCBkZXRlY3RlZCwgZHJvcHBpbmcgcGFja2V0XFxuXCIpO1xuK1x0XHRcdHJldHVybiBOVUxMO1xuK1x0XHR9XG4rXG4gXHRcdC8qIGFwcGx5IGlubmVyIGZpbHRlciBjaGFpbiAqL1xuIFx0XHR0Y2YgPSByY3VfZGVyZWZlcmVuY2VfYmgoY2wtXHUwMDNlZmlsdGVyX2xpc3QpO1xuIFx0XHRoZWFkID0gY2w7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvaGZzYy5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvaGZzYy5qc29uXG5pbmRleCBjOThjMzM5NDI0ZDRlLi44MmQyZjhhZjE0NjBkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9xZGlzY3MvaGZzYy5qc29uXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9oZnNjLmpzb25cbkBAIC0xNjksNSArMTY5LDM5IEBAXG4gICAgICAgICBcInRlYXJkb3duXCI6IFtcbiAgICAgICAgICAgICBcIiRUQyBxZGlzYyBkZWwgZGV2ICREVU1NWSBoYW5kbGUgMTogcm9vdFwiXG4gICAgICAgICBdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCI4YzM5XCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJIRlNDIGNsYXNzaWZ5IHdhbGsgc3RpbGwgcmVhY2hlcyBsZWFmIGFmdGVyIGxhdGVyYWwgZHJpZnRcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwicWRpc2NcIixcbisgICAgICAgICAgICBcImhmc2NcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtcbisgICAgICAgICAgICBcImlwIGxpbmsgc2V0IGxvIHVwXCIsXG4rICAgICAgICAgICAgXCIkVEMgcWRpc2MgYWRkIGRldiBsbyBoYW5kbGUgMTogcm9vdCBoZnNjIGRlZmF1bHQgMzFcIixcbisgICAgICAgICAgICBcIiRUQyBjbGFzcyBhZGQgZGV2IGxvIHBhcmVudCAxOiBjbGFzc2lkIDE6MSBoZnNjIHJ0IG0yIDEwMGtiaXRcIixcbisgICAgICAgICAgICBcIiRUQyBjbGFzcyBhZGQgZGV2IGxvIHBhcmVudCAxOiBjbGFzc2lkIDE6MiBoZnNjIHJ0IG0yIDEwMGtiaXRcIixcbisgICAgICAgICAgICBcIiRUQyBjbGFzcyBhZGQgZGV2IGxvIHBhcmVudCAxOiBjbGFzc2lkIDE6MyBoZnNjIHJ0IG0yIDEwMGtiaXRcIixcbisgICAgICAgICAgICBcIiRUQyBjbGFzcyBhZGQgZGV2IGxvIHBhcmVudCAxOjEgY2xhc3NpZCAxOjEwIGhmc2MgcnQgbTIgNTBrYml0XCIsXG4rICAgICAgICAgICAgXCIkVEMgY2xhc3MgYWRkIGRldiBsbyBwYXJlbnQgMToyIGNsYXNzaWQgMToyMCBoZnNjIHJ0IG0yIDEwa2JpdFwiLFxuKyAgICAgICAgICAgIFwiJFRDIGNsYXNzIGFkZCBkZXYgbG8gcGFyZW50IDE6MyBjbGFzc2lkIDE6MzAgaGZzYyBydCBtMiAxMGtiaXRcIixcbisgICAgICAgICAgICBcIiRUQyBjbGFzcyBhZGQgZGV2IGxvIHBhcmVudCAxOjMgY2xhc3NpZCAxOjMxIGhmc2MgcnQgbTIgMTAwa2JpdFwiLFxuKyAgICAgICAgICAgIFwiJFRDIGZpbHRlciBhZGQgZGV2IGxvIHBhcmVudCAxOiBwcm90b2NvbCBpcCBwcmlvIDEgdTMyIG1hdGNoIHU4IDAgMCBhdCAwIGZsb3dpZCAxOjFcIixcbisgICAgICAgICAgICBcIiRUQyBmaWx0ZXIgYWRkIGRldiBsbyBwYXJlbnQgMToxIHByb3RvY29sIGlwIHByaW8gMSB1MzIgbWF0Y2ggdTggMCAwIGF0IDAgZmxvd2lkIDE6MlwiLFxuKyAgICAgICAgICAgIFwiJFRDIGZpbHRlciBhZGQgZGV2IGxvIHBhcmVudCAxOjIgcHJvdG9jb2wgaXAgcHJpbyAxIHUzMiBtYXRjaCB1OCAwIDAgYXQgMCBmbG93aWQgMTozXCIsXG4rICAgICAgICAgICAgXCIkVEMgZmlsdGVyIGFkZCBkZXYgbG8gcGFyZW50IDE6MyBwcm90b2NvbCBpcCBwcmlvIDEgdTMyIG1hdGNoIHU4IDAgMCBhdCAwIGZsb3dpZCAxOjMxXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcInBpbmcgLW4gLWMgMTAgLVcgMSAxMjcuMC4wLjE7IHNsZWVwIDFcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIwXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyAtcyBjbGFzcyBzaG93IGRldiBsb1wiLFxuKyAgICAgICAgXCJtYXRjaFBhdHRlcm5cIjogXCJjbGFzcyBoZnNjIDE6MzEgcGFyZW50IDE6MyBydC4qXFxcXG4uKlNlbnQgWzAtOV0rIGJ5dGVzIFsxLTldWzAtOV0qIHBrdFwiLFxuKyAgICAgICAgXCJtYXRjaENvdW50XCI6IFwiMVwiLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXG4rICAgICAgICAgICAgXCIkVEMgcWRpc2MgZGVsIGRldiBsbyBoYW5kbGUgMTogcm9vdFwiXG4rICAgICAgICBdXG4gICAgIH1cbiBdXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwOTowMzo0Ny41NDg4OTY3OTdaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTY5MTMyNDAzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtNU0FOL0tBU0FOIFBhdGNoIGZvciBIRlNDIENsYXNzaWZpY2F0aW9uKipcblxuT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gZXZhbHVhdGUgdGhpcyBwYXRjaCBmb3IgdGhlIExpbnV4IGtlcm5lbCdzIG1lbW9yeSBlcnJvciBkZXRlY3RvciBmdXp6aW5nLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGNoYW5nZXMgcmVsYXRlZCB0byBLTVNBTiB2ZXJzdXMgS0FTQU4uIExldCdzIGRpZyBpbi5cblxuVGhlIGRpZmYgaXMgZm9jdXNlZCBvbiB0d28gYXJlYXM6IGBuZXQvc2NoZWQvc2NoX2hmc2MuY2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL3FkaXNjcy9oZnNjLmpzb25gLiBUaGUgY29kZSBjaGFuZ2VzIGxvb2sgaW50ZXJlc3RpbmcgYW5kIHdvcnRoIGEgZGV0YWlsZWQgbG9vaywgYW5kIHRoZSBhZGRpdGlvbiBvZiBhIHNlbGZ0ZXN0IGZvciBIRlNDIGNsYXNzaWZ5IGRyaWZ0IGhpbnRzIHRoaXMgaXMgaW1wb3J0YW50IGZvciBjb3ZlcmFnZS5cblxuRmlyc3QsIGluIGBzY2hfaGZzYy5jYCwgaXQncyBhZGRpbmcgYEhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUYCwgYW4gYHVuc2lnbmVkIGludCBkcmlmdGAgdmFyaWFibGUsIGFuZCBpbml0aWFsaXppbmcgaXQuIFRoaXMgaXMgZm9sbG93ZWQgYnkgYSBjaGVjayB3aXRoaW4gdGhlIGB3aGlsZWAgbG9vcCBpbnNpZGUgYGhmc2NfY2xhc3NpZnlgLiBUaGUgY29kZSBpcyBzcGVjaWZpY2FsbHkgZ3VhcmRpbmcgYWdhaW5zdCBzb21lIGtpbmQgb2YgY2xhc3NpZmljYXRpb24gbG9vcDogaWYgYGNsLVx1MDAzZWxldmVsIFx1MDAzZT0gaGVhZC1cdTAwM2VsZXZlbGAgYW5kIGBkcmlmdC0tID09IDBgLCBhIHdhcm5pbmcgaXMgcHJpbnRlZCwgYW5kIHRoZSBwYWNrZXQgaXMgZHJvcHBlZC4gVGhpcyBpcyBhIGNsZWFyIGF0dGVtcHQgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wIGluIHRoZSBjbGFzc2lmaWVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbnN0aXR1dGVzIGEgXCJjbGFzc2lmeSBsb29wXCIuIEknbGwgbmVlZCB0byByZWFkIG1vcmUgb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGhmc2NfY2xhc3NpZnlgIHRvIHNlZSBob3cgdGhlc2UgYHRjZmAgc3RydWN0dXJlcyBhcmUgaXRlcmF0ZWQgYW5kIGhvdyBgY2wtXHUwMDNlbGV2ZWxgIGFuZCBgaGVhZC1cdTAwM2VsZXZlbGAgYXJlIGRlZmluZWQuIFRoZSBkcmlmdCBjb3VudGVyIGlzIGFjdGluZyBhcyBhIHNhZmVndWFyZCB0byBhYm9ydCB0aGUgY2xhc3NpZmljYXRpb24gaWYgdGhpbmdzIGdldCBvdXQgb2YgaGFuZC5cblxuVGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBwYXRjaCBpbmNsdWRlcyBhIG5ldyBzZWxmdGVzdCBpbiBgaGZzYy5qc29uYC4gVGhpcyBpbXBsaWVzIGEgc3BlY2lmaWMgdGVzdCBjYXNlIGhhcyBiZWVuIGNyZWF0ZWQgdG8gZXhlcmNpc2UgYW5kIHZhbGlkYXRlIHRoZSBuZXcgZHJpZnQgY2hlY2suIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UsIGFuZCBjcml0aWNhbCBmb3IgdGhpcyBraW5kIG9mIGNoYW5nZS4gSXQncyBhIGdvb2Qgc2lnbiB0aGF0IHdlIGhhdmUgYSBzZWxmdGVzdC4gVGhpcyBtZWFucyB0aGUgZGV2ZWxvcGVycyBhcmUgYXR0ZW1wdGluZyB0byB0ZXN0IHNwZWNpZmljYWxseSBmb3IgdGhpcyBjbGFzc2lmeSB3YWxrIGxhdGVyYWwgZHJpZnQuXG5cblRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgS01TQU4vS0FTQU4sIGFuZCBob3cgdGhpcyByZWxhdGVzIHRvIG1lbW9yeSBlcnJvciBkZXRlY3Rpb24sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2xhc3NpZmllciBsb29wICpjb3VsZCogbGVhZCB0byBtZW1vcnkgZXJyb3JzLiBJIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgYGhmc2NfY2xhc3NpZnlgIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBtZW1vcnkgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMsIGFuZCBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgZnV6emluZyBpcyBzZXQgdXAgdG8gZW5zdXJlIHRoaXMgY29kZSBwYXRoIGlzIHdlbGwtZXhlcmNpc2VkLiBJ4oCZbSB0aGlua2luZyB0aGUgZHJpZnQgY2hlY2sgaXMgbGlrZWx5IGludGVuZGVkIHRvIGhlbHAgcHJldmVudCBhIHN0YWNrIG92ZXJmbG93IG9yIG90aGVyIG1lbW9yeSBpc3N1ZXMgdGhhdCBjb3VsZCBoYXBwZW4gZHVlIHRvIGEgbWlzYmVoYXZpbmcgY2xhc3NpZmljYXRpb24gbG9vcC4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSBob3cgYHRjZl9jbGFzc2lmeV9xZGlzY2AgaXMgZG9pbmcgaXRzIHdvcmsuIEkgd2lsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHJlYWQgYHNjaF9oZnNjLmNgIHN1cnJvdW5kaW5nIGBoZnNjX2NsYXNzaWZ5YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ3MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAzOjUzLjI0MDIyMzY3OVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL3NjaF9oZnNjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEzMCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEzMDpcXHRcXG4xMTMxOlxcdFxcdGhmc2NfZGVzdHJveV9jbGFzcyhzY2gsIGNsKTtcXG4xMTMyOlxcdFxcdHJldHVybiAwO1xcbjExMzM6XFx0fVxcbjExMzQ6XFx0XFxuMTEzNTpcXHRzdGF0aWMgc3RydWN0IGhmc2NfY2xhc3MgKlxcbjExMzY6XFx0aGZzY19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKVxcbjExMzc6XFx0e1xcbjExMzg6XFx0XFx0c3RydWN0IGhmc2Nfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxuMTEzOTpcXHRcXHRzdHJ1Y3QgaGZzY19jbGFzcyAqaGVhZCwgKmNsO1xcbjExNDA6XFx0XFx0c3RydWN0IHRjZl9yZXN1bHQgcmVzO1xcbjExNDE6XFx0XFx0c3RydWN0IHRjZl9wcm90byAqdGNmO1xcbjExNDI6XFx0XFx0dW5zaWduZWQgaW50IGRyaWZ0O1xcbjExNDM6XFx0XFx0aW50IHJlc3VsdDtcXG4xMTQ0OlxcdFxcbjExNDU6XFx0XFx0aWYgKFRDX0hfTUFKKHNrYi1cXHUwMDNlcHJpb3JpdHkgXiBzY2gtXFx1MDAzZWhhbmRsZSkgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbjExNDY6XFx0XFx0ICAgIChjbCA9IGhmc2NfZmluZF9jbGFzcyhza2ItXFx1MDAzZXByaW9yaXR5LCBzY2gpKSAhPSBOVUxMKVxcbjExNDc6XFx0XFx0XFx0aWYgKGNsLVxcdTAwM2VsZXZlbCA9PSAwKVxcbjExNDg6XFx0XFx0XFx0XFx0cmV0dXJuIGNsO1xcbjExNDk6XFx0XFxuMTE1MDpcXHRcXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcXG4xMTUxOlxcdFxcdGhlYWQgPSBcXHUwMDI2cS1cXHUwMDNlcm9vdDtcXG4xMTUyOlxcdFxcdGRyaWZ0ID0gSEZTQ19DTEFTU0lGWV9NQVhfRFJJRlQ7XFxuMTE1MzpcXHRcXHR0Y2YgPSByY3VfZGVyZWZlcmVuY2VfYmgocS1cXHUwMDNlcm9vdC5maWx0ZXJfbGlzdCk7XFxuMTE1NDpcXHRcXHR3aGlsZSAodGNmIFxcdTAwMjZcXHUwMDI2IChyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCB0Y2YsIFxcdTAwMjZyZXMsIGZhbHNlKSkgXFx1MDAzZT0gMCkge1xcbjExNTU6XFx0I2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxcbjExNTY6XFx0XFx0XFx0c3dpdGNoIChyZXN1bHQpIHtcXG4xMTU3OlxcdFxcdFxcdGNhc2UgVENfQUNUX1FVRVVFRDpcXG4xMTU4OlxcdFxcdFxcdGNhc2UgVENfQUNUX1NUT0xFTjpcXG4xMTU5OlxcdFxcdFxcdGNhc2UgVENfQUNUX1RSQVA6XFxuMTE2MDpcXHRcXHRcXHRcXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX1NUT0xFTjtcXG4xMTYxOlxcdFxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbjExNjI6XFx0XFx0XFx0Y2FzZSBUQ19BQ1RfU0hPVDpcXG4xMTYzOlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjExNjQ6XFx0XFx0XFx0fVxcbjExNjU6XFx0I2VuZGlmXFxuMTE2NjpcXHRcXHRcXHRjbCA9IChzdHJ1Y3QgaGZzY19jbGFzcyAqKXJlcy5jbGFzcztcXG4xMTY3OlxcdFxcdFxcdGlmICghY2wpIHtcXG4xMTY4OlxcdFxcdFxcdFxcdGNsID0gaGZzY19maW5kX2NsYXNzKHJlcy5jbGFzc2lkLCBzY2gpO1xcbjExNjk6XFx0XFx0XFx0XFx0aWYgKCFjbClcXG4xMTcwOlxcdFxcdFxcdFxcdFxcdGJyZWFrOyAvKiBmaWx0ZXIgc2VsZWN0ZWQgaW52YWxpZCBjbGFzc2lkICovXFxuMTE3MTpcXHRcXHRcXHRcXHRpZiAoY2wtXFx1MDAzZWxldmVsIFxcdTAwM2U9IGhlYWQtXFx1MDAzZWxldmVsKVxcbjExNzI6XFx0XFx0XFx0XFx0XFx0YnJlYWs7IC8qIGZpbHRlciBtYXkgb25seSBwb2ludCBkb3dud2FyZHMgKi9cXG4xMTczOlxcdFxcdFxcdH1cXG4xMTc0OlxcdFxcbjExNzU6XFx0XFx0XFx0aWYgKGNsLVxcdTAwM2VsZXZlbCA9PSAwKVxcbjExNzY6XFx0XFx0XFx0XFx0cmV0dXJuIGNsOyAvKiBoaXQgbGVhZiBjbGFzcyAqL1xcbjExNzc6XFx0XFxuMTE3ODpcXHRcXHRcXHQvKlxcbjExNzk6XFx0XFx0XFx0ICogZmxvd2lkIGJpbmRzIHNraXAgdGhlIGxldmVsIGNoZWNrIGFib3ZlIChyZXMuY2xhc3MgaXMgc2V0XFxuMTE4MDpcXHRcXHRcXHQgKiBhdCBiaW5kIHRpbWUgYW5kIGxldmVscyBkcmlmdCBhZnRlciksIHNvIGEgd2FsayBjYW4gZm9sbG93XFxuMTE4MTpcXHRcXHRcXHQgKiBsYXRlcmFsIGhvcHMgd2l0aG91dCBkZXNjZW5kaW5nOyBib3VuZCB0aGVtIGhlcmUuXFxuMTE4MjpcXHRcXHRcXHQgKi9cXG4xMTgzOlxcdFxcdFxcdGlmIChjbC1cXHUwMDNlbGV2ZWwgXFx1MDAzZT0gaGVhZC1cXHUwMDNlbGV2ZWwgXFx1MDAyNlxcdTAwMjYgZHJpZnQtLSA9PSAwKSB7XFxuMTE4NDpcXHRcXHRcXHRcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCJoZnNjOiBjbGFzc2lmeSBsb29wIGRldGVjdGVkLCBkcm9wcGluZyBwYWNrZXRcXFxcblxcXCIpO1xcbjExODU6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTE4NjpcXHRcXHRcXHR9XFxuMTE4NzpcXHRcXG4xMTg4OlxcdFxcdFxcdC8qIGFwcGx5IGlubmVyIGZpbHRlciBjaGFpbiAqL1xcbjExODk6XFx0XFx0XFx0dGNmID0gcmN1X2RlcmVmZXJlbmNlX2JoKGNsLVxcdTAwM2VmaWx0ZXJfbGlzdCk7XFxuMTE5MDpcXHRcXHRcXHRoZWFkID0gY2w7XFxuMTE5MTpcXHRcXHR9XFxuMTE5MjpcXHRcXG4xMTkzOlxcdFxcdC8qIGNsYXNzaWZpY2F0aW9uIGZhaWxlZCwgdHJ5IGRlZmF1bHQgY2xhc3MgKi9cXG4xMTk0OlxcdFxcdGNsID0gaGZzY19maW5kX2NsYXNzKFRDX0hfTUFLRShUQ19IX01BSihzY2gtXFx1MDAzZWhhbmRsZSksXFxuMTE5NTpcXHRcXHRcXHRcXHRcXHQgICAgICAgUkVBRF9PTkNFKHEtXFx1MDAzZWRlZmNscykpLCBzY2gpO1xcbjExOTY6XFx0XFx0aWYgKGNsID09IE5VTEwgfHwgY2wtXFx1MDAzZWxldmVsIFxcdTAwM2UgMClcXG4xMTk3OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjExOTg6XFx0XFxuMTE5OTpcXHRcXHRyZXR1cm4gY2w7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA5OjAzOjUzLjI0MDM1NDM5OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMTgzMzQwNDg2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50IG9mIEhGU0MgQ2xhc3NpZmljYXRpb24gTG9vcCBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IEtNU0FOIHNob3VsZCBmbGFnLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBFc3NlbnRpYWxseSwgaXQncyBhZGRpbmcgYSBzYWZlZ3VhcmQgdG8gdGhlIGBoZnNjX2NsYXNzaWZ5YCBmdW5jdGlvbi4gUHJldmlvdXNseSwgaWYgdHJhZmZpYyBjbGFzc2lmaWNhdGlvbiBjaGFpbnMgaGFkIGEgY3ljbGljYWwgc3RydWN0dXJlIChlLmcuLCBBIHBvaW50cyB0byBCLCBCIHBvaW50cyB0byBBKSBvciBub24tZGVzY2VuZGluZyBob3BzLCB0aGUgYHdoaWxlYCBsb29wIHdpdGhpbiBgaGZzY19jbGFzc2lmeWAgY291bGQgcnVuIGluZGVmaW5pdGVseSwgbGVhZGluZyB0byBhIGhhbmcgb3Igc29mdCBsb2NrdXAuIFRoZSBwYXRjaCBhZGRyZXNzZXMgdGhpcyB3aXRoIGEgbG9vcCBib3VuZC4gSXQgaW50cm9kdWNlcyBhIGBkcmlmdGAgY291bnRlciwgaW5pdGlhbGl6ZWQgdG8gYEhGU0NfQ0xBU1NJRllfTUFYX0RSSUZUYCwgd2hpY2ggZGVjcmVtZW50cyB3aXRoIGVhY2ggbG9vcCBpdGVyYXRpb24uIElmIGBkcmlmdGAgcmVhY2hlcyB6ZXJvICphbmQqIHRoZSBsZXZlbHMgZG9uJ3QgZm9ybSBhIGRlc2NlbmRpbmcgc3RydWN0dXJlIChpLmUuIGBjbC1cdTAwM2VsZXZlbCBcdTAwM2U9IGhlYWQtXHUwMDNlbGV2ZWxgKSwgdGhlIGxvb3AgdGVybWluYXRlcywgYW5kIGEgd2FybmluZyBpcyBsb2dnZWQuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBEb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucz8gSSBuZWVkIHRvIGFuYWx5emUgdGhlIGNvZGUgcGF0aCB2ZXJ5IGNhcmVmdWxseS5cblxuMS4gIERvZXMgaXQgdG91Y2gga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlPyBObywgbm90IGF0IGFsbC4gVGhlcmUgYXJlIG5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCwgb3Igc29ja2V0IG9wdGlvbnMgaW52b2x2ZWQuXG5cbjIuICBEb2VzIGl0IGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcz8gTm8uIFRoZSBuZXdseSBpbnRyb2R1Y2VkIHZhcmlhYmxlLCBgZHJpZnRgLCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSBpdCBpcyB1c2VkLiBUaGUgdmFyaWFibGVzIGl0IGNvbXBhcmVzIGl0IHRvLCBgY2wtXHUwMDNlbGV2ZWxgIGFuZCBgaGVhZC1cdTAwM2VsZXZlbGAsIGFyZSBleGlzdGluZyBhbmQsIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCBwcm9wZXJseSBpbml0aWFsaXplZCBmaWVsZHMgd2l0aGluIGBzdHJ1Y3QgaGZzY19jbGFzc2AuXG5cbjMuICBEb2VzIHRoaXMgcGF0Y2ggaW52b2x2ZSBhbnkgbmV3IGFsbG9jYXRpb25zIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzPyBOb3BlLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgb3IgZGVhbGxvY2F0aW9ucyBpbnRyb2R1Y2VkLlxuXG40LiAgRG9lcyBpdCBhbHRlciBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzPyBOby4gSXQgbGltaXRzIHRoZSBsb29wIGl0ZXJhdGlvbnMsIHByZXZlbnRpbmcgYW4gaW5maW5pdGUgbG9vcCBkdXJpbmcgcGFja2V0IGNsYXNzaWZpY2F0aW9uIGFuZCBzdWJzZXF1ZW50IGhhbmdzLlxuXG5HaXZlbiB0aGVzZSBmaW5kaW5ncywgSSBjYW4gY29uZmlkZW50bHkgc2F5IHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZSBidWcgaXQgZml4ZXPigJR0aGUgaW5maW5pdGUgbG9vcCBhbmQgc29mdCBsb2NrdXDigJRpcyByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBhbmQgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLTVNBTiB3b24ndCBjYXRjaCB0aGlzOyBhIHdhdGNoZG9nIG9yIHNvZnQgbG9ja3VwIGRldGVjdG9yIGlzIHdoYXQncyByZWxldmFudCBoZXJlLCBhbmQgZXZlbiBLQVNBTiB3b3VsZCBiZSBzb21ld2hhdCByZWxldmFudCwgaG93ZXZlciwgdGhlIHByaW1hcnkgcHJvYmxlbSBmaXhlZCBpcyBhIGNvbnRyb2wgZmxvdyBpc3N1ZSwgbm90IG1lbW9yeS4gVGhlIHJlbGV2YW50IGlzc3VlIGlzIHRoYXQgdGhpcyBwYXRjaCBmaXhlcyBhbiBpbmZpbml0ZSBsb29wL2RlbmlhbC1vZi1zZXJ2aWNlLCBub3QgYSBtZW1vcnkgc2FmZXR5IGlzc3VlLlxuXG5UaGVyZWZvcmUsIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgYW5hbHlzaXMgaXMgY29tcGxldGUsIGFuZCBJIGFtIHNhdGlzZmllZCB3aXRoIHRoZSByZWFzb25pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0OTEsIk91dHB1dFRva2VucyI6MTYzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDk6MDQ6MDUuMDczNzYyMTUxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaGZzY19jbGFzc2lmeWAgaW4gYG5ldC9zY2hlZC9zY2hfaGZzYy5jYCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIGNhdXNlZCBieSBsYXRlcmFsIG9yIHVwd2FyZCBjbGFzc2lmaWNhdGlvbiBob3BzIGJ5IGludHJvZHVjaW5nIGEgbG9vcCBjb3VudGVyIChgZHJpZnRgKS4gVGhlIGBkcmlmdGAgbG9jYWwgdmFyaWFibGUgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgSEZTQ19DTEFTU0lGWV9NQVhfRFJJRlRgICg4KSBiZWZvcmUgdGhlIGNsYXNzaWZpY2F0aW9uIGxvb3AsIGFuZCBhbGwgY29tcGFyZWQgZmllbGRzIChgY2wtXFx1MDAzZWxldmVsYCwgYGhlYWQtXFx1MDAzZWxldmVsYCkgYXJlIGV4aXN0aW5nIGluaXRpYWxpemVkIGNsYXNzIGF0dHJpYnV0ZXMuXFxuXFxuTm8ga2VybmVsLXRvLXVzZXIgZGF0YSB0cmFuc2ZlcnMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYnVmZmVyIHNpemUvb2Zmc2V0IGNhbGN1bGF0aW9ucyBhcmUgbW9kaWZpZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbWVhbmluZyBpdCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaGZzY19jbGFzc2lmeWAgaW4gYG5ldC9zY2hlZC9zY2hfaGZzYy5jYCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIGNhdXNlZCBieSBsYXRlcmFsIG9yIHVwd2FyZCBjbGFzc2lmaWNhdGlvbiBob3BzIGJ5IGludHJvZHVjaW5nIGEgbG9vcCBjb3VudGVyIChgZHJpZnRgKS4gVGhlIGBkcmlmdGAgbG9jYWwgdmFyaWFibGUgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgSEZTQ19DTEFTU0lGWV9NQVhfRFJJRlRgICg4KSBiZWZvcmUgdGhlIGNsYXNzaWZpY2F0aW9uIGxvb3AsIGFuZCBhbGwgY29tcGFyZWQgZmllbGRzIChgY2wtXFx1MDAzZWxldmVsYCwgYGhlYWQtXFx1MDAzZWxldmVsYCkgYXJlIGV4aXN0aW5nIGluaXRpYWxpemVkIGNsYXNzIGF0dHJpYnV0ZXMuXFxuXFxuTm8ga2VybmVsLXRvLXVzZXIgZGF0YSB0cmFuc2ZlcnMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYnVmZmVyIHNpemUvb2Zmc2V0IGNhbGN1bGF0aW9ucyBhcmUgbW9kaWZpZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbWVhbmluZyBpdCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow4qsnz[1] Phase: Succeeded StartedAt: 2026-09-14 09:04:16 +0000 UTC FinishedAt: 2026-09-14 09:04:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4qsnz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-14 09:04:16 +0000 UTC FinishedAt: 2026-09-14 09:04:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4qsnz[2] Phase: Succeeded StartedAt: 2026-09-14 09:04:16 +0000 UTC FinishedAt: 2026-09-14 12:52:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-14 09:04:16 +0000 UTC FinishedAt: 2026-09-14 12:52:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-14 09:04:16 +0000 UTC FinishedAt: 2026-09-14 09:04:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-14 09:04:16 +0000 UTC FinishedAt: 2026-09-14 09:04:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4qsnz/series-workflow4qsnz-convert-artifact-217170443/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-14 09:04:26 +0000 UTC FinishedAt: 2026-09-14 09:23:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-14 09:04:26 +0000 UTC FinishedAt: 2026-09-14 09:23:36 +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:*504a3b0c-881a-452e-ab09-d1d45d7df3c6,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-workflow4qsnz/series-workflow4qsnz-convert-artifact-217170443/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": "9f4f6015-8dbd-4e2f-a1aa-c484c5f6ca4b", "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-workflow4qsnz/series-workflow4qsnz-build-action-2721430793/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-14 09:04:26 +0000 UTC FinishedAt: 2026-09-14 09:23:26 +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:*504a3b0c-881a-452e-ab09-d1d45d7df3c6,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-workflow4qsnz/series-workflow4qsnz-convert-artifact-217170443/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": "9f4f6015-8dbd-4e2f-a1aa-c484c5f6ca4b", "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-workflow4qsnz/series-workflow4qsnz-build-action-2721430793/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-14 09:23:36 +0000 UTC FinishedAt: 2026-09-14 09:23:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-14 09:23:36 +0000 UTC FinishedAt: 2026-09-14 09:23:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-14 09:23:36 +0000 UTC FinishedAt: 2026-09-14 09:23:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-14 09:23:36 +0000 UTC FinishedAt: 2026-09-14 09:23:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4qsnz/series-workflow4qsnz-convert-artifact-1307189090/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-14 09:23:47 +0000 UTC FinishedAt: 2026-09-14 09:25:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-14 09:23:47 +0000 UTC FinishedAt: 2026-09-14 09:25:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9f4f6015-8dbd-4e2f-a1aa-c484c5f6ca4b,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-workflow4qsnz/series-workflow4qsnz-build-action-2721430793/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-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-14 09:25:48 +0000 UTC FinishedAt: 2026-09-14 09:25:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-14 09:25:48 +0000 UTC FinishedAt: 2026-09-14 09:25:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-14 09:25:48 +0000 UTC FinishedAt: 2026-09-14 09:46:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-14 09:25:48 +0000 UTC FinishedAt: 2026-09-14 09:46:26 +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:*504a3b0c-881a-452e-ab09-d1d45d7df3c6,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-workflow4qsnz/series-workflow4qsnz-convert-artifact-1307189090/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": "127a1d0a-15fb-4c64-b39d-47af01c73514", "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-workflow4qsnz/series-workflow4qsnz-build-action-2917960630/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-14 09:25:48 +0000 UTC FinishedAt: 2026-09-14 09:46:16 +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:*504a3b0c-881a-452e-ab09-d1d45d7df3c6,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-workflow4qsnz/series-workflow4qsnz-convert-artifact-1307189090/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": "127a1d0a-15fb-4c64-b39d-47af01c73514", "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-workflow4qsnz/series-workflow4qsnz-build-action-2917960630/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-14 09:46:26 +0000 UTC FinishedAt: 2026-09-14 09:46:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-14 09:46:26 +0000 UTC FinishedAt: 2026-09-14 09:46:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-14 09:46:26 +0000 UTC FinishedAt: 2026-09-14 09:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-14 09:46:26 +0000 UTC FinishedAt: 2026-09-14 09:48:14 +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:*127a1d0a-15fb-4c64-b39d-47af01c73514,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-workflow4qsnz/series-workflow4qsnz-build-action-2917960630/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-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-14 09:48:24 +0000 UTC FinishedAt: 2026-09-14 12:52:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-14 09:48:24 +0000 UTC FinishedAt: 2026-09-14 12:52:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*9f4f6015-8dbd-4e2f-a1aa-c484c5f6ca4b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*127a1d0a-15fb-4c64-b39d-47af01c73514,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4qsnz/series-workflow4qsnz-build-action-2721430793/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4qsnz/series-workflow4qsnz-build-action-2917960630/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-14 09:48:24 +0000 UTC FinishedAt: 2026-09-14 09:48:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-14 09:48:24 +0000 UTC FinishedAt: 2026-09-14 09:48:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4qsnz/series-workflow4qsnz-convert-artifact-3751248023/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-14 09:48:24 +0000 UTC FinishedAt: 2026-09-14 09:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-14 09:48:24 +0000 UTC FinishedAt: 2026-09-14 09:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-14 09:48:24 +0000 UTC FinishedAt: 2026-09-14 09:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-14 09:48:34 +0000 UTC FinishedAt: 2026-09-14 12:52:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4qsnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hfsc_classify","hfsc_enqueue","hfsc_bind_tcf"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_SCH_HFSC","NET_CLS_ACT"],"series_id":"421245ff-cc03-423c-b2ba-49620dc0277d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-14 09:48:34 +0000 UTC FinishedAt: 2026-09-14 12:52:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9f4f6015-8dbd-4e2f-a1aa-c484c5f6ca4b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*127a1d0a-15fb-4c64-b39d-47af01c73514,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4qsnz/series-workflow4qsnz-build-action-2721430793/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4qsnz/series-workflow4qsnz-build-action-2917960630/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4qsnz/series-workflow4qsnz-convert-artifact-3751248023/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}