Name: series-workflowt749q Phase: Succeeded StartedAt: 2026-09-05 18:19:26 +0000 UTC FinishedAt: 2026-09-05 22:52:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt749q[0] Phase: Succeeded StartedAt: 2026-09-05 18:19:26 +0000 UTC FinishedAt: 2026-09-05 19:03:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt749q[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 18:19:26 +0000 UTC FinishedAt: 2026-09-05 19:03:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e81d06906b1675bcfdf559fada6725466c7efcc5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e81d06906b1675bcfdf559fada6725466c7efcc5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG" ], "series_id": "5589d7e1-26ab-48c8-85cf-3ed9f66f6167" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "count_shadow_nodes", "mod_memcg_state", "mod_memcg_lruvec_state", "mem_cgroup_css_offline" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y291bnRfc2hhZG93X25vZGVzJiMzNDssCiAgICAmIzM0O21vZF9tZW1jZ19zdGF0ZSYjMzQ7LAogICAgJiMzNDttb2RfbWVtY2dfbHJ1dmVjX3N0YXRlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY3NzX29mZmxpbmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1jZyBzdGF0cyBhY2NvdW50aW5nIGFuZCBzaGFkb3cgbm9kZSBjYWxjdWxhdGlvbiBpbiBtbS9tZW1jb250cm9sLmMgYW5kIG1tL3dvcmtpbmdzZXQuYy4gU3BlY2lmaWNhbGx5LCBpdCBnZW5lcmFsaXplcyBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydCgpYCB0byBoYW5kbGUgYWxsIGNncm91cHMgaGllcmFyY2hpZXMgYW5kIHVzZXMgYGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKClgIGZvciB3b3JraW5nc2V0IHNoYWRvdyBub2RlIGNvdW50aW5nLlxuXG5ObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkLCBub3IgYXJlIHRoZXJlIGFueSBpbmZvLWxlYWtzLCBzdHJ1Y3QgcGFkZGluZyBleHBvc3VyZXMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIHBvaW50ZXIgaXNzdWVzIChzdWNoIGFzIFJDVSBsb2NraW5nIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSkgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgYW5kIHBhZ2UgY2FjaGUgd29ya2luZ3NldCBjYWxjdWxhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBlbmFibGVzIGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKSByZWRpcmVjdGlvbiB1bmNvbmRpdGlvbmFsbHkgYWNyb3NzIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMgaW4gbW0vbWVtY29udHJvbC5jIGFuZCBtb2RpZmllcyBjb3VudF9zaGFkb3dfbm9kZXMoKSBpbiBtbS93b3JraW5nc2V0LmMgdG8gcXVlcnkgbG9jYWwgbHJ1dmVjIHBhZ2Ugc3RhdGUgcmF0aGVyIHRoYW4gem9uZS1iYXNlZCBMUlUgc2l6ZXMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIHRlYXJkb3duL3JlY2xhaW0gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjNzY2YmNhMjIxYTUzY2JhYWEwNzcxZjM3YzBhMTQxZjg3MGQ4NjdhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxOTowMTo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDg2ZmY1ODBjNzAxODMuLmRmNDNlNjFjOWViYzEgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTg0NSwxNiAmIzQzOzg0NSwyMSBAQCBzdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpXG4gXHRyZXR1cm4gdmFsIFx1MDAzYyAwID8gLXJlcyA6IHJlcztcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19NRU1DR19WMVxuIC8qXG4tICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2Ugd2l0aFxuLSAqIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLlxuJiM0MzsgKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZVxuJiM0MzsgKiB3aXRoIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLiAgT2ZmbGluaW5nIGFcbiYjNDM7ICogbWVtY2cgaXMgcmFyZSwgc28gZG8gdGhlIHJlZGlyZWN0aW9uIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0XHRcdFx0ICAgYm9vbCAqcmN1X2xvY2tlZClcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqXG4mIzQzO2dldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxuIHtcbi1cdC8qIFJlYmluZGluZyBjYW4gY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUgKi9cbi1cdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGYXN0IHBhdGg6IHRoZSBjYWxsZXIgaG9sZHMgYSByZWZlcmVuY2UgdG8gQG1lbWNnLCBzbyByZWFkaW5nXG4mIzQzO1x0ICogaXRzIENTU19EWUlORyBmbGFnIHdpdGhvdXQgdGhlIFJDVSBsb2NrIGlzIHNhZmUuICBUaGUgUkNVIGxvY2tcbiYjNDM7XHQgKiBpcyBvbmx5IG5lZWRlZCB0byB3YWxrIHVwIHRvIGEgbm9uLWR5aW5nIGFuY2VzdG9yLCB3aGljaFxuJiM0MztcdCAqIGhhcHBlbnMgb25seSB3aGlsZSBhIG1lbWNnIGlzIGFjdHVhbGx5IGJlaW5nIG9mZmxpbmVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghbWVtY2dfaXNfZHlpbmcobWVtY2cpKSB7XG4gXHRcdCpyY3VfbG9ja2VkID0gZmFsc2U7XG4gXHRcdHJldHVybiBtZW1jZztcbiBcdH1cbkBAIC04NzUsMTcgJiM0Mzs4ODAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxuIFxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuLSNlbHNlXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHRcdFx0XHQgICBib29sICpyY3VfbG9ja2VkKVxuLXtcbi1cdHJldHVybiBtZW1jZztcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZClcbi17XG4tfVxuLSNlbmRpZlxuIFxuIHN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHQgICAgICBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsIGxvbmcgdmFsKVxuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggN2FjMmI4OGM4MGFlNS4uODQxMmY0ODQwYWUzNSAxMDA2NDRcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vd29ya2luZ3NldC5jXG5AQCAtNjg4LDEwICYjNDM7Njg4LDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4gXG4gXHRcdG1lbV9jZ3JvdXBfZmx1c2hfc3RhdHNfcmF0ZWxpbWl0ZWQoc2MtXHUwMDNlbWVtY2cpO1xuIFx0XHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhzYy1cdTAwM2VtZW1jZywgTk9ERV9EQVRBKHNjLVx1MDAzZW5pZCkpO1xuLVxuIFx0XHRmb3IgKHBhZ2VzID0gMCwgaSA9IDA7IGkgXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSYjNDM7JiM0MzspXG4tXHRcdFx0cGFnZXMgJiM0Mzs9IGxydXZlY19scnVfc2l6ZShscnV2ZWMsIGksIE1BWF9OUl9aT05FUyAtIDEpO1xuLVxuJiM0MztcdFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwobHJ1dmVjLFxuJiM0MztcdFx0XHRcdFx0XHRcdCBOUl9MUlVfQkFTRSAmIzQzOyBpKTtcbiBcdFx0cGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxuIFx0XHRcdGxydXZlYywgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcdFx0cGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y291bnRfc2hhZG93X25vZGVzJiMzNDssCiAgICAmIzM0O21vZF9tZW1jZ19zdGF0ZSYjMzQ7LAogICAgJiMzNDttb2RfbWVtY2dfbHJ1dmVjX3N0YXRlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY3NzX29mZmxpbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBhbmQgcGFnZSBjYWNoZSB3b3JraW5nc2V0IGNhbGN1bGF0aW9uLiBTcGVjaWZpY2FsbHksIGl0IGVuYWJsZXMgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydCgpIHJlZGlyZWN0aW9uIHVuY29uZGl0aW9uYWxseSBhY3Jvc3MgYWxsIGNncm91cCBoaWVyYXJjaGllcyBpbiBtbS9tZW1jb250cm9sLmMgYW5kIG1vZGlmaWVzIGNvdW50X3NoYWRvd19ub2RlcygpIGluIG1tL3dvcmtpbmdzZXQuYyB0byBxdWVyeSBsb2NhbCBscnV2ZWMgcGFnZSBzdGF0ZSByYXRoZXIgdGhhbiB6b25lLWJhc2VkIExSVSBzaXplcy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgdGVhcmRvd24vcmVjbGFpbSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM3NjZiY2EyMjFhNTNjYmFhYTA3NzFmMzdjMGExNDFmODcwZDg2N2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDE5OjAxOjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDg2ZmY1ODBjNzAxODMuLmRmNDNlNjFjOWViYzEgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTg0NSwxNiAmIzQzOzg0NSwyMSBAQCBzdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpCiAJcmV0dXJuIHZhbCAmbHQ7IDAgPyAtcmVzIDogcmVzOwogfQogCi0jaWZkZWYgQ09ORklHX01FTUNHX1YxCiAvKgotICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2Ugd2l0aAotICogcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuCiYjNDM7ICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2UKJiM0MzsgKiB3aXRoIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLiAgT2ZmbGluaW5nIGEKJiM0MzsgKiBtZW1jZyBpcyByYXJlLCBzbyBkbyB0aGUgcmVkaXJlY3Rpb24gZm9yIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJCQkJCSAgIGJvb2wgKnJjdV9sb2NrZWQpCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqCiYjNDM7Z2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKnJjdV9sb2NrZWQpCiB7Ci0JLyogUmViaW5kaW5nIGNhbiBjYXVzZSB0aGlzIHZhbHVlIHRvIGJlIGNoYW5nZWQgYXQgcnVudGltZSAqLwotCWlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7CiYjNDM7CS8qCiYjNDM7CSAqIEZhc3QgcGF0aDogdGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byBAbWVtY2csIHNvIHJlYWRpbmcKJiM0MzsJICogaXRzIENTU19EWUlORyBmbGFnIHdpdGhvdXQgdGhlIFJDVSBsb2NrIGlzIHNhZmUuICBUaGUgUkNVIGxvY2sKJiM0MzsJICogaXMgb25seSBuZWVkZWQgdG8gd2FsayB1cCB0byBhIG5vbi1keWluZyBhbmNlc3Rvciwgd2hpY2gKJiM0MzsJICogaGFwcGVucyBvbmx5IHdoaWxlIGEgbWVtY2cgaXMgYWN0dWFsbHkgYmVpbmcgb2ZmbGluZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIW1lbWNnX2lzX2R5aW5nKG1lbWNnKSkgewogCQkqcmN1X2xvY2tlZCA9IGZhbHNlOwogCQlyZXR1cm4gbWVtY2c7CiAJfQpAQCAtODc1LDE3ICYjNDM7ODgwLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZCkKIAogCXJjdV9yZWFkX3VubG9jaygpOwogfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJCQkJCSAgIGJvb2wgKnJjdV9sb2NrZWQpCi17Ci0JcmV0dXJuIG1lbWNnOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKQotewotfQotI2VuZGlmCiAKIHN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCSAgICAgIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpCmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmMKaW5kZXggN2FjMmI4OGM4MGFlNS4uODQxMmY0ODQwYWUzNSAxMDA2NDQKLS0tIGEvbW0vd29ya2luZ3NldC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3dvcmtpbmdzZXQuYwpAQCAtNjg4LDEwICYjNDM7Njg4LDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsCiAKIAkJbWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZChzYy0mZ3Q7bWVtY2cpOwogCQlscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhzYy0mZ3Q7bWVtY2csIE5PREVfREFUQShzYy0mZ3Q7bmlkKSk7Ci0KIAkJZm9yIChwYWdlcyA9IDAsIGkgPSAwOyBpICZsdDsgTlJfTFJVX0xJU1RTOyBpJiM0MzsmIzQzOykKLQkJCXBhZ2VzICYjNDM7PSBscnV2ZWNfbHJ1X3NpemUobHJ1dmVjLCBpLCBNQVhfTlJfWk9ORVMgLSAxKTsKLQomIzQzOwkJCXBhZ2VzICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChscnV2ZWMsCiYjNDM7CQkJCQkJCSBOUl9MUlVfQkFTRSAmIzQzOyBpKTsKIAkJcGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKAogCQkJbHJ1dmVjLCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiAJCXBhZ2VzICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbCgKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY0NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhpcyBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBhc2tlZCB0byByZXZpZXcgdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGluIGFuZCBkaXNzZWN0IHdoYXQmIzM5O3MgY2hhbmdlZC4gTG9va3MgbGlrZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBtb2RpZmljYXRpb25zIGluIGBtbS9tZW1jb250cm9sLmNgIGFuZCBgbW0vd29ya2luZ3NldC5jYC4gU3BlY2lmaWNhbGx5OgoKRmlyc3QsIGluIGBtbS9tZW1jb250cm9sLmNgLCB0aGVyZSYjMzk7cyBhIHNpZ25pZmljYW50IGNoYW5nZSBhcm91bmQgdGhlIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCBhbmQgYGdldF9ub25fZHlpbmdfbWVtY2dfZW5kYCBmdW5jdGlvbnMuIEFoLCBJIHNlZSwgdGhleSBhcmUgbm8gbG9uZ2VyIGdhdGVkIGJ5IGBDT05GSUdfTUVNQ0dfVjFgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIHRoZSBjb2RlIGlzIGJlaW5nIGdlbmVyYWxpemVkIG9yIHBlcmhhcHMgdGhleSBhcmUgYWx3YXlzIGluIHNjb3BlLCByZWdhcmRsZXNzIG9mIHRoZSBtZW1vcnkgY29udHJvbCB2ZXJzaW9uLiBUaGUgcGF0Y2ggYXBwZWFycyB0byByZXBsYWNlIHRoZSBjaGVjayBmb3Igc3Vic3lzdGVtIGVuYWJsZW1lbnQgd2l0aCBhIGNoZWNrIGZvciBtZW1jZyYjMzk7cyAmIzM0O2R5aW5nJiMzNDsgc3RhdGUgaW5zaWRlIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YC4gVGhpcyBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgbW9yZSBkaXJlY3QuIFRoaXMgYWxzbyBtZWFucyB0aGF0IHRoYXQgZHVtbXkgYCNlbHNlYCBibG9jayBpcyBnb25lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcmVmYWN0b3JpbmcsIGVzcGVjaWFsbHkgdGhlIGltcGFjdCBvbiBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3IgY29ycmVjdG5lc3Mgd2l0aGluIHRoZSBgbWVtY2dgIHN1YnN5c3RlbSYjMzk7cyBjb3JlIGxvZ2ljLgoKTmV4dCwgaW4gYG1tL3dvcmtpbmdzZXQuY2AsIHRoZSBwYXRjaCBzZWVtcyB0byBhbHRlciB0aGUgc2hhZG93IG5vZGUgY291bnRpbmcgbWVjaGFuaXNtIHdpdGhpbiBgY291bnRfc2hhZG93X25vZGVzYC4gSXQgc2VlbXMgdGhhdCB0aGUgcGF0Y2ggcmVwbGFjZXMgdGhlIG9sZCBscnUgc2l6ZSBmdW5jdGlvbnMgd2l0aCB0aGUgcGFnZSBzdGF0ZSBmdW5jdGlvbnMuIFRoaXMgaXMgbW9zdCBsaWtlbHkgYSByZWZhY3RvcmluZyBmb3IgY2xhcml0eSBvciBlZmZpY2llbmN5LiBXZSBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLgoKTXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gem9vbSBvdXQuIEkgbmVlZCB0byBnZXQgYSBmdWxsIHZpZXcgb2YgdGhlIGNvZGUgYXJvdW5kIGJvdGggYG1tL21lbWNvbnRyb2wuY2AgYW5kIGBtbS93b3JraW5nc2V0LmNgIHRvIGZ1bGx5IGdyYXNwIHRoZSByYW1pZmljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkLCBob3cgdGhlIHN1cnJvdW5kaW5nIGRhdGEgc3RydWN0dXJlcyBhcmUgaGFuZGxlZCwgYW5kIGhvdyB0aGVzZSBjaGFuZ2VzIG1pZ2h0IGltcGFjdCB0aGUgb3ZlcmFsbCBzeXN0ZW0mIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg0MDpcdFx0LyogR2V0IHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiAodmFsICogdW5pdCAvIFBBR0VfU0laRSkuICovXG4gODQxOlx0XHRyZXMgPSBtdWx0X2ZyYWMoYWJzKHZhbCksIHVuaXQsIFBBR0VfU0laRSk7XG4gODQyOlx0XHQvKiBSb3VuZCB1cCB6ZXJvIHZhbHVlcy4gKi9cbiA4NDM6XHRcdHJlcyA9IHJlcyA/IDogMTtcbiA4NDQ6XHRcbiA4NDU6XHRcdHJldHVybiB2YWwgXHUwMDNjIDAgPyAtcmVzIDogcmVzO1xuIDg0NjpcdH1cbiA4NDc6XHRcbiA4NDg6XHQvKlxuIDg0OTpcdCAqIFVzZWQgaW4gbW9kX21lbWNnX3N0YXRlKCkgYW5kIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoKSB0byBhdm9pZCByYWNlXG4gODUwOlx0ICogd2l0aCByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy4gIE9mZmxpbmluZyBhXG4gODUxOlx0ICogbWVtY2cgaXMgcmFyZSwgc28gZG8gdGhlIHJlZGlyZWN0aW9uIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLlxuIDg1MjpcdCAqL1xuIDg1MzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKlxuIDg1NDpcdGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxuIDg1NTpcdHtcbiA4NTY6XHRcdC8qXG4gODU3Olx0XHQgKiBGYXN0IHBhdGg6IHRoZSBjYWxsZXIgaG9sZHMgYSByZWZlcmVuY2UgdG8gQG1lbWNnLCBzbyByZWFkaW5nXG4gODU4Olx0XHQgKiBpdHMgQ1NTX0RZSU5HIGZsYWcgd2l0aG91dCB0aGUgUkNVIGxvY2sgaXMgc2FmZS4gIFRoZSBSQ1UgbG9ja1xuIDg1OTpcdFx0ICogaXMgb25seSBuZWVkZWQgdG8gd2FsayB1cCB0byBhIG5vbi1keWluZyBhbmNlc3Rvciwgd2hpY2hcbiA4NjA6XHRcdCAqIGhhcHBlbnMgb25seSB3aGlsZSBhIG1lbWNnIGlzIGFjdHVhbGx5IGJlaW5nIG9mZmxpbmVkLlxuIDg2MTpcdFx0ICovXG4gODYyOlx0XHRpZiAoIW1lbWNnX2lzX2R5aW5nKG1lbWNnKSkge1xuIDg2MzpcdFx0XHQqcmN1X2xvY2tlZCA9IGZhbHNlO1xuIDg2NDpcdFx0XHRyZXR1cm4gbWVtY2c7XG4gODY1Olx0XHR9XG4gODY2Olx0XG4gODY3Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gODY4Olx0XHQqcmN1X2xvY2tlZCA9IHRydWU7XG4gODY5Olx0XG4gODcwOlx0XHR3aGlsZSAobWVtY2dfaXNfZHlpbmcobWVtY2cpKVxuIDg3MTpcdFx0XHRtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcbiA4NzI6XHRcbiA4NzM6XHRcdHJldHVybiBtZW1jZztcbiA4NzQ6XHR9XG4gODc1Olx0XG4gODc2Olx0c3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZClcbiA4Nzc6XHR7XG4gODc4Olx0XHRpZiAoIXJjdV9sb2NrZWQpXG4gODc5Olx0XHRcdHJldHVybjtcbiA4ODA6XHRcbiA4ODE6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDg4MjpcdH1cbiA4ODM6XHRcbiA4ODQ6XHRzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gODg1Olx0XHRcdFx0ICAgICAgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbClcbiA4ODY6XHR7XG4gODg3Olx0XHRpbnQgaSA9IG1lbWNnX3N0YXRzX2luZGV4KGlkeCk7XG4gODg4Olx0XHRpbnQgY3B1O1xuIDg4OTpcdFxuIDg5MDpcdFx0aWYgKFdBUk5fT05DRShCQURfU1RBVF9JRFgoaSksIFwmIzM0OyVzOiBtaXNzaW5nIHN0YXQgaXRlbSAlZFxcblwmIzM0OywgX19mdW5jX18sIGlkeCkpXG4gODkxOlx0XHRcdHJldHVybjtcbiA4OTI6XHRcbiA4OTM6XHRcdGNwdSA9IGdldF9jcHUoKTtcbiA4OTQ6XHRcbiA4OTU6XHRcdHRoaXNfY3B1X2FkZChtZW1jZy1cdTAwM2V2bXN0YXRzX3BlcmNwdS1cdTAwM2VzdGF0ZVtpXSwgdmFsKTtcbiA4OTY6XHRcdHZhbCA9IG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpZHgsIHZhbCk7XG4gODk3Olx0XHRtZW1jZ19yc3RhdF91cGRhdGVkKG1lbWNnLCB2YWwsIGNwdSk7XG4gODk4Olx0XG4gODk5Olx0XHR0cmFjZV9tb2RfbWVtY2dfc3RhdGUobWVtY2csIGlkeCwgdmFsKTtcbiA5MDA6XHRcbiA5MDE6XHRcdHB1dF9jcHUoKTtcbiA5MDI6XHR9XG4gOTAzOlx0XG4gOTA0Olx0LyoqXG4gOTA1Olx0ICogbW9kX21lbWNnX3N0YXRlIC0gdXBkYXRlIGNncm91cCBtZW1vcnkgc3RhdGlzdGljc1xuIDkwNjpcdCAqIEBtZW1jZzogdGhlIG1lbW9yeSBjZ3JvdXBcbiA5MDc6XHQgKiBAaWR4OiB0aGUgc3RhdCBpdGVtIC0gY2FuIGJlIGVudW0gbWVtY2dfc3RhdF9pdGVtIG9yIGVudW0gbm9kZV9zdGF0X2l0ZW1cbiA5MDg6XHQgKiBAdmFsOiBkZWx0YSB0byBhZGQgdG8gdGhlIGNvdW50ZXIsIGNhbiBiZSBuZWdhdGl2ZVxuIDkwOTpcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NjgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgIENhbGwgU2l0ZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O3doZXJlIHRoZSBoZWNrIGlzIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCBhY3R1YWxseSAqdXNlZCogd2l0aGluIGBtbS9tZW1jb250cm9sLmNgPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBJIG5lZWQgdG8ga25vdyB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGFuZCBob3cgdGhlIHZhbHVlIHJldHVybmVkIGlzIHRoZW4gaGFuZGxlZC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgcmVhZCwgYSBjcml0aWNhbCBwYXRoIG9wZXJhdGlvbiwgb3Igc29tZXRoaW5nIGluIGJldHdlZW4/IEtub3dpbmcgdGhhdCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYW5kIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIGJ1ZyBodW50aW5nLiBJ4oCZbGwgc3RhcnQgYnkgdHJhY2luZyB0aGUgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhlIHNwZWNpZmllZCBmaWxlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGZpcnN0LXBhc3MgdW5kZXJzdGFuZGluZyBvZiBpdHMgaW1wb3J0YW5jZSB3aXRoaW4gdGhlIGJyb2FkZXIgbWVtb3J5IGNvbnRyb2wgbWVjaGFuaXNtcy4gVGhpcyBpc27igJl0IGEgZGVlcCBkaXZlIHlldDsgaXQmIzM5O3MgYSBtYXAtbWFraW5nIGV4ZXJjaXNlLiBJIHdpbGwgc3RhcnQgYnkgdXNpbmcgYGdyZXBgLCBgZ2l0IGdyZXBgLCBvciB3aGF0ZXZlciB0b29sIGNvbWVzIHRvIGhhbmQsIGJ1dCBxdWlja2x5IEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgdGhlIGNhbGwgc3RhY2sgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz04NTM9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqXG5tbS9tZW1jb250cm9sLmM6ODU0OmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxubW0vbWVtY29udHJvbC5jLTg1NS17XG4tLVxubW0vbWVtY29udHJvbC5jPTkxMD12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcbi0tXG5tbS9tZW1jb250cm9sLmMtOTE3LVxubW0vbWVtY29udHJvbC5jOjkxODpcdG1lbWNnID0gZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChtZW1jZywgXHUwMDI2cmN1X2xvY2tlZCk7XG5tbS9tZW1jb250cm9sLmMtOTE5LVx0X19tb2RfbWVtY2dfc3RhdGUobWVtY2csIGlkeCwgdmFsKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9OTc2PXN0YXRpYyB2b2lkIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL21lbWNvbnRyb2wuYy05ODUtXHRwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xubW0vbWVtY29udHJvbC5jOjk4NjpcdG1lbWNnID0gZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChwbi1cdTAwM2VtZW1jZywgXHUwMDI2cmN1X2xvY2tlZCk7XG5tbS9tZW1jb250cm9sLmMtOTg3LVx0cG4gPSBtZW1jZy1cdTAwM2Vub2RlaW5mb1twZ2RhdC1cdTAwM2Vub2RlX2lkXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDg3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBTaGFkb3cgTm9kZSBDb3VudGluZyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHNoYWRvdyBub2RlIGNvdW50aW5nIHdvcmtzIGluIHRoZSB3b3JraW5nc2V0IGltcGxlbWVudGF0aW9uLiBUaGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyBgbW0vd29ya2luZ3NldC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgY291bnRfc2hhZG93X25vZGVzYCBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMg4oCTIHdoYXQgZXhhY3RseSBpcyBhICYjMzQ7c2hhZG93IG5vZGUmIzM0OyBpbiB0aGlzIGNvbnRleHQ/IElzIGl0IHJlbGF0ZWQgdG8gcGFnZSBjb2xvcmluZywgVExCIG1pc3Nlcywgc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEkgYmV0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBvdmVyYWxsIHdvcmtpbmdzZXQgYWxnb3JpdGhtLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdOKAmXMgaW1wbGVtZW50ZWQgYW5kIHdoZXJlIHRoaXMgY291bnRlciBpcyB1c2VkIC0gaXMgaXQgZm9yIHBlcmZvcm1hbmNlIG1ldHJpY3MsIGV2aWN0aW9uIHN0cmF0ZWdpZXMsIG9yIHNvbWV0aGluZyBtb3JlIGZ1bmRhbWVudGFsIHRvIHRoZSB3b3JraW5nc2V0IGxvZ2ljPyBLbm93aW5nIHdoZXJlIGFuZCBob3cgdGhpcyBjb3VudGVyIGdldHMgdXBkYXRlZCB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBvdmVyYWxsIGltcGFjdC4gVGltZSB0byBkaXZlIGluIGFuZCBnZXQgYSBmZWVsIGZvciB0aGUgY29udHJvbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vd29ya2luZ3NldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NzA6XHRcdCAqIGluYWN0aXZlIGxpc3QuIEFzc3VtZSB0aGUgdG90YWwgY2FjaGUgc2l6ZSBmb3IgdGhhdC5cbiA2NzE6XHRcdCAqXG4gNjcyOlx0XHQgKiBOb2RlcyBtaWdodCBiZSBzcGFyc2VseSBwb3B1bGF0ZWQsIHdpdGggb25seSBvbmUgc2hhZG93XG4gNjczOlx0XHQgKiBlbnRyeSBpbiB0aGUgZXh0cmVtZSBjYXNlLiBPYnZpb3VzbHksIHdlIGNhbm5vdCBrZWVwIG9uZVxuIDY3NDpcdFx0ICogbm9kZSBmb3IgZXZlcnkgZWxpZ2libGUgc2hhZG93IGVudHJ5LCBzbyBjb21wcm9taXNlIG9uIGFcbiA2NzU6XHRcdCAqIHdvcnN0LWNhc2UgZGVuc2l0eSBvZiAxLzh0aC4gQmVsb3cgdGhhdCwgbm90IGFsbCBlbGlnaWJsZVxuIDY3NjpcdFx0ICogcmVmYXVsdHMgY2FuIGJlIGRldGVjdGVkIGFueW1vcmUuXG4gNjc3Olx0XHQgKlxuIDY3ODpcdFx0ICogT24gNjQtYml0IHdpdGggNyB4YV9ub2RlcyBwZXIgcGFnZSBhbmQgNjQgc2xvdHNcbiA2Nzk6XHRcdCAqIGVhY2gsIHRoaXMgd2lsbCByZWNsYWltIHNoYWRvdyBlbnRyaWVzIHdoZW4gdGhleSBjb25zdW1lXG4gNjgwOlx0XHQgKiB+MS44JSBvZiBhdmFpbGFibGUgbWVtb3J5OlxuIDY4MTpcdFx0ICpcbiA2ODI6XHRcdCAqIFBBR0VfU0laRSAvIHhhX25vZGVzIC8gbm9kZV9lbnRyaWVzICogOCAvIFBBR0VfU0laRVxuIDY4MzpcdFx0ICovXG4gNjg0Olx0I2lmZGVmIENPTkZJR19NRU1DR1xuIDY4NTpcdFx0aWYgKHNjLVx1MDAzZW1lbWNnKSB7XG4gNjg2Olx0XHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbiA2ODc6XHRcdFx0aW50IGk7XG4gNjg4Olx0XG4gNjg5Olx0XHRcdG1lbV9jZ3JvdXBfZmx1c2hfc3RhdHNfcmF0ZWxpbWl0ZWQoc2MtXHUwMDNlbWVtY2cpO1xuIDY5MDpcdFx0XHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhzYy1cdTAwM2VtZW1jZywgTk9ERV9EQVRBKHNjLVx1MDAzZW5pZCkpO1xuIDY5MTpcdFx0XHRmb3IgKHBhZ2VzID0gMCwgaSA9IDA7IGkgXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSYjNDM7JiM0MzspXG4gNjkyOlx0XHRcdFx0cGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYyxcbiA2OTM6XHRcdFx0XHRcdFx0XHRcdCBOUl9MUlVfQkFTRSAmIzQzOyBpKTtcbiA2OTQ6XHRcdFx0cGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxuIDY5NTpcdFx0XHRcdGxydXZlYywgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiA2OTY6XHRcdFx0cGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxuIDY5NzpcdFx0XHRcdGxydXZlYywgTlJfU0xBQl9VTlJFQ0xBSU1BQkxFX0IpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIDY5ODpcdFx0fSBlbHNlXG4gNjk5Olx0I2VuZGlmXG4gNzAwOlx0XHRcdHBhZ2VzID0gbm9kZV9wcmVzZW50X3BhZ2VzKHNjLVx1MDAzZW5pZCk7XG4gNzAxOlx0XG4gNzAyOlx0XHRtYXhfbm9kZXMgPSBwYWdlcyBcdTAwM2VcdTAwM2UgKFhBX0NIVU5LX1NISUZUIC0gMyk7XG4gNzAzOlx0XG4gNzA0Olx0XHRpZiAobm9kZXMgXHUwMDNjPSBtYXhfbm9kZXMpXG4gNzA1Olx0XHRcdHJldHVybiAwO1xuIDcwNjpcdFx0cmV0dXJuIG5vZGVzIC0gbWF4X25vZGVzO1xuIDcwNzpcdH1cbiA3MDg6XHRcbiA3MDk6XHRzdGF0aWMgZW51bSBscnVfc3RhdHVzIHNoYWRvd19scnVfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxuIDcxMDpcdFx0XHRcdFx0XHQgIHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydSxcbiA3MTE6XHRcdFx0XHRcdFx0ICB2b2lkICphcmcpIF9fbXVzdF9ob2xkKGxydS1cdTAwM2Vsb2NrKVxuIDcxMjpcdHtcbiA3MTM6XHRcdHN0cnVjdCB4YV9ub2RlICpub2RlID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCB4YV9ub2RlLCBwcml2YXRlX2xpc3QpO1xuIDcxNDpcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XG4gNzE1Olx0XHRpbnQgcmV0O1xuIDcxNjpcdFxuIDcxNzpcdFx0LypcbiA3MTg6XHRcdCAqIFBhZ2UgY2FjaGUgaW5zZXJ0aW9ucyBhbmQgZGVsZXRpb25zIHN5bmNocm9ub3VzbHkgbWFpbnRhaW5cbiA3MTk6XHRcdCAqIHRoZSBzaGFkb3cgbm9kZSBMUlUgdW5kZXIgdGhlIGlfcGFnZXMgbG9jayBhbmQgdGhlXG4gNzIwOlx0XHQgKiBcdTAwMjZscnUtXHUwMDNlbG9jay4gQmVjYXVzZSB0aGUgcGFnZSBjYWNoZSB0cmVlIGlzIGVtcHRpZWQgYmVmb3JlXG4gNzIxOlx0XHQgKiB0aGUgaW5vZGUgY2FuIGJlIGRlc3Ryb3llZCwgaG9sZGluZyB0aGUgXHUwMDI2bHJ1LVx1MDAzZWxvY2sgcGlucyBhbnlcbiA3MjI6XHRcdCAqIGFkZHJlc3Nfc3BhY2UgdGhhdCBoYXMgbm9kZXMgb24gdGhlIExSVS5cbiA3MjM6XHRcdCAqXG4gNzI0Olx0XHQgKiBXZSBjYW4gdGhlbiBzYWZlbHkgdHJhbnNpdGlvbiB0byB0aGUgaV9wYWdlcyBsb2NrIHRvXG4gNzI1Olx0XHQgKiBwaW4gb25seSB0aGUgYWRkcmVzc19zcGFjZSBvZiB0aGUgcGFydGljdWxhciBub2RlIHdlIHdhbnRcbiA3MjY6XHRcdCAqIHRvIHJlY2xhaW0sIHRha2UgdGhlIG5vZGUgb2ZmLUxSVSwgYW5kIGRyb3AgdGhlIFx1MDAyNmxydS1cdTAwM2Vsb2NrLlxuIDcyNzpcdFx0ICovXG4gNzI4Olx0XG4gNzI5Olx0XHRtYXBwaW5nID0gY29udGFpbmVyX29mKG5vZGUtXHUwMDNlYXJyYXksIHN0cnVjdCBhZGRyZXNzX3NwYWNlLCBpX3BhZ2VzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzYyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQ2FuZGlkYXRlOiBNZW1vcnkgTWFuYWdlbWVudCBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjaGFuZ2VzLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgIGFuZCBgbW0vd29ya2luZ3NldC5jYC4gUmlnaHQgYXdheSwgdGhpcyBzY3JlYW1zIG1lbW9yeSBtYW5hZ2VtZW50IOKAkyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgYW5kIHdvcmtpbmdzZXQgY2FsY3VsYXRpb25zLiBBbmQgY29uc2lkZXJpbmcgdGhpcyBpcyBhbGwgd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGRpcmVjdG9yeSAoYG1tL2ApLCB0aGlzIGNvZGUgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBleGVjdXRlZCBoZWF2aWx5LCBlc3BlY2lhbGx5IGlmIGBDT05GSUdfTUVNQ0dgIGlzIGVuYWJsZWQsIHdoaWNoIGl0IGxpa2VseSBpcyBnaXZlbiB0aGUgZmlsZSBuYW1lLgoKTm93LCBkb2VzIHRoaXMgbWVldCBvdXIgZnV6emluZyBjcml0ZXJpYT8gTGV0JiMzOTtzIHNlZS4uLiB3ZSBoYXZlICYjMzQ7Q29yZSBTdWJzeXN0ZW1zOiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKS4uLiYjMzQ7IERpbmcgZGluZyBkaW5nISBTZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCBXb3J0aEZ1enppbmcgaXMgdHJ1ZSBpbiB0aGlzIGNhc2UuIFdlJiMzOTtyZSBkaXJlY3RseSBkZWFsaW5nIHdpdGggY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4gV2UmIzM5O3JlIG9uIQoKTm93IEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNvbmZpcm0gYENPTkZJR19NRU1DR2AgZm9yIGBtbS9tZW1jb250cm9sLmNgIC0gaXMgdGhpcyBmaWxlIG9ubHkgYnVpbHQgd2hlbiBgTUVNQ0dgIGlzIGVuYWJsZWQ/IEkmIzM5O2xsIHF1aWNrbHkgbG9vayBhdCB0aGUgYG1tL01ha2VmaWxlYCBmb3IgdGhhdCBjb25maXJtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWNvbnRyb2wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cbm1tL01ha2VmaWxlOjI5OktDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLXYxLm8gOj0gblxubW0vTWFrZWZpbGUtMzAtS0NPVl9JTlNUUlVNRU5UX21tem9uZS5vIDo9IG5cbi0tXG5tbS9NYWtlZmlsZT0xMDQ9b2JqLSQoQ09ORklHX0xJVkVVUERBVEVfTUVNRkQpICYjNDM7PSBtZW1mZF9sdW8ub1xubW0vTWFrZWZpbGU6MTA1Om9iai0kKENPTkZJR19NRU1DR19WMSkgJiM0Mzs9IG1lbWNvbnRyb2wtdjEub1xubW0vTWFrZWZpbGU6MTA2Om9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cbm1tL01ha2VmaWxlLTEwNy1pZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm1tL01ha2VmaWxlOjEwODpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBicGZfbWVtY29udHJvbC5vXG5tbS9NYWtlZmlsZS0xMDktZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA4OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gTWVtY2cgYW5kIEtjb25maWcgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBjb2RlYmFzZSwgYW5kIGl0IGxvb2tzIGxpa2UgYENPTkZJR19NRU1DR2AgaXMgYSBoYXJkIHJlcXVpcmVtZW50IGZvciB0aGUgYG1lbWNvbnRyb2wuY2AgZmlsZS4gTm8gc3VycHJpc2VzIHRoZXJlOyB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCBmdW5jdGlvbmFsaXR5LiBUaGVuLCB3aGVuIEkgZ2V0IG92ZXIgdG8gYHdvcmtpbmdzZXQuY2AsIEkgc2VlIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24g4oCTIGAjaWZkZWYgQ09ORklHX01FTUNHYCDigJMgYXJvdW5kIGEgcGFydGljdWxhciBzZWN0aW9uIHdpdGhpbiBgY291bnRfc2hhZG93X25vZGVzYC4gVGhhdCBzdWdnZXN0cyB0aGUgd29ya2luZ3NldCBjb2RlIGhhcyBzb21lIGludGVyYWN0aW9ucyB0aGF0IGFyZSBlaXRoZXIgb24gb3Igb2ZmLCBkZXBlbmRpbmcgb24gd2hldGhlciBtZW1vcnkgY2dyb3VwcyBhcmUgZW5hYmxlZC4gTWFrZXMgc2Vuc2U7IHdvcmtpbmdzZXQgbWFuYWdlbWVudCBjYW4gbGV2ZXJhZ2UgbWVtY2cgc3RhdHMgZm9yIG9wdGltaXphdGlvbiBvciBhZGFwdGF0aW9uLgoKVGltZSB0byBjb25maXJtIHRoaXMgZGVwZW5kZW5jeSwgYW5kIHByb2JhYmx5IGNsYXJpZnkgd2hpY2ggc3BlY2lmaWMgZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgd2l0aCB0aGUgY29uZmlnLiBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCBgaW5pdC9LY29uZmlnYCB0byBwaW5wb2ludCBleGFjdGx5IGhvdyBgTUVNQ0dgIGlzIGRlZmluZWQgYW5kIHdoYXQgb3RoZXIgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBiaWdnZXIgcGljdHVyZS4gVW5kZXJzdGFuZGluZyB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgaGVyZSBpcyBjcnVjaWFsIGZvciBjb21wcmVoZW5kaW5nIHRoZSBjb21wbGV0ZSBhcmNoaXRlY3R1cmUgYW5kIHdoaWNoIHBhcnRzIGFyZSBhY3RpdmUgaW4gYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24uIEkgd2FudCB0byBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVsbCBkZXBlbmRlbmN5IHRyZWUsIGFuZCBJIGtub3cgSSYjMzk7bGwgZmluZCBpdCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDY4PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDc3LVxuaW5pdC9LY29uZmlnOjEwNzg6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA3OS1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA4Ni1cbmluaXQvS2NvbmZpZzoxMDg3OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA4OC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5My1cbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTEwOTUtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDAtXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTAyLVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byBNRU1DRyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIE1FTUNHLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIHRoaW5raW5nIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYXJvdW5kIGxpbmUgMTA3OC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIGFyZSBkZWZpbmVkLCBhbmQgdGhlIEtjb25maWcgZmlsZXMgYXJlIHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgZGVwZW5kZW5jaWVzIGJldHdlZW4gZmVhdHVyZXMgYW5kIG9wdGlvbnMuIEkmIzM5O20gYmV0dGluZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMgZm9yIE1FTUNHIHdpbGwgYmUgbGFpZCBvdXQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNzU6XHRcbjEwNzY6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA3NzpcdFxuMTA3ODpcdGNvbmZpZyBNRU1DR1xuMTA3OTpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTA4MDpcdFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxuMTA4MTpcdFx0c2VsZWN0IEVWRU5URkRcbjEwODI6XHRcdHNlbGVjdCBTTEFCX09CSl9FWFRcbjEwODM6XHRcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xuMTA4NDpcdFx0aGVscFxuMTA4NTpcdFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXG4xMDg2Olx0XG4xMDg3Olx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbjEwODg6XHRcdGJvb2xcbjEwODk6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTA6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTE6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4xMDkyOlx0XHRkZWZhdWx0IHlcbjEwOTM6XHRcbjEwOTQ6XHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbjEwOTU6XHRcdGJvb2xcbjEwOTY6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTc6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTg6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjEwOTk6XHRcdGRlZmF1bHQgeVxuMTEwMDpcdFxuMTEwMTpcdGNvbmZpZyBNRU1DR19WMVxuMTEwMjpcdFx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMTAzOlx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMTA0Olx0XHRkZWZhdWx0IG5cbjExMDU6XHRcdGhlbHBcbjExMDY6XHRcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XG4xMTA3Olx0XHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXG4xMTA4Olx0XHQgIHdoaWNoIGhhdmVuJiMzOTt0IG1pZ3JhdGVkIHRvIHRoZSBuZXcgY2dyb3VwIHYyIGludGVyZmFjZSB5ZXQuIElmIHlvdVxuMTEwOTpcdFx0ICBkbyBub3QgaGF2ZSBhbnkgc3VjaCBhcHBsaWNhdGlvbiB0aGVuIHlvdSBhcmUgY29tcGxldGVseSBmaW5lIGxlYXZpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM1MAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgQ09ORklHX01FTUNHYC4gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBjb25maXJtIGlzIGl0cyBkZXBlbmRlbmN5IG9uIGBDT05GSUdfQ0dST1VQU2AuIEkga25vdyB0aGF0JiMzOTtzIGEgY29tbW9uIHJlbGF0aW9uc2hpcCwgYnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIExldCBtZSBnbyBiYWNrIHRvIHRoZSBzb3VyY2UgY29kZSB0byBjb25maXJtIHRoZSBidWlsZCBpbnN0cnVjdGlvbnMuIEkgc2hvdWxkIGJlIGFibGUgdG8gdHJhY2sgZG93biB0aGUgZGVwZW5kZW5jeSBwcmV0dHkgcXVpY2tseSBieSBjaGVja2luZyBmb3IgYW4gZW5jbG9zaW5nIGBpZiBDR1JPVVBTYCBibG9jayBvciBwZXJoYXBzIGEgYG1lbnVjb25maWcgQ0dST1VQU2AgbGluZSBpbiB0aGUgS2NvbmZpZyBmaWxlcy4gVGhpcyBpcyBzdHJhaWdodGZvcndhcmQgYnV0IGltcG9ydGFudCB0byB2ZXJpZnkgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgaW4gbXkgYW5hbHlzaXMuIEkgaGF2ZSB0byBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGRlcGVuZGVuY2llcyBhcmUgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBDR1JPVVBTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDQ2PWNvbmZpZyBTTEFCX09CSl9FWFRcbi0tXG5pbml0L0tjb25maWctMTA0OC1cbmluaXQvS2NvbmZpZzoxMDQ5Om1lbnVjb25maWcgQ0dST1VQU1xuaW5pdC9LY29uZmlnLTEwNTAtXHRib29sIFwmIzM0O0NvbnRyb2wgR3JvdXAgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjU0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgQ29udHJvbCBHcm91cCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBDT05GSUdfTUVNQ0dgLCBhbmQgcG90ZW50aWFsbHkgYENPTkZJR19NRU1DR19WMWAgYXMgd2VsbC4gVGhlIGNvZGUgc2VlbXMgdG8gYmUgd29ya2luZyB3aXRoIGJvdGggdmVyc2lvbnMgbm93LCBzbyB0aGF0JiMzOTtzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLiBGaXJzdCwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50IGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgYWx3YXlzIGJlc3QgdG8gaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUuCgpOZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGBGb2N1c1N5bWJvbHNgLiBUaGF0JiMzOTtzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLgoKTm93LCB0aGUgbWFpbiBmb2N1cyBpcyBvbiBpZGVudGlmeWluZyBleGFjdGx5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgbW9kaWZpZWQgb3IgZGlyZWN0bHkgYWZmZWN0ZWQgYnkgdGhpcyBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIGFoLCBoZXJlJiMzOTtzIG9uZTogYG1tL3dvcmtpbmdzZXQuY2AuIFNwZWNpZmljYWxseSwgYGNvdW50X3NoYWRvd19ub2Rlc2AuIFRoYXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGxpbWl0ZWQgaW4gaXRzIHNjb3BlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBjb3VudF9zaGFkb3dfbm9kZXNgIHRvIGZ1bGx5IGFzc2VzcyB0aGUgaW1wbGljYXRpb25zLCBhbmQgYWxzbyBhbnkgc2hyaW5rZXJzIHRvIHNlZSBob3cgaXQgbWlnaHQgdGllIGludG8gbWVtb3J5IHJlY2xhaW0uIEkgYWxzbyBoYXZlIHRvIHNlZSB3aGVyZSBpdCYjMzk7cyAqdXNlZCosIHdoaWNoIHNob3VsZCBnaXZlIGEgY2xlYXJlciB2aWV3IG9mIGl0cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3VudF9zaGFkb3dfbm9kZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vd29ya2luZ3NldC5jPTYyND12b2lkIHdvcmtpbmdzZXRfdXBkYXRlX25vZGUoc3RydWN0IHhhX25vZGUgKm5vZGUpXG4tLVxubW0vd29ya2luZ3NldC5jLTY1MC1cbm1tL3dvcmtpbmdzZXQuYzo2NTE6c3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG5tbS93b3JraW5nc2V0LmMtNjUyLVx0XHRcdFx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3dvcmtpbmdzZXQuYz03OTI9c3RhdGljIGludCBfX2luaXQgd29ya2luZ3NldF9pbml0KHZvaWQpXG4tLVxubW0vd29ya2luZ3NldC5jLTgyOC1cbm1tL3dvcmtpbmdzZXQuYzo4Mjk6XHR3b3JraW5nc2V0X3NoYWRvd19zaHJpbmtlci1cdTAwM2Vjb3VudF9vYmplY3RzID0gY291bnRfc2hhZG93X25vZGVzO1xubW0vd29ya2luZ3NldC5jLTgzMC1cdHdvcmtpbmdzZXRfc2hhZG93X3Nocmlua2VyLVx1MDAzZXNjYW5fb2JqZWN0cyA9IHNjYW5fc2hhZG93X25vZGVzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI1MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBjb3VudF9zaGFkb3dfbm9kZXNgIFNocmlua2VyIENhbGxiYWNrKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgY291bnRfc2hhZG93X25vZGVzYCwgYW5kIGl0JiMzOTtzIGFjdGluZyBhcyBhIHNocmlua2VyIGNhbGxiYWNrLCBzcGVjaWZpY2FsbHkgYHdvcmtpbmdzZXRfc2hhZG93X3Nocmlua2VyLSZndDtjb3VudF9vYmplY3RzYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBtZW1vcnkgY29udHJvbCBtZWNoYW5pc20sIHNvIEkmIzM5O20gaGVhZGluZyBvdmVyIHRvIGBtbS9tZW1jb250cm9sLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBvcGVyYXRpbmcgd2l0aGluIHRoZSBjb250ZXh0IG9mIG1lbW9yeSBjZ3JvdXBzLgoKQSBxdWljayBsb29rIHJldmVhbHMgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgLCB3aGljaCBpcyBkZWZpbmVkIGFzIGBzdGF0aWMgaW5saW5lYC4gVGhpcyBpcyBrZXk7IGl0IG1lYW5zIGl0JiMzOTtzIGxpa2VseSBvcHRpbWl6ZWQgZm9yIHBlcmZvcm1hbmNlLCBidXQgYWxzbyBwb3RlbnRpYWxseSBtYWtlcyBkaXJlY3QgY2FsbCBhbmFseXNpcyBhIGJpdCBtb3JlIGxpbWl0ZWQuIE5vdywgbGV0JiMzOTtzIHNlZSB3aGVyZSB0aGF0IGlubGluZSBmdW5jdGlvbiBpcyAqYWN0dWFsbHkqIHVzZWQgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBJJiMzOTttIGZpbmRpbmcgaXQmIzM5O3MgY2FsbGVkIHdpdGhpbiBgbW9kX21lbWNnX3N0YXRlYCBhbmQgYWxzbyBgbW9kX21lbWNnX2xydXZlY19zdGF0ZWAuIE15IG5leHQgcXVlc3Rpb24gaXMsIGlzIGBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlYCBzdGF0aWMsIHRvbz8gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIHZpc2liaWxpdHkgb2YgdGhpcyBvbmUuIFRoYXQmIzM5O3MgdGhlIG5leHQgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZF9tZW1jZ19scnV2ZWNfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTU1MD11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTczLSNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYzo1NzQ6c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcbm1tL21lbWNvbnRyb2wuYy01NzUtXHRcdFx0XHQgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTU3Nz12b2lkIHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTU5MC1cbm1tL21lbWNvbnRyb2wuYzo1OTE6XHRcdF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShjaGlsZF9wbiwgaWR4LCAtdmFsdWUpO1xubW0vbWVtY29udHJvbC5jOjU5MjpcdFx0X19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHBhcmVudF9wbiwgaWR4LCB2YWx1ZSk7XG5tbS9tZW1jb250cm9sLmMtNTkzLVx0fVxuLS1cbm1tL21lbWNvbnRyb2wuYz04MzI9c3RhdGljIGxvbmcgbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGludCBpZHgsIGxvbmcgdmFsKVxuLS1cbm1tL21lbWNvbnRyb2wuYy04NDgtLypcbm1tL21lbWNvbnRyb2wuYzo4NDk6ICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2Vcbm1tL21lbWNvbnRyb2wuYy04NTAtICogd2l0aCByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy4gIE9mZmxpbmluZyBhXG4tLVxubW0vbWVtY29udHJvbC5jPTk0MT12b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtOTUwLVxubW0vbWVtY29udHJvbC5jOjk1MTpzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxubW0vbWVtY29udHJvbC5jLTk1Mi1cdFx0XHRcdCAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsIGxvbmcgdmFsKVxuLS1cbm1tL21lbWNvbnRyb2wuYy05NzAtXHRtZW1jZ19yc3RhdF91cGRhdGVkKG1lbWNnLCB2YWwsIGNwdSk7XG5tbS9tZW1jb250cm9sLmM6OTcxOlx0dHJhY2VfbW9kX21lbWNnX2xydXZlY19zdGF0ZShtZW1jZywgaWR4LCB2YWwpO1xubW0vbWVtY29udHJvbC5jLTk3Mi1cbi0tXG5tbS9tZW1jb250cm9sLmMtOTc1LVxubW0vbWVtY29udHJvbC5jOjk3NjpzdGF0aWMgdm9pZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbm1tL21lbWNvbnRyb2wuYy05NzctXHRcdFx0XHQgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LFxuLS1cbm1tL21lbWNvbnRyb2wuYy05ODgtXG5tbS9tZW1jb250cm9sLmM6OTg5Olx0X19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHBuLCBpZHgsIHZhbCk7XG5tbS9tZW1jb250cm9sLmMtOTkwLVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xMDA0PXZvaWQgbW9kX2xydXZlY19zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LFxuLS1cbm1tL21lbWNvbnRyb2wuYy0xMDExLVx0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG5tbS9tZW1jb250cm9sLmM6MTAxMjpcdFx0bW9kX21lbWNnX2xydXZlY19zdGF0ZShscnV2ZWMsIGlkeCwgdmFsKTtcbm1tL21lbWNvbnRyb2wuYy0xMDEzLX1cbi0tXG5tbS9tZW1jb250cm9sLmM9MjkwND1zdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9zbGFiX25taV9zYWZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjkxMS1cdFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbm1tL21lbWNvbnRyb2wuYzoyOTEyOlx0XHRtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKGxydXZlYywgaWR4LCBucik7XG5tbS9tZW1jb250cm9sLmMtMjkxMy1cdH0gZWxzZSB7XG4tLVxubW0vbWVtY29udHJvbC5jPTI5MjU9c3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfc2xhYl9ubWlfc2FmZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTI5MzEtXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xubW0vbWVtY29udHJvbC5jOjI5MzI6XHRtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKGxydXZlYywgaWR4LCBucik7XG5tbS9tZW1jb250cm9sLmMtMjkzMy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjc5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1jZyBTdGF0ZSBNb2RpZmljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gdGhlIGluaXRpYWwgbG9vaywgYG1tL21lbWNvbnRyb2wuY2AgaXMgdGhlIHByaW1hcnkgYXJlYSBvZiBpbnRlcmVzdC4gSSBzZWUgdGhhdCBgbW9kX21lbWNnX3N0YXRlYCBjYWxscyBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAsIHdoaWNoIGlzIG5vbi1zdGF0aWMuIFRoZW4gYG1vZF9tZW1jZ19scnV2ZWNfc3RhdGVgIChzdGF0aWMpIGFsc28gY2FsbHMgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgLCBhbmQgdGhhdCYjMzk7cyB1c2VkIGJ5IGBtb2RfbHJ1dmVjX3N0YXRlYCBhbmQgYGFjY291bnRfc2xhYl9ubWlfc2FmZWAuIFRoYXQgcGF0dGVybiBzdWdnZXN0cyBzb21lIHVuZGVybHlpbmcgc3RydWN0dXJlIGZvciBnZXR0aW5nIHRoZSBtZW1jZyBzdGFydC4gYHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsYCwgYHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbGAsIGFuZCBgbWVtY2dfb2ZmbGluZV9rbWVtYCBhcmUgaW1tZWRpYXRlbHkgZmxhZ2dlZCBhcyBkZWFsaW5nIHdpdGggbWVtY2cgb2ZmbGluaW5nIGFuZCByZXBhcmVudGluZywgc28gdGhvc2Ugd2FycmFudCBjYXJlZnVsIGF0dGVudGlvbiBsYXRlci4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBrZXkgZnVuY3Rpb25zOiBgbW9kX2xydXZlY19zdGF0ZWAgYW5kIGBtb2RfbWVtY2dfc3RhdGVgLiBBcmUgdGhleSBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgc3Vic3lzdGVtLCBvciBhcmUgdGhleSBicm9hZGx5IHVzZWQ/IFRoZSBmYWN0IHRoYXQgYG1vZF9scnV2ZWNfcGFnZV9zdGF0ZWAgaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBgbW1gIGNvZGUgc2VlbXMgc2lnbmlmaWNhbnQuIEhtbSwgYW5kIHRoZW4gYGNvdW50X3NoYWRvd19ub2Rlc2AgaXMgaW4gYG1tL3dvcmtpbmdzZXQuY2AsIHRoYXQmIzM5O3MgYSBiaXQgdW5leHBlY3RlZC4gSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aG9zZSB0d28gZmlsZXMgdGhhdCBhcmUgcmVsZXZhbnQuCgpSaWdodCwgdGltZSB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbW90aXZhdGlvbiBiZWhpbmQgdGhlIGNoYW5nZS4gSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCBjb250ZXh0IHRvIHNlZSB3aHkgdGhlIHBhdGNoIHRvdWNoZWQgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgIGFuZCBgY291bnRfc2hhZG93X25vZGVzYC4gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBsaW5rIGhlcmUsIGxpbmtpbmcgd2hhdCBpbml0aWFsbHkgbG9va2VkIHRvIGJlIHJlbGF0ZWQgcGFydHMuIFVsdGltYXRlbHksIHRoZSBmb2N1cyBoYXMgdG8gYmUgb24gYHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsYCwgYHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbGAsIGFuZCBgbWVtY2dfb2ZmbGluZV9rbWVtYCwgb3IgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyByZWFsbHkgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlcGFyZW50X21lbWNnXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLXYxLmM9MTg3MD12b2lkIHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE4NzQtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG1lbWNnMV9zdGF0cyk7IGkmIzQzOyYjNDM7KVxubW0vbWVtY29udHJvbC12MS5jOjE4NzU6XHRcdHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQsIG1lbWNnMV9zdGF0c1tpXSk7XG5tbS9tZW1jb250cm9sLXYxLmMtMTg3Ni19XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTE4Nzg9dm9pZCByZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTg4Mi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSYjNDM7JiM0MzspXG5tbS9tZW1jb250cm9sLXYxLmM6MTg4MzpcdFx0cmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQsIGkpO1xubW0vbWVtY29udHJvbC12MS5jLTE4ODQtfVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD02Nj12b2lkIHJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTtcbm1tL21lbWNvbnRyb2wtdjEuaC02Ny1cbm1tL21lbWNvbnRyb2wtdjEuaDo2ODp2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wtdjEuaC02OS1cdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpO1xubW0vbWVtY29udHJvbC12MS5oOjcwOnZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wtdjEuaC03MS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTc0PXN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXG4tLVxubW0vbWVtY29udHJvbC5jLTU3Ni1cbm1tL21lbWNvbnRyb2wuYzo1Nzc6dm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vbWVtY29udHJvbC5jLTU3OC1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KVxuLS1cbm1tL21lbWNvbnRyb2wuYz05MjU9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcbi0tXG5tbS9tZW1jb250cm9sLmMtOTQwLVxubW0vbWVtY29udHJvbC5jOjk0MTp2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wuYy05NDItXHRcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzIxOQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmVjZW50IENoYW5nZXMgdG8gTWVtb3J5IE1hbmFnZW1lbnQgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gcG9pbnRzIG1lIHRvd2FyZHMgc29tZSBpbnRlcmVzdGluZyBtb2RpZmljYXRpb25zIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiBJIHNlZSB0aGF0IHRoZSBgY291bnRfc2hhZG93X25vZGVzYCBmdW5jdGlvbiBpbiBgbW0vd29ya2luZ3NldC5jYCBpcyBiZWluZyBkaXJlY3RseSBhbHRlcmVkLCB3aGljaCBhbHdheXMgcGlxdWVzIG15IGludGVyZXN0IGFzIHNoYWRvdyBub2RlcyBhcmUgcHJldHR5IGZ1bmRhbWVudGFsIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSB3b3JraW5nc2V0IGlzIG1hbmFnZWQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gKndoeSogdGhpcyBjaGFuZ2Ugd2FzIGRlZW1lZCBuZWNlc3NhcnksIGFuZCBob3cgaXQgaW1wYWN0cyBvdmVyYWxsIHBlcmZvcm1hbmNlLgoKVGhlbiwgSSYjMzk7dmUgZ290IGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCBpbiBgbW0vbWVtY29udHJvbC5jYCBiZWluZyBtb2RpZmllZC4gTm90IHN1cnByaXNpbmcgdG8gc2VlIGNoYW5nZXMgaGVyZSwgb2YgY291cnNlLCBnaXZlbiBpdCYjMzk7cyBjYWxsZWQgYnkgYG1vZF9tZW1jZ19zdGF0ZWAgYW5kIGBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlYC4gTW9kaWZpY2F0aW9ucyB0byB0aGVzZSBjYWxscyBjYW4gYmUgYSBsaXR0bGUgdHJpY2t5IGJlY2F1c2Ugb2YgdGhlIHdheSBtZW1vcnkgY29udHJvbCBncm91cHMgYWZmZWN0IHRoaW5ncy4gSSBrbm93IHRoZXNlIGZ1bmN0aW9ucyBkZWFsIHdpdGggc3RhdGVzIG9mIG1lbW9yeSBjb250cm9sIGdyb3Vwcywgc28gaXQgaXMgbGlrZWx5IHRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIGNsb3NlbHkgbGlua2VkIHRvIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBMUlUgbWFuYWdlbWVudCB3aXRoaW4gYSBtZW1vcnkgY29udHJvbCBncm91cC4gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBtb3JlIGRlZXBseSwgYW5kIGhvdyBpdCBpbXBhY3RzIGhvdyB0aGluZ3MgbW92ZSBhcm91bmQuCgpGaW5hbGx5LCB0aGUgbWVudGlvbnMgb2YgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgLCBgcmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbGAsIGFuZCBgcmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsYCBhcmUgcmVhbGx5IGludHJpZ3VpbmcuIE9mZmxpbmluZyBhIG1lbWNnIGFuZCByZXBhcmVudGluZyBzdGF0ZSBpcyBhIHNpZ25pZmljYW50IG9wZXJhdGlvbiwgdHlwaWNhbGx5IGRvbmUgZHVyaW5nIHJlc291cmNlIG1hbmFnZW1lbnQgb3BlcmF0aW9ucywgb3IgZHluYW1pYyBjaGFuZ2VzIHRvIHRoZSBzeXN0ZW0uIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCBmaXJzdC4gSXQgaXMgdGhlIGNhbGwgdGhhdCBiZWdpbnMgdGhlIG9mZmxpbmUgcHJvY2Vzcywgc28gdW5kZXJzdGFuZGluZyB0aGUgbWVjaGFuaXNtcyB0aGF0IHRyaWdnZXIgYW5kIHRoZSBjaGFuZ2VzIHRoYXQgcmVzdWx0IGZyb20gdGhpcyBjYWxsIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBhbGwgb2YgdGhpcy4gV2hhdCBoYXBwZW5zIHdoZW4gYSBjZ3JvdXAgaXMgdGFrZW4gb2ZmbGluZT8gV2hhdCBpbXBsaWNhdGlvbnMgZG9lcyB0aGlzIGhhdmUgZm9yIHBhZ2UgbWlncmF0aW9uLCByZWNsYWltLCBhbmQgb3ZlcmFsbCByZXNvdXJjZSBhbGxvY2F0aW9uPyBMZXQmIzM5O3MgZGl2ZSBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9jc3Nfb2ZmbGluZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NDI5Nz1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MzczLVxubW0vbWVtY29udHJvbC5jOjQzNzQ6c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxubW0vbWVtY29udHJvbC5jLTQzNzUte1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MTg2PXN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTE4OC1cdC5jc3Nfb25saW5lID0gbWVtX2Nncm91cF9jc3Nfb25saW5lLFxubW0vbWVtY29udHJvbC5jOjUxODk6XHQuY3NzX29mZmxpbmUgPSBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lLFxubW0vbWVtY29udHJvbC5jLTUxOTAtXHQuY3NzX3JlbGVhc2VkID0gbWVtX2Nncm91cF9jc3NfcmVsZWFzZWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDQ2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTWVtb3J5IENvbnRyb2wgd2l0aCBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IGNncm91cCYjMzk7cyBDU1MgKENvbnRyb2wgR3JvdXAgU3Vic3lzdGVtKSBoYW5kbGVzIGdvaW5nIG9mZmxpbmUuIE15IGluc3RpbmN0IGlzIHRvIGhlYWQgc3RyYWlnaHQgZm9yIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgbG9naWMgZm9yIG1lbW9yeSBjZ3JvdXAgbWFuYWdlbWVudCwgYW5kLCBieSBleHRlbnNpb24sIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAuIFRoYXQgZnVuY3Rpb24gd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHN0YXRlIHRyYW5zaXRpb25zIGFuZCByZXNvdXJjZSByZWxlYXNlIGFzIGEgbWVtb3J5IGNncm91cCBnb2VzIG9mZmxpbmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyBkdXJpbmcgdGhpcyBvZmZsaW5lIHN0YXRlIGJlY2F1c2UgSSBoYXZlIGFuIGludGVyZXN0IGluIHNvbWUgZWRnZS1jYXNlIGJlaGF2aW9yIHRoYXQgbWlnaHQgYmUgaW1wYWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MzcwOlx0XHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcmVtb3ZlKG1lbWNnKTtcbjQzNzE6XHRcdHJldHVybiAtRU5PTUVNO1xuNDM3MjpcdH1cbjQzNzM6XHRcbjQzNzQ6XHRzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG40Mzc1Olx0e1xuNDM3NjpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2Nzcyhjc3MpO1xuNDM3NzpcdFxuNDM3ODpcdFx0bWVtY2cxX2Nzc19vZmZsaW5lKG1lbWNnKTtcbjQzNzk6XHRcbjQzODA6XHRcdHBhZ2VfY291bnRlcl9zZXRfbWluKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgMCk7XG40MzgxOlx0XHRwYWdlX2NvdW50ZXJfc2V0X2xvdyhcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIDApO1xuNDM4MjpcdFxuNDM4MzpcdFx0enN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKG1lbWNnKTtcbjQzODQ6XHRcbjQzODU6XHRcdG1lbWNnX29mZmxpbmVfa21lbShtZW1jZyk7XG40Mzg2Olx0XHQvKlxuNDM4NzpcdFx0ICogVGhlIHJlcGFyZW50aW5nIG9mIG9iamNnIG11c3QgYmUgYWZ0ZXIgdGhlIHJlcGFyZW50aW5nIG9mXG40Mzg4Olx0XHQgKiB0aGUgbGlzdF9scnUgaW4gbWVtY2dfb2ZmbGluZV9rbWVtKCksIHdoaWNoIGVuc3VyZXMgdGhhdFxuNDM4OTpcdFx0ICogdGhleSB3aWxsIG5vdCBtaXN0YWtlbmx5IGdldCB0aGUgcGFyZW50IGxpc3RfbHJ1LlxuNDM5MDpcdFx0ICovXG40MzkxOlx0XHRtZW1jZ19yZXBhcmVudF9vYmpjZ3MobWVtY2cpO1xuNDM5MjpcdFx0cmVwYXJlbnRfc2hyaW5rZXJfZGVmZXJyZWQobWVtY2cpO1xuNDM5MzpcdFx0d2JfbWVtY2dfb2ZmbGluZShtZW1jZyk7XG40Mzk0Olx0XHRscnVfZ2VuX29mZmxpbmVfbWVtY2cobWVtY2cpO1xuNDM5NTpcdFxuNDM5NjpcdFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcbjQzOTc6XHRcbjQzOTg6XHRcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIDEpO1xuNDM5OTpcdH1cbjQ0MDA6XHRcbjQ0MDE6XHRzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZWxlYXNlZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuNDQwMjpcdHtcbjQ0MDM6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MoY3NzKTtcbjQ0MDQ6XHRcbjQ0MDU6XHRcdGludmFsaWRhdGVfcmVjbGFpbV9pdGVyYXRvcnMobWVtY2cpO1xuNDQwNjpcdFx0bHJ1X2dlbl9yZWxlYXNlX21lbWNnKG1lbWNnKTtcbjQ0MDc6XHR9XG40NDA4Olx0XG40NDA5Olx0c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfZnJlZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkwNQoJCQkJCQkJb3V0cHV0OiAxNjgKCQkJCQkJCXRob3VnaHRzOiA2MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gaWRlbnRpZnkgcHJvbWlzaW5nIGZ1enppbmcgdGFyZ2V0cyB3aXRoaW4gdGhlIGtlcm5lbCwgZm9jdXNpbmcgb24gYXJlYXMgdG91Y2hlZCBieSB0aGlzIHBhdGNoLgoKRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgYWZmZWN0ZWQuIEkgc2VlIGZvdXI6IGBjb3VudF9zaGFkb3dfbm9kZXNgIChpbiBgbW0vd29ya2luZ3NldC5jYCksIGBtb2RfbWVtY2dfc3RhdGVgIGFuZCBgbW9kX21lbWNnX2xydXZlY19zdGF0ZWAgKGJvdGggaW4gYG1tL21lbWNvbnRyb2wuY2ApLCBhbmQgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgIChhbHNvIGluIGBtbS9tZW1jb250cm9sLmNgKS4gSSBuZWVkIHRvIGRldGVybWluZSB0aGVpciBzY29wZSBhbmQgaWYgU3l6a2FsbGVyIGNhbiB0cmFjayB0aGVtLgoKSSBub3RlIHRoYXQgYG1vZF9tZW1jZ19scnV2ZWNfc3RhdGVgIGlzIHN0YXRpYyB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRoZSBzYW1lIGlzIHRydWUgZm9yIGBjb3VudF9zaGFkb3dfbm9kZXNgIGFuZCBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAuIFRoZSBgbW9kX21lbWNnX3N0YXRlYCBzeW1ib2wsIGhvd2V2ZXIsIGlzIG5vdCBzdGF0aWMuIFN5emthbGxlciAqY2FuKiB0cmFjayBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkmIzM5O3JlIGNvbXBpbGVkIHN5bWJvbHMsIHNvIHRoaXMgc2hvdWxkbiYjMzk7dCBiZSBhIHByb2JsZW0uCgpOZXh0LCBJIG5lZWQgdG8gY29uc2lkZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFRoaXMgcGF0Y2ggc2VlbXMgdG8gcmVsYXRlIHRvIG1lbW9yeSBjZ3JvdXBzLiBUaGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGBNRU1DR2AuIEkgaGF2ZSB0byBhc2sgbXlzZWxmIGlmIHRoZXJlIGFyZSBvdGhlciBkZXBlbmRlbmNpZXMsIHBvdGVudGlhbGx5IHNvbWV0aGluZyBsaWtlIGBNRU1DR19WMWAuIFRoZSBwYXRjaCBkZWFscyB3aXRoIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCwgd2hpY2ggc2VlbXMgdG8gYmUgZW5hYmxlZCB1bmNvbmRpdGlvbmFsbHkgbm93LCBzbyB0ZXN0aW5nIHdpdGgganVzdCBgTUVNQ0dgIHNlZW1zIHN1ZmZpY2llbnQsIGFuZCBpdCBtaWdodCBiZSBhIGdvb2QgaWRlYSB0byBpbmNsdWRlIGBNRU1DR19WMWAgYXMgd2VsbC4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSBhbGwgdGhlIGZ1enppbmcgY3JpdGVyaWEuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlc2UgdGFyZ2V0cyBhcmU6CgoqICAgKipSZWFjaGFibGU6KiogVGhlIGBtbS9gIGRpcmVjdG9yeSBpcyBjb3JlIGtlcm5lbCBjb2RlLCBzbyBpdCYjMzk7cyBsaWtlbHkgdG8gYmUgcmVhY2hlZCBvbiBhbWQ2NCBrZXJuZWxzIGluIFFFTVUvR0NFLgoqICAgKipXb3J0aEZ1enppbmc6KiogQWJzb2x1dGVseS4gTWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBhY2NvdW50aW5nIGFyZSBjcml0aWNhbCBhbmQgb2Z0ZW4gaGF2ZSBzdWJ0bGUsIGV4cGxvaXRhYmxlIGJ1Z3MuCiogICAqKkZvY3VzU3ltYm9sczoqKiBDb25maXJtZWQgYXMgdGhlIGZvdXIgcHJldmlvdXNseSBtZW50aW9uZWQuCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYE1FTUNHYC4KCkZpbmFsbHksIGEgcXVpY2sgc2FuaXR5IGNoZWNrIG9mIG15IHJlYXNvbmluZy4gVGhlIHBhdGNoIHRvdWNoZXMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBhY2NvdW50aW5nOiByZW1vdmluZyB0aGUgY29uZGl0aW9uYWwgZm9yIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KClgIGFuZCBgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoKWAgaW1wbGllcyB0aGF0IHRoZSBhbmNlc3RvciB0cmF2ZXJzYWwgb2YgZHlpbmcgbWVtY2dzIGlzIGFwcGxpZWQgZ2VuZXJhbGx5LiBNb2RpZnlpbmcgYGNvdW50X3NoYWRvd19ub2RlcygpYCB0byB1c2UgYGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKClgIGluZGljYXRlcyBjaGFuZ2VzIHRvIGhvdyBwYWdlIHN0YXRlIGlzIGNvbXB1dGVkIGZvciBMUlUgbGlzdHMuIFRoZXNlIGFyZSBjb3JlIGFyZWFzLCByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSByZWNsYWltIGFuZCBzaHJpbmtlciBvcGVyYXRpb25zLCBhbmQgbGlrZWx5IHdpbGwgYmUgdG91Y2hlZC4KCkV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvdW50X3NoYWRvd19ub2RlcyYjMzQ7LAogICAgJiMzNDttb2RfbWVtY2dfc3RhdGUmIzM0OywKICAgICYjMzQ7bW9kX21lbWNnX2xydXZlY19zdGF0ZSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2Nzc19vZmZsaW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgYW5kIHBhZ2UgY2FjaGUgd29ya2luZ3NldCBjYWxjdWxhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBlbmFibGVzIGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKSByZWRpcmVjdGlvbiB1bmNvbmRpdGlvbmFsbHkgYWNyb3NzIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMgaW4gbW0vbWVtY29udHJvbC5jIGFuZCBtb2RpZmllcyBjb3VudF9zaGFkb3dfbm9kZXMoKSBpbiBtbS93b3JraW5nc2V0LmMgdG8gcXVlcnkgbG9jYWwgbHJ1dmVjIHBhZ2Ugc3RhdGUgcmF0aGVyIHRoYW4gem9uZS1iYXNlZCBMUlUgc2l6ZXMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIHRlYXJkb3duL3JlY2xhaW0gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y291bnRfc2hhZG93X25vZGVzJiMzNDssCiAgICAmIzM0O21vZF9tZW1jZ19zdGF0ZSYjMzQ7LAogICAgJiMzNDttb2RfbWVtY2dfbHJ1dmVjX3N0YXRlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY3NzX29mZmxpbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBhbmQgcGFnZSBjYWNoZSB3b3JraW5nc2V0IGNhbGN1bGF0aW9uLiBTcGVjaWZpY2FsbHksIGl0IGVuYWJsZXMgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydCgpIHJlZGlyZWN0aW9uIHVuY29uZGl0aW9uYWxseSBhY3Jvc3MgYWxsIGNncm91cCBoaWVyYXJjaGllcyBpbiBtbS9tZW1jb250cm9sLmMgYW5kIG1vZGlmaWVzIGNvdW50X3NoYWRvd19ub2RlcygpIGluIG1tL3dvcmtpbmdzZXQuYyB0byBxdWVyeSBsb2NhbCBscnV2ZWMgcGFnZSBzdGF0ZSByYXRoZXIgdGhhbiB6b25lLWJhc2VkIExSVSBzaXplcy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgdGVhcmRvd24vcmVjbGFpbSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbWNnIHN0YXRzIGFjY291bnRpbmcgYW5kIHNoYWRvdyBub2RlIGNhbGN1bGF0aW9uIGluIG1tL21lbWNvbnRyb2wuYyBhbmQgbW0vd29ya2luZ3NldC5jLiBTcGVjaWZpY2FsbHksIGl0IGdlbmVyYWxpemVzIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KClgIHRvIGhhbmRsZSBhbGwgY2dyb3VwcyBoaWVyYXJjaGllcyBhbmQgdXNlcyBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoKWAgZm9yIHdvcmtpbmdzZXQgc2hhZG93IG5vZGUgY291bnRpbmcuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQsIG5vciBhcmUgdGhlcmUgYW55IGluZm8tbGVha3MsIHN0cnVjdCBwYWRkaW5nIGV4cG9zdXJlcywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBzeW5jaHJvbml6YXRpb24sIHJlZmVyZW5jZSBjb3VudGluZywgb3IgcG9pbnRlciBpc3N1ZXMgKHN1Y2ggYXMgUkNVIGxvY2tpbmcgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlKSBhcmUgZnVsbHkgY292ZXJlZCBieSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMsIEtBU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM3NjZiY2EyMjFhNTNjYmFhYTA3NzFmMzdjMGExNDFmODcwZDg2N2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDE5OjAxOjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDg2ZmY1ODBjNzAxODMuLmRmNDNlNjFjOWViYzEgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTg0NSwxNiAmIzQzOzg0NSwyMSBAQCBzdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpCiAJcmV0dXJuIHZhbCAmbHQ7IDAgPyAtcmVzIDogcmVzOwogfQogCi0jaWZkZWYgQ09ORklHX01FTUNHX1YxCiAvKgotICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2Ugd2l0aAotICogcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuCiYjNDM7ICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2UKJiM0MzsgKiB3aXRoIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLiAgT2ZmbGluaW5nIGEKJiM0MzsgKiBtZW1jZyBpcyByYXJlLCBzbyBkbyB0aGUgcmVkaXJlY3Rpb24gZm9yIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJCQkJCSAgIGJvb2wgKnJjdV9sb2NrZWQpCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqCiYjNDM7Z2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKnJjdV9sb2NrZWQpCiB7Ci0JLyogUmViaW5kaW5nIGNhbiBjYXVzZSB0aGlzIHZhbHVlIHRvIGJlIGNoYW5nZWQgYXQgcnVudGltZSAqLwotCWlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7CiYjNDM7CS8qCiYjNDM7CSAqIEZhc3QgcGF0aDogdGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byBAbWVtY2csIHNvIHJlYWRpbmcKJiM0MzsJICogaXRzIENTU19EWUlORyBmbGFnIHdpdGhvdXQgdGhlIFJDVSBsb2NrIGlzIHNhZmUuICBUaGUgUkNVIGxvY2sKJiM0MzsJICogaXMgb25seSBuZWVkZWQgdG8gd2FsayB1cCB0byBhIG5vbi1keWluZyBhbmNlc3Rvciwgd2hpY2gKJiM0MzsJICogaGFwcGVucyBvbmx5IHdoaWxlIGEgbWVtY2cgaXMgYWN0dWFsbHkgYmVpbmcgb2ZmbGluZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIW1lbWNnX2lzX2R5aW5nKG1lbWNnKSkgewogCQkqcmN1X2xvY2tlZCA9IGZhbHNlOwogCQlyZXR1cm4gbWVtY2c7CiAJfQpAQCAtODc1LDE3ICYjNDM7ODgwLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZCkKIAogCXJjdV9yZWFkX3VubG9jaygpOwogfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJCQkJCSAgIGJvb2wgKnJjdV9sb2NrZWQpCi17Ci0JcmV0dXJuIG1lbWNnOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKQotewotfQotI2VuZGlmCiAKIHN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCSAgICAgIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpCmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmMKaW5kZXggN2FjMmI4OGM4MGFlNS4uODQxMmY0ODQwYWUzNSAxMDA2NDQKLS0tIGEvbW0vd29ya2luZ3NldC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3dvcmtpbmdzZXQuYwpAQCAtNjg4LDEwICYjNDM7Njg4LDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsCiAKIAkJbWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZChzYy0mZ3Q7bWVtY2cpOwogCQlscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhzYy0mZ3Q7bWVtY2csIE5PREVfREFUQShzYy0mZ3Q7bmlkKSk7Ci0KIAkJZm9yIChwYWdlcyA9IDAsIGkgPSAwOyBpICZsdDsgTlJfTFJVX0xJU1RTOyBpJiM0MzsmIzQzOykKLQkJCXBhZ2VzICYjNDM7PSBscnV2ZWNfbHJ1X3NpemUobHJ1dmVjLCBpLCBNQVhfTlJfWk9ORVMgLSAxKTsKLQomIzQzOwkJCXBhZ2VzICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChscnV2ZWMsCiYjNDM7CQkJCQkJCSBOUl9MUlVfQkFTRSAmIzQzOyBpKTsKIAkJcGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKAogCQkJbHJ1dmVjLCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiAJCXBhZ2VzICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbCgKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLgoKKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBSZWxldmFuY2UqKgoKUmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIGFzc2Vzc2luZyBpZiBLZXJuZWwgTWVtb3J5IFNhbml0aXplciAoS01TQU4pIGlzIHdhcnJhbnRlZCBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzIHRvIGRldGVybWluZSB0aGUgbGlrZWxpaG9vZCBvZiBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4KCkl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIHRvdWNoZXMgYG1tL21lbWNvbnRyb2wuY2AgYW5kIGBtbS93b3JraW5nc2V0LmNgLiBUaG9zZSBhcmUgaW1wb3J0YW50IHBhcnRzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0g4oCTIHRoaW5ncyByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXBzIGFuZCB3b3JraW5nIHNldCB0cmFja2luZywgcmVzcGVjdGl2ZWx5LiBIbW0sIHBvdGVudGlhbGx5IGludGVyZXN0aW5nLgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rLiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBjb250ZXh0IGFyb3VuZCBsaW5lIDg0NSBpbiBgbW0vbWVtY29udHJvbC5jYCBhbmQgbGluZSA2ODggaW4gYG1tL3dvcmtpbmdzZXQuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNydWNpYWwgY29udGV4dCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgb3BlcmF0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1vZGlmaWVkLiBLbm93aW5nICp3aGF0KiBpcyBiZWluZyBjaGFuZ2VkLCBhbmQgKmhvdyosIHdpbGwgYmUga2V5IHRvIHNwb3R0aW5nIGFueSBwb3RlbnRpYWwgbWVtb3J5LXJlbGF0ZWQgdnVsbmVyYWJpbGl0aWVzIHRoYXQgS01TQU4gd291bGQgYmUgZ29vZCBhdCBpZGVudGlmeWluZy4gSSYjMzk7bSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBjaGFuZ2VzIGluIG1lbW9yeSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIG9yIGRhdGEgYWNjZXNzIHBhdHRlcm5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODQwOlx0XHQvKiBHZXQgdGhlIGFic29sdXRlIHZhbHVlIG9mICh2YWwgKiB1bml0IC8gUEFHRV9TSVpFKS4gKi9cbiA4NDE6XHRcdHJlcyA9IG11bHRfZnJhYyhhYnModmFsKSwgdW5pdCwgUEFHRV9TSVpFKTtcbiA4NDI6XHRcdC8qIFJvdW5kIHVwIHplcm8gdmFsdWVzLiAqL1xuIDg0MzpcdFx0cmVzID0gcmVzID8gOiAxO1xuIDg0NDpcdFxuIDg0NTpcdFx0cmV0dXJuIHZhbCBcdTAwM2MgMCA/IC1yZXMgOiByZXM7XG4gODQ2Olx0fVxuIDg0NzpcdFxuIDg0ODpcdC8qXG4gODQ5Olx0ICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2VcbiA4NTA6XHQgKiB3aXRoIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLiAgT2ZmbGluaW5nIGFcbiA4NTE6XHQgKiBtZW1jZyBpcyByYXJlLCBzbyBkbyB0aGUgcmVkaXJlY3Rpb24gZm9yIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMuXG4gODUyOlx0ICovXG4gODUzOlx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqXG4gODU0Olx0Z2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKnJjdV9sb2NrZWQpXG4gODU1Olx0e1xuIDg1NjpcdFx0LypcbiA4NTc6XHRcdCAqIEZhc3QgcGF0aDogdGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byBAbWVtY2csIHNvIHJlYWRpbmdcbiA4NTg6XHRcdCAqIGl0cyBDU1NfRFlJTkcgZmxhZyB3aXRob3V0IHRoZSBSQ1UgbG9jayBpcyBzYWZlLiAgVGhlIFJDVSBsb2NrXG4gODU5Olx0XHQgKiBpcyBvbmx5IG5lZWRlZCB0byB3YWxrIHVwIHRvIGEgbm9uLWR5aW5nIGFuY2VzdG9yLCB3aGljaFxuIDg2MDpcdFx0ICogaGFwcGVucyBvbmx5IHdoaWxlIGEgbWVtY2cgaXMgYWN0dWFsbHkgYmVpbmcgb2ZmbGluZWQuXG4gODYxOlx0XHQgKi9cbiA4NjI6XHRcdGlmICghbWVtY2dfaXNfZHlpbmcobWVtY2cpKSB7XG4gODYzOlx0XHRcdCpyY3VfbG9ja2VkID0gZmFsc2U7XG4gODY0Olx0XHRcdHJldHVybiBtZW1jZztcbiA4NjU6XHRcdH1cbiA4NjY6XHRcbiA4Njc6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiA4Njg6XHRcdCpyY3VfbG9ja2VkID0gdHJ1ZTtcbiA4Njk6XHRcbiA4NzA6XHRcdHdoaWxlIChtZW1jZ19pc19keWluZyhtZW1jZykpXG4gODcxOlx0XHRcdG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xuIDg3MjpcdFxuIDg3MzpcdFx0cmV0dXJuIG1lbWNnO1xuIDg3NDpcdH1cbiA4NzU6XHRcbiA4NzY6XHRzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxuIDg3NzpcdHtcbiA4Nzg6XHRcdGlmICghcmN1X2xvY2tlZClcbiA4Nzk6XHRcdFx0cmV0dXJuO1xuIDg4MDpcdFxuIDg4MTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gODgyOlx0fVxuIDg4MzpcdFxuIDg4NDpcdHN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiA4ODU6XHRcdFx0XHQgICAgICBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsIGxvbmcgdmFsKVxuIDg4NjpcdHtcbiA4ODc6XHRcdGludCBpID0gbWVtY2dfc3RhdHNfaW5kZXgoaWR4KTtcbiA4ODg6XHRcdGludCBjcHU7XG4gODg5Olx0XG4gODkwOlx0XHRpZiAoV0FSTl9PTkNFKEJBRF9TVEFUX0lEWChpKSwgXCYjMzQ7JXM6IG1pc3Npbmcgc3RhdCBpdGVtICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgaWR4KSlcbiA4OTE6XHRcdFx0cmV0dXJuO1xuIDg5MjpcdFxuIDg5MzpcdFx0Y3B1ID0gZ2V0X2NwdSgpO1xuIDg5NDpcdFxuIDg5NTpcdFx0dGhpc19jcHVfYWRkKG1lbWNnLVx1MDAzZXZtc3RhdHNfcGVyY3B1LVx1MDAzZXN0YXRlW2ldLCB2YWwpO1xuIDg5NjpcdFx0dmFsID0gbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGlkeCwgdmFsKTtcbiA4OTc6XHRcdG1lbWNnX3JzdGF0X3VwZGF0ZWQobWVtY2csIHZhbCwgY3B1KTtcbiA4OTg6XHRcbiA4OTk6XHRcdHRyYWNlX21vZF9tZW1jZ19zdGF0ZShtZW1jZywgaWR4LCB2YWwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTY4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFN1YnN5c3RlbSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGlnZ2luZyBkZWVwIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGFuZCBteSBmb2N1cyBpcyBjdXJyZW50bHkgb24gYG1tL3dvcmtpbmdzZXQuY2AuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgaG93IHRoZSB3b3JraW5nIHNldCBtZWNoYW5pc20gaXMgaW1wbGVtZW50ZWQsIGFuZCBJIHJlY2FsbCBzb21lIHNwZWNpZmljIGxvZ2ljIGFyb3VuZCBsaW5lIDY4MCB0aGF0JiMzOTtzIGJlZW4gbmFnZ2luZyBhdCBtZS4gVGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGF0IHNlY3Rpb24sIG1heWJlIHNvbWUgaW5zaWdodHMgd2lsbCBjbGljayBhcyBJIHJlcmVhZCB0aGF0IHBhcnQgb2YgdGhlIGZpbGUuIEkgc3VzcGVjdCB0aGF0IHRoZXJlIGFyZSBjcnVjaWFsIGRldGFpbHMgcmVsYXRlZCB0byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgd29ya2luZyBzZXQgc2l6ZSwgcGFnZSByZXBsYWNlbWVudCwgYW5kIHBlcmhhcHMgdGhlIG51YW5jZXMgb2YgaG93IHRoZSBrZXJuZWwgaWRlbnRpZmllcyBwYWdlcyB0aGF0IGJlbG9uZyBpbiB0aGUgd29ya2luZyBzZXQgdGhlcmUuIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS93b3JraW5nc2V0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY3MDpcdFx0ICogaW5hY3RpdmUgbGlzdC4gQXNzdW1lIHRoZSB0b3RhbCBjYWNoZSBzaXplIGZvciB0aGF0LlxuIDY3MTpcdFx0ICpcbiA2NzI6XHRcdCAqIE5vZGVzIG1pZ2h0IGJlIHNwYXJzZWx5IHBvcHVsYXRlZCwgd2l0aCBvbmx5IG9uZSBzaGFkb3dcbiA2NzM6XHRcdCAqIGVudHJ5IGluIHRoZSBleHRyZW1lIGNhc2UuIE9idmlvdXNseSwgd2UgY2Fubm90IGtlZXAgb25lXG4gNjc0Olx0XHQgKiBub2RlIGZvciBldmVyeSBlbGlnaWJsZSBzaGFkb3cgZW50cnksIHNvIGNvbXByb21pc2Ugb24gYVxuIDY3NTpcdFx0ICogd29yc3QtY2FzZSBkZW5zaXR5IG9mIDEvOHRoLiBCZWxvdyB0aGF0LCBub3QgYWxsIGVsaWdpYmxlXG4gNjc2Olx0XHQgKiByZWZhdWx0cyBjYW4gYmUgZGV0ZWN0ZWQgYW55bW9yZS5cbiA2Nzc6XHRcdCAqXG4gNjc4Olx0XHQgKiBPbiA2NC1iaXQgd2l0aCA3IHhhX25vZGVzIHBlciBwYWdlIGFuZCA2NCBzbG90c1xuIDY3OTpcdFx0ICogZWFjaCwgdGhpcyB3aWxsIHJlY2xhaW0gc2hhZG93IGVudHJpZXMgd2hlbiB0aGV5IGNvbnN1bWVcbiA2ODA6XHRcdCAqIH4xLjglIG9mIGF2YWlsYWJsZSBtZW1vcnk6XG4gNjgxOlx0XHQgKlxuIDY4MjpcdFx0ICogUEFHRV9TSVpFIC8geGFfbm9kZXMgLyBub2RlX2VudHJpZXMgKiA4IC8gUEFHRV9TSVpFXG4gNjgzOlx0XHQgKi9cbiA2ODQ6XHQjaWZkZWYgQ09ORklHX01FTUNHXG4gNjg1Olx0XHRpZiAoc2MtXHUwMDNlbWVtY2cpIHtcbiA2ODY6XHRcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuIDY4NzpcdFx0XHRpbnQgaTtcbiA2ODg6XHRcbiA2ODk6XHRcdFx0bWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZChzYy1cdTAwM2VtZW1jZyk7XG4gNjkwOlx0XHRcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLVx1MDAzZW1lbWNnLCBOT0RFX0RBVEEoc2MtXHUwMDNlbmlkKSk7XG4gNjkxOlx0XHRcdGZvciAocGFnZXMgPSAwLCBpID0gMDsgaSBcdTAwM2MgTlJfTFJVX0xJU1RTOyBpJiM0MzsmIzQzOylcbiA2OTI6XHRcdFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwobHJ1dmVjLFxuIDY5MzpcdFx0XHRcdFx0XHRcdFx0IE5SX0xSVV9CQVNFICYjNDM7IGkpO1xuIDY5NDpcdFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXG4gNjk1Olx0XHRcdFx0bHJ1dmVjLCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIDY5NjpcdFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXG4gNjk3Olx0XHRcdFx0bHJ1dmVjLCBOUl9TTEFCX1VOUkVDTEFJTUFCTEVfQikgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gNjk4Olx0XHR9IGVsc2VcbiA2OTk6XHQjZW5kaWZcbiA3MDA6XHRcdFx0cGFnZXMgPSBub2RlX3ByZXNlbnRfcGFnZXMoc2MtXHUwMDNlbmlkKTtcbiA3MDE6XHRcbiA3MDI6XHRcdG1heF9ub2RlcyA9IHBhZ2VzIFx1MDAzZVx1MDAzZSAoWEFfQ0hVTktfU0hJRlQgLSAzKTtcbiA3MDM6XHRcbiA3MDQ6XHRcdGlmIChub2RlcyBcdTAwM2M9IG1heF9ub2RlcylcbiA3MDU6XHRcdFx0cmV0dXJuIDA7XG4gNzA2Olx0XHRyZXR1cm4gbm9kZXMgLSBtYXhfbm9kZXM7XG4gNzA3Olx0fVxuIDcwODpcdFxuIDcwOTpcdHN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hhZG93X2xydV9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG4gNzEwOlx0XHRcdFx0XHRcdCAgc3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1LFxuIDcxMTpcdFx0XHRcdFx0XHQgIHZvaWQgKmFyZykgX19tdXN0X2hvbGQobHJ1LVx1MDAzZWxvY2spXG4gNzEyOlx0e1xuIDcxMzpcdFx0c3RydWN0IHhhX25vZGUgKm5vZGUgPSBjb250YWluZXJfb2YoaXRlbSwgc3RydWN0IHhhX25vZGUsIHByaXZhdGVfbGlzdCk7XG4gNzE0Olx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE2NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCBVc2FnZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRoaXMgc3VnZ2VzdHMgYSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgY29udHJvbCBzeXN0ZW0gaGFuZGxlcyB0aGUgc3RhcnQgb2YgYSBub24tZHlpbmcgbWVtb3J5IGNncm91cCwgYW5kIG1vcmUgc3BlY2lmaWNhbGx5LCB3aGF0IHRoZSBjYWxsZXIgaXMgZG9pbmcgd2l0aCB0aGUgcmVzdWx0LiBJIGV4cGVjdCB0byBzZWUgdGhpcyBmdW5jdGlvbiBiZWluZyB1c2VkIGluIGNyaXRpY2FsIHBhdGggbWVtb3J5IGFsbG9jYXRpb24gb3IgdHJhY2tpbmcsIGxpa2VseSBhcm91bmQgcmVjbGFpbSBvciByZXNvdXJjZSBhY2NvdW50aW5nIGR1cmluZyBjZ3JvdXAgbGlmZWN5Y2xlIGV2ZW50cy4gVGhlIGZvY3VzIGlzIGRlZmluaXRlbHkgb24gaWRlbnRpZnlpbmcgdGhlIGNyaXRpY2FsIGNhbGxzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbnRleHQgb2YgZWFjaCBjYWxsLCBsb29raW5nIGZvciBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybiByZWdhcmRpbmcgbWVtb3J5IG1hbmFnZW1lbnQgc3luY2hyb25pemF0aW9uIG9yIHJhY2UgY29uZGl0aW9ucywgZ2l2ZW4gdGhlICYjMzQ7bm9uLWR5aW5nJiMzNDsgbmF0dXJlIGltcGxpZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBzdXJwcmlzaW5nIHVzZXMsIG9yIGFueSB1c2FnZSBwYXR0ZXJucyB0aGF0IEkgaGFkbiYjMzk7dCBjb25zaWRlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfbm9uX2R5aW5nX21lbWNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz04NTM9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqXG5tbS9tZW1jb250cm9sLmM6ODU0OmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxubW0vbWVtY29udHJvbC5jLTg1NS17XG4tLVxubW0vbWVtY29udHJvbC5jLTg3NS1cbm1tL21lbWNvbnRyb2wuYzo4NzY6c3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZClcbm1tL21lbWNvbnRyb2wuYy04Nzcte1xuLS1cbm1tL21lbWNvbnRyb2wuYz05MTA9dm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXG4tLVxubW0vbWVtY29udHJvbC5jLTkxNy1cbm1tL21lbWNvbnRyb2wuYzo5MTg6XHRtZW1jZyA9IGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQobWVtY2csIFx1MDAyNnJjdV9sb2NrZWQpO1xubW0vbWVtY29udHJvbC5jLTkxOS1cdF9fbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIHZhbCk7XG5tbS9tZW1jb250cm9sLmM6OTIwOlx0Z2V0X25vbl9keWluZ19tZW1jZ19lbmQocmN1X2xvY2tlZCk7XG5tbS9tZW1jb250cm9sLmMtOTIxLX1cbi0tXG5tbS9tZW1jb250cm9sLmM9OTc2PXN0YXRpYyB2b2lkIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL21lbWNvbnRyb2wuYy05ODUtXHRwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xubW0vbWVtY29udHJvbC5jOjk4NjpcdG1lbWNnID0gZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChwbi1cdTAwM2VtZW1jZywgXHUwMDI2cmN1X2xvY2tlZCk7XG5tbS9tZW1jb250cm9sLmMtOTg3LVx0cG4gPSBtZW1jZy1cdTAwM2Vub2RlaW5mb1twZ2RhdC1cdTAwM2Vub2RlX2lkXTtcbi0tXG5tbS9tZW1jb250cm9sLmMtOTkwLVxubW0vbWVtY29udHJvbC5jOjk5MTpcdGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKHJjdV9sb2NrZWQpO1xubW0vbWVtY29udHJvbC5jLTk5Mi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NDYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IE1lbW9yeSBDb250cm9sIGFuZCBXb3JraW5nIFNldCBVcGRhdGVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIHBhdGNoIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBmb2N1c2VzIG9uIHRoZSBrZXkgY2hhbmdlcyBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucywgc3BlY2lmaWNhbGx5IGZyb20gYSBtZW1vcnkgbWFuYWdlbWVudCBwZXJzcGVjdGl2ZS4KCkZpcnN0LCBpbiBgbW0vbWVtY29udHJvbC5jYCwgdGhleSYjMzk7dmUgc3RyZWFtbGluZWQgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgLiBQcmV2aW91c2x5LCB0aGUgY29kZSBoYWQgYSBjb25kaXRpb25hbCBzdHJ1Y3R1cmUgYmFzZWQgb24gYENPTkZJR19NRU1DR19WMWAuIE5vdywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0JiMzOTtzIHYxIG9yIHYyIGNncm91cHMsIHRoZSBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIGBtZW1jZ2AgaXMgZHlpbmcgdXNpbmcgYG1lbWNnX2lzX2R5aW5nKClgLiBJZiBpdCAqaXMqIGR5aW5nLCBpdCB0cmF2ZXJzZXMgdXAgdGhlIGFuY2VzdG9yIGNoYWluIHVuZGVyIGFuIFJDVSByZWFkIGxvY2suIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhlIGByY3VfbG9ja2VkYCBmbGFnOyBpdCYjMzk7cyBzZXQgdG8gYGZhbHNlYCBpZiB0aGUgYG1lbWNnYCBpc24mIzM5O3QgZHlpbmcsIGFuZCBgdHJ1ZWAgb3RoZXJ3aXNlLiBgZ2V0X25vbl9keWluZ19tZW1jZ19lbmRgIHRoZW4gaGFuZGxlcyB0aGUgUkNVIHVubG9jayBiYXNlZCBvbiB0aGlzIGZsYWcuIFRoaXMgaXMgYSBjbGVhciBzaW1wbGlmaWNhdGlvbiBvZiB0aGUgbG9naWMuIFRoZSByZW1vdmFsIG9mIHRoZSBgY2dyb3VwX3N1YnN5c19vbl9kZmxgIGNoZWNrIGFuZCBgQ09ORklHX01FTUNHX1YxYCBndWFyZHMgc3VnZ2VzdHMgYSBtb3JlIHVuaWZpZWQgYXBwcm9hY2ggYWNyb3NzIGNncm91cCB2ZXJzaW9ucywgd2hpY2ggaXMgYSBnb29kIGRpcmVjdGlvbi4KCk5leHQsIGluIGBtbS93b3JraW5nc2V0LmNgLCB0aGVyZSYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBvcHRpbWl6YXRpb24gaW4gYGNvdW50X3NoYWRvd19ub2RlcygpYC4gVGhlIG9yaWdpbmFsIGNvZGUgaXRlcmF0ZWQgdGhyb3VnaCB6b25lIExSVSBzaXplcy4gTm93LCBpdCB1c2VzIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbCgpYC4gVGhpcyBpcyBhIGNsYXNzaWMgbW92ZSwgbGV2ZXJhZ2luZyBwZXItQ1BVIG9yIHBlci1ub2RlIGxvY2FsIHN0YXRpc3RpY3MsIHRvIGF2b2lkIGl0ZXJhdGluZyB0aHJvdWdoIHpvbmVzIGFuZCBzdW1taW5nIHVwIHBhZ2UgY291bnRzLiBNdWNoIG1vcmUgZWZmaWNpZW50IGFuZCBhIGNsZWFuZXIgYXBwcm9hY2guCgpOb3csIGFzIGFsd2F5cywgSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBJIHNlZSBhIGBib29sIHJjdV9sb2NrZWRgIGludHJvZHVjZWQgaW4gYG1vZF9tZW1jZ19zdGF0ZWAgYW5kIGBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlYC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhvc2UgZnVuY3Rpb25zLiBUaGV5IHNob3VsZCBiZSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCB0byBjaGVjayBmb3IgYW55IHVzZSBvZiBgcmN1X2xvY2tlZGAgYmVmb3JlIGl0JiMzOTtzIHNldC4gR290dGEgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHN1YnRsZSBpbml0aWFsaXphdGlvbiBpc3N1ZXMgbHVya2luZy4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTEwOlx0dm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXG4gOTExOlx0XHRcdCAgICAgICBpbnQgdmFsKVxuIDkxMjpcdHtcbiA5MTM6XHRcdGJvb2wgcmN1X2xvY2tlZCA9IGZhbHNlO1xuIDkxNDpcdFxuIDkxNTpcdFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiA5MTY6XHRcdFx0cmV0dXJuO1xuIDkxNzpcdFxuIDkxODpcdFx0bWVtY2cgPSBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KG1lbWNnLCBcdTAwMjZyY3VfbG9ja2VkKTtcbiA5MTk6XHRcdF9fbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIHZhbCk7XG4gOTIwOlx0XHRnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChyY3VfbG9ja2VkKTtcbiA5MjE6XHR9XG4gOTIyOlx0XG4gOTIzOlx0I2lmZGVmIENPTkZJR19NRU1DR19WMVxuIDkyNDpcdC8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbS4gKi9cbiA5MjU6XHR1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxuIDkyNjpcdHtcbiA5Mjc6XHRcdGxvbmcgeDtcbiA5Mjg6XHRcdGludCBpID0gbWVtY2dfc3RhdHNfaW5kZXgoaWR4KTtcbiA5Mjk6XHRcbiA5MzA6XHRcdGlmIChXQVJOX09OQ0UoQkFEX1NUQVRfSURYKGkpLCBcJiMzNDslczogbWlzc2luZyBzdGF0IGl0ZW0gJWRcXG5cJiMzNDssIF9fZnVuY19fLCBpZHgpKVxuIDkzMTpcdFx0XHRyZXR1cm4gMDtcbiA5MzI6XHRcbiA5MzM6XHRcdHggPSBSRUFEX09OQ0UobWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpXSk7XG4gOTM0Olx0I2lmZGVmIENPTkZJR19TTVBcbiA5MzU6XHRcdGlmICh4IFx1MDAzYyAwKVxuIDkzNjpcdFx0XHR4ID0gMDtcbiA5Mzc6XHQjZW5kaWZcbiA5Mzg6XHRcdHJldHVybiB4O1xuIDkzOTpcdH1cbiA5NDA6XHRcbiA5NDE6XHR2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiA5NDI6XHRcdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpXG4gOTQzOlx0e1xuIDk0NDpcdFx0dW5zaWduZWQgbG9uZyB2YWx1ZSA9IG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwobWVtY2csIGlkeCk7XG4gOTQ1Olx0XG4gOTQ2Olx0XHRfX21vZF9tZW1jZ19zdGF0ZShtZW1jZywgaWR4LCAtdmFsdWUpO1xuIDk0NzpcdFx0X19tb2RfbWVtY2dfc3RhdGUocGFyZW50LCBpZHgsIHZhbHVlKTtcbiA5NDg6XHR9XG4gOTQ5Olx0I2VuZGlmXG4gOTUwOlx0XG4gOTUxOlx0c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcbiA5NTI6XHRcdFx0XHRcdCAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsIGxvbmcgdmFsKVxuIDk1MzpcdHtcbiA5NTQ6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IHBuLVx1MDAzZW1lbWNnO1xuIDk1NTpcdFx0aW50IGkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpO1xuIDk1NjpcdFx0aW50IGNwdTtcbiA5NTc6XHRcbiA5NTg6XHRcdGlmIChXQVJOX09OQ0UoQkFEX1NUQVRfSURYKGkpLCBcJiMzNDslczogbWlzc2luZyBzdGF0IGl0ZW0gJWRcXG5cJiMzNDssIF9fZnVuY19fLCBpZHgpKVxuIDk1OTpcdFx0XHRyZXR1cm47XG4gOTYwOlx0XG4gOTYxOlx0XHRjcHUgPSBnZXRfY3B1KCk7XG4gOTYyOlx0XG4gOTYzOlx0XHQvKiBVcGRhdGUgbWVtY2cgKi9cbiA5NjQ6XHRcdHRoaXNfY3B1X2FkZChtZW1jZy1cdTAwM2V2bXN0YXRzX3BlcmNwdS1cdTAwM2VzdGF0ZVtpXSwgdmFsKTtcbiA5NjU6XHRcbiA5NjY6XHRcdC8qIFVwZGF0ZSBscnV2ZWMgKi9cbiA5Njc6XHRcdHRoaXNfY3B1X2FkZChwbi1cdTAwM2VscnV2ZWNfc3RhdHNfcGVyY3B1LVx1MDAzZXN0YXRlW2ldLCB2YWwpO1xuIDk2ODpcdFxuIDk2OTpcdFx0dmFsID0gbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGlkeCwgdmFsKTtcbiA5NzA6XHRcdG1lbWNnX3JzdGF0X3VwZGF0ZWQobWVtY2csIHZhbCwgY3B1KTtcbiA5NzE6XHRcdHRyYWNlX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUobWVtY2csIGlkeCwgdmFsKTtcbiA5NzI6XHRcbiA5NzM6XHRcdHB1dF9jcHUoKTtcbiA5NzQ6XHR9XG4gOTc1Olx0XG4gOTc2Olx0c3RhdGljIHZvaWQgbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gOTc3Olx0XHRcdFx0XHQgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LFxuIDk3ODpcdFx0XHRcdFx0ICAgICBpbnQgdmFsKVxuIDk3OTpcdHtcbiA5ODA6XHRcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbiA5ODE6XHRcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbjtcbiA5ODI6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiA5ODM6XHRcdGJvb2wgcmN1X2xvY2tlZCA9IGZhbHNlO1xuIDk4NDpcdFxuIDk4NTpcdFx0cG4gPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbiA5ODY6XHRcdG1lbWNnID0gZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChwbi1cdTAwM2VtZW1jZywgXHUwMDI2cmN1X2xvY2tlZCk7XG4gOTg3Olx0XHRwbiA9IG1lbWNnLVx1MDAzZW5vZGVpbmZvW3BnZGF0LVx1MDAzZW5vZGVfaWRdO1xuIDk4ODpcdFxuIDk4OTpcdFx0X19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHBuLCBpZHgsIHZhbCk7XG4gOTkwOlx0XG4gOTkxOlx0XHRnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChyY3VfbG9ja2VkKTtcbiA5OTI6XHR9XG4gOTkzOlx0XG4gOTk0Olx0LyoqXG4gOTk1Olx0ICogbW9kX2xydXZlY19zdGF0ZSAtIHVwZGF0ZSBscnV2ZWMgbWVtb3J5IHN0YXRpc3RpY3NcbiA5OTY6XHQgKiBAbHJ1dmVjOiB0aGUgbHJ1dmVjXG4gOTk3Olx0ICogQGlkeDogdGhlIHN0YXQgaXRlbVxuIDk5ODpcdCAqIEB2YWw6IGRlbHRhIHRvIGFkZCB0byB0aGUgY291bnRlciwgY2FuIGJlIG5lZ2F0aXZlXG4gOTk5Olx0ICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM5OAoJCQkJCQkJb3V0cHV0OiAxNzgKCQkJCQkJCXRob3VnaHRzOiA1NDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gQ29uY2VybnMgSGVyZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBBbmFseXppbmcgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgLCB0aGUgYHJjdV9sb2NrZWRgIHZhcmlhYmxlIGlzIGV4cGxpY2l0bHkgaGFuZGxlZCDigJMgaXQmIzM5O3MgYWx3YXlzIGVpdGhlciBzZXQgdG8gYGZhbHNlYCBvciBgdHJ1ZWAgYW5kIHdhcyBpbml0aWFsaXplZCB0byBgZmFsc2VgIGluIGJvdGggY2FsbGVyIGxvY2F0aW9ucy4gVGhlIGBwYWdlc2AgdmFyaWFibGUgaW4gYG1tL3dvcmtpbmdzZXQuY2AgaXMgYWxzbyBpbml0aWFsaXplZCB3aXRoIGEgY2xlYW4gbG9vcC4gVGhlcmUmIzM5O3Mgbm8gaW50cm9kdWN0aW9uIG9mIG5ldyBidWZmZXJzLCBubyBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vIHBvdGVudGlhbCBwYWRkaW5nIGlzc3VlcywgYW5kIGRlZmluaXRlbHkgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgdG8gd29ycnkgYWJvdXQsIHdoZXRoZXIgaXQgYmUgaGVhcCBvciBzdGFjayB2YXJpYWJsZXMuIEFueSBsb2NraW5nIGlzc3VlcyByZWxhdGVkIHRvIFJDVSB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUCBhbmQgUkNVIGRlYnVnZ2luZywgYW5kIEtBU0FOIGFuZCBzdGFuZGFyZCBmYXVsdCBoYW5kbGVycyB3b3VsZCBkZWFsIHdpdGggYW55IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgZGVhZCBjZ3JvdXAgcmVmZXJlbmNlcy4KCk5vdywgbGV0JiMzOTtzIHJ1biB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYS4KCjEuICBLZXJuZWwgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZT8gTm9wZS4gTm8gYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmssIGlvY3RsLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMgaW52b2x2ZWQsIGFuZCBubyBzdHJ1Y3R1cmUgcGFkZGluZyBjb25jZXJucy4KMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLiBFdmVyeXRoaW5nIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLgozLiAgQWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOb3BlLiBBbGwgY2xlYXIgYW5kIHNhZmUuCjQuICBCb3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YT8gTm9wZS4gTm90IGhlcmUuCgpPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIHBhdGNoIGZhbGxzIHVuZGVyIHRoZSAmIzM0O05lZWRzS01TQU49ZmFsc2UmIzM0OyBjcml0ZXJpYSBiZWNhdXNlIHRoZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdoaWNoIGFyZSBhbHJlYWR5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBBbGwgdGhlIHJlbGV2YW50IHN0YWNrL2hlYXAgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcy4KClRoZXJlZm9yZSwgYWZ0ZXIgdGhpcyBkZXRhaWxlZCBhc3Nlc3NtZW50LCBJIGFtIHZlcnkgY29uZmlkZW50IHRoYXQgTmVlZHNLTVNBTiBzaG91bGQgYmUgc2V0IHRvICpmYWxzZSouIFRpbWUgdG8gcHJlcGFyZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1jZyBzdGF0cyBhY2NvdW50aW5nIGFuZCBzaGFkb3cgbm9kZSBjYWxjdWxhdGlvbiBpbiBtbS9tZW1jb250cm9sLmMgYW5kIG1tL3dvcmtpbmdzZXQuYy4gU3BlY2lmaWNhbGx5LCBpdCBnZW5lcmFsaXplcyBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydCgpYCB0byBoYW5kbGUgYWxsIGNncm91cHMgaGllcmFyY2hpZXMgYW5kIHVzZXMgYGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKClgIGZvciB3b3JraW5nc2V0IHNoYWRvdyBub2RlIGNvdW50aW5nLlxuXG5ObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkLCBub3IgYXJlIHRoZXJlIGFueSBpbmZvLWxlYWtzLCBzdHJ1Y3QgcGFkZGluZyBleHBvc3VyZXMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIHBvaW50ZXIgaXNzdWVzIChzdWNoIGFzIFJDVSBsb2NraW5nIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSkgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1jZyBzdGF0cyBhY2NvdW50aW5nIGFuZCBzaGFkb3cgbm9kZSBjYWxjdWxhdGlvbiBpbiBtbS9tZW1jb250cm9sLmMgYW5kIG1tL3dvcmtpbmdzZXQuYy4gU3BlY2lmaWNhbGx5LCBpdCBnZW5lcmFsaXplcyBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydCgpYCB0byBoYW5kbGUgYWxsIGNncm91cHMgaGllcmFyY2hpZXMgYW5kIHVzZXMgYGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKClgIGZvciB3b3JraW5nc2V0IHNoYWRvdyBub2RlIGNvdW50aW5nLlxuXG5ObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkLCBub3IgYXJlIHRoZXJlIGFueSBpbmZvLWxlYWtzLCBzdHJ1Y3QgcGFkZGluZyBleHBvc3VyZXMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIHBvaW50ZXIgaXNzdWVzIChzdWNoIGFzIFJDVSBsb2NraW5nIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSkgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAxOjQ2LjA5ODMwOTY1NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNjg5ODY5NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY291bnRfc2hhZG93X25vZGVzXCIsXG4gICAgXCJtb2RfbWVtY2dfc3RhdGVcIixcbiAgICBcIm1vZF9tZW1jZ19scnV2ZWNfc3RhdGVcIixcbiAgICBcIm1lbV9jZ3JvdXBfY3NzX29mZmxpbmVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbWNnIHN0YXRzIGFjY291bnRpbmcgYW5kIHNoYWRvdyBub2RlIGNhbGN1bGF0aW9uIGluIG1tL21lbWNvbnRyb2wuYyBhbmQgbW0vd29ya2luZ3NldC5jLiBTcGVjaWZpY2FsbHksIGl0IGdlbmVyYWxpemVzIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KClgIHRvIGhhbmRsZSBhbGwgY2dyb3VwcyBoaWVyYXJjaGllcyBhbmQgdXNlcyBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoKWAgZm9yIHdvcmtpbmdzZXQgc2hhZG93IG5vZGUgY291bnRpbmcuXFxuXFxuTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZCwgbm9yIGFyZSB0aGVyZSBhbnkgaW5mby1sZWFrcywgc3RydWN0IHBhZGRpbmcgZXhwb3N1cmVzLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiwgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBwb2ludGVyIGlzc3VlcyAoc3VjaCBhcyBSQ1UgbG9ja2luZyBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UpIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scywgS0FTQU4sIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgYW5kIHBhZ2UgY2FjaGUgd29ya2luZ3NldCBjYWxjdWxhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBlbmFibGVzIGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKSByZWRpcmVjdGlvbiB1bmNvbmRpdGlvbmFsbHkgYWNyb3NzIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMgaW4gbW0vbWVtY29udHJvbC5jIGFuZCBtb2RpZmllcyBjb3VudF9zaGFkb3dfbm9kZXMoKSBpbiBtbS93b3JraW5nc2V0LmMgdG8gcXVlcnkgbG9jYWwgbHJ1dmVjIHBhZ2Ugc3RhdGUgcmF0aGVyIHRoYW4gem9uZS1iYXNlZCBMUlUgc2l6ZXMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIHRlYXJkb3duL3JlY2xhaW0gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAxOjQ2LjA5ODMxNzI2NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNzUwNjA5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM3NjZiY2EyMjFhNTNjYmFhYTA3NzFmMzdjMGExNDFmODcwZDg2N2FcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAxOTowMTo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCA4NmZmNTgwYzcwMTgzLi5kZjQzZTYxYzllYmMxIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC04NDUsMTYgKzg0NSwyMSBAQCBzdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpXFxuIFxcdHJldHVybiB2YWwgXFx1MDAzYyAwID8gLXJlcyA6IHJlcztcXG4gfVxcbiBcXG4tI2lmZGVmIENPTkZJR19NRU1DR19WMVxcbiAvKlxcbi0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoXFxuLSAqIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLlxcbisgKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZVxcbisgKiB3aXRoIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLiAgT2ZmbGluaW5nIGFcXG4rICogbWVtY2cgaXMgcmFyZSwgc28gZG8gdGhlIHJlZGlyZWN0aW9uIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLlxcbiAgKi9cXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGJvb2wgKnJjdV9sb2NrZWQpXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKlxcbitnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqcmN1X2xvY2tlZClcXG4ge1xcbi1cXHQvKiBSZWJpbmRpbmcgY2FuIGNhdXNlIHRoaXMgdmFsdWUgdG8gYmUgY2hhbmdlZCBhdCBydW50aW1lICovXFxuLVxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7XFxuK1xcdC8qXFxuK1xcdCAqIEZhc3QgcGF0aDogdGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byBAbWVtY2csIHNvIHJlYWRpbmdcXG4rXFx0ICogaXRzIENTU19EWUlORyBmbGFnIHdpdGhvdXQgdGhlIFJDVSBsb2NrIGlzIHNhZmUuICBUaGUgUkNVIGxvY2tcXG4rXFx0ICogaXMgb25seSBuZWVkZWQgdG8gd2FsayB1cCB0byBhIG5vbi1keWluZyBhbmNlc3Rvciwgd2hpY2hcXG4rXFx0ICogaGFwcGVucyBvbmx5IHdoaWxlIGEgbWVtY2cgaXMgYWN0dWFsbHkgYmVpbmcgb2ZmbGluZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAoIW1lbWNnX2lzX2R5aW5nKG1lbWNnKSkge1xcbiBcXHRcXHQqcmN1X2xvY2tlZCA9IGZhbHNlO1xcbiBcXHRcXHRyZXR1cm4gbWVtY2c7XFxuIFxcdH1cXG5AQCAtODc1LDE3ICs4ODAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxcbiBcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIH1cXG4tI2Vsc2VcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGJvb2wgKnJjdV9sb2NrZWQpXFxuLXtcXG4tXFx0cmV0dXJuIG1lbWNnO1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxcbi17XFxuLX1cXG4tI2VuZGlmXFxuIFxcbiBzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIFxcdFxcdFxcdCAgICAgIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpXFxuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xcbmluZGV4IDdhYzJiODhjODBhZTUuLjg0MTJmNDg0MGFlMzUgMTAwNjQ0XFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXFxuKysrIGIvbW0vd29ya2luZ3NldC5jXFxuQEAgLTY4OCwxMCArNjg4LDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXFxuIFxcbiBcXHRcXHRtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzX3JhdGVsaW1pdGVkKHNjLVxcdTAwM2VtZW1jZyk7XFxuIFxcdFxcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLVxcdTAwM2VtZW1jZywgTk9ERV9EQVRBKHNjLVxcdTAwM2VuaWQpKTtcXG4tXFxuIFxcdFxcdGZvciAocGFnZXMgPSAwLCBpID0gMDsgaSBcXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSsrKVxcbi1cXHRcXHRcXHRwYWdlcyArPSBscnV2ZWNfbHJ1X3NpemUobHJ1dmVjLCBpLCBNQVhfTlJfWk9ORVMgLSAxKTtcXG4tXFxuK1xcdFxcdFxcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IE5SX0xSVV9CQVNFICsgaSk7XFxuIFxcdFxcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxcbiBcXHRcXHRcXHRscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gXFx0XFx0cGFnZXMgKz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAxOjQ3LjcxNjQ3NDg0OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDQ4MzI5OTQ4OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb3VudF9zaGFkb3dfbm9kZXNcIixcbiAgICBcIm1vZF9tZW1jZ19zdGF0ZVwiLFxuICAgIFwibW9kX21lbWNnX2xydXZlY19zdGF0ZVwiLFxuICAgIFwibWVtX2Nncm91cF9jc3Nfb2ZmbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgYW5kIHBhZ2UgY2FjaGUgd29ya2luZ3NldCBjYWxjdWxhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBlbmFibGVzIGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKSByZWRpcmVjdGlvbiB1bmNvbmRpdGlvbmFsbHkgYWNyb3NzIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMgaW4gbW0vbWVtY29udHJvbC5jIGFuZCBtb2RpZmllcyBjb3VudF9zaGFkb3dfbm9kZXMoKSBpbiBtbS93b3JraW5nc2V0LmMgdG8gcXVlcnkgbG9jYWwgbHJ1dmVjIHBhZ2Ugc3RhdGUgcmF0aGVyIHRoYW4gem9uZS1iYXNlZCBMUlUgc2l6ZXMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIHRlYXJkb3duL3JlY2xhaW0gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzc2NmJjYTIyMWE1M2NiYWFhMDc3MWYzN2MwYTE0MWY4NzBkODY3YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTk6MDE6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDg2ZmY1ODBjNzAxODMuLmRmNDNlNjFjOWViYzEgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTg0NSwxNiArODQ1LDIxIEBAIHN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcbiBcdHJldHVybiB2YWwgXHUwMDNjIDAgPyAtcmVzIDogcmVzO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG4gLypcbi0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoXG4tICogcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuXG4rICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2VcbisgKiB3aXRoIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLiAgT2ZmbGluaW5nIGFcbisgKiBtZW1jZyBpcyByYXJlLCBzbyBkbyB0aGUgcmVkaXJlY3Rpb24gZm9yIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHRcdFx0XHQgICBib29sICpyY3VfbG9ja2VkKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKlxuK2dldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxuIHtcbi1cdC8qIFJlYmluZGluZyBjYW4gY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUgKi9cbi1cdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7XG4rXHQvKlxuK1x0ICogRmFzdCBwYXRoOiB0aGUgY2FsbGVyIGhvbGRzIGEgcmVmZXJlbmNlIHRvIEBtZW1jZywgc28gcmVhZGluZ1xuK1x0ICogaXRzIENTU19EWUlORyBmbGFnIHdpdGhvdXQgdGhlIFJDVSBsb2NrIGlzIHNhZmUuICBUaGUgUkNVIGxvY2tcbitcdCAqIGlzIG9ubHkgbmVlZGVkIHRvIHdhbGsgdXAgdG8gYSBub24tZHlpbmcgYW5jZXN0b3IsIHdoaWNoXG4rXHQgKiBoYXBwZW5zIG9ubHkgd2hpbGUgYSBtZW1jZyBpcyBhY3R1YWxseSBiZWluZyBvZmZsaW5lZC5cbitcdCAqL1xuK1x0aWYgKCFtZW1jZ19pc19keWluZyhtZW1jZykpIHtcbiBcdFx0KnJjdV9sb2NrZWQgPSBmYWxzZTtcbiBcdFx0cmV0dXJuIG1lbWNnO1xuIFx0fVxuQEAgLTg3NSwxNyArODgwLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZClcbiBcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0XHRcdFx0ICAgYm9vbCAqcmN1X2xvY2tlZClcbi17XG4tXHRyZXR1cm4gbWVtY2c7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpXG4te1xuLX1cbi0jZW5kaWZcbiBcbiBzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0ICAgICAgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbClcbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcbmluZGV4IDdhYzJiODhjODBhZTUuLjg0MTJmNDg0MGFlMzUgMTAwNjQ0XG4tLS0gYS9tbS93b3JraW5nc2V0LmNcbisrKyBiL21tL3dvcmtpbmdzZXQuY1xuQEAgLTY4OCwxMCArNjg4LDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4gXG4gXHRcdG1lbV9jZ3JvdXBfZmx1c2hfc3RhdHNfcmF0ZWxpbWl0ZWQoc2MtXHUwMDNlbWVtY2cpO1xuIFx0XHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhzYy1cdTAwM2VtZW1jZywgTk9ERV9EQVRBKHNjLVx1MDAzZW5pZCkpO1xuLVxuIFx0XHRmb3IgKHBhZ2VzID0gMCwgaSA9IDA7IGkgXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSsrKVxuLVx0XHRcdHBhZ2VzICs9IGxydXZlY19scnVfc2l6ZShscnV2ZWMsIGksIE1BWF9OUl9aT05FUyAtIDEpO1xuLVxuK1x0XHRcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYyxcbitcdFx0XHRcdFx0XHRcdCBOUl9MUlVfQkFTRSArIGkpO1xuIFx0XHRwYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChcbiBcdFx0XHRscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHRcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MDE6NDcuNzE2NDc2NjE4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODU0NzQ5NDE5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhpcyBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gYXNrZWQgdG8gcmV2aWV3IHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbiBhbmQgZGlzc2VjdCB3aGF0J3MgY2hhbmdlZC4gTG9va3MgbGlrZSB3ZSdyZSBsb29raW5nIGF0IG1vZGlmaWNhdGlvbnMgaW4gYG1tL21lbWNvbnRyb2wuY2AgYW5kIGBtbS93b3JraW5nc2V0LmNgLiBTcGVjaWZpY2FsbHk6XG5cbkZpcnN0LCBpbiBgbW0vbWVtY29udHJvbC5jYCwgdGhlcmUncyBhIHNpZ25pZmljYW50IGNoYW5nZSBhcm91bmQgdGhlIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCBhbmQgYGdldF9ub25fZHlpbmdfbWVtY2dfZW5kYCBmdW5jdGlvbnMuIEFoLCBJIHNlZSwgdGhleSBhcmUgbm8gbG9uZ2VyIGdhdGVkIGJ5IGBDT05GSUdfTUVNQ0dfVjFgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgdGhlIGNvZGUgaXMgYmVpbmcgZ2VuZXJhbGl6ZWQgb3IgcGVyaGFwcyB0aGV5IGFyZSBhbHdheXMgaW4gc2NvcGUsIHJlZ2FyZGxlc3Mgb2YgdGhlIG1lbW9yeSBjb250cm9sIHZlcnNpb24uIFRoZSBwYXRjaCBhcHBlYXJzIHRvIHJlcGxhY2UgdGhlIGNoZWNrIGZvciBzdWJzeXN0ZW0gZW5hYmxlbWVudCB3aXRoIGEgY2hlY2sgZm9yIG1lbWNnJ3MgXCJkeWluZ1wiIHN0YXRlIGluc2lkZSBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAuIFRoaXMgbWFrZXMgc2Vuc2U7IGl0J3MgbW9yZSBkaXJlY3QuIFRoaXMgYWxzbyBtZWFucyB0aGF0IHRoYXQgZHVtbXkgYCNlbHNlYCBibG9jayBpcyBnb25lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcmVmYWN0b3JpbmcsIGVzcGVjaWFsbHkgdGhlIGltcGFjdCBvbiBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3IgY29ycmVjdG5lc3Mgd2l0aGluIHRoZSBgbWVtY2dgIHN1YnN5c3RlbSdzIGNvcmUgbG9naWMuXG5cbk5leHQsIGluIGBtbS93b3JraW5nc2V0LmNgLCB0aGUgcGF0Y2ggc2VlbXMgdG8gYWx0ZXIgdGhlIHNoYWRvdyBub2RlIGNvdW50aW5nIG1lY2hhbmlzbSB3aXRoaW4gYGNvdW50X3NoYWRvd19ub2Rlc2AuIEl0IHNlZW1zIHRoYXQgdGhlIHBhdGNoIHJlcGxhY2VzIHRoZSBvbGQgbHJ1IHNpemUgZnVuY3Rpb25zIHdpdGggdGhlIHBhZ2Ugc3RhdGUgZnVuY3Rpb25zLiBUaGlzIGlzIG1vc3QgbGlrZWx5IGEgcmVmYWN0b3JpbmcgZm9yIGNsYXJpdHkgb3IgZWZmaWNpZW5jeS4gV2UgbmVlZCB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy5cblxuTXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gem9vbSBvdXQuIEkgbmVlZCB0byBnZXQgYSBmdWxsIHZpZXcgb2YgdGhlIGNvZGUgYXJvdW5kIGJvdGggYG1tL21lbWNvbnRyb2wuY2AgYW5kIGBtbS93b3JraW5nc2V0LmNgIHRvIGZ1bGx5IGdyYXNwIHRoZSByYW1pZmljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuIEknbGwgbmVlZCB0byBsb29rIGF0IGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQsIGhvdyB0aGUgc3Vycm91bmRpbmcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBoYW5kbGVkLCBhbmQgaG93IHRoZXNlIGNoYW5nZXMgbWlnaHQgaW1wYWN0IHRoZSBvdmVyYWxsIHN5c3RlbSdzIG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjQ1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MDE6NTYuMjYzOTc0MzEyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU0OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NDAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NDA6XFx0XFx0LyogR2V0IHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiAodmFsICogdW5pdCAvIFBBR0VfU0laRSkuICovXFxuIDg0MTpcXHRcXHRyZXMgPSBtdWx0X2ZyYWMoYWJzKHZhbCksIHVuaXQsIFBBR0VfU0laRSk7XFxuIDg0MjpcXHRcXHQvKiBSb3VuZCB1cCB6ZXJvIHZhbHVlcy4gKi9cXG4gODQzOlxcdFxcdHJlcyA9IHJlcyA/IDogMTtcXG4gODQ0OlxcdFxcbiA4NDU6XFx0XFx0cmV0dXJuIHZhbCBcXHUwMDNjIDAgPyAtcmVzIDogcmVzO1xcbiA4NDY6XFx0fVxcbiA4NDc6XFx0XFxuIDg0ODpcXHQvKlxcbiA4NDk6XFx0ICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2VcXG4gODUwOlxcdCAqIHdpdGggcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuICBPZmZsaW5pbmcgYVxcbiA4NTE6XFx0ICogbWVtY2cgaXMgcmFyZSwgc28gZG8gdGhlIHJlZGlyZWN0aW9uIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLlxcbiA4NTI6XFx0ICovXFxuIDg1MzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcXG4gODU0OlxcdGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxcbiA4NTU6XFx0e1xcbiA4NTY6XFx0XFx0LypcXG4gODU3OlxcdFxcdCAqIEZhc3QgcGF0aDogdGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byBAbWVtY2csIHNvIHJlYWRpbmdcXG4gODU4OlxcdFxcdCAqIGl0cyBDU1NfRFlJTkcgZmxhZyB3aXRob3V0IHRoZSBSQ1UgbG9jayBpcyBzYWZlLiAgVGhlIFJDVSBsb2NrXFxuIDg1OTpcXHRcXHQgKiBpcyBvbmx5IG5lZWRlZCB0byB3YWxrIHVwIHRvIGEgbm9uLWR5aW5nIGFuY2VzdG9yLCB3aGljaFxcbiA4NjA6XFx0XFx0ICogaGFwcGVucyBvbmx5IHdoaWxlIGEgbWVtY2cgaXMgYWN0dWFsbHkgYmVpbmcgb2ZmbGluZWQuXFxuIDg2MTpcXHRcXHQgKi9cXG4gODYyOlxcdFxcdGlmICghbWVtY2dfaXNfZHlpbmcobWVtY2cpKSB7XFxuIDg2MzpcXHRcXHRcXHQqcmN1X2xvY2tlZCA9IGZhbHNlO1xcbiA4NjQ6XFx0XFx0XFx0cmV0dXJuIG1lbWNnO1xcbiA4NjU6XFx0XFx0fVxcbiA4NjY6XFx0XFxuIDg2NzpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDg2ODpcXHRcXHQqcmN1X2xvY2tlZCA9IHRydWU7XFxuIDg2OTpcXHRcXG4gODcwOlxcdFxcdHdoaWxlIChtZW1jZ19pc19keWluZyhtZW1jZykpXFxuIDg3MTpcXHRcXHRcXHRtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcXG4gODcyOlxcdFxcbiA4NzM6XFx0XFx0cmV0dXJuIG1lbWNnO1xcbiA4NzQ6XFx0fVxcbiA4NzU6XFx0XFxuIDg3NjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxcbiA4Nzc6XFx0e1xcbiA4Nzg6XFx0XFx0aWYgKCFyY3VfbG9ja2VkKVxcbiA4Nzk6XFx0XFx0XFx0cmV0dXJuO1xcbiA4ODA6XFx0XFxuIDg4MTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gODgyOlxcdH1cXG4gODgzOlxcdFxcbiA4ODQ6XFx0c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiA4ODU6XFx0XFx0XFx0XFx0ICAgICAgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbClcXG4gODg2OlxcdHtcXG4gODg3OlxcdFxcdGludCBpID0gbWVtY2dfc3RhdHNfaW5kZXgoaWR4KTtcXG4gODg4OlxcdFxcdGludCBjcHU7XFxuIDg4OTpcXHRcXG4gODkwOlxcdFxcdGlmIChXQVJOX09OQ0UoQkFEX1NUQVRfSURYKGkpLCBcXFwiJXM6IG1pc3Npbmcgc3RhdCBpdGVtICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgaWR4KSlcXG4gODkxOlxcdFxcdFxcdHJldHVybjtcXG4gODkyOlxcdFxcbiA4OTM6XFx0XFx0Y3B1ID0gZ2V0X2NwdSgpO1xcbiA4OTQ6XFx0XFxuIDg5NTpcXHRcXHR0aGlzX2NwdV9hZGQobWVtY2ctXFx1MDAzZXZtc3RhdHNfcGVyY3B1LVxcdTAwM2VzdGF0ZVtpXSwgdmFsKTtcXG4gODk2OlxcdFxcdHZhbCA9IG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpZHgsIHZhbCk7XFxuIDg5NzpcXHRcXHRtZW1jZ19yc3RhdF91cGRhdGVkKG1lbWNnLCB2YWwsIGNwdSk7XFxuIDg5ODpcXHRcXG4gODk5OlxcdFxcdHRyYWNlX21vZF9tZW1jZ19zdGF0ZShtZW1jZywgaWR4LCB2YWwpO1xcbiA5MDA6XFx0XFxuIDkwMTpcXHRcXHRwdXRfY3B1KCk7XFxuIDkwMjpcXHR9XFxuIDkwMzpcXHRcXG4gOTA0OlxcdC8qKlxcbiA5MDU6XFx0ICogbW9kX21lbWNnX3N0YXRlIC0gdXBkYXRlIGNncm91cCBtZW1vcnkgc3RhdGlzdGljc1xcbiA5MDY6XFx0ICogQG1lbWNnOiB0aGUgbWVtb3J5IGNncm91cFxcbiA5MDc6XFx0ICogQGlkeDogdGhlIHN0YXQgaXRlbSAtIGNhbiBiZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBlbnVtIG5vZGVfc3RhdF9pdGVtXFxuIDkwODpcXHQgKiBAdmFsOiBkZWx0YSB0byBhZGQgdG8gdGhlIGNvdW50ZXIsIGNhbiBiZSBuZWdhdGl2ZVxcbiA5MDk6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAxOjU2LjI2NDMzMjk3MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNDE0MzQyOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAgQ2FsbCBTaXRlcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIndoZXJlIHRoZSBoZWNrIGlzIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCBhY3R1YWxseSAqdXNlZCogd2l0aGluIGBtbS9tZW1jb250cm9sLmNgP1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBJIG5lZWQgdG8ga25vdyB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGFuZCBob3cgdGhlIHZhbHVlIHJldHVybmVkIGlzIHRoZW4gaGFuZGxlZC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgcmVhZCwgYSBjcml0aWNhbCBwYXRoIG9wZXJhdGlvbiwgb3Igc29tZXRoaW5nIGluIGJldHdlZW4/IEtub3dpbmcgdGhhdCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYW5kIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIGJ1ZyBodW50aW5nLiBJ4oCZbGwgc3RhcnQgYnkgdHJhY2luZyB0aGUgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhlIHNwZWNpZmllZCBmaWxlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGZpcnN0LXBhc3MgdW5kZXJzdGFuZGluZyBvZiBpdHMgaW1wb3J0YW5jZSB3aXRoaW4gdGhlIGJyb2FkZXIgbWVtb3J5IGNvbnRyb2wgbWVjaGFuaXNtcy4gVGhpcyBpc27igJl0IGEgZGVlcCBkaXZlIHlldDsgaXQncyBhIG1hcC1tYWtpbmcgZXhlcmNpc2UuIEkgd2lsbCBzdGFydCBieSB1c2luZyBgZ3JlcGAsIGBnaXQgZ3JlcGAsIG9yIHdoYXRldmVyIHRvb2wgY29tZXMgdG8gaGFuZCwgYnV0IHF1aWNrbHkgSSdsbCBiZSBsb29raW5nIGF0IHRoZSBjYWxsIHN0YWNrIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NjgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAxOjU4LjQwNTc3MDgyOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk1MDIyOTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTg1Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcXG5tbS9tZW1jb250cm9sLmM6ODU0OmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxcbm1tL21lbWNvbnRyb2wuYy04NTUte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTkxMD12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05MTctXFxubW0vbWVtY29udHJvbC5jOjkxODpcXHRtZW1jZyA9IGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQobWVtY2csIFxcdTAwMjZyY3VfbG9ja2VkKTtcXG5tbS9tZW1jb250cm9sLmMtOTE5LVxcdF9fbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIHZhbCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9OTc2PXN0YXRpYyB2b2lkIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTk4NS1cXHRwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xcbm1tL21lbWNvbnRyb2wuYzo5ODY6XFx0bWVtY2cgPSBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHBuLVxcdTAwM2VtZW1jZywgXFx1MDAyNnJjdV9sb2NrZWQpO1xcbm1tL21lbWNvbnRyb2wuYy05ODctXFx0cG4gPSBtZW1jZy1cXHUwMDNlbm9kZWluZm9bcGdkYXQtXFx1MDAzZW5vZGVfaWRdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjowMC43MDA4MDA3ODFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDI3ODQyMTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gU2hhZG93IE5vZGUgQ291bnRpbmcqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHNoYWRvdyBub2RlIGNvdW50aW5nIHdvcmtzIGluIHRoZSB3b3JraW5nc2V0IGltcGxlbWVudGF0aW9uLiBUaGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyBgbW0vd29ya2luZ3NldC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgY291bnRfc2hhZG93X25vZGVzYCBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcyDigJMgd2hhdCBleGFjdGx5IGlzIGEgXCJzaGFkb3cgbm9kZVwiIGluIHRoaXMgY29udGV4dD8gSXMgaXQgcmVsYXRlZCB0byBwYWdlIGNvbG9yaW5nLCBUTEIgbWlzc2VzLCBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSSBiZXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIG92ZXJhbGwgd29ya2luZ3NldCBhbGdvcml0aG0uIExldCdzIHNlZSBob3cgaXTigJlzIGltcGxlbWVudGVkIGFuZCB3aGVyZSB0aGlzIGNvdW50ZXIgaXMgdXNlZCAtIGlzIGl0IGZvciBwZXJmb3JtYW5jZSBtZXRyaWNzLCBldmljdGlvbiBzdHJhdGVnaWVzLCBvciBzb21ldGhpbmcgbW9yZSBmdW5kYW1lbnRhbCB0byB0aGUgd29ya2luZ3NldCBsb2dpYz8gS25vd2luZyB3aGVyZSBhbmQgaG93IHRoaXMgY291bnRlciBnZXRzIHVwZGF0ZWQgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgb3ZlcmFsbCBpbXBhY3QuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgZ2V0IGEgZmVlbCBmb3IgdGhlIGNvbnRyb2wgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA4NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAyOjAzLjcyODY0NjIxM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3dvcmtpbmdzZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NzA6XFx0XFx0ICogaW5hY3RpdmUgbGlzdC4gQXNzdW1lIHRoZSB0b3RhbCBjYWNoZSBzaXplIGZvciB0aGF0LlxcbiA2NzE6XFx0XFx0ICpcXG4gNjcyOlxcdFxcdCAqIE5vZGVzIG1pZ2h0IGJlIHNwYXJzZWx5IHBvcHVsYXRlZCwgd2l0aCBvbmx5IG9uZSBzaGFkb3dcXG4gNjczOlxcdFxcdCAqIGVudHJ5IGluIHRoZSBleHRyZW1lIGNhc2UuIE9idmlvdXNseSwgd2UgY2Fubm90IGtlZXAgb25lXFxuIDY3NDpcXHRcXHQgKiBub2RlIGZvciBldmVyeSBlbGlnaWJsZSBzaGFkb3cgZW50cnksIHNvIGNvbXByb21pc2Ugb24gYVxcbiA2NzU6XFx0XFx0ICogd29yc3QtY2FzZSBkZW5zaXR5IG9mIDEvOHRoLiBCZWxvdyB0aGF0LCBub3QgYWxsIGVsaWdpYmxlXFxuIDY3NjpcXHRcXHQgKiByZWZhdWx0cyBjYW4gYmUgZGV0ZWN0ZWQgYW55bW9yZS5cXG4gNjc3OlxcdFxcdCAqXFxuIDY3ODpcXHRcXHQgKiBPbiA2NC1iaXQgd2l0aCA3IHhhX25vZGVzIHBlciBwYWdlIGFuZCA2NCBzbG90c1xcbiA2Nzk6XFx0XFx0ICogZWFjaCwgdGhpcyB3aWxsIHJlY2xhaW0gc2hhZG93IGVudHJpZXMgd2hlbiB0aGV5IGNvbnN1bWVcXG4gNjgwOlxcdFxcdCAqIH4xLjglIG9mIGF2YWlsYWJsZSBtZW1vcnk6XFxuIDY4MTpcXHRcXHQgKlxcbiA2ODI6XFx0XFx0ICogUEFHRV9TSVpFIC8geGFfbm9kZXMgLyBub2RlX2VudHJpZXMgKiA4IC8gUEFHRV9TSVpFXFxuIDY4MzpcXHRcXHQgKi9cXG4gNjg0OlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dcXG4gNjg1OlxcdFxcdGlmIChzYy1cXHUwMDNlbWVtY2cpIHtcXG4gNjg2OlxcdFxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG4gNjg3OlxcdFxcdFxcdGludCBpO1xcbiA2ODg6XFx0XFxuIDY4OTpcXHRcXHRcXHRtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzX3JhdGVsaW1pdGVkKHNjLVxcdTAwM2VtZW1jZyk7XFxuIDY5MDpcXHRcXHRcXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhzYy1cXHUwMDNlbWVtY2csIE5PREVfREFUQShzYy1cXHUwMDNlbmlkKSk7XFxuIDY5MTpcXHRcXHRcXHRmb3IgKHBhZ2VzID0gMCwgaSA9IDA7IGkgXFx1MDAzYyBOUl9MUlVfTElTVFM7IGkrKylcXG4gNjkyOlxcdFxcdFxcdFxcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYyxcXG4gNjkzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBOUl9MUlVfQkFTRSArIGkpO1xcbiA2OTQ6XFx0XFx0XFx0cGFnZXMgKz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXFxuIDY5NTpcXHRcXHRcXHRcXHRscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gNjk2OlxcdFxcdFxcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxcbiA2OTc6XFx0XFx0XFx0XFx0bHJ1dmVjLCBOUl9TTEFCX1VOUkVDTEFJTUFCTEVfQikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gNjk4OlxcdFxcdH0gZWxzZVxcbiA2OTk6XFx0I2VuZGlmXFxuIDcwMDpcXHRcXHRcXHRwYWdlcyA9IG5vZGVfcHJlc2VudF9wYWdlcyhzYy1cXHUwMDNlbmlkKTtcXG4gNzAxOlxcdFxcbiA3MDI6XFx0XFx0bWF4X25vZGVzID0gcGFnZXMgXFx1MDAzZVxcdTAwM2UgKFhBX0NIVU5LX1NISUZUIC0gMyk7XFxuIDcwMzpcXHRcXG4gNzA0OlxcdFxcdGlmIChub2RlcyBcXHUwMDNjPSBtYXhfbm9kZXMpXFxuIDcwNTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNzA2OlxcdFxcdHJldHVybiBub2RlcyAtIG1heF9ub2RlcztcXG4gNzA3OlxcdH1cXG4gNzA4OlxcdFxcbiA3MDk6XFx0c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaGFkb3dfbHJ1X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG4gNzEwOlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1LFxcbiA3MTE6XFx0XFx0XFx0XFx0XFx0XFx0ICB2b2lkICphcmcpIF9fbXVzdF9ob2xkKGxydS1cXHUwMDNlbG9jaylcXG4gNzEyOlxcdHtcXG4gNzEzOlxcdFxcdHN0cnVjdCB4YV9ub2RlICpub2RlID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCB4YV9ub2RlLCBwcml2YXRlX2xpc3QpO1xcbiA3MTQ6XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XFxuIDcxNTpcXHRcXHRpbnQgcmV0O1xcbiA3MTY6XFx0XFxuIDcxNzpcXHRcXHQvKlxcbiA3MTg6XFx0XFx0ICogUGFnZSBjYWNoZSBpbnNlcnRpb25zIGFuZCBkZWxldGlvbnMgc3luY2hyb25vdXNseSBtYWludGFpblxcbiA3MTk6XFx0XFx0ICogdGhlIHNoYWRvdyBub2RlIExSVSB1bmRlciB0aGUgaV9wYWdlcyBsb2NrIGFuZCB0aGVcXG4gNzIwOlxcdFxcdCAqIFxcdTAwMjZscnUtXFx1MDAzZWxvY2suIEJlY2F1c2UgdGhlIHBhZ2UgY2FjaGUgdHJlZSBpcyBlbXB0aWVkIGJlZm9yZVxcbiA3MjE6XFx0XFx0ICogdGhlIGlub2RlIGNhbiBiZSBkZXN0cm95ZWQsIGhvbGRpbmcgdGhlIFxcdTAwMjZscnUtXFx1MDAzZWxvY2sgcGlucyBhbnlcXG4gNzIyOlxcdFxcdCAqIGFkZHJlc3Nfc3BhY2UgdGhhdCBoYXMgbm9kZXMgb24gdGhlIExSVS5cXG4gNzIzOlxcdFxcdCAqXFxuIDcyNDpcXHRcXHQgKiBXZSBjYW4gdGhlbiBzYWZlbHkgdHJhbnNpdGlvbiB0byB0aGUgaV9wYWdlcyBsb2NrIHRvXFxuIDcyNTpcXHRcXHQgKiBwaW4gb25seSB0aGUgYWRkcmVzc19zcGFjZSBvZiB0aGUgcGFydGljdWxhciBub2RlIHdlIHdhbnRcXG4gNzI2OlxcdFxcdCAqIHRvIHJlY2xhaW0sIHRha2UgdGhlIG5vZGUgb2ZmLUxSVSwgYW5kIGRyb3AgdGhlIFxcdTAwMjZscnUtXFx1MDAzZWxvY2suXFxuIDcyNzpcXHRcXHQgKi9cXG4gNzI4OlxcdFxcbiA3Mjk6XFx0XFx0bWFwcGluZyA9IGNvbnRhaW5lcl9vZihub2RlLVxcdTAwM2VhcnJheSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UsIGlfcGFnZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjowMy43Mjg3NDM5MzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTE3NTUyMjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQ2FuZGlkYXRlOiBNZW1vcnkgTWFuYWdlbWVudCBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYCBhbmQgYG1tL3dvcmtpbmdzZXQuY2AuIFJpZ2h0IGF3YXksIHRoaXMgc2NyZWFtcyBtZW1vcnkgbWFuYWdlbWVudCDigJMgd2UncmUgdGFsa2luZyBhYm91dCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgYW5kIHdvcmtpbmdzZXQgY2FsY3VsYXRpb25zLiBBbmQgY29uc2lkZXJpbmcgdGhpcyBpcyBhbGwgd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGRpcmVjdG9yeSAoYG1tL2ApLCB0aGlzIGNvZGUgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBleGVjdXRlZCBoZWF2aWx5LCBlc3BlY2lhbGx5IGlmIGBDT05GSUdfTUVNQ0dgIGlzIGVuYWJsZWQsIHdoaWNoIGl0IGxpa2VseSBpcyBnaXZlbiB0aGUgZmlsZSBuYW1lLlxuXG5Ob3csIGRvZXMgdGhpcyBtZWV0IG91ciBmdXp6aW5nIGNyaXRlcmlhPyBMZXQncyBzZWUuLi4gd2UgaGF2ZSBcIkNvcmUgU3Vic3lzdGVtczogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLykuLi5cIiBEaW5nIGRpbmcgZGluZyEgU2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgV29ydGhGdXp6aW5nIGlzIHRydWUgaW4gdGhpcyBjYXNlLiBXZSdyZSBkaXJlY3RseSBkZWFsaW5nIHdpdGggY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4gV2UncmUgb24hXG5cbk5vdyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIGBDT05GSUdfTUVNQ0dgIGZvciBgbW0vbWVtY29udHJvbC5jYCAtIGlzIHRoaXMgZmlsZSBvbmx5IGJ1aWx0IHdoZW4gYE1FTUNHYCBpcyBlbmFibGVkPyBJJ2xsIHF1aWNrbHkgbG9vayBhdCB0aGUgYG1tL01ha2VmaWxlYCBmb3IgdGhhdCBjb25maXJtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNjIsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjowNi42NDYzMDAxNjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMDEyOTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNvbnRyb2xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxcbm1tL01ha2VmaWxlOjI4OktDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLm8gOj0gblxcbm1tL01ha2VmaWxlOjI5OktDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLXYxLm8gOj0gblxcbm1tL01ha2VmaWxlLTMwLUtDT1ZfSU5TVFJVTUVOVF9tbXpvbmUubyA6PSBuXFxuLS1cXG5tbS9NYWtlZmlsZT0xMDQ9b2JqLSQoQ09ORklHX0xJVkVVUERBVEVfTUVNRkQpICs9IG1lbWZkX2x1by5vXFxubW0vTWFrZWZpbGU6MTA1Om9iai0kKENPTkZJR19NRU1DR19WMSkgKz0gbWVtY29udHJvbC12MS5vXFxubW0vTWFrZWZpbGU6MTA2Om9iai0kKENPTkZJR19NRU1DRykgKz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xcbm1tL01ha2VmaWxlLTEwNy1pZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5tbS9NYWtlZmlsZToxMDg6b2JqLSQoQ09ORklHX01FTUNHKSArPSBicGZfbWVtY29udHJvbC5vXFxubW0vTWFrZWZpbGUtMTA5LWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAyOjA2LjcyNjMxODUxNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzE3MTg0MjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gTWVtY2cgYW5kIEtjb25maWcgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZWJhc2UsIGFuZCBpdCBsb29rcyBsaWtlIGBDT05GSUdfTUVNQ0dgIGlzIGEgaGFyZCByZXF1aXJlbWVudCBmb3IgdGhlIGBtZW1jb250cm9sLmNgIGZpbGUuIE5vIHN1cnByaXNlcyB0aGVyZTsgdGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCBmdW5jdGlvbmFsaXR5LiBUaGVuLCB3aGVuIEkgZ2V0IG92ZXIgdG8gYHdvcmtpbmdzZXQuY2AsIEkgc2VlIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24g4oCTIGAjaWZkZWYgQ09ORklHX01FTUNHYCDigJMgYXJvdW5kIGEgcGFydGljdWxhciBzZWN0aW9uIHdpdGhpbiBgY291bnRfc2hhZG93X25vZGVzYC4gVGhhdCBzdWdnZXN0cyB0aGUgd29ya2luZ3NldCBjb2RlIGhhcyBzb21lIGludGVyYWN0aW9ucyB0aGF0IGFyZSBlaXRoZXIgb24gb3Igb2ZmLCBkZXBlbmRpbmcgb24gd2hldGhlciBtZW1vcnkgY2dyb3VwcyBhcmUgZW5hYmxlZC4gTWFrZXMgc2Vuc2U7IHdvcmtpbmdzZXQgbWFuYWdlbWVudCBjYW4gbGV2ZXJhZ2UgbWVtY2cgc3RhdHMgZm9yIG9wdGltaXphdGlvbiBvciBhZGFwdGF0aW9uLlxuXG5UaW1lIHRvIGNvbmZpcm0gdGhpcyBkZXBlbmRlbmN5LCBhbmQgcHJvYmFibHkgY2xhcmlmeSB3aGljaCBzcGVjaWZpYyBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCB3aXRoIHRoZSBjb25maWcuIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBpbml0L0tjb25maWdgIHRvIHBpbnBvaW50IGV4YWN0bHkgaG93IGBNRU1DR2AgaXMgZGVmaW5lZCBhbmQgd2hhdCBvdGhlciBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGJpZ2dlciBwaWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBoZXJlIGlzIGNydWNpYWwgZm9yIGNvbXByZWhlbmRpbmcgdGhlIGNvbXBsZXRlIGFyY2hpdGVjdHVyZSBhbmQgd2hpY2ggcGFydHMgYXJlIGFjdGl2ZSBpbiBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIGhhdmUgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmdWxsIGRlcGVuZGVuY3kgdHJlZSwgYW5kIEkga25vdyBJJ2xsIGZpbmQgaXQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwODgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjowOS4wNDM1MDUzMDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMjc5Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNjg9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA3Ny1cXG5pbml0L0tjb25maWc6MTA3ODpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA3OS1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg2LVxcbmluaXQvS2NvbmZpZzoxMDg3OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwODgtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTMtXFxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTEwOTUtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDAtXFxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDItXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MDI6MDkuMTE0NzkwMzI3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2Nzg2Mjg4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGlnZ2luZyBpbnRvIE1FTUNHIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBNRU1DRy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIHRoaW5raW5nIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBJJ20gc3BlY2lmaWNhbGx5IHRhcmdldGluZyBhcm91bmQgbGluZSAxMDc4LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIG1lbW9yeSBjb250cm9sIGdyb3VwcyBhcmUgZGVmaW5lZCwgYW5kIHRoZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGZlYXR1cmVzIGFuZCBvcHRpb25zLiBJJ20gYmV0dGluZyB0aGF0J3Mgd2hlcmUgdGhlIHJlbGV2YW50IGRlcGVuZGVuY2llcyBmb3IgTUVNQ0cgd2lsbCBiZSBsYWlkIG91dC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NTUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjoxMC43OTM0MjI3MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI3MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDc1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDc1OlxcdFxcbjEwNzY6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA3NzpcXHRcXG4xMDc4OlxcdGNvbmZpZyBNRU1DR1xcbjEwNzk6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTA4MDpcXHRcXHRzZWxlY3QgUEFHRV9DT1VOVEVSXFxuMTA4MTpcXHRcXHRzZWxlY3QgRVZFTlRGRFxcbjEwODI6XFx0XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbjEwODM6XFx0XFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXFxuMTA4NDpcXHRcXHRoZWxwXFxuMTA4NTpcXHRcXHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cXG4xMDg2OlxcdFxcbjEwODc6XFx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG4xMDg4OlxcdFxcdGJvb2xcXG4xMDg5OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMDkwOlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMDkxOlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMDkyOlxcdFxcdGRlZmF1bHQgeVxcbjEwOTM6XFx0XFxuMTA5NDpcXHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG4xMDk1OlxcdFxcdGJvb2xcXG4xMDk2OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMDk3OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMDk4OlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbjEwOTk6XFx0XFx0ZGVmYXVsdCB5XFxuMTEwMDpcXHRcXG4xMTAxOlxcdGNvbmZpZyBNRU1DR19WMVxcbjExMDI6XFx0XFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMTAzOlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMTA0OlxcdFxcdGRlZmF1bHQgblxcbjExMDU6XFx0XFx0aGVscFxcbjExMDY6XFx0XFx0ICBMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyIHdoaWNoIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYnlcXG4xMTA3OlxcdFxcdCAgY2dyb3VwIHYyIGltcGxlbWVudGF0aW9uLiBUaGUgdjEgaXMgdGhlcmUgZm9yIGxlZ2FjeSBhcHBsaWNhdGlvbnNcXG4xMTA4OlxcdFxcdCAgd2hpY2ggaGF2ZW4ndCBtaWdyYXRlZCB0byB0aGUgbmV3IGNncm91cCB2MiBpbnRlcmZhY2UgeWV0LiBJZiB5b3VcXG4xMTA5OlxcdFxcdCAgZG8gbm90IGhhdmUgYW55IHN1Y2ggYXBwbGljYXRpb24gdGhlbiB5b3UgYXJlIGNvbXBsZXRlbHkgZmluZSBsZWF2aW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAyOjEwLjc5NDc1NTA2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NTg1MjAwMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgQ09ORklHX01FTUNHYC4gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBjb25maXJtIGlzIGl0cyBkZXBlbmRlbmN5IG9uIGBDT05GSUdfQ0dST1VQU2AuIEkga25vdyB0aGF0J3MgYSBjb21tb24gcmVsYXRpb25zaGlwLCBidXQgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gTGV0IG1lIGdvIGJhY2sgdG8gdGhlIHNvdXJjZSBjb2RlIHRvIGNvbmZpcm0gdGhlIGJ1aWxkIGluc3RydWN0aW9ucy4gSSBzaG91bGQgYmUgYWJsZSB0byB0cmFjayBkb3duIHRoZSBkZXBlbmRlbmN5IHByZXR0eSBxdWlja2x5IGJ5IGNoZWNraW5nIGZvciBhbiBlbmNsb3NpbmcgYGlmIENHUk9VUFNgIGJsb2NrIG9yIHBlcmhhcHMgYSBgbWVudWNvbmZpZyBDR1JPVVBTYCBsaW5lIGluIHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIHN0cmFpZ2h0Zm9yd2FyZCBidXQgaW1wb3J0YW50IHRvIHZlcmlmeSBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBpbiBteSBhbmFseXNpcy4gSSBoYXZlIHRvIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzUwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjoxMi42NTMyNzg4NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM5ODEyMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVudWNvbmZpZyBDR1JPVVBTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA0Nj1jb25maWcgU0xBQl9PQkpfRVhUXFxuLS1cXG5pbml0L0tjb25maWctMTA0OC1cXG5pbml0L0tjb25maWc6MTA0OTptZW51Y29uZmlnIENHUk9VUFNcXG5pbml0L0tjb25maWctMTA1MC1cXHRib29sIFxcXCJDb250cm9sIEdyb3VwIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAyOjEyLjcyNzI2NzA4OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDA4MDE2NTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQ29udHJvbCBHcm91cCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBgQ09ORklHX01FTUNHYCwgYW5kIHBvdGVudGlhbGx5IGBDT05GSUdfTUVNQ0dfVjFgIGFzIHdlbGwuIFRoZSBjb2RlIHNlZW1zIHRvIGJlIHdvcmtpbmcgd2l0aCBib3RoIHZlcnNpb25zIG5vdywgc28gdGhhdCdzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLiBGaXJzdCwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50IGluIHRoaXMgY29udGV4dC4gSXQncyBhbHdheXMgYmVzdCB0byBoYXZlIGEgY29tcGxldGUgcGljdHVyZS5cblxuTmV4dCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBgRm9jdXNTeW1ib2xzYC4gVGhhdCdzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLlxuXG5Ob3csIHRoZSBtYWluIGZvY3VzIGlzIG9uIGlkZW50aWZ5aW5nIGV4YWN0bHkgd2hpY2ggZnVuY3Rpb25zIGFyZSBtb2RpZmllZCBvciBkaXJlY3RseSBhZmZlY3RlZCBieSB0aGlzIGNvbmZpZ3VyYXRpb24uIExldCdzIHNlZS4uLiBhaCwgaGVyZSdzIG9uZTogYG1tL3dvcmtpbmdzZXQuY2AuIFNwZWNpZmljYWxseSwgYGNvdW50X3NoYWRvd19ub2Rlc2AuIFRoYXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQncyBsaW1pdGVkIGluIGl0cyBzY29wZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBjb3VudF9zaGFkb3dfbm9kZXNgIHRvIGZ1bGx5IGFzc2VzcyB0aGUgaW1wbGljYXRpb25zLCBhbmQgYWxzbyBhbnkgc2hyaW5rZXJzIHRvIHNlZSBob3cgaXQgbWlnaHQgdGllIGludG8gbWVtb3J5IHJlY2xhaW0uIEkgYWxzbyBoYXZlIHRvIHNlZSB3aGVyZSBpdCdzICp1c2VkKiwgd2hpY2ggc2hvdWxkIGdpdmUgYSBjbGVhcmVyIHZpZXcgb2YgaXRzIHJvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NTQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MDI6MTUuMTM1Mjg4MTYxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDc3NDM2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb3VudF9zaGFkb3dfbm9kZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3dvcmtpbmdzZXQuYz02MjQ9dm9pZCB3b3JraW5nc2V0X3VwZGF0ZV9ub2RlKHN0cnVjdCB4YV9ub2RlICpub2RlKVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTY1MC1cXG5tbS93b3JraW5nc2V0LmM6NjUxOnN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X3NoYWRvd19ub2RlcyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbm1tL3dvcmtpbmdzZXQuYy02NTItXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz03OTI9c3RhdGljIGludCBfX2luaXQgd29ya2luZ3NldF9pbml0KHZvaWQpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtODI4LVxcbm1tL3dvcmtpbmdzZXQuYzo4Mjk6XFx0d29ya2luZ3NldF9zaGFkb3dfc2hyaW5rZXItXFx1MDAzZWNvdW50X29iamVjdHMgPSBjb3VudF9zaGFkb3dfbm9kZXM7XFxubW0vd29ya2luZ3NldC5jLTgzMC1cXHR3b3JraW5nc2V0X3NoYWRvd19zaHJpbmtlci1cXHUwMDNlc2Nhbl9vYmplY3RzID0gc2Nhbl9zaGFkb3dfbm9kZXM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAyOjE1LjIzMDA2OTYzOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTM3MzM0NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGNvdW50X3NoYWRvd19ub2Rlc2AgU2hyaW5rZXIgQ2FsbGJhY2sqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgY291bnRfc2hhZG93X25vZGVzYCwgYW5kIGl0J3MgYWN0aW5nIGFzIGEgc2hyaW5rZXIgY2FsbGJhY2ssIHNwZWNpZmljYWxseSBgd29ya2luZ3NldF9zaGFkb3dfc2hyaW5rZXItXHUwMDNlY291bnRfb2JqZWN0c2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgbWVtb3J5IGNvbnRyb2wgbWVjaGFuaXNtLCBzbyBJJ20gaGVhZGluZyBvdmVyIHRvIGBtbS9tZW1jb250cm9sLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBvcGVyYXRpbmcgd2l0aGluIHRoZSBjb250ZXh0IG9mIG1lbW9yeSBjZ3JvdXBzLlxuXG5BIHF1aWNrIGxvb2sgcmV2ZWFscyBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAsIHdoaWNoIGlzIGRlZmluZWQgYXMgYHN0YXRpYyBpbmxpbmVgLiBUaGlzIGlzIGtleTsgaXQgbWVhbnMgaXQncyBsaWtlbHkgb3B0aW1pemVkIGZvciBwZXJmb3JtYW5jZSwgYnV0IGFsc28gcG90ZW50aWFsbHkgbWFrZXMgZGlyZWN0IGNhbGwgYW5hbHlzaXMgYSBiaXQgbW9yZSBsaW1pdGVkLiBOb3csIGxldCdzIHNlZSB3aGVyZSB0aGF0IGlubGluZSBmdW5jdGlvbiBpcyAqYWN0dWFsbHkqIHVzZWQgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBJJ20gZmluZGluZyBpdCdzIGNhbGxlZCB3aXRoaW4gYG1vZF9tZW1jZ19zdGF0ZWAgYW5kIGFsc28gYG1vZF9tZW1jZ19scnV2ZWNfc3RhdGVgLiBNeSBuZXh0IHF1ZXN0aW9uIGlzLCBpcyBgbW9kX21lbWNnX2xydXZlY19zdGF0ZWAgc3RhdGljLCB0b28/IEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIHZpc2liaWxpdHkgb2YgdGhpcyBvbmUuIFRoYXQncyB0aGUgbmV4dCBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNTEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MDI6MTcuNzY3NDA3NzA5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODQzODkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NTUwPXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3My0jaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jOjU3NDpzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxcbm1tL21lbWNvbnRyb2wuYy01NzUtXFx0XFx0XFx0XFx0ICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU3Nz12b2lkIHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTkwLVxcbm1tL21lbWNvbnRyb2wuYzo1OTE6XFx0XFx0X19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKGNoaWxkX3BuLCBpZHgsIC12YWx1ZSk7XFxubW0vbWVtY29udHJvbC5jOjU5MjpcXHRcXHRfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUocGFyZW50X3BuLCBpZHgsIHZhbHVlKTtcXG5tbS9tZW1jb250cm9sLmMtNTkzLVxcdH1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz04MzI9c3RhdGljIGxvbmcgbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGludCBpZHgsIGxvbmcgdmFsKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTg0OC0vKlxcbm1tL21lbWNvbnRyb2wuYzo4NDk6ICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2VcXG5tbS9tZW1jb250cm9sLmMtODUwLSAqIHdpdGggcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuICBPZmZsaW5pbmcgYVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTk0MT12b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05NTAtXFxubW0vbWVtY29udHJvbC5jOjk1MTpzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxcbm1tL21lbWNvbnRyb2wuYy05NTItXFx0XFx0XFx0XFx0ICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtOTcwLVxcdG1lbWNnX3JzdGF0X3VwZGF0ZWQobWVtY2csIHZhbCwgY3B1KTtcXG5tbS9tZW1jb250cm9sLmM6OTcxOlxcdHRyYWNlX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUobWVtY2csIGlkeCwgdmFsKTtcXG5tbS9tZW1jb250cm9sLmMtOTcyLVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTk3NS1cXG5tbS9tZW1jb250cm9sLmM6OTc2OnN0YXRpYyB2b2lkIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbm1tL21lbWNvbnRyb2wuYy05NzctXFx0XFx0XFx0XFx0ICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05ODgtXFxubW0vbWVtY29udHJvbC5jOjk4OTpcXHRfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUocG4sIGlkeCwgdmFsKTtcXG5tbS9tZW1jb250cm9sLmMtOTkwLVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTEwMDQ9dm9pZCBtb2RfbHJ1dmVjX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTAxMS1cXHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5tbS9tZW1jb250cm9sLmM6MTAxMjpcXHRcXHRtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKGxydXZlYywgaWR4LCB2YWwpO1xcbm1tL21lbWNvbnRyb2wuYy0xMDEzLX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yOTA0PXN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X3NsYWJfbm1pX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI5MTEtXFx0XFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcXG5tbS9tZW1jb250cm9sLmM6MjkxMjpcXHRcXHRtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKGxydXZlYywgaWR4LCBucik7XFxubW0vbWVtY29udHJvbC5jLTI5MTMtXFx0fSBlbHNlIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yOTI1PXN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X3NsYWJfbm1pX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI5MzEtXFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcXG5tbS9tZW1jb250cm9sLmM6MjkzMjpcXHRtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKGxydXZlYywgaWR4LCBucik7XFxubW0vbWVtY29udHJvbC5jLTI5MzMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjoxNy44MzU4NTM1MjhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzU2NjM5MzY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtY2cgU3RhdGUgTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgaW5pdGlhbCBsb29rLCBgbW0vbWVtY29udHJvbC5jYCBpcyB0aGUgcHJpbWFyeSBhcmVhIG9mIGludGVyZXN0LiBJIHNlZSB0aGF0IGBtb2RfbWVtY2dfc3RhdGVgIGNhbGxzIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCwgd2hpY2ggaXMgbm9uLXN0YXRpYy4gVGhlbiBgbW9kX21lbWNnX2xydXZlY19zdGF0ZWAgKHN0YXRpYykgYWxzbyBjYWxscyBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAsIGFuZCB0aGF0J3MgdXNlZCBieSBgbW9kX2xydXZlY19zdGF0ZWAgYW5kIGBhY2NvdW50X3NsYWJfbm1pX3NhZmVgLiBUaGF0IHBhdHRlcm4gc3VnZ2VzdHMgc29tZSB1bmRlcmx5aW5nIHN0cnVjdHVyZSBmb3IgZ2V0dGluZyB0aGUgbWVtY2cgc3RhcnQuIGByZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbGAsIGByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWxgLCBhbmQgYG1lbWNnX29mZmxpbmVfa21lbWAgYXJlIGltbWVkaWF0ZWx5IGZsYWdnZWQgYXMgZGVhbGluZyB3aXRoIG1lbWNnIG9mZmxpbmluZyBhbmQgcmVwYXJlbnRpbmcsIHNvIHRob3NlIHdhcnJhbnQgY2FyZWZ1bCBhdHRlbnRpb24gbGF0ZXIuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBrZXkgZnVuY3Rpb25zOiBgbW9kX2xydXZlY19zdGF0ZWAgYW5kIGBtb2RfbWVtY2dfc3RhdGVgLiBBcmUgdGhleSBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgc3Vic3lzdGVtLCBvciBhcmUgdGhleSBicm9hZGx5IHVzZWQ/IFRoZSBmYWN0IHRoYXQgYG1vZF9scnV2ZWNfcGFnZV9zdGF0ZWAgaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBgbW1gIGNvZGUgc2VlbXMgc2lnbmlmaWNhbnQuIEhtbSwgYW5kIHRoZW4gYGNvdW50X3NoYWRvd19ub2Rlc2AgaXMgaW4gYG1tL3dvcmtpbmdzZXQuY2AsIHRoYXQncyBhIGJpdCB1bmV4cGVjdGVkLiBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zIGluIHRob3NlIHR3byBmaWxlcyB0aGF0IGFyZSByZWxldmFudC5cblxuUmlnaHQsIHRpbWUgdG8gZGlnIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1vdGl2YXRpb24gYmVoaW5kIHRoZSBjaGFuZ2UuIEkgbmVlZCB0byBsb29rIGF0IHRoZSBjb21taXQgbWVzc2FnZSBhbmQgY29udGV4dCB0byBzZWUgd2h5IHRoZSBwYXRjaCB0b3VjaGVkIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCBhbmQgYGNvdW50X3NoYWRvd19ub2Rlc2AuIFRoYXQncyB0aGUgY3J1Y2lhbCBsaW5rIGhlcmUsIGxpbmtpbmcgd2hhdCBpbml0aWFsbHkgbG9va2VkIHRvIGJlIHJlbGF0ZWQgcGFydHMuIFVsdGltYXRlbHksIHRoZSBmb2N1cyBoYXMgdG8gYmUgb24gYHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsYCwgYHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbGAsIGFuZCBgbWVtY2dfb2ZmbGluZV9rbWVtYCwgb3IgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgIHRvIHVuZGVyc3RhbmQgd2hhdCdzIHJlYWxseSBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NzksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MDI6MjEuNDAyMjUwODAxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTUxMjQwODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVwYXJlbnRfbWVtY2dfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLXYxLmM9MTg3MD12b2lkIHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTg3NC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShtZW1jZzFfc3RhdHMpOyBpKyspXFxubW0vbWVtY29udHJvbC12MS5jOjE4NzU6XFx0XFx0cmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCwgbWVtY2cxX3N0YXRzW2ldKTtcXG5tbS9tZW1jb250cm9sLXYxLmMtMTg3Ni19XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MTg3OD12b2lkIHJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4ODItXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSsrKVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxODgzOlxcdFxcdHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50LCBpKTtcXG5tbS9tZW1jb250cm9sLXYxLmMtMTg4NC19XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmg9NjY9dm9pZCByZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCk7XFxubW0vbWVtY29udHJvbC12MS5oLTY3LVxcbm1tL21lbWNvbnRyb2wtdjEuaDo2ODp2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLXYxLmgtNjktXFx0XFx0XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeCk7XFxubW0vbWVtY29udHJvbC12MS5oOjcwOnZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLXYxLmgtNzEtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU3ND1zdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3Ni1cXG5tbS9tZW1jb250cm9sLmM6NTc3OnZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLmMtNTc4LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTkyNT11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTk0MC1cXG5tbS9tZW1jb250cm9sLmM6OTQxOnZvaWQgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL21lbWNvbnRyb2wuYy05NDItXFx0XFx0XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MDI6MjEuNTE3Mzc4OTg5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0NDk3MzQ0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFJlY2VudCBDaGFuZ2VzIHRvIE1lbW9yeSBNYW5hZ2VtZW50IGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgc2NhbiBwb2ludHMgbWUgdG93YXJkcyBzb21lIGludGVyZXN0aW5nIG1vZGlmaWNhdGlvbnMgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUuIEkgc2VlIHRoYXQgdGhlIGBjb3VudF9zaGFkb3dfbm9kZXNgIGZ1bmN0aW9uIGluIGBtbS93b3JraW5nc2V0LmNgIGlzIGJlaW5nIGRpcmVjdGx5IGFsdGVyZWQsIHdoaWNoIGFsd2F5cyBwaXF1ZXMgbXkgaW50ZXJlc3QgYXMgc2hhZG93IG5vZGVzIGFyZSBwcmV0dHkgZnVuZGFtZW50YWwgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIHdvcmtpbmdzZXQgaXMgbWFuYWdlZC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBkZWVtZWQgbmVjZXNzYXJ5LCBhbmQgaG93IGl0IGltcGFjdHMgb3ZlcmFsbCBwZXJmb3JtYW5jZS5cblxuVGhlbiwgSSd2ZSBnb3QgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgIGluIGBtbS9tZW1jb250cm9sLmNgIGJlaW5nIG1vZGlmaWVkLiBOb3Qgc3VycHJpc2luZyB0byBzZWUgY2hhbmdlcyBoZXJlLCBvZiBjb3Vyc2UsIGdpdmVuIGl0J3MgY2FsbGVkIGJ5IGBtb2RfbWVtY2dfc3RhdGVgIGFuZCBgbW9kX21lbWNnX2xydXZlY19zdGF0ZWAuIE1vZGlmaWNhdGlvbnMgdG8gdGhlc2UgY2FsbHMgY2FuIGJlIGEgbGl0dGxlIHRyaWNreSBiZWNhdXNlIG9mIHRoZSB3YXkgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIGFmZmVjdCB0aGluZ3MuIEkga25vdyB0aGVzZSBmdW5jdGlvbnMgZGVhbCB3aXRoIHN0YXRlcyBvZiBtZW1vcnkgY29udHJvbCBncm91cHMsIHNvIGl0IGlzIGxpa2VseSB0aGVzZSB0d28gZnVuY3Rpb25zIGFyZSBjbG9zZWx5IGxpbmtlZCB0byBtZW1vcnkgYWNjb3VudGluZyBhbmQgTFJVIG1hbmFnZW1lbnQgd2l0aGluIGEgbWVtb3J5IGNvbnRyb2wgZ3JvdXAuIFRoYXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBtb3JlIGRlZXBseSwgYW5kIGhvdyBpdCBpbXBhY3RzIGhvdyB0aGluZ3MgbW92ZSBhcm91bmQuXG5cbkZpbmFsbHksIHRoZSBtZW50aW9ucyBvZiBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAsIGByZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsYCwgYW5kIGByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWxgIGFyZSByZWFsbHkgaW50cmlndWluZy4gT2ZmbGluaW5nIGEgbWVtY2cgYW5kIHJlcGFyZW50aW5nIHN0YXRlIGlzIGEgc2lnbmlmaWNhbnQgb3BlcmF0aW9uLCB0eXBpY2FsbHkgZG9uZSBkdXJpbmcgcmVzb3VyY2UgbWFuYWdlbWVudCBvcGVyYXRpb25zLCBvciBkeW5hbWljIGNoYW5nZXMgdG8gdGhlIHN5c3RlbS4gSSdtIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgZmlyc3QuIEl0IGlzIHRoZSBjYWxsIHRoYXQgYmVnaW5zIHRoZSBvZmZsaW5lIHByb2Nlc3MsIHNvIHVuZGVyc3RhbmRpbmcgdGhlIG1lY2hhbmlzbXMgdGhhdCB0cmlnZ2VyIGFuZCB0aGUgY2hhbmdlcyB0aGF0IHJlc3VsdCBmcm9tIHRoaXMgY2FsbCBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgYWxsIG9mIHRoaXMuIFdoYXQgaGFwcGVucyB3aGVuIGEgY2dyb3VwIGlzIHRha2VuIG9mZmxpbmU/IFdoYXQgaW1wbGljYXRpb25zIGRvZXMgdGhpcyBoYXZlIGZvciBwYWdlIG1pZ3JhdGlvbiwgcmVjbGFpbSwgYW5kIG92ZXJhbGwgcmVzb3VyY2UgYWxsb2NhdGlvbj8gTGV0J3MgZGl2ZSBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMTksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MDI6MjQuOTY3MTE2NDE0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTUzNTExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX2Nzc19vZmZsaW5lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NDI5Nz1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQzNzMtXFxubW0vbWVtY29udHJvbC5jOjQzNzQ6c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbm1tL21lbWNvbnRyb2wuYy00Mzc1LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MTg2PXN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MTg4LVxcdC5jc3Nfb25saW5lID0gbWVtX2Nncm91cF9jc3Nfb25saW5lLFxcbm1tL21lbWNvbnRyb2wuYzo1MTg5OlxcdC5jc3Nfb2ZmbGluZSA9IG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUsXFxubW0vbWVtY29udHJvbC5jLTUxOTAtXFx0LmNzc19yZWxlYXNlZCA9IG1lbV9jZ3JvdXBfY3NzX3JlbGVhc2VkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjoyNS4wMzY2NTYzMTNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTczNTE1Njk3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTWVtb3J5IENvbnRyb2wgd2l0aCBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgY2dyb3VwJ3MgQ1NTIChDb250cm9sIEdyb3VwIFN1YnN5c3RlbSkgaGFuZGxlcyBnb2luZyBvZmZsaW5lLiBNeSBpbnN0aW5jdCBpcyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgbWVtb3J5IGNncm91cCBtYW5hZ2VtZW50LCBhbmQsIGJ5IGV4dGVuc2lvbiwgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYC4gVGhhdCBmdW5jdGlvbiB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3RhdGUgdHJhbnNpdGlvbnMgYW5kIHJlc291cmNlIHJlbGVhc2UgYXMgYSBtZW1vcnkgY2dyb3VwIGdvZXMgb2ZmbGluZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIGR1cmluZyB0aGlzIG9mZmxpbmUgc3RhdGUgYmVjYXVzZSBJIGhhdmUgYW4gaW50ZXJlc3QgaW4gc29tZSBlZGdlLWNhc2UgYmVoYXZpb3IgdGhhdCBtaWdodCBiZSBpbXBhY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwNDYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjoyNi43NzE4MTY0NDVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMwNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MzcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MzcwOlxcdFxcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUobWVtY2cpO1xcbjQzNzE6XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNDM3MjpcXHR9XFxuNDM3MzpcXHRcXG40Mzc0OlxcdHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG40Mzc1OlxcdHtcXG40Mzc2OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MoY3NzKTtcXG40Mzc3OlxcdFxcbjQzNzg6XFx0XFx0bWVtY2cxX2Nzc19vZmZsaW5lKG1lbWNnKTtcXG40Mzc5OlxcdFxcbjQzODA6XFx0XFx0cGFnZV9jb3VudGVyX3NldF9taW4oXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIDApO1xcbjQzODE6XFx0XFx0cGFnZV9jb3VudGVyX3NldF9sb3coXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIDApO1xcbjQzODI6XFx0XFxuNDM4MzpcXHRcXHR6c3dhcF9tZW1jZ19vZmZsaW5lX2NsZWFudXAobWVtY2cpO1xcbjQzODQ6XFx0XFxuNDM4NTpcXHRcXHRtZW1jZ19vZmZsaW5lX2ttZW0obWVtY2cpO1xcbjQzODY6XFx0XFx0LypcXG40Mzg3OlxcdFxcdCAqIFRoZSByZXBhcmVudGluZyBvZiBvYmpjZyBtdXN0IGJlIGFmdGVyIHRoZSByZXBhcmVudGluZyBvZlxcbjQzODg6XFx0XFx0ICogdGhlIGxpc3RfbHJ1IGluIG1lbWNnX29mZmxpbmVfa21lbSgpLCB3aGljaCBlbnN1cmVzIHRoYXRcXG40Mzg5OlxcdFxcdCAqIHRoZXkgd2lsbCBub3QgbWlzdGFrZW5seSBnZXQgdGhlIHBhcmVudCBsaXN0X2xydS5cXG40MzkwOlxcdFxcdCAqL1xcbjQzOTE6XFx0XFx0bWVtY2dfcmVwYXJlbnRfb2JqY2dzKG1lbWNnKTtcXG40MzkyOlxcdFxcdHJlcGFyZW50X3Nocmlua2VyX2RlZmVycmVkKG1lbWNnKTtcXG40MzkzOlxcdFxcdHdiX21lbWNnX29mZmxpbmUobWVtY2cpO1xcbjQzOTQ6XFx0XFx0bHJ1X2dlbl9vZmZsaW5lX21lbWNnKG1lbWNnKTtcXG40Mzk1OlxcdFxcbjQzOTY6XFx0XFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcXG40Mzk3OlxcdFxcbjQzOTg6XFx0XFx0bWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgMSk7XFxuNDM5OTpcXHR9XFxuNDQwMDpcXHRcXG40NDAxOlxcdHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JlbGVhc2VkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuNDQwMjpcXHR7XFxuNDQwMzpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKGNzcyk7XFxuNDQwNDpcXHRcXG40NDA1OlxcdFxcdGludmFsaWRhdGVfcmVjbGFpbV9pdGVyYXRvcnMobWVtY2cpO1xcbjQ0MDY6XFx0XFx0bHJ1X2dlbl9yZWxlYXNlX21lbWNnKG1lbWNnKTtcXG40NDA3OlxcdH1cXG40NDA4OlxcdFxcbjQ0MDk6XFx0c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfZnJlZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjoyNi43NzIzNDk4NjVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY0Mjk0MTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gaWRlbnRpZnkgcHJvbWlzaW5nIGZ1enppbmcgdGFyZ2V0cyB3aXRoaW4gdGhlIGtlcm5lbCwgZm9jdXNpbmcgb24gYXJlYXMgdG91Y2hlZCBieSB0aGlzIHBhdGNoLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyBhZmZlY3RlZC4gSSBzZWUgZm91cjogYGNvdW50X3NoYWRvd19ub2Rlc2AgKGluIGBtbS93b3JraW5nc2V0LmNgKSwgYG1vZF9tZW1jZ19zdGF0ZWAgYW5kIGBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlYCAoYm90aCBpbiBgbW0vbWVtY29udHJvbC5jYCksIGFuZCBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgKGFsc28gaW4gYG1tL21lbWNvbnRyb2wuY2ApLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZWlyIHNjb3BlIGFuZCBpZiBTeXprYWxsZXIgY2FuIHRyYWNrIHRoZW0uXG5cbkkgbm90ZSB0aGF0IGBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlYCBpcyBzdGF0aWMgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGUgc2FtZSBpcyB0cnVlIGZvciBgY291bnRfc2hhZG93X25vZGVzYCBhbmQgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgLiBUaGUgYG1vZF9tZW1jZ19zdGF0ZWAgc3ltYm9sLCBob3dldmVyLCBpcyBub3Qgc3RhdGljLiBTeXprYWxsZXIgKmNhbiogdHJhY2sgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5J3JlIGNvbXBpbGVkIHN5bWJvbHMsIHNvIHRoaXMgc2hvdWxkbid0IGJlIGEgcHJvYmxlbS5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbnNpZGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBUaGlzIHBhdGNoIHNlZW1zIHRvIHJlbGF0ZSB0byBtZW1vcnkgY2dyb3Vwcy4gVGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBgTUVNQ0dgLiBJIGhhdmUgdG8gYXNrIG15c2VsZiBpZiB0aGVyZSBhcmUgb3RoZXIgZGVwZW5kZW5jaWVzLCBwb3RlbnRpYWxseSBzb21ldGhpbmcgbGlrZSBgTUVNQ0dfVjFgLiBUaGUgcGF0Y2ggZGVhbHMgd2l0aCBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAsIHdoaWNoIHNlZW1zIHRvIGJlIGVuYWJsZWQgdW5jb25kaXRpb25hbGx5IG5vdywgc28gdGVzdGluZyB3aXRoIGp1c3QgYE1FTUNHYCBzZWVtcyBzdWZmaWNpZW50LCBhbmQgaXQgbWlnaHQgYmUgYSBnb29kIGlkZWEgdG8gaW5jbHVkZSBgTUVNQ0dfVjFgIGFzIHdlbGwuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IGFsbCB0aGUgZnV6emluZyBjcml0ZXJpYS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZSB0YXJnZXRzIGFyZTpcblxuKiAgICoqUmVhY2hhYmxlOioqIFRoZSBgbW0vYCBkaXJlY3RvcnkgaXMgY29yZSBrZXJuZWwgY29kZSwgc28gaXQncyBsaWtlbHkgdG8gYmUgcmVhY2hlZCBvbiBhbWQ2NCBrZXJuZWxzIGluIFFFTVUvR0NFLlxuKiAgICoqV29ydGhGdXp6aW5nOioqIEFic29sdXRlbHkuIE1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgYWNjb3VudGluZyBhcmUgY3JpdGljYWwgYW5kIG9mdGVuIGhhdmUgc3VidGxlLCBleHBsb2l0YWJsZSBidWdzLlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIENvbmZpcm1lZCBhcyB0aGUgZm91ciBwcmV2aW91c2x5IG1lbnRpb25lZC5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYE1FTUNHYC5cblxuRmluYWxseSwgYSBxdWljayBzYW5pdHkgY2hlY2sgb2YgbXkgcmVhc29uaW5nLiBUaGUgcGF0Y2ggdG91Y2hlcyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGFjY291bnRpbmc6IHJlbW92aW5nIHRoZSBjb25kaXRpb25hbCBmb3IgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKWAgYW5kIGBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZCgpYCBpbXBsaWVzIHRoYXQgdGhlIGFuY2VzdG9yIHRyYXZlcnNhbCBvZiBkeWluZyBtZW1jZ3MgaXMgYXBwbGllZCBnZW5lcmFsbHkuIE1vZGlmeWluZyBgY291bnRfc2hhZG93X25vZGVzKClgIHRvIHVzZSBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoKWAgaW5kaWNhdGVzIGNoYW5nZXMgdG8gaG93IHBhZ2Ugc3RhdGUgaXMgY29tcHV0ZWQgZm9yIExSVSBsaXN0cy4gVGhlc2UgYXJlIGNvcmUgYXJlYXMsIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IHJlY2xhaW0gYW5kIHNocmlua2VyIG9wZXJhdGlvbnMsIGFuZCBsaWtlbHkgd2lsbCBiZSB0b3VjaGVkLlxuXG5FdmVyeXRoaW5nIGNoZWNrcyBvdXQuIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTA1LCJPdXRwdXRUb2tlbnMiOjE2OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAyOjMyLjQxNTI5MzY4NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDE2OTE4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb3VudF9zaGFkb3dfbm9kZXNcIixcbiAgICBcIm1vZF9tZW1jZ19zdGF0ZVwiLFxuICAgIFwibW9kX21lbWNnX2xydXZlY19zdGF0ZVwiLFxuICAgIFwibWVtX2Nncm91cF9jc3Nfb2ZmbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgYW5kIHBhZ2UgY2FjaGUgd29ya2luZ3NldCBjYWxjdWxhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBlbmFibGVzIGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKSByZWRpcmVjdGlvbiB1bmNvbmRpdGlvbmFsbHkgYWNyb3NzIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMgaW4gbW0vbWVtY29udHJvbC5jIGFuZCBtb2RpZmllcyBjb3VudF9zaGFkb3dfbm9kZXMoKSBpbiBtbS93b3JraW5nc2V0LmMgdG8gcXVlcnkgbG9jYWwgbHJ1dmVjIHBhZ2Ugc3RhdGUgcmF0aGVyIHRoYW4gem9uZS1iYXNlZCBMUlUgc2l6ZXMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIHRlYXJkb3duL3JlY2xhaW0gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb3VudF9zaGFkb3dfbm9kZXNcIixcbiAgICBcIm1vZF9tZW1jZ19zdGF0ZVwiLFxuICAgIFwibW9kX21lbWNnX2xydXZlY19zdGF0ZVwiLFxuICAgIFwibWVtX2Nncm91cF9jc3Nfb2ZmbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgYW5kIHBhZ2UgY2FjaGUgd29ya2luZ3NldCBjYWxjdWxhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBlbmFibGVzIGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKSByZWRpcmVjdGlvbiB1bmNvbmRpdGlvbmFsbHkgYWNyb3NzIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMgaW4gbW0vbWVtY29udHJvbC5jIGFuZCBtb2RpZmllcyBjb3VudF9zaGFkb3dfbm9kZXMoKSBpbiBtbS93b3JraW5nc2V0LmMgdG8gcXVlcnkgbG9jYWwgbHJ1dmVjIHBhZ2Ugc3RhdGUgcmF0aGVyIHRoYW4gem9uZS1iYXNlZCBMUlUgc2l6ZXMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIHRlYXJkb3duL3JlY2xhaW0gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAyOjMyLjU0OTQ3NjIwM1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMzg2ODg1OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjozMi41NTAzMjc4NTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNjIzNzgzMDUwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtY2cgc3RhdHMgYWNjb3VudGluZyBhbmQgc2hhZG93IG5vZGUgY2FsY3VsYXRpb24gaW4gbW0vbWVtY29udHJvbC5jIGFuZCBtbS93b3JraW5nc2V0LmMuIFNwZWNpZmljYWxseSwgaXQgZ2VuZXJhbGl6ZXMgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKWAgdG8gaGFuZGxlIGFsbCBjZ3JvdXBzIGhpZXJhcmNoaWVzIGFuZCB1c2VzIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbCgpYCBmb3Igd29ya2luZ3NldCBzaGFkb3cgbm9kZSBjb3VudGluZy5cXG5cXG5ObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkLCBub3IgYXJlIHRoZXJlIGFueSBpbmZvLWxlYWtzLCBzdHJ1Y3QgcGFkZGluZyBleHBvc3VyZXMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIHBvaW50ZXIgaXNzdWVzIChzdWNoIGFzIFJDVSBsb2NraW5nIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSkgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzc2NmJjYTIyMWE1M2NiYWFhMDc3MWYzN2MwYTE0MWY4NzBkODY3YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTk6MDE6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDg2ZmY1ODBjNzAxODMuLmRmNDNlNjFjOWViYzEgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTg0NSwxNiArODQ1LDIxIEBAIHN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcbiBcdHJldHVybiB2YWwgXHUwMDNjIDAgPyAtcmVzIDogcmVzO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG4gLypcbi0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoXG4tICogcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuXG4rICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2VcbisgKiB3aXRoIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLiAgT2ZmbGluaW5nIGFcbisgKiBtZW1jZyBpcyByYXJlLCBzbyBkbyB0aGUgcmVkaXJlY3Rpb24gZm9yIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHRcdFx0XHQgICBib29sICpyY3VfbG9ja2VkKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKlxuK2dldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxuIHtcbi1cdC8qIFJlYmluZGluZyBjYW4gY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUgKi9cbi1cdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7XG4rXHQvKlxuK1x0ICogRmFzdCBwYXRoOiB0aGUgY2FsbGVyIGhvbGRzIGEgcmVmZXJlbmNlIHRvIEBtZW1jZywgc28gcmVhZGluZ1xuK1x0ICogaXRzIENTU19EWUlORyBmbGFnIHdpdGhvdXQgdGhlIFJDVSBsb2NrIGlzIHNhZmUuICBUaGUgUkNVIGxvY2tcbitcdCAqIGlzIG9ubHkgbmVlZGVkIHRvIHdhbGsgdXAgdG8gYSBub24tZHlpbmcgYW5jZXN0b3IsIHdoaWNoXG4rXHQgKiBoYXBwZW5zIG9ubHkgd2hpbGUgYSBtZW1jZyBpcyBhY3R1YWxseSBiZWluZyBvZmZsaW5lZC5cbitcdCAqL1xuK1x0aWYgKCFtZW1jZ19pc19keWluZyhtZW1jZykpIHtcbiBcdFx0KnJjdV9sb2NrZWQgPSBmYWxzZTtcbiBcdFx0cmV0dXJuIG1lbWNnO1xuIFx0fVxuQEAgLTg3NSwxNyArODgwLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZClcbiBcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0XHRcdFx0ICAgYm9vbCAqcmN1X2xvY2tlZClcbi17XG4tXHRyZXR1cm4gbWVtY2c7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpXG4te1xuLX1cbi0jZW5kaWZcbiBcbiBzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0ICAgICAgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbClcbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcbmluZGV4IDdhYzJiODhjODBhZTUuLjg0MTJmNDg0MGFlMzUgMTAwNjQ0XG4tLS0gYS9tbS93b3JraW5nc2V0LmNcbisrKyBiL21tL3dvcmtpbmdzZXQuY1xuQEAgLTY4OCwxMCArNjg4LDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4gXG4gXHRcdG1lbV9jZ3JvdXBfZmx1c2hfc3RhdHNfcmF0ZWxpbWl0ZWQoc2MtXHUwMDNlbWVtY2cpO1xuIFx0XHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhzYy1cdTAwM2VtZW1jZywgTk9ERV9EQVRBKHNjLVx1MDAzZW5pZCkpO1xuLVxuIFx0XHRmb3IgKHBhZ2VzID0gMCwgaSA9IDA7IGkgXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSsrKVxuLVx0XHRcdHBhZ2VzICs9IGxydXZlY19scnVfc2l6ZShscnV2ZWMsIGksIE1BWF9OUl9aT05FUyAtIDEpO1xuLVxuK1x0XHRcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYyxcbitcdFx0XHRcdFx0XHRcdCBOUl9MUlVfQkFTRSArIGkpO1xuIFx0XHRwYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChcbiBcdFx0XHRscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHRcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MDI6MzIuNTUwMzI5ODEzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMDU0OTk1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLlxuXG4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIFJlbGV2YW5jZSoqXG5cblJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIGFzc2Vzc2luZyBpZiBLZXJuZWwgTWVtb3J5IFNhbml0aXplciAoS01TQU4pIGlzIHdhcnJhbnRlZCBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzIHRvIGRldGVybWluZSB0aGUgbGlrZWxpaG9vZCBvZiBtZW1vcnkgc2FmZXR5IGlzc3Vlcy5cblxuSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggdG91Y2hlcyBgbW0vbWVtY29udHJvbC5jYCBhbmQgYG1tL3dvcmtpbmdzZXQuY2AuIFRob3NlIGFyZSBpbXBvcnRhbnQgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSDigJMgdGhpbmdzIHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cHMgYW5kIHdvcmtpbmcgc2V0IHRyYWNraW5nLCByZXNwZWN0aXZlbHkuIEhtbSwgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rLiBJJ2xsIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGNvbnRleHQgYXJvdW5kIGxpbmUgODQ1IGluIGBtbS9tZW1jb250cm9sLmNgIGFuZCBsaW5lIDY4OCBpbiBgbW0vd29ya2luZ3NldC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY3J1Y2lhbCBjb250ZXh0IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIG9wZXJhdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyBiZWluZyBtb2RpZmllZC4gS25vd2luZyAqd2hhdCogaXMgYmVpbmcgY2hhbmdlZCwgYW5kICpob3cqLCB3aWxsIGJlIGtleSB0byBzcG90dGluZyBhbnkgcG90ZW50aWFsIG1lbW9yeS1yZWxhdGVkIHZ1bG5lcmFiaWxpdGllcyB0aGF0IEtNU0FOIHdvdWxkIGJlIGdvb2QgYXQgaWRlbnRpZnlpbmcuIEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBjaGFuZ2VzIGluIG1lbW9yeSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIG9yIGRhdGEgYWNjZXNzIHBhdHRlcm5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODU3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjozNS44NTU4MzI1NTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIyNDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NDA6XFx0XFx0LyogR2V0IHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiAodmFsICogdW5pdCAvIFBBR0VfU0laRSkuICovXFxuIDg0MTpcXHRcXHRyZXMgPSBtdWx0X2ZyYWMoYWJzKHZhbCksIHVuaXQsIFBBR0VfU0laRSk7XFxuIDg0MjpcXHRcXHQvKiBSb3VuZCB1cCB6ZXJvIHZhbHVlcy4gKi9cXG4gODQzOlxcdFxcdHJlcyA9IHJlcyA/IDogMTtcXG4gODQ0OlxcdFxcbiA4NDU6XFx0XFx0cmV0dXJuIHZhbCBcXHUwMDNjIDAgPyAtcmVzIDogcmVzO1xcbiA4NDY6XFx0fVxcbiA4NDc6XFx0XFxuIDg0ODpcXHQvKlxcbiA4NDk6XFx0ICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2VcXG4gODUwOlxcdCAqIHdpdGggcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuICBPZmZsaW5pbmcgYVxcbiA4NTE6XFx0ICogbWVtY2cgaXMgcmFyZSwgc28gZG8gdGhlIHJlZGlyZWN0aW9uIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLlxcbiA4NTI6XFx0ICovXFxuIDg1MzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcXG4gODU0OlxcdGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxcbiA4NTU6XFx0e1xcbiA4NTY6XFx0XFx0LypcXG4gODU3OlxcdFxcdCAqIEZhc3QgcGF0aDogdGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byBAbWVtY2csIHNvIHJlYWRpbmdcXG4gODU4OlxcdFxcdCAqIGl0cyBDU1NfRFlJTkcgZmxhZyB3aXRob3V0IHRoZSBSQ1UgbG9jayBpcyBzYWZlLiAgVGhlIFJDVSBsb2NrXFxuIDg1OTpcXHRcXHQgKiBpcyBvbmx5IG5lZWRlZCB0byB3YWxrIHVwIHRvIGEgbm9uLWR5aW5nIGFuY2VzdG9yLCB3aGljaFxcbiA4NjA6XFx0XFx0ICogaGFwcGVucyBvbmx5IHdoaWxlIGEgbWVtY2cgaXMgYWN0dWFsbHkgYmVpbmcgb2ZmbGluZWQuXFxuIDg2MTpcXHRcXHQgKi9cXG4gODYyOlxcdFxcdGlmICghbWVtY2dfaXNfZHlpbmcobWVtY2cpKSB7XFxuIDg2MzpcXHRcXHRcXHQqcmN1X2xvY2tlZCA9IGZhbHNlO1xcbiA4NjQ6XFx0XFx0XFx0cmV0dXJuIG1lbWNnO1xcbiA4NjU6XFx0XFx0fVxcbiA4NjY6XFx0XFxuIDg2NzpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDg2ODpcXHRcXHQqcmN1X2xvY2tlZCA9IHRydWU7XFxuIDg2OTpcXHRcXG4gODcwOlxcdFxcdHdoaWxlIChtZW1jZ19pc19keWluZyhtZW1jZykpXFxuIDg3MTpcXHRcXHRcXHRtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcXG4gODcyOlxcdFxcbiA4NzM6XFx0XFx0cmV0dXJuIG1lbWNnO1xcbiA4NzQ6XFx0fVxcbiA4NzU6XFx0XFxuIDg3NjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxcbiA4Nzc6XFx0e1xcbiA4Nzg6XFx0XFx0aWYgKCFyY3VfbG9ja2VkKVxcbiA4Nzk6XFx0XFx0XFx0cmV0dXJuO1xcbiA4ODA6XFx0XFxuIDg4MTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gODgyOlxcdH1cXG4gODgzOlxcdFxcbiA4ODQ6XFx0c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiA4ODU6XFx0XFx0XFx0XFx0ICAgICAgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbClcXG4gODg2OlxcdHtcXG4gODg3OlxcdFxcdGludCBpID0gbWVtY2dfc3RhdHNfaW5kZXgoaWR4KTtcXG4gODg4OlxcdFxcdGludCBjcHU7XFxuIDg4OTpcXHRcXG4gODkwOlxcdFxcdGlmIChXQVJOX09OQ0UoQkFEX1NUQVRfSURYKGkpLCBcXFwiJXM6IG1pc3Npbmcgc3RhdCBpdGVtICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgaWR4KSlcXG4gODkxOlxcdFxcdFxcdHJldHVybjtcXG4gODkyOlxcdFxcbiA4OTM6XFx0XFx0Y3B1ID0gZ2V0X2NwdSgpO1xcbiA4OTQ6XFx0XFxuIDg5NTpcXHRcXHR0aGlzX2NwdV9hZGQobWVtY2ctXFx1MDAzZXZtc3RhdHNfcGVyY3B1LVxcdTAwM2VzdGF0ZVtpXSwgdmFsKTtcXG4gODk2OlxcdFxcdHZhbCA9IG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpZHgsIHZhbCk7XFxuIDg5NzpcXHRcXHRtZW1jZ19yc3RhdF91cGRhdGVkKG1lbWNnLCB2YWwsIGNwdSk7XFxuIDg5ODpcXHRcXG4gODk5OlxcdFxcdHRyYWNlX21vZF9tZW1jZ19zdGF0ZShtZW1jZywgaWR4LCB2YWwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjozNS44NTYzNTg2M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTMyNjE2NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgU3Vic3lzdGVtKipcblxuT2theSwgc28gd2UncmUgZGlnZ2luZyBkZWVwIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGFuZCBteSBmb2N1cyBpcyBjdXJyZW50bHkgb24gYG1tL3dvcmtpbmdzZXQuY2AuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgaG93IHRoZSB3b3JraW5nIHNldCBtZWNoYW5pc20gaXMgaW1wbGVtZW50ZWQsIGFuZCBJIHJlY2FsbCBzb21lIHNwZWNpZmljIGxvZ2ljIGFyb3VuZCBsaW5lIDY4MCB0aGF0J3MgYmVlbiBuYWdnaW5nIGF0IG1lLiBUaW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoYXQgc2VjdGlvbiwgbWF5YmUgc29tZSBpbnNpZ2h0cyB3aWxsIGNsaWNrIGFzIEkgcmVyZWFkIHRoYXQgcGFydCBvZiB0aGUgZmlsZS4gSSBzdXNwZWN0IHRoYXQgdGhlcmUgYXJlIGNydWNpYWwgZGV0YWlscyByZWxhdGVkIHRvIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSB3b3JraW5nIHNldCBzaXplLCBwYWdlIHJlcGxhY2VtZW50LCBhbmQgcGVyaGFwcyB0aGUgbnVhbmNlcyBvZiBob3cgdGhlIGtlcm5lbCBpZGVudGlmaWVzIHBhZ2VzIHRoYXQgYmVsb25nIGluIHRoZSB3b3JraW5nIHNldCB0aGVyZS4gVGltZSB0byBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNjgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAyOjM3Ljc4ODk3ODA4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTA5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vd29ya2luZ3NldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY3MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY3MDpcXHRcXHQgKiBpbmFjdGl2ZSBsaXN0LiBBc3N1bWUgdGhlIHRvdGFsIGNhY2hlIHNpemUgZm9yIHRoYXQuXFxuIDY3MTpcXHRcXHQgKlxcbiA2NzI6XFx0XFx0ICogTm9kZXMgbWlnaHQgYmUgc3BhcnNlbHkgcG9wdWxhdGVkLCB3aXRoIG9ubHkgb25lIHNoYWRvd1xcbiA2NzM6XFx0XFx0ICogZW50cnkgaW4gdGhlIGV4dHJlbWUgY2FzZS4gT2J2aW91c2x5LCB3ZSBjYW5ub3Qga2VlcCBvbmVcXG4gNjc0OlxcdFxcdCAqIG5vZGUgZm9yIGV2ZXJ5IGVsaWdpYmxlIHNoYWRvdyBlbnRyeSwgc28gY29tcHJvbWlzZSBvbiBhXFxuIDY3NTpcXHRcXHQgKiB3b3JzdC1jYXNlIGRlbnNpdHkgb2YgMS84dGguIEJlbG93IHRoYXQsIG5vdCBhbGwgZWxpZ2libGVcXG4gNjc2OlxcdFxcdCAqIHJlZmF1bHRzIGNhbiBiZSBkZXRlY3RlZCBhbnltb3JlLlxcbiA2Nzc6XFx0XFx0ICpcXG4gNjc4OlxcdFxcdCAqIE9uIDY0LWJpdCB3aXRoIDcgeGFfbm9kZXMgcGVyIHBhZ2UgYW5kIDY0IHNsb3RzXFxuIDY3OTpcXHRcXHQgKiBlYWNoLCB0aGlzIHdpbGwgcmVjbGFpbSBzaGFkb3cgZW50cmllcyB3aGVuIHRoZXkgY29uc3VtZVxcbiA2ODA6XFx0XFx0ICogfjEuOCUgb2YgYXZhaWxhYmxlIG1lbW9yeTpcXG4gNjgxOlxcdFxcdCAqXFxuIDY4MjpcXHRcXHQgKiBQQUdFX1NJWkUgLyB4YV9ub2RlcyAvIG5vZGVfZW50cmllcyAqIDggLyBQQUdFX1NJWkVcXG4gNjgzOlxcdFxcdCAqL1xcbiA2ODQ6XFx0I2lmZGVmIENPTkZJR19NRU1DR1xcbiA2ODU6XFx0XFx0aWYgKHNjLVxcdTAwM2VtZW1jZykge1xcbiA2ODY6XFx0XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbiA2ODc6XFx0XFx0XFx0aW50IGk7XFxuIDY4ODpcXHRcXG4gNjg5OlxcdFxcdFxcdG1lbV9jZ3JvdXBfZmx1c2hfc3RhdHNfcmF0ZWxpbWl0ZWQoc2MtXFx1MDAzZW1lbWNnKTtcXG4gNjkwOlxcdFxcdFxcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLVxcdTAwM2VtZW1jZywgTk9ERV9EQVRBKHNjLVxcdTAwM2VuaWQpKTtcXG4gNjkxOlxcdFxcdFxcdGZvciAocGFnZXMgPSAwLCBpID0gMDsgaSBcXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSsrKVxcbiA2OTI6XFx0XFx0XFx0XFx0cGFnZXMgKz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwobHJ1dmVjLFxcbiA2OTM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IE5SX0xSVV9CQVNFICsgaSk7XFxuIDY5NDpcXHRcXHRcXHRwYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChcXG4gNjk1OlxcdFxcdFxcdFxcdGxydXZlYywgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiA2OTY6XFx0XFx0XFx0cGFnZXMgKz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXFxuIDY5NzpcXHRcXHRcXHRcXHRscnV2ZWMsIE5SX1NMQUJfVU5SRUNMQUlNQUJMRV9CKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiA2OTg6XFx0XFx0fSBlbHNlXFxuIDY5OTpcXHQjZW5kaWZcXG4gNzAwOlxcdFxcdFxcdHBhZ2VzID0gbm9kZV9wcmVzZW50X3BhZ2VzKHNjLVxcdTAwM2VuaWQpO1xcbiA3MDE6XFx0XFxuIDcwMjpcXHRcXHRtYXhfbm9kZXMgPSBwYWdlcyBcXHUwMDNlXFx1MDAzZSAoWEFfQ0hVTktfU0hJRlQgLSAzKTtcXG4gNzAzOlxcdFxcbiA3MDQ6XFx0XFx0aWYgKG5vZGVzIFxcdTAwM2M9IG1heF9ub2RlcylcXG4gNzA1OlxcdFxcdFxcdHJldHVybiAwO1xcbiA3MDY6XFx0XFx0cmV0dXJuIG5vZGVzIC0gbWF4X25vZGVzO1xcbiA3MDc6XFx0fVxcbiA3MDg6XFx0XFxuIDcwOTpcXHRzdGF0aWMgZW51bSBscnVfc3RhdHVzIHNoYWRvd19scnVfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxcbiA3MTA6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9scnVfb25lICpscnUsXFxuIDcxMTpcXHRcXHRcXHRcXHRcXHRcXHQgIHZvaWQgKmFyZykgX19tdXN0X2hvbGQobHJ1LVxcdTAwM2Vsb2NrKVxcbiA3MTI6XFx0e1xcbiA3MTM6XFx0XFx0c3RydWN0IHhhX25vZGUgKm5vZGUgPSBjb250YWluZXJfb2YoaXRlbSwgc3RydWN0IHhhX25vZGUsIHByaXZhdGVfbGlzdCk7XFxuIDcxNDpcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MDI6MzcuNzkwOTMyMzZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA0Nzg1MjY5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgIFVzYWdlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRoaXMgc3VnZ2VzdHMgYSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgY29udHJvbCBzeXN0ZW0gaGFuZGxlcyB0aGUgc3RhcnQgb2YgYSBub24tZHlpbmcgbWVtb3J5IGNncm91cCwgYW5kIG1vcmUgc3BlY2lmaWNhbGx5LCB3aGF0IHRoZSBjYWxsZXIgaXMgZG9pbmcgd2l0aCB0aGUgcmVzdWx0LiBJIGV4cGVjdCB0byBzZWUgdGhpcyBmdW5jdGlvbiBiZWluZyB1c2VkIGluIGNyaXRpY2FsIHBhdGggbWVtb3J5IGFsbG9jYXRpb24gb3IgdHJhY2tpbmcsIGxpa2VseSBhcm91bmQgcmVjbGFpbSBvciByZXNvdXJjZSBhY2NvdW50aW5nIGR1cmluZyBjZ3JvdXAgbGlmZWN5Y2xlIGV2ZW50cy4gVGhlIGZvY3VzIGlzIGRlZmluaXRlbHkgb24gaWRlbnRpZnlpbmcgdGhlIGNyaXRpY2FsIGNhbGxzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29udGV4dCBvZiBlYWNoIGNhbGwsIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuIHJlZ2FyZGluZyBtZW1vcnkgbWFuYWdlbWVudCBzeW5jaHJvbml6YXRpb24gb3IgcmFjZSBjb25kaXRpb25zLCBnaXZlbiB0aGUgXCJub24tZHlpbmdcIiBuYXR1cmUgaW1wbGllcy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgc3VycHJpc2luZyB1c2VzLCBvciBhbnkgdXNhZ2UgcGF0dGVybnMgdGhhdCBJIGhhZG4ndCBjb25zaWRlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTY3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjozOS44Mzg3ODg3NjdaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1ODgxMDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9ub25fZHlpbmdfbWVtY2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz04NTM9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqXFxubW0vbWVtY29udHJvbC5jOjg1NDpnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqcmN1X2xvY2tlZClcXG5tbS9tZW1jb250cm9sLmMtODU1LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy04NzUtXFxubW0vbWVtY29udHJvbC5jOjg3NjpzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxcbm1tL21lbWNvbnRyb2wuYy04Nzcte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTkxMD12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05MTctXFxubW0vbWVtY29udHJvbC5jOjkxODpcXHRtZW1jZyA9IGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQobWVtY2csIFxcdTAwMjZyY3VfbG9ja2VkKTtcXG5tbS9tZW1jb250cm9sLmMtOTE5LVxcdF9fbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIHZhbCk7XFxubW0vbWVtY29udHJvbC5jOjkyMDpcXHRnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChyY3VfbG9ja2VkKTtcXG5tbS9tZW1jb250cm9sLmMtOTIxLX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz05NzY9c3RhdGljIHZvaWQgbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtOTg1LVxcdHBuID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XFxubW0vbWVtY29udHJvbC5jOjk4NjpcXHRtZW1jZyA9IGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQocG4tXFx1MDAzZW1lbWNnLCBcXHUwMDI2cmN1X2xvY2tlZCk7XFxubW0vbWVtY29udHJvbC5jLTk4Ny1cXHRwbiA9IG1lbWNnLVxcdTAwM2Vub2RlaW5mb1twZ2RhdC1cXHUwMDNlbm9kZV9pZF07XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtOTkwLVxcbm1tL21lbWNvbnRyb2wuYzo5OTE6XFx0Z2V0X25vbl9keWluZ19tZW1jZ19lbmQocmN1X2xvY2tlZCk7XFxubW0vbWVtY29udHJvbC5jLTk5Mi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAyOjM5LjkxNDY3NDY4NloiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0Mjk1NjMxNzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBNZW1vcnkgQ29udHJvbCBhbmQgV29ya2luZyBTZXQgVXBkYXRlcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgcGF0Y2ggZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGZvY3VzZXMgb24gdGhlIGtleSBjaGFuZ2VzIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLCBzcGVjaWZpY2FsbHkgZnJvbSBhIG1lbW9yeSBtYW5hZ2VtZW50IHBlcnNwZWN0aXZlLlxuXG5GaXJzdCwgaW4gYG1tL21lbWNvbnRyb2wuY2AsIHRoZXkndmUgc3RyZWFtbGluZWQgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgLiBQcmV2aW91c2x5LCB0aGUgY29kZSBoYWQgYSBjb25kaXRpb25hbCBzdHJ1Y3R1cmUgYmFzZWQgb24gYENPTkZJR19NRU1DR19WMWAuIE5vdywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0J3MgdjEgb3IgdjIgY2dyb3VwcywgdGhlIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgYG1lbWNnYCBpcyBkeWluZyB1c2luZyBgbWVtY2dfaXNfZHlpbmcoKWAuIElmIGl0ICppcyogZHlpbmcsIGl0IHRyYXZlcnNlcyB1cCB0aGUgYW5jZXN0b3IgY2hhaW4gdW5kZXIgYW4gUkNVIHJlYWQgbG9jay4gVGhlIGNydWNpYWwgcG9pbnQgaGVyZSBpcyB0aGUgYHJjdV9sb2NrZWRgIGZsYWc7IGl0J3Mgc2V0IHRvIGBmYWxzZWAgaWYgdGhlIGBtZW1jZ2AgaXNuJ3QgZHlpbmcsIGFuZCBgdHJ1ZWAgb3RoZXJ3aXNlLiBgZ2V0X25vbl9keWluZ19tZW1jZ19lbmRgIHRoZW4gaGFuZGxlcyB0aGUgUkNVIHVubG9jayBiYXNlZCBvbiB0aGlzIGZsYWcuIFRoaXMgaXMgYSBjbGVhciBzaW1wbGlmaWNhdGlvbiBvZiB0aGUgbG9naWMuIFRoZSByZW1vdmFsIG9mIHRoZSBgY2dyb3VwX3N1YnN5c19vbl9kZmxgIGNoZWNrIGFuZCBgQ09ORklHX01FTUNHX1YxYCBndWFyZHMgc3VnZ2VzdHMgYSBtb3JlIHVuaWZpZWQgYXBwcm9hY2ggYWNyb3NzIGNncm91cCB2ZXJzaW9ucywgd2hpY2ggaXMgYSBnb29kIGRpcmVjdGlvbi5cblxuTmV4dCwgaW4gYG1tL3dvcmtpbmdzZXQuY2AsIHRoZXJlJ3MgYSBzdHJhaWdodGZvcndhcmQgb3B0aW1pemF0aW9uIGluIGBjb3VudF9zaGFkb3dfbm9kZXMoKWAuIFRoZSBvcmlnaW5hbCBjb2RlIGl0ZXJhdGVkIHRocm91Z2ggem9uZSBMUlUgc2l6ZXMuIE5vdywgaXQgdXNlcyBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoKWAuIFRoaXMgaXMgYSBjbGFzc2ljIG1vdmUsIGxldmVyYWdpbmcgcGVyLUNQVSBvciBwZXItbm9kZSBsb2NhbCBzdGF0aXN0aWNzLCB0byBhdm9pZCBpdGVyYXRpbmcgdGhyb3VnaCB6b25lcyBhbmQgc3VtbWluZyB1cCBwYWdlIGNvdW50cy4gTXVjaCBtb3JlIGVmZmljaWVudCBhbmQgYSBjbGVhbmVyIGFwcHJvYWNoLlxuXG5Ob3csIGFzIGFsd2F5cywgSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBJIHNlZSBhIGBib29sIHJjdV9sb2NrZWRgIGludHJvZHVjZWQgaW4gYG1vZF9tZW1jZ19zdGF0ZWAgYW5kIGBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlYC4gTGV0J3MgZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aG9zZSBmdW5jdGlvbnMuIFRoZXkgc2hvdWxkIGJlIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIHRvIGNoZWNrIGZvciBhbnkgdXNlIG9mIGByY3VfbG9ja2VkYCBiZWZvcmUgaXQncyBzZXQuIEdvdHRhIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHN1YnRsZSBpbml0aWFsaXphdGlvbiBpc3N1ZXMgbHVya2luZy4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MDI6NDQuMjEwMzA5NDQ3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTEwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTEwOlxcdHZvaWQgbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LFxcbiA5MTE6XFx0XFx0XFx0ICAgICAgIGludCB2YWwpXFxuIDkxMjpcXHR7XFxuIDkxMzpcXHRcXHRib29sIHJjdV9sb2NrZWQgPSBmYWxzZTtcXG4gOTE0OlxcdFxcbiA5MTU6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG4gOTE2OlxcdFxcdFxcdHJldHVybjtcXG4gOTE3OlxcdFxcbiA5MTg6XFx0XFx0bWVtY2cgPSBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KG1lbWNnLCBcXHUwMDI2cmN1X2xvY2tlZCk7XFxuIDkxOTpcXHRcXHRfX21vZF9tZW1jZ19zdGF0ZShtZW1jZywgaWR4LCB2YWwpO1xcbiA5MjA6XFx0XFx0Z2V0X25vbl9keWluZ19tZW1jZ19lbmQocmN1X2xvY2tlZCk7XFxuIDkyMTpcXHR9XFxuIDkyMjpcXHRcXG4gOTIzOlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG4gOTI0OlxcdC8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbS4gKi9cXG4gOTI1OlxcdHVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpXFxuIDkyNjpcXHR7XFxuIDkyNzpcXHRcXHRsb25nIHg7XFxuIDkyODpcXHRcXHRpbnQgaSA9IG1lbWNnX3N0YXRzX2luZGV4KGlkeCk7XFxuIDkyOTpcXHRcXG4gOTMwOlxcdFxcdGlmIChXQVJOX09OQ0UoQkFEX1NUQVRfSURYKGkpLCBcXFwiJXM6IG1pc3Npbmcgc3RhdCBpdGVtICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgaWR4KSlcXG4gOTMxOlxcdFxcdFxcdHJldHVybiAwO1xcbiA5MzI6XFx0XFxuIDkzMzpcXHRcXHR4ID0gUkVBRF9PTkNFKG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpXSk7XFxuIDkzNDpcXHQjaWZkZWYgQ09ORklHX1NNUFxcbiA5MzU6XFx0XFx0aWYgKHggXFx1MDAzYyAwKVxcbiA5MzY6XFx0XFx0XFx0eCA9IDA7XFxuIDkzNzpcXHQjZW5kaWZcXG4gOTM4OlxcdFxcdHJldHVybiB4O1xcbiA5Mzk6XFx0fVxcbiA5NDA6XFx0XFxuIDk0MTpcXHR2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gOTQyOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpXFxuIDk0MzpcXHR7XFxuIDk0NDpcXHRcXHR1bnNpZ25lZCBsb25nIHZhbHVlID0gbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChtZW1jZywgaWR4KTtcXG4gOTQ1OlxcdFxcbiA5NDY6XFx0XFx0X19tb2RfbWVtY2dfc3RhdGUobWVtY2csIGlkeCwgLXZhbHVlKTtcXG4gOTQ3OlxcdFxcdF9fbW9kX21lbWNnX3N0YXRlKHBhcmVudCwgaWR4LCB2YWx1ZSk7XFxuIDk0ODpcXHR9XFxuIDk0OTpcXHQjZW5kaWZcXG4gOTUwOlxcdFxcbiA5NTE6XFx0c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcXG4gOTUyOlxcdFxcdFxcdFxcdFxcdCAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsIGxvbmcgdmFsKVxcbiA5NTM6XFx0e1xcbiA5NTQ6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gcG4tXFx1MDAzZW1lbWNnO1xcbiA5NTU6XFx0XFx0aW50IGkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpO1xcbiA5NTY6XFx0XFx0aW50IGNwdTtcXG4gOTU3OlxcdFxcbiA5NTg6XFx0XFx0aWYgKFdBUk5fT05DRShCQURfU1RBVF9JRFgoaSksIFxcXCIlczogbWlzc2luZyBzdGF0IGl0ZW0gJWRcXFxcblxcXCIsIF9fZnVuY19fLCBpZHgpKVxcbiA5NTk6XFx0XFx0XFx0cmV0dXJuO1xcbiA5NjA6XFx0XFxuIDk2MTpcXHRcXHRjcHUgPSBnZXRfY3B1KCk7XFxuIDk2MjpcXHRcXG4gOTYzOlxcdFxcdC8qIFVwZGF0ZSBtZW1jZyAqL1xcbiA5NjQ6XFx0XFx0dGhpc19jcHVfYWRkKG1lbWNnLVxcdTAwM2V2bXN0YXRzX3BlcmNwdS1cXHUwMDNlc3RhdGVbaV0sIHZhbCk7XFxuIDk2NTpcXHRcXG4gOTY2OlxcdFxcdC8qIFVwZGF0ZSBscnV2ZWMgKi9cXG4gOTY3OlxcdFxcdHRoaXNfY3B1X2FkZChwbi1cXHUwMDNlbHJ1dmVjX3N0YXRzX3BlcmNwdS1cXHUwMDNlc3RhdGVbaV0sIHZhbCk7XFxuIDk2ODpcXHRcXG4gOTY5OlxcdFxcdHZhbCA9IG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpZHgsIHZhbCk7XFxuIDk3MDpcXHRcXHRtZW1jZ19yc3RhdF91cGRhdGVkKG1lbWNnLCB2YWwsIGNwdSk7XFxuIDk3MTpcXHRcXHR0cmFjZV9tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKG1lbWNnLCBpZHgsIHZhbCk7XFxuIDk3MjpcXHRcXG4gOTczOlxcdFxcdHB1dF9jcHUoKTtcXG4gOTc0OlxcdH1cXG4gOTc1OlxcdFxcbiA5NzY6XFx0c3RhdGljIHZvaWQgbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIDk3NzpcXHRcXHRcXHRcXHRcXHQgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LFxcbiA5Nzg6XFx0XFx0XFx0XFx0XFx0ICAgICBpbnQgdmFsKVxcbiA5Nzk6XFx0e1xcbiA5ODA6XFx0XFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xcbiA5ODE6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuO1xcbiA5ODI6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbiA5ODM6XFx0XFx0Ym9vbCByY3VfbG9ja2VkID0gZmFsc2U7XFxuIDk4NDpcXHRcXG4gOTg1OlxcdFxcdHBuID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XFxuIDk4NjpcXHRcXHRtZW1jZyA9IGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQocG4tXFx1MDAzZW1lbWNnLCBcXHUwMDI2cmN1X2xvY2tlZCk7XFxuIDk4NzpcXHRcXHRwbiA9IG1lbWNnLVxcdTAwM2Vub2RlaW5mb1twZ2RhdC1cXHUwMDNlbm9kZV9pZF07XFxuIDk4ODpcXHRcXG4gOTg5OlxcdFxcdF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShwbiwgaWR4LCB2YWwpO1xcbiA5OTA6XFx0XFxuIDk5MTpcXHRcXHRnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChyY3VfbG9ja2VkKTtcXG4gOTkyOlxcdH1cXG4gOTkzOlxcdFxcbiA5OTQ6XFx0LyoqXFxuIDk5NTpcXHQgKiBtb2RfbHJ1dmVjX3N0YXRlIC0gdXBkYXRlIGxydXZlYyBtZW1vcnkgc3RhdGlzdGljc1xcbiA5OTY6XFx0ICogQGxydXZlYzogdGhlIGxydXZlY1xcbiA5OTc6XFx0ICogQGlkeDogdGhlIHN0YXQgaXRlbVxcbiA5OTg6XFx0ICogQHZhbDogZGVsdGEgdG8gYWRkIHRvIHRoZSBjb3VudGVyLCBjYW4gYmUgbmVnYXRpdmVcXG4gOTk5OlxcdCAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAyOjQ0LjIxMDYyNTEzN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTc3NTAyMDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIENvbmNlcm5zIEhlcmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEFuYWx5emluZyBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAsIHRoZSBgcmN1X2xvY2tlZGAgdmFyaWFibGUgaXMgZXhwbGljaXRseSBoYW5kbGVkIOKAkyBpdCdzIGFsd2F5cyBlaXRoZXIgc2V0IHRvIGBmYWxzZWAgb3IgYHRydWVgIGFuZCB3YXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBpbiBib3RoIGNhbGxlciBsb2NhdGlvbnMuIFRoZSBgcGFnZXNgIHZhcmlhYmxlIGluIGBtbS93b3JraW5nc2V0LmNgIGlzIGFsc28gaW5pdGlhbGl6ZWQgd2l0aCBhIGNsZWFuIGxvb3AuIFRoZXJlJ3Mgbm8gaW50cm9kdWN0aW9uIG9mIG5ldyBidWZmZXJzLCBubyBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vIHBvdGVudGlhbCBwYWRkaW5nIGlzc3VlcywgYW5kIGRlZmluaXRlbHkgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgdG8gd29ycnkgYWJvdXQsIHdoZXRoZXIgaXQgYmUgaGVhcCBvciBzdGFjayB2YXJpYWJsZXMuIEFueSBsb2NraW5nIGlzc3VlcyByZWxhdGVkIHRvIFJDVSB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUCBhbmQgUkNVIGRlYnVnZ2luZywgYW5kIEtBU0FOIGFuZCBzdGFuZGFyZCBmYXVsdCBoYW5kbGVycyB3b3VsZCBkZWFsIHdpdGggYW55IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgZGVhZCBjZ3JvdXAgcmVmZXJlbmNlcy5cblxuTm93LCBsZXQncyBydW4gdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWEuXG5cbjEuICBLZXJuZWwgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZT8gTm9wZS4gTm8gYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmssIGlvY3RsLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMgaW52b2x2ZWQsIGFuZCBubyBzdHJ1Y3R1cmUgcGFkZGluZyBjb25jZXJucy5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS4gRXZlcnl0aGluZyBpcyBwcm9wZXJseSBpbml0aWFsaXplZC5cbjMuICBBbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vcGUuIEFsbCBjbGVhciBhbmQgc2FmZS5cbjQuICBCb3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YT8gTm9wZS4gTm90IGhlcmUuXG5cbk9uIHRoZSBvdGhlciBoYW5kLCB0aGUgcGF0Y2ggZmFsbHMgdW5kZXIgdGhlIFwiTmVlZHNLTVNBTj1mYWxzZVwiIGNyaXRlcmlhIGJlY2F1c2UgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2hpY2ggYXJlIGFscmVhZHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIEFsbCB0aGUgcmVsZXZhbnQgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLiBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MuXG5cblRoZXJlZm9yZSwgYWZ0ZXIgdGhpcyBkZXRhaWxlZCBhc3Nlc3NtZW50LCBJIGFtIHZlcnkgY29uZmlkZW50IHRoYXQgTmVlZHNLTVNBTiBzaG91bGQgYmUgc2V0IHRvICpmYWxzZSouIFRpbWUgdG8gcHJlcGFyZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mzk4LCJPdXRwdXRUb2tlbnMiOjE3OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAyOjQ4Ljc4ODEzMDUxNFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtY2cgc3RhdHMgYWNjb3VudGluZyBhbmQgc2hhZG93IG5vZGUgY2FsY3VsYXRpb24gaW4gbW0vbWVtY29udHJvbC5jIGFuZCBtbS93b3JraW5nc2V0LmMuIFNwZWNpZmljYWxseSwgaXQgZ2VuZXJhbGl6ZXMgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKWAgdG8gaGFuZGxlIGFsbCBjZ3JvdXBzIGhpZXJhcmNoaWVzIGFuZCB1c2VzIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbCgpYCBmb3Igd29ya2luZ3NldCBzaGFkb3cgbm9kZSBjb3VudGluZy5cXG5cXG5ObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkLCBub3IgYXJlIHRoZXJlIGFueSBpbmZvLWxlYWtzLCBzdHJ1Y3QgcGFkZGluZyBleHBvc3VyZXMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIHBvaW50ZXIgaXNzdWVzIChzdWNoIGFzIFJDVSBsb2NraW5nIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSkgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtY2cgc3RhdHMgYWNjb3VudGluZyBhbmQgc2hhZG93IG5vZGUgY2FsY3VsYXRpb24gaW4gbW0vbWVtY29udHJvbC5jIGFuZCBtbS93b3JraW5nc2V0LmMuIFNwZWNpZmljYWxseSwgaXQgZ2VuZXJhbGl6ZXMgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKWAgdG8gaGFuZGxlIGFsbCBjZ3JvdXBzIGhpZXJhcmNoaWVzIGFuZCB1c2VzIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbCgpYCBmb3Igd29ya2luZ3NldCBzaGFkb3cgbm9kZSBjb3VudGluZy5cXG5cXG5ObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkLCBub3IgYXJlIHRoZXJlIGFueSBpbmZvLWxlYWtzLCBzdHJ1Y3QgcGFkZGluZyBleHBvc3VyZXMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIHBvaW50ZXIgaXNzdWVzIChzdWNoIGFzIFJDVSBsb2NraW5nIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSkgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowt749q[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 18:19:26 +0000 UTC FinishedAt: 2026-09-05 19:02:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e81d06906b1675bcfdf559fada6725466c7efcc5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "e81d06906b1675bcfdf559fada6725466c7efcc5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG" ], "series_id": "5589d7e1-26ab-48c8-85cf-3ed9f66f6167" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "count_shadow_nodes", "mod_memcg_state", "mod_memcg_lruvec_state", "mem_cgroup_css_offline" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y291bnRfc2hhZG93X25vZGVzJiMzNDssCiAgICAmIzM0O21vZF9tZW1jZ19zdGF0ZSYjMzQ7LAogICAgJiMzNDttb2RfbWVtY2dfbHJ1dmVjX3N0YXRlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY3NzX29mZmxpbmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1jZyBzdGF0cyBhY2NvdW50aW5nIGFuZCBzaGFkb3cgbm9kZSBjYWxjdWxhdGlvbiBpbiBtbS9tZW1jb250cm9sLmMgYW5kIG1tL3dvcmtpbmdzZXQuYy4gU3BlY2lmaWNhbGx5LCBpdCBnZW5lcmFsaXplcyBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydCgpYCB0byBoYW5kbGUgYWxsIGNncm91cHMgaGllcmFyY2hpZXMgYW5kIHVzZXMgYGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKClgIGZvciB3b3JraW5nc2V0IHNoYWRvdyBub2RlIGNvdW50aW5nLlxuXG5ObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkLCBub3IgYXJlIHRoZXJlIGFueSBpbmZvLWxlYWtzLCBzdHJ1Y3QgcGFkZGluZyBleHBvc3VyZXMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIHBvaW50ZXIgaXNzdWVzIChzdWNoIGFzIFJDVSBsb2NraW5nIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSkgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgYW5kIHBhZ2UgY2FjaGUgd29ya2luZ3NldCBjYWxjdWxhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBlbmFibGVzIGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKSByZWRpcmVjdGlvbiB1bmNvbmRpdGlvbmFsbHkgYWNyb3NzIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMgaW4gbW0vbWVtY29udHJvbC5jIGFuZCBtb2RpZmllcyBjb3VudF9zaGFkb3dfbm9kZXMoKSBpbiBtbS93b3JraW5nc2V0LmMgdG8gcXVlcnkgbG9jYWwgbHJ1dmVjIHBhZ2Ugc3RhdGUgcmF0aGVyIHRoYW4gem9uZS1iYXNlZCBMUlUgc2l6ZXMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIHRlYXJkb3duL3JlY2xhaW0gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjNzY2YmNhMjIxYTUzY2JhYWEwNzcxZjM3YzBhMTQxZjg3MGQ4NjdhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxOTowMTo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDg2ZmY1ODBjNzAxODMuLmRmNDNlNjFjOWViYzEgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTg0NSwxNiAmIzQzOzg0NSwyMSBAQCBzdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpXG4gXHRyZXR1cm4gdmFsIFx1MDAzYyAwID8gLXJlcyA6IHJlcztcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19NRU1DR19WMVxuIC8qXG4tICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2Ugd2l0aFxuLSAqIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLlxuJiM0MzsgKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZVxuJiM0MzsgKiB3aXRoIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLiAgT2ZmbGluaW5nIGFcbiYjNDM7ICogbWVtY2cgaXMgcmFyZSwgc28gZG8gdGhlIHJlZGlyZWN0aW9uIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0XHRcdFx0ICAgYm9vbCAqcmN1X2xvY2tlZClcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqXG4mIzQzO2dldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxuIHtcbi1cdC8qIFJlYmluZGluZyBjYW4gY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUgKi9cbi1cdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGYXN0IHBhdGg6IHRoZSBjYWxsZXIgaG9sZHMgYSByZWZlcmVuY2UgdG8gQG1lbWNnLCBzbyByZWFkaW5nXG4mIzQzO1x0ICogaXRzIENTU19EWUlORyBmbGFnIHdpdGhvdXQgdGhlIFJDVSBsb2NrIGlzIHNhZmUuICBUaGUgUkNVIGxvY2tcbiYjNDM7XHQgKiBpcyBvbmx5IG5lZWRlZCB0byB3YWxrIHVwIHRvIGEgbm9uLWR5aW5nIGFuY2VzdG9yLCB3aGljaFxuJiM0MztcdCAqIGhhcHBlbnMgb25seSB3aGlsZSBhIG1lbWNnIGlzIGFjdHVhbGx5IGJlaW5nIG9mZmxpbmVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghbWVtY2dfaXNfZHlpbmcobWVtY2cpKSB7XG4gXHRcdCpyY3VfbG9ja2VkID0gZmFsc2U7XG4gXHRcdHJldHVybiBtZW1jZztcbiBcdH1cbkBAIC04NzUsMTcgJiM0Mzs4ODAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxuIFxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuLSNlbHNlXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHRcdFx0XHQgICBib29sICpyY3VfbG9ja2VkKVxuLXtcbi1cdHJldHVybiBtZW1jZztcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZClcbi17XG4tfVxuLSNlbmRpZlxuIFxuIHN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHQgICAgICBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsIGxvbmcgdmFsKVxuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggN2FjMmI4OGM4MGFlNS4uODQxMmY0ODQwYWUzNSAxMDA2NDRcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vd29ya2luZ3NldC5jXG5AQCAtNjg4LDEwICYjNDM7Njg4LDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4gXG4gXHRcdG1lbV9jZ3JvdXBfZmx1c2hfc3RhdHNfcmF0ZWxpbWl0ZWQoc2MtXHUwMDNlbWVtY2cpO1xuIFx0XHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhzYy1cdTAwM2VtZW1jZywgTk9ERV9EQVRBKHNjLVx1MDAzZW5pZCkpO1xuLVxuIFx0XHRmb3IgKHBhZ2VzID0gMCwgaSA9IDA7IGkgXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSYjNDM7JiM0MzspXG4tXHRcdFx0cGFnZXMgJiM0Mzs9IGxydXZlY19scnVfc2l6ZShscnV2ZWMsIGksIE1BWF9OUl9aT05FUyAtIDEpO1xuLVxuJiM0MztcdFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwobHJ1dmVjLFxuJiM0MztcdFx0XHRcdFx0XHRcdCBOUl9MUlVfQkFTRSAmIzQzOyBpKTtcbiBcdFx0cGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxuIFx0XHRcdGxydXZlYywgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcdFx0cGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y291bnRfc2hhZG93X25vZGVzJiMzNDssCiAgICAmIzM0O21vZF9tZW1jZ19zdGF0ZSYjMzQ7LAogICAgJiMzNDttb2RfbWVtY2dfbHJ1dmVjX3N0YXRlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY3NzX29mZmxpbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBhbmQgcGFnZSBjYWNoZSB3b3JraW5nc2V0IGNhbGN1bGF0aW9uLiBTcGVjaWZpY2FsbHksIGl0IGVuYWJsZXMgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydCgpIHJlZGlyZWN0aW9uIHVuY29uZGl0aW9uYWxseSBhY3Jvc3MgYWxsIGNncm91cCBoaWVyYXJjaGllcyBpbiBtbS9tZW1jb250cm9sLmMgYW5kIG1vZGlmaWVzIGNvdW50X3NoYWRvd19ub2RlcygpIGluIG1tL3dvcmtpbmdzZXQuYyB0byBxdWVyeSBsb2NhbCBscnV2ZWMgcGFnZSBzdGF0ZSByYXRoZXIgdGhhbiB6b25lLWJhc2VkIExSVSBzaXplcy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgdGVhcmRvd24vcmVjbGFpbSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM3NjZiY2EyMjFhNTNjYmFhYTA3NzFmMzdjMGExNDFmODcwZDg2N2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDE5OjAxOjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDg2ZmY1ODBjNzAxODMuLmRmNDNlNjFjOWViYzEgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTg0NSwxNiAmIzQzOzg0NSwyMSBAQCBzdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpCiAJcmV0dXJuIHZhbCAmbHQ7IDAgPyAtcmVzIDogcmVzOwogfQogCi0jaWZkZWYgQ09ORklHX01FTUNHX1YxCiAvKgotICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2Ugd2l0aAotICogcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuCiYjNDM7ICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2UKJiM0MzsgKiB3aXRoIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLiAgT2ZmbGluaW5nIGEKJiM0MzsgKiBtZW1jZyBpcyByYXJlLCBzbyBkbyB0aGUgcmVkaXJlY3Rpb24gZm9yIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJCQkJCSAgIGJvb2wgKnJjdV9sb2NrZWQpCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqCiYjNDM7Z2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKnJjdV9sb2NrZWQpCiB7Ci0JLyogUmViaW5kaW5nIGNhbiBjYXVzZSB0aGlzIHZhbHVlIHRvIGJlIGNoYW5nZWQgYXQgcnVudGltZSAqLwotCWlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7CiYjNDM7CS8qCiYjNDM7CSAqIEZhc3QgcGF0aDogdGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byBAbWVtY2csIHNvIHJlYWRpbmcKJiM0MzsJICogaXRzIENTU19EWUlORyBmbGFnIHdpdGhvdXQgdGhlIFJDVSBsb2NrIGlzIHNhZmUuICBUaGUgUkNVIGxvY2sKJiM0MzsJICogaXMgb25seSBuZWVkZWQgdG8gd2FsayB1cCB0byBhIG5vbi1keWluZyBhbmNlc3Rvciwgd2hpY2gKJiM0MzsJICogaGFwcGVucyBvbmx5IHdoaWxlIGEgbWVtY2cgaXMgYWN0dWFsbHkgYmVpbmcgb2ZmbGluZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIW1lbWNnX2lzX2R5aW5nKG1lbWNnKSkgewogCQkqcmN1X2xvY2tlZCA9IGZhbHNlOwogCQlyZXR1cm4gbWVtY2c7CiAJfQpAQCAtODc1LDE3ICYjNDM7ODgwLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZCkKIAogCXJjdV9yZWFkX3VubG9jaygpOwogfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJCQkJCSAgIGJvb2wgKnJjdV9sb2NrZWQpCi17Ci0JcmV0dXJuIG1lbWNnOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKQotewotfQotI2VuZGlmCiAKIHN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCSAgICAgIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpCmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmMKaW5kZXggN2FjMmI4OGM4MGFlNS4uODQxMmY0ODQwYWUzNSAxMDA2NDQKLS0tIGEvbW0vd29ya2luZ3NldC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3dvcmtpbmdzZXQuYwpAQCAtNjg4LDEwICYjNDM7Njg4LDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsCiAKIAkJbWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZChzYy0mZ3Q7bWVtY2cpOwogCQlscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhzYy0mZ3Q7bWVtY2csIE5PREVfREFUQShzYy0mZ3Q7bmlkKSk7Ci0KIAkJZm9yIChwYWdlcyA9IDAsIGkgPSAwOyBpICZsdDsgTlJfTFJVX0xJU1RTOyBpJiM0MzsmIzQzOykKLQkJCXBhZ2VzICYjNDM7PSBscnV2ZWNfbHJ1X3NpemUobHJ1dmVjLCBpLCBNQVhfTlJfWk9ORVMgLSAxKTsKLQomIzQzOwkJCXBhZ2VzICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChscnV2ZWMsCiYjNDM7CQkJCQkJCSBOUl9MUlVfQkFTRSAmIzQzOyBpKTsKIAkJcGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKAogCQkJbHJ1dmVjLCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiAJCXBhZ2VzICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbCgKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY0NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhpcyBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBhc2tlZCB0byByZXZpZXcgdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGluIGFuZCBkaXNzZWN0IHdoYXQmIzM5O3MgY2hhbmdlZC4gTG9va3MgbGlrZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBtb2RpZmljYXRpb25zIGluIGBtbS9tZW1jb250cm9sLmNgIGFuZCBgbW0vd29ya2luZ3NldC5jYC4gU3BlY2lmaWNhbGx5OgoKRmlyc3QsIGluIGBtbS9tZW1jb250cm9sLmNgLCB0aGVyZSYjMzk7cyBhIHNpZ25pZmljYW50IGNoYW5nZSBhcm91bmQgdGhlIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCBhbmQgYGdldF9ub25fZHlpbmdfbWVtY2dfZW5kYCBmdW5jdGlvbnMuIEFoLCBJIHNlZSwgdGhleSBhcmUgbm8gbG9uZ2VyIGdhdGVkIGJ5IGBDT05GSUdfTUVNQ0dfVjFgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIHRoZSBjb2RlIGlzIGJlaW5nIGdlbmVyYWxpemVkIG9yIHBlcmhhcHMgdGhleSBhcmUgYWx3YXlzIGluIHNjb3BlLCByZWdhcmRsZXNzIG9mIHRoZSBtZW1vcnkgY29udHJvbCB2ZXJzaW9uLiBUaGUgcGF0Y2ggYXBwZWFycyB0byByZXBsYWNlIHRoZSBjaGVjayBmb3Igc3Vic3lzdGVtIGVuYWJsZW1lbnQgd2l0aCBhIGNoZWNrIGZvciBtZW1jZyYjMzk7cyAmIzM0O2R5aW5nJiMzNDsgc3RhdGUgaW5zaWRlIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YC4gVGhpcyBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgbW9yZSBkaXJlY3QuIFRoaXMgYWxzbyBtZWFucyB0aGF0IHRoYXQgZHVtbXkgYCNlbHNlYCBibG9jayBpcyBnb25lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcmVmYWN0b3JpbmcsIGVzcGVjaWFsbHkgdGhlIGltcGFjdCBvbiBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3IgY29ycmVjdG5lc3Mgd2l0aGluIHRoZSBgbWVtY2dgIHN1YnN5c3RlbSYjMzk7cyBjb3JlIGxvZ2ljLgoKTmV4dCwgaW4gYG1tL3dvcmtpbmdzZXQuY2AsIHRoZSBwYXRjaCBzZWVtcyB0byBhbHRlciB0aGUgc2hhZG93IG5vZGUgY291bnRpbmcgbWVjaGFuaXNtIHdpdGhpbiBgY291bnRfc2hhZG93X25vZGVzYC4gSXQgc2VlbXMgdGhhdCB0aGUgcGF0Y2ggcmVwbGFjZXMgdGhlIG9sZCBscnUgc2l6ZSBmdW5jdGlvbnMgd2l0aCB0aGUgcGFnZSBzdGF0ZSBmdW5jdGlvbnMuIFRoaXMgaXMgbW9zdCBsaWtlbHkgYSByZWZhY3RvcmluZyBmb3IgY2xhcml0eSBvciBlZmZpY2llbmN5LiBXZSBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLgoKTXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gem9vbSBvdXQuIEkgbmVlZCB0byBnZXQgYSBmdWxsIHZpZXcgb2YgdGhlIGNvZGUgYXJvdW5kIGJvdGggYG1tL21lbWNvbnRyb2wuY2AgYW5kIGBtbS93b3JraW5nc2V0LmNgIHRvIGZ1bGx5IGdyYXNwIHRoZSByYW1pZmljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkLCBob3cgdGhlIHN1cnJvdW5kaW5nIGRhdGEgc3RydWN0dXJlcyBhcmUgaGFuZGxlZCwgYW5kIGhvdyB0aGVzZSBjaGFuZ2VzIG1pZ2h0IGltcGFjdCB0aGUgb3ZlcmFsbCBzeXN0ZW0mIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg0MDpcdFx0LyogR2V0IHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiAodmFsICogdW5pdCAvIFBBR0VfU0laRSkuICovXG4gODQxOlx0XHRyZXMgPSBtdWx0X2ZyYWMoYWJzKHZhbCksIHVuaXQsIFBBR0VfU0laRSk7XG4gODQyOlx0XHQvKiBSb3VuZCB1cCB6ZXJvIHZhbHVlcy4gKi9cbiA4NDM6XHRcdHJlcyA9IHJlcyA/IDogMTtcbiA4NDQ6XHRcbiA4NDU6XHRcdHJldHVybiB2YWwgXHUwMDNjIDAgPyAtcmVzIDogcmVzO1xuIDg0NjpcdH1cbiA4NDc6XHRcbiA4NDg6XHQvKlxuIDg0OTpcdCAqIFVzZWQgaW4gbW9kX21lbWNnX3N0YXRlKCkgYW5kIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoKSB0byBhdm9pZCByYWNlXG4gODUwOlx0ICogd2l0aCByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy4gIE9mZmxpbmluZyBhXG4gODUxOlx0ICogbWVtY2cgaXMgcmFyZSwgc28gZG8gdGhlIHJlZGlyZWN0aW9uIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLlxuIDg1MjpcdCAqL1xuIDg1MzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKlxuIDg1NDpcdGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxuIDg1NTpcdHtcbiA4NTY6XHRcdC8qXG4gODU3Olx0XHQgKiBGYXN0IHBhdGg6IHRoZSBjYWxsZXIgaG9sZHMgYSByZWZlcmVuY2UgdG8gQG1lbWNnLCBzbyByZWFkaW5nXG4gODU4Olx0XHQgKiBpdHMgQ1NTX0RZSU5HIGZsYWcgd2l0aG91dCB0aGUgUkNVIGxvY2sgaXMgc2FmZS4gIFRoZSBSQ1UgbG9ja1xuIDg1OTpcdFx0ICogaXMgb25seSBuZWVkZWQgdG8gd2FsayB1cCB0byBhIG5vbi1keWluZyBhbmNlc3Rvciwgd2hpY2hcbiA4NjA6XHRcdCAqIGhhcHBlbnMgb25seSB3aGlsZSBhIG1lbWNnIGlzIGFjdHVhbGx5IGJlaW5nIG9mZmxpbmVkLlxuIDg2MTpcdFx0ICovXG4gODYyOlx0XHRpZiAoIW1lbWNnX2lzX2R5aW5nKG1lbWNnKSkge1xuIDg2MzpcdFx0XHQqcmN1X2xvY2tlZCA9IGZhbHNlO1xuIDg2NDpcdFx0XHRyZXR1cm4gbWVtY2c7XG4gODY1Olx0XHR9XG4gODY2Olx0XG4gODY3Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gODY4Olx0XHQqcmN1X2xvY2tlZCA9IHRydWU7XG4gODY5Olx0XG4gODcwOlx0XHR3aGlsZSAobWVtY2dfaXNfZHlpbmcobWVtY2cpKVxuIDg3MTpcdFx0XHRtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcbiA4NzI6XHRcbiA4NzM6XHRcdHJldHVybiBtZW1jZztcbiA4NzQ6XHR9XG4gODc1Olx0XG4gODc2Olx0c3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZClcbiA4Nzc6XHR7XG4gODc4Olx0XHRpZiAoIXJjdV9sb2NrZWQpXG4gODc5Olx0XHRcdHJldHVybjtcbiA4ODA6XHRcbiA4ODE6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDg4MjpcdH1cbiA4ODM6XHRcbiA4ODQ6XHRzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gODg1Olx0XHRcdFx0ICAgICAgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbClcbiA4ODY6XHR7XG4gODg3Olx0XHRpbnQgaSA9IG1lbWNnX3N0YXRzX2luZGV4KGlkeCk7XG4gODg4Olx0XHRpbnQgY3B1O1xuIDg4OTpcdFxuIDg5MDpcdFx0aWYgKFdBUk5fT05DRShCQURfU1RBVF9JRFgoaSksIFwmIzM0OyVzOiBtaXNzaW5nIHN0YXQgaXRlbSAlZFxcblwmIzM0OywgX19mdW5jX18sIGlkeCkpXG4gODkxOlx0XHRcdHJldHVybjtcbiA4OTI6XHRcbiA4OTM6XHRcdGNwdSA9IGdldF9jcHUoKTtcbiA4OTQ6XHRcbiA4OTU6XHRcdHRoaXNfY3B1X2FkZChtZW1jZy1cdTAwM2V2bXN0YXRzX3BlcmNwdS1cdTAwM2VzdGF0ZVtpXSwgdmFsKTtcbiA4OTY6XHRcdHZhbCA9IG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpZHgsIHZhbCk7XG4gODk3Olx0XHRtZW1jZ19yc3RhdF91cGRhdGVkKG1lbWNnLCB2YWwsIGNwdSk7XG4gODk4Olx0XG4gODk5Olx0XHR0cmFjZV9tb2RfbWVtY2dfc3RhdGUobWVtY2csIGlkeCwgdmFsKTtcbiA5MDA6XHRcbiA5MDE6XHRcdHB1dF9jcHUoKTtcbiA5MDI6XHR9XG4gOTAzOlx0XG4gOTA0Olx0LyoqXG4gOTA1Olx0ICogbW9kX21lbWNnX3N0YXRlIC0gdXBkYXRlIGNncm91cCBtZW1vcnkgc3RhdGlzdGljc1xuIDkwNjpcdCAqIEBtZW1jZzogdGhlIG1lbW9yeSBjZ3JvdXBcbiA5MDc6XHQgKiBAaWR4OiB0aGUgc3RhdCBpdGVtIC0gY2FuIGJlIGVudW0gbWVtY2dfc3RhdF9pdGVtIG9yIGVudW0gbm9kZV9zdGF0X2l0ZW1cbiA5MDg6XHQgKiBAdmFsOiBkZWx0YSB0byBhZGQgdG8gdGhlIGNvdW50ZXIsIGNhbiBiZSBuZWdhdGl2ZVxuIDkwOTpcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NjgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgIENhbGwgU2l0ZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O3doZXJlIHRoZSBoZWNrIGlzIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCBhY3R1YWxseSAqdXNlZCogd2l0aGluIGBtbS9tZW1jb250cm9sLmNgPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBJIG5lZWQgdG8ga25vdyB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGFuZCBob3cgdGhlIHZhbHVlIHJldHVybmVkIGlzIHRoZW4gaGFuZGxlZC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgcmVhZCwgYSBjcml0aWNhbCBwYXRoIG9wZXJhdGlvbiwgb3Igc29tZXRoaW5nIGluIGJldHdlZW4/IEtub3dpbmcgdGhhdCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYW5kIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIGJ1ZyBodW50aW5nLiBJ4oCZbGwgc3RhcnQgYnkgdHJhY2luZyB0aGUgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhlIHNwZWNpZmllZCBmaWxlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGZpcnN0LXBhc3MgdW5kZXJzdGFuZGluZyBvZiBpdHMgaW1wb3J0YW5jZSB3aXRoaW4gdGhlIGJyb2FkZXIgbWVtb3J5IGNvbnRyb2wgbWVjaGFuaXNtcy4gVGhpcyBpc27igJl0IGEgZGVlcCBkaXZlIHlldDsgaXQmIzM5O3MgYSBtYXAtbWFraW5nIGV4ZXJjaXNlLiBJIHdpbGwgc3RhcnQgYnkgdXNpbmcgYGdyZXBgLCBgZ2l0IGdyZXBgLCBvciB3aGF0ZXZlciB0b29sIGNvbWVzIHRvIGhhbmQsIGJ1dCBxdWlja2x5IEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgdGhlIGNhbGwgc3RhY2sgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz04NTM9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqXG5tbS9tZW1jb250cm9sLmM6ODU0OmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxubW0vbWVtY29udHJvbC5jLTg1NS17XG4tLVxubW0vbWVtY29udHJvbC5jPTkxMD12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcbi0tXG5tbS9tZW1jb250cm9sLmMtOTE3LVxubW0vbWVtY29udHJvbC5jOjkxODpcdG1lbWNnID0gZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChtZW1jZywgXHUwMDI2cmN1X2xvY2tlZCk7XG5tbS9tZW1jb250cm9sLmMtOTE5LVx0X19tb2RfbWVtY2dfc3RhdGUobWVtY2csIGlkeCwgdmFsKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9OTc2PXN0YXRpYyB2b2lkIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL21lbWNvbnRyb2wuYy05ODUtXHRwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xubW0vbWVtY29udHJvbC5jOjk4NjpcdG1lbWNnID0gZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChwbi1cdTAwM2VtZW1jZywgXHUwMDI2cmN1X2xvY2tlZCk7XG5tbS9tZW1jb250cm9sLmMtOTg3LVx0cG4gPSBtZW1jZy1cdTAwM2Vub2RlaW5mb1twZ2RhdC1cdTAwM2Vub2RlX2lkXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDg3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBTaGFkb3cgTm9kZSBDb3VudGluZyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHNoYWRvdyBub2RlIGNvdW50aW5nIHdvcmtzIGluIHRoZSB3b3JraW5nc2V0IGltcGxlbWVudGF0aW9uLiBUaGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyBgbW0vd29ya2luZ3NldC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgY291bnRfc2hhZG93X25vZGVzYCBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMg4oCTIHdoYXQgZXhhY3RseSBpcyBhICYjMzQ7c2hhZG93IG5vZGUmIzM0OyBpbiB0aGlzIGNvbnRleHQ/IElzIGl0IHJlbGF0ZWQgdG8gcGFnZSBjb2xvcmluZywgVExCIG1pc3Nlcywgc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEkgYmV0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBvdmVyYWxsIHdvcmtpbmdzZXQgYWxnb3JpdGhtLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdOKAmXMgaW1wbGVtZW50ZWQgYW5kIHdoZXJlIHRoaXMgY291bnRlciBpcyB1c2VkIC0gaXMgaXQgZm9yIHBlcmZvcm1hbmNlIG1ldHJpY3MsIGV2aWN0aW9uIHN0cmF0ZWdpZXMsIG9yIHNvbWV0aGluZyBtb3JlIGZ1bmRhbWVudGFsIHRvIHRoZSB3b3JraW5nc2V0IGxvZ2ljPyBLbm93aW5nIHdoZXJlIGFuZCBob3cgdGhpcyBjb3VudGVyIGdldHMgdXBkYXRlZCB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBvdmVyYWxsIGltcGFjdC4gVGltZSB0byBkaXZlIGluIGFuZCBnZXQgYSBmZWVsIGZvciB0aGUgY29udHJvbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vd29ya2luZ3NldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NzA6XHRcdCAqIGluYWN0aXZlIGxpc3QuIEFzc3VtZSB0aGUgdG90YWwgY2FjaGUgc2l6ZSBmb3IgdGhhdC5cbiA2NzE6XHRcdCAqXG4gNjcyOlx0XHQgKiBOb2RlcyBtaWdodCBiZSBzcGFyc2VseSBwb3B1bGF0ZWQsIHdpdGggb25seSBvbmUgc2hhZG93XG4gNjczOlx0XHQgKiBlbnRyeSBpbiB0aGUgZXh0cmVtZSBjYXNlLiBPYnZpb3VzbHksIHdlIGNhbm5vdCBrZWVwIG9uZVxuIDY3NDpcdFx0ICogbm9kZSBmb3IgZXZlcnkgZWxpZ2libGUgc2hhZG93IGVudHJ5LCBzbyBjb21wcm9taXNlIG9uIGFcbiA2NzU6XHRcdCAqIHdvcnN0LWNhc2UgZGVuc2l0eSBvZiAxLzh0aC4gQmVsb3cgdGhhdCwgbm90IGFsbCBlbGlnaWJsZVxuIDY3NjpcdFx0ICogcmVmYXVsdHMgY2FuIGJlIGRldGVjdGVkIGFueW1vcmUuXG4gNjc3Olx0XHQgKlxuIDY3ODpcdFx0ICogT24gNjQtYml0IHdpdGggNyB4YV9ub2RlcyBwZXIgcGFnZSBhbmQgNjQgc2xvdHNcbiA2Nzk6XHRcdCAqIGVhY2gsIHRoaXMgd2lsbCByZWNsYWltIHNoYWRvdyBlbnRyaWVzIHdoZW4gdGhleSBjb25zdW1lXG4gNjgwOlx0XHQgKiB+MS44JSBvZiBhdmFpbGFibGUgbWVtb3J5OlxuIDY4MTpcdFx0ICpcbiA2ODI6XHRcdCAqIFBBR0VfU0laRSAvIHhhX25vZGVzIC8gbm9kZV9lbnRyaWVzICogOCAvIFBBR0VfU0laRVxuIDY4MzpcdFx0ICovXG4gNjg0Olx0I2lmZGVmIENPTkZJR19NRU1DR1xuIDY4NTpcdFx0aWYgKHNjLVx1MDAzZW1lbWNnKSB7XG4gNjg2Olx0XHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbiA2ODc6XHRcdFx0aW50IGk7XG4gNjg4Olx0XG4gNjg5Olx0XHRcdG1lbV9jZ3JvdXBfZmx1c2hfc3RhdHNfcmF0ZWxpbWl0ZWQoc2MtXHUwMDNlbWVtY2cpO1xuIDY5MDpcdFx0XHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhzYy1cdTAwM2VtZW1jZywgTk9ERV9EQVRBKHNjLVx1MDAzZW5pZCkpO1xuIDY5MTpcdFx0XHRmb3IgKHBhZ2VzID0gMCwgaSA9IDA7IGkgXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSYjNDM7JiM0MzspXG4gNjkyOlx0XHRcdFx0cGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYyxcbiA2OTM6XHRcdFx0XHRcdFx0XHRcdCBOUl9MUlVfQkFTRSAmIzQzOyBpKTtcbiA2OTQ6XHRcdFx0cGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxuIDY5NTpcdFx0XHRcdGxydXZlYywgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiA2OTY6XHRcdFx0cGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxuIDY5NzpcdFx0XHRcdGxydXZlYywgTlJfU0xBQl9VTlJFQ0xBSU1BQkxFX0IpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIDY5ODpcdFx0fSBlbHNlXG4gNjk5Olx0I2VuZGlmXG4gNzAwOlx0XHRcdHBhZ2VzID0gbm9kZV9wcmVzZW50X3BhZ2VzKHNjLVx1MDAzZW5pZCk7XG4gNzAxOlx0XG4gNzAyOlx0XHRtYXhfbm9kZXMgPSBwYWdlcyBcdTAwM2VcdTAwM2UgKFhBX0NIVU5LX1NISUZUIC0gMyk7XG4gNzAzOlx0XG4gNzA0Olx0XHRpZiAobm9kZXMgXHUwMDNjPSBtYXhfbm9kZXMpXG4gNzA1Olx0XHRcdHJldHVybiAwO1xuIDcwNjpcdFx0cmV0dXJuIG5vZGVzIC0gbWF4X25vZGVzO1xuIDcwNzpcdH1cbiA3MDg6XHRcbiA3MDk6XHRzdGF0aWMgZW51bSBscnVfc3RhdHVzIHNoYWRvd19scnVfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxuIDcxMDpcdFx0XHRcdFx0XHQgIHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydSxcbiA3MTE6XHRcdFx0XHRcdFx0ICB2b2lkICphcmcpIF9fbXVzdF9ob2xkKGxydS1cdTAwM2Vsb2NrKVxuIDcxMjpcdHtcbiA3MTM6XHRcdHN0cnVjdCB4YV9ub2RlICpub2RlID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCB4YV9ub2RlLCBwcml2YXRlX2xpc3QpO1xuIDcxNDpcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XG4gNzE1Olx0XHRpbnQgcmV0O1xuIDcxNjpcdFxuIDcxNzpcdFx0LypcbiA3MTg6XHRcdCAqIFBhZ2UgY2FjaGUgaW5zZXJ0aW9ucyBhbmQgZGVsZXRpb25zIHN5bmNocm9ub3VzbHkgbWFpbnRhaW5cbiA3MTk6XHRcdCAqIHRoZSBzaGFkb3cgbm9kZSBMUlUgdW5kZXIgdGhlIGlfcGFnZXMgbG9jayBhbmQgdGhlXG4gNzIwOlx0XHQgKiBcdTAwMjZscnUtXHUwMDNlbG9jay4gQmVjYXVzZSB0aGUgcGFnZSBjYWNoZSB0cmVlIGlzIGVtcHRpZWQgYmVmb3JlXG4gNzIxOlx0XHQgKiB0aGUgaW5vZGUgY2FuIGJlIGRlc3Ryb3llZCwgaG9sZGluZyB0aGUgXHUwMDI2bHJ1LVx1MDAzZWxvY2sgcGlucyBhbnlcbiA3MjI6XHRcdCAqIGFkZHJlc3Nfc3BhY2UgdGhhdCBoYXMgbm9kZXMgb24gdGhlIExSVS5cbiA3MjM6XHRcdCAqXG4gNzI0Olx0XHQgKiBXZSBjYW4gdGhlbiBzYWZlbHkgdHJhbnNpdGlvbiB0byB0aGUgaV9wYWdlcyBsb2NrIHRvXG4gNzI1Olx0XHQgKiBwaW4gb25seSB0aGUgYWRkcmVzc19zcGFjZSBvZiB0aGUgcGFydGljdWxhciBub2RlIHdlIHdhbnRcbiA3MjY6XHRcdCAqIHRvIHJlY2xhaW0sIHRha2UgdGhlIG5vZGUgb2ZmLUxSVSwgYW5kIGRyb3AgdGhlIFx1MDAyNmxydS1cdTAwM2Vsb2NrLlxuIDcyNzpcdFx0ICovXG4gNzI4Olx0XG4gNzI5Olx0XHRtYXBwaW5nID0gY29udGFpbmVyX29mKG5vZGUtXHUwMDNlYXJyYXksIHN0cnVjdCBhZGRyZXNzX3NwYWNlLCBpX3BhZ2VzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzYyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQ2FuZGlkYXRlOiBNZW1vcnkgTWFuYWdlbWVudCBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjaGFuZ2VzLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgIGFuZCBgbW0vd29ya2luZ3NldC5jYC4gUmlnaHQgYXdheSwgdGhpcyBzY3JlYW1zIG1lbW9yeSBtYW5hZ2VtZW50IOKAkyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgYW5kIHdvcmtpbmdzZXQgY2FsY3VsYXRpb25zLiBBbmQgY29uc2lkZXJpbmcgdGhpcyBpcyBhbGwgd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGRpcmVjdG9yeSAoYG1tL2ApLCB0aGlzIGNvZGUgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBleGVjdXRlZCBoZWF2aWx5LCBlc3BlY2lhbGx5IGlmIGBDT05GSUdfTUVNQ0dgIGlzIGVuYWJsZWQsIHdoaWNoIGl0IGxpa2VseSBpcyBnaXZlbiB0aGUgZmlsZSBuYW1lLgoKTm93LCBkb2VzIHRoaXMgbWVldCBvdXIgZnV6emluZyBjcml0ZXJpYT8gTGV0JiMzOTtzIHNlZS4uLiB3ZSBoYXZlICYjMzQ7Q29yZSBTdWJzeXN0ZW1zOiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKS4uLiYjMzQ7IERpbmcgZGluZyBkaW5nISBTZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCBXb3J0aEZ1enppbmcgaXMgdHJ1ZSBpbiB0aGlzIGNhc2UuIFdlJiMzOTtyZSBkaXJlY3RseSBkZWFsaW5nIHdpdGggY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4gV2UmIzM5O3JlIG9uIQoKTm93IEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNvbmZpcm0gYENPTkZJR19NRU1DR2AgZm9yIGBtbS9tZW1jb250cm9sLmNgIC0gaXMgdGhpcyBmaWxlIG9ubHkgYnVpbHQgd2hlbiBgTUVNQ0dgIGlzIGVuYWJsZWQ/IEkmIzM5O2xsIHF1aWNrbHkgbG9vayBhdCB0aGUgYG1tL01ha2VmaWxlYCBmb3IgdGhhdCBjb25maXJtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWNvbnRyb2wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cbm1tL01ha2VmaWxlOjI5OktDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLXYxLm8gOj0gblxubW0vTWFrZWZpbGUtMzAtS0NPVl9JTlNUUlVNRU5UX21tem9uZS5vIDo9IG5cbi0tXG5tbS9NYWtlZmlsZT0xMDQ9b2JqLSQoQ09ORklHX0xJVkVVUERBVEVfTUVNRkQpICYjNDM7PSBtZW1mZF9sdW8ub1xubW0vTWFrZWZpbGU6MTA1Om9iai0kKENPTkZJR19NRU1DR19WMSkgJiM0Mzs9IG1lbWNvbnRyb2wtdjEub1xubW0vTWFrZWZpbGU6MTA2Om9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cbm1tL01ha2VmaWxlLTEwNy1pZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm1tL01ha2VmaWxlOjEwODpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBicGZfbWVtY29udHJvbC5vXG5tbS9NYWtlZmlsZS0xMDktZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA4OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gTWVtY2cgYW5kIEtjb25maWcgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBjb2RlYmFzZSwgYW5kIGl0IGxvb2tzIGxpa2UgYENPTkZJR19NRU1DR2AgaXMgYSBoYXJkIHJlcXVpcmVtZW50IGZvciB0aGUgYG1lbWNvbnRyb2wuY2AgZmlsZS4gTm8gc3VycHJpc2VzIHRoZXJlOyB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCBmdW5jdGlvbmFsaXR5LiBUaGVuLCB3aGVuIEkgZ2V0IG92ZXIgdG8gYHdvcmtpbmdzZXQuY2AsIEkgc2VlIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24g4oCTIGAjaWZkZWYgQ09ORklHX01FTUNHYCDigJMgYXJvdW5kIGEgcGFydGljdWxhciBzZWN0aW9uIHdpdGhpbiBgY291bnRfc2hhZG93X25vZGVzYC4gVGhhdCBzdWdnZXN0cyB0aGUgd29ya2luZ3NldCBjb2RlIGhhcyBzb21lIGludGVyYWN0aW9ucyB0aGF0IGFyZSBlaXRoZXIgb24gb3Igb2ZmLCBkZXBlbmRpbmcgb24gd2hldGhlciBtZW1vcnkgY2dyb3VwcyBhcmUgZW5hYmxlZC4gTWFrZXMgc2Vuc2U7IHdvcmtpbmdzZXQgbWFuYWdlbWVudCBjYW4gbGV2ZXJhZ2UgbWVtY2cgc3RhdHMgZm9yIG9wdGltaXphdGlvbiBvciBhZGFwdGF0aW9uLgoKVGltZSB0byBjb25maXJtIHRoaXMgZGVwZW5kZW5jeSwgYW5kIHByb2JhYmx5IGNsYXJpZnkgd2hpY2ggc3BlY2lmaWMgZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgd2l0aCB0aGUgY29uZmlnLiBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCBgaW5pdC9LY29uZmlnYCB0byBwaW5wb2ludCBleGFjdGx5IGhvdyBgTUVNQ0dgIGlzIGRlZmluZWQgYW5kIHdoYXQgb3RoZXIgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBiaWdnZXIgcGljdHVyZS4gVW5kZXJzdGFuZGluZyB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgaGVyZSBpcyBjcnVjaWFsIGZvciBjb21wcmVoZW5kaW5nIHRoZSBjb21wbGV0ZSBhcmNoaXRlY3R1cmUgYW5kIHdoaWNoIHBhcnRzIGFyZSBhY3RpdmUgaW4gYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24uIEkgd2FudCB0byBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVsbCBkZXBlbmRlbmN5IHRyZWUsIGFuZCBJIGtub3cgSSYjMzk7bGwgZmluZCBpdCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDY4PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDc3LVxuaW5pdC9LY29uZmlnOjEwNzg6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA3OS1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA4Ni1cbmluaXQvS2NvbmZpZzoxMDg3OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA4OC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5My1cbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTEwOTUtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDAtXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTAyLVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byBNRU1DRyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIE1FTUNHLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIHRoaW5raW5nIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYXJvdW5kIGxpbmUgMTA3OC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIGFyZSBkZWZpbmVkLCBhbmQgdGhlIEtjb25maWcgZmlsZXMgYXJlIHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgZGVwZW5kZW5jaWVzIGJldHdlZW4gZmVhdHVyZXMgYW5kIG9wdGlvbnMuIEkmIzM5O20gYmV0dGluZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMgZm9yIE1FTUNHIHdpbGwgYmUgbGFpZCBvdXQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNzU6XHRcbjEwNzY6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA3NzpcdFxuMTA3ODpcdGNvbmZpZyBNRU1DR1xuMTA3OTpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTA4MDpcdFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxuMTA4MTpcdFx0c2VsZWN0IEVWRU5URkRcbjEwODI6XHRcdHNlbGVjdCBTTEFCX09CSl9FWFRcbjEwODM6XHRcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xuMTA4NDpcdFx0aGVscFxuMTA4NTpcdFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXG4xMDg2Olx0XG4xMDg3Olx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbjEwODg6XHRcdGJvb2xcbjEwODk6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTA6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTE6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4xMDkyOlx0XHRkZWZhdWx0IHlcbjEwOTM6XHRcbjEwOTQ6XHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbjEwOTU6XHRcdGJvb2xcbjEwOTY6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTc6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTg6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjEwOTk6XHRcdGRlZmF1bHQgeVxuMTEwMDpcdFxuMTEwMTpcdGNvbmZpZyBNRU1DR19WMVxuMTEwMjpcdFx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMTAzOlx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMTA0Olx0XHRkZWZhdWx0IG5cbjExMDU6XHRcdGhlbHBcbjExMDY6XHRcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XG4xMTA3Olx0XHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXG4xMTA4Olx0XHQgIHdoaWNoIGhhdmVuJiMzOTt0IG1pZ3JhdGVkIHRvIHRoZSBuZXcgY2dyb3VwIHYyIGludGVyZmFjZSB5ZXQuIElmIHlvdVxuMTEwOTpcdFx0ICBkbyBub3QgaGF2ZSBhbnkgc3VjaCBhcHBsaWNhdGlvbiB0aGVuIHlvdSBhcmUgY29tcGxldGVseSBmaW5lIGxlYXZpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM1MAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgQ09ORklHX01FTUNHYC4gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBjb25maXJtIGlzIGl0cyBkZXBlbmRlbmN5IG9uIGBDT05GSUdfQ0dST1VQU2AuIEkga25vdyB0aGF0JiMzOTtzIGEgY29tbW9uIHJlbGF0aW9uc2hpcCwgYnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIExldCBtZSBnbyBiYWNrIHRvIHRoZSBzb3VyY2UgY29kZSB0byBjb25maXJtIHRoZSBidWlsZCBpbnN0cnVjdGlvbnMuIEkgc2hvdWxkIGJlIGFibGUgdG8gdHJhY2sgZG93biB0aGUgZGVwZW5kZW5jeSBwcmV0dHkgcXVpY2tseSBieSBjaGVja2luZyBmb3IgYW4gZW5jbG9zaW5nIGBpZiBDR1JPVVBTYCBibG9jayBvciBwZXJoYXBzIGEgYG1lbnVjb25maWcgQ0dST1VQU2AgbGluZSBpbiB0aGUgS2NvbmZpZyBmaWxlcy4gVGhpcyBpcyBzdHJhaWdodGZvcndhcmQgYnV0IGltcG9ydGFudCB0byB2ZXJpZnkgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgaW4gbXkgYW5hbHlzaXMuIEkgaGF2ZSB0byBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGRlcGVuZGVuY2llcyBhcmUgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBDR1JPVVBTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDQ2PWNvbmZpZyBTTEFCX09CSl9FWFRcbi0tXG5pbml0L0tjb25maWctMTA0OC1cbmluaXQvS2NvbmZpZzoxMDQ5Om1lbnVjb25maWcgQ0dST1VQU1xuaW5pdC9LY29uZmlnLTEwNTAtXHRib29sIFwmIzM0O0NvbnRyb2wgR3JvdXAgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjU0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgQ29udHJvbCBHcm91cCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBDT05GSUdfTUVNQ0dgLCBhbmQgcG90ZW50aWFsbHkgYENPTkZJR19NRU1DR19WMWAgYXMgd2VsbC4gVGhlIGNvZGUgc2VlbXMgdG8gYmUgd29ya2luZyB3aXRoIGJvdGggdmVyc2lvbnMgbm93LCBzbyB0aGF0JiMzOTtzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLiBGaXJzdCwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50IGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgYWx3YXlzIGJlc3QgdG8gaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUuCgpOZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGBGb2N1c1N5bWJvbHNgLiBUaGF0JiMzOTtzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLgoKTm93LCB0aGUgbWFpbiBmb2N1cyBpcyBvbiBpZGVudGlmeWluZyBleGFjdGx5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgbW9kaWZpZWQgb3IgZGlyZWN0bHkgYWZmZWN0ZWQgYnkgdGhpcyBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIGFoLCBoZXJlJiMzOTtzIG9uZTogYG1tL3dvcmtpbmdzZXQuY2AuIFNwZWNpZmljYWxseSwgYGNvdW50X3NoYWRvd19ub2Rlc2AuIFRoYXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGxpbWl0ZWQgaW4gaXRzIHNjb3BlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBjb3VudF9zaGFkb3dfbm9kZXNgIHRvIGZ1bGx5IGFzc2VzcyB0aGUgaW1wbGljYXRpb25zLCBhbmQgYWxzbyBhbnkgc2hyaW5rZXJzIHRvIHNlZSBob3cgaXQgbWlnaHQgdGllIGludG8gbWVtb3J5IHJlY2xhaW0uIEkgYWxzbyBoYXZlIHRvIHNlZSB3aGVyZSBpdCYjMzk7cyAqdXNlZCosIHdoaWNoIHNob3VsZCBnaXZlIGEgY2xlYXJlciB2aWV3IG9mIGl0cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3VudF9zaGFkb3dfbm9kZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vd29ya2luZ3NldC5jPTYyND12b2lkIHdvcmtpbmdzZXRfdXBkYXRlX25vZGUoc3RydWN0IHhhX25vZGUgKm5vZGUpXG4tLVxubW0vd29ya2luZ3NldC5jLTY1MC1cbm1tL3dvcmtpbmdzZXQuYzo2NTE6c3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG5tbS93b3JraW5nc2V0LmMtNjUyLVx0XHRcdFx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3dvcmtpbmdzZXQuYz03OTI9c3RhdGljIGludCBfX2luaXQgd29ya2luZ3NldF9pbml0KHZvaWQpXG4tLVxubW0vd29ya2luZ3NldC5jLTgyOC1cbm1tL3dvcmtpbmdzZXQuYzo4Mjk6XHR3b3JraW5nc2V0X3NoYWRvd19zaHJpbmtlci1cdTAwM2Vjb3VudF9vYmplY3RzID0gY291bnRfc2hhZG93X25vZGVzO1xubW0vd29ya2luZ3NldC5jLTgzMC1cdHdvcmtpbmdzZXRfc2hhZG93X3Nocmlua2VyLVx1MDAzZXNjYW5fb2JqZWN0cyA9IHNjYW5fc2hhZG93X25vZGVzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI1MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBjb3VudF9zaGFkb3dfbm9kZXNgIFNocmlua2VyIENhbGxiYWNrKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgY291bnRfc2hhZG93X25vZGVzYCwgYW5kIGl0JiMzOTtzIGFjdGluZyBhcyBhIHNocmlua2VyIGNhbGxiYWNrLCBzcGVjaWZpY2FsbHkgYHdvcmtpbmdzZXRfc2hhZG93X3Nocmlua2VyLSZndDtjb3VudF9vYmplY3RzYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBtZW1vcnkgY29udHJvbCBtZWNoYW5pc20sIHNvIEkmIzM5O20gaGVhZGluZyBvdmVyIHRvIGBtbS9tZW1jb250cm9sLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBvcGVyYXRpbmcgd2l0aGluIHRoZSBjb250ZXh0IG9mIG1lbW9yeSBjZ3JvdXBzLgoKQSBxdWljayBsb29rIHJldmVhbHMgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgLCB3aGljaCBpcyBkZWZpbmVkIGFzIGBzdGF0aWMgaW5saW5lYC4gVGhpcyBpcyBrZXk7IGl0IG1lYW5zIGl0JiMzOTtzIGxpa2VseSBvcHRpbWl6ZWQgZm9yIHBlcmZvcm1hbmNlLCBidXQgYWxzbyBwb3RlbnRpYWxseSBtYWtlcyBkaXJlY3QgY2FsbCBhbmFseXNpcyBhIGJpdCBtb3JlIGxpbWl0ZWQuIE5vdywgbGV0JiMzOTtzIHNlZSB3aGVyZSB0aGF0IGlubGluZSBmdW5jdGlvbiBpcyAqYWN0dWFsbHkqIHVzZWQgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBJJiMzOTttIGZpbmRpbmcgaXQmIzM5O3MgY2FsbGVkIHdpdGhpbiBgbW9kX21lbWNnX3N0YXRlYCBhbmQgYWxzbyBgbW9kX21lbWNnX2xydXZlY19zdGF0ZWAuIE15IG5leHQgcXVlc3Rpb24gaXMsIGlzIGBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlYCBzdGF0aWMsIHRvbz8gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIHZpc2liaWxpdHkgb2YgdGhpcyBvbmUuIFRoYXQmIzM5O3MgdGhlIG5leHQgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZF9tZW1jZ19scnV2ZWNfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTU1MD11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTczLSNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYzo1NzQ6c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcbm1tL21lbWNvbnRyb2wuYy01NzUtXHRcdFx0XHQgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTU3Nz12b2lkIHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTU5MC1cbm1tL21lbWNvbnRyb2wuYzo1OTE6XHRcdF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShjaGlsZF9wbiwgaWR4LCAtdmFsdWUpO1xubW0vbWVtY29udHJvbC5jOjU5MjpcdFx0X19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHBhcmVudF9wbiwgaWR4LCB2YWx1ZSk7XG5tbS9tZW1jb250cm9sLmMtNTkzLVx0fVxuLS1cbm1tL21lbWNvbnRyb2wuYz04MzI9c3RhdGljIGxvbmcgbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGludCBpZHgsIGxvbmcgdmFsKVxuLS1cbm1tL21lbWNvbnRyb2wuYy04NDgtLypcbm1tL21lbWNvbnRyb2wuYzo4NDk6ICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2Vcbm1tL21lbWNvbnRyb2wuYy04NTAtICogd2l0aCByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy4gIE9mZmxpbmluZyBhXG4tLVxubW0vbWVtY29udHJvbC5jPTk0MT12b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtOTUwLVxubW0vbWVtY29udHJvbC5jOjk1MTpzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxubW0vbWVtY29udHJvbC5jLTk1Mi1cdFx0XHRcdCAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsIGxvbmcgdmFsKVxuLS1cbm1tL21lbWNvbnRyb2wuYy05NzAtXHRtZW1jZ19yc3RhdF91cGRhdGVkKG1lbWNnLCB2YWwsIGNwdSk7XG5tbS9tZW1jb250cm9sLmM6OTcxOlx0dHJhY2VfbW9kX21lbWNnX2xydXZlY19zdGF0ZShtZW1jZywgaWR4LCB2YWwpO1xubW0vbWVtY29udHJvbC5jLTk3Mi1cbi0tXG5tbS9tZW1jb250cm9sLmMtOTc1LVxubW0vbWVtY29udHJvbC5jOjk3NjpzdGF0aWMgdm9pZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbm1tL21lbWNvbnRyb2wuYy05NzctXHRcdFx0XHQgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LFxuLS1cbm1tL21lbWNvbnRyb2wuYy05ODgtXG5tbS9tZW1jb250cm9sLmM6OTg5Olx0X19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHBuLCBpZHgsIHZhbCk7XG5tbS9tZW1jb250cm9sLmMtOTkwLVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xMDA0PXZvaWQgbW9kX2xydXZlY19zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LFxuLS1cbm1tL21lbWNvbnRyb2wuYy0xMDExLVx0aWYgKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG5tbS9tZW1jb250cm9sLmM6MTAxMjpcdFx0bW9kX21lbWNnX2xydXZlY19zdGF0ZShscnV2ZWMsIGlkeCwgdmFsKTtcbm1tL21lbWNvbnRyb2wuYy0xMDEzLX1cbi0tXG5tbS9tZW1jb250cm9sLmM9MjkwND1zdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9zbGFiX25taV9zYWZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjkxMS1cdFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbm1tL21lbWNvbnRyb2wuYzoyOTEyOlx0XHRtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKGxydXZlYywgaWR4LCBucik7XG5tbS9tZW1jb250cm9sLmMtMjkxMy1cdH0gZWxzZSB7XG4tLVxubW0vbWVtY29udHJvbC5jPTI5MjU9c3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfc2xhYl9ubWlfc2FmZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTI5MzEtXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xubW0vbWVtY29udHJvbC5jOjI5MzI6XHRtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKGxydXZlYywgaWR4LCBucik7XG5tbS9tZW1jb250cm9sLmMtMjkzMy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjc5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1jZyBTdGF0ZSBNb2RpZmljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gdGhlIGluaXRpYWwgbG9vaywgYG1tL21lbWNvbnRyb2wuY2AgaXMgdGhlIHByaW1hcnkgYXJlYSBvZiBpbnRlcmVzdC4gSSBzZWUgdGhhdCBgbW9kX21lbWNnX3N0YXRlYCBjYWxscyBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAsIHdoaWNoIGlzIG5vbi1zdGF0aWMuIFRoZW4gYG1vZF9tZW1jZ19scnV2ZWNfc3RhdGVgIChzdGF0aWMpIGFsc28gY2FsbHMgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgLCBhbmQgdGhhdCYjMzk7cyB1c2VkIGJ5IGBtb2RfbHJ1dmVjX3N0YXRlYCBhbmQgYGFjY291bnRfc2xhYl9ubWlfc2FmZWAuIFRoYXQgcGF0dGVybiBzdWdnZXN0cyBzb21lIHVuZGVybHlpbmcgc3RydWN0dXJlIGZvciBnZXR0aW5nIHRoZSBtZW1jZyBzdGFydC4gYHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsYCwgYHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbGAsIGFuZCBgbWVtY2dfb2ZmbGluZV9rbWVtYCBhcmUgaW1tZWRpYXRlbHkgZmxhZ2dlZCBhcyBkZWFsaW5nIHdpdGggbWVtY2cgb2ZmbGluaW5nIGFuZCByZXBhcmVudGluZywgc28gdGhvc2Ugd2FycmFudCBjYXJlZnVsIGF0dGVudGlvbiBsYXRlci4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBrZXkgZnVuY3Rpb25zOiBgbW9kX2xydXZlY19zdGF0ZWAgYW5kIGBtb2RfbWVtY2dfc3RhdGVgLiBBcmUgdGhleSBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgc3Vic3lzdGVtLCBvciBhcmUgdGhleSBicm9hZGx5IHVzZWQ/IFRoZSBmYWN0IHRoYXQgYG1vZF9scnV2ZWNfcGFnZV9zdGF0ZWAgaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBgbW1gIGNvZGUgc2VlbXMgc2lnbmlmaWNhbnQuIEhtbSwgYW5kIHRoZW4gYGNvdW50X3NoYWRvd19ub2Rlc2AgaXMgaW4gYG1tL3dvcmtpbmdzZXQuY2AsIHRoYXQmIzM5O3MgYSBiaXQgdW5leHBlY3RlZC4gSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aG9zZSB0d28gZmlsZXMgdGhhdCBhcmUgcmVsZXZhbnQuCgpSaWdodCwgdGltZSB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbW90aXZhdGlvbiBiZWhpbmQgdGhlIGNoYW5nZS4gSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCBjb250ZXh0IHRvIHNlZSB3aHkgdGhlIHBhdGNoIHRvdWNoZWQgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgIGFuZCBgY291bnRfc2hhZG93X25vZGVzYC4gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBsaW5rIGhlcmUsIGxpbmtpbmcgd2hhdCBpbml0aWFsbHkgbG9va2VkIHRvIGJlIHJlbGF0ZWQgcGFydHMuIFVsdGltYXRlbHksIHRoZSBmb2N1cyBoYXMgdG8gYmUgb24gYHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsYCwgYHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbGAsIGFuZCBgbWVtY2dfb2ZmbGluZV9rbWVtYCwgb3IgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyByZWFsbHkgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlcGFyZW50X21lbWNnXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLXYxLmM9MTg3MD12b2lkIHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE4NzQtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG1lbWNnMV9zdGF0cyk7IGkmIzQzOyYjNDM7KVxubW0vbWVtY29udHJvbC12MS5jOjE4NzU6XHRcdHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQsIG1lbWNnMV9zdGF0c1tpXSk7XG5tbS9tZW1jb250cm9sLXYxLmMtMTg3Ni19XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTE4Nzg9dm9pZCByZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTg4Mi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSYjNDM7JiM0MzspXG5tbS9tZW1jb250cm9sLXYxLmM6MTg4MzpcdFx0cmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQsIGkpO1xubW0vbWVtY29udHJvbC12MS5jLTE4ODQtfVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD02Nj12b2lkIHJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTtcbm1tL21lbWNvbnRyb2wtdjEuaC02Ny1cbm1tL21lbWNvbnRyb2wtdjEuaDo2ODp2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wtdjEuaC02OS1cdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpO1xubW0vbWVtY29udHJvbC12MS5oOjcwOnZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wtdjEuaC03MS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTc0PXN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXG4tLVxubW0vbWVtY29udHJvbC5jLTU3Ni1cbm1tL21lbWNvbnRyb2wuYzo1Nzc6dm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vbWVtY29udHJvbC5jLTU3OC1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KVxuLS1cbm1tL21lbWNvbnRyb2wuYz05MjU9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcbi0tXG5tbS9tZW1jb250cm9sLmMtOTQwLVxubW0vbWVtY29udHJvbC5jOjk0MTp2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wuYy05NDItXHRcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzIxOQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmVjZW50IENoYW5nZXMgdG8gTWVtb3J5IE1hbmFnZW1lbnQgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gcG9pbnRzIG1lIHRvd2FyZHMgc29tZSBpbnRlcmVzdGluZyBtb2RpZmljYXRpb25zIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiBJIHNlZSB0aGF0IHRoZSBgY291bnRfc2hhZG93X25vZGVzYCBmdW5jdGlvbiBpbiBgbW0vd29ya2luZ3NldC5jYCBpcyBiZWluZyBkaXJlY3RseSBhbHRlcmVkLCB3aGljaCBhbHdheXMgcGlxdWVzIG15IGludGVyZXN0IGFzIHNoYWRvdyBub2RlcyBhcmUgcHJldHR5IGZ1bmRhbWVudGFsIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSB3b3JraW5nc2V0IGlzIG1hbmFnZWQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gKndoeSogdGhpcyBjaGFuZ2Ugd2FzIGRlZW1lZCBuZWNlc3NhcnksIGFuZCBob3cgaXQgaW1wYWN0cyBvdmVyYWxsIHBlcmZvcm1hbmNlLgoKVGhlbiwgSSYjMzk7dmUgZ290IGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCBpbiBgbW0vbWVtY29udHJvbC5jYCBiZWluZyBtb2RpZmllZC4gTm90IHN1cnByaXNpbmcgdG8gc2VlIGNoYW5nZXMgaGVyZSwgb2YgY291cnNlLCBnaXZlbiBpdCYjMzk7cyBjYWxsZWQgYnkgYG1vZF9tZW1jZ19zdGF0ZWAgYW5kIGBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlYC4gTW9kaWZpY2F0aW9ucyB0byB0aGVzZSBjYWxscyBjYW4gYmUgYSBsaXR0bGUgdHJpY2t5IGJlY2F1c2Ugb2YgdGhlIHdheSBtZW1vcnkgY29udHJvbCBncm91cHMgYWZmZWN0IHRoaW5ncy4gSSBrbm93IHRoZXNlIGZ1bmN0aW9ucyBkZWFsIHdpdGggc3RhdGVzIG9mIG1lbW9yeSBjb250cm9sIGdyb3Vwcywgc28gaXQgaXMgbGlrZWx5IHRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIGNsb3NlbHkgbGlua2VkIHRvIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBMUlUgbWFuYWdlbWVudCB3aXRoaW4gYSBtZW1vcnkgY29udHJvbCBncm91cC4gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBtb3JlIGRlZXBseSwgYW5kIGhvdyBpdCBpbXBhY3RzIGhvdyB0aGluZ3MgbW92ZSBhcm91bmQuCgpGaW5hbGx5LCB0aGUgbWVudGlvbnMgb2YgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgLCBgcmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbGAsIGFuZCBgcmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsYCBhcmUgcmVhbGx5IGludHJpZ3VpbmcuIE9mZmxpbmluZyBhIG1lbWNnIGFuZCByZXBhcmVudGluZyBzdGF0ZSBpcyBhIHNpZ25pZmljYW50IG9wZXJhdGlvbiwgdHlwaWNhbGx5IGRvbmUgZHVyaW5nIHJlc291cmNlIG1hbmFnZW1lbnQgb3BlcmF0aW9ucywgb3IgZHluYW1pYyBjaGFuZ2VzIHRvIHRoZSBzeXN0ZW0uIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCBmaXJzdC4gSXQgaXMgdGhlIGNhbGwgdGhhdCBiZWdpbnMgdGhlIG9mZmxpbmUgcHJvY2Vzcywgc28gdW5kZXJzdGFuZGluZyB0aGUgbWVjaGFuaXNtcyB0aGF0IHRyaWdnZXIgYW5kIHRoZSBjaGFuZ2VzIHRoYXQgcmVzdWx0IGZyb20gdGhpcyBjYWxsIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBhbGwgb2YgdGhpcy4gV2hhdCBoYXBwZW5zIHdoZW4gYSBjZ3JvdXAgaXMgdGFrZW4gb2ZmbGluZT8gV2hhdCBpbXBsaWNhdGlvbnMgZG9lcyB0aGlzIGhhdmUgZm9yIHBhZ2UgbWlncmF0aW9uLCByZWNsYWltLCBhbmQgb3ZlcmFsbCByZXNvdXJjZSBhbGxvY2F0aW9uPyBMZXQmIzM5O3MgZGl2ZSBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9jc3Nfb2ZmbGluZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NDI5Nz1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MzczLVxubW0vbWVtY29udHJvbC5jOjQzNzQ6c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxubW0vbWVtY29udHJvbC5jLTQzNzUte1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MTg2PXN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTE4OC1cdC5jc3Nfb25saW5lID0gbWVtX2Nncm91cF9jc3Nfb25saW5lLFxubW0vbWVtY29udHJvbC5jOjUxODk6XHQuY3NzX29mZmxpbmUgPSBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lLFxubW0vbWVtY29udHJvbC5jLTUxOTAtXHQuY3NzX3JlbGVhc2VkID0gbWVtX2Nncm91cF9jc3NfcmVsZWFzZWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDQ2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTWVtb3J5IENvbnRyb2wgd2l0aCBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IGNncm91cCYjMzk7cyBDU1MgKENvbnRyb2wgR3JvdXAgU3Vic3lzdGVtKSBoYW5kbGVzIGdvaW5nIG9mZmxpbmUuIE15IGluc3RpbmN0IGlzIHRvIGhlYWQgc3RyYWlnaHQgZm9yIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgbG9naWMgZm9yIG1lbW9yeSBjZ3JvdXAgbWFuYWdlbWVudCwgYW5kLCBieSBleHRlbnNpb24sIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAuIFRoYXQgZnVuY3Rpb24gd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHN0YXRlIHRyYW5zaXRpb25zIGFuZCByZXNvdXJjZSByZWxlYXNlIGFzIGEgbWVtb3J5IGNncm91cCBnb2VzIG9mZmxpbmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyBkdXJpbmcgdGhpcyBvZmZsaW5lIHN0YXRlIGJlY2F1c2UgSSBoYXZlIGFuIGludGVyZXN0IGluIHNvbWUgZWRnZS1jYXNlIGJlaGF2aW9yIHRoYXQgbWlnaHQgYmUgaW1wYWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MzcwOlx0XHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcmVtb3ZlKG1lbWNnKTtcbjQzNzE6XHRcdHJldHVybiAtRU5PTUVNO1xuNDM3MjpcdH1cbjQzNzM6XHRcbjQzNzQ6XHRzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG40Mzc1Olx0e1xuNDM3NjpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2Nzcyhjc3MpO1xuNDM3NzpcdFxuNDM3ODpcdFx0bWVtY2cxX2Nzc19vZmZsaW5lKG1lbWNnKTtcbjQzNzk6XHRcbjQzODA6XHRcdHBhZ2VfY291bnRlcl9zZXRfbWluKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgMCk7XG40MzgxOlx0XHRwYWdlX2NvdW50ZXJfc2V0X2xvdyhcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIDApO1xuNDM4MjpcdFxuNDM4MzpcdFx0enN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKG1lbWNnKTtcbjQzODQ6XHRcbjQzODU6XHRcdG1lbWNnX29mZmxpbmVfa21lbShtZW1jZyk7XG40Mzg2Olx0XHQvKlxuNDM4NzpcdFx0ICogVGhlIHJlcGFyZW50aW5nIG9mIG9iamNnIG11c3QgYmUgYWZ0ZXIgdGhlIHJlcGFyZW50aW5nIG9mXG40Mzg4Olx0XHQgKiB0aGUgbGlzdF9scnUgaW4gbWVtY2dfb2ZmbGluZV9rbWVtKCksIHdoaWNoIGVuc3VyZXMgdGhhdFxuNDM4OTpcdFx0ICogdGhleSB3aWxsIG5vdCBtaXN0YWtlbmx5IGdldCB0aGUgcGFyZW50IGxpc3RfbHJ1LlxuNDM5MDpcdFx0ICovXG40MzkxOlx0XHRtZW1jZ19yZXBhcmVudF9vYmpjZ3MobWVtY2cpO1xuNDM5MjpcdFx0cmVwYXJlbnRfc2hyaW5rZXJfZGVmZXJyZWQobWVtY2cpO1xuNDM5MzpcdFx0d2JfbWVtY2dfb2ZmbGluZShtZW1jZyk7XG40Mzk0Olx0XHRscnVfZ2VuX29mZmxpbmVfbWVtY2cobWVtY2cpO1xuNDM5NTpcdFxuNDM5NjpcdFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcbjQzOTc6XHRcbjQzOTg6XHRcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIDEpO1xuNDM5OTpcdH1cbjQ0MDA6XHRcbjQ0MDE6XHRzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZWxlYXNlZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuNDQwMjpcdHtcbjQ0MDM6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MoY3NzKTtcbjQ0MDQ6XHRcbjQ0MDU6XHRcdGludmFsaWRhdGVfcmVjbGFpbV9pdGVyYXRvcnMobWVtY2cpO1xuNDQwNjpcdFx0bHJ1X2dlbl9yZWxlYXNlX21lbWNnKG1lbWNnKTtcbjQ0MDc6XHR9XG40NDA4Olx0XG40NDA5Olx0c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfZnJlZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkwNQoJCQkJCQkJb3V0cHV0OiAxNjgKCQkJCQkJCXRob3VnaHRzOiA2MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gaWRlbnRpZnkgcHJvbWlzaW5nIGZ1enppbmcgdGFyZ2V0cyB3aXRoaW4gdGhlIGtlcm5lbCwgZm9jdXNpbmcgb24gYXJlYXMgdG91Y2hlZCBieSB0aGlzIHBhdGNoLgoKRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgYWZmZWN0ZWQuIEkgc2VlIGZvdXI6IGBjb3VudF9zaGFkb3dfbm9kZXNgIChpbiBgbW0vd29ya2luZ3NldC5jYCksIGBtb2RfbWVtY2dfc3RhdGVgIGFuZCBgbW9kX21lbWNnX2xydXZlY19zdGF0ZWAgKGJvdGggaW4gYG1tL21lbWNvbnRyb2wuY2ApLCBhbmQgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgIChhbHNvIGluIGBtbS9tZW1jb250cm9sLmNgKS4gSSBuZWVkIHRvIGRldGVybWluZSB0aGVpciBzY29wZSBhbmQgaWYgU3l6a2FsbGVyIGNhbiB0cmFjayB0aGVtLgoKSSBub3RlIHRoYXQgYG1vZF9tZW1jZ19scnV2ZWNfc3RhdGVgIGlzIHN0YXRpYyB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRoZSBzYW1lIGlzIHRydWUgZm9yIGBjb3VudF9zaGFkb3dfbm9kZXNgIGFuZCBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAuIFRoZSBgbW9kX21lbWNnX3N0YXRlYCBzeW1ib2wsIGhvd2V2ZXIsIGlzIG5vdCBzdGF0aWMuIFN5emthbGxlciAqY2FuKiB0cmFjayBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkmIzM5O3JlIGNvbXBpbGVkIHN5bWJvbHMsIHNvIHRoaXMgc2hvdWxkbiYjMzk7dCBiZSBhIHByb2JsZW0uCgpOZXh0LCBJIG5lZWQgdG8gY29uc2lkZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFRoaXMgcGF0Y2ggc2VlbXMgdG8gcmVsYXRlIHRvIG1lbW9yeSBjZ3JvdXBzLiBUaGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGBNRU1DR2AuIEkgaGF2ZSB0byBhc2sgbXlzZWxmIGlmIHRoZXJlIGFyZSBvdGhlciBkZXBlbmRlbmNpZXMsIHBvdGVudGlhbGx5IHNvbWV0aGluZyBsaWtlIGBNRU1DR19WMWAuIFRoZSBwYXRjaCBkZWFscyB3aXRoIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCwgd2hpY2ggc2VlbXMgdG8gYmUgZW5hYmxlZCB1bmNvbmRpdGlvbmFsbHkgbm93LCBzbyB0ZXN0aW5nIHdpdGgganVzdCBgTUVNQ0dgIHNlZW1zIHN1ZmZpY2llbnQsIGFuZCBpdCBtaWdodCBiZSBhIGdvb2QgaWRlYSB0byBpbmNsdWRlIGBNRU1DR19WMWAgYXMgd2VsbC4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSBhbGwgdGhlIGZ1enppbmcgY3JpdGVyaWEuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlc2UgdGFyZ2V0cyBhcmU6CgoqICAgKipSZWFjaGFibGU6KiogVGhlIGBtbS9gIGRpcmVjdG9yeSBpcyBjb3JlIGtlcm5lbCBjb2RlLCBzbyBpdCYjMzk7cyBsaWtlbHkgdG8gYmUgcmVhY2hlZCBvbiBhbWQ2NCBrZXJuZWxzIGluIFFFTVUvR0NFLgoqICAgKipXb3J0aEZ1enppbmc6KiogQWJzb2x1dGVseS4gTWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBhY2NvdW50aW5nIGFyZSBjcml0aWNhbCBhbmQgb2Z0ZW4gaGF2ZSBzdWJ0bGUsIGV4cGxvaXRhYmxlIGJ1Z3MuCiogICAqKkZvY3VzU3ltYm9sczoqKiBDb25maXJtZWQgYXMgdGhlIGZvdXIgcHJldmlvdXNseSBtZW50aW9uZWQuCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYE1FTUNHYC4KCkZpbmFsbHksIGEgcXVpY2sgc2FuaXR5IGNoZWNrIG9mIG15IHJlYXNvbmluZy4gVGhlIHBhdGNoIHRvdWNoZXMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBhY2NvdW50aW5nOiByZW1vdmluZyB0aGUgY29uZGl0aW9uYWwgZm9yIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KClgIGFuZCBgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoKWAgaW1wbGllcyB0aGF0IHRoZSBhbmNlc3RvciB0cmF2ZXJzYWwgb2YgZHlpbmcgbWVtY2dzIGlzIGFwcGxpZWQgZ2VuZXJhbGx5LiBNb2RpZnlpbmcgYGNvdW50X3NoYWRvd19ub2RlcygpYCB0byB1c2UgYGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKClgIGluZGljYXRlcyBjaGFuZ2VzIHRvIGhvdyBwYWdlIHN0YXRlIGlzIGNvbXB1dGVkIGZvciBMUlUgbGlzdHMuIFRoZXNlIGFyZSBjb3JlIGFyZWFzLCByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSByZWNsYWltIGFuZCBzaHJpbmtlciBvcGVyYXRpb25zLCBhbmQgbGlrZWx5IHdpbGwgYmUgdG91Y2hlZC4KCkV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvdW50X3NoYWRvd19ub2RlcyYjMzQ7LAogICAgJiMzNDttb2RfbWVtY2dfc3RhdGUmIzM0OywKICAgICYjMzQ7bW9kX21lbWNnX2xydXZlY19zdGF0ZSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2Nzc19vZmZsaW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgYW5kIHBhZ2UgY2FjaGUgd29ya2luZ3NldCBjYWxjdWxhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBlbmFibGVzIGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKSByZWRpcmVjdGlvbiB1bmNvbmRpdGlvbmFsbHkgYWNyb3NzIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMgaW4gbW0vbWVtY29udHJvbC5jIGFuZCBtb2RpZmllcyBjb3VudF9zaGFkb3dfbm9kZXMoKSBpbiBtbS93b3JraW5nc2V0LmMgdG8gcXVlcnkgbG9jYWwgbHJ1dmVjIHBhZ2Ugc3RhdGUgcmF0aGVyIHRoYW4gem9uZS1iYXNlZCBMUlUgc2l6ZXMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIHRlYXJkb3duL3JlY2xhaW0gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y291bnRfc2hhZG93X25vZGVzJiMzNDssCiAgICAmIzM0O21vZF9tZW1jZ19zdGF0ZSYjMzQ7LAogICAgJiMzNDttb2RfbWVtY2dfbHJ1dmVjX3N0YXRlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY3NzX29mZmxpbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBhbmQgcGFnZSBjYWNoZSB3b3JraW5nc2V0IGNhbGN1bGF0aW9uLiBTcGVjaWZpY2FsbHksIGl0IGVuYWJsZXMgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydCgpIHJlZGlyZWN0aW9uIHVuY29uZGl0aW9uYWxseSBhY3Jvc3MgYWxsIGNncm91cCBoaWVyYXJjaGllcyBpbiBtbS9tZW1jb250cm9sLmMgYW5kIG1vZGlmaWVzIGNvdW50X3NoYWRvd19ub2RlcygpIGluIG1tL3dvcmtpbmdzZXQuYyB0byBxdWVyeSBsb2NhbCBscnV2ZWMgcGFnZSBzdGF0ZSByYXRoZXIgdGhhbiB6b25lLWJhc2VkIExSVSBzaXplcy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgdGVhcmRvd24vcmVjbGFpbSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbWNnIHN0YXRzIGFjY291bnRpbmcgYW5kIHNoYWRvdyBub2RlIGNhbGN1bGF0aW9uIGluIG1tL21lbWNvbnRyb2wuYyBhbmQgbW0vd29ya2luZ3NldC5jLiBTcGVjaWZpY2FsbHksIGl0IGdlbmVyYWxpemVzIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KClgIHRvIGhhbmRsZSBhbGwgY2dyb3VwcyBoaWVyYXJjaGllcyBhbmQgdXNlcyBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoKWAgZm9yIHdvcmtpbmdzZXQgc2hhZG93IG5vZGUgY291bnRpbmcuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQsIG5vciBhcmUgdGhlcmUgYW55IGluZm8tbGVha3MsIHN0cnVjdCBwYWRkaW5nIGV4cG9zdXJlcywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBzeW5jaHJvbml6YXRpb24sIHJlZmVyZW5jZSBjb3VudGluZywgb3IgcG9pbnRlciBpc3N1ZXMgKHN1Y2ggYXMgUkNVIGxvY2tpbmcgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlKSBhcmUgZnVsbHkgY292ZXJlZCBieSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMsIEtBU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM3NjZiY2EyMjFhNTNjYmFhYTA3NzFmMzdjMGExNDFmODcwZDg2N2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDE5OjAxOjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDg2ZmY1ODBjNzAxODMuLmRmNDNlNjFjOWViYzEgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTg0NSwxNiAmIzQzOzg0NSwyMSBAQCBzdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpCiAJcmV0dXJuIHZhbCAmbHQ7IDAgPyAtcmVzIDogcmVzOwogfQogCi0jaWZkZWYgQ09ORklHX01FTUNHX1YxCiAvKgotICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2Ugd2l0aAotICogcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuCiYjNDM7ICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2UKJiM0MzsgKiB3aXRoIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLiAgT2ZmbGluaW5nIGEKJiM0MzsgKiBtZW1jZyBpcyByYXJlLCBzbyBkbyB0aGUgcmVkaXJlY3Rpb24gZm9yIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJCQkJCSAgIGJvb2wgKnJjdV9sb2NrZWQpCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqCiYjNDM7Z2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKnJjdV9sb2NrZWQpCiB7Ci0JLyogUmViaW5kaW5nIGNhbiBjYXVzZSB0aGlzIHZhbHVlIHRvIGJlIGNoYW5nZWQgYXQgcnVudGltZSAqLwotCWlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7CiYjNDM7CS8qCiYjNDM7CSAqIEZhc3QgcGF0aDogdGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byBAbWVtY2csIHNvIHJlYWRpbmcKJiM0MzsJICogaXRzIENTU19EWUlORyBmbGFnIHdpdGhvdXQgdGhlIFJDVSBsb2NrIGlzIHNhZmUuICBUaGUgUkNVIGxvY2sKJiM0MzsJICogaXMgb25seSBuZWVkZWQgdG8gd2FsayB1cCB0byBhIG5vbi1keWluZyBhbmNlc3Rvciwgd2hpY2gKJiM0MzsJICogaGFwcGVucyBvbmx5IHdoaWxlIGEgbWVtY2cgaXMgYWN0dWFsbHkgYmVpbmcgb2ZmbGluZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIW1lbWNnX2lzX2R5aW5nKG1lbWNnKSkgewogCQkqcmN1X2xvY2tlZCA9IGZhbHNlOwogCQlyZXR1cm4gbWVtY2c7CiAJfQpAQCAtODc1LDE3ICYjNDM7ODgwLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZCkKIAogCXJjdV9yZWFkX3VubG9jaygpOwogfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJCQkJCSAgIGJvb2wgKnJjdV9sb2NrZWQpCi17Ci0JcmV0dXJuIG1lbWNnOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKQotewotfQotI2VuZGlmCiAKIHN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCSAgICAgIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpCmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmMKaW5kZXggN2FjMmI4OGM4MGFlNS4uODQxMmY0ODQwYWUzNSAxMDA2NDQKLS0tIGEvbW0vd29ya2luZ3NldC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3dvcmtpbmdzZXQuYwpAQCAtNjg4LDEwICYjNDM7Njg4LDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsCiAKIAkJbWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZChzYy0mZ3Q7bWVtY2cpOwogCQlscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhzYy0mZ3Q7bWVtY2csIE5PREVfREFUQShzYy0mZ3Q7bmlkKSk7Ci0KIAkJZm9yIChwYWdlcyA9IDAsIGkgPSAwOyBpICZsdDsgTlJfTFJVX0xJU1RTOyBpJiM0MzsmIzQzOykKLQkJCXBhZ2VzICYjNDM7PSBscnV2ZWNfbHJ1X3NpemUobHJ1dmVjLCBpLCBNQVhfTlJfWk9ORVMgLSAxKTsKLQomIzQzOwkJCXBhZ2VzICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChscnV2ZWMsCiYjNDM7CQkJCQkJCSBOUl9MUlVfQkFTRSAmIzQzOyBpKTsKIAkJcGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKAogCQkJbHJ1dmVjLCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiAJCXBhZ2VzICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbCgKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLgoKKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBSZWxldmFuY2UqKgoKUmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIGFzc2Vzc2luZyBpZiBLZXJuZWwgTWVtb3J5IFNhbml0aXplciAoS01TQU4pIGlzIHdhcnJhbnRlZCBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzIHRvIGRldGVybWluZSB0aGUgbGlrZWxpaG9vZCBvZiBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4KCkl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIHRvdWNoZXMgYG1tL21lbWNvbnRyb2wuY2AgYW5kIGBtbS93b3JraW5nc2V0LmNgLiBUaG9zZSBhcmUgaW1wb3J0YW50IHBhcnRzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0g4oCTIHRoaW5ncyByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXBzIGFuZCB3b3JraW5nIHNldCB0cmFja2luZywgcmVzcGVjdGl2ZWx5LiBIbW0sIHBvdGVudGlhbGx5IGludGVyZXN0aW5nLgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rLiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBjb250ZXh0IGFyb3VuZCBsaW5lIDg0NSBpbiBgbW0vbWVtY29udHJvbC5jYCBhbmQgbGluZSA2ODggaW4gYG1tL3dvcmtpbmdzZXQuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNydWNpYWwgY29udGV4dCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgb3BlcmF0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1vZGlmaWVkLiBLbm93aW5nICp3aGF0KiBpcyBiZWluZyBjaGFuZ2VkLCBhbmQgKmhvdyosIHdpbGwgYmUga2V5IHRvIHNwb3R0aW5nIGFueSBwb3RlbnRpYWwgbWVtb3J5LXJlbGF0ZWQgdnVsbmVyYWJpbGl0aWVzIHRoYXQgS01TQU4gd291bGQgYmUgZ29vZCBhdCBpZGVudGlmeWluZy4gSSYjMzk7bSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBjaGFuZ2VzIGluIG1lbW9yeSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIG9yIGRhdGEgYWNjZXNzIHBhdHRlcm5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODQwOlx0XHQvKiBHZXQgdGhlIGFic29sdXRlIHZhbHVlIG9mICh2YWwgKiB1bml0IC8gUEFHRV9TSVpFKS4gKi9cbiA4NDE6XHRcdHJlcyA9IG11bHRfZnJhYyhhYnModmFsKSwgdW5pdCwgUEFHRV9TSVpFKTtcbiA4NDI6XHRcdC8qIFJvdW5kIHVwIHplcm8gdmFsdWVzLiAqL1xuIDg0MzpcdFx0cmVzID0gcmVzID8gOiAxO1xuIDg0NDpcdFxuIDg0NTpcdFx0cmV0dXJuIHZhbCBcdTAwM2MgMCA/IC1yZXMgOiByZXM7XG4gODQ2Olx0fVxuIDg0NzpcdFxuIDg0ODpcdC8qXG4gODQ5Olx0ICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2VcbiA4NTA6XHQgKiB3aXRoIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLiAgT2ZmbGluaW5nIGFcbiA4NTE6XHQgKiBtZW1jZyBpcyByYXJlLCBzbyBkbyB0aGUgcmVkaXJlY3Rpb24gZm9yIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMuXG4gODUyOlx0ICovXG4gODUzOlx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqXG4gODU0Olx0Z2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKnJjdV9sb2NrZWQpXG4gODU1Olx0e1xuIDg1NjpcdFx0LypcbiA4NTc6XHRcdCAqIEZhc3QgcGF0aDogdGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byBAbWVtY2csIHNvIHJlYWRpbmdcbiA4NTg6XHRcdCAqIGl0cyBDU1NfRFlJTkcgZmxhZyB3aXRob3V0IHRoZSBSQ1UgbG9jayBpcyBzYWZlLiAgVGhlIFJDVSBsb2NrXG4gODU5Olx0XHQgKiBpcyBvbmx5IG5lZWRlZCB0byB3YWxrIHVwIHRvIGEgbm9uLWR5aW5nIGFuY2VzdG9yLCB3aGljaFxuIDg2MDpcdFx0ICogaGFwcGVucyBvbmx5IHdoaWxlIGEgbWVtY2cgaXMgYWN0dWFsbHkgYmVpbmcgb2ZmbGluZWQuXG4gODYxOlx0XHQgKi9cbiA4NjI6XHRcdGlmICghbWVtY2dfaXNfZHlpbmcobWVtY2cpKSB7XG4gODYzOlx0XHRcdCpyY3VfbG9ja2VkID0gZmFsc2U7XG4gODY0Olx0XHRcdHJldHVybiBtZW1jZztcbiA4NjU6XHRcdH1cbiA4NjY6XHRcbiA4Njc6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiA4Njg6XHRcdCpyY3VfbG9ja2VkID0gdHJ1ZTtcbiA4Njk6XHRcbiA4NzA6XHRcdHdoaWxlIChtZW1jZ19pc19keWluZyhtZW1jZykpXG4gODcxOlx0XHRcdG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xuIDg3MjpcdFxuIDg3MzpcdFx0cmV0dXJuIG1lbWNnO1xuIDg3NDpcdH1cbiA4NzU6XHRcbiA4NzY6XHRzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxuIDg3NzpcdHtcbiA4Nzg6XHRcdGlmICghcmN1X2xvY2tlZClcbiA4Nzk6XHRcdFx0cmV0dXJuO1xuIDg4MDpcdFxuIDg4MTpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gODgyOlx0fVxuIDg4MzpcdFxuIDg4NDpcdHN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiA4ODU6XHRcdFx0XHQgICAgICBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsIGxvbmcgdmFsKVxuIDg4NjpcdHtcbiA4ODc6XHRcdGludCBpID0gbWVtY2dfc3RhdHNfaW5kZXgoaWR4KTtcbiA4ODg6XHRcdGludCBjcHU7XG4gODg5Olx0XG4gODkwOlx0XHRpZiAoV0FSTl9PTkNFKEJBRF9TVEFUX0lEWChpKSwgXCYjMzQ7JXM6IG1pc3Npbmcgc3RhdCBpdGVtICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXywgaWR4KSlcbiA4OTE6XHRcdFx0cmV0dXJuO1xuIDg5MjpcdFxuIDg5MzpcdFx0Y3B1ID0gZ2V0X2NwdSgpO1xuIDg5NDpcdFxuIDg5NTpcdFx0dGhpc19jcHVfYWRkKG1lbWNnLVx1MDAzZXZtc3RhdHNfcGVyY3B1LVx1MDAzZXN0YXRlW2ldLCB2YWwpO1xuIDg5NjpcdFx0dmFsID0gbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGlkeCwgdmFsKTtcbiA4OTc6XHRcdG1lbWNnX3JzdGF0X3VwZGF0ZWQobWVtY2csIHZhbCwgY3B1KTtcbiA4OTg6XHRcbiA4OTk6XHRcdHRyYWNlX21vZF9tZW1jZ19zdGF0ZShtZW1jZywgaWR4LCB2YWwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTY4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFN1YnN5c3RlbSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGlnZ2luZyBkZWVwIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGFuZCBteSBmb2N1cyBpcyBjdXJyZW50bHkgb24gYG1tL3dvcmtpbmdzZXQuY2AuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgaG93IHRoZSB3b3JraW5nIHNldCBtZWNoYW5pc20gaXMgaW1wbGVtZW50ZWQsIGFuZCBJIHJlY2FsbCBzb21lIHNwZWNpZmljIGxvZ2ljIGFyb3VuZCBsaW5lIDY4MCB0aGF0JiMzOTtzIGJlZW4gbmFnZ2luZyBhdCBtZS4gVGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGF0IHNlY3Rpb24sIG1heWJlIHNvbWUgaW5zaWdodHMgd2lsbCBjbGljayBhcyBJIHJlcmVhZCB0aGF0IHBhcnQgb2YgdGhlIGZpbGUuIEkgc3VzcGVjdCB0aGF0IHRoZXJlIGFyZSBjcnVjaWFsIGRldGFpbHMgcmVsYXRlZCB0byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgd29ya2luZyBzZXQgc2l6ZSwgcGFnZSByZXBsYWNlbWVudCwgYW5kIHBlcmhhcHMgdGhlIG51YW5jZXMgb2YgaG93IHRoZSBrZXJuZWwgaWRlbnRpZmllcyBwYWdlcyB0aGF0IGJlbG9uZyBpbiB0aGUgd29ya2luZyBzZXQgdGhlcmUuIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS93b3JraW5nc2V0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY3MDpcdFx0ICogaW5hY3RpdmUgbGlzdC4gQXNzdW1lIHRoZSB0b3RhbCBjYWNoZSBzaXplIGZvciB0aGF0LlxuIDY3MTpcdFx0ICpcbiA2NzI6XHRcdCAqIE5vZGVzIG1pZ2h0IGJlIHNwYXJzZWx5IHBvcHVsYXRlZCwgd2l0aCBvbmx5IG9uZSBzaGFkb3dcbiA2NzM6XHRcdCAqIGVudHJ5IGluIHRoZSBleHRyZW1lIGNhc2UuIE9idmlvdXNseSwgd2UgY2Fubm90IGtlZXAgb25lXG4gNjc0Olx0XHQgKiBub2RlIGZvciBldmVyeSBlbGlnaWJsZSBzaGFkb3cgZW50cnksIHNvIGNvbXByb21pc2Ugb24gYVxuIDY3NTpcdFx0ICogd29yc3QtY2FzZSBkZW5zaXR5IG9mIDEvOHRoLiBCZWxvdyB0aGF0LCBub3QgYWxsIGVsaWdpYmxlXG4gNjc2Olx0XHQgKiByZWZhdWx0cyBjYW4gYmUgZGV0ZWN0ZWQgYW55bW9yZS5cbiA2Nzc6XHRcdCAqXG4gNjc4Olx0XHQgKiBPbiA2NC1iaXQgd2l0aCA3IHhhX25vZGVzIHBlciBwYWdlIGFuZCA2NCBzbG90c1xuIDY3OTpcdFx0ICogZWFjaCwgdGhpcyB3aWxsIHJlY2xhaW0gc2hhZG93IGVudHJpZXMgd2hlbiB0aGV5IGNvbnN1bWVcbiA2ODA6XHRcdCAqIH4xLjglIG9mIGF2YWlsYWJsZSBtZW1vcnk6XG4gNjgxOlx0XHQgKlxuIDY4MjpcdFx0ICogUEFHRV9TSVpFIC8geGFfbm9kZXMgLyBub2RlX2VudHJpZXMgKiA4IC8gUEFHRV9TSVpFXG4gNjgzOlx0XHQgKi9cbiA2ODQ6XHQjaWZkZWYgQ09ORklHX01FTUNHXG4gNjg1Olx0XHRpZiAoc2MtXHUwMDNlbWVtY2cpIHtcbiA2ODY6XHRcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuIDY4NzpcdFx0XHRpbnQgaTtcbiA2ODg6XHRcbiA2ODk6XHRcdFx0bWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZChzYy1cdTAwM2VtZW1jZyk7XG4gNjkwOlx0XHRcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLVx1MDAzZW1lbWNnLCBOT0RFX0RBVEEoc2MtXHUwMDNlbmlkKSk7XG4gNjkxOlx0XHRcdGZvciAocGFnZXMgPSAwLCBpID0gMDsgaSBcdTAwM2MgTlJfTFJVX0xJU1RTOyBpJiM0MzsmIzQzOylcbiA2OTI6XHRcdFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwobHJ1dmVjLFxuIDY5MzpcdFx0XHRcdFx0XHRcdFx0IE5SX0xSVV9CQVNFICYjNDM7IGkpO1xuIDY5NDpcdFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXG4gNjk1Olx0XHRcdFx0bHJ1dmVjLCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIDY5NjpcdFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXG4gNjk3Olx0XHRcdFx0bHJ1dmVjLCBOUl9TTEFCX1VOUkVDTEFJTUFCTEVfQikgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gNjk4Olx0XHR9IGVsc2VcbiA2OTk6XHQjZW5kaWZcbiA3MDA6XHRcdFx0cGFnZXMgPSBub2RlX3ByZXNlbnRfcGFnZXMoc2MtXHUwMDNlbmlkKTtcbiA3MDE6XHRcbiA3MDI6XHRcdG1heF9ub2RlcyA9IHBhZ2VzIFx1MDAzZVx1MDAzZSAoWEFfQ0hVTktfU0hJRlQgLSAzKTtcbiA3MDM6XHRcbiA3MDQ6XHRcdGlmIChub2RlcyBcdTAwM2M9IG1heF9ub2RlcylcbiA3MDU6XHRcdFx0cmV0dXJuIDA7XG4gNzA2Olx0XHRyZXR1cm4gbm9kZXMgLSBtYXhfbm9kZXM7XG4gNzA3Olx0fVxuIDcwODpcdFxuIDcwOTpcdHN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hhZG93X2xydV9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG4gNzEwOlx0XHRcdFx0XHRcdCAgc3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1LFxuIDcxMTpcdFx0XHRcdFx0XHQgIHZvaWQgKmFyZykgX19tdXN0X2hvbGQobHJ1LVx1MDAzZWxvY2spXG4gNzEyOlx0e1xuIDcxMzpcdFx0c3RydWN0IHhhX25vZGUgKm5vZGUgPSBjb250YWluZXJfb2YoaXRlbSwgc3RydWN0IHhhX25vZGUsIHByaXZhdGVfbGlzdCk7XG4gNzE0Olx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE2NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCBVc2FnZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRoaXMgc3VnZ2VzdHMgYSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgY29udHJvbCBzeXN0ZW0gaGFuZGxlcyB0aGUgc3RhcnQgb2YgYSBub24tZHlpbmcgbWVtb3J5IGNncm91cCwgYW5kIG1vcmUgc3BlY2lmaWNhbGx5LCB3aGF0IHRoZSBjYWxsZXIgaXMgZG9pbmcgd2l0aCB0aGUgcmVzdWx0LiBJIGV4cGVjdCB0byBzZWUgdGhpcyBmdW5jdGlvbiBiZWluZyB1c2VkIGluIGNyaXRpY2FsIHBhdGggbWVtb3J5IGFsbG9jYXRpb24gb3IgdHJhY2tpbmcsIGxpa2VseSBhcm91bmQgcmVjbGFpbSBvciByZXNvdXJjZSBhY2NvdW50aW5nIGR1cmluZyBjZ3JvdXAgbGlmZWN5Y2xlIGV2ZW50cy4gVGhlIGZvY3VzIGlzIGRlZmluaXRlbHkgb24gaWRlbnRpZnlpbmcgdGhlIGNyaXRpY2FsIGNhbGxzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbnRleHQgb2YgZWFjaCBjYWxsLCBsb29raW5nIGZvciBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybiByZWdhcmRpbmcgbWVtb3J5IG1hbmFnZW1lbnQgc3luY2hyb25pemF0aW9uIG9yIHJhY2UgY29uZGl0aW9ucywgZ2l2ZW4gdGhlICYjMzQ7bm9uLWR5aW5nJiMzNDsgbmF0dXJlIGltcGxpZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBzdXJwcmlzaW5nIHVzZXMsIG9yIGFueSB1c2FnZSBwYXR0ZXJucyB0aGF0IEkgaGFkbiYjMzk7dCBjb25zaWRlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfbm9uX2R5aW5nX21lbWNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz04NTM9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqXG5tbS9tZW1jb250cm9sLmM6ODU0OmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxubW0vbWVtY29udHJvbC5jLTg1NS17XG4tLVxubW0vbWVtY29udHJvbC5jLTg3NS1cbm1tL21lbWNvbnRyb2wuYzo4NzY6c3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZClcbm1tL21lbWNvbnRyb2wuYy04Nzcte1xuLS1cbm1tL21lbWNvbnRyb2wuYz05MTA9dm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXG4tLVxubW0vbWVtY29udHJvbC5jLTkxNy1cbm1tL21lbWNvbnRyb2wuYzo5MTg6XHRtZW1jZyA9IGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQobWVtY2csIFx1MDAyNnJjdV9sb2NrZWQpO1xubW0vbWVtY29udHJvbC5jLTkxOS1cdF9fbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIHZhbCk7XG5tbS9tZW1jb250cm9sLmM6OTIwOlx0Z2V0X25vbl9keWluZ19tZW1jZ19lbmQocmN1X2xvY2tlZCk7XG5tbS9tZW1jb250cm9sLmMtOTIxLX1cbi0tXG5tbS9tZW1jb250cm9sLmM9OTc2PXN0YXRpYyB2b2lkIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL21lbWNvbnRyb2wuYy05ODUtXHRwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xubW0vbWVtY29udHJvbC5jOjk4NjpcdG1lbWNnID0gZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChwbi1cdTAwM2VtZW1jZywgXHUwMDI2cmN1X2xvY2tlZCk7XG5tbS9tZW1jb250cm9sLmMtOTg3LVx0cG4gPSBtZW1jZy1cdTAwM2Vub2RlaW5mb1twZ2RhdC1cdTAwM2Vub2RlX2lkXTtcbi0tXG5tbS9tZW1jb250cm9sLmMtOTkwLVxubW0vbWVtY29udHJvbC5jOjk5MTpcdGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKHJjdV9sb2NrZWQpO1xubW0vbWVtY29udHJvbC5jLTk5Mi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NDYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IE1lbW9yeSBDb250cm9sIGFuZCBXb3JraW5nIFNldCBVcGRhdGVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIHBhdGNoIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBmb2N1c2VzIG9uIHRoZSBrZXkgY2hhbmdlcyBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucywgc3BlY2lmaWNhbGx5IGZyb20gYSBtZW1vcnkgbWFuYWdlbWVudCBwZXJzcGVjdGl2ZS4KCkZpcnN0LCBpbiBgbW0vbWVtY29udHJvbC5jYCwgdGhleSYjMzk7dmUgc3RyZWFtbGluZWQgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgLiBQcmV2aW91c2x5LCB0aGUgY29kZSBoYWQgYSBjb25kaXRpb25hbCBzdHJ1Y3R1cmUgYmFzZWQgb24gYENPTkZJR19NRU1DR19WMWAuIE5vdywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0JiMzOTtzIHYxIG9yIHYyIGNncm91cHMsIHRoZSBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIGBtZW1jZ2AgaXMgZHlpbmcgdXNpbmcgYG1lbWNnX2lzX2R5aW5nKClgLiBJZiBpdCAqaXMqIGR5aW5nLCBpdCB0cmF2ZXJzZXMgdXAgdGhlIGFuY2VzdG9yIGNoYWluIHVuZGVyIGFuIFJDVSByZWFkIGxvY2suIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhlIGByY3VfbG9ja2VkYCBmbGFnOyBpdCYjMzk7cyBzZXQgdG8gYGZhbHNlYCBpZiB0aGUgYG1lbWNnYCBpc24mIzM5O3QgZHlpbmcsIGFuZCBgdHJ1ZWAgb3RoZXJ3aXNlLiBgZ2V0X25vbl9keWluZ19tZW1jZ19lbmRgIHRoZW4gaGFuZGxlcyB0aGUgUkNVIHVubG9jayBiYXNlZCBvbiB0aGlzIGZsYWcuIFRoaXMgaXMgYSBjbGVhciBzaW1wbGlmaWNhdGlvbiBvZiB0aGUgbG9naWMuIFRoZSByZW1vdmFsIG9mIHRoZSBgY2dyb3VwX3N1YnN5c19vbl9kZmxgIGNoZWNrIGFuZCBgQ09ORklHX01FTUNHX1YxYCBndWFyZHMgc3VnZ2VzdHMgYSBtb3JlIHVuaWZpZWQgYXBwcm9hY2ggYWNyb3NzIGNncm91cCB2ZXJzaW9ucywgd2hpY2ggaXMgYSBnb29kIGRpcmVjdGlvbi4KCk5leHQsIGluIGBtbS93b3JraW5nc2V0LmNgLCB0aGVyZSYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBvcHRpbWl6YXRpb24gaW4gYGNvdW50X3NoYWRvd19ub2RlcygpYC4gVGhlIG9yaWdpbmFsIGNvZGUgaXRlcmF0ZWQgdGhyb3VnaCB6b25lIExSVSBzaXplcy4gTm93LCBpdCB1c2VzIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbCgpYC4gVGhpcyBpcyBhIGNsYXNzaWMgbW92ZSwgbGV2ZXJhZ2luZyBwZXItQ1BVIG9yIHBlci1ub2RlIGxvY2FsIHN0YXRpc3RpY3MsIHRvIGF2b2lkIGl0ZXJhdGluZyB0aHJvdWdoIHpvbmVzIGFuZCBzdW1taW5nIHVwIHBhZ2UgY291bnRzLiBNdWNoIG1vcmUgZWZmaWNpZW50IGFuZCBhIGNsZWFuZXIgYXBwcm9hY2guCgpOb3csIGFzIGFsd2F5cywgSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBJIHNlZSBhIGBib29sIHJjdV9sb2NrZWRgIGludHJvZHVjZWQgaW4gYG1vZF9tZW1jZ19zdGF0ZWAgYW5kIGBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlYC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhvc2UgZnVuY3Rpb25zLiBUaGV5IHNob3VsZCBiZSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCB0byBjaGVjayBmb3IgYW55IHVzZSBvZiBgcmN1X2xvY2tlZGAgYmVmb3JlIGl0JiMzOTtzIHNldC4gR290dGEgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHN1YnRsZSBpbml0aWFsaXphdGlvbiBpc3N1ZXMgbHVya2luZy4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTEwOlx0dm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXG4gOTExOlx0XHRcdCAgICAgICBpbnQgdmFsKVxuIDkxMjpcdHtcbiA5MTM6XHRcdGJvb2wgcmN1X2xvY2tlZCA9IGZhbHNlO1xuIDkxNDpcdFxuIDkxNTpcdFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiA5MTY6XHRcdFx0cmV0dXJuO1xuIDkxNzpcdFxuIDkxODpcdFx0bWVtY2cgPSBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KG1lbWNnLCBcdTAwMjZyY3VfbG9ja2VkKTtcbiA5MTk6XHRcdF9fbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIHZhbCk7XG4gOTIwOlx0XHRnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChyY3VfbG9ja2VkKTtcbiA5MjE6XHR9XG4gOTIyOlx0XG4gOTIzOlx0I2lmZGVmIENPTkZJR19NRU1DR19WMVxuIDkyNDpcdC8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbS4gKi9cbiA5MjU6XHR1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxuIDkyNjpcdHtcbiA5Mjc6XHRcdGxvbmcgeDtcbiA5Mjg6XHRcdGludCBpID0gbWVtY2dfc3RhdHNfaW5kZXgoaWR4KTtcbiA5Mjk6XHRcbiA5MzA6XHRcdGlmIChXQVJOX09OQ0UoQkFEX1NUQVRfSURYKGkpLCBcJiMzNDslczogbWlzc2luZyBzdGF0IGl0ZW0gJWRcXG5cJiMzNDssIF9fZnVuY19fLCBpZHgpKVxuIDkzMTpcdFx0XHRyZXR1cm4gMDtcbiA5MzI6XHRcbiA5MzM6XHRcdHggPSBSRUFEX09OQ0UobWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpXSk7XG4gOTM0Olx0I2lmZGVmIENPTkZJR19TTVBcbiA5MzU6XHRcdGlmICh4IFx1MDAzYyAwKVxuIDkzNjpcdFx0XHR4ID0gMDtcbiA5Mzc6XHQjZW5kaWZcbiA5Mzg6XHRcdHJldHVybiB4O1xuIDkzOTpcdH1cbiA5NDA6XHRcbiA5NDE6XHR2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiA5NDI6XHRcdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpXG4gOTQzOlx0e1xuIDk0NDpcdFx0dW5zaWduZWQgbG9uZyB2YWx1ZSA9IG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwobWVtY2csIGlkeCk7XG4gOTQ1Olx0XG4gOTQ2Olx0XHRfX21vZF9tZW1jZ19zdGF0ZShtZW1jZywgaWR4LCAtdmFsdWUpO1xuIDk0NzpcdFx0X19tb2RfbWVtY2dfc3RhdGUocGFyZW50LCBpZHgsIHZhbHVlKTtcbiA5NDg6XHR9XG4gOTQ5Olx0I2VuZGlmXG4gOTUwOlx0XG4gOTUxOlx0c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcbiA5NTI6XHRcdFx0XHRcdCAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsIGxvbmcgdmFsKVxuIDk1MzpcdHtcbiA5NTQ6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IHBuLVx1MDAzZW1lbWNnO1xuIDk1NTpcdFx0aW50IGkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpO1xuIDk1NjpcdFx0aW50IGNwdTtcbiA5NTc6XHRcbiA5NTg6XHRcdGlmIChXQVJOX09OQ0UoQkFEX1NUQVRfSURYKGkpLCBcJiMzNDslczogbWlzc2luZyBzdGF0IGl0ZW0gJWRcXG5cJiMzNDssIF9fZnVuY19fLCBpZHgpKVxuIDk1OTpcdFx0XHRyZXR1cm47XG4gOTYwOlx0XG4gOTYxOlx0XHRjcHUgPSBnZXRfY3B1KCk7XG4gOTYyOlx0XG4gOTYzOlx0XHQvKiBVcGRhdGUgbWVtY2cgKi9cbiA5NjQ6XHRcdHRoaXNfY3B1X2FkZChtZW1jZy1cdTAwM2V2bXN0YXRzX3BlcmNwdS1cdTAwM2VzdGF0ZVtpXSwgdmFsKTtcbiA5NjU6XHRcbiA5NjY6XHRcdC8qIFVwZGF0ZSBscnV2ZWMgKi9cbiA5Njc6XHRcdHRoaXNfY3B1X2FkZChwbi1cdTAwM2VscnV2ZWNfc3RhdHNfcGVyY3B1LVx1MDAzZXN0YXRlW2ldLCB2YWwpO1xuIDk2ODpcdFxuIDk2OTpcdFx0dmFsID0gbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGlkeCwgdmFsKTtcbiA5NzA6XHRcdG1lbWNnX3JzdGF0X3VwZGF0ZWQobWVtY2csIHZhbCwgY3B1KTtcbiA5NzE6XHRcdHRyYWNlX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUobWVtY2csIGlkeCwgdmFsKTtcbiA5NzI6XHRcbiA5NzM6XHRcdHB1dF9jcHUoKTtcbiA5NzQ6XHR9XG4gOTc1Olx0XG4gOTc2Olx0c3RhdGljIHZvaWQgbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gOTc3Olx0XHRcdFx0XHQgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LFxuIDk3ODpcdFx0XHRcdFx0ICAgICBpbnQgdmFsKVxuIDk3OTpcdHtcbiA5ODA6XHRcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbiA5ODE6XHRcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbjtcbiA5ODI6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiA5ODM6XHRcdGJvb2wgcmN1X2xvY2tlZCA9IGZhbHNlO1xuIDk4NDpcdFxuIDk4NTpcdFx0cG4gPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbiA5ODY6XHRcdG1lbWNnID0gZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChwbi1cdTAwM2VtZW1jZywgXHUwMDI2cmN1X2xvY2tlZCk7XG4gOTg3Olx0XHRwbiA9IG1lbWNnLVx1MDAzZW5vZGVpbmZvW3BnZGF0LVx1MDAzZW5vZGVfaWRdO1xuIDk4ODpcdFxuIDk4OTpcdFx0X19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHBuLCBpZHgsIHZhbCk7XG4gOTkwOlx0XG4gOTkxOlx0XHRnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChyY3VfbG9ja2VkKTtcbiA5OTI6XHR9XG4gOTkzOlx0XG4gOTk0Olx0LyoqXG4gOTk1Olx0ICogbW9kX2xydXZlY19zdGF0ZSAtIHVwZGF0ZSBscnV2ZWMgbWVtb3J5IHN0YXRpc3RpY3NcbiA5OTY6XHQgKiBAbHJ1dmVjOiB0aGUgbHJ1dmVjXG4gOTk3Olx0ICogQGlkeDogdGhlIHN0YXQgaXRlbVxuIDk5ODpcdCAqIEB2YWw6IGRlbHRhIHRvIGFkZCB0byB0aGUgY291bnRlciwgY2FuIGJlIG5lZ2F0aXZlXG4gOTk5Olx0ICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM5OAoJCQkJCQkJb3V0cHV0OiAxNzgKCQkJCQkJCXRob3VnaHRzOiA1NDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gQ29uY2VybnMgSGVyZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBBbmFseXppbmcgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgLCB0aGUgYHJjdV9sb2NrZWRgIHZhcmlhYmxlIGlzIGV4cGxpY2l0bHkgaGFuZGxlZCDigJMgaXQmIzM5O3MgYWx3YXlzIGVpdGhlciBzZXQgdG8gYGZhbHNlYCBvciBgdHJ1ZWAgYW5kIHdhcyBpbml0aWFsaXplZCB0byBgZmFsc2VgIGluIGJvdGggY2FsbGVyIGxvY2F0aW9ucy4gVGhlIGBwYWdlc2AgdmFyaWFibGUgaW4gYG1tL3dvcmtpbmdzZXQuY2AgaXMgYWxzbyBpbml0aWFsaXplZCB3aXRoIGEgY2xlYW4gbG9vcC4gVGhlcmUmIzM5O3Mgbm8gaW50cm9kdWN0aW9uIG9mIG5ldyBidWZmZXJzLCBubyBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vIHBvdGVudGlhbCBwYWRkaW5nIGlzc3VlcywgYW5kIGRlZmluaXRlbHkgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgdG8gd29ycnkgYWJvdXQsIHdoZXRoZXIgaXQgYmUgaGVhcCBvciBzdGFjayB2YXJpYWJsZXMuIEFueSBsb2NraW5nIGlzc3VlcyByZWxhdGVkIHRvIFJDVSB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUCBhbmQgUkNVIGRlYnVnZ2luZywgYW5kIEtBU0FOIGFuZCBzdGFuZGFyZCBmYXVsdCBoYW5kbGVycyB3b3VsZCBkZWFsIHdpdGggYW55IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgZGVhZCBjZ3JvdXAgcmVmZXJlbmNlcy4KCk5vdywgbGV0JiMzOTtzIHJ1biB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYS4KCjEuICBLZXJuZWwgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZT8gTm9wZS4gTm8gYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmssIGlvY3RsLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMgaW52b2x2ZWQsIGFuZCBubyBzdHJ1Y3R1cmUgcGFkZGluZyBjb25jZXJucy4KMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLiBFdmVyeXRoaW5nIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLgozLiAgQWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOb3BlLiBBbGwgY2xlYXIgYW5kIHNhZmUuCjQuICBCb3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YT8gTm9wZS4gTm90IGhlcmUuCgpPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIHBhdGNoIGZhbGxzIHVuZGVyIHRoZSAmIzM0O05lZWRzS01TQU49ZmFsc2UmIzM0OyBjcml0ZXJpYSBiZWNhdXNlIHRoZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdoaWNoIGFyZSBhbHJlYWR5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBBbGwgdGhlIHJlbGV2YW50IHN0YWNrL2hlYXAgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcy4KClRoZXJlZm9yZSwgYWZ0ZXIgdGhpcyBkZXRhaWxlZCBhc3Nlc3NtZW50LCBJIGFtIHZlcnkgY29uZmlkZW50IHRoYXQgTmVlZHNLTVNBTiBzaG91bGQgYmUgc2V0IHRvICpmYWxzZSouIFRpbWUgdG8gcHJlcGFyZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1jZyBzdGF0cyBhY2NvdW50aW5nIGFuZCBzaGFkb3cgbm9kZSBjYWxjdWxhdGlvbiBpbiBtbS9tZW1jb250cm9sLmMgYW5kIG1tL3dvcmtpbmdzZXQuYy4gU3BlY2lmaWNhbGx5LCBpdCBnZW5lcmFsaXplcyBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydCgpYCB0byBoYW5kbGUgYWxsIGNncm91cHMgaGllcmFyY2hpZXMgYW5kIHVzZXMgYGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKClgIGZvciB3b3JraW5nc2V0IHNoYWRvdyBub2RlIGNvdW50aW5nLlxuXG5ObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkLCBub3IgYXJlIHRoZXJlIGFueSBpbmZvLWxlYWtzLCBzdHJ1Y3QgcGFkZGluZyBleHBvc3VyZXMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIHBvaW50ZXIgaXNzdWVzIChzdWNoIGFzIFJDVSBsb2NraW5nIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSkgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1jZyBzdGF0cyBhY2NvdW50aW5nIGFuZCBzaGFkb3cgbm9kZSBjYWxjdWxhdGlvbiBpbiBtbS9tZW1jb250cm9sLmMgYW5kIG1tL3dvcmtpbmdzZXQuYy4gU3BlY2lmaWNhbGx5LCBpdCBnZW5lcmFsaXplcyBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydCgpYCB0byBoYW5kbGUgYWxsIGNncm91cHMgaGllcmFyY2hpZXMgYW5kIHVzZXMgYGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKClgIGZvciB3b3JraW5nc2V0IHNoYWRvdyBub2RlIGNvdW50aW5nLlxuXG5ObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkLCBub3IgYXJlIHRoZXJlIGFueSBpbmZvLWxlYWtzLCBzdHJ1Y3QgcGFkZGluZyBleHBvc3VyZXMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIHBvaW50ZXIgaXNzdWVzIChzdWNoIGFzIFJDVSBsb2NraW5nIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSkgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAxOjQ2LjA5ODMwOTY1NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNjg5ODY5NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY291bnRfc2hhZG93X25vZGVzXCIsXG4gICAgXCJtb2RfbWVtY2dfc3RhdGVcIixcbiAgICBcIm1vZF9tZW1jZ19scnV2ZWNfc3RhdGVcIixcbiAgICBcIm1lbV9jZ3JvdXBfY3NzX29mZmxpbmVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbWNnIHN0YXRzIGFjY291bnRpbmcgYW5kIHNoYWRvdyBub2RlIGNhbGN1bGF0aW9uIGluIG1tL21lbWNvbnRyb2wuYyBhbmQgbW0vd29ya2luZ3NldC5jLiBTcGVjaWZpY2FsbHksIGl0IGdlbmVyYWxpemVzIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KClgIHRvIGhhbmRsZSBhbGwgY2dyb3VwcyBoaWVyYXJjaGllcyBhbmQgdXNlcyBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoKWAgZm9yIHdvcmtpbmdzZXQgc2hhZG93IG5vZGUgY291bnRpbmcuXFxuXFxuTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZCwgbm9yIGFyZSB0aGVyZSBhbnkgaW5mby1sZWFrcywgc3RydWN0IHBhZGRpbmcgZXhwb3N1cmVzLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiwgcmVmZXJlbmNlIGNvdW50aW5nLCBvciBwb2ludGVyIGlzc3VlcyAoc3VjaCBhcyBSQ1UgbG9ja2luZyBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UpIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scywgS0FTQU4sIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgYW5kIHBhZ2UgY2FjaGUgd29ya2luZ3NldCBjYWxjdWxhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBlbmFibGVzIGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKSByZWRpcmVjdGlvbiB1bmNvbmRpdGlvbmFsbHkgYWNyb3NzIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMgaW4gbW0vbWVtY29udHJvbC5jIGFuZCBtb2RpZmllcyBjb3VudF9zaGFkb3dfbm9kZXMoKSBpbiBtbS93b3JraW5nc2V0LmMgdG8gcXVlcnkgbG9jYWwgbHJ1dmVjIHBhZ2Ugc3RhdGUgcmF0aGVyIHRoYW4gem9uZS1iYXNlZCBMUlUgc2l6ZXMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIHRlYXJkb3duL3JlY2xhaW0gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAxOjQ2LjA5ODMxNzI2NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNzUwNjA5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM3NjZiY2EyMjFhNTNjYmFhYTA3NzFmMzdjMGExNDFmODcwZDg2N2FcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAxOTowMTo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCA4NmZmNTgwYzcwMTgzLi5kZjQzZTYxYzllYmMxIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC04NDUsMTYgKzg0NSwyMSBAQCBzdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpXFxuIFxcdHJldHVybiB2YWwgXFx1MDAzYyAwID8gLXJlcyA6IHJlcztcXG4gfVxcbiBcXG4tI2lmZGVmIENPTkZJR19NRU1DR19WMVxcbiAvKlxcbi0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoXFxuLSAqIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLlxcbisgKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZVxcbisgKiB3aXRoIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLiAgT2ZmbGluaW5nIGFcXG4rICogbWVtY2cgaXMgcmFyZSwgc28gZG8gdGhlIHJlZGlyZWN0aW9uIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLlxcbiAgKi9cXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGJvb2wgKnJjdV9sb2NrZWQpXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKlxcbitnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqcmN1X2xvY2tlZClcXG4ge1xcbi1cXHQvKiBSZWJpbmRpbmcgY2FuIGNhdXNlIHRoaXMgdmFsdWUgdG8gYmUgY2hhbmdlZCBhdCBydW50aW1lICovXFxuLVxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7XFxuK1xcdC8qXFxuK1xcdCAqIEZhc3QgcGF0aDogdGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byBAbWVtY2csIHNvIHJlYWRpbmdcXG4rXFx0ICogaXRzIENTU19EWUlORyBmbGFnIHdpdGhvdXQgdGhlIFJDVSBsb2NrIGlzIHNhZmUuICBUaGUgUkNVIGxvY2tcXG4rXFx0ICogaXMgb25seSBuZWVkZWQgdG8gd2FsayB1cCB0byBhIG5vbi1keWluZyBhbmNlc3Rvciwgd2hpY2hcXG4rXFx0ICogaGFwcGVucyBvbmx5IHdoaWxlIGEgbWVtY2cgaXMgYWN0dWFsbHkgYmVpbmcgb2ZmbGluZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAoIW1lbWNnX2lzX2R5aW5nKG1lbWNnKSkge1xcbiBcXHRcXHQqcmN1X2xvY2tlZCA9IGZhbHNlO1xcbiBcXHRcXHRyZXR1cm4gbWVtY2c7XFxuIFxcdH1cXG5AQCAtODc1LDE3ICs4ODAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxcbiBcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIH1cXG4tI2Vsc2VcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGJvb2wgKnJjdV9sb2NrZWQpXFxuLXtcXG4tXFx0cmV0dXJuIG1lbWNnO1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxcbi17XFxuLX1cXG4tI2VuZGlmXFxuIFxcbiBzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIFxcdFxcdFxcdCAgICAgIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpXFxuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xcbmluZGV4IDdhYzJiODhjODBhZTUuLjg0MTJmNDg0MGFlMzUgMTAwNjQ0XFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXFxuKysrIGIvbW0vd29ya2luZ3NldC5jXFxuQEAgLTY4OCwxMCArNjg4LDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXFxuIFxcbiBcXHRcXHRtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzX3JhdGVsaW1pdGVkKHNjLVxcdTAwM2VtZW1jZyk7XFxuIFxcdFxcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLVxcdTAwM2VtZW1jZywgTk9ERV9EQVRBKHNjLVxcdTAwM2VuaWQpKTtcXG4tXFxuIFxcdFxcdGZvciAocGFnZXMgPSAwLCBpID0gMDsgaSBcXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSsrKVxcbi1cXHRcXHRcXHRwYWdlcyArPSBscnV2ZWNfbHJ1X3NpemUobHJ1dmVjLCBpLCBNQVhfTlJfWk9ORVMgLSAxKTtcXG4tXFxuK1xcdFxcdFxcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IE5SX0xSVV9CQVNFICsgaSk7XFxuIFxcdFxcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxcbiBcXHRcXHRcXHRscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gXFx0XFx0cGFnZXMgKz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAxOjQ3LjcxNjQ3NDg0OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDQ4MzI5OTQ4OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb3VudF9zaGFkb3dfbm9kZXNcIixcbiAgICBcIm1vZF9tZW1jZ19zdGF0ZVwiLFxuICAgIFwibW9kX21lbWNnX2xydXZlY19zdGF0ZVwiLFxuICAgIFwibWVtX2Nncm91cF9jc3Nfb2ZmbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgYW5kIHBhZ2UgY2FjaGUgd29ya2luZ3NldCBjYWxjdWxhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBlbmFibGVzIGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKSByZWRpcmVjdGlvbiB1bmNvbmRpdGlvbmFsbHkgYWNyb3NzIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMgaW4gbW0vbWVtY29udHJvbC5jIGFuZCBtb2RpZmllcyBjb3VudF9zaGFkb3dfbm9kZXMoKSBpbiBtbS93b3JraW5nc2V0LmMgdG8gcXVlcnkgbG9jYWwgbHJ1dmVjIHBhZ2Ugc3RhdGUgcmF0aGVyIHRoYW4gem9uZS1iYXNlZCBMUlUgc2l6ZXMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIHRlYXJkb3duL3JlY2xhaW0gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzc2NmJjYTIyMWE1M2NiYWFhMDc3MWYzN2MwYTE0MWY4NzBkODY3YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTk6MDE6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDg2ZmY1ODBjNzAxODMuLmRmNDNlNjFjOWViYzEgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTg0NSwxNiArODQ1LDIxIEBAIHN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcbiBcdHJldHVybiB2YWwgXHUwMDNjIDAgPyAtcmVzIDogcmVzO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG4gLypcbi0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoXG4tICogcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuXG4rICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2VcbisgKiB3aXRoIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLiAgT2ZmbGluaW5nIGFcbisgKiBtZW1jZyBpcyByYXJlLCBzbyBkbyB0aGUgcmVkaXJlY3Rpb24gZm9yIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHRcdFx0XHQgICBib29sICpyY3VfbG9ja2VkKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKlxuK2dldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxuIHtcbi1cdC8qIFJlYmluZGluZyBjYW4gY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUgKi9cbi1cdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7XG4rXHQvKlxuK1x0ICogRmFzdCBwYXRoOiB0aGUgY2FsbGVyIGhvbGRzIGEgcmVmZXJlbmNlIHRvIEBtZW1jZywgc28gcmVhZGluZ1xuK1x0ICogaXRzIENTU19EWUlORyBmbGFnIHdpdGhvdXQgdGhlIFJDVSBsb2NrIGlzIHNhZmUuICBUaGUgUkNVIGxvY2tcbitcdCAqIGlzIG9ubHkgbmVlZGVkIHRvIHdhbGsgdXAgdG8gYSBub24tZHlpbmcgYW5jZXN0b3IsIHdoaWNoXG4rXHQgKiBoYXBwZW5zIG9ubHkgd2hpbGUgYSBtZW1jZyBpcyBhY3R1YWxseSBiZWluZyBvZmZsaW5lZC5cbitcdCAqL1xuK1x0aWYgKCFtZW1jZ19pc19keWluZyhtZW1jZykpIHtcbiBcdFx0KnJjdV9sb2NrZWQgPSBmYWxzZTtcbiBcdFx0cmV0dXJuIG1lbWNnO1xuIFx0fVxuQEAgLTg3NSwxNyArODgwLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZClcbiBcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0XHRcdFx0ICAgYm9vbCAqcmN1X2xvY2tlZClcbi17XG4tXHRyZXR1cm4gbWVtY2c7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpXG4te1xuLX1cbi0jZW5kaWZcbiBcbiBzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0ICAgICAgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbClcbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcbmluZGV4IDdhYzJiODhjODBhZTUuLjg0MTJmNDg0MGFlMzUgMTAwNjQ0XG4tLS0gYS9tbS93b3JraW5nc2V0LmNcbisrKyBiL21tL3dvcmtpbmdzZXQuY1xuQEAgLTY4OCwxMCArNjg4LDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4gXG4gXHRcdG1lbV9jZ3JvdXBfZmx1c2hfc3RhdHNfcmF0ZWxpbWl0ZWQoc2MtXHUwMDNlbWVtY2cpO1xuIFx0XHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhzYy1cdTAwM2VtZW1jZywgTk9ERV9EQVRBKHNjLVx1MDAzZW5pZCkpO1xuLVxuIFx0XHRmb3IgKHBhZ2VzID0gMCwgaSA9IDA7IGkgXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSsrKVxuLVx0XHRcdHBhZ2VzICs9IGxydXZlY19scnVfc2l6ZShscnV2ZWMsIGksIE1BWF9OUl9aT05FUyAtIDEpO1xuLVxuK1x0XHRcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYyxcbitcdFx0XHRcdFx0XHRcdCBOUl9MUlVfQkFTRSArIGkpO1xuIFx0XHRwYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChcbiBcdFx0XHRscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHRcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MDE6NDcuNzE2NDc2NjE4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODU0NzQ5NDE5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhpcyBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gYXNrZWQgdG8gcmV2aWV3IHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbiBhbmQgZGlzc2VjdCB3aGF0J3MgY2hhbmdlZC4gTG9va3MgbGlrZSB3ZSdyZSBsb29raW5nIGF0IG1vZGlmaWNhdGlvbnMgaW4gYG1tL21lbWNvbnRyb2wuY2AgYW5kIGBtbS93b3JraW5nc2V0LmNgLiBTcGVjaWZpY2FsbHk6XG5cbkZpcnN0LCBpbiBgbW0vbWVtY29udHJvbC5jYCwgdGhlcmUncyBhIHNpZ25pZmljYW50IGNoYW5nZSBhcm91bmQgdGhlIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCBhbmQgYGdldF9ub25fZHlpbmdfbWVtY2dfZW5kYCBmdW5jdGlvbnMuIEFoLCBJIHNlZSwgdGhleSBhcmUgbm8gbG9uZ2VyIGdhdGVkIGJ5IGBDT05GSUdfTUVNQ0dfVjFgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgdGhlIGNvZGUgaXMgYmVpbmcgZ2VuZXJhbGl6ZWQgb3IgcGVyaGFwcyB0aGV5IGFyZSBhbHdheXMgaW4gc2NvcGUsIHJlZ2FyZGxlc3Mgb2YgdGhlIG1lbW9yeSBjb250cm9sIHZlcnNpb24uIFRoZSBwYXRjaCBhcHBlYXJzIHRvIHJlcGxhY2UgdGhlIGNoZWNrIGZvciBzdWJzeXN0ZW0gZW5hYmxlbWVudCB3aXRoIGEgY2hlY2sgZm9yIG1lbWNnJ3MgXCJkeWluZ1wiIHN0YXRlIGluc2lkZSBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAuIFRoaXMgbWFrZXMgc2Vuc2U7IGl0J3MgbW9yZSBkaXJlY3QuIFRoaXMgYWxzbyBtZWFucyB0aGF0IHRoYXQgZHVtbXkgYCNlbHNlYCBibG9jayBpcyBnb25lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcmVmYWN0b3JpbmcsIGVzcGVjaWFsbHkgdGhlIGltcGFjdCBvbiBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3IgY29ycmVjdG5lc3Mgd2l0aGluIHRoZSBgbWVtY2dgIHN1YnN5c3RlbSdzIGNvcmUgbG9naWMuXG5cbk5leHQsIGluIGBtbS93b3JraW5nc2V0LmNgLCB0aGUgcGF0Y2ggc2VlbXMgdG8gYWx0ZXIgdGhlIHNoYWRvdyBub2RlIGNvdW50aW5nIG1lY2hhbmlzbSB3aXRoaW4gYGNvdW50X3NoYWRvd19ub2Rlc2AuIEl0IHNlZW1zIHRoYXQgdGhlIHBhdGNoIHJlcGxhY2VzIHRoZSBvbGQgbHJ1IHNpemUgZnVuY3Rpb25zIHdpdGggdGhlIHBhZ2Ugc3RhdGUgZnVuY3Rpb25zLiBUaGlzIGlzIG1vc3QgbGlrZWx5IGEgcmVmYWN0b3JpbmcgZm9yIGNsYXJpdHkgb3IgZWZmaWNpZW5jeS4gV2UgbmVlZCB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy5cblxuTXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gem9vbSBvdXQuIEkgbmVlZCB0byBnZXQgYSBmdWxsIHZpZXcgb2YgdGhlIGNvZGUgYXJvdW5kIGJvdGggYG1tL21lbWNvbnRyb2wuY2AgYW5kIGBtbS93b3JraW5nc2V0LmNgIHRvIGZ1bGx5IGdyYXNwIHRoZSByYW1pZmljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuIEknbGwgbmVlZCB0byBsb29rIGF0IGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQsIGhvdyB0aGUgc3Vycm91bmRpbmcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBoYW5kbGVkLCBhbmQgaG93IHRoZXNlIGNoYW5nZXMgbWlnaHQgaW1wYWN0IHRoZSBvdmVyYWxsIHN5c3RlbSdzIG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjQ1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MDE6NTYuMjYzOTc0MzEyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU0OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NDAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NDA6XFx0XFx0LyogR2V0IHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiAodmFsICogdW5pdCAvIFBBR0VfU0laRSkuICovXFxuIDg0MTpcXHRcXHRyZXMgPSBtdWx0X2ZyYWMoYWJzKHZhbCksIHVuaXQsIFBBR0VfU0laRSk7XFxuIDg0MjpcXHRcXHQvKiBSb3VuZCB1cCB6ZXJvIHZhbHVlcy4gKi9cXG4gODQzOlxcdFxcdHJlcyA9IHJlcyA/IDogMTtcXG4gODQ0OlxcdFxcbiA4NDU6XFx0XFx0cmV0dXJuIHZhbCBcXHUwMDNjIDAgPyAtcmVzIDogcmVzO1xcbiA4NDY6XFx0fVxcbiA4NDc6XFx0XFxuIDg0ODpcXHQvKlxcbiA4NDk6XFx0ICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2VcXG4gODUwOlxcdCAqIHdpdGggcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuICBPZmZsaW5pbmcgYVxcbiA4NTE6XFx0ICogbWVtY2cgaXMgcmFyZSwgc28gZG8gdGhlIHJlZGlyZWN0aW9uIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLlxcbiA4NTI6XFx0ICovXFxuIDg1MzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcXG4gODU0OlxcdGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxcbiA4NTU6XFx0e1xcbiA4NTY6XFx0XFx0LypcXG4gODU3OlxcdFxcdCAqIEZhc3QgcGF0aDogdGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byBAbWVtY2csIHNvIHJlYWRpbmdcXG4gODU4OlxcdFxcdCAqIGl0cyBDU1NfRFlJTkcgZmxhZyB3aXRob3V0IHRoZSBSQ1UgbG9jayBpcyBzYWZlLiAgVGhlIFJDVSBsb2NrXFxuIDg1OTpcXHRcXHQgKiBpcyBvbmx5IG5lZWRlZCB0byB3YWxrIHVwIHRvIGEgbm9uLWR5aW5nIGFuY2VzdG9yLCB3aGljaFxcbiA4NjA6XFx0XFx0ICogaGFwcGVucyBvbmx5IHdoaWxlIGEgbWVtY2cgaXMgYWN0dWFsbHkgYmVpbmcgb2ZmbGluZWQuXFxuIDg2MTpcXHRcXHQgKi9cXG4gODYyOlxcdFxcdGlmICghbWVtY2dfaXNfZHlpbmcobWVtY2cpKSB7XFxuIDg2MzpcXHRcXHRcXHQqcmN1X2xvY2tlZCA9IGZhbHNlO1xcbiA4NjQ6XFx0XFx0XFx0cmV0dXJuIG1lbWNnO1xcbiA4NjU6XFx0XFx0fVxcbiA4NjY6XFx0XFxuIDg2NzpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDg2ODpcXHRcXHQqcmN1X2xvY2tlZCA9IHRydWU7XFxuIDg2OTpcXHRcXG4gODcwOlxcdFxcdHdoaWxlIChtZW1jZ19pc19keWluZyhtZW1jZykpXFxuIDg3MTpcXHRcXHRcXHRtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcXG4gODcyOlxcdFxcbiA4NzM6XFx0XFx0cmV0dXJuIG1lbWNnO1xcbiA4NzQ6XFx0fVxcbiA4NzU6XFx0XFxuIDg3NjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxcbiA4Nzc6XFx0e1xcbiA4Nzg6XFx0XFx0aWYgKCFyY3VfbG9ja2VkKVxcbiA4Nzk6XFx0XFx0XFx0cmV0dXJuO1xcbiA4ODA6XFx0XFxuIDg4MTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gODgyOlxcdH1cXG4gODgzOlxcdFxcbiA4ODQ6XFx0c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiA4ODU6XFx0XFx0XFx0XFx0ICAgICAgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbClcXG4gODg2OlxcdHtcXG4gODg3OlxcdFxcdGludCBpID0gbWVtY2dfc3RhdHNfaW5kZXgoaWR4KTtcXG4gODg4OlxcdFxcdGludCBjcHU7XFxuIDg4OTpcXHRcXG4gODkwOlxcdFxcdGlmIChXQVJOX09OQ0UoQkFEX1NUQVRfSURYKGkpLCBcXFwiJXM6IG1pc3Npbmcgc3RhdCBpdGVtICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgaWR4KSlcXG4gODkxOlxcdFxcdFxcdHJldHVybjtcXG4gODkyOlxcdFxcbiA4OTM6XFx0XFx0Y3B1ID0gZ2V0X2NwdSgpO1xcbiA4OTQ6XFx0XFxuIDg5NTpcXHRcXHR0aGlzX2NwdV9hZGQobWVtY2ctXFx1MDAzZXZtc3RhdHNfcGVyY3B1LVxcdTAwM2VzdGF0ZVtpXSwgdmFsKTtcXG4gODk2OlxcdFxcdHZhbCA9IG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpZHgsIHZhbCk7XFxuIDg5NzpcXHRcXHRtZW1jZ19yc3RhdF91cGRhdGVkKG1lbWNnLCB2YWwsIGNwdSk7XFxuIDg5ODpcXHRcXG4gODk5OlxcdFxcdHRyYWNlX21vZF9tZW1jZ19zdGF0ZShtZW1jZywgaWR4LCB2YWwpO1xcbiA5MDA6XFx0XFxuIDkwMTpcXHRcXHRwdXRfY3B1KCk7XFxuIDkwMjpcXHR9XFxuIDkwMzpcXHRcXG4gOTA0OlxcdC8qKlxcbiA5MDU6XFx0ICogbW9kX21lbWNnX3N0YXRlIC0gdXBkYXRlIGNncm91cCBtZW1vcnkgc3RhdGlzdGljc1xcbiA5MDY6XFx0ICogQG1lbWNnOiB0aGUgbWVtb3J5IGNncm91cFxcbiA5MDc6XFx0ICogQGlkeDogdGhlIHN0YXQgaXRlbSAtIGNhbiBiZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBlbnVtIG5vZGVfc3RhdF9pdGVtXFxuIDkwODpcXHQgKiBAdmFsOiBkZWx0YSB0byBhZGQgdG8gdGhlIGNvdW50ZXIsIGNhbiBiZSBuZWdhdGl2ZVxcbiA5MDk6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAxOjU2LjI2NDMzMjk3MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNDE0MzQyOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAgQ2FsbCBTaXRlcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIndoZXJlIHRoZSBoZWNrIGlzIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCBhY3R1YWxseSAqdXNlZCogd2l0aGluIGBtbS9tZW1jb250cm9sLmNgP1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBJIG5lZWQgdG8ga25vdyB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGFuZCBob3cgdGhlIHZhbHVlIHJldHVybmVkIGlzIHRoZW4gaGFuZGxlZC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgcmVhZCwgYSBjcml0aWNhbCBwYXRoIG9wZXJhdGlvbiwgb3Igc29tZXRoaW5nIGluIGJldHdlZW4/IEtub3dpbmcgdGhhdCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYW5kIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIGJ1ZyBodW50aW5nLiBJ4oCZbGwgc3RhcnQgYnkgdHJhY2luZyB0aGUgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhlIHNwZWNpZmllZCBmaWxlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGZpcnN0LXBhc3MgdW5kZXJzdGFuZGluZyBvZiBpdHMgaW1wb3J0YW5jZSB3aXRoaW4gdGhlIGJyb2FkZXIgbWVtb3J5IGNvbnRyb2wgbWVjaGFuaXNtcy4gVGhpcyBpc27igJl0IGEgZGVlcCBkaXZlIHlldDsgaXQncyBhIG1hcC1tYWtpbmcgZXhlcmNpc2UuIEkgd2lsbCBzdGFydCBieSB1c2luZyBgZ3JlcGAsIGBnaXQgZ3JlcGAsIG9yIHdoYXRldmVyIHRvb2wgY29tZXMgdG8gaGFuZCwgYnV0IHF1aWNrbHkgSSdsbCBiZSBsb29raW5nIGF0IHRoZSBjYWxsIHN0YWNrIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NjgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAxOjU4LjQwNTc3MDgyOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk1MDIyOTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTg1Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcXG5tbS9tZW1jb250cm9sLmM6ODU0OmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxcbm1tL21lbWNvbnRyb2wuYy04NTUte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTkxMD12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05MTctXFxubW0vbWVtY29udHJvbC5jOjkxODpcXHRtZW1jZyA9IGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQobWVtY2csIFxcdTAwMjZyY3VfbG9ja2VkKTtcXG5tbS9tZW1jb250cm9sLmMtOTE5LVxcdF9fbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIHZhbCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9OTc2PXN0YXRpYyB2b2lkIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTk4NS1cXHRwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xcbm1tL21lbWNvbnRyb2wuYzo5ODY6XFx0bWVtY2cgPSBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHBuLVxcdTAwM2VtZW1jZywgXFx1MDAyNnJjdV9sb2NrZWQpO1xcbm1tL21lbWNvbnRyb2wuYy05ODctXFx0cG4gPSBtZW1jZy1cXHUwMDNlbm9kZWluZm9bcGdkYXQtXFx1MDAzZW5vZGVfaWRdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjowMC43MDA4MDA3ODFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDI3ODQyMTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gU2hhZG93IE5vZGUgQ291bnRpbmcqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHNoYWRvdyBub2RlIGNvdW50aW5nIHdvcmtzIGluIHRoZSB3b3JraW5nc2V0IGltcGxlbWVudGF0aW9uLiBUaGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyBgbW0vd29ya2luZ3NldC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgY291bnRfc2hhZG93X25vZGVzYCBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcyDigJMgd2hhdCBleGFjdGx5IGlzIGEgXCJzaGFkb3cgbm9kZVwiIGluIHRoaXMgY29udGV4dD8gSXMgaXQgcmVsYXRlZCB0byBwYWdlIGNvbG9yaW5nLCBUTEIgbWlzc2VzLCBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSSBiZXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIG92ZXJhbGwgd29ya2luZ3NldCBhbGdvcml0aG0uIExldCdzIHNlZSBob3cgaXTigJlzIGltcGxlbWVudGVkIGFuZCB3aGVyZSB0aGlzIGNvdW50ZXIgaXMgdXNlZCAtIGlzIGl0IGZvciBwZXJmb3JtYW5jZSBtZXRyaWNzLCBldmljdGlvbiBzdHJhdGVnaWVzLCBvciBzb21ldGhpbmcgbW9yZSBmdW5kYW1lbnRhbCB0byB0aGUgd29ya2luZ3NldCBsb2dpYz8gS25vd2luZyB3aGVyZSBhbmQgaG93IHRoaXMgY291bnRlciBnZXRzIHVwZGF0ZWQgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgb3ZlcmFsbCBpbXBhY3QuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgZ2V0IGEgZmVlbCBmb3IgdGhlIGNvbnRyb2wgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA4NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAyOjAzLjcyODY0NjIxM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3dvcmtpbmdzZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NzA6XFx0XFx0ICogaW5hY3RpdmUgbGlzdC4gQXNzdW1lIHRoZSB0b3RhbCBjYWNoZSBzaXplIGZvciB0aGF0LlxcbiA2NzE6XFx0XFx0ICpcXG4gNjcyOlxcdFxcdCAqIE5vZGVzIG1pZ2h0IGJlIHNwYXJzZWx5IHBvcHVsYXRlZCwgd2l0aCBvbmx5IG9uZSBzaGFkb3dcXG4gNjczOlxcdFxcdCAqIGVudHJ5IGluIHRoZSBleHRyZW1lIGNhc2UuIE9idmlvdXNseSwgd2UgY2Fubm90IGtlZXAgb25lXFxuIDY3NDpcXHRcXHQgKiBub2RlIGZvciBldmVyeSBlbGlnaWJsZSBzaGFkb3cgZW50cnksIHNvIGNvbXByb21pc2Ugb24gYVxcbiA2NzU6XFx0XFx0ICogd29yc3QtY2FzZSBkZW5zaXR5IG9mIDEvOHRoLiBCZWxvdyB0aGF0LCBub3QgYWxsIGVsaWdpYmxlXFxuIDY3NjpcXHRcXHQgKiByZWZhdWx0cyBjYW4gYmUgZGV0ZWN0ZWQgYW55bW9yZS5cXG4gNjc3OlxcdFxcdCAqXFxuIDY3ODpcXHRcXHQgKiBPbiA2NC1iaXQgd2l0aCA3IHhhX25vZGVzIHBlciBwYWdlIGFuZCA2NCBzbG90c1xcbiA2Nzk6XFx0XFx0ICogZWFjaCwgdGhpcyB3aWxsIHJlY2xhaW0gc2hhZG93IGVudHJpZXMgd2hlbiB0aGV5IGNvbnN1bWVcXG4gNjgwOlxcdFxcdCAqIH4xLjglIG9mIGF2YWlsYWJsZSBtZW1vcnk6XFxuIDY4MTpcXHRcXHQgKlxcbiA2ODI6XFx0XFx0ICogUEFHRV9TSVpFIC8geGFfbm9kZXMgLyBub2RlX2VudHJpZXMgKiA4IC8gUEFHRV9TSVpFXFxuIDY4MzpcXHRcXHQgKi9cXG4gNjg0OlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dcXG4gNjg1OlxcdFxcdGlmIChzYy1cXHUwMDNlbWVtY2cpIHtcXG4gNjg2OlxcdFxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG4gNjg3OlxcdFxcdFxcdGludCBpO1xcbiA2ODg6XFx0XFxuIDY4OTpcXHRcXHRcXHRtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzX3JhdGVsaW1pdGVkKHNjLVxcdTAwM2VtZW1jZyk7XFxuIDY5MDpcXHRcXHRcXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhzYy1cXHUwMDNlbWVtY2csIE5PREVfREFUQShzYy1cXHUwMDNlbmlkKSk7XFxuIDY5MTpcXHRcXHRcXHRmb3IgKHBhZ2VzID0gMCwgaSA9IDA7IGkgXFx1MDAzYyBOUl9MUlVfTElTVFM7IGkrKylcXG4gNjkyOlxcdFxcdFxcdFxcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYyxcXG4gNjkzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBOUl9MUlVfQkFTRSArIGkpO1xcbiA2OTQ6XFx0XFx0XFx0cGFnZXMgKz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXFxuIDY5NTpcXHRcXHRcXHRcXHRscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gNjk2OlxcdFxcdFxcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxcbiA2OTc6XFx0XFx0XFx0XFx0bHJ1dmVjLCBOUl9TTEFCX1VOUkVDTEFJTUFCTEVfQikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gNjk4OlxcdFxcdH0gZWxzZVxcbiA2OTk6XFx0I2VuZGlmXFxuIDcwMDpcXHRcXHRcXHRwYWdlcyA9IG5vZGVfcHJlc2VudF9wYWdlcyhzYy1cXHUwMDNlbmlkKTtcXG4gNzAxOlxcdFxcbiA3MDI6XFx0XFx0bWF4X25vZGVzID0gcGFnZXMgXFx1MDAzZVxcdTAwM2UgKFhBX0NIVU5LX1NISUZUIC0gMyk7XFxuIDcwMzpcXHRcXG4gNzA0OlxcdFxcdGlmIChub2RlcyBcXHUwMDNjPSBtYXhfbm9kZXMpXFxuIDcwNTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNzA2OlxcdFxcdHJldHVybiBub2RlcyAtIG1heF9ub2RlcztcXG4gNzA3OlxcdH1cXG4gNzA4OlxcdFxcbiA3MDk6XFx0c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaGFkb3dfbHJ1X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG4gNzEwOlxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1LFxcbiA3MTE6XFx0XFx0XFx0XFx0XFx0XFx0ICB2b2lkICphcmcpIF9fbXVzdF9ob2xkKGxydS1cXHUwMDNlbG9jaylcXG4gNzEyOlxcdHtcXG4gNzEzOlxcdFxcdHN0cnVjdCB4YV9ub2RlICpub2RlID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCB4YV9ub2RlLCBwcml2YXRlX2xpc3QpO1xcbiA3MTQ6XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XFxuIDcxNTpcXHRcXHRpbnQgcmV0O1xcbiA3MTY6XFx0XFxuIDcxNzpcXHRcXHQvKlxcbiA3MTg6XFx0XFx0ICogUGFnZSBjYWNoZSBpbnNlcnRpb25zIGFuZCBkZWxldGlvbnMgc3luY2hyb25vdXNseSBtYWludGFpblxcbiA3MTk6XFx0XFx0ICogdGhlIHNoYWRvdyBub2RlIExSVSB1bmRlciB0aGUgaV9wYWdlcyBsb2NrIGFuZCB0aGVcXG4gNzIwOlxcdFxcdCAqIFxcdTAwMjZscnUtXFx1MDAzZWxvY2suIEJlY2F1c2UgdGhlIHBhZ2UgY2FjaGUgdHJlZSBpcyBlbXB0aWVkIGJlZm9yZVxcbiA3MjE6XFx0XFx0ICogdGhlIGlub2RlIGNhbiBiZSBkZXN0cm95ZWQsIGhvbGRpbmcgdGhlIFxcdTAwMjZscnUtXFx1MDAzZWxvY2sgcGlucyBhbnlcXG4gNzIyOlxcdFxcdCAqIGFkZHJlc3Nfc3BhY2UgdGhhdCBoYXMgbm9kZXMgb24gdGhlIExSVS5cXG4gNzIzOlxcdFxcdCAqXFxuIDcyNDpcXHRcXHQgKiBXZSBjYW4gdGhlbiBzYWZlbHkgdHJhbnNpdGlvbiB0byB0aGUgaV9wYWdlcyBsb2NrIHRvXFxuIDcyNTpcXHRcXHQgKiBwaW4gb25seSB0aGUgYWRkcmVzc19zcGFjZSBvZiB0aGUgcGFydGljdWxhciBub2RlIHdlIHdhbnRcXG4gNzI2OlxcdFxcdCAqIHRvIHJlY2xhaW0sIHRha2UgdGhlIG5vZGUgb2ZmLUxSVSwgYW5kIGRyb3AgdGhlIFxcdTAwMjZscnUtXFx1MDAzZWxvY2suXFxuIDcyNzpcXHRcXHQgKi9cXG4gNzI4OlxcdFxcbiA3Mjk6XFx0XFx0bWFwcGluZyA9IGNvbnRhaW5lcl9vZihub2RlLVxcdTAwM2VhcnJheSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UsIGlfcGFnZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjowMy43Mjg3NDM5MzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTE3NTUyMjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQ2FuZGlkYXRlOiBNZW1vcnkgTWFuYWdlbWVudCBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYCBhbmQgYG1tL3dvcmtpbmdzZXQuY2AuIFJpZ2h0IGF3YXksIHRoaXMgc2NyZWFtcyBtZW1vcnkgbWFuYWdlbWVudCDigJMgd2UncmUgdGFsa2luZyBhYm91dCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgYW5kIHdvcmtpbmdzZXQgY2FsY3VsYXRpb25zLiBBbmQgY29uc2lkZXJpbmcgdGhpcyBpcyBhbGwgd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGRpcmVjdG9yeSAoYG1tL2ApLCB0aGlzIGNvZGUgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBleGVjdXRlZCBoZWF2aWx5LCBlc3BlY2lhbGx5IGlmIGBDT05GSUdfTUVNQ0dgIGlzIGVuYWJsZWQsIHdoaWNoIGl0IGxpa2VseSBpcyBnaXZlbiB0aGUgZmlsZSBuYW1lLlxuXG5Ob3csIGRvZXMgdGhpcyBtZWV0IG91ciBmdXp6aW5nIGNyaXRlcmlhPyBMZXQncyBzZWUuLi4gd2UgaGF2ZSBcIkNvcmUgU3Vic3lzdGVtczogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLykuLi5cIiBEaW5nIGRpbmcgZGluZyEgU2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgV29ydGhGdXp6aW5nIGlzIHRydWUgaW4gdGhpcyBjYXNlLiBXZSdyZSBkaXJlY3RseSBkZWFsaW5nIHdpdGggY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4gV2UncmUgb24hXG5cbk5vdyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIGBDT05GSUdfTUVNQ0dgIGZvciBgbW0vbWVtY29udHJvbC5jYCAtIGlzIHRoaXMgZmlsZSBvbmx5IGJ1aWx0IHdoZW4gYE1FTUNHYCBpcyBlbmFibGVkPyBJJ2xsIHF1aWNrbHkgbG9vayBhdCB0aGUgYG1tL01ha2VmaWxlYCBmb3IgdGhhdCBjb25maXJtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNjIsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjowNi42NDYzMDAxNjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMDEyOTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNvbnRyb2xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxcbm1tL01ha2VmaWxlOjI4OktDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLm8gOj0gblxcbm1tL01ha2VmaWxlOjI5OktDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLXYxLm8gOj0gblxcbm1tL01ha2VmaWxlLTMwLUtDT1ZfSU5TVFJVTUVOVF9tbXpvbmUubyA6PSBuXFxuLS1cXG5tbS9NYWtlZmlsZT0xMDQ9b2JqLSQoQ09ORklHX0xJVkVVUERBVEVfTUVNRkQpICs9IG1lbWZkX2x1by5vXFxubW0vTWFrZWZpbGU6MTA1Om9iai0kKENPTkZJR19NRU1DR19WMSkgKz0gbWVtY29udHJvbC12MS5vXFxubW0vTWFrZWZpbGU6MTA2Om9iai0kKENPTkZJR19NRU1DRykgKz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xcbm1tL01ha2VmaWxlLTEwNy1pZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5tbS9NYWtlZmlsZToxMDg6b2JqLSQoQ09ORklHX01FTUNHKSArPSBicGZfbWVtY29udHJvbC5vXFxubW0vTWFrZWZpbGUtMTA5LWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAyOjA2LjcyNjMxODUxNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzE3MTg0MjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gTWVtY2cgYW5kIEtjb25maWcgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZWJhc2UsIGFuZCBpdCBsb29rcyBsaWtlIGBDT05GSUdfTUVNQ0dgIGlzIGEgaGFyZCByZXF1aXJlbWVudCBmb3IgdGhlIGBtZW1jb250cm9sLmNgIGZpbGUuIE5vIHN1cnByaXNlcyB0aGVyZTsgdGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCBmdW5jdGlvbmFsaXR5LiBUaGVuLCB3aGVuIEkgZ2V0IG92ZXIgdG8gYHdvcmtpbmdzZXQuY2AsIEkgc2VlIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24g4oCTIGAjaWZkZWYgQ09ORklHX01FTUNHYCDigJMgYXJvdW5kIGEgcGFydGljdWxhciBzZWN0aW9uIHdpdGhpbiBgY291bnRfc2hhZG93X25vZGVzYC4gVGhhdCBzdWdnZXN0cyB0aGUgd29ya2luZ3NldCBjb2RlIGhhcyBzb21lIGludGVyYWN0aW9ucyB0aGF0IGFyZSBlaXRoZXIgb24gb3Igb2ZmLCBkZXBlbmRpbmcgb24gd2hldGhlciBtZW1vcnkgY2dyb3VwcyBhcmUgZW5hYmxlZC4gTWFrZXMgc2Vuc2U7IHdvcmtpbmdzZXQgbWFuYWdlbWVudCBjYW4gbGV2ZXJhZ2UgbWVtY2cgc3RhdHMgZm9yIG9wdGltaXphdGlvbiBvciBhZGFwdGF0aW9uLlxuXG5UaW1lIHRvIGNvbmZpcm0gdGhpcyBkZXBlbmRlbmN5LCBhbmQgcHJvYmFibHkgY2xhcmlmeSB3aGljaCBzcGVjaWZpYyBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCB3aXRoIHRoZSBjb25maWcuIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBpbml0L0tjb25maWdgIHRvIHBpbnBvaW50IGV4YWN0bHkgaG93IGBNRU1DR2AgaXMgZGVmaW5lZCBhbmQgd2hhdCBvdGhlciBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGJpZ2dlciBwaWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBoZXJlIGlzIGNydWNpYWwgZm9yIGNvbXByZWhlbmRpbmcgdGhlIGNvbXBsZXRlIGFyY2hpdGVjdHVyZSBhbmQgd2hpY2ggcGFydHMgYXJlIGFjdGl2ZSBpbiBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIGhhdmUgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmdWxsIGRlcGVuZGVuY3kgdHJlZSwgYW5kIEkga25vdyBJJ2xsIGZpbmQgaXQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwODgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjowOS4wNDM1MDUzMDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMjc5Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNjg9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA3Ny1cXG5pbml0L0tjb25maWc6MTA3ODpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA3OS1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg2LVxcbmluaXQvS2NvbmZpZzoxMDg3OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwODgtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTMtXFxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTEwOTUtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDAtXFxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDItXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MDI6MDkuMTE0NzkwMzI3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2Nzg2Mjg4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGlnZ2luZyBpbnRvIE1FTUNHIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBNRU1DRy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIHRoaW5raW5nIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBJJ20gc3BlY2lmaWNhbGx5IHRhcmdldGluZyBhcm91bmQgbGluZSAxMDc4LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIG1lbW9yeSBjb250cm9sIGdyb3VwcyBhcmUgZGVmaW5lZCwgYW5kIHRoZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGZlYXR1cmVzIGFuZCBvcHRpb25zLiBJJ20gYmV0dGluZyB0aGF0J3Mgd2hlcmUgdGhlIHJlbGV2YW50IGRlcGVuZGVuY2llcyBmb3IgTUVNQ0cgd2lsbCBiZSBsYWlkIG91dC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NTUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjoxMC43OTM0MjI3MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI3MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDc1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDc1OlxcdFxcbjEwNzY6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA3NzpcXHRcXG4xMDc4OlxcdGNvbmZpZyBNRU1DR1xcbjEwNzk6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTA4MDpcXHRcXHRzZWxlY3QgUEFHRV9DT1VOVEVSXFxuMTA4MTpcXHRcXHRzZWxlY3QgRVZFTlRGRFxcbjEwODI6XFx0XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbjEwODM6XFx0XFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXFxuMTA4NDpcXHRcXHRoZWxwXFxuMTA4NTpcXHRcXHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cXG4xMDg2OlxcdFxcbjEwODc6XFx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG4xMDg4OlxcdFxcdGJvb2xcXG4xMDg5OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMDkwOlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMDkxOlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMDkyOlxcdFxcdGRlZmF1bHQgeVxcbjEwOTM6XFx0XFxuMTA5NDpcXHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG4xMDk1OlxcdFxcdGJvb2xcXG4xMDk2OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMDk3OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMDk4OlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbjEwOTk6XFx0XFx0ZGVmYXVsdCB5XFxuMTEwMDpcXHRcXG4xMTAxOlxcdGNvbmZpZyBNRU1DR19WMVxcbjExMDI6XFx0XFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMTAzOlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMTA0OlxcdFxcdGRlZmF1bHQgblxcbjExMDU6XFx0XFx0aGVscFxcbjExMDY6XFx0XFx0ICBMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyIHdoaWNoIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYnlcXG4xMTA3OlxcdFxcdCAgY2dyb3VwIHYyIGltcGxlbWVudGF0aW9uLiBUaGUgdjEgaXMgdGhlcmUgZm9yIGxlZ2FjeSBhcHBsaWNhdGlvbnNcXG4xMTA4OlxcdFxcdCAgd2hpY2ggaGF2ZW4ndCBtaWdyYXRlZCB0byB0aGUgbmV3IGNncm91cCB2MiBpbnRlcmZhY2UgeWV0LiBJZiB5b3VcXG4xMTA5OlxcdFxcdCAgZG8gbm90IGhhdmUgYW55IHN1Y2ggYXBwbGljYXRpb24gdGhlbiB5b3UgYXJlIGNvbXBsZXRlbHkgZmluZSBsZWF2aW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAyOjEwLjc5NDc1NTA2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NTg1MjAwMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgQ09ORklHX01FTUNHYC4gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBjb25maXJtIGlzIGl0cyBkZXBlbmRlbmN5IG9uIGBDT05GSUdfQ0dST1VQU2AuIEkga25vdyB0aGF0J3MgYSBjb21tb24gcmVsYXRpb25zaGlwLCBidXQgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gTGV0IG1lIGdvIGJhY2sgdG8gdGhlIHNvdXJjZSBjb2RlIHRvIGNvbmZpcm0gdGhlIGJ1aWxkIGluc3RydWN0aW9ucy4gSSBzaG91bGQgYmUgYWJsZSB0byB0cmFjayBkb3duIHRoZSBkZXBlbmRlbmN5IHByZXR0eSBxdWlja2x5IGJ5IGNoZWNraW5nIGZvciBhbiBlbmNsb3NpbmcgYGlmIENHUk9VUFNgIGJsb2NrIG9yIHBlcmhhcHMgYSBgbWVudWNvbmZpZyBDR1JPVVBTYCBsaW5lIGluIHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIHN0cmFpZ2h0Zm9yd2FyZCBidXQgaW1wb3J0YW50IHRvIHZlcmlmeSBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBpbiBteSBhbmFseXNpcy4gSSBoYXZlIHRvIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzUwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjoxMi42NTMyNzg4NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM5ODEyMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVudWNvbmZpZyBDR1JPVVBTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA0Nj1jb25maWcgU0xBQl9PQkpfRVhUXFxuLS1cXG5pbml0L0tjb25maWctMTA0OC1cXG5pbml0L0tjb25maWc6MTA0OTptZW51Y29uZmlnIENHUk9VUFNcXG5pbml0L0tjb25maWctMTA1MC1cXHRib29sIFxcXCJDb250cm9sIEdyb3VwIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAyOjEyLjcyNzI2NzA4OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDA4MDE2NTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQ29udHJvbCBHcm91cCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBgQ09ORklHX01FTUNHYCwgYW5kIHBvdGVudGlhbGx5IGBDT05GSUdfTUVNQ0dfVjFgIGFzIHdlbGwuIFRoZSBjb2RlIHNlZW1zIHRvIGJlIHdvcmtpbmcgd2l0aCBib3RoIHZlcnNpb25zIG5vdywgc28gdGhhdCdzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLiBGaXJzdCwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50IGluIHRoaXMgY29udGV4dC4gSXQncyBhbHdheXMgYmVzdCB0byBoYXZlIGEgY29tcGxldGUgcGljdHVyZS5cblxuTmV4dCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBgRm9jdXNTeW1ib2xzYC4gVGhhdCdzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLlxuXG5Ob3csIHRoZSBtYWluIGZvY3VzIGlzIG9uIGlkZW50aWZ5aW5nIGV4YWN0bHkgd2hpY2ggZnVuY3Rpb25zIGFyZSBtb2RpZmllZCBvciBkaXJlY3RseSBhZmZlY3RlZCBieSB0aGlzIGNvbmZpZ3VyYXRpb24uIExldCdzIHNlZS4uLiBhaCwgaGVyZSdzIG9uZTogYG1tL3dvcmtpbmdzZXQuY2AuIFNwZWNpZmljYWxseSwgYGNvdW50X3NoYWRvd19ub2Rlc2AuIFRoYXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQncyBsaW1pdGVkIGluIGl0cyBzY29wZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBjb3VudF9zaGFkb3dfbm9kZXNgIHRvIGZ1bGx5IGFzc2VzcyB0aGUgaW1wbGljYXRpb25zLCBhbmQgYWxzbyBhbnkgc2hyaW5rZXJzIHRvIHNlZSBob3cgaXQgbWlnaHQgdGllIGludG8gbWVtb3J5IHJlY2xhaW0uIEkgYWxzbyBoYXZlIHRvIHNlZSB3aGVyZSBpdCdzICp1c2VkKiwgd2hpY2ggc2hvdWxkIGdpdmUgYSBjbGVhcmVyIHZpZXcgb2YgaXRzIHJvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NTQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MDI6MTUuMTM1Mjg4MTYxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDc3NDM2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb3VudF9zaGFkb3dfbm9kZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3dvcmtpbmdzZXQuYz02MjQ9dm9pZCB3b3JraW5nc2V0X3VwZGF0ZV9ub2RlKHN0cnVjdCB4YV9ub2RlICpub2RlKVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTY1MC1cXG5tbS93b3JraW5nc2V0LmM6NjUxOnN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X3NoYWRvd19ub2RlcyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbm1tL3dvcmtpbmdzZXQuYy02NTItXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz03OTI9c3RhdGljIGludCBfX2luaXQgd29ya2luZ3NldF9pbml0KHZvaWQpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtODI4LVxcbm1tL3dvcmtpbmdzZXQuYzo4Mjk6XFx0d29ya2luZ3NldF9zaGFkb3dfc2hyaW5rZXItXFx1MDAzZWNvdW50X29iamVjdHMgPSBjb3VudF9zaGFkb3dfbm9kZXM7XFxubW0vd29ya2luZ3NldC5jLTgzMC1cXHR3b3JraW5nc2V0X3NoYWRvd19zaHJpbmtlci1cXHUwMDNlc2Nhbl9vYmplY3RzID0gc2Nhbl9zaGFkb3dfbm9kZXM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAyOjE1LjIzMDA2OTYzOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTM3MzM0NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGNvdW50X3NoYWRvd19ub2Rlc2AgU2hyaW5rZXIgQ2FsbGJhY2sqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgY291bnRfc2hhZG93X25vZGVzYCwgYW5kIGl0J3MgYWN0aW5nIGFzIGEgc2hyaW5rZXIgY2FsbGJhY2ssIHNwZWNpZmljYWxseSBgd29ya2luZ3NldF9zaGFkb3dfc2hyaW5rZXItXHUwMDNlY291bnRfb2JqZWN0c2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgbWVtb3J5IGNvbnRyb2wgbWVjaGFuaXNtLCBzbyBJJ20gaGVhZGluZyBvdmVyIHRvIGBtbS9tZW1jb250cm9sLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBvcGVyYXRpbmcgd2l0aGluIHRoZSBjb250ZXh0IG9mIG1lbW9yeSBjZ3JvdXBzLlxuXG5BIHF1aWNrIGxvb2sgcmV2ZWFscyBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAsIHdoaWNoIGlzIGRlZmluZWQgYXMgYHN0YXRpYyBpbmxpbmVgLiBUaGlzIGlzIGtleTsgaXQgbWVhbnMgaXQncyBsaWtlbHkgb3B0aW1pemVkIGZvciBwZXJmb3JtYW5jZSwgYnV0IGFsc28gcG90ZW50aWFsbHkgbWFrZXMgZGlyZWN0IGNhbGwgYW5hbHlzaXMgYSBiaXQgbW9yZSBsaW1pdGVkLiBOb3csIGxldCdzIHNlZSB3aGVyZSB0aGF0IGlubGluZSBmdW5jdGlvbiBpcyAqYWN0dWFsbHkqIHVzZWQgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBJJ20gZmluZGluZyBpdCdzIGNhbGxlZCB3aXRoaW4gYG1vZF9tZW1jZ19zdGF0ZWAgYW5kIGFsc28gYG1vZF9tZW1jZ19scnV2ZWNfc3RhdGVgLiBNeSBuZXh0IHF1ZXN0aW9uIGlzLCBpcyBgbW9kX21lbWNnX2xydXZlY19zdGF0ZWAgc3RhdGljLCB0b28/IEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIHZpc2liaWxpdHkgb2YgdGhpcyBvbmUuIFRoYXQncyB0aGUgbmV4dCBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNTEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MDI6MTcuNzY3NDA3NzA5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODQzODkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NTUwPXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3My0jaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jOjU3NDpzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxcbm1tL21lbWNvbnRyb2wuYy01NzUtXFx0XFx0XFx0XFx0ICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU3Nz12b2lkIHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTkwLVxcbm1tL21lbWNvbnRyb2wuYzo1OTE6XFx0XFx0X19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKGNoaWxkX3BuLCBpZHgsIC12YWx1ZSk7XFxubW0vbWVtY29udHJvbC5jOjU5MjpcXHRcXHRfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUocGFyZW50X3BuLCBpZHgsIHZhbHVlKTtcXG5tbS9tZW1jb250cm9sLmMtNTkzLVxcdH1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz04MzI9c3RhdGljIGxvbmcgbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGludCBpZHgsIGxvbmcgdmFsKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTg0OC0vKlxcbm1tL21lbWNvbnRyb2wuYzo4NDk6ICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2VcXG5tbS9tZW1jb250cm9sLmMtODUwLSAqIHdpdGggcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuICBPZmZsaW5pbmcgYVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTk0MT12b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05NTAtXFxubW0vbWVtY29udHJvbC5jOjk1MTpzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxcbm1tL21lbWNvbnRyb2wuYy05NTItXFx0XFx0XFx0XFx0ICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtOTcwLVxcdG1lbWNnX3JzdGF0X3VwZGF0ZWQobWVtY2csIHZhbCwgY3B1KTtcXG5tbS9tZW1jb250cm9sLmM6OTcxOlxcdHRyYWNlX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUobWVtY2csIGlkeCwgdmFsKTtcXG5tbS9tZW1jb250cm9sLmMtOTcyLVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTk3NS1cXG5tbS9tZW1jb250cm9sLmM6OTc2OnN0YXRpYyB2b2lkIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbm1tL21lbWNvbnRyb2wuYy05NzctXFx0XFx0XFx0XFx0ICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05ODgtXFxubW0vbWVtY29udHJvbC5jOjk4OTpcXHRfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUocG4sIGlkeCwgdmFsKTtcXG5tbS9tZW1jb250cm9sLmMtOTkwLVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTEwMDQ9dm9pZCBtb2RfbHJ1dmVjX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTAxMS1cXHRpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG5tbS9tZW1jb250cm9sLmM6MTAxMjpcXHRcXHRtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKGxydXZlYywgaWR4LCB2YWwpO1xcbm1tL21lbWNvbnRyb2wuYy0xMDEzLX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yOTA0PXN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X3NsYWJfbm1pX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI5MTEtXFx0XFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcXG5tbS9tZW1jb250cm9sLmM6MjkxMjpcXHRcXHRtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKGxydXZlYywgaWR4LCBucik7XFxubW0vbWVtY29udHJvbC5jLTI5MTMtXFx0fSBlbHNlIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yOTI1PXN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X3NsYWJfbm1pX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI5MzEtXFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcXG5tbS9tZW1jb250cm9sLmM6MjkzMjpcXHRtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKGxydXZlYywgaWR4LCBucik7XFxubW0vbWVtY29udHJvbC5jLTI5MzMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjoxNy44MzU4NTM1MjhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzU2NjM5MzY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtY2cgU3RhdGUgTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgaW5pdGlhbCBsb29rLCBgbW0vbWVtY29udHJvbC5jYCBpcyB0aGUgcHJpbWFyeSBhcmVhIG9mIGludGVyZXN0LiBJIHNlZSB0aGF0IGBtb2RfbWVtY2dfc3RhdGVgIGNhbGxzIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCwgd2hpY2ggaXMgbm9uLXN0YXRpYy4gVGhlbiBgbW9kX21lbWNnX2xydXZlY19zdGF0ZWAgKHN0YXRpYykgYWxzbyBjYWxscyBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAsIGFuZCB0aGF0J3MgdXNlZCBieSBgbW9kX2xydXZlY19zdGF0ZWAgYW5kIGBhY2NvdW50X3NsYWJfbm1pX3NhZmVgLiBUaGF0IHBhdHRlcm4gc3VnZ2VzdHMgc29tZSB1bmRlcmx5aW5nIHN0cnVjdHVyZSBmb3IgZ2V0dGluZyB0aGUgbWVtY2cgc3RhcnQuIGByZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbGAsIGByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWxgLCBhbmQgYG1lbWNnX29mZmxpbmVfa21lbWAgYXJlIGltbWVkaWF0ZWx5IGZsYWdnZWQgYXMgZGVhbGluZyB3aXRoIG1lbWNnIG9mZmxpbmluZyBhbmQgcmVwYXJlbnRpbmcsIHNvIHRob3NlIHdhcnJhbnQgY2FyZWZ1bCBhdHRlbnRpb24gbGF0ZXIuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBrZXkgZnVuY3Rpb25zOiBgbW9kX2xydXZlY19zdGF0ZWAgYW5kIGBtb2RfbWVtY2dfc3RhdGVgLiBBcmUgdGhleSBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgc3Vic3lzdGVtLCBvciBhcmUgdGhleSBicm9hZGx5IHVzZWQ/IFRoZSBmYWN0IHRoYXQgYG1vZF9scnV2ZWNfcGFnZV9zdGF0ZWAgaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBgbW1gIGNvZGUgc2VlbXMgc2lnbmlmaWNhbnQuIEhtbSwgYW5kIHRoZW4gYGNvdW50X3NoYWRvd19ub2Rlc2AgaXMgaW4gYG1tL3dvcmtpbmdzZXQuY2AsIHRoYXQncyBhIGJpdCB1bmV4cGVjdGVkLiBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zIGluIHRob3NlIHR3byBmaWxlcyB0aGF0IGFyZSByZWxldmFudC5cblxuUmlnaHQsIHRpbWUgdG8gZGlnIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1vdGl2YXRpb24gYmVoaW5kIHRoZSBjaGFuZ2UuIEkgbmVlZCB0byBsb29rIGF0IHRoZSBjb21taXQgbWVzc2FnZSBhbmQgY29udGV4dCB0byBzZWUgd2h5IHRoZSBwYXRjaCB0b3VjaGVkIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCBhbmQgYGNvdW50X3NoYWRvd19ub2Rlc2AuIFRoYXQncyB0aGUgY3J1Y2lhbCBsaW5rIGhlcmUsIGxpbmtpbmcgd2hhdCBpbml0aWFsbHkgbG9va2VkIHRvIGJlIHJlbGF0ZWQgcGFydHMuIFVsdGltYXRlbHksIHRoZSBmb2N1cyBoYXMgdG8gYmUgb24gYHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsYCwgYHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbGAsIGFuZCBgbWVtY2dfb2ZmbGluZV9rbWVtYCwgb3IgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgIHRvIHVuZGVyc3RhbmQgd2hhdCdzIHJlYWxseSBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NzksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MDI6MjEuNDAyMjUwODAxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTUxMjQwODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVwYXJlbnRfbWVtY2dfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLXYxLmM9MTg3MD12b2lkIHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTg3NC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShtZW1jZzFfc3RhdHMpOyBpKyspXFxubW0vbWVtY29udHJvbC12MS5jOjE4NzU6XFx0XFx0cmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCwgbWVtY2cxX3N0YXRzW2ldKTtcXG5tbS9tZW1jb250cm9sLXYxLmMtMTg3Ni19XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MTg3OD12b2lkIHJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4ODItXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSsrKVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxODgzOlxcdFxcdHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50LCBpKTtcXG5tbS9tZW1jb250cm9sLXYxLmMtMTg4NC19XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmg9NjY9dm9pZCByZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCk7XFxubW0vbWVtY29udHJvbC12MS5oLTY3LVxcbm1tL21lbWNvbnRyb2wtdjEuaDo2ODp2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLXYxLmgtNjktXFx0XFx0XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeCk7XFxubW0vbWVtY29udHJvbC12MS5oOjcwOnZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLXYxLmgtNzEtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU3ND1zdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3Ni1cXG5tbS9tZW1jb250cm9sLmM6NTc3OnZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLmMtNTc4LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTkyNT11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTk0MC1cXG5tbS9tZW1jb250cm9sLmM6OTQxOnZvaWQgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL21lbWNvbnRyb2wuYy05NDItXFx0XFx0XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MDI6MjEuNTE3Mzc4OTg5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0NDk3MzQ0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFJlY2VudCBDaGFuZ2VzIHRvIE1lbW9yeSBNYW5hZ2VtZW50IGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgc2NhbiBwb2ludHMgbWUgdG93YXJkcyBzb21lIGludGVyZXN0aW5nIG1vZGlmaWNhdGlvbnMgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUuIEkgc2VlIHRoYXQgdGhlIGBjb3VudF9zaGFkb3dfbm9kZXNgIGZ1bmN0aW9uIGluIGBtbS93b3JraW5nc2V0LmNgIGlzIGJlaW5nIGRpcmVjdGx5IGFsdGVyZWQsIHdoaWNoIGFsd2F5cyBwaXF1ZXMgbXkgaW50ZXJlc3QgYXMgc2hhZG93IG5vZGVzIGFyZSBwcmV0dHkgZnVuZGFtZW50YWwgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIHdvcmtpbmdzZXQgaXMgbWFuYWdlZC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBkZWVtZWQgbmVjZXNzYXJ5LCBhbmQgaG93IGl0IGltcGFjdHMgb3ZlcmFsbCBwZXJmb3JtYW5jZS5cblxuVGhlbiwgSSd2ZSBnb3QgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgIGluIGBtbS9tZW1jb250cm9sLmNgIGJlaW5nIG1vZGlmaWVkLiBOb3Qgc3VycHJpc2luZyB0byBzZWUgY2hhbmdlcyBoZXJlLCBvZiBjb3Vyc2UsIGdpdmVuIGl0J3MgY2FsbGVkIGJ5IGBtb2RfbWVtY2dfc3RhdGVgIGFuZCBgbW9kX21lbWNnX2xydXZlY19zdGF0ZWAuIE1vZGlmaWNhdGlvbnMgdG8gdGhlc2UgY2FsbHMgY2FuIGJlIGEgbGl0dGxlIHRyaWNreSBiZWNhdXNlIG9mIHRoZSB3YXkgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIGFmZmVjdCB0aGluZ3MuIEkga25vdyB0aGVzZSBmdW5jdGlvbnMgZGVhbCB3aXRoIHN0YXRlcyBvZiBtZW1vcnkgY29udHJvbCBncm91cHMsIHNvIGl0IGlzIGxpa2VseSB0aGVzZSB0d28gZnVuY3Rpb25zIGFyZSBjbG9zZWx5IGxpbmtlZCB0byBtZW1vcnkgYWNjb3VudGluZyBhbmQgTFJVIG1hbmFnZW1lbnQgd2l0aGluIGEgbWVtb3J5IGNvbnRyb2wgZ3JvdXAuIFRoYXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBtb3JlIGRlZXBseSwgYW5kIGhvdyBpdCBpbXBhY3RzIGhvdyB0aGluZ3MgbW92ZSBhcm91bmQuXG5cbkZpbmFsbHksIHRoZSBtZW50aW9ucyBvZiBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAsIGByZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsYCwgYW5kIGByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWxgIGFyZSByZWFsbHkgaW50cmlndWluZy4gT2ZmbGluaW5nIGEgbWVtY2cgYW5kIHJlcGFyZW50aW5nIHN0YXRlIGlzIGEgc2lnbmlmaWNhbnQgb3BlcmF0aW9uLCB0eXBpY2FsbHkgZG9uZSBkdXJpbmcgcmVzb3VyY2UgbWFuYWdlbWVudCBvcGVyYXRpb25zLCBvciBkeW5hbWljIGNoYW5nZXMgdG8gdGhlIHN5c3RlbS4gSSdtIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgZmlyc3QuIEl0IGlzIHRoZSBjYWxsIHRoYXQgYmVnaW5zIHRoZSBvZmZsaW5lIHByb2Nlc3MsIHNvIHVuZGVyc3RhbmRpbmcgdGhlIG1lY2hhbmlzbXMgdGhhdCB0cmlnZ2VyIGFuZCB0aGUgY2hhbmdlcyB0aGF0IHJlc3VsdCBmcm9tIHRoaXMgY2FsbCBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgYWxsIG9mIHRoaXMuIFdoYXQgaGFwcGVucyB3aGVuIGEgY2dyb3VwIGlzIHRha2VuIG9mZmxpbmU/IFdoYXQgaW1wbGljYXRpb25zIGRvZXMgdGhpcyBoYXZlIGZvciBwYWdlIG1pZ3JhdGlvbiwgcmVjbGFpbSwgYW5kIG92ZXJhbGwgcmVzb3VyY2UgYWxsb2NhdGlvbj8gTGV0J3MgZGl2ZSBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMTksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MDI6MjQuOTY3MTE2NDE0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTUzNTExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX2Nzc19vZmZsaW5lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NDI5Nz1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQzNzMtXFxubW0vbWVtY29udHJvbC5jOjQzNzQ6c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbm1tL21lbWNvbnRyb2wuYy00Mzc1LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MTg2PXN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MTg4LVxcdC5jc3Nfb25saW5lID0gbWVtX2Nncm91cF9jc3Nfb25saW5lLFxcbm1tL21lbWNvbnRyb2wuYzo1MTg5OlxcdC5jc3Nfb2ZmbGluZSA9IG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUsXFxubW0vbWVtY29udHJvbC5jLTUxOTAtXFx0LmNzc19yZWxlYXNlZCA9IG1lbV9jZ3JvdXBfY3NzX3JlbGVhc2VkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjoyNS4wMzY2NTYzMTNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTczNTE1Njk3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTWVtb3J5IENvbnRyb2wgd2l0aCBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgY2dyb3VwJ3MgQ1NTIChDb250cm9sIEdyb3VwIFN1YnN5c3RlbSkgaGFuZGxlcyBnb2luZyBvZmZsaW5lLiBNeSBpbnN0aW5jdCBpcyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgbWVtb3J5IGNncm91cCBtYW5hZ2VtZW50LCBhbmQsIGJ5IGV4dGVuc2lvbiwgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYC4gVGhhdCBmdW5jdGlvbiB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3RhdGUgdHJhbnNpdGlvbnMgYW5kIHJlc291cmNlIHJlbGVhc2UgYXMgYSBtZW1vcnkgY2dyb3VwIGdvZXMgb2ZmbGluZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIGR1cmluZyB0aGlzIG9mZmxpbmUgc3RhdGUgYmVjYXVzZSBJIGhhdmUgYW4gaW50ZXJlc3QgaW4gc29tZSBlZGdlLWNhc2UgYmVoYXZpb3IgdGhhdCBtaWdodCBiZSBpbXBhY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwNDYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjoyNi43NzE4MTY0NDVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMwNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MzcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MzcwOlxcdFxcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9yZW1vdmUobWVtY2cpO1xcbjQzNzE6XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNDM3MjpcXHR9XFxuNDM3MzpcXHRcXG40Mzc0OlxcdHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG40Mzc1OlxcdHtcXG40Mzc2OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MoY3NzKTtcXG40Mzc3OlxcdFxcbjQzNzg6XFx0XFx0bWVtY2cxX2Nzc19vZmZsaW5lKG1lbWNnKTtcXG40Mzc5OlxcdFxcbjQzODA6XFx0XFx0cGFnZV9jb3VudGVyX3NldF9taW4oXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIDApO1xcbjQzODE6XFx0XFx0cGFnZV9jb3VudGVyX3NldF9sb3coXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIDApO1xcbjQzODI6XFx0XFxuNDM4MzpcXHRcXHR6c3dhcF9tZW1jZ19vZmZsaW5lX2NsZWFudXAobWVtY2cpO1xcbjQzODQ6XFx0XFxuNDM4NTpcXHRcXHRtZW1jZ19vZmZsaW5lX2ttZW0obWVtY2cpO1xcbjQzODY6XFx0XFx0LypcXG40Mzg3OlxcdFxcdCAqIFRoZSByZXBhcmVudGluZyBvZiBvYmpjZyBtdXN0IGJlIGFmdGVyIHRoZSByZXBhcmVudGluZyBvZlxcbjQzODg6XFx0XFx0ICogdGhlIGxpc3RfbHJ1IGluIG1lbWNnX29mZmxpbmVfa21lbSgpLCB3aGljaCBlbnN1cmVzIHRoYXRcXG40Mzg5OlxcdFxcdCAqIHRoZXkgd2lsbCBub3QgbWlzdGFrZW5seSBnZXQgdGhlIHBhcmVudCBsaXN0X2xydS5cXG40MzkwOlxcdFxcdCAqL1xcbjQzOTE6XFx0XFx0bWVtY2dfcmVwYXJlbnRfb2JqY2dzKG1lbWNnKTtcXG40MzkyOlxcdFxcdHJlcGFyZW50X3Nocmlua2VyX2RlZmVycmVkKG1lbWNnKTtcXG40MzkzOlxcdFxcdHdiX21lbWNnX29mZmxpbmUobWVtY2cpO1xcbjQzOTQ6XFx0XFx0bHJ1X2dlbl9vZmZsaW5lX21lbWNnKG1lbWNnKTtcXG40Mzk1OlxcdFxcbjQzOTY6XFx0XFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcXG40Mzk3OlxcdFxcbjQzOTg6XFx0XFx0bWVtX2Nncm91cF9wcml2YXRlX2lkX3B1dChtZW1jZywgMSk7XFxuNDM5OTpcXHR9XFxuNDQwMDpcXHRcXG40NDAxOlxcdHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JlbGVhc2VkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuNDQwMjpcXHR7XFxuNDQwMzpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKGNzcyk7XFxuNDQwNDpcXHRcXG40NDA1OlxcdFxcdGludmFsaWRhdGVfcmVjbGFpbV9pdGVyYXRvcnMobWVtY2cpO1xcbjQ0MDY6XFx0XFx0bHJ1X2dlbl9yZWxlYXNlX21lbWNnKG1lbWNnKTtcXG40NDA3OlxcdH1cXG40NDA4OlxcdFxcbjQ0MDk6XFx0c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfZnJlZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjoyNi43NzIzNDk4NjVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY0Mjk0MTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBwcmltYXJ5IGdvYWwgaXMgdG8gaWRlbnRpZnkgcHJvbWlzaW5nIGZ1enppbmcgdGFyZ2V0cyB3aXRoaW4gdGhlIGtlcm5lbCwgZm9jdXNpbmcgb24gYXJlYXMgdG91Y2hlZCBieSB0aGlzIHBhdGNoLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyBhZmZlY3RlZC4gSSBzZWUgZm91cjogYGNvdW50X3NoYWRvd19ub2Rlc2AgKGluIGBtbS93b3JraW5nc2V0LmNgKSwgYG1vZF9tZW1jZ19zdGF0ZWAgYW5kIGBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlYCAoYm90aCBpbiBgbW0vbWVtY29udHJvbC5jYCksIGFuZCBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgKGFsc28gaW4gYG1tL21lbWNvbnRyb2wuY2ApLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZWlyIHNjb3BlIGFuZCBpZiBTeXprYWxsZXIgY2FuIHRyYWNrIHRoZW0uXG5cbkkgbm90ZSB0aGF0IGBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlYCBpcyBzdGF0aWMgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGUgc2FtZSBpcyB0cnVlIGZvciBgY291bnRfc2hhZG93X25vZGVzYCBhbmQgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgLiBUaGUgYG1vZF9tZW1jZ19zdGF0ZWAgc3ltYm9sLCBob3dldmVyLCBpcyBub3Qgc3RhdGljLiBTeXprYWxsZXIgKmNhbiogdHJhY2sgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5J3JlIGNvbXBpbGVkIHN5bWJvbHMsIHNvIHRoaXMgc2hvdWxkbid0IGJlIGEgcHJvYmxlbS5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbnNpZGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBUaGlzIHBhdGNoIHNlZW1zIHRvIHJlbGF0ZSB0byBtZW1vcnkgY2dyb3Vwcy4gVGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBgTUVNQ0dgLiBJIGhhdmUgdG8gYXNrIG15c2VsZiBpZiB0aGVyZSBhcmUgb3RoZXIgZGVwZW5kZW5jaWVzLCBwb3RlbnRpYWxseSBzb21ldGhpbmcgbGlrZSBgTUVNQ0dfVjFgLiBUaGUgcGF0Y2ggZGVhbHMgd2l0aCBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAsIHdoaWNoIHNlZW1zIHRvIGJlIGVuYWJsZWQgdW5jb25kaXRpb25hbGx5IG5vdywgc28gdGVzdGluZyB3aXRoIGp1c3QgYE1FTUNHYCBzZWVtcyBzdWZmaWNpZW50LCBhbmQgaXQgbWlnaHQgYmUgYSBnb29kIGlkZWEgdG8gaW5jbHVkZSBgTUVNQ0dfVjFgIGFzIHdlbGwuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IGFsbCB0aGUgZnV6emluZyBjcml0ZXJpYS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZSB0YXJnZXRzIGFyZTpcblxuKiAgICoqUmVhY2hhYmxlOioqIFRoZSBgbW0vYCBkaXJlY3RvcnkgaXMgY29yZSBrZXJuZWwgY29kZSwgc28gaXQncyBsaWtlbHkgdG8gYmUgcmVhY2hlZCBvbiBhbWQ2NCBrZXJuZWxzIGluIFFFTVUvR0NFLlxuKiAgICoqV29ydGhGdXp6aW5nOioqIEFic29sdXRlbHkuIE1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgYWNjb3VudGluZyBhcmUgY3JpdGljYWwgYW5kIG9mdGVuIGhhdmUgc3VidGxlLCBleHBsb2l0YWJsZSBidWdzLlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIENvbmZpcm1lZCBhcyB0aGUgZm91ciBwcmV2aW91c2x5IG1lbnRpb25lZC5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYE1FTUNHYC5cblxuRmluYWxseSwgYSBxdWljayBzYW5pdHkgY2hlY2sgb2YgbXkgcmVhc29uaW5nLiBUaGUgcGF0Y2ggdG91Y2hlcyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGFjY291bnRpbmc6IHJlbW92aW5nIHRoZSBjb25kaXRpb25hbCBmb3IgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKWAgYW5kIGBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZCgpYCBpbXBsaWVzIHRoYXQgdGhlIGFuY2VzdG9yIHRyYXZlcnNhbCBvZiBkeWluZyBtZW1jZ3MgaXMgYXBwbGllZCBnZW5lcmFsbHkuIE1vZGlmeWluZyBgY291bnRfc2hhZG93X25vZGVzKClgIHRvIHVzZSBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoKWAgaW5kaWNhdGVzIGNoYW5nZXMgdG8gaG93IHBhZ2Ugc3RhdGUgaXMgY29tcHV0ZWQgZm9yIExSVSBsaXN0cy4gVGhlc2UgYXJlIGNvcmUgYXJlYXMsIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IHJlY2xhaW0gYW5kIHNocmlua2VyIG9wZXJhdGlvbnMsIGFuZCBsaWtlbHkgd2lsbCBiZSB0b3VjaGVkLlxuXG5FdmVyeXRoaW5nIGNoZWNrcyBvdXQuIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTA1LCJPdXRwdXRUb2tlbnMiOjE2OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAyOjMyLjQxNTI5MzY4NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDE2OTE4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb3VudF9zaGFkb3dfbm9kZXNcIixcbiAgICBcIm1vZF9tZW1jZ19zdGF0ZVwiLFxuICAgIFwibW9kX21lbWNnX2xydXZlY19zdGF0ZVwiLFxuICAgIFwibWVtX2Nncm91cF9jc3Nfb2ZmbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgYW5kIHBhZ2UgY2FjaGUgd29ya2luZ3NldCBjYWxjdWxhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBlbmFibGVzIGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKSByZWRpcmVjdGlvbiB1bmNvbmRpdGlvbmFsbHkgYWNyb3NzIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMgaW4gbW0vbWVtY29udHJvbC5jIGFuZCBtb2RpZmllcyBjb3VudF9zaGFkb3dfbm9kZXMoKSBpbiBtbS93b3JraW5nc2V0LmMgdG8gcXVlcnkgbG9jYWwgbHJ1dmVjIHBhZ2Ugc3RhdGUgcmF0aGVyIHRoYW4gem9uZS1iYXNlZCBMUlUgc2l6ZXMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIHRlYXJkb3duL3JlY2xhaW0gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb3VudF9zaGFkb3dfbm9kZXNcIixcbiAgICBcIm1vZF9tZW1jZ19zdGF0ZVwiLFxuICAgIFwibW9kX21lbWNnX2xydXZlY19zdGF0ZVwiLFxuICAgIFwibWVtX2Nncm91cF9jc3Nfb2ZmbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgYW5kIHBhZ2UgY2FjaGUgd29ya2luZ3NldCBjYWxjdWxhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBlbmFibGVzIGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKSByZWRpcmVjdGlvbiB1bmNvbmRpdGlvbmFsbHkgYWNyb3NzIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMgaW4gbW0vbWVtY29udHJvbC5jIGFuZCBtb2RpZmllcyBjb3VudF9zaGFkb3dfbm9kZXMoKSBpbiBtbS93b3JraW5nc2V0LmMgdG8gcXVlcnkgbG9jYWwgbHJ1dmVjIHBhZ2Ugc3RhdGUgcmF0aGVyIHRoYW4gem9uZS1iYXNlZCBMUlUgc2l6ZXMuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIHRlYXJkb3duL3JlY2xhaW0gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAyOjMyLjU0OTQ3NjIwM1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMzg2ODg1OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjozMi41NTAzMjc4NTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNjIzNzgzMDUwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtY2cgc3RhdHMgYWNjb3VudGluZyBhbmQgc2hhZG93IG5vZGUgY2FsY3VsYXRpb24gaW4gbW0vbWVtY29udHJvbC5jIGFuZCBtbS93b3JraW5nc2V0LmMuIFNwZWNpZmljYWxseSwgaXQgZ2VuZXJhbGl6ZXMgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKWAgdG8gaGFuZGxlIGFsbCBjZ3JvdXBzIGhpZXJhcmNoaWVzIGFuZCB1c2VzIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbCgpYCBmb3Igd29ya2luZ3NldCBzaGFkb3cgbm9kZSBjb3VudGluZy5cXG5cXG5ObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkLCBub3IgYXJlIHRoZXJlIGFueSBpbmZvLWxlYWtzLCBzdHJ1Y3QgcGFkZGluZyBleHBvc3VyZXMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIHBvaW50ZXIgaXNzdWVzIChzdWNoIGFzIFJDVSBsb2NraW5nIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSkgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzc2NmJjYTIyMWE1M2NiYWFhMDc3MWYzN2MwYTE0MWY4NzBkODY3YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTk6MDE6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDg2ZmY1ODBjNzAxODMuLmRmNDNlNjFjOWViYzEgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTg0NSwxNiArODQ1LDIxIEBAIHN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcbiBcdHJldHVybiB2YWwgXHUwMDNjIDAgPyAtcmVzIDogcmVzO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG4gLypcbi0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoXG4tICogcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuXG4rICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2VcbisgKiB3aXRoIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLiAgT2ZmbGluaW5nIGFcbisgKiBtZW1jZyBpcyByYXJlLCBzbyBkbyB0aGUgcmVkaXJlY3Rpb24gZm9yIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHRcdFx0XHQgICBib29sICpyY3VfbG9ja2VkKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKlxuK2dldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxuIHtcbi1cdC8qIFJlYmluZGluZyBjYW4gY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUgKi9cbi1cdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7XG4rXHQvKlxuK1x0ICogRmFzdCBwYXRoOiB0aGUgY2FsbGVyIGhvbGRzIGEgcmVmZXJlbmNlIHRvIEBtZW1jZywgc28gcmVhZGluZ1xuK1x0ICogaXRzIENTU19EWUlORyBmbGFnIHdpdGhvdXQgdGhlIFJDVSBsb2NrIGlzIHNhZmUuICBUaGUgUkNVIGxvY2tcbitcdCAqIGlzIG9ubHkgbmVlZGVkIHRvIHdhbGsgdXAgdG8gYSBub24tZHlpbmcgYW5jZXN0b3IsIHdoaWNoXG4rXHQgKiBoYXBwZW5zIG9ubHkgd2hpbGUgYSBtZW1jZyBpcyBhY3R1YWxseSBiZWluZyBvZmZsaW5lZC5cbitcdCAqL1xuK1x0aWYgKCFtZW1jZ19pc19keWluZyhtZW1jZykpIHtcbiBcdFx0KnJjdV9sb2NrZWQgPSBmYWxzZTtcbiBcdFx0cmV0dXJuIG1lbWNnO1xuIFx0fVxuQEAgLTg3NSwxNyArODgwLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZClcbiBcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0XHRcdFx0ICAgYm9vbCAqcmN1X2xvY2tlZClcbi17XG4tXHRyZXR1cm4gbWVtY2c7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpXG4te1xuLX1cbi0jZW5kaWZcbiBcbiBzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0ICAgICAgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbClcbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcbmluZGV4IDdhYzJiODhjODBhZTUuLjg0MTJmNDg0MGFlMzUgMTAwNjQ0XG4tLS0gYS9tbS93b3JraW5nc2V0LmNcbisrKyBiL21tL3dvcmtpbmdzZXQuY1xuQEAgLTY4OCwxMCArNjg4LDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4gXG4gXHRcdG1lbV9jZ3JvdXBfZmx1c2hfc3RhdHNfcmF0ZWxpbWl0ZWQoc2MtXHUwMDNlbWVtY2cpO1xuIFx0XHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhzYy1cdTAwM2VtZW1jZywgTk9ERV9EQVRBKHNjLVx1MDAzZW5pZCkpO1xuLVxuIFx0XHRmb3IgKHBhZ2VzID0gMCwgaSA9IDA7IGkgXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSsrKVxuLVx0XHRcdHBhZ2VzICs9IGxydXZlY19scnVfc2l6ZShscnV2ZWMsIGksIE1BWF9OUl9aT05FUyAtIDEpO1xuLVxuK1x0XHRcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYyxcbitcdFx0XHRcdFx0XHRcdCBOUl9MUlVfQkFTRSArIGkpO1xuIFx0XHRwYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChcbiBcdFx0XHRscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHRcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MDI6MzIuNTUwMzI5ODEzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMDU0OTk1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLlxuXG4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIFJlbGV2YW5jZSoqXG5cblJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIGFzc2Vzc2luZyBpZiBLZXJuZWwgTWVtb3J5IFNhbml0aXplciAoS01TQU4pIGlzIHdhcnJhbnRlZCBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzIHRvIGRldGVybWluZSB0aGUgbGlrZWxpaG9vZCBvZiBtZW1vcnkgc2FmZXR5IGlzc3Vlcy5cblxuSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggdG91Y2hlcyBgbW0vbWVtY29udHJvbC5jYCBhbmQgYG1tL3dvcmtpbmdzZXQuY2AuIFRob3NlIGFyZSBpbXBvcnRhbnQgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSDigJMgdGhpbmdzIHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cHMgYW5kIHdvcmtpbmcgc2V0IHRyYWNraW5nLCByZXNwZWN0aXZlbHkuIEhtbSwgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rLiBJJ2xsIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGNvbnRleHQgYXJvdW5kIGxpbmUgODQ1IGluIGBtbS9tZW1jb250cm9sLmNgIGFuZCBsaW5lIDY4OCBpbiBgbW0vd29ya2luZ3NldC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY3J1Y2lhbCBjb250ZXh0IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIG9wZXJhdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyBiZWluZyBtb2RpZmllZC4gS25vd2luZyAqd2hhdCogaXMgYmVpbmcgY2hhbmdlZCwgYW5kICpob3cqLCB3aWxsIGJlIGtleSB0byBzcG90dGluZyBhbnkgcG90ZW50aWFsIG1lbW9yeS1yZWxhdGVkIHZ1bG5lcmFiaWxpdGllcyB0aGF0IEtNU0FOIHdvdWxkIGJlIGdvb2QgYXQgaWRlbnRpZnlpbmcuIEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBjaGFuZ2VzIGluIG1lbW9yeSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIG9yIGRhdGEgYWNjZXNzIHBhdHRlcm5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODU3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjozNS44NTU4MzI1NTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIyNDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NDA6XFx0XFx0LyogR2V0IHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiAodmFsICogdW5pdCAvIFBBR0VfU0laRSkuICovXFxuIDg0MTpcXHRcXHRyZXMgPSBtdWx0X2ZyYWMoYWJzKHZhbCksIHVuaXQsIFBBR0VfU0laRSk7XFxuIDg0MjpcXHRcXHQvKiBSb3VuZCB1cCB6ZXJvIHZhbHVlcy4gKi9cXG4gODQzOlxcdFxcdHJlcyA9IHJlcyA/IDogMTtcXG4gODQ0OlxcdFxcbiA4NDU6XFx0XFx0cmV0dXJuIHZhbCBcXHUwMDNjIDAgPyAtcmVzIDogcmVzO1xcbiA4NDY6XFx0fVxcbiA4NDc6XFx0XFxuIDg0ODpcXHQvKlxcbiA4NDk6XFx0ICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2VcXG4gODUwOlxcdCAqIHdpdGggcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuICBPZmZsaW5pbmcgYVxcbiA4NTE6XFx0ICogbWVtY2cgaXMgcmFyZSwgc28gZG8gdGhlIHJlZGlyZWN0aW9uIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLlxcbiA4NTI6XFx0ICovXFxuIDg1MzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcXG4gODU0OlxcdGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxcbiA4NTU6XFx0e1xcbiA4NTY6XFx0XFx0LypcXG4gODU3OlxcdFxcdCAqIEZhc3QgcGF0aDogdGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byBAbWVtY2csIHNvIHJlYWRpbmdcXG4gODU4OlxcdFxcdCAqIGl0cyBDU1NfRFlJTkcgZmxhZyB3aXRob3V0IHRoZSBSQ1UgbG9jayBpcyBzYWZlLiAgVGhlIFJDVSBsb2NrXFxuIDg1OTpcXHRcXHQgKiBpcyBvbmx5IG5lZWRlZCB0byB3YWxrIHVwIHRvIGEgbm9uLWR5aW5nIGFuY2VzdG9yLCB3aGljaFxcbiA4NjA6XFx0XFx0ICogaGFwcGVucyBvbmx5IHdoaWxlIGEgbWVtY2cgaXMgYWN0dWFsbHkgYmVpbmcgb2ZmbGluZWQuXFxuIDg2MTpcXHRcXHQgKi9cXG4gODYyOlxcdFxcdGlmICghbWVtY2dfaXNfZHlpbmcobWVtY2cpKSB7XFxuIDg2MzpcXHRcXHRcXHQqcmN1X2xvY2tlZCA9IGZhbHNlO1xcbiA4NjQ6XFx0XFx0XFx0cmV0dXJuIG1lbWNnO1xcbiA4NjU6XFx0XFx0fVxcbiA4NjY6XFx0XFxuIDg2NzpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDg2ODpcXHRcXHQqcmN1X2xvY2tlZCA9IHRydWU7XFxuIDg2OTpcXHRcXG4gODcwOlxcdFxcdHdoaWxlIChtZW1jZ19pc19keWluZyhtZW1jZykpXFxuIDg3MTpcXHRcXHRcXHRtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcXG4gODcyOlxcdFxcbiA4NzM6XFx0XFx0cmV0dXJuIG1lbWNnO1xcbiA4NzQ6XFx0fVxcbiA4NzU6XFx0XFxuIDg3NjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxcbiA4Nzc6XFx0e1xcbiA4Nzg6XFx0XFx0aWYgKCFyY3VfbG9ja2VkKVxcbiA4Nzk6XFx0XFx0XFx0cmV0dXJuO1xcbiA4ODA6XFx0XFxuIDg4MTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gODgyOlxcdH1cXG4gODgzOlxcdFxcbiA4ODQ6XFx0c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiA4ODU6XFx0XFx0XFx0XFx0ICAgICAgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbClcXG4gODg2OlxcdHtcXG4gODg3OlxcdFxcdGludCBpID0gbWVtY2dfc3RhdHNfaW5kZXgoaWR4KTtcXG4gODg4OlxcdFxcdGludCBjcHU7XFxuIDg4OTpcXHRcXG4gODkwOlxcdFxcdGlmIChXQVJOX09OQ0UoQkFEX1NUQVRfSURYKGkpLCBcXFwiJXM6IG1pc3Npbmcgc3RhdCBpdGVtICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgaWR4KSlcXG4gODkxOlxcdFxcdFxcdHJldHVybjtcXG4gODkyOlxcdFxcbiA4OTM6XFx0XFx0Y3B1ID0gZ2V0X2NwdSgpO1xcbiA4OTQ6XFx0XFxuIDg5NTpcXHRcXHR0aGlzX2NwdV9hZGQobWVtY2ctXFx1MDAzZXZtc3RhdHNfcGVyY3B1LVxcdTAwM2VzdGF0ZVtpXSwgdmFsKTtcXG4gODk2OlxcdFxcdHZhbCA9IG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpZHgsIHZhbCk7XFxuIDg5NzpcXHRcXHRtZW1jZ19yc3RhdF91cGRhdGVkKG1lbWNnLCB2YWwsIGNwdSk7XFxuIDg5ODpcXHRcXG4gODk5OlxcdFxcdHRyYWNlX21vZF9tZW1jZ19zdGF0ZShtZW1jZywgaWR4LCB2YWwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjozNS44NTYzNTg2M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTMyNjE2NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgU3Vic3lzdGVtKipcblxuT2theSwgc28gd2UncmUgZGlnZ2luZyBkZWVwIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGFuZCBteSBmb2N1cyBpcyBjdXJyZW50bHkgb24gYG1tL3dvcmtpbmdzZXQuY2AuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgaG93IHRoZSB3b3JraW5nIHNldCBtZWNoYW5pc20gaXMgaW1wbGVtZW50ZWQsIGFuZCBJIHJlY2FsbCBzb21lIHNwZWNpZmljIGxvZ2ljIGFyb3VuZCBsaW5lIDY4MCB0aGF0J3MgYmVlbiBuYWdnaW5nIGF0IG1lLiBUaW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoYXQgc2VjdGlvbiwgbWF5YmUgc29tZSBpbnNpZ2h0cyB3aWxsIGNsaWNrIGFzIEkgcmVyZWFkIHRoYXQgcGFydCBvZiB0aGUgZmlsZS4gSSBzdXNwZWN0IHRoYXQgdGhlcmUgYXJlIGNydWNpYWwgZGV0YWlscyByZWxhdGVkIHRvIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSB3b3JraW5nIHNldCBzaXplLCBwYWdlIHJlcGxhY2VtZW50LCBhbmQgcGVyaGFwcyB0aGUgbnVhbmNlcyBvZiBob3cgdGhlIGtlcm5lbCBpZGVudGlmaWVzIHBhZ2VzIHRoYXQgYmVsb25nIGluIHRoZSB3b3JraW5nIHNldCB0aGVyZS4gVGltZSB0byBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNjgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAyOjM3Ljc4ODk3ODA4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTA5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vd29ya2luZ3NldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY3MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY3MDpcXHRcXHQgKiBpbmFjdGl2ZSBsaXN0LiBBc3N1bWUgdGhlIHRvdGFsIGNhY2hlIHNpemUgZm9yIHRoYXQuXFxuIDY3MTpcXHRcXHQgKlxcbiA2NzI6XFx0XFx0ICogTm9kZXMgbWlnaHQgYmUgc3BhcnNlbHkgcG9wdWxhdGVkLCB3aXRoIG9ubHkgb25lIHNoYWRvd1xcbiA2NzM6XFx0XFx0ICogZW50cnkgaW4gdGhlIGV4dHJlbWUgY2FzZS4gT2J2aW91c2x5LCB3ZSBjYW5ub3Qga2VlcCBvbmVcXG4gNjc0OlxcdFxcdCAqIG5vZGUgZm9yIGV2ZXJ5IGVsaWdpYmxlIHNoYWRvdyBlbnRyeSwgc28gY29tcHJvbWlzZSBvbiBhXFxuIDY3NTpcXHRcXHQgKiB3b3JzdC1jYXNlIGRlbnNpdHkgb2YgMS84dGguIEJlbG93IHRoYXQsIG5vdCBhbGwgZWxpZ2libGVcXG4gNjc2OlxcdFxcdCAqIHJlZmF1bHRzIGNhbiBiZSBkZXRlY3RlZCBhbnltb3JlLlxcbiA2Nzc6XFx0XFx0ICpcXG4gNjc4OlxcdFxcdCAqIE9uIDY0LWJpdCB3aXRoIDcgeGFfbm9kZXMgcGVyIHBhZ2UgYW5kIDY0IHNsb3RzXFxuIDY3OTpcXHRcXHQgKiBlYWNoLCB0aGlzIHdpbGwgcmVjbGFpbSBzaGFkb3cgZW50cmllcyB3aGVuIHRoZXkgY29uc3VtZVxcbiA2ODA6XFx0XFx0ICogfjEuOCUgb2YgYXZhaWxhYmxlIG1lbW9yeTpcXG4gNjgxOlxcdFxcdCAqXFxuIDY4MjpcXHRcXHQgKiBQQUdFX1NJWkUgLyB4YV9ub2RlcyAvIG5vZGVfZW50cmllcyAqIDggLyBQQUdFX1NJWkVcXG4gNjgzOlxcdFxcdCAqL1xcbiA2ODQ6XFx0I2lmZGVmIENPTkZJR19NRU1DR1xcbiA2ODU6XFx0XFx0aWYgKHNjLVxcdTAwM2VtZW1jZykge1xcbiA2ODY6XFx0XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbiA2ODc6XFx0XFx0XFx0aW50IGk7XFxuIDY4ODpcXHRcXG4gNjg5OlxcdFxcdFxcdG1lbV9jZ3JvdXBfZmx1c2hfc3RhdHNfcmF0ZWxpbWl0ZWQoc2MtXFx1MDAzZW1lbWNnKTtcXG4gNjkwOlxcdFxcdFxcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLVxcdTAwM2VtZW1jZywgTk9ERV9EQVRBKHNjLVxcdTAwM2VuaWQpKTtcXG4gNjkxOlxcdFxcdFxcdGZvciAocGFnZXMgPSAwLCBpID0gMDsgaSBcXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSsrKVxcbiA2OTI6XFx0XFx0XFx0XFx0cGFnZXMgKz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwobHJ1dmVjLFxcbiA2OTM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IE5SX0xSVV9CQVNFICsgaSk7XFxuIDY5NDpcXHRcXHRcXHRwYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChcXG4gNjk1OlxcdFxcdFxcdFxcdGxydXZlYywgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiA2OTY6XFx0XFx0XFx0cGFnZXMgKz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXFxuIDY5NzpcXHRcXHRcXHRcXHRscnV2ZWMsIE5SX1NMQUJfVU5SRUNMQUlNQUJMRV9CKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiA2OTg6XFx0XFx0fSBlbHNlXFxuIDY5OTpcXHQjZW5kaWZcXG4gNzAwOlxcdFxcdFxcdHBhZ2VzID0gbm9kZV9wcmVzZW50X3BhZ2VzKHNjLVxcdTAwM2VuaWQpO1xcbiA3MDE6XFx0XFxuIDcwMjpcXHRcXHRtYXhfbm9kZXMgPSBwYWdlcyBcXHUwMDNlXFx1MDAzZSAoWEFfQ0hVTktfU0hJRlQgLSAzKTtcXG4gNzAzOlxcdFxcbiA3MDQ6XFx0XFx0aWYgKG5vZGVzIFxcdTAwM2M9IG1heF9ub2RlcylcXG4gNzA1OlxcdFxcdFxcdHJldHVybiAwO1xcbiA3MDY6XFx0XFx0cmV0dXJuIG5vZGVzIC0gbWF4X25vZGVzO1xcbiA3MDc6XFx0fVxcbiA3MDg6XFx0XFxuIDcwOTpcXHRzdGF0aWMgZW51bSBscnVfc3RhdHVzIHNoYWRvd19scnVfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxcbiA3MTA6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9scnVfb25lICpscnUsXFxuIDcxMTpcXHRcXHRcXHRcXHRcXHRcXHQgIHZvaWQgKmFyZykgX19tdXN0X2hvbGQobHJ1LVxcdTAwM2Vsb2NrKVxcbiA3MTI6XFx0e1xcbiA3MTM6XFx0XFx0c3RydWN0IHhhX25vZGUgKm5vZGUgPSBjb250YWluZXJfb2YoaXRlbSwgc3RydWN0IHhhX25vZGUsIHByaXZhdGVfbGlzdCk7XFxuIDcxNDpcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MDI6MzcuNzkwOTMyMzZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA0Nzg1MjY5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgIFVzYWdlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRoaXMgc3VnZ2VzdHMgYSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgY29udHJvbCBzeXN0ZW0gaGFuZGxlcyB0aGUgc3RhcnQgb2YgYSBub24tZHlpbmcgbWVtb3J5IGNncm91cCwgYW5kIG1vcmUgc3BlY2lmaWNhbGx5LCB3aGF0IHRoZSBjYWxsZXIgaXMgZG9pbmcgd2l0aCB0aGUgcmVzdWx0LiBJIGV4cGVjdCB0byBzZWUgdGhpcyBmdW5jdGlvbiBiZWluZyB1c2VkIGluIGNyaXRpY2FsIHBhdGggbWVtb3J5IGFsbG9jYXRpb24gb3IgdHJhY2tpbmcsIGxpa2VseSBhcm91bmQgcmVjbGFpbSBvciByZXNvdXJjZSBhY2NvdW50aW5nIGR1cmluZyBjZ3JvdXAgbGlmZWN5Y2xlIGV2ZW50cy4gVGhlIGZvY3VzIGlzIGRlZmluaXRlbHkgb24gaWRlbnRpZnlpbmcgdGhlIGNyaXRpY2FsIGNhbGxzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29udGV4dCBvZiBlYWNoIGNhbGwsIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuIHJlZ2FyZGluZyBtZW1vcnkgbWFuYWdlbWVudCBzeW5jaHJvbml6YXRpb24gb3IgcmFjZSBjb25kaXRpb25zLCBnaXZlbiB0aGUgXCJub24tZHlpbmdcIiBuYXR1cmUgaW1wbGllcy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgc3VycHJpc2luZyB1c2VzLCBvciBhbnkgdXNhZ2UgcGF0dGVybnMgdGhhdCBJIGhhZG4ndCBjb25zaWRlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTY3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxOTowMjozOS44Mzg3ODg3NjdaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1ODgxMDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9ub25fZHlpbmdfbWVtY2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz04NTM9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqXFxubW0vbWVtY29udHJvbC5jOjg1NDpnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqcmN1X2xvY2tlZClcXG5tbS9tZW1jb250cm9sLmMtODU1LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy04NzUtXFxubW0vbWVtY29udHJvbC5jOjg3NjpzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxcbm1tL21lbWNvbnRyb2wuYy04Nzcte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTkxMD12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05MTctXFxubW0vbWVtY29udHJvbC5jOjkxODpcXHRtZW1jZyA9IGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQobWVtY2csIFxcdTAwMjZyY3VfbG9ja2VkKTtcXG5tbS9tZW1jb250cm9sLmMtOTE5LVxcdF9fbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIHZhbCk7XFxubW0vbWVtY29udHJvbC5jOjkyMDpcXHRnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChyY3VfbG9ja2VkKTtcXG5tbS9tZW1jb250cm9sLmMtOTIxLX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz05NzY9c3RhdGljIHZvaWQgbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtOTg1LVxcdHBuID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XFxubW0vbWVtY29udHJvbC5jOjk4NjpcXHRtZW1jZyA9IGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQocG4tXFx1MDAzZW1lbWNnLCBcXHUwMDI2cmN1X2xvY2tlZCk7XFxubW0vbWVtY29udHJvbC5jLTk4Ny1cXHRwbiA9IG1lbWNnLVxcdTAwM2Vub2RlaW5mb1twZ2RhdC1cXHUwMDNlbm9kZV9pZF07XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtOTkwLVxcbm1tL21lbWNvbnRyb2wuYzo5OTE6XFx0Z2V0X25vbl9keWluZ19tZW1jZ19lbmQocmN1X2xvY2tlZCk7XFxubW0vbWVtY29udHJvbC5jLTk5Mi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAyOjM5LjkxNDY3NDY4NloiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0Mjk1NjMxNzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBNZW1vcnkgQ29udHJvbCBhbmQgV29ya2luZyBTZXQgVXBkYXRlcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgcGF0Y2ggZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGZvY3VzZXMgb24gdGhlIGtleSBjaGFuZ2VzIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLCBzcGVjaWZpY2FsbHkgZnJvbSBhIG1lbW9yeSBtYW5hZ2VtZW50IHBlcnNwZWN0aXZlLlxuXG5GaXJzdCwgaW4gYG1tL21lbWNvbnRyb2wuY2AsIHRoZXkndmUgc3RyZWFtbGluZWQgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgLiBQcmV2aW91c2x5LCB0aGUgY29kZSBoYWQgYSBjb25kaXRpb25hbCBzdHJ1Y3R1cmUgYmFzZWQgb24gYENPTkZJR19NRU1DR19WMWAuIE5vdywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0J3MgdjEgb3IgdjIgY2dyb3VwcywgdGhlIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgYG1lbWNnYCBpcyBkeWluZyB1c2luZyBgbWVtY2dfaXNfZHlpbmcoKWAuIElmIGl0ICppcyogZHlpbmcsIGl0IHRyYXZlcnNlcyB1cCB0aGUgYW5jZXN0b3IgY2hhaW4gdW5kZXIgYW4gUkNVIHJlYWQgbG9jay4gVGhlIGNydWNpYWwgcG9pbnQgaGVyZSBpcyB0aGUgYHJjdV9sb2NrZWRgIGZsYWc7IGl0J3Mgc2V0IHRvIGBmYWxzZWAgaWYgdGhlIGBtZW1jZ2AgaXNuJ3QgZHlpbmcsIGFuZCBgdHJ1ZWAgb3RoZXJ3aXNlLiBgZ2V0X25vbl9keWluZ19tZW1jZ19lbmRgIHRoZW4gaGFuZGxlcyB0aGUgUkNVIHVubG9jayBiYXNlZCBvbiB0aGlzIGZsYWcuIFRoaXMgaXMgYSBjbGVhciBzaW1wbGlmaWNhdGlvbiBvZiB0aGUgbG9naWMuIFRoZSByZW1vdmFsIG9mIHRoZSBgY2dyb3VwX3N1YnN5c19vbl9kZmxgIGNoZWNrIGFuZCBgQ09ORklHX01FTUNHX1YxYCBndWFyZHMgc3VnZ2VzdHMgYSBtb3JlIHVuaWZpZWQgYXBwcm9hY2ggYWNyb3NzIGNncm91cCB2ZXJzaW9ucywgd2hpY2ggaXMgYSBnb29kIGRpcmVjdGlvbi5cblxuTmV4dCwgaW4gYG1tL3dvcmtpbmdzZXQuY2AsIHRoZXJlJ3MgYSBzdHJhaWdodGZvcndhcmQgb3B0aW1pemF0aW9uIGluIGBjb3VudF9zaGFkb3dfbm9kZXMoKWAuIFRoZSBvcmlnaW5hbCBjb2RlIGl0ZXJhdGVkIHRocm91Z2ggem9uZSBMUlUgc2l6ZXMuIE5vdywgaXQgdXNlcyBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoKWAuIFRoaXMgaXMgYSBjbGFzc2ljIG1vdmUsIGxldmVyYWdpbmcgcGVyLUNQVSBvciBwZXItbm9kZSBsb2NhbCBzdGF0aXN0aWNzLCB0byBhdm9pZCBpdGVyYXRpbmcgdGhyb3VnaCB6b25lcyBhbmQgc3VtbWluZyB1cCBwYWdlIGNvdW50cy4gTXVjaCBtb3JlIGVmZmljaWVudCBhbmQgYSBjbGVhbmVyIGFwcHJvYWNoLlxuXG5Ob3csIGFzIGFsd2F5cywgSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBJIHNlZSBhIGBib29sIHJjdV9sb2NrZWRgIGludHJvZHVjZWQgaW4gYG1vZF9tZW1jZ19zdGF0ZWAgYW5kIGBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlYC4gTGV0J3MgZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aG9zZSBmdW5jdGlvbnMuIFRoZXkgc2hvdWxkIGJlIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIHRvIGNoZWNrIGZvciBhbnkgdXNlIG9mIGByY3VfbG9ja2VkYCBiZWZvcmUgaXQncyBzZXQuIEdvdHRhIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHN1YnRsZSBpbml0aWFsaXphdGlvbiBpc3N1ZXMgbHVya2luZy4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTk6MDI6NDQuMjEwMzA5NDQ3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTEwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTEwOlxcdHZvaWQgbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LFxcbiA5MTE6XFx0XFx0XFx0ICAgICAgIGludCB2YWwpXFxuIDkxMjpcXHR7XFxuIDkxMzpcXHRcXHRib29sIHJjdV9sb2NrZWQgPSBmYWxzZTtcXG4gOTE0OlxcdFxcbiA5MTU6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG4gOTE2OlxcdFxcdFxcdHJldHVybjtcXG4gOTE3OlxcdFxcbiA5MTg6XFx0XFx0bWVtY2cgPSBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KG1lbWNnLCBcXHUwMDI2cmN1X2xvY2tlZCk7XFxuIDkxOTpcXHRcXHRfX21vZF9tZW1jZ19zdGF0ZShtZW1jZywgaWR4LCB2YWwpO1xcbiA5MjA6XFx0XFx0Z2V0X25vbl9keWluZ19tZW1jZ19lbmQocmN1X2xvY2tlZCk7XFxuIDkyMTpcXHR9XFxuIDkyMjpcXHRcXG4gOTIzOlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG4gOTI0OlxcdC8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbS4gKi9cXG4gOTI1OlxcdHVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpXFxuIDkyNjpcXHR7XFxuIDkyNzpcXHRcXHRsb25nIHg7XFxuIDkyODpcXHRcXHRpbnQgaSA9IG1lbWNnX3N0YXRzX2luZGV4KGlkeCk7XFxuIDkyOTpcXHRcXG4gOTMwOlxcdFxcdGlmIChXQVJOX09OQ0UoQkFEX1NUQVRfSURYKGkpLCBcXFwiJXM6IG1pc3Npbmcgc3RhdCBpdGVtICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgaWR4KSlcXG4gOTMxOlxcdFxcdFxcdHJldHVybiAwO1xcbiA5MzI6XFx0XFxuIDkzMzpcXHRcXHR4ID0gUkVBRF9PTkNFKG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpXSk7XFxuIDkzNDpcXHQjaWZkZWYgQ09ORklHX1NNUFxcbiA5MzU6XFx0XFx0aWYgKHggXFx1MDAzYyAwKVxcbiA5MzY6XFx0XFx0XFx0eCA9IDA7XFxuIDkzNzpcXHQjZW5kaWZcXG4gOTM4OlxcdFxcdHJldHVybiB4O1xcbiA5Mzk6XFx0fVxcbiA5NDA6XFx0XFxuIDk0MTpcXHR2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gOTQyOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpXFxuIDk0MzpcXHR7XFxuIDk0NDpcXHRcXHR1bnNpZ25lZCBsb25nIHZhbHVlID0gbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChtZW1jZywgaWR4KTtcXG4gOTQ1OlxcdFxcbiA5NDY6XFx0XFx0X19tb2RfbWVtY2dfc3RhdGUobWVtY2csIGlkeCwgLXZhbHVlKTtcXG4gOTQ3OlxcdFxcdF9fbW9kX21lbWNnX3N0YXRlKHBhcmVudCwgaWR4LCB2YWx1ZSk7XFxuIDk0ODpcXHR9XFxuIDk0OTpcXHQjZW5kaWZcXG4gOTUwOlxcdFxcbiA5NTE6XFx0c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcXG4gOTUyOlxcdFxcdFxcdFxcdFxcdCAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsIGxvbmcgdmFsKVxcbiA5NTM6XFx0e1xcbiA5NTQ6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gcG4tXFx1MDAzZW1lbWNnO1xcbiA5NTU6XFx0XFx0aW50IGkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpO1xcbiA5NTY6XFx0XFx0aW50IGNwdTtcXG4gOTU3OlxcdFxcbiA5NTg6XFx0XFx0aWYgKFdBUk5fT05DRShCQURfU1RBVF9JRFgoaSksIFxcXCIlczogbWlzc2luZyBzdGF0IGl0ZW0gJWRcXFxcblxcXCIsIF9fZnVuY19fLCBpZHgpKVxcbiA5NTk6XFx0XFx0XFx0cmV0dXJuO1xcbiA5NjA6XFx0XFxuIDk2MTpcXHRcXHRjcHUgPSBnZXRfY3B1KCk7XFxuIDk2MjpcXHRcXG4gOTYzOlxcdFxcdC8qIFVwZGF0ZSBtZW1jZyAqL1xcbiA5NjQ6XFx0XFx0dGhpc19jcHVfYWRkKG1lbWNnLVxcdTAwM2V2bXN0YXRzX3BlcmNwdS1cXHUwMDNlc3RhdGVbaV0sIHZhbCk7XFxuIDk2NTpcXHRcXG4gOTY2OlxcdFxcdC8qIFVwZGF0ZSBscnV2ZWMgKi9cXG4gOTY3OlxcdFxcdHRoaXNfY3B1X2FkZChwbi1cXHUwMDNlbHJ1dmVjX3N0YXRzX3BlcmNwdS1cXHUwMDNlc3RhdGVbaV0sIHZhbCk7XFxuIDk2ODpcXHRcXG4gOTY5OlxcdFxcdHZhbCA9IG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpZHgsIHZhbCk7XFxuIDk3MDpcXHRcXHRtZW1jZ19yc3RhdF91cGRhdGVkKG1lbWNnLCB2YWwsIGNwdSk7XFxuIDk3MTpcXHRcXHR0cmFjZV9tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKG1lbWNnLCBpZHgsIHZhbCk7XFxuIDk3MjpcXHRcXG4gOTczOlxcdFxcdHB1dF9jcHUoKTtcXG4gOTc0OlxcdH1cXG4gOTc1OlxcdFxcbiA5NzY6XFx0c3RhdGljIHZvaWQgbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIDk3NzpcXHRcXHRcXHRcXHRcXHQgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LFxcbiA5Nzg6XFx0XFx0XFx0XFx0XFx0ICAgICBpbnQgdmFsKVxcbiA5Nzk6XFx0e1xcbiA5ODA6XFx0XFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xcbiA5ODE6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuO1xcbiA5ODI6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbiA5ODM6XFx0XFx0Ym9vbCByY3VfbG9ja2VkID0gZmFsc2U7XFxuIDk4NDpcXHRcXG4gOTg1OlxcdFxcdHBuID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XFxuIDk4NjpcXHRcXHRtZW1jZyA9IGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQocG4tXFx1MDAzZW1lbWNnLCBcXHUwMDI2cmN1X2xvY2tlZCk7XFxuIDk4NzpcXHRcXHRwbiA9IG1lbWNnLVxcdTAwM2Vub2RlaW5mb1twZ2RhdC1cXHUwMDNlbm9kZV9pZF07XFxuIDk4ODpcXHRcXG4gOTg5OlxcdFxcdF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShwbiwgaWR4LCB2YWwpO1xcbiA5OTA6XFx0XFxuIDk5MTpcXHRcXHRnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChyY3VfbG9ja2VkKTtcXG4gOTkyOlxcdH1cXG4gOTkzOlxcdFxcbiA5OTQ6XFx0LyoqXFxuIDk5NTpcXHQgKiBtb2RfbHJ1dmVjX3N0YXRlIC0gdXBkYXRlIGxydXZlYyBtZW1vcnkgc3RhdGlzdGljc1xcbiA5OTY6XFx0ICogQGxydXZlYzogdGhlIGxydXZlY1xcbiA5OTc6XFx0ICogQGlkeDogdGhlIHN0YXQgaXRlbVxcbiA5OTg6XFx0ICogQHZhbDogZGVsdGEgdG8gYWRkIHRvIHRoZSBjb3VudGVyLCBjYW4gYmUgbmVnYXRpdmVcXG4gOTk5OlxcdCAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAyOjQ0LjIxMDYyNTEzN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTc3NTAyMDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIENvbmNlcm5zIEhlcmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEFuYWx5emluZyBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAsIHRoZSBgcmN1X2xvY2tlZGAgdmFyaWFibGUgaXMgZXhwbGljaXRseSBoYW5kbGVkIOKAkyBpdCdzIGFsd2F5cyBlaXRoZXIgc2V0IHRvIGBmYWxzZWAgb3IgYHRydWVgIGFuZCB3YXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBpbiBib3RoIGNhbGxlciBsb2NhdGlvbnMuIFRoZSBgcGFnZXNgIHZhcmlhYmxlIGluIGBtbS93b3JraW5nc2V0LmNgIGlzIGFsc28gaW5pdGlhbGl6ZWQgd2l0aCBhIGNsZWFuIGxvb3AuIFRoZXJlJ3Mgbm8gaW50cm9kdWN0aW9uIG9mIG5ldyBidWZmZXJzLCBubyBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vIHBvdGVudGlhbCBwYWRkaW5nIGlzc3VlcywgYW5kIGRlZmluaXRlbHkgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgdG8gd29ycnkgYWJvdXQsIHdoZXRoZXIgaXQgYmUgaGVhcCBvciBzdGFjayB2YXJpYWJsZXMuIEFueSBsb2NraW5nIGlzc3VlcyByZWxhdGVkIHRvIFJDVSB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUCBhbmQgUkNVIGRlYnVnZ2luZywgYW5kIEtBU0FOIGFuZCBzdGFuZGFyZCBmYXVsdCBoYW5kbGVycyB3b3VsZCBkZWFsIHdpdGggYW55IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgZGVhZCBjZ3JvdXAgcmVmZXJlbmNlcy5cblxuTm93LCBsZXQncyBydW4gdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWEuXG5cbjEuICBLZXJuZWwgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZT8gTm9wZS4gTm8gYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmssIGlvY3RsLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMgaW52b2x2ZWQsIGFuZCBubyBzdHJ1Y3R1cmUgcGFkZGluZyBjb25jZXJucy5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS4gRXZlcnl0aGluZyBpcyBwcm9wZXJseSBpbml0aWFsaXplZC5cbjMuICBBbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vcGUuIEFsbCBjbGVhciBhbmQgc2FmZS5cbjQuICBCb3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YT8gTm9wZS4gTm90IGhlcmUuXG5cbk9uIHRoZSBvdGhlciBoYW5kLCB0aGUgcGF0Y2ggZmFsbHMgdW5kZXIgdGhlIFwiTmVlZHNLTVNBTj1mYWxzZVwiIGNyaXRlcmlhIGJlY2F1c2UgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2hpY2ggYXJlIGFscmVhZHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIEFsbCB0aGUgcmVsZXZhbnQgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLiBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MuXG5cblRoZXJlZm9yZSwgYWZ0ZXIgdGhpcyBkZXRhaWxlZCBhc3Nlc3NtZW50LCBJIGFtIHZlcnkgY29uZmlkZW50IHRoYXQgTmVlZHNLTVNBTiBzaG91bGQgYmUgc2V0IHRvICpmYWxzZSouIFRpbWUgdG8gcHJlcGFyZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mzk4LCJPdXRwdXRUb2tlbnMiOjE3OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE5OjAyOjQ4Ljc4ODEzMDUxNFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtY2cgc3RhdHMgYWNjb3VudGluZyBhbmQgc2hhZG93IG5vZGUgY2FsY3VsYXRpb24gaW4gbW0vbWVtY29udHJvbC5jIGFuZCBtbS93b3JraW5nc2V0LmMuIFNwZWNpZmljYWxseSwgaXQgZ2VuZXJhbGl6ZXMgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKWAgdG8gaGFuZGxlIGFsbCBjZ3JvdXBzIGhpZXJhcmNoaWVzIGFuZCB1c2VzIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbCgpYCBmb3Igd29ya2luZ3NldCBzaGFkb3cgbm9kZSBjb3VudGluZy5cXG5cXG5ObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkLCBub3IgYXJlIHRoZXJlIGFueSBpbmZvLWxlYWtzLCBzdHJ1Y3QgcGFkZGluZyBleHBvc3VyZXMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIHBvaW50ZXIgaXNzdWVzIChzdWNoIGFzIFJDVSBsb2NraW5nIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSkgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtY2cgc3RhdHMgYWNjb3VudGluZyBhbmQgc2hhZG93IG5vZGUgY2FsY3VsYXRpb24gaW4gbW0vbWVtY29udHJvbC5jIGFuZCBtbS93b3JraW5nc2V0LmMuIFNwZWNpZmljYWxseSwgaXQgZ2VuZXJhbGl6ZXMgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoKWAgdG8gaGFuZGxlIGFsbCBjZ3JvdXBzIGhpZXJhcmNoaWVzIGFuZCB1c2VzIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbCgpYCBmb3Igd29ya2luZ3NldCBzaGFkb3cgbm9kZSBjb3VudGluZy5cXG5cXG5ObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkLCBub3IgYXJlIHRoZXJlIGFueSBpbmZvLWxlYWtzLCBzdHJ1Y3QgcGFkZGluZyBleHBvc3VyZXMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIHBvaW50ZXIgaXNzdWVzIChzdWNoIGFzIFJDVSBsb2NraW5nIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSkgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowt749q[1] Phase: Succeeded StartedAt: 2026-09-05 19:03:00 +0000 UTC FinishedAt: 2026-09-05 19:03:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt749q[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 19:03:00 +0000 UTC FinishedAt: 2026-09-05 19:03:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt749q[2] Phase: Succeeded StartedAt: 2026-09-05 19:03:00 +0000 UTC FinishedAt: 2026-09-05 22:52:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 19:03:00 +0000 UTC FinishedAt: 2026-09-05 22:52:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 19:03:00 +0000 UTC FinishedAt: 2026-09-05 19:03:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 19:03:00 +0000 UTC FinishedAt: 2026-09-05 19:03:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt749q/series-workflowt749q-convert-artifact-3306924389/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 19:03:10 +0000 UTC FinishedAt: 2026-09-05 19:23:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 19:03:10 +0000 UTC FinishedAt: 2026-09-05 19: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:*0f770f60-69d0-46c3-9448-95f7d78e06b4,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-workflowt749q/series-workflowt749q-convert-artifact-3306924389/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": "5e6c50d3-189b-439f-8d9b-e3cf6a2d9f24", "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-workflowt749q/series-workflowt749q-build-action-4087260555/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 19:03:10 +0000 UTC FinishedAt: 2026-09-05 19:23:16 +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:*0f770f60-69d0-46c3-9448-95f7d78e06b4,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-workflowt749q/series-workflowt749q-convert-artifact-3306924389/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": "5e6c50d3-189b-439f-8d9b-e3cf6a2d9f24", "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-workflowt749q/series-workflowt749q-build-action-4087260555/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 19:23:26 +0000 UTC FinishedAt: 2026-09-05 19:23:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 19:23:26 +0000 UTC FinishedAt: 2026-09-05 19:23:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 19:23:26 +0000 UTC FinishedAt: 2026-09-05 19:23:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 19:23:26 +0000 UTC FinishedAt: 2026-09-05 19:23:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt749q/series-workflowt749q-convert-artifact-2953148480/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 19:23:36 +0000 UTC FinishedAt: 2026-09-05 19:25:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 19:23:36 +0000 UTC FinishedAt: 2026-09-05 19:25:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5e6c50d3-189b-439f-8d9b-e3cf6a2d9f24,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-workflowt749q/series-workflowt749q-build-action-4087260555/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-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 19:25:49 +0000 UTC FinishedAt: 2026-09-05 19:25:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 19:25:49 +0000 UTC FinishedAt: 2026-09-05 19:25:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 19:25:49 +0000 UTC FinishedAt: 2026-09-05 19:46:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 19:25:49 +0000 UTC FinishedAt: 2026-09-05 19:46:55 +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:*0f770f60-69d0-46c3-9448-95f7d78e06b4,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-workflowt749q/series-workflowt749q-convert-artifact-2953148480/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": "d4fd3b86-01e4-40bc-b501-0ebb741f0b95", "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-workflowt749q/series-workflowt749q-build-action-4271957500/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 19:25:49 +0000 UTC FinishedAt: 2026-09-05 19:46:45 +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:*0f770f60-69d0-46c3-9448-95f7d78e06b4,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-workflowt749q/series-workflowt749q-convert-artifact-2953148480/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": "d4fd3b86-01e4-40bc-b501-0ebb741f0b95", "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-workflowt749q/series-workflowt749q-build-action-4271957500/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 19:46:55 +0000 UTC FinishedAt: 2026-09-05 19:46:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 19:46:55 +0000 UTC FinishedAt: 2026-09-05 19:46:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 19:46:55 +0000 UTC FinishedAt: 2026-09-05 19:48:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 19:46:55 +0000 UTC FinishedAt: 2026-09-05 19:48:49 +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:*d4fd3b86-01e4-40bc-b501-0ebb741f0b95,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-workflowt749q/series-workflowt749q-build-action-4271957500/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-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 19:48:59 +0000 UTC FinishedAt: 2026-09-05 22:52:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 19:48:59 +0000 UTC FinishedAt: 2026-09-05 22:52:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*5e6c50d3-189b-439f-8d9b-e3cf6a2d9f24,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d4fd3b86-01e4-40bc-b501-0ebb741f0b95,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-workflowt749q/series-workflowt749q-build-action-4087260555/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-workflowt749q/series-workflowt749q-build-action-4271957500/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 19:48:59 +0000 UTC FinishedAt: 2026-09-05 19:49:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 19:48:59 +0000 UTC FinishedAt: 2026-09-05 19:49:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt749q/series-workflowt749q-convert-artifact-2929615257/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 19:48:59 +0000 UTC FinishedAt: 2026-09-05 19:48:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 19:48:59 +0000 UTC FinishedAt: 2026-09-05 19:48:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 19:48:59 +0000 UTC FinishedAt: 2026-09-05 19:48:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 19:49:09 +0000 UTC FinishedAt: 2026-09-05 22:52:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt749q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["count_shadow_nodes","mod_memcg_state","mod_memcg_lruvec_state","mem_cgroup_css_offline"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"5589d7e1-26ab-48c8-85cf-3ed9f66f6167","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 19:49:09 +0000 UTC FinishedAt: 2026-09-05 22:52:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5e6c50d3-189b-439f-8d9b-e3cf6a2d9f24,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d4fd3b86-01e4-40bc-b501-0ebb741f0b95,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-workflowt749q/series-workflowt749q-build-action-4087260555/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-workflowt749q/series-workflowt749q-build-action-4271957500/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-workflowt749q/series-workflowt749q-convert-artifact-2929615257/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,}