Name: series-workfloww9kt8 Phase: Succeeded StartedAt: 2026-08-17 03:04:15 +0000 UTC FinishedAt: 2026-08-17 07:12:19 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww9kt8[0] Phase: Succeeded StartedAt: 2026-08-17 03:04:15 +0000 UTC FinishedAt: 2026-08-17 03:29:31 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww9kt8[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 03:04:15 +0000 UTC FinishedAt: 2026-08-17 03:29:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4477a78374a57c3809b172ad30cceabda48c47c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4477a78374a57c3809b172ad30cceabda48c47c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG" ], "series_id": "061eaec8-37d9-4bf1-a5cc-b49bfe614c4f" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "drain_all_stock", "__mem_cgroup_charge", "mem_cgroup_sk_charge" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHJhaW5fYWxsX3N0b2NrJiMzNDssCiAgICAmIzM0O19fbWVtX2Nncm91cF9jaGFyZ2UmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9za19jaGFyZ2UmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYCBpbiBgbW0vbWVtY29udHJvbC5jYCB0byBmaXggYSBsb2dpYyBidWcgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIHJlZmVyZW5jZSBjb3VudGluZy4gSXQgZW5zdXJlcyB0aGF0IGEgcGVyLUNQVSBzdG9jayBpcyBkcmFpbmVkIGV2ZW4gaWYgYG5yX3BhZ2VzYCBpcyAwLCBiZWNhdXNlIHRoZSBgbWVtY2dgIHBvaW50ZXIgaXRzZWxmIGhvbGRzIGEgY3NzIHJlZmVyZW5jZSB0aGF0IG5lZWRzIHRvIGJlIHJlbGVhc2VkLiBUaGlzIGlzIGEgZml4IGZvciBhIHJlZmVyZW5jZSBsZWFrIG9yIGEgYnVnIHByZXZlbnRpbmcgYSBjZ3JvdXAgZnJvbSBiZWluZyBvZmZsaW5lZC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gKGZvciB1c2UtYWZ0ZXItZnJlZSkgYW5kIEtNRU1MRUFLIChmb3IgbWVtb3J5IGxlYWtzKSBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBpc3N1ZXMgaW4gdGhpcyBhcmVhLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBmb3IgZHJhaW5pbmcgbWVtY2cgc3RvY2sgaW4gYGlzX21lbWNnX2RyYWluX25lZWRlZGAuIEl0IHJlbW92ZXMgdGhlIGNoZWNrIGZvciBgc3RvY2stXHUwMDNlbnJfcGFnZXNbaV1gIGJlaW5nIG5vbi16ZXJvLCBlbnN1cmluZyB0aGF0IGVtcHR5IHNsb3RzIHN0aWxsIHRyaWdnZXIgYSBkcmFpbiB0byByZWxlYXNlIHBpbm5lZCBjc3MgcmVmZXJlbmNlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbWNnIHN0b2NrIGRyYWluaW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOGI2YTkwMzczNjJmOGI5ZTBjMTU3YmMzZWFiN2YwYzJhOGVkNTQ4ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDAzOjI3OjM1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMTdkYTFmNDNiN2QzYi4uYjkzMWVjMTZiYjgyOSAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMjI5MSw4ICYjNDM7MjI5MSwxMiBAQCBzdGF0aWMgYm9vbCBpc19tZW1jZ19kcmFpbl9uZWVkZWQoc3RydWN0IG1lbWNnX3N0b2NrX3BjcCAqc3RvY2ssXG4gXHRcdGlmICghbWVtY2cpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmIChSRUFEX09OQ0Uoc3RvY2stXHUwMDNlbnJfcGFnZXNbaV0pIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgbWVtX2Nncm91cF9pc19kZXNjZW5kYW50KG1lbWNnLCByb290X21lbWNnKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEFuIGVtcHR5IHNsb3Qgc3RpbGwgcGlucyBhIGNzcyByZWZlcmVuY2Ugd2hpY2hcbiYjNDM7XHRcdCAqIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoKSByZWxpZXMgb24gZHJhaW5fYWxsX3N0b2NrKClcbiYjNDM7XHRcdCAqIHRvIHJlbGVhc2UuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChtZW1fY2dyb3VwX2lzX2Rlc2NlbmRhbnQobWVtY2csIHJvb3RfbWVtY2cpKSB7XG4gXHRcdFx0Zmx1c2ggPSB0cnVlO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHJhaW5fYWxsX3N0b2NrJiMzNDssCiAgICAmIzM0O19fbWVtX2Nncm91cF9jaGFyZ2UmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9za19jaGFyZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBmb3IgZHJhaW5pbmcgbWVtY2cgc3RvY2sgaW4gYGlzX21lbWNnX2RyYWluX25lZWRlZGAuIEl0IHJlbW92ZXMgdGhlIGNoZWNrIGZvciBgc3RvY2stXHUwMDNlbnJfcGFnZXNbaV1gIGJlaW5nIG5vbi16ZXJvLCBlbnN1cmluZyB0aGF0IGVtcHR5IHNsb3RzIHN0aWxsIHRyaWdnZXIgYSBkcmFpbiB0byByZWxlYXNlIHBpbm5lZCBjc3MgcmVmZXJlbmNlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbWNnIHN0b2NrIGRyYWluaW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGI2YTkwMzczNjJmOGI5ZTBjMTU3YmMzZWFiN2YwYzJhOGVkNTQ4ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDAzOjI3OjM1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDE3ZGExZjQzYjdkM2IuLmI5MzFlYzE2YmI4MjkgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTIyOTEsOCAmIzQzOzIyOTEsMTIgQEAgc3RhdGljIGJvb2wgaXNfbWVtY2dfZHJhaW5fbmVlZGVkKHN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrLAogCQlpZiAoIW1lbWNnKQogCQkJY29udGludWU7CiAKLQkJaWYgKFJFQURfT05DRShzdG9jay0mZ3Q7bnJfcGFnZXNbaV0pICZhbXA7JmFtcDsKLQkJICAgIG1lbV9jZ3JvdXBfaXNfZGVzY2VuZGFudChtZW1jZywgcm9vdF9tZW1jZykpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBbiBlbXB0eSBzbG90IHN0aWxsIHBpbnMgYSBjc3MgcmVmZXJlbmNlIHdoaWNoCiYjNDM7CQkgKiBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKCkgcmVsaWVzIG9uIGRyYWluX2FsbF9zdG9jaygpCiYjNDM7CQkgKiB0byByZWxlYXNlLgomIzQzOwkJICovCiYjNDM7CQlpZiAobWVtX2Nncm91cF9pc19kZXNjZW5kYW50KG1lbWNnLCByb290X21lbWNnKSkgewogCQkJZmx1c2ggPSB0cnVlOwogCQkJYnJlYWs7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgYSBNZW1jZyBQYXRjaCoqCgpBbHJpZ2h0LCBJIHNlZSB3ZSBoYXZlIGEgcGF0Y2ggdG91Y2hpbmcgYG1tL21lbWNvbnRyb2wuY2AuIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZSBpbnZvbHZlcyBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudCB3aXRoaW4gYGlzX21lbWNnX2RyYWluX25lZWRlZGAuICBUaGUga2V5IGhlcmUgaXMgdGhhdCBgUkVBRF9PTkNFKHN0b2NrLSZndDtucl9wYWdlc1tpXSlgIGlzIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGF0IGNvbmRpdGlvbi4gIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIGNvcmUgYWx0ZXJhdGlvbiB0byBob3cgdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIChtZW1jZykgbG9naWMgb3BlcmF0ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBkZWVtZWQgbmVjZXNzYXJ5LiBUaGUgcmVtb3ZhbCBvZiB0aGlzIGBSRUFEX09OQ0VgIHN1Z2dlc3RzIHRoZSBwYXRjaCBhdXRob3IgaXMgbGlrZWx5IG9wdGltaXppbmcsIG9yIHBvc3NpYmx5IGFkZHJlc3NpbmcgYSBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWUgcmVsYXRlZCB0byBob3cgYG5yX3BhZ2VzYCBpcyBhY2Nlc3NlZCB3aXRoaW4gdGhlIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgIGZ1bmN0aW9uLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgZHJhaW4gbG9naWMgaW4gdGhlIG1lbWNnIHN1YnN5c3RlbS4gIEkgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCB0aGUgb3JpZ2luYWwgaW50ZW50IG9mIHRoYXQgYFJFQURfT05DRWAgY2FsbCB0byB0cnVseSBhc3Nlc3MgdGhlIGltcGxpY2F0aW9ucyBhbmQgZW5zdXJlIHRoaXMgd29uJiMzOTt0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiByYWNlIGNvbmRpdGlvbnMgb3IgZGF0YSBjb3JydXB0aW9uLiBMZXQmIzM5O3MgZ2V0IGludG8gYGlzX21lbWNnX2RyYWluX25lZWRlZGAgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc19tZW1jZ19kcmFpbl9uZWVkZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTIyMjI9c3RhdGljIHZvaWQgcmVmaWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yMjgwLVxubW0vbWVtY29udHJvbC5jOjIyODE6c3RhdGljIGJvb2wgaXNfbWVtY2dfZHJhaW5fbmVlZGVkKHN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrLFxubW0vbWVtY29udHJvbC5jLTIyODItXHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yMzI1PXZvaWQgZHJhaW5fYWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yMzQ0LVx0XHRpZiAoIXRlc3RfYml0KEZMVVNISU5HX0NBQ0hFRF9DSEFSR0UsIFx1MDAyNm1lbWNnX3N0LVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbm1tL21lbWNvbnRyb2wuYzoyMzQ1Olx0XHQgICAgaXNfbWVtY2dfZHJhaW5fbmVlZGVkKG1lbWNnX3N0LCByb290X21lbWNnKSBcdTAwMjZcdTAwMjZcbm1tL21lbWNvbnRyb2wuYy0yMzQ2LVx0XHQgICAgIXRlc3RfYW5kX3NldF9iaXQoRkxVU0hJTkdfQ0FDSEVEX0NIQVJHRSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjYyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IENHIERyYWluIERlcGVuZGVuY3kqKgoKQWxyaWdodCwgc28gYGlzX21lbWNnX2RyYWluX25lZWRlZGAgaXMgYSBmdW5jdGlvbiB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbiwgYW5kIGl0JiMzOTtzIGdldHRpbmcgY2FsbGVkIGJ5IGBkcmFpbl9hbGxfc3RvY2tgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBvZiBjb3Vyc2UsICp3aGVyZSogaXMgYGRyYWluX2FsbF9zdG9ja2AgYmVpbmcgY2FsbGVkPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHNpdGVzIG9mIGBkcmFpbl9hbGxfc3RvY2tgIGlzIGNydWNpYWwgdG8gbWFwcGluZyB0aGUgY29tcGxldGUgZGVwZW5kZW5jeSBjaGFpbiBhbmQgdGhlIGNpcmN1bXN0YW5jZXMgdGhhdCB0cmlnZ2VyIHRoaXMgZHJhaW5hZ2UgY2hlY2suIE5lZWQgdG8gdHJhY2UgdGhhdCBwYXRoIHRvIHNlZSBpZiBpdCBtYWtlcyBzZW5zZSBpbiB0aGUgY3VycmVudCBjb250ZXh0LiBBIGZvY3VzZWQgY2FsbCBncmFwaCBhbmFseXNpcyBpcyBwcm9iYWJseSBpbiBvcmRlciB0byBwaW5wb2ludCBldmVyeXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RyYWluX2FsbF9zdG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MjI4MT1zdGF0aWMgYm9vbCBpc19tZW1jZ19kcmFpbl9uZWVkZWQoc3RydWN0IG1lbWNnX3N0b2NrX3BjcCAqc3RvY2ssXG4tLVxubW0vbWVtY29udHJvbC5jLTIyOTUtXHRcdCAqIEFuIGVtcHR5IHNsb3Qgc3RpbGwgcGlucyBhIGNzcyByZWZlcmVuY2Ugd2hpY2hcbm1tL21lbWNvbnRyb2wuYzoyMjk2Olx0XHQgKiBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKCkgcmVsaWVzIG9uIGRyYWluX2FsbF9zdG9jaygpXG5tbS9tZW1jb250cm9sLmMtMjI5Ny1cdFx0ICogdG8gcmVsZWFzZS5cbi0tXG5tbS9tZW1jb250cm9sLmM9MjMwOD1zdGF0aWMgdm9pZCBzY2hlZHVsZV9kcmFpbl93b3JrKGludCBjcHUsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjMyNC0gKi9cbm1tL21lbWNvbnRyb2wuYzoyMzI1OnZvaWQgZHJhaW5fYWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKVxubW0vbWVtY29udHJvbC5jLTIzMjYte1xuLS1cbm1tL21lbWNvbnRyb2wuYz0yNjQ0PXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNzI0LVx0aWYgKCFkcmFpbmVkKSB7XG5tbS9tZW1jb250cm9sLmM6MjcyNTpcdFx0ZHJhaW5fYWxsX3N0b2NrKG1lbV9vdmVyX2xpbWl0KTtcbm1tL21lbWNvbnRyb2wuYy0yNzI2LVx0XHRkcmFpbmVkID0gdHJ1ZTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDM0Nz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQzNjgtXG5tbS9tZW1jb250cm9sLmM6NDM2OTpcdGRyYWluX2FsbF9zdG9jayhtZW1jZyk7XG5tbS9tZW1jb250cm9sLmMtNDM3MC1cbi0tXG5tbS9tZW1jb250cm9sLmM9NDgzNz1zdGF0aWMgc3NpemVfdCBtZW1vcnlfaGlnaF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4tLVxubW0vbWVtY29udHJvbC5jLTQ4NzMtXHRcdGlmICghZHJhaW5lZCkge1xubW0vbWVtY29udHJvbC5jOjQ4NzQ6XHRcdFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcbm1tL21lbWNvbnRyb2wuYy00ODc1LVx0XHRcdGRyYWluZWQgPSB0cnVlO1xuLS1cbm1tL21lbWNvbnRyb2wuYz00ODk2PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9tYXhfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuLS1cbm1tL21lbWNvbnRyb2wuYy00OTMxLVx0XHRpZiAoIWRyYWluZWQpIHtcbm1tL21lbWNvbnRyb2wuYzo0OTMyOlx0XHRcdGRyYWluX2FsbF9zdG9jayhtZW1jZyk7XG5tbS9tZW1jb250cm9sLmMtNDkzMy1cdFx0XHRkcmFpbmVkID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDg3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgU2NvcGUgb2YgYGRyYWluX2FsbF9zdG9ja2AqKgoKT2theSwgc28gYGRyYWluX2FsbF9zdG9ja2AgaXMgZ2V0dGluZyBjYWxsZWQgZnJvbSBhIGZldyBkaWZmZXJlbnQgcGxhY2VzOiBgdHJ5X2NoYXJnZV9tZW1jZ2AsIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCwgYG1lbW9yeV9oaWdoX3dyaXRlYCwgYW5kIGBtZW1vcnlfbWF4X3dyaXRlYC4gVGhhdCBnaXZlcyBtZSBhIGRlY2VudCBvdmVydmlldyBvZiAqd2hlcmUqIGl0JiMzOTtzIHVzZWQg4oCTIGFsbCByZWxhdGVkIHRvIG1lbW9yeSBjb250cm9sIGFuZCBjZ3JvdXBzLCBvZiBjb3Vyc2UuCgpOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdpZGVseSB0aGlzIGZ1bmN0aW9uIGlzIGFjY2Vzc2libGUuIElzIGl0IGEgbW9kdWxlLWludGVybmFsIHRoaW5nLCBvciBpcyBpdCBleHBvc2VkIGZvciBwb3RlbnRpYWwgdXNlIGVsc2V3aGVyZT8gTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgd2hldGhlciBpdCYjMzk7cyBkZWNsYXJlZCBgc3RhdGljYC4gQWhhLCBpdCYjMzk7cyAqbm90KiBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIHBvdGVudGlhbGx5IHZpc2libGUgb3V0c2lkZSBvZiBpdHMgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBUaGF04oCZcyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4KCk5leHQgcXVlc3Rpb246IEV2ZW4gdGhvdWdoIGl0ICpjb3VsZCogYmUgdXNlZCBlbHNld2hlcmUsIGlzIGl0ICphY3R1YWxseSogdXNlZCBvdXRzaWRlIG9mIGBtbS9tZW1jb250cm9sLmNgPyBUaGF0IHdvdWxkIHJlZmluZSBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBpbXBhY3QgYW5kIHBvdGVudGlhbCBmb3IgcmVmYWN0b3JpbmcuIElmIGl0JiMzOTtzICpvbmx5KiB1c2VkIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYCwgaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRpdmVseSBzYWZlIHRvIG1vZGlmeSwgZXZlbiBpZiBub3Qgc3RhdGljLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHVzYWdlIHNjb3BlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RyYWluX2FsbF9zdG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLXYxLmM9MTc3MT1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfcmVzaXplX21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE4MTAtXHRcdGlmICghZHJhaW5lZCkge1xubW0vbWVtY29udHJvbC12MS5jOjE4MTE6XHRcdFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcbm1tL21lbWNvbnRyb2wtdjEuYy0xODEyLVx0XHRcdGRyYWluZWQgPSB0cnVlO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xODM0PXN0YXRpYyBpbnQgbWVtX2Nncm91cF9mb3JjZV9lbXB0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE4NDAtXG5tbS9tZW1jb250cm9sLXYxLmM6MTg0MTpcdGRyYWluX2FsbF9zdG9jayhtZW1jZyk7XG5tbS9tZW1jb250cm9sLXYxLmMtMTg0Mi1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmgtMjAtXG5tbS9tZW1jb250cm9sLXYxLmg6MjE6dm9pZCBkcmFpbl9hbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtY2cpO1xubW0vbWVtY29udHJvbC12MS5oLTIyLVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yMjgxPXN0YXRpYyBib29sIGlzX21lbWNnX2RyYWluX25lZWRlZChzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwICpzdG9jayxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjI5NS1cdFx0ICogQW4gZW1wdHkgc2xvdCBzdGlsbCBwaW5zIGEgY3NzIHJlZmVyZW5jZSB3aGljaFxubW0vbWVtY29udHJvbC5jOjIyOTY6XHRcdCAqIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoKSByZWxpZXMgb24gZHJhaW5fYWxsX3N0b2NrKClcbm1tL21lbWNvbnRyb2wuYy0yMjk3LVx0XHQgKiB0byByZWxlYXNlLlxuLS1cbm1tL21lbWNvbnRyb2wuYz0yMzA4PXN0YXRpYyB2b2lkIHNjaGVkdWxlX2RyYWluX3dvcmsoaW50IGNwdSwgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yMzI0LSAqL1xubW0vbWVtY29udHJvbC5jOjIzMjU6dm9pZCBkcmFpbl9hbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtY2cpXG5tbS9tZW1jb250cm9sLmMtMjMyNi17XG4tLVxubW0vbWVtY29udHJvbC5jPTI2NDQ9c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vbWVtY29udHJvbC5jLTI3MjQtXHRpZiAoIWRyYWluZWQpIHtcbm1tL21lbWNvbnRyb2wuYzoyNzI1Olx0XHRkcmFpbl9hbGxfc3RvY2sobWVtX292ZXJfbGltaXQpO1xubW0vbWVtY29udHJvbC5jLTI3MjYtXHRcdGRyYWluZWQgPSB0cnVlO1xuLS1cbm1tL21lbWNvbnRyb2wuYz00MzQ3PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDM2OC1cbm1tL21lbWNvbnRyb2wuYzo0MzY5Olx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcbm1tL21lbWNvbnRyb2wuYy00MzcwLVxuLS1cbm1tL21lbWNvbnRyb2wuYz00ODM3PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9oaWdoX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbi0tXG5tbS9tZW1jb250cm9sLmMtNDg3My1cdFx0aWYgKCFkcmFpbmVkKSB7XG5tbS9tZW1jb250cm9sLmM6NDg3NDpcdFx0XHRkcmFpbl9hbGxfc3RvY2sobWVtY2cpO1xubW0vbWVtY29udHJvbC5jLTQ4NzUtXHRcdFx0ZHJhaW5lZCA9IHRydWU7XG4tLVxubW0vbWVtY29udHJvbC5jPTQ4OTY9c3RhdGljIHNzaXplX3QgbWVtb3J5X21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4tLVxubW0vbWVtY29udHJvbC5jLTQ5MzEtXHRcdGlmICghZHJhaW5lZCkge1xubW0vbWVtY29udHJvbC5jOjQ5MzI6XHRcdFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcbm1tL21lbWNvbnRyb2wuYy00OTMzLVx0XHRcdGRyYWluZWQgPSB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1jZyBEcmFpbiBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaG93IGBkcmFpbl9hbGxfc3RvY2tgIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBtZW1vcnkgY2dyb3VwIHN1YnN5c3RlbS4gSSYjMzk7bSBzZWVpbmcgaXQmIzM5O3MgY2FsbGVkIGZyb20gYSBudW1iZXIgb2YgcGxhY2VzOiBgbWVtX2Nncm91cF9yZXNpemVfbWF4YCwgYG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlgLCBgdHJ5X2NoYXJnZV9tZW1jZ2AsIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCwgYG1lbW9yeV9oaWdoX3dyaXRlYCwgYW5kIGBtZW1vcnlfbWF4X3dyaXRlYC4gQWxsIHNvbGlkbHkgbWVtY2cgZnVuY3Rpb25zLCBhcyBleHBlY3RlZC4KClRoZSBjcnV4IG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgLiBJdCBsb29rcyBsaWtlIGl0IG5vdyBkcmFpbnMgdGhlIHN0b2NrIGV2ZW4gaWYgYHN0b2NrLSZndDtucl9wYWdlc1tpXWAgaXMgemVyby4gQWgsIEkgc2VlLCB0aGF0IG1ha2VzIHNlbnNlLiBUaGUgY29tbWVudCBzcGVjaWZpY2FsbHkgcG9pbnRzIG91dCB0aGF0IGFuICYjMzQ7ZW1wdHkgc2xvdCBzdGlsbCBwaW5zIGEgY3NzIHJlZmVyZW5jZSB3aGljaCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKCkgcmVsaWVzIG9uIGRyYWluX2FsbF9zdG9jaygpIHRvIHJlbGVhc2UuJiMzNDsgU28sIHRoaXMgaXMgYSBmaXguIFdpdGhvdXQgZHJhaW5pbmcgdGhlIGVtcHR5IHNsb3QsIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCB3b3VsZG4mIzM5O3QgYmUgYWJsZSB0byByZWxlYXNlIHRoZSBDU1MgcmVmZXJlbmNlLiBUaGlzIHdvdWxkIGJlIGEgc3VidGxlIGJ1dCBjcml0aWNhbCBidWcgd2hlcmUgYSBDU1MgcmVmZXJlbmNlIGhhbmdzIGFyb3VuZCBldmVuIHdoZW4gYSBwYWdlIGlzIG5vIGxvbmdlciBhc3NvY2lhdGVkIHdpdGggaXQuCgpUaGlzIGlzIGZ1bmRhbWVudGFsbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gbWVtY2cuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgd291bGQgYmUgZ29vZCB0byBmdXp6IGFuZCB0ZXN0IGFzIHRoZSBiZWhhdmlvciBjb3VsZCBjYXVzZSBwcm9ibGVtcyBhdCBjZXJ0YWluIHRocmVzaG9sZHMsIGVzcGVjaWFsbHkgd2l0aCB0aGUgY2FsbHMgdG8gYGRyYWluX2FsbF9zdG9ja2AuIFNpbmNlIGBkcmFpbl9hbGxfc3RvY2tgIGlzIHRoZSBzdWJqZWN0IGhlcmUsIEkgc2hvdWxkIG1ha2Ugc3VyZSBpdCYjMzk7cyBmdXp6ZWQgYW5kIHRlc3RlZCB3ZWxsLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSB0aG9zZSBjb3JlIGZ1bmN0aW9ucy4gYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgLCBgbWVtb3J5X2hpZ2hfd3JpdGVgLCBgbWVtb3J5X21heF93cml0ZWAsIGBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5YCwgYG1lbV9jZ3JvdXBfcmVzaXplX21heGAsIGFuZCBgdHJ5X2NoYXJnZV9tZW1jZ2AuIExldCYjMzk7cyBwYXkgZXNwZWNpYWxseSBjbG9zZSBhdHRlbnRpb24gdG8gYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgIHRvIGVuc3VyZSB0aGF0IHRoaXMgY2hhbmdlIGFjdHVhbGx5IHJlc29sdmVzIHRoZSBwb3RlbnRpYWwgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfY3NzX29mZmxpbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTIyODE9c3RhdGljIGJvb2wgaXNfbWVtY2dfZHJhaW5fbmVlZGVkKHN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yMjk1LVx0XHQgKiBBbiBlbXB0eSBzbG90IHN0aWxsIHBpbnMgYSBjc3MgcmVmZXJlbmNlIHdoaWNoXG5tbS9tZW1jb250cm9sLmM6MjI5NjpcdFx0ICogbWVtX2Nncm91cF9jc3Nfb2ZmbGluZSgpIHJlbGllcyBvbiBkcmFpbl9hbGxfc3RvY2soKVxubW0vbWVtY29udHJvbC5jLTIyOTctXHRcdCAqIHRvIHJlbGVhc2UuXG4tLVxubW0vbWVtY29udHJvbC5jPTQyNzA9c3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDM0Ni1cbm1tL21lbWNvbnRyb2wuYzo0MzQ3OnN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbm1tL21lbWNvbnRyb2wuYy00MzQ4LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTE1OT1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTUxNjEtXHQuY3NzX29ubGluZSA9IG1lbV9jZ3JvdXBfY3NzX29ubGluZSxcbm1tL21lbWNvbnRyb2wuYzo1MTYyOlx0LmNzc19vZmZsaW5lID0gbWVtX2Nncm91cF9jc3Nfb2ZmbGluZSxcbm1tL21lbWNvbnRyb2wuYy01MTYzLVx0LmNzc19yZWxlYXNlZCA9IG1lbV9jZ3JvdXBfY3NzX3JlbGVhc2VkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODIzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgQW5hbHlzaXMgb2YgTWVtb3J5IENHcm91cHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCwgdGhhdCYjMzk7cyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBjZ3JvdXAgc3Vic3lzdGVtLCByaWdodD8gQW5kIEkgc2VlIGBkcmFpbl9hbGxfc3RvY2tgIHdoaWNoIHJlbGllcyBvbiBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYC4gU2VlbXMgbG9naWNhbCB0byBhZGQgYGRyYWluX2FsbF9zdG9ja2AgdG8gdGhlIEZvY3VzU3ltYm9scyBsaXN0LCB0aGF0IHNlZW1zIHJlbGV2YW50IGdpdmVuIHRoZSBjb250ZXh0LgoKSSYjMzk7bSBhbHNvIHRoaW5raW5nIGFib3V0IGluY2x1ZGluZyBgbWVtb3J5X2hpZ2hfd3JpdGVgLCBgbWVtb3J5X21heF93cml0ZWAsIGBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5YCwgYW5kIGBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXhgLCBhcyB0aGV5IHNlZW0gbGlrZWx5IHRvIGJlIGltcG9ydGFudC4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBhZGQgYHRyeV9jaGFyZ2VfbWVtY2dgIHRvIHRoZSBsaXN0LiBJIHNob3VsZCBjaGVjayB0aGF0IG9uZSB0b28uIEkmIzM5O2xsIG5lZWQgdG8gcmVhbGx5IGRpZyBpbnRvIGB0cnlfY2hhcmdlX21lbWNnYCwgdG8gdW5kZXJzdGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSB3aG9sZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfY2hhcmdlX21lbWNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0yNTU0PXZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubW0vbWVtY29udHJvbC5jLTI2NDMtXG5tbS9tZW1jb250cm9sLmM6MjY0NDpzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbm1tL21lbWNvbnRyb2wuYy0yNjQ1LVx0XHRcdCAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4tLVxubW0vbWVtY29udHJvbC5jPTI4NTM9c3RhdGljIGlubGluZSBpbnQgdHJ5X2NoYXJnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yODU4LVxubW0vbWVtY29udHJvbC5jOjI4NTk6XHRyZXR1cm4gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKTtcbm1tL21lbWNvbnRyb2wuYy0yODYwLX1cbi0tXG5tbS9tZW1jb250cm9sLmM9MzE1Mj1zdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMTU5LVxubW0vbWVtY29udHJvbC5jOjMxNjA6XHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcbm1tL21lbWNvbnRyb2wuYy0zMTYxLVx0aWYgKHJldClcbi0tXG5tbS9tZW1jb250cm9sLmM9NTIwMD1zdGF0aWMgaW50IGNoYXJnZV9tZW1jZyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTUyMDgtXHRpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpXG5tbS9tZW1jb250cm9sLmM6NTIwOTpcdFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xubW0vbWVtY29udHJvbC5jLTUyMTAtXHRpZiAocmV0KSB7XG4tLVxubW0vbWVtY29udHJvbC5jPTU2MjA9Ym9vbCBtZW1fY2dyb3VwX3NrX2NoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTYyNy1cbm1tL21lbWNvbnRyb2wuYzo1NjI4Olx0aWYgKHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcykgPT0gMCkge1xubW0vbWVtY29udHJvbC5jLTU2MjktXHRcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU09DSywgbnJfcGFnZXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzM5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIE1lbW9yeSBDb250cm9sIC0gQSBRdWljayBEaWFnbm9zdGljKioKCk9rYXksIHNvIGB0cnlfY2hhcmdlX21lbWNnYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgbWVhbmluZyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vd+KAlGxpbWl0cyB0aGUgc2NvcGUgb2Ygd2hlcmUgaXQgY291bGQgYmUgY2F1c2luZyBpc3N1ZXMgaWYgdGhlcmUgd2VyZSBhIHByb2JsZW0uIE5vdywgYGRyYWluX2FsbF9zdG9ja2AgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgdmlzaWJsZSBvdXRzaWRlIG9mIGl0cyBjb21waWxhdGlvbiB1bml0LCBtZWFuaW5nIGl0IGNvdWxkIGJlIGNhbGxlZCBmcm9tIGFueXdoZXJlLiBUaGF0IHJhaXNlcyBteSBleWVicm93cyBhIGJpdC4KCkdpdmVuIHRoYXQsIG15IG5leHQgc3RlcCBpcyBjbGVhcjogbGV0JiMzOTtzIGRpdmUgaW50byBgbW0vbWVtY29udHJvbC12MS5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBkcmFpbl9hbGxfc3RvY2tgLiBOZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgZnVuY3Rpb24gd29ya3MgYW5kIGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIG1lbW9yeSBjb250cm9sIHN5c3RlbSwgZXNwZWNpYWxseSBzaW5jZSBpdCYjMzk7cyBnb3Qgc3VjaCBicm9hZCB2aXNpYmlsaXR5LiBUaW1lIHRvIGRpc3NlY3QgdGhhdCBjb2RlIGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcmFpbl9hbGxfc3RvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLXYxLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC12MS5jPTE3NzE9c3RhdGljIGludCBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xODEwLVx0XHRpZiAoIWRyYWluZWQpIHtcbm1tL21lbWNvbnRyb2wtdjEuYzoxODExOlx0XHRcdGRyYWluX2FsbF9zdG9jayhtZW1jZyk7XG5tbS9tZW1jb250cm9sLXYxLmMtMTgxMi1cdFx0XHRkcmFpbmVkID0gdHJ1ZTtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MTgzND1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xODQwLVxubW0vbWVtY29udHJvbC12MS5jOjE4NDE6XHRkcmFpbl9hbGxfc3RvY2sobWVtY2cpO1xubW0vbWVtY29udHJvbC12MS5jLTE4NDItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMzAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIFN0b2NrIE1hbmFnZW1lbnQgTWV0aG9kcyoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4gVGhlIGBkcmFpbl9hbGxfc3RvY2tgIGZ1bmN0aW9uIGlzbiYjMzk7dCBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IHNwYXJrcyBhIGZldyBxdWVzdGlvbnMuIEdpdmVuIHRoYXQsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBtZW1vcnktcmVsYXRlZCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIGBtZW1vcnlfaGlnaF93cml0ZWAgYW5kIGBtZW1vcnlfbWF4X3dyaXRlYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBub24tc3RhdGljIG5hdHVyZSBvZiB0aGUgZnVuY3Rpb24gZG9lc24mIzM5O3QgY3JlYXRlIGFueSB1bmV4cGVjdGVkIGlzc3VlcyB3aGVuIG1hbmFnaW5nIGhpZ2ggbWVtb3J5IHNpdHVhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjYWxsIHRvIGBkcmFpbl9hbGxfc3RvY2tgIGlzIHBvdGVudGlhbGx5IGdvaW5nIHRvIHdyaXRlIG1vcmUgdG8gbWVtb3J5IHRoYW4gaW50ZW5kZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW9yeV9oaWdoX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz00ODMxPXN0YXRpYyBpbnQgbWVtb3J5X2hpZ2hfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ4MzYtXG5tbS9tZW1jb250cm9sLmM6NDgzNzpzdGF0aWMgc3NpemVfdCBtZW1vcnlfaGlnaF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG5tbS9tZW1jb250cm9sLmMtNDgzOC1cdFx0XHRcdCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG4tLVxubW0vbWVtY29udHJvbC5jPTUwODU9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTUxMTQtXHRcdC5zZXFfc2hvdyA9IG1lbW9yeV9oaWdoX3Nob3csXG5tbS9tZW1jb250cm9sLmM6NTExNTpcdFx0LndyaXRlID0gbWVtb3J5X2hpZ2hfd3JpdGUsXG5tbS9tZW1jb250cm9sLmMtNTExNi1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkNncm91cCBGaWxlIFdyaXRlIENhbGxiYWNrczogQ29uc2lkZXJhdGlvbnMgJmFtcDsgSW1wbGljYXRpb25zKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gdGhlc2UgY2dyb3VwIGZpbGUgd3JpdGUgY2FsbGJhY2tzLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIG1lY2hhbmljcyBvZiB0aGVzZSB3cml0ZXMuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZWlyIGltcGxpY2F0aW9ucywgdGhlaXIgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIFRoZSBmbG93IGlzIGNyaXRpY2FsLCBuYXR1cmFsbHkuIFdoZXJlIGFyZSB3ZSBnZXR0aW5nIHRoZXNlIGNhbGxiYWNrcz8gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gQW5kIG1vc3QgaW1wb3J0YW50bHksIGhvdyYjMzk7cyBpdCBhZmZlY3QgdGhlIHN5c3RlbSYjMzk7cyBvdmVyYWxsIGhlYWx0aD8KCkJ1dCB0aGF0IHRob3VnaHQgaXMgcXVpY2tseSBmb2xsb3dlZCBieSBhbm90aGVyOiAqKmBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCoqLiBUaGF0IGZ1bmN0aW9uLi4uIGl0JiMzOTtzIHBpdm90YWwsIGlzbiYjMzk7dCBpdD8gSG93IGRvZXMgdGhpcyBzZXQgb2Ygd3JpdGUgY2FsbGJhY2tzIGludGVyYWN0IHdpdGggdGhlIG1lbW9yeSBjZ3JvdXAmIzM5O3MgQ1NTIG9mZmxpbmluZyBwcm9jZXNzPyBJcyB0aGVyZSBhIHJhY2UgY29uZGl0aW9uIGNvbmNlcm4/IERvZXMgdGhpcyBjYWxsYmFjayBwYXRoIGhhdmUgYW55IGRlcGVuZGVuY2llcyBvbiBvciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgb2ZmbGluaW5nIHByb2NlZHVyZSwgYW5kIGNvbnZlcnNlbHk/IEtub3dpbmcgdGhpcyBpcyBnb2luZyB0byBiZSBrZXkgdG8gbWFraW5nIHN1cmUgdGhhdCB0aGVzZSB3cml0ZXMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IGludHJvZHVjZSBhIG5ldyBidWcsIG9yIGV4YWNlcmJhdGUgYW4gZXhpc3Rpbmcgb25lLiBUaGF0IGludGVyYWN0aW9uIGNvdWxkIGJlIGRlbGljYXRlLCBhbmQgaWYgSSYjMzk7bSBub3QgY2FyZWZ1bCwgSSBjb3VsZCBpbnRyb2R1Y2Ugc29tZSBzZXJpb3VzbHkgbmFzdHkgbWVtb3J5IGNvcnJ1cHRpb24sIG9yIHdvcnNlLCBhIHN5c3RlbSBjcmFzaC4gTmVlZCB0byBkaWcgaW50byB0aGF0IHJlbGF0aW9uc2hpcCBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX2Nzc19vZmZsaW5lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0yMjgxPXN0YXRpYyBib29sIGlzX21lbWNnX2RyYWluX25lZWRlZChzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwICpzdG9jayxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjI5NS1cdFx0ICogQW4gZW1wdHkgc2xvdCBzdGlsbCBwaW5zIGEgY3NzIHJlZmVyZW5jZSB3aGljaFxubW0vbWVtY29udHJvbC5jOjIyOTY6XHRcdCAqIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoKSByZWxpZXMgb24gZHJhaW5fYWxsX3N0b2NrKClcbm1tL21lbWNvbnRyb2wuYy0yMjk3LVx0XHQgKiB0byByZWxlYXNlLlxuLS1cbm1tL21lbWNvbnRyb2wuYz00MjcwPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQzNDYtXG5tbS9tZW1jb250cm9sLmM6NDM0NzpzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG5tbS9tZW1jb250cm9sLmMtNDM0OC17XG4tLVxubW0vbWVtY29udHJvbC5jPTUxNTk9c3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MTYxLVx0LmNzc19vbmxpbmUgPSBtZW1fY2dyb3VwX2Nzc19vbmxpbmUsXG5tbS9tZW1jb250cm9sLmM6NTE2MjpcdC5jc3Nfb2ZmbGluZSA9IG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUsXG5tbS9tZW1jb250cm9sLmMtNTE2My1cdC5jc3NfcmVsZWFzZWQgPSBtZW1fY2dyb3VwX2Nzc19yZWxlYXNlZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMyNgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgYXMgYSBQb3RlbnRpYWwgRm9jdXMgU3ltYm9sKioKCkFscmlnaHQsIHNvIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCBpcyBhIHN0YXRpYyB0aGluZywgbm90IHNvbWV0aGluZyB0aGF0IGNoYW5nZXMgZHluYW1pY2FsbHkuIFRoYXQgbWFrZXMgaXQgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIHVzZSBhcyBhIGBGb2N1c1N5bWJvbGAgZm9yIG9wdGltaXphdGlvbi4gSXQmIzM5O3MgYSBrZXkgcG9pbnQgb2YgcmVmZXJlbmNlLCBhIHN0YWJsZSBtYXJrZXIgd2l0aGluIHRoZSBtZW1vcnkgY2dyb3VwIHN1YnN5c3RlbS4gTm93LCB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLCB0aGUgYGRyYWluX2FsbF9zdG9ja2AgZnVuY3Rpb24gc2VlbXMgbGlrZSBhIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGV4YW1pbmUgaW4gbW9yZSBkZXRhaWwuIEl0JiMzOTtzIHByb2JhYmx5IHRpZWQgY2xvc2VseSB0byB0aGUgbGlmZWN5Y2xlIG9yIGhhbmRsaW5nIG9mIHJlc291cmNlcyByZWxhdGVkIHRvIHRoaXMgb2ZmbGluZSBwcm9jZXNzLgoKT2YgY291cnNlLCBiZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgc2hvdWxkIGNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBjYW4mIzM5O3QgcHJvY2VlZCBtZWFuaW5nZnVsbHkgaWYgbWVtb3J5IGNncm91cHMgYXJlbiYjMzk7dCBldmVuIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBidWlsZC4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHByZXJlcXVpc2l0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDY4PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDc3LVxuaW5pdC9LY29uZmlnOjEwNzg6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA3OS1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA4Ni1cbmluaXQvS2NvbmZpZzoxMDg3OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA4OC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5My1cbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTEwOTUtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDAtXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTAyLVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MzMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIGBkcmFpbl9hbGxfc3RvY2tgIGluIFJlbGF0aW9uIHRvIGBDT05GSUdfTUVNQ0dgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgQ09ORklHX01FTUNHYCByaWdodCBub3cuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFuZCB0aGUgZnVuY3Rpb24gYGRyYWluX2FsbF9zdG9ja2AuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGRyYWluX2FsbF9zdG9ja2AgaXMgYSBzeW1ib2wgdGhhdCYjMzk7cyBleHBvcnRlZCwgYWNjZXNzaWJsZSBvdXRzaWRlIG9mIGl0cyBpbW1lZGlhdGUgY29tcGlsYXRpb24gdW5pdCwgb3IgaWYgaXQgaXMgaW5zdGVhZCBkZWNsYXJlZCBhcyBub24tc3RhdGljLCB3aGljaCB3b3VsZCBvZmZlciBzaW1pbGFyIGJ1dCBsaW1pdGVkIGZ1bmN0aW9uYWxpdHkgYW5kIHZpc2liaWxpdHkuIFVuZGVyc3RhbmRpbmcgdGhpcyBjb25uZWN0aW9uIGlzIGtleSB0byBwcm9wZXJseSBhbmFseXppbmcgaXRzIGJlaGF2aW9yIHdpdGhpbiB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipkcmFpbl9hbGxfc3RvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDQ4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBxdWljayBtZW50YWwgc2NhbiwgdGFpbG9yZWQgZm9yIHNvbWVvbmUgd2hvIHVuZGVyc3RhbmRzIHRoZXNlIGtlcm5lbCBpbnRlcm5hbHMgYXMgd2VsbCBhcyBJIGRvOgoKKipBbmFseXppbmcgS2VybmVsIE1lbW9yeSBBY2NvdW50aW5nKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBpdCYjMzk7cyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IHNvbWV0aGluZyBpc24mIzM5O3QgZXhwb3J0ZWQsIHdoaWNoIGlzIGEga2V5IG9ic2VydmF0aW9uLiBUaGUgZnVuY3Rpb24gaXMgKm5vdCogc3RhdGljLCB3aGljaCBydWxlcyBvdXQgb25lIGNsYXNzIG9mIHZpc2liaWxpdHkgaXNzdWVzLiBUaGF0IG1ha2VzIHRoaW5ncyBzb21ld2hhdCBpbnRlcmVzdGluZzsgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGZyb20gaWYgaXQmIzM5O3Mgbm90IGV4cG9ydGVkLgoKSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGlmIHRoZXJlIGFyZSAqb3RoZXIqIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwcm9jZXNzLiBJJiMzOTttIG1vdmluZyBvbiB0byBjb25zaWRlciB0aGUgc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIGNvbnRleHQuCgpgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgYW5kIGBtZW1vcnlfaGlnaF93cml0ZWAgYXJlIGJvdGggc3RhdGljLCBidXQgdGhleSYjMzk7cmUgY2FsbGJhY2tzLCB3aGljaCBtZWFucyB0aGVpciB2aXNpYmlsaXR5IGFuZCB1c2UgYXJlIHRpZ2h0bHkgY29udHJvbGxlZCB3aXRoaW4gYSBzcGVjaWZpYyBmcmFtZXdvcmsuIFRob3NlIHN0YXRpYyBjYWxsYmFja3MgaGF2ZSBhIHNwZWNpZmljIHB1cnBvc2UuCgpgdHJ5X2NoYXJnZV9tZW1jZ2AgaXMgYWxzbyBzdGF0aWMsIHdoaWNoIHByb2JhYmx5IG1lYW5zIGl0JiMzOTtzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiwgbm90IGludGVuZGVkIGZvciBnZW5lcmFsIHVzZSBvdXRzaWRlIGl0cyBtb2R1bGUuCgpGaW5hbGx5LCBgbWVtX2Nncm91cF9za19jaGFyZ2VgIGlzICpub3QqIHN0YXRpYy4gVGhpcyBpcyBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSB1c2VkIG91dHNpZGUgb2YgdGhlIG1vZHVsZS4gU28sIHRoZSBsYWNrIG9mIHN0YXRpYyBzY29waW5nIGFuZCB0aGUgbm9uLWV4cG9ydGVkIGF0dHJpYnV0ZSBvZiB0aGUgZmlyc3QgZnVuY3Rpb24gYXJlIHdvcnRoIGludmVzdGlnYXRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfc2tfY2hhcmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz01NTk1PXZvaWQgbWVtX2Nncm91cF9za19pbmhlcml0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NjExLS8qKlxubW0vbWVtY29udHJvbC5jOjU2MTI6ICogbWVtX2Nncm91cF9za19jaGFyZ2UgLSBjaGFyZ2Ugc29ja2V0IG1lbW9yeVxubW0vbWVtY29udHJvbC5jLTU2MTMtICogQHNrOiBzb2NrZXQgaW4gbWVtY2cgdG8gY2hhcmdlXG4tLVxubW0vbWVtY29udHJvbC5jLTU2MTktICovXG5tbS9tZW1jb250cm9sLmM6NTYyMDpib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxubW0vbWVtY29udHJvbC5jLTU2MjEtXHRcdFx0ICBnZnBfdCBnZnBfbWFzaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYzMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBNZW1vcnkgQWNjb3VudGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nLCBhbmQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCBpcyBkZWZpbml0ZWx5IHN0YW5kaW5nIG91dCBhcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGEgY2xlYXIgRm9jdXNTeW1ib2wgZm9yIHRoaXMgaW52ZXN0aWdhdGlvbi4gQnV0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJIHdvbmRlciwgd2hhdCBhYm91dCBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgPyBUaGF0IGxvb2tzIHN0YXRpYywgd2hpY2ggdXN1YWxseSBtZWFucyBpdCYjMzk7cyBhIHBpZWNlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGluIHRoZSBiaWdnZXIgcGljdHVyZSwgc28gbGV0JiMzOTtzIGtlZXAgdGhhdCBpbiBtaW5kLiBBbmQgd2hpbGUgSSYjMzk7bSBhdCBpdCwgYGNoYXJnZV9tZW1jZ2AgaXMgYWxzbyBzdGF0aWMsIHNvIHRoZXkgYm90aCBkZXNlcnZlIGEgbG9vay4gQmVzdCBzdGFydCB3aXRoIHRoZSBrbm93biwgc28gbGV0JiMzOTtzIGNoZWNrIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAsIHF1aWNrbHkgcmVmZXJlbmNpbmcgYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYC4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSB0aGUgZGVmaW5pdGlvbnMgYW5kIGNvbnRleHQgSSBuZWVkIHRvIGtpY2sgb2ZmIHRoaXMgZGVlcCBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX3NrX2NoYXJnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE2MzM9dm9pZCBtZW1fY2dyb3VwX3NrX2luaGVyaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTYzNDpib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTYzNS1cdFx0XHQgIGdmcF90IGdmcF9tYXNrKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNjkzPXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3NrX2luaGVyaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTY5Ni1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE2OTc6c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2OTgtXHRcdFx0XHRcdHVuc2lnbmVkIGludCBucl9wYWdlcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxNjkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipGb2N1c2luZyBvbiBNZW1vcnkgQWNjb3VudGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgbWVtb3J5IGFjY291bnRpbmcgd2l0aGluIGNncm91cHMuIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgaXMgYSBzb2xpZCBpbmRpY2F0b3IsIGEgc3Ryb25nIEZvY3VzU3ltYm9sLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgcG9zaXRpdmUuIEJ1dC4uLiBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGBtZW1fY2dyb3VwX2NoYXJnZWAuIEl0JiMzOTtzIHJlbGF0ZWQsIGJ1dCB3YXJyYW50cyBhIGNsb3NlciBsb29rIHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGFuZCBhbnkgcG90ZW50aWFsIG92ZXJsYXBzIG9yIGRpZmZlcmVuY2VzIGluIHRoZSBtZXRyaWNzLiBUaW1lIHRvIGRpZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfY2hhcmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjI2PXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2JlbG93X21pbihzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTYzNS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjYzNjppbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTYzNy1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTYzOC0vKipcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjYzOTogKiBtZW1fY2dyb3VwX2NoYXJnZSAtIENoYXJnZSBhIG5ld2x5IGFsbG9jYXRlZCBmb2xpbyB0byBhIGNncm91cC5cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY0MC0gKiBAZm9saW86IEZvbGlvIHRvIGNoYXJnZS5cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NTEtICovXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NTI6c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NTMtXHRcdFx0XHQgICAgZ2ZwX3QgZ2ZwKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY1Ni1cdFx0cmV0dXJuIDA7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NTc6XHRyZXR1cm4gX19tZW1fY2dyb3VwX2NoYXJnZShmb2xpbywgbW0sIGdmcCk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NTgtfVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjU5LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NjYwOmludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcCk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjEtXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjY1PXZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY3MC0gKlxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NjcxOiAqIFVuY2hhcmdlIGEgZm9saW8gcHJldmlvdXNseSBjaGFyZ2VkIHdpdGggbWVtX2Nncm91cF9jaGFyZ2UoKS5cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY3Mi0gKi9cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMTQyPXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2JlbG93X21pbihzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNDctXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMTQ4OnN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTQ5LVx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNTMtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMTU0OnN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE1NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDM3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE1lbW9yeSBBY2NvdW50aW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBgX19tZW1fY2dyb3VwX2NoYXJnZWAgZmxhZ2dlZCBhcyBhIGtleSBhcmVhIG9mIGZvY3VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gUmlnaHQsIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciwgd2VsbCwgKmNoYXJnaW5nKiBtZW1vcnkgdG8gYSBjZ3JvdXAuIFRoYXQgc2VlbXMgY2VudHJhbCB0byBob3cgbWVtb3J5IGxpbWl0cyBhbmQgYWNjb3VudGluZyB3b3JrIGluIExpbnV4LiBMZXQmIzM5O3MgZGlnIGluIGFuZCBtYWtlIHN1cmUgdGhhdCBmdW5jdGlvbiBpcyBpbiBgbW0vbWVtY29udHJvbC5jYC4gWWVwLCBzZWVtcyByZWFzb25hYmxlIHRoYXQgdGhpcyBhY2NvdW50aW5nIGZ1bmN0aW9uIHdvdWxkIGxpdmUgdGhlcmUuIEFscmlnaHQsIHRpbWUgdG8gb3BlbiB1cCB0aGF0IGZpbGUgYW5kIGdldCB0byByZWFkaW5nIHRoZSBjb2RlLi4uIGxldCYjMzk7cyBzZWUgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcyBhbmQgd2hlcmUgaXQgZml0cyBpbiB0aGUgZ3JlYXRlciBzY2hlbWUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbnB1dHMsIG91dHB1dHMsIGFuZCBhbnkgY2FsbHMgdG8gb3RoZXIga2V5IG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gR290dGEgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgcmVsYXRlZCB0byB0aGlzLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWVtX2Nncm91cF9jaGFyZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTUyMDA9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjE5LVxubW0vbWVtY29udHJvbC5jOjUyMjA6aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcbm1tL21lbWNvbnRyb2wuYy01MjIxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MTkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQ2dyb3VwIEJ1ZyoqCgpPa2F5LCBzbyBgX19tZW1fY2dyb3VwX2NoYXJnZWAgZGVmaW5pdGVseSBzZWVtcyBsaWtlIGEga2V5IGFyZWEsIGEgZ29vZCBGb2N1c1N5bWJvbCB0byBzdGFydCB3aXRoLiBMZXQmIzM5O3MgcmV2aXNpdCBgZHJhaW5fYWxsX3N0b2NrYC4gSSByZW1lbWJlciBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAsIHdoaWNoIGlzIGEgY2dyb3VwIGNhbGxiYWNrLiBTbywgdGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gbGlrZWx5IHJlc2lkZXMgaW4gdGhlIG1lbWNnIHN0b2NrIGRyYWluaW5nIHByb2Nlc3MuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIGEgc2l0dWF0aW9uIHdoZXJlIGFuIGVtcHR5IHNsb3QgaXMgc3RpbGwgaG9sZGluZyBvbnRvIGEgQ1NTIHJlZmVyZW5jZSDigJMgaW50ZXJlc3RpbmcuIFRoZXJlZm9yZSwgYGRyYWluX2FsbF9zdG9ja2AgaXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gdG8gemVybyBpbiBvbi4gQWxzbywgdGhlIGZ1bmN0aW9ucyBgX19tZW1fY2dyb3VwX2NoYXJnZWAgYW5kIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgYXJlIGVxdWFsbHkgc3VpdGFibGUgdGFyZ2V0cyBmb3IgZnV6emluZy4gSG1tLCB3aGF0IGFib3V0IGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCBpdHNlbGY/IEl0JiMzOTtzIHN0YXRpYywgd2hpY2ggaXMgYSBiaXQgb2YgYSB3cmlua2xlLCBidXQgaXQmIzM5O3MgKnRoZSogY2FsbGJhY2sgZm9yIGBjc3Nfb2ZmbGluZWAsIHNvIGRlZmluaXRlbHkgcmVsZXZhbnQuIEFueSBvdGhlciBjYW5kaWRhdGVzPyBPaCwgcmlnaHQsIGBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5YCBpbiBgbW0vbWVtY29udHJvbC12MS5jYC4gSSBzaG91bGQgYWRkIHRoYXQgb25lIHRvIHRoZSBsaXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX2ZvcmNlX2VtcHR5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC12MS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wtdjEuYz0xNzcxPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9yZXNpemVfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTgzMy0gKi9cbm1tL21lbWNvbnRyb2wtdjEuYzoxODM0OnN0YXRpYyBpbnQgbWVtX2Nncm91cF9mb3JjZV9lbXB0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9tZW1jb250cm9sLXYxLmMtMTgzNS17XG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE4NTktXG5tbS9tZW1jb250cm9sLXYxLmM6MTg2MDpzdGF0aWMgc3NpemVfdCBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5X3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbm1tL21lbWNvbnRyb2wtdjEuYy0xODYxLVx0XHRcdFx0XHQgICAgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xODY3LVx0XHRyZXR1cm4gLUVJTlZBTDtcbm1tL21lbWNvbnRyb2wtdjEuYzoxODY4Olx0cmV0dXJuIG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHkobWVtY2cpID86IG5ieXRlcztcbm1tL21lbWNvbnRyb2wtdjEuYy0xODY5LX1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MjM3Nz1zdHJ1Y3QgY2Z0eXBlIG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5jLTI0MTEtXHRcdC5uYW1lID0gXCYjMzQ7Zm9yY2VfZW1wdHlcJiMzNDssXG5tbS9tZW1jb250cm9sLXYxLmM6MjQxMjpcdFx0LndyaXRlID0gbWVtX2Nncm91cF9mb3JjZV9lbXB0eV93cml0ZSxcbm1tL21lbWNvbnRyb2wtdjEuYy0yNDEzLVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyNzEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE1lbW9yeSBDb250cm9sIFBhdGNoKioKCk9rYXksIHRoaXMgbG9va3MgbGlrZSBhIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIGFyZWEgZm9yIGZ1enppbmcuIFRoZSBjb2RlJiMzOTtzIGEgYml0IHN0YXRpYywgYnV0IEkmIzM5O3ZlIGdvdCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O20gdGhpbmtpbmcgYGRyYWluX2FsbF9zdG9ja2AsIGBfX21lbV9jZ3JvdXBfY2hhcmdlYCwgYW5kIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgYXJlIGFsbCBzb2xpZCBmb2N1cyBzeW1ib2xzIGhlcmUuIExldCYjMzk7cyBzZWUuLi4gYGRyYWluX2FsbF9zdG9ja2AgaXNuJiMzOTt0IGV4cG9ydGVkLCB3aGljaCBpcyBhIHNoYW1lLCBidXQgaXQgKmlzKiBub24tc3RhdGljLCBzbyB0aGVyZSYjMzk7cyBob3BlLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGZpbmQgdGhlIGVudHJ5cG9pbnQgaW4gYW4gZXhwb3J0ZWQgZnVuY3Rpb24uCgpOb3csIGlzIHRoZXJlIGFueXRoaW5nIGVsc2UgZXhwb3J0ZWQgb3Igbm9uLXN0YXRpYyB0aGF0IGNhbGxzIGBkcmFpbl9hbGxfc3RvY2tgIGRpcmVjdGx5PyBOZWVkIHRvIGZvbGxvdyB0aGUgY2FsbCBncmFwaCwgc2VlIGlmIHRoZXJlJiMzOTtzIGFueSB3YXkgdG8gdHJpZ2dlciBpdCBleHRlcm5hbGx5LiBBaCwgaGVyZSYjMzk7cyBhIGdvb2QgbGVhZDogYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgLiBUaGF0JiMzOTtzIGEgY2FsbGJhY2ssIHNvIGl0JiMzOTtzIGluaXRpYXRlZCBieSB0aGUgY2dyb3VwIGNvcmUuIFRoYXQmIzM5O3MgZ29vZCwgdGhhdCBtZWFucyBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGNoZWNraW5nLgoKVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgaG93IG1lbW9yeSBjZ3JvdXAgc3RvY2sgZHJhaW5pbmcgd29ya3MuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGFyZWEgZm9yIGZ1enppbmc7IG1lbW9yeSBtYW5hZ2VtZW50IGJ1Z3MgYXJlIGFsd2F5cyB0cmlja3kuIFRoZSBwYXRjaCBpcyBwcm9iYWJseSBnb2luZyB0byBiZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBzdG9jayBkcmFpbmluZywgc28gSSYjMzk7bSB0aGlua2luZyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGBNRU1DR2AgY29uZmlndXJhdGlvbiBpcywgb2YgY291cnNlLCBhIHByZXJlcXVpc2l0ZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYGlzX21lbWNnX2RyYWluX25lZWRlZGAgZnVuY3Rpb24gaW4gYG1tL21lbWNvbnRyb2wuY2AuIEdvdHRhIGJlIHRob3JvdWdoIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc19tZW1jZ19kcmFpbl9uZWVkZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTIyMjI9c3RhdGljIHZvaWQgcmVmaWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yMjgwLVxubW0vbWVtY29udHJvbC5jOjIyODE6c3RhdGljIGJvb2wgaXNfbWVtY2dfZHJhaW5fbmVlZGVkKHN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrLFxubW0vbWVtY29udHJvbC5jLTIyODItXHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yMzI1PXZvaWQgZHJhaW5fYWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yMzQ0LVx0XHRpZiAoIXRlc3RfYml0KEZMVVNISU5HX0NBQ0hFRF9DSEFSR0UsIFx1MDAyNm1lbWNnX3N0LVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbm1tL21lbWNvbnRyb2wuYzoyMzQ1Olx0XHQgICAgaXNfbWVtY2dfZHJhaW5fbmVlZGVkKG1lbWNnX3N0LCByb290X21lbWNnKSBcdTAwMjZcdTAwMjZcbm1tL21lbWNvbnRyb2wuYy0yMzQ2LVx0XHQgICAgIXRlc3RfYW5kX3NldF9iaXQoRkxVU0hJTkdfQ0FDSEVEX0NIQVJHRSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMjQKCQkJCQkJCW91dHB1dDogMTI5CgkJCQkJCQl0aG91Z2h0czogMTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lbWNnIFN0b2NrIERyYWluaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgZnVuY3Rpb24gYGlzX21lbWNnX2RyYWluX25lZWRlZGAgaXMgc3RhdGljLCB3aGljaCBpcyBhIGtleSBkZXRhaWwgZm9yIHNjb3BpbmcgYW5kIHBvdGVudGlhbCBpbmxpbmluZyBjb25zaWRlcmF0aW9ucy4gYGRyYWluX2FsbF9zdG9ja2AsIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBub24tc3RhdGljLCBpbXBseWluZyBpdCBtaWdodCBiZSBjYWxsZWQgZnJvbSBhIHdpZGVyIHJhbmdlIG9mIGNvZGUgb3IgaGF2ZSBicm9hZGVyIGFjY2Vzcy4gSSBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZC4KCk15IGZvY3VzIGlzIGZpcm1seSBvbiBgZHJhaW5fYWxsX3N0b2NrYCwgYF9fbWVtX2Nncm91cF9jaGFyZ2VgLCBhbmQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCAtLSB0aG9zZSBhcmUgbXkgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyBpbiB0aGlzIGNvbnRleHQuIFRoZXkmIzM5O3JlIHdoZXJlIHRoZSBjb3JlIHdvcmsgaXMgaGFwcGVuaW5nLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBzdG9jayBkcmFpbmluZy4KClRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXMgYSAqZnVuY3Rpb25hbCBjaGFuZ2UqIHRvIGhvdyBtZW1jZyBzdG9jayBkcmFpbmluZyB3b3Jrcy4gVGhlIGNoYW5nZSBzZWVtcyByZWxhdGl2ZWx5IHRhcmdldGVkLCBtb2RpZnlpbmcgYSBjb25kaXRpb24gd2l0aGluIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgLiBSZW1vdmluZyB0aGUgYHN0b2NrLSZndDtucl9wYWdlc1tpXWAgY2hlY2sgaXMgc2lnbmlmaWNhbnQuIFRoZSBpbnRlbnQgaXMgY2xlYXI6IHRvIGVuc3VyZSAqZW1wdHkqIHN0b2NrIHNsb3RzIGFsc28gdHJpZ2dlciBhIGRyYWluLiBQcmV2aW91c2x5LCBlbXB0eSBzbG90cyBtaWdodCBub3QgaGF2ZSB0cmlnZ2VyZWQgaXQsIHNvIGl0JiMzOTtzIGEgZGVwYXJ0dXJlIGZyb20gdGhlIHByaW9yIGJlaGF2aW91ci4gVGhlIHJlYXNvbmluZyBpbXBsaWVzIGl0JiMzOTtzIGFib3V0IHJlbGVhc2luZyBwaW5uZWQgY3NzIHJlZmVyZW5jZXMsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBhcyB0aGVzZSBhcmUgcmVsYXRlZCB0byB0aGUgbWVtb3J5IHJlc291cmNlIGFjY291bnRpbmcuCgpHaXZlbiBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgY3JpdGljYWwgYXJlYSBsaWtlIG1lbWNnIHN0b2NrIGRyYWluaW5nLCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLiBJdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgcG90ZW50aWFsIGVkZ2UgY2FzZSBpc3N1ZXMgb3IgdW5leHBlY3RlZCBjb25zZXF1ZW5jZXMgcmVsYXRlZCB0byB0aW1pbmcgb3IgY29uY3VycmVuY3kuIFRoZSBmYWN0IHRoYXQgdGhlIGNoYW5nZSBpcyBzcGVjaWZpYyB0byB0aGUgYE1FTUNHYCBjb25maWd1cmF0aW9uIGlzIGFsc28gaW1wb3J0YW50IGNvbnRleHQuIFRoaXMgbWVhbnMgaXQgb25seSBpbXBhY3RzIHN5c3RlbXMgd2l0aCBtZW1jZyBlbmFibGVkLCB3aGljaCBuYXJyb3dzIHRoZSBzY29wZSBvZiBpbnZlc3RpZ2F0aW9uLCBidXQgbm90IHRoZSBpbXBvcnRhbmNlLiBJIG5lZWQgdG8gYmVhciBpbiBtaW5kIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHJhaW5fYWxsX3N0b2NrJiMzNDssCiAgICAmIzM0O19fbWVtX2Nncm91cF9jaGFyZ2UmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9za19jaGFyZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBmb3IgZHJhaW5pbmcgbWVtY2cgc3RvY2sgaW4gYGlzX21lbWNnX2RyYWluX25lZWRlZGAuIEl0IHJlbW92ZXMgdGhlIGNoZWNrIGZvciBgc3RvY2stXHUwMDNlbnJfcGFnZXNbaV1gIGJlaW5nIG5vbi16ZXJvLCBlbnN1cmluZyB0aGF0IGVtcHR5IHNsb3RzIHN0aWxsIHRyaWdnZXIgYSBkcmFpbiB0byByZWxlYXNlIHBpbm5lZCBjc3MgcmVmZXJlbmNlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbWNnIHN0b2NrIGRyYWluaW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RyYWluX2FsbF9zdG9jayYjMzQ7LAogICAgJiMzNDtfX21lbV9jZ3JvdXBfY2hhcmdlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc2tfY2hhcmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIGRyYWluaW5nIG1lbWNnIHN0b2NrIGluIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgLiBJdCByZW1vdmVzIHRoZSBjaGVjayBmb3IgYHN0b2NrLVx1MDAzZW5yX3BhZ2VzW2ldYCBiZWluZyBub24temVybywgZW5zdXJpbmcgdGhhdCBlbXB0eSBzbG90cyBzdGlsbCB0cmlnZ2VyIGEgZHJhaW4gdG8gcmVsZWFzZSBwaW5uZWQgY3NzIHJlZmVyZW5jZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1jZyBzdG9jayBkcmFpbmluZyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYCBpbiBgbW0vbWVtY29udHJvbC5jYCB0byBmaXggYSBsb2dpYyBidWcgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIHJlZmVyZW5jZSBjb3VudGluZy4gSXQgZW5zdXJlcyB0aGF0IGEgcGVyLUNQVSBzdG9jayBpcyBkcmFpbmVkIGV2ZW4gaWYgYG5yX3BhZ2VzYCBpcyAwLCBiZWNhdXNlIHRoZSBgbWVtY2dgIHBvaW50ZXIgaXRzZWxmIGhvbGRzIGEgY3NzIHJlZmVyZW5jZSB0aGF0IG5lZWRzIHRvIGJlIHJlbGVhc2VkLiBUaGlzIGlzIGEgZml4IGZvciBhIHJlZmVyZW5jZSBsZWFrIG9yIGEgYnVnIHByZXZlbnRpbmcgYSBjZ3JvdXAgZnJvbSBiZWluZyBvZmZsaW5lZC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gKGZvciB1c2UtYWZ0ZXItZnJlZSkgYW5kIEtNRU1MRUFLIChmb3IgbWVtb3J5IGxlYWtzKSBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBpc3N1ZXMgaW4gdGhpcyBhcmVhLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGI2YTkwMzczNjJmOGI5ZTBjMTU3YmMzZWFiN2YwYzJhOGVkNTQ4ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDAzOjI3OjM1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDE3ZGExZjQzYjdkM2IuLmI5MzFlYzE2YmI4MjkgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTIyOTEsOCAmIzQzOzIyOTEsMTIgQEAgc3RhdGljIGJvb2wgaXNfbWVtY2dfZHJhaW5fbmVlZGVkKHN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrLAogCQlpZiAoIW1lbWNnKQogCQkJY29udGludWU7CiAKLQkJaWYgKFJFQURfT05DRShzdG9jay0mZ3Q7bnJfcGFnZXNbaV0pICZhbXA7JmFtcDsKLQkJICAgIG1lbV9jZ3JvdXBfaXNfZGVzY2VuZGFudChtZW1jZywgcm9vdF9tZW1jZykpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBbiBlbXB0eSBzbG90IHN0aWxsIHBpbnMgYSBjc3MgcmVmZXJlbmNlIHdoaWNoCiYjNDM7CQkgKiBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKCkgcmVsaWVzIG9uIGRyYWluX2FsbF9zdG9jaygpCiYjNDM7CQkgKiB0byByZWxlYXNlLgomIzQzOwkJICovCiYjNDM7CQlpZiAobWVtX2Nncm91cF9pc19kZXNjZW5kYW50KG1lbWNnLCByb290X21lbWNnKSkgewogCQkJZmx1c2ggPSB0cnVlOwogCQkJYnJlYWs7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1jZyBEcmFpbiBDb25kaXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSB0aGUgcmVtb3ZhbCBvZiB0aGUgYFJFQURfT05DRShzdG9jay0mZ3Q7bnJfcGFnZXNbaV0pYCBjb25kaXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSByZWZlcmVuY2UgY291bnRpbmcgbG9naWMgYW5kIGhvdyB3ZSBoYW5kbGUgZHJhaW5pbmcgdGhlIHBlci1DUFUgY2FjaGVzIHdpdGhpbiBtZW1vcnkgY2dyb3Vwcy4KClRoZSBjb21tZW50IGl0c2VsZiBnaXZlcyBhIGdvb2QgY2x1ZS4gSXQgc2VlbXMgdGhhdCBldmVuIHdpdGggYG5yX3BhZ2VzYCBhdCB6ZXJvLCB0aGVyZSYjMzk7cyBzdGlsbCBhIENTUyByZWZlcmVuY2UgcGlubmVkLCB3aGljaCBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZSgpYCByZWxpZXMgb24gYGRyYWluX2FsbF9zdG9jaygpYCB0byByZWxlYXNlLiBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBiaWdnZXIgcGljdHVyZS4gYGlzX21lbWNnX2RyYWluX25lZWRlZGAgc2VlbXMgdG8gaXRlcmF0ZSBvdmVyIHNvbWUgYXNwZWN0IG9mIHRoZSBtZW1vcnkgY2dyb3VwIHN0b2NrLCBsaWtlbHkgYHN0b2NrLSZndDtjYWNoZWRgLCBgc3RvY2stJmd0O25yX3BhZ2VzYCwgb3IgYHN0b2NrLSZndDttZW1jZ2AuIEJ5IHJlbW92aW5nIHRoZSBjaGVjayBmb3IgemVybyBgbnJfcGFnZXNgLCB0aGUgcGF0Y2ggaXMgc2F5aW5nICYjMzQ7eWVzLCBkcmFpbiB0aGlzIHN0b2NrIGV2ZW4gaWYgaXQmIzM5O3MgY3VycmVudGx5IGhvbGRpbmcgemVybyBwYWdlcywgYmVjYXVzZSB0aGUgQ1NTIHJlZmVyZW5jZSBzdGlsbCBuZWVkcyB0byBiZSBhY2NvdW50ZWQgZm9yLiYjMzQ7CgpUaGlzIGlzLCBhbG1vc3QgY2VydGFpbmx5LCBhIGxvZ2ljIGJ1ZyBmaXggcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIHJlZmVyZW5jZSBjb3VudGluZy4gVGhlIGlzc3VlIGlzIGxpa2VseSBhIENTUyByZWZlcmVuY2UgbGVhayBvciBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9vZmZsaW5lIHNpdHVhdGlvbi4gSWYgd2UgZnJlZSB0aGUgQ1NTIHByZW1hdHVyZWx5LCBLQVNBTiBtaWdodCB0cmlnZ2VyIGEgdXNlLWFmdGVyLWZyZWUgZXJyb3IuIEJ1dCB0aGlzIGlzbiYjMzk7dCBLTVNBTiB0ZXJyaXRvcnk7IHRoZXJlJiMzOTtzIG5vIGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIEtNU0FOIHdvdWxkbiYjMzk7dCBiZSByZWxldmFudCBoZXJlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gZm9sbG93aW5nIHRoZSBsb2dpYy4gSSBzaG91bGQgZG91YmxlIGNoZWNrIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgIGluIGBtbS9tZW1jb250cm9sLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc19tZW1jZ19kcmFpbl9uZWVkZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTIyMjI9c3RhdGljIHZvaWQgcmVmaWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yMjgwLVxubW0vbWVtY29udHJvbC5jOjIyODE6c3RhdGljIGJvb2wgaXNfbWVtY2dfZHJhaW5fbmVlZGVkKHN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrLFxubW0vbWVtY29udHJvbC5jLTIyODItXHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yMzI1PXZvaWQgZHJhaW5fYWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yMzQ0LVx0XHRpZiAoIXRlc3RfYml0KEZMVVNISU5HX0NBQ0hFRF9DSEFSR0UsIFx1MDAyNm1lbWNnX3N0LVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbm1tL21lbWNvbnRyb2wuYzoyMzQ1Olx0XHQgICAgaXNfbWVtY2dfZHJhaW5fbmVlZGVkKG1lbWNnX3N0LCByb290X21lbWNnKSBcdTAwMjZcdTAwMjZcbm1tL21lbWNvbnRyb2wuYy0yMzQ2LVx0XHQgICAgIXRlc3RfYW5kX3NldF9iaXQoRkxVU0hJTkdfQ0FDSEVEX0NIQVJHRSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA0MQoJCQkJCQkJb3V0cHV0OiAxODAKCQkJCQkJCXRob3VnaHRzOiAzNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGlzX21lbWNnX2RyYWluX25lZWRlZGAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaCwgYW5kIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjb3JlIG9mIGl0IGludm9sdmVzIG1vZGlmeWluZyBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYCBpbiBgbW0vbWVtY29udHJvbC5jYC4gRXNzZW50aWFsbHksIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBhIGxvZ2ljYWwgY29ycmVjdGlvbiByZWxhdGVkIHRvIHRoZSByZWZlcmVuY2UgY291bnRpbmcgd2l0aGluIGNncm91cHMuIFRoZSBmdW5jdGlvbiBkZXRlcm1pbmVzIGlmIGEgbWVtb3J5IGNncm91cCBuZWVkcyB0byBiZSAmIzM0O2RyYWluZWQmIzM0OyDigJMgdGhhdCBpcywgaWYgd2UgbmVlZCB0byBlbnN1cmUgaXRzIHJlc291cmNlcyBhcmUgcHJvcGVybHkgYWNjb3VudGVkIGZvciBhbmQgcmVsZWFzZWQuIFRoZSBjdXJyZW50IGxvZ2ljIHdhcyBjYXVzaW5nIGlzc3VlcywgbGlrZWx5IGxlYWRpbmcgdG8gcmVmZXJlbmNlIGxlYWtzIG9yIGJsb2NraW5nIGNncm91cCBvZmZsaW5pbmcsIHdoaWNoIGlzIGEga25vd24gcHJvYmxlbSBpbiB0aGlzIGFyZWEuCgpUaGUgZ29vZCBuZXdzIGlzIHRoYXQgdGhpcyBpcyAqbm90KiBhIHZ1bG5lcmFiaWxpdHkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyBhbHdheXMgYSByZWxpZWYuIFdlIGRvbiYjMzk7dCBuZWVkIHRvIGludm9sdmUgS01TQU4gZm9yIHRoaXMuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIGFuYWx5c2lzIHdpdGggS0FTQU4gYW5kIEtNRU1MRUFLLCBhbG9uZyB3aXRoIG5vcm1hbCB0ZXN0aW5nLCBzaG91bGQgYmUgcGVyZmVjdGx5IGFkZXF1YXRlIHRvIGVuc3VyZSBjb3JyZWN0bmVzcy4KClRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMgcGF0Y2guIEl0JiMzOTtzIGEgY2xlYW4sIGZvY3VzZWQgZml4IHRoYXQgYWRkcmVzc2VzIGEgbG9naWMgZmxhdyBpbiB0aGUgY2dyb3VwIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgZG9lc24mIzM5O3QgcmVxdWlyZSB0aGUgb3ZlcmhlYWQgb2YgS01TQU4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgIGluIGBtbS9tZW1jb250cm9sLmNgIHRvIGZpeCBhIGxvZ2ljIGJ1ZyByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXAgcmVmZXJlbmNlIGNvdW50aW5nLiBJdCBlbnN1cmVzIHRoYXQgYSBwZXItQ1BVIHN0b2NrIGlzIGRyYWluZWQgZXZlbiBpZiBgbnJfcGFnZXNgIGlzIDAsIGJlY2F1c2UgdGhlIGBtZW1jZ2AgcG9pbnRlciBpdHNlbGYgaG9sZHMgYSBjc3MgcmVmZXJlbmNlIHRoYXQgbmVlZHMgdG8gYmUgcmVsZWFzZWQuIFRoaXMgaXMgYSBmaXggZm9yIGEgcmVmZXJlbmNlIGxlYWsgb3IgYSBidWcgcHJldmVudGluZyBhIGNncm91cCBmcm9tIGJlaW5nIG9mZmxpbmVkLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiAoZm9yIHVzZS1hZnRlci1mcmVlKSBhbmQgS01FTUxFQUsgKGZvciBtZW1vcnkgbGVha3MpIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGlzc3VlcyBpbiB0aGlzIGFyZWEuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGlzX21lbWNnX2RyYWluX25lZWRlZGAgaW4gYG1tL21lbWNvbnRyb2wuY2AgdG8gZml4IGEgbG9naWMgYnVnIHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cCByZWZlcmVuY2UgY291bnRpbmcuIEl0IGVuc3VyZXMgdGhhdCBhIHBlci1DUFUgc3RvY2sgaXMgZHJhaW5lZCBldmVuIGlmIGBucl9wYWdlc2AgaXMgMCwgYmVjYXVzZSB0aGUgYG1lbWNnYCBwb2ludGVyIGl0c2VsZiBob2xkcyBhIGNzcyByZWZlcmVuY2UgdGhhdCBuZWVkcyB0byBiZSByZWxlYXNlZC4gVGhpcyBpcyBhIGZpeCBmb3IgYSByZWZlcmVuY2UgbGVhayBvciBhIGJ1ZyBwcmV2ZW50aW5nIGEgY2dyb3VwIGZyb20gYmVpbmcgb2ZmbGluZWQuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIEtBU0FOIChmb3IgdXNlLWFmdGVyLWZyZWUpIGFuZCBLTUVNTEVBSyAoZm9yIG1lbW9yeSBsZWFrcykgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggaXNzdWVzIGluIHRoaXMgYXJlYS4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjI3OjM2LjgyMjYyMzg1NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzI1MzE5NTQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRyYWluX2FsbF9zdG9ja1wiLFxuICAgIFwiX19tZW1fY2dyb3VwX2NoYXJnZVwiLFxuICAgIFwibWVtX2Nncm91cF9za19jaGFyZ2VcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgIGluIGBtbS9tZW1jb250cm9sLmNgIHRvIGZpeCBhIGxvZ2ljIGJ1ZyByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXAgcmVmZXJlbmNlIGNvdW50aW5nLiBJdCBlbnN1cmVzIHRoYXQgYSBwZXItQ1BVIHN0b2NrIGlzIGRyYWluZWQgZXZlbiBpZiBgbnJfcGFnZXNgIGlzIDAsIGJlY2F1c2UgdGhlIGBtZW1jZ2AgcG9pbnRlciBpdHNlbGYgaG9sZHMgYSBjc3MgcmVmZXJlbmNlIHRoYXQgbmVlZHMgdG8gYmUgcmVsZWFzZWQuIFRoaXMgaXMgYSBmaXggZm9yIGEgcmVmZXJlbmNlIGxlYWsgb3IgYSBidWcgcHJldmVudGluZyBhIGNncm91cCBmcm9tIGJlaW5nIG9mZmxpbmVkLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiAoZm9yIHVzZS1hZnRlci1mcmVlKSBhbmQgS01FTUxFQUsgKGZvciBtZW1vcnkgbGVha3MpIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGlzc3VlcyBpbiB0aGlzIGFyZWEuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIGRyYWluaW5nIG1lbWNnIHN0b2NrIGluIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgLiBJdCByZW1vdmVzIHRoZSBjaGVjayBmb3IgYHN0b2NrLVxcdTAwM2Vucl9wYWdlc1tpXWAgYmVpbmcgbm9uLXplcm8sIGVuc3VyaW5nIHRoYXQgZW1wdHkgc2xvdHMgc3RpbGwgdHJpZ2dlciBhIGRyYWluIHRvIHJlbGVhc2UgcGlubmVkIGNzcyByZWZlcmVuY2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtY2cgc3RvY2sgZHJhaW5pbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjI3OjM2LjgyMjYzMDU4NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2MDYzMDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGI2YTkwMzczNjJmOGI5ZTBjMTU3YmMzZWFiN2YwYzJhOGVkNTQ4ZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwMzoyNzozNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCAxN2RhMWY0M2I3ZDNiLi5iOTMxZWMxNmJiODI5IDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC0yMjkxLDggKzIyOTEsMTIgQEAgc3RhdGljIGJvb2wgaXNfbWVtY2dfZHJhaW5fbmVlZGVkKHN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrLFxcbiBcXHRcXHRpZiAoIW1lbWNnKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdGlmIChSRUFEX09OQ0Uoc3RvY2stXFx1MDAzZW5yX3BhZ2VzW2ldKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgbWVtX2Nncm91cF9pc19kZXNjZW5kYW50KG1lbWNnLCByb290X21lbWNnKSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBBbiBlbXB0eSBzbG90IHN0aWxsIHBpbnMgYSBjc3MgcmVmZXJlbmNlIHdoaWNoXFxuK1xcdFxcdCAqIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoKSByZWxpZXMgb24gZHJhaW5fYWxsX3N0b2NrKClcXG4rXFx0XFx0ICogdG8gcmVsZWFzZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChtZW1fY2dyb3VwX2lzX2Rlc2NlbmRhbnQobWVtY2csIHJvb3RfbWVtY2cpKSB7XFxuIFxcdFxcdFxcdGZsdXNoID0gdHJ1ZTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjc6MzcuMjc5NDc3NDMxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODg1NDM3MDg0MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkcmFpbl9hbGxfc3RvY2tcIixcbiAgICBcIl9fbWVtX2Nncm91cF9jaGFyZ2VcIixcbiAgICBcIm1lbV9jZ3JvdXBfc2tfY2hhcmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBmb3IgZHJhaW5pbmcgbWVtY2cgc3RvY2sgaW4gYGlzX21lbWNnX2RyYWluX25lZWRlZGAuIEl0IHJlbW92ZXMgdGhlIGNoZWNrIGZvciBgc3RvY2stXFx1MDAzZW5yX3BhZ2VzW2ldYCBiZWluZyBub24temVybywgZW5zdXJpbmcgdGhhdCBlbXB0eSBzbG90cyBzdGlsbCB0cmlnZ2VyIGEgZHJhaW4gdG8gcmVsZWFzZSBwaW5uZWQgY3NzIHJlZmVyZW5jZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1jZyBzdG9jayBkcmFpbmluZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGI2YTkwMzczNjJmOGI5ZTBjMTU3YmMzZWFiN2YwYzJhOGVkNTQ4ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDAzOjI3OjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxN2RhMWY0M2I3ZDNiLi5iOTMxZWMxNmJiODI5IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0yMjkxLDggKzIyOTEsMTIgQEAgc3RhdGljIGJvb2wgaXNfbWVtY2dfZHJhaW5fbmVlZGVkKHN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrLFxuIFx0XHRpZiAoIW1lbWNnKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRpZiAoUkVBRF9PTkNFKHN0b2NrLVx1MDAzZW5yX3BhZ2VzW2ldKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIG1lbV9jZ3JvdXBfaXNfZGVzY2VuZGFudChtZW1jZywgcm9vdF9tZW1jZykpIHtcbitcdFx0LypcbitcdFx0ICogQW4gZW1wdHkgc2xvdCBzdGlsbCBwaW5zIGEgY3NzIHJlZmVyZW5jZSB3aGljaFxuK1x0XHQgKiBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKCkgcmVsaWVzIG9uIGRyYWluX2FsbF9zdG9jaygpXG4rXHRcdCAqIHRvIHJlbGVhc2UuXG4rXHRcdCAqL1xuK1x0XHRpZiAobWVtX2Nncm91cF9pc19kZXNjZW5kYW50KG1lbWNnLCByb290X21lbWNnKSkge1xuIFx0XHRcdGZsdXNoID0gdHJ1ZTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjc6MzcuMjc5NDc4ODcxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2NDYyODc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyBhIE1lbWNnIFBhdGNoKipcblxuQWxyaWdodCwgSSBzZWUgd2UgaGF2ZSBhIHBhdGNoIHRvdWNoaW5nIGBtbS9tZW1jb250cm9sLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2UgaW52b2x2ZXMgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQgd2l0aGluIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgLiAgVGhlIGtleSBoZXJlIGlzIHRoYXQgYFJFQURfT05DRShzdG9jay1cdTAwM2Vucl9wYWdlc1tpXSlgIGlzIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGF0IGNvbmRpdGlvbi4gIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIGNvcmUgYWx0ZXJhdGlvbiB0byBob3cgdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIChtZW1jZykgbG9naWMgb3BlcmF0ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBkZWVtZWQgbmVjZXNzYXJ5LiBUaGUgcmVtb3ZhbCBvZiB0aGlzIGBSRUFEX09OQ0VgIHN1Z2dlc3RzIHRoZSBwYXRjaCBhdXRob3IgaXMgbGlrZWx5IG9wdGltaXppbmcsIG9yIHBvc3NpYmx5IGFkZHJlc3NpbmcgYSBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWUgcmVsYXRlZCB0byBob3cgYG5yX3BhZ2VzYCBpcyBhY2Nlc3NlZCB3aXRoaW4gdGhlIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgIGZ1bmN0aW9uLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgZHJhaW4gbG9naWMgaW4gdGhlIG1lbWNnIHN1YnN5c3RlbS4gIEkgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCB0aGUgb3JpZ2luYWwgaW50ZW50IG9mIHRoYXQgYFJFQURfT05DRWAgY2FsbCB0byB0cnVseSBhc3Nlc3MgdGhlIGltcGxpY2F0aW9ucyBhbmQgZW5zdXJlIHRoaXMgd29uJ3QgaW50cm9kdWNlIGFueSB1bmZvcmVzZWVuIHJhY2UgY29uZGl0aW9ucyBvciBkYXRhIGNvcnJ1cHRpb24uIExldCdzIGdldCBpbnRvIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA0MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjc6NDEuNjQ0MTEwODRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5MDI4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNfbWVtY2dfZHJhaW5fbmVlZGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MjIyMj1zdGF0aWMgdm9pZCByZWZpbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjI4MC1cXG5tbS9tZW1jb250cm9sLmM6MjI4MTpzdGF0aWMgYm9vbCBpc19tZW1jZ19kcmFpbl9uZWVkZWQoc3RydWN0IG1lbWNnX3N0b2NrX3BjcCAqc3RvY2ssXFxubW0vbWVtY29udHJvbC5jLTIyODItXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yMzI1PXZvaWQgZHJhaW5fYWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTIzNDQtXFx0XFx0aWYgKCF0ZXN0X2JpdChGTFVTSElOR19DQUNIRURfQ0hBUkdFLCBcXHUwMDI2bWVtY2dfc3QtXFx1MDAzZWZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbm1tL21lbWNvbnRyb2wuYzoyMzQ1OlxcdFxcdCAgICBpc19tZW1jZ19kcmFpbl9uZWVkZWQobWVtY2dfc3QsIHJvb3RfbWVtY2cpIFxcdTAwMjZcXHUwMDI2XFxubW0vbWVtY29udHJvbC5jLTIzNDYtXFx0XFx0ICAgICF0ZXN0X2FuZF9zZXRfYml0KEZMVVNISU5HX0NBQ0hFRF9DSEFSR0UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjI3OjQxLjY4OTAxOTUyOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNzQ3MTQyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IENHIERyYWluIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCBzbyBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYCBpcyBhIGZ1bmN0aW9uIHdlJ3JlIGludGVyZXN0ZWQgaW4sIGFuZCBpdCdzIGdldHRpbmcgY2FsbGVkIGJ5IGBkcmFpbl9hbGxfc3RvY2tgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBvZiBjb3Vyc2UsICp3aGVyZSogaXMgYGRyYWluX2FsbF9zdG9ja2AgYmVpbmcgY2FsbGVkPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHNpdGVzIG9mIGBkcmFpbl9hbGxfc3RvY2tgIGlzIGNydWNpYWwgdG8gbWFwcGluZyB0aGUgY29tcGxldGUgZGVwZW5kZW5jeSBjaGFpbiBhbmQgdGhlIGNpcmN1bXN0YW5jZXMgdGhhdCB0cmlnZ2VyIHRoaXMgZHJhaW5hZ2UgY2hlY2suIE5lZWQgdG8gdHJhY2UgdGhhdCBwYXRoIHRvIHNlZSBpZiBpdCBtYWtlcyBzZW5zZSBpbiB0aGUgY3VycmVudCBjb250ZXh0LiBBIGZvY3VzZWQgY2FsbCBncmFwaCBhbmFseXNpcyBpcyBwcm9iYWJseSBpbiBvcmRlciB0byBwaW5wb2ludCBldmVyeXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjYyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjc6NDUuNzYzNzM1NTI1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzU2NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRyYWluX2FsbF9zdG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTIyODE9c3RhdGljIGJvb2wgaXNfbWVtY2dfZHJhaW5fbmVlZGVkKHN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTIyOTUtXFx0XFx0ICogQW4gZW1wdHkgc2xvdCBzdGlsbCBwaW5zIGEgY3NzIHJlZmVyZW5jZSB3aGljaFxcbm1tL21lbWNvbnRyb2wuYzoyMjk2OlxcdFxcdCAqIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoKSByZWxpZXMgb24gZHJhaW5fYWxsX3N0b2NrKClcXG5tbS9tZW1jb250cm9sLmMtMjI5Ny1cXHRcXHQgKiB0byByZWxlYXNlLlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTIzMDg9c3RhdGljIHZvaWQgc2NoZWR1bGVfZHJhaW5fd29yayhpbnQgY3B1LCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjMyNC0gKi9cXG5tbS9tZW1jb250cm9sLmM6MjMyNTp2b2lkIGRyYWluX2FsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1jZylcXG5tbS9tZW1jb250cm9sLmMtMjMyNi17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjY0ND1zdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNzI0LVxcdGlmICghZHJhaW5lZCkge1xcbm1tL21lbWNvbnRyb2wuYzoyNzI1OlxcdFxcdGRyYWluX2FsbF9zdG9jayhtZW1fb3Zlcl9saW1pdCk7XFxubW0vbWVtY29udHJvbC5jLTI3MjYtXFx0XFx0ZHJhaW5lZCA9IHRydWU7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDM0Nz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDM2OC1cXG5tbS9tZW1jb250cm9sLmM6NDM2OTpcXHRkcmFpbl9hbGxfc3RvY2sobWVtY2cpO1xcbm1tL21lbWNvbnRyb2wuYy00MzcwLVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ4Mzc9c3RhdGljIHNzaXplX3QgbWVtb3J5X2hpZ2hfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ4NzMtXFx0XFx0aWYgKCFkcmFpbmVkKSB7XFxubW0vbWVtY29udHJvbC5jOjQ4NzQ6XFx0XFx0XFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcXG5tbS9tZW1jb250cm9sLmMtNDg3NS1cXHRcXHRcXHRkcmFpbmVkID0gdHJ1ZTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00ODk2PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9tYXhfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ5MzEtXFx0XFx0aWYgKCFkcmFpbmVkKSB7XFxubW0vbWVtY29udHJvbC5jOjQ5MzI6XFx0XFx0XFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcXG5tbS9tZW1jb250cm9sLmMtNDkzMy1cXHRcXHRcXHRkcmFpbmVkID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjc6NDUuODA5MDk2ODk0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg1NzUxMzI0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgZHJhaW5fYWxsX3N0b2NrYCoqXG5cbk9rYXksIHNvIGBkcmFpbl9hbGxfc3RvY2tgIGlzIGdldHRpbmcgY2FsbGVkIGZyb20gYSBmZXcgZGlmZmVyZW50IHBsYWNlczogYHRyeV9jaGFyZ2VfbWVtY2dgLCBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAsIGBtZW1vcnlfaGlnaF93cml0ZWAsIGFuZCBgbWVtb3J5X21heF93cml0ZWAuIFRoYXQgZ2l2ZXMgbWUgYSBkZWNlbnQgb3ZlcnZpZXcgb2YgKndoZXJlKiBpdCdzIHVzZWQg4oCTIGFsbCByZWxhdGVkIHRvIG1lbW9yeSBjb250cm9sIGFuZCBjZ3JvdXBzLCBvZiBjb3Vyc2UuXG5cbk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2lkZWx5IHRoaXMgZnVuY3Rpb24gaXMgYWNjZXNzaWJsZS4gSXMgaXQgYSBtb2R1bGUtaW50ZXJuYWwgdGhpbmcsIG9yIGlzIGl0IGV4cG9zZWQgZm9yIHBvdGVudGlhbCB1c2UgZWxzZXdoZXJlPyBMZXQncyBxdWlja2x5IGNoZWNrIHdoZXRoZXIgaXQncyBkZWNsYXJlZCBgc3RhdGljYC4gQWhhLCBpdCdzICpub3QqIHN0YXRpYywgd2hpY2ggbWVhbnMgaXQncyBwb3RlbnRpYWxseSB2aXNpYmxlIG91dHNpZGUgb2YgaXRzIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhhdOKAmXMgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uXG5cbk5leHQgcXVlc3Rpb246IEV2ZW4gdGhvdWdoIGl0ICpjb3VsZCogYmUgdXNlZCBlbHNld2hlcmUsIGlzIGl0ICphY3R1YWxseSogdXNlZCBvdXRzaWRlIG9mIGBtbS9tZW1jb250cm9sLmNgPyBUaGF0IHdvdWxkIHJlZmluZSBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBpbXBhY3QgYW5kIHBvdGVudGlhbCBmb3IgcmVmYWN0b3JpbmcuIElmIGl0J3MgKm9ubHkqIHVzZWQgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLCBpdCdzIHByb2JhYmx5IHJlbGF0aXZlbHkgc2FmZSB0byBtb2RpZnksIGV2ZW4gaWYgbm90IHN0YXRpYy4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHVzYWdlIHNjb3BlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDg3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjc6NDkuNjY2NjEyNjc3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTEwMDM3NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJhaW5fYWxsX3N0b2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLXYxLmM9MTc3MT1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfcmVzaXplX21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTgxMC1cXHRcXHRpZiAoIWRyYWluZWQpIHtcXG5tbS9tZW1jb250cm9sLXYxLmM6MTgxMTpcXHRcXHRcXHRkcmFpbl9hbGxfc3RvY2sobWVtY2cpO1xcbm1tL21lbWNvbnRyb2wtdjEuYy0xODEyLVxcdFxcdFxcdGRyYWluZWQgPSB0cnVlO1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTE4MzQ9c3RhdGljIGludCBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODQwLVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxODQxOlxcdGRyYWluX2FsbF9zdG9jayhtZW1jZyk7XFxubW0vbWVtY29udHJvbC12MS5jLTE4NDItXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmgtMjAtXFxubW0vbWVtY29udHJvbC12MS5oOjIxOnZvaWQgZHJhaW5fYWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKTtcXG5tbS9tZW1jb250cm9sLXYxLmgtMjItXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjI4MT1zdGF0aWMgYm9vbCBpc19tZW1jZ19kcmFpbl9uZWVkZWQoc3RydWN0IG1lbWNnX3N0b2NrX3BjcCAqc3RvY2ssXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjI5NS1cXHRcXHQgKiBBbiBlbXB0eSBzbG90IHN0aWxsIHBpbnMgYSBjc3MgcmVmZXJlbmNlIHdoaWNoXFxubW0vbWVtY29udHJvbC5jOjIyOTY6XFx0XFx0ICogbWVtX2Nncm91cF9jc3Nfb2ZmbGluZSgpIHJlbGllcyBvbiBkcmFpbl9hbGxfc3RvY2soKVxcbm1tL21lbWNvbnRyb2wuYy0yMjk3LVxcdFxcdCAqIHRvIHJlbGVhc2UuXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjMwOD1zdGF0aWMgdm9pZCBzY2hlZHVsZV9kcmFpbl93b3JrKGludCBjcHUsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yMzI0LSAqL1xcbm1tL21lbWNvbnRyb2wuYzoyMzI1OnZvaWQgZHJhaW5fYWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKVxcbm1tL21lbWNvbnRyb2wuYy0yMzI2LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNjQ0PXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI3MjQtXFx0aWYgKCFkcmFpbmVkKSB7XFxubW0vbWVtY29udHJvbC5jOjI3MjU6XFx0XFx0ZHJhaW5fYWxsX3N0b2NrKG1lbV9vdmVyX2xpbWl0KTtcXG5tbS9tZW1jb250cm9sLmMtMjcyNi1cXHRcXHRkcmFpbmVkID0gdHJ1ZTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00MzQ3PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MzY4LVxcbm1tL21lbWNvbnRyb2wuYzo0MzY5OlxcdGRyYWluX2FsbF9zdG9jayhtZW1jZyk7XFxubW0vbWVtY29udHJvbC5jLTQzNzAtXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDgzNz1zdGF0aWMgc3NpemVfdCBtZW1vcnlfaGlnaF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDg3My1cXHRcXHRpZiAoIWRyYWluZWQpIHtcXG5tbS9tZW1jb250cm9sLmM6NDg3NDpcXHRcXHRcXHRkcmFpbl9hbGxfc3RvY2sobWVtY2cpO1xcbm1tL21lbWNvbnRyb2wuYy00ODc1LVxcdFxcdFxcdGRyYWluZWQgPSB0cnVlO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ4OTY9c3RhdGljIHNzaXplX3QgbWVtb3J5X21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDkzMS1cXHRcXHRpZiAoIWRyYWluZWQpIHtcXG5tbS9tZW1jb250cm9sLmM6NDkzMjpcXHRcXHRcXHRkcmFpbl9hbGxfc3RvY2sobWVtY2cpO1xcbm1tL21lbWNvbnRyb2wuYy00OTMzLVxcdFxcdFxcdGRyYWluZWQgPSB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyNzo1MS41Nzc2MjQyOThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTE1ODIxMDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtY2cgRHJhaW4gTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBob3cgYGRyYWluX2FsbF9zdG9ja2AgaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIG1lbW9yeSBjZ3JvdXAgc3Vic3lzdGVtLiBJJ20gc2VlaW5nIGl0J3MgY2FsbGVkIGZyb20gYSBudW1iZXIgb2YgcGxhY2VzOiBgbWVtX2Nncm91cF9yZXNpemVfbWF4YCwgYG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlgLCBgdHJ5X2NoYXJnZV9tZW1jZ2AsIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCwgYG1lbW9yeV9oaWdoX3dyaXRlYCwgYW5kIGBtZW1vcnlfbWF4X3dyaXRlYC4gQWxsIHNvbGlkbHkgbWVtY2cgZnVuY3Rpb25zLCBhcyBleHBlY3RlZC5cblxuVGhlIGNydXggb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgYGlzX21lbWNnX2RyYWluX25lZWRlZGAuIEl0IGxvb2tzIGxpa2UgaXQgbm93IGRyYWlucyB0aGUgc3RvY2sgZXZlbiBpZiBgc3RvY2stXHUwMDNlbnJfcGFnZXNbaV1gIGlzIHplcm8uIEFoLCBJIHNlZSwgdGhhdCBtYWtlcyBzZW5zZS4gVGhlIGNvbW1lbnQgc3BlY2lmaWNhbGx5IHBvaW50cyBvdXQgdGhhdCBhbiBcImVtcHR5IHNsb3Qgc3RpbGwgcGlucyBhIGNzcyByZWZlcmVuY2Ugd2hpY2ggbWVtX2Nncm91cF9jc3Nfb2ZmbGluZSgpIHJlbGllcyBvbiBkcmFpbl9hbGxfc3RvY2soKSB0byByZWxlYXNlLlwiIFNvLCB0aGlzIGlzIGEgZml4LiBXaXRob3V0IGRyYWluaW5nIHRoZSBlbXB0eSBzbG90LCBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgd291bGRuJ3QgYmUgYWJsZSB0byByZWxlYXNlIHRoZSBDU1MgcmVmZXJlbmNlLiBUaGlzIHdvdWxkIGJlIGEgc3VidGxlIGJ1dCBjcml0aWNhbCBidWcgd2hlcmUgYSBDU1MgcmVmZXJlbmNlIGhhbmdzIGFyb3VuZCBldmVuIHdoZW4gYSBwYWdlIGlzIG5vIGxvbmdlciBhc3NvY2lhdGVkIHdpdGggaXQuXG5cblRoaXMgaXMgZnVuZGFtZW50YWxseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBtZW1jZy4gVGhpcyBpcyBzb21ldGhpbmcgdGhhdCB3b3VsZCBiZSBnb29kIHRvIGZ1enogYW5kIHRlc3QgYXMgdGhlIGJlaGF2aW9yIGNvdWxkIGNhdXNlIHByb2JsZW1zIGF0IGNlcnRhaW4gdGhyZXNob2xkcywgZXNwZWNpYWxseSB3aXRoIHRoZSBjYWxscyB0byBgZHJhaW5fYWxsX3N0b2NrYC4gU2luY2UgYGRyYWluX2FsbF9zdG9ja2AgaXMgdGhlIHN1YmplY3QgaGVyZSwgSSBzaG91bGQgbWFrZSBzdXJlIGl0J3MgZnV6emVkIGFuZCB0ZXN0ZWQgd2VsbC4gSXQncyBjYWxsZWQgZnJvbSB0aG9zZSBjb3JlIGZ1bmN0aW9ucy4gYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgLCBgbWVtb3J5X2hpZ2hfd3JpdGVgLCBgbWVtb3J5X21heF93cml0ZWAsIGBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5YCwgYG1lbV9jZ3JvdXBfcmVzaXplX21heGAsIGFuZCBgdHJ5X2NoYXJnZV9tZW1jZ2AuIExldCdzIHBheSBlc3BlY2lhbGx5IGNsb3NlIGF0dGVudGlvbiB0byBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgdG8gZW5zdXJlIHRoYXQgdGhpcyBjaGFuZ2UgYWN0dWFsbHkgcmVzb2x2ZXMgdGhlIHBvdGVudGlhbCBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc1MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyNzo1Ny42OTM0NDkxMjRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDgwMjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfY3NzX29mZmxpbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0yMjgxPXN0YXRpYyBib29sIGlzX21lbWNnX2RyYWluX25lZWRlZChzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwICpzdG9jayxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yMjk1LVxcdFxcdCAqIEFuIGVtcHR5IHNsb3Qgc3RpbGwgcGlucyBhIGNzcyByZWZlcmVuY2Ugd2hpY2hcXG5tbS9tZW1jb250cm9sLmM6MjI5NjpcXHRcXHQgKiBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKCkgcmVsaWVzIG9uIGRyYWluX2FsbF9zdG9jaygpXFxubW0vbWVtY29udHJvbC5jLTIyOTctXFx0XFx0ICogdG8gcmVsZWFzZS5cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00MjcwPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDM0Ni1cXG5tbS9tZW1jb250cm9sLmM6NDM0NzpzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxubW0vbWVtY29udHJvbC5jLTQzNDgte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUxNTk9c3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTUxNjEtXFx0LmNzc19vbmxpbmUgPSBtZW1fY2dyb3VwX2Nzc19vbmxpbmUsXFxubW0vbWVtY29udHJvbC5jOjUxNjI6XFx0LmNzc19vZmZsaW5lID0gbWVtX2Nncm91cF9jc3Nfb2ZmbGluZSxcXG5tbS9tZW1jb250cm9sLmMtNTE2My1cXHQuY3NzX3JlbGVhc2VkID0gbWVtX2Nncm91cF9jc3NfcmVsZWFzZWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjI3OjU3LjczOTk0MTYwMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjExNDAxODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgQW5hbHlzaXMgb2YgTWVtb3J5IENHcm91cHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAsIHRoYXQncyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBjZ3JvdXAgc3Vic3lzdGVtLCByaWdodD8gQW5kIEkgc2VlIGBkcmFpbl9hbGxfc3RvY2tgIHdoaWNoIHJlbGllcyBvbiBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYC4gU2VlbXMgbG9naWNhbCB0byBhZGQgYGRyYWluX2FsbF9zdG9ja2AgdG8gdGhlIEZvY3VzU3ltYm9scyBsaXN0LCB0aGF0IHNlZW1zIHJlbGV2YW50IGdpdmVuIHRoZSBjb250ZXh0LlxuXG5JJ20gYWxzbyB0aGlua2luZyBhYm91dCBpbmNsdWRpbmcgYG1lbW9yeV9oaWdoX3dyaXRlYCwgYG1lbW9yeV9tYXhfd3JpdGVgLCBgbWVtX2Nncm91cF9mb3JjZV9lbXB0eWAsIGFuZCBgbWVtX2Nncm91cF9yZXNpemVfbWF4YCwgYXMgdGhleSBzZWVtIGxpa2VseSB0byBiZSBpbXBvcnRhbnQuIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gYWRkIGB0cnlfY2hhcmdlX21lbWNnYCB0byB0aGUgbGlzdC4gSSBzaG91bGQgY2hlY2sgdGhhdCBvbmUgdG9vLiBJJ2xsIG5lZWQgdG8gcmVhbGx5IGRpZyBpbnRvIGB0cnlfY2hhcmdlX21lbWNnYCwgdG8gdW5kZXJzdGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSB3aG9sZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODIzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjI4OjAxLjM1MTM0NjQ4M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2MTE4OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X2NoYXJnZV9tZW1jZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTI1NTQ9dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNjQzLVxcbm1tL21lbWNvbnRyb2wuYzoyNjQ0OnN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbm1tL21lbWNvbnRyb2wuYy0yNjQ1LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mjg1Mz1zdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjg1OC1cXG5tbS9tZW1jb250cm9sLmM6Mjg1OTpcXHRyZXR1cm4gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMjg2MC19XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzE1Mj1zdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMxNTktXFxubW0vbWVtY29udHJvbC5jOjMxNjA6XFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XFxubW0vbWVtY29udHJvbC5jLTMxNjEtXFx0aWYgKHJldClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjAwPXN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjA4LVxcdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcXG5tbS9tZW1jb250cm9sLmM6NTIwOTpcXHRcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxubW0vbWVtY29udHJvbC5jLTUyMTAtXFx0aWYgKHJldCkge1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU2MjA9Ym9vbCBtZW1fY2dyb3VwX3NrX2NoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NjI3LVxcbm1tL21lbWNvbnRyb2wuYzo1NjI4OlxcdGlmICh0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpID09IDApIHtcXG5tbS9tZW1jb250cm9sLmMtNTYyOS1cXHRcXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NPQ0ssIG5yX3BhZ2VzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjg6MDEuMzk3OTYzNTExWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTMwMDI3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBNZW1vcnkgQ29udHJvbCAtIEEgUXVpY2sgRGlhZ25vc3RpYyoqXG5cbk9rYXksIHNvIGB0cnlfY2hhcmdlX21lbWNnYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgbWVhbmluZyBpdCdzIG9ubHkgdmlzaWJsZSB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQuIFRoYXQncyBnb29kIHRvIGtub3figJRsaW1pdHMgdGhlIHNjb3BlIG9mIHdoZXJlIGl0IGNvdWxkIGJlIGNhdXNpbmcgaXNzdWVzIGlmIHRoZXJlIHdlcmUgYSBwcm9ibGVtLiBOb3csIGBkcmFpbl9hbGxfc3RvY2tgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0J3MgdmlzaWJsZSBvdXRzaWRlIG9mIGl0cyBjb21waWxhdGlvbiB1bml0LCBtZWFuaW5nIGl0IGNvdWxkIGJlIGNhbGxlZCBmcm9tIGFueXdoZXJlLiBUaGF0IHJhaXNlcyBteSBleWVicm93cyBhIGJpdC5cblxuR2l2ZW4gdGhhdCwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBsZXQncyBkaXZlIGludG8gYG1tL21lbWNvbnRyb2wtdjEuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZHJhaW5fYWxsX3N0b2NrYC4gTmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IGZ1bmN0aW9uIHdvcmtzIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBtZW1vcnkgY29udHJvbCBzeXN0ZW0sIGVzcGVjaWFsbHkgc2luY2UgaXQncyBnb3Qgc3VjaCBicm9hZCB2aXNpYmlsaXR5LiBUaW1lIHRvIGRpc3NlY3QgdGhhdCBjb2RlIGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzM5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjg6MDQuNTkwOTY5MTY1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjMxMTk2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcmFpbl9hbGxfc3RvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC12MS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuYz0xNzcxPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9yZXNpemVfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODEwLVxcdFxcdGlmICghZHJhaW5lZCkge1xcbm1tL21lbWNvbnRyb2wtdjEuYzoxODExOlxcdFxcdFxcdGRyYWluX2FsbF9zdG9jayhtZW1jZyk7XFxubW0vbWVtY29udHJvbC12MS5jLTE4MTItXFx0XFx0XFx0ZHJhaW5lZCA9IHRydWU7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MTgzND1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4NDAtXFxubW0vbWVtY29udHJvbC12MS5jOjE4NDE6XFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcXG5tbS9tZW1jb250cm9sLXYxLmMtMTg0Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjg6MDQuNjM3Mjg1MDAzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwODM0Nzc4NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBTdG9jayBNYW5hZ2VtZW50IE1ldGhvZHMqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLiBUaGUgYGRyYWluX2FsbF9zdG9ja2AgZnVuY3Rpb24gaXNuJ3Qgc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBzcGFya3MgYSBmZXcgcXVlc3Rpb25zLiBHaXZlbiB0aGF0LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgbWVtb3J5LXJlbGF0ZWQgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGBtZW1vcnlfaGlnaF93cml0ZWAgYW5kIGBtZW1vcnlfbWF4X3dyaXRlYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBub24tc3RhdGljIG5hdHVyZSBvZiB0aGUgZnVuY3Rpb24gZG9lc24ndCBjcmVhdGUgYW55IHVuZXhwZWN0ZWQgaXNzdWVzIHdoZW4gbWFuYWdpbmcgaGlnaCBtZW1vcnkgc2l0dWF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGNhbGwgdG8gYGRyYWluX2FsbF9zdG9ja2AgaXMgcG90ZW50aWFsbHkgZ29pbmcgdG8gd3JpdGUgbW9yZSB0byBtZW1vcnkgdGhhbiBpbnRlbmRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIzMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjI4OjA5LjcyMDc2NjY3MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2ODIxNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtb3J5X2hpZ2hfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz00ODMxPXN0YXRpYyBpbnQgbWVtb3J5X2hpZ2hfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDgzNi1cXG5tbS9tZW1jb250cm9sLmM6NDgzNzpzdGF0aWMgc3NpemVfdCBtZW1vcnlfaGlnaF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxubW0vbWVtY29udHJvbC5jLTQ4MzgtXFx0XFx0XFx0XFx0IGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MDg1PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIG1lbW9yeV9maWxlc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTUxMTQtXFx0XFx0LnNlcV9zaG93ID0gbWVtb3J5X2hpZ2hfc2hvdyxcXG5tbS9tZW1jb250cm9sLmM6NTExNTpcXHRcXHQud3JpdGUgPSBtZW1vcnlfaGlnaF93cml0ZSxcXG5tbS9tZW1jb250cm9sLmMtNTExNi1cXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyODowOS43Njc0NTY5MDlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA3Nzg2MjYxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipDZ3JvdXAgRmlsZSBXcml0ZSBDYWxsYmFja3M6IENvbnNpZGVyYXRpb25zIFx1MDAyNiBJbXBsaWNhdGlvbnMqKlxuXG5BbHJpZ2h0LCBJJ20gZGl2aW5nIGludG8gdGhlc2UgY2dyb3VwIGZpbGUgd3JpdGUgY2FsbGJhY2tzLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIG1lY2hhbmljcyBvZiB0aGVzZSB3cml0ZXMuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZWlyIGltcGxpY2F0aW9ucywgdGhlaXIgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIFRoZSBmbG93IGlzIGNyaXRpY2FsLCBuYXR1cmFsbHkuIFdoZXJlIGFyZSB3ZSBnZXR0aW5nIHRoZXNlIGNhbGxiYWNrcz8gV2hhdCdzIHRoZSBjb250ZXh0PyBBbmQgbW9zdCBpbXBvcnRhbnRseSwgaG93J3MgaXQgYWZmZWN0IHRoZSBzeXN0ZW0ncyBvdmVyYWxsIGhlYWx0aD9cblxuQnV0IHRoYXQgdGhvdWdodCBpcyBxdWlja2x5IGZvbGxvd2VkIGJ5IGFub3RoZXI6ICoqYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgKiouIFRoYXQgZnVuY3Rpb24uLi4gaXQncyBwaXZvdGFsLCBpc24ndCBpdD8gSG93IGRvZXMgdGhpcyBzZXQgb2Ygd3JpdGUgY2FsbGJhY2tzIGludGVyYWN0IHdpdGggdGhlIG1lbW9yeSBjZ3JvdXAncyBDU1Mgb2ZmbGluaW5nIHByb2Nlc3M/IElzIHRoZXJlIGEgcmFjZSBjb25kaXRpb24gY29uY2Vybj8gRG9lcyB0aGlzIGNhbGxiYWNrIHBhdGggaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIG9uIG9yIGludGVyYWN0aW9ucyB3aXRoIHRoZSBvZmZsaW5pbmcgcHJvY2VkdXJlLCBhbmQgY29udmVyc2VseT8gS25vd2luZyB0aGlzIGlzIGdvaW5nIHRvIGJlIGtleSB0byBtYWtpbmcgc3VyZSB0aGF0IHRoZXNlIHdyaXRlcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBpbnRyb2R1Y2UgYSBuZXcgYnVnLCBvciBleGFjZXJiYXRlIGFuIGV4aXN0aW5nIG9uZS4gVGhhdCBpbnRlcmFjdGlvbiBjb3VsZCBiZSBkZWxpY2F0ZSwgYW5kIGlmIEknbSBub3QgY2FyZWZ1bCwgSSBjb3VsZCBpbnRyb2R1Y2Ugc29tZSBzZXJpb3VzbHkgbmFzdHkgbWVtb3J5IGNvcnJ1cHRpb24sIG9yIHdvcnNlLCBhIHN5c3RlbSBjcmFzaC4gTmVlZCB0byBkaWcgaW50byB0aGF0IHJlbGF0aW9uc2hpcCBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjU4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjg6MTMuODQ1MzIzMDE3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTI5ODY3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX2Nzc19vZmZsaW5lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MjI4MT1zdGF0aWMgYm9vbCBpc19tZW1jZ19kcmFpbl9uZWVkZWQoc3RydWN0IG1lbWNnX3N0b2NrX3BjcCAqc3RvY2ssXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjI5NS1cXHRcXHQgKiBBbiBlbXB0eSBzbG90IHN0aWxsIHBpbnMgYSBjc3MgcmVmZXJlbmNlIHdoaWNoXFxubW0vbWVtY29udHJvbC5jOjIyOTY6XFx0XFx0ICogbWVtX2Nncm91cF9jc3Nfb2ZmbGluZSgpIHJlbGllcyBvbiBkcmFpbl9hbGxfc3RvY2soKVxcbm1tL21lbWNvbnRyb2wuYy0yMjk3LVxcdFxcdCAqIHRvIHJlbGVhc2UuXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDI3MD1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQzNDYtXFxubW0vbWVtY29udHJvbC5jOjQzNDc6c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbm1tL21lbWNvbnRyb2wuYy00MzQ4LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MTU5PXN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MTYxLVxcdC5jc3Nfb25saW5lID0gbWVtX2Nncm91cF9jc3Nfb25saW5lLFxcbm1tL21lbWNvbnRyb2wuYzo1MTYyOlxcdC5jc3Nfb2ZmbGluZSA9IG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUsXFxubW0vbWVtY29udHJvbC5jLTUxNjMtXFx0LmNzc19yZWxlYXNlZCA9IG1lbV9jZ3JvdXBfY3NzX3JlbGVhc2VkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyODoxMy44OTA2MjkyMzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyMzU1ODA5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQW5hbHl6aW5nIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCBhcyBhIFBvdGVudGlhbCBGb2N1cyBTeW1ib2wqKlxuXG5BbHJpZ2h0LCBzbyBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgaXMgYSBzdGF0aWMgdGhpbmcsIG5vdCBzb21ldGhpbmcgdGhhdCBjaGFuZ2VzIGR5bmFtaWNhbGx5LiBUaGF0IG1ha2VzIGl0IGEgc29saWQgY2FuZGlkYXRlIGZvciB1c2UgYXMgYSBgRm9jdXNTeW1ib2xgIGZvciBvcHRpbWl6YXRpb24uIEl0J3MgYSBrZXkgcG9pbnQgb2YgcmVmZXJlbmNlLCBhIHN0YWJsZSBtYXJrZXIgd2l0aGluIHRoZSBtZW1vcnkgY2dyb3VwIHN1YnN5c3RlbS4gTm93LCB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLCB0aGUgYGRyYWluX2FsbF9zdG9ja2AgZnVuY3Rpb24gc2VlbXMgbGlrZSBhIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGV4YW1pbmUgaW4gbW9yZSBkZXRhaWwuIEl0J3MgcHJvYmFibHkgdGllZCBjbG9zZWx5IHRvIHRoZSBsaWZlY3ljbGUgb3IgaGFuZGxpbmcgb2YgcmVzb3VyY2VzIHJlbGF0ZWQgdG8gdGhpcyBvZmZsaW5lIHByb2Nlc3MuXG5cbk9mIGNvdXJzZSwgYmVmb3JlIEkgZGlnIHRvbyBkZWVwLCBJIHNob3VsZCBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBjYW4ndCBwcm9jZWVkIG1lYW5pbmdmdWxseSBpZiBtZW1vcnkgY2dyb3VwcyBhcmVuJ3QgZXZlbiBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgYnVpbGQuIFRoYXQncyBhIGZ1bmRhbWVudGFsIHByZXJlcXVpc2l0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMyNiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjI4OjE3LjYxNDE4OTQ1M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwMzAzNTg3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDY4PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwNzctXFxuaW5pdC9LY29uZmlnOjEwNzg6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwNzktXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA4Ni1cXG5pbml0L0tjb25maWc6MTA4Nzpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDg4LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDkzLVxcbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMDk1LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTAyLVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjI4OjE5LjMxNzIzMDU4MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDMwNzk2MzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIGBkcmFpbl9hbGxfc3RvY2tgIGluIFJlbGF0aW9uIHRvIGBDT05GSUdfTUVNQ0dgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYENPTkZJR19NRU1DR2AgcmlnaHQgbm93LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgdGhlIGZ1bmN0aW9uIGBkcmFpbl9hbGxfc3RvY2tgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIGlmIGBkcmFpbl9hbGxfc3RvY2tgIGlzIGEgc3ltYm9sIHRoYXQncyBleHBvcnRlZCwgYWNjZXNzaWJsZSBvdXRzaWRlIG9mIGl0cyBpbW1lZGlhdGUgY29tcGlsYXRpb24gdW5pdCwgb3IgaWYgaXQgaXMgaW5zdGVhZCBkZWNsYXJlZCBhcyBub24tc3RhdGljLCB3aGljaCB3b3VsZCBvZmZlciBzaW1pbGFyIGJ1dCBsaW1pdGVkIGZ1bmN0aW9uYWxpdHkgYW5kIHZpc2liaWxpdHkuIFVuZGVyc3RhbmRpbmcgdGhpcyBjb25uZWN0aW9uIGlzIGtleSB0byBwcm9wZXJseSBhbmFseXppbmcgaXRzIGJlaGF2aW9yIHdpdGhpbiB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgzMywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjI4OjIyLjM0ODAyOTE1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDU1OTA4ODE4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipkcmFpbl9hbGxfc3RvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyODoyNC40MDM5NDc1ODhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwMTYwNzg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgcXVpY2sgbWVudGFsIHNjYW4sIHRhaWxvcmVkIGZvciBzb21lb25lIHdobyB1bmRlcnN0YW5kcyB0aGVzZSBrZXJuZWwgaW50ZXJuYWxzIGFzIHdlbGwgYXMgSSBkbzpcblxuKipBbmFseXppbmcgS2VybmVsIE1lbW9yeSBBY2NvdW50aW5nKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQncyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IHNvbWV0aGluZyBpc24ndCBleHBvcnRlZCwgd2hpY2ggaXMgYSBrZXkgb2JzZXJ2YXRpb24uIFRoZSBmdW5jdGlvbiBpcyAqbm90KiBzdGF0aWMsIHdoaWNoIHJ1bGVzIG91dCBvbmUgY2xhc3Mgb2YgdmlzaWJpbGl0eSBpc3N1ZXMuIFRoYXQgbWFrZXMgdGhpbmdzIHNvbWV3aGF0IGludGVyZXN0aW5nOyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIGlmIGl0J3Mgbm90IGV4cG9ydGVkLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaWYgdGhlcmUgYXJlICpvdGhlciogZnVuY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHByb2Nlc3MuIEknbSBtb3Zpbmcgb24gdG8gY29uc2lkZXIgdGhlIHN0YXRpYyBmdW5jdGlvbnMgaW4gdGhpcyBjb250ZXh0LlxuXG5gbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgYW5kIGBtZW1vcnlfaGlnaF93cml0ZWAgYXJlIGJvdGggc3RhdGljLCBidXQgdGhleSdyZSBjYWxsYmFja3MsIHdoaWNoIG1lYW5zIHRoZWlyIHZpc2liaWxpdHkgYW5kIHVzZSBhcmUgdGlnaHRseSBjb250cm9sbGVkIHdpdGhpbiBhIHNwZWNpZmljIGZyYW1ld29yay4gVGhvc2Ugc3RhdGljIGNhbGxiYWNrcyBoYXZlIGEgc3BlY2lmaWMgcHVycG9zZS5cblxuYHRyeV9jaGFyZ2VfbWVtY2dgIGlzIGFsc28gc3RhdGljLCB3aGljaCBwcm9iYWJseSBtZWFucyBpdCdzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiwgbm90IGludGVuZGVkIGZvciBnZW5lcmFsIHVzZSBvdXRzaWRlIGl0cyBtb2R1bGUuXG5cbkZpbmFsbHksIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgaXMgKm5vdCogc3RhdGljLiBUaGlzIGlzIHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUgbW9kdWxlLiBTbywgdGhlIGxhY2sgb2Ygc3RhdGljIHNjb3BpbmcgYW5kIHRoZSBub24tZXhwb3J0ZWQgYXR0cmlidXRlIG9mIHRoZSBmaXJzdCBmdW5jdGlvbiBhcmUgd29ydGggaW52ZXN0aWdhdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA0OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjI4OjI4LjcwNTU1Nzg0OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2MTc2NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF9za19jaGFyZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz01NTk1PXZvaWQgbWVtX2Nncm91cF9za19pbmhlcml0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU2MTEtLyoqXFxubW0vbWVtY29udHJvbC5jOjU2MTI6ICogbWVtX2Nncm91cF9za19jaGFyZ2UgLSBjaGFyZ2Ugc29ja2V0IG1lbW9yeVxcbm1tL21lbWNvbnRyb2wuYy01NjEzLSAqIEBzazogc29ja2V0IGluIG1lbWNnIHRvIGNoYXJnZVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU2MTktICovXFxubW0vbWVtY29udHJvbC5jOjU2MjA6Ym9vbCBtZW1fY2dyb3VwX3NrX2NoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcyxcXG5tbS9tZW1jb250cm9sLmMtNTYyMS1cXHRcXHRcXHQgIGdmcF90IGdmcF9tYXNrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyODoyOC43NTUxODE5NDdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAyNDkzMDAzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTWVtb3J5IEFjY291bnRpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcsIGFuZCBgbWVtX2Nncm91cF9za19jaGFyZ2VgIGlzIGRlZmluaXRlbHkgc3RhbmRpbmcgb3V0IGFzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYSBjbGVhciBGb2N1c1N5bWJvbCBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uLiBCdXQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gSSB3b25kZXIsIHdoYXQgYWJvdXQgYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzYD8gVGhhdCBsb29rcyBzdGF0aWMsIHdoaWNoIHVzdWFsbHkgbWVhbnMgaXQncyBhIHBpZWNlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGluIHRoZSBiaWdnZXIgcGljdHVyZSwgc28gbGV0J3Mga2VlcCB0aGF0IGluIG1pbmQuIEFuZCB3aGlsZSBJJ20gYXQgaXQsIGBjaGFyZ2VfbWVtY2dgIGlzIGFsc28gc3RhdGljLCBzbyB0aGV5IGJvdGggZGVzZXJ2ZSBhIGxvb2suIEJlc3Qgc3RhcnQgd2l0aCB0aGUga25vd24sIHNvIGxldCdzIGNoZWNrIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAsIHF1aWNrbHkgcmVmZXJlbmNpbmcgYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYC4gVGhhdCdsbCBnaXZlIG1lIHRoZSBkZWZpbml0aW9ucyBhbmQgY29udGV4dCBJIG5lZWQgdG8ga2ljayBvZmYgdGhpcyBkZWVwIGRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MzMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyODozNS43ODAxMTYzNzVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNDU1NDI1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX3NrX2NoYXJnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNjMzPXZvaWQgbWVtX2Nncm91cF9za19pbmhlcml0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNjM0OmJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTYzNS1cXHRcXHRcXHQgIGdmcF90IGdmcF9tYXNrKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE2OTM9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfc2tfaW5oZXJpdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzaylcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2OTYtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTY5NzpzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2OTgtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyODozNi4xODQ2NzY1MjJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0OTE0NTAyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRm9jdXNpbmcgb24gTWVtb3J5IEFjY291bnRpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBtZW1vcnkgYWNjb3VudGluZyB3aXRoaW4gY2dyb3Vwcy4gYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCBpcyBhIHNvbGlkIGluZGljYXRvciwgYSBzdHJvbmcgRm9jdXNTeW1ib2wuIFRoYXQncyBhIGRlZmluaXRlIHBvc2l0aXZlLiBCdXQuLi4gSSBzaG91bGQgYWxzbyBjb25zaWRlciBgbWVtX2Nncm91cF9jaGFyZ2VgLiBJdCdzIHJlbGF0ZWQsIGJ1dCB3YXJyYW50cyBhIGNsb3NlciBsb29rIHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGFuZCBhbnkgcG90ZW50aWFsIG92ZXJsYXBzIG9yIGRpZmZlcmVuY2VzIGluIHRoZSBtZXRyaWNzLiBUaW1lIHRvIGRpZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTY5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjg6MzkuMjMzODI0MDhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzI1OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfY2hhcmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTYyNj1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTYzNS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2MzY6aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjM3LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTYzOC0vKipcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2Mzk6ICogbWVtX2Nncm91cF9jaGFyZ2UgLSBDaGFyZ2UgYSBuZXdseSBhbGxvY2F0ZWQgZm9saW8gdG8gYSBjZ3JvdXAuXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjQwLSAqIEBmb2xpbzogRm9saW8gdG8gY2hhcmdlLlxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjUxLSAqL1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY1MjpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NTMtXFx0XFx0XFx0XFx0ICAgIGdmcF90IGdmcClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY1Ni1cXHRcXHRyZXR1cm4gMDtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NTc6XFx0cmV0dXJuIF9fbWVtX2Nncm91cF9jaGFyZ2UoZm9saW8sIG1tLCBnZnApO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY1OC19XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjU5LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY2MDppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2MS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY2NT12b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY3MC0gKlxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY3MTogKiBVbmNoYXJnZSBhIGZvbGlvIHByZXZpb3VzbHkgY2hhcmdlZCB3aXRoIG1lbV9jZ3JvdXBfY2hhcmdlKCkuXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjcyLSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTE0Mj1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNDctXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTE0ODpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNDktXFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNTMtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTE1NDpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcClcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTU1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjg6MzkuMjc5NTUzMTU5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzczNTQzODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBBY2NvdW50aW5nKipcblxuT2theSwgc28gSSd2ZSBnb3QgYF9fbWVtX2Nncm91cF9jaGFyZ2VgIGZsYWdnZWQgYXMgYSBrZXkgYXJlYSBvZiBmb2N1cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIFJpZ2h0LCBpdCdzIHJlc3BvbnNpYmxlIGZvciwgd2VsbCwgKmNoYXJnaW5nKiBtZW1vcnkgdG8gYSBjZ3JvdXAuIFRoYXQgc2VlbXMgY2VudHJhbCB0byBob3cgbWVtb3J5IGxpbWl0cyBhbmQgYWNjb3VudGluZyB3b3JrIGluIExpbnV4LiBMZXQncyBkaWcgaW4gYW5kIG1ha2Ugc3VyZSB0aGF0IGZ1bmN0aW9uIGlzIGluIGBtbS9tZW1jb250cm9sLmNgLiBZZXAsIHNlZW1zIHJlYXNvbmFibGUgdGhhdCB0aGlzIGFjY291bnRpbmcgZnVuY3Rpb24gd291bGQgbGl2ZSB0aGVyZS4gQWxyaWdodCwgdGltZSB0byBvcGVuIHVwIHRoYXQgZmlsZSBhbmQgZ2V0IHRvIHJlYWRpbmcgdGhlIGNvZGUuLi4gbGV0J3Mgc2VlIGV4YWN0bHkgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MgYW5kIHdoZXJlIGl0IGZpdHMgaW4gdGhlIGdyZWF0ZXIgc2NoZW1lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW5wdXRzLCBvdXRwdXRzLCBhbmQgYW55IGNhbGxzIHRvIG90aGVyIGtleSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMuIEdvdHRhIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgcmVsYXRlZCB0byB0aGlzLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMzcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyODo0Mi40NTY5MDk5MjRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjQ2MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbWVtX2Nncm91cF9jaGFyZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz01MjAwPXN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjE5LVxcbm1tL21lbWNvbnRyb2wuYzo1MjIwOmludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXFxubW0vbWVtY29udHJvbC5jLTUyMjEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyODo0Mi41MDIxNjQ1NTJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzg1NzU3OTM2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBDZ3JvdXAgQnVnKipcblxuT2theSwgc28gYF9fbWVtX2Nncm91cF9jaGFyZ2VgIGRlZmluaXRlbHkgc2VlbXMgbGlrZSBhIGtleSBhcmVhLCBhIGdvb2QgRm9jdXNTeW1ib2wgdG8gc3RhcnQgd2l0aC4gTGV0J3MgcmV2aXNpdCBgZHJhaW5fYWxsX3N0b2NrYC4gSSByZW1lbWJlciBpdCdzIGNhbGxlZCBmcm9tIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCwgd2hpY2ggaXMgYSBjZ3JvdXAgY2FsbGJhY2suIFNvLCB0aGUgY29yZSBvZiB0aGUgcHJvYmxlbSBsaWtlbHkgcmVzaWRlcyBpbiB0aGUgbWVtY2cgc3RvY2sgZHJhaW5pbmcgcHJvY2Vzcy4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgYSBzaXR1YXRpb24gd2hlcmUgYW4gZW1wdHkgc2xvdCBpcyBzdGlsbCBob2xkaW5nIG9udG8gYSBDU1MgcmVmZXJlbmNlIOKAkyBpbnRlcmVzdGluZy4gVGhlcmVmb3JlLCBgZHJhaW5fYWxsX3N0b2NrYCBpcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiB0byB6ZXJvIGluIG9uLiBBbHNvLCB0aGUgZnVuY3Rpb25zIGBfX21lbV9jZ3JvdXBfY2hhcmdlYCBhbmQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCBhcmUgZXF1YWxseSBzdWl0YWJsZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBIbW0sIHdoYXQgYWJvdXQgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgIGl0c2VsZj8gSXQncyBzdGF0aWMsIHdoaWNoIGlzIGEgYml0IG9mIGEgd3JpbmtsZSwgYnV0IGl0J3MgKnRoZSogY2FsbGJhY2sgZm9yIGBjc3Nfb2ZmbGluZWAsIHNvIGRlZmluaXRlbHkgcmVsZXZhbnQuIEFueSBvdGhlciBjYW5kaWRhdGVzPyBPaCwgcmlnaHQsIGBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5YCBpbiBgbW0vbWVtY29udHJvbC12MS5jYC4gSSBzaG91bGQgYWRkIHRoYXQgb25lIHRvIHRoZSBsaXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQxOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyODo1MC4zNTk3NDYxNDZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTc3Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC12MS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuYz0xNzcxPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9yZXNpemVfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODMzLSAqL1xcbm1tL21lbWNvbnRyb2wtdjEuYzoxODM0OnN0YXRpYyBpbnQgbWVtX2Nncm91cF9mb3JjZV9lbXB0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vbWVtY29udHJvbC12MS5jLTE4MzUte1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4NTktXFxubW0vbWVtY29udHJvbC12MS5jOjE4NjA6c3RhdGljIHNzaXplX3QgbWVtX2Nncm91cF9mb3JjZV9lbXB0eV93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxubW0vbWVtY29udHJvbC12MS5jLTE4NjEtXFx0XFx0XFx0XFx0XFx0ICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcyxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODY3LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm1tL21lbWNvbnRyb2wtdjEuYzoxODY4OlxcdHJldHVybiBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5KG1lbWNnKSA/OiBuYnl0ZXM7XFxubW0vbWVtY29udHJvbC12MS5jLTE4NjktfVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTIzNzc9c3RydWN0IGNmdHlwZSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTI0MTEtXFx0XFx0Lm5hbWUgPSBcXFwiZm9yY2VfZW1wdHlcXFwiLFxcbm1tL21lbWNvbnRyb2wtdjEuYzoyNDEyOlxcdFxcdC53cml0ZSA9IG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlfd3JpdGUsXFxubW0vbWVtY29udHJvbC12MS5jLTI0MTMtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjg6NTAuNDA3OTI4Mzg0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NDQwNTIyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE1lbW9yeSBDb250cm9sIFBhdGNoKipcblxuT2theSwgdGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgYXJlYSBmb3IgZnV6emluZy4gVGhlIGNvZGUncyBhIGJpdCBzdGF0aWMsIGJ1dCBJJ3ZlIGdvdCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEknbSB0aGlua2luZyBgZHJhaW5fYWxsX3N0b2NrYCwgYF9fbWVtX2Nncm91cF9jaGFyZ2VgLCBhbmQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCBhcmUgYWxsIHNvbGlkIGZvY3VzIHN5bWJvbHMgaGVyZS4gTGV0J3Mgc2VlLi4uIGBkcmFpbl9hbGxfc3RvY2tgIGlzbid0IGV4cG9ydGVkLCB3aGljaCBpcyBhIHNoYW1lLCBidXQgaXQgKmlzKiBub24tc3RhdGljLCBzbyB0aGVyZSdzIGhvcGUuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZmluZCB0aGUgZW50cnlwb2ludCBpbiBhbiBleHBvcnRlZCBmdW5jdGlvbi5cblxuTm93LCBpcyB0aGVyZSBhbnl0aGluZyBlbHNlIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMgdGhhdCBjYWxscyBgZHJhaW5fYWxsX3N0b2NrYCBkaXJlY3RseT8gTmVlZCB0byBmb2xsb3cgdGhlIGNhbGwgZ3JhcGgsIHNlZSBpZiB0aGVyZSdzIGFueSB3YXkgdG8gdHJpZ2dlciBpdCBleHRlcm5hbGx5LiBBaCwgaGVyZSdzIGEgZ29vZCBsZWFkOiBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAuIFRoYXQncyBhIGNhbGxiYWNrLCBzbyBpdCdzIGluaXRpYXRlZCBieSB0aGUgY2dyb3VwIGNvcmUuIFRoYXQncyBnb29kLCB0aGF0IG1lYW5zIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBjaGVja2luZy5cblxuVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgaG93IG1lbW9yeSBjZ3JvdXAgc3RvY2sgZHJhaW5pbmcgd29ya3MuIFRoYXQncyBhIGNsYXNzaWMgYXJlYSBmb3IgZnV6emluZzsgbWVtb3J5IG1hbmFnZW1lbnQgYnVncyBhcmUgYWx3YXlzIHRyaWNreS4gVGhlIHBhdGNoIGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHN0b2NrIGRyYWluaW5nLCBzbyBJJ20gdGhpbmtpbmcgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBgTUVNQ0dgIGNvbmZpZ3VyYXRpb24gaXMsIG9mIGNvdXJzZSwgYSBwcmVyZXF1aXNpdGUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYCBmdW5jdGlvbiBpbiBgbW0vbWVtY29udHJvbC5jYC4gR290dGEgYmUgdGhvcm91Z2ghXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjcxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjI4OjU1Ljg1MTk4MzcwM1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzODQ4NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNfbWVtY2dfZHJhaW5fbmVlZGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MjIyMj1zdGF0aWMgdm9pZCByZWZpbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjI4MC1cXG5tbS9tZW1jb250cm9sLmM6MjI4MTpzdGF0aWMgYm9vbCBpc19tZW1jZ19kcmFpbl9uZWVkZWQoc3RydWN0IG1lbWNnX3N0b2NrX3BjcCAqc3RvY2ssXFxubW0vbWVtY29udHJvbC5jLTIyODItXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yMzI1PXZvaWQgZHJhaW5fYWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTIzNDQtXFx0XFx0aWYgKCF0ZXN0X2JpdChGTFVTSElOR19DQUNIRURfQ0hBUkdFLCBcXHUwMDI2bWVtY2dfc3QtXFx1MDAzZWZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbm1tL21lbWNvbnRyb2wuYzoyMzQ1OlxcdFxcdCAgICBpc19tZW1jZ19kcmFpbl9uZWVkZWQobWVtY2dfc3QsIHJvb3RfbWVtY2cpIFxcdTAwMjZcXHUwMDI2XFxubW0vbWVtY29udHJvbC5jLTIzNDYtXFx0XFx0ICAgICF0ZXN0X2FuZF9zZXRfYml0KEZMVVNISU5HX0NBQ0hFRF9DSEFSR0UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjI4OjU1Ljg5ODM3NzIxMVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODU0OTQ3OTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lbWNnIFN0b2NrIERyYWluaW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGZ1bmN0aW9uIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgIGlzIHN0YXRpYywgd2hpY2ggaXMgYSBrZXkgZGV0YWlsIGZvciBzY29waW5nIGFuZCBwb3RlbnRpYWwgaW5saW5pbmcgY29uc2lkZXJhdGlvbnMuIGBkcmFpbl9hbGxfc3RvY2tgLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgbm9uLXN0YXRpYywgaW1wbHlpbmcgaXQgbWlnaHQgYmUgY2FsbGVkIGZyb20gYSB3aWRlciByYW5nZSBvZiBjb2RlIG9yIGhhdmUgYnJvYWRlciBhY2Nlc3MuIEkgbmVlZCB0byBrZWVwIHRob3NlIGluIG1pbmQuXG5cbk15IGZvY3VzIGlzIGZpcm1seSBvbiBgZHJhaW5fYWxsX3N0b2NrYCwgYF9fbWVtX2Nncm91cF9jaGFyZ2VgLCBhbmQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCAtLSB0aG9zZSBhcmUgbXkgXCJGb2N1c1N5bWJvbHNcIiBpbiB0aGlzIGNvbnRleHQuIFRoZXkncmUgd2hlcmUgdGhlIGNvcmUgd29yayBpcyBoYXBwZW5pbmcsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdGhlIHN0b2NrIGRyYWluaW5nLlxuXG5UaGUgY29yZSBvZiB0aGlzIHBhdGNoIGlzIGEgKmZ1bmN0aW9uYWwgY2hhbmdlKiB0byBob3cgbWVtY2cgc3RvY2sgZHJhaW5pbmcgd29ya3MuIFRoZSBjaGFuZ2Ugc2VlbXMgcmVsYXRpdmVseSB0YXJnZXRlZCwgbW9kaWZ5aW5nIGEgY29uZGl0aW9uIHdpdGhpbiBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYC4gUmVtb3ZpbmcgdGhlIGBzdG9jay1cdTAwM2Vucl9wYWdlc1tpXWAgY2hlY2sgaXMgc2lnbmlmaWNhbnQuIFRoZSBpbnRlbnQgaXMgY2xlYXI6IHRvIGVuc3VyZSAqZW1wdHkqIHN0b2NrIHNsb3RzIGFsc28gdHJpZ2dlciBhIGRyYWluLiBQcmV2aW91c2x5LCBlbXB0eSBzbG90cyBtaWdodCBub3QgaGF2ZSB0cmlnZ2VyZWQgaXQsIHNvIGl0J3MgYSBkZXBhcnR1cmUgZnJvbSB0aGUgcHJpb3IgYmVoYXZpb3VyLiBUaGUgcmVhc29uaW5nIGltcGxpZXMgaXQncyBhYm91dCByZWxlYXNpbmcgcGlubmVkIGNzcyByZWZlcmVuY2VzLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYXMgdGhlc2UgYXJlIHJlbGF0ZWQgdG8gdGhlIG1lbW9yeSByZXNvdXJjZSBhY2NvdW50aW5nLlxuXG5HaXZlbiBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBjcml0aWNhbCBhcmVhIGxpa2UgbWVtY2cgc3RvY2sgZHJhaW5pbmcsIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuIEl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIHBvdGVudGlhbCBlZGdlIGNhc2UgaXNzdWVzIG9yIHVuZXhwZWN0ZWQgY29uc2VxdWVuY2VzIHJlbGF0ZWQgdG8gdGltaW5nIG9yIGNvbmN1cnJlbmN5LiBUaGUgZmFjdCB0aGF0IHRoZSBjaGFuZ2UgaXMgc3BlY2lmaWMgdG8gdGhlIGBNRU1DR2AgY29uZmlndXJhdGlvbiBpcyBhbHNvIGltcG9ydGFudCBjb250ZXh0LiBUaGlzIG1lYW5zIGl0IG9ubHkgaW1wYWN0cyBzeXN0ZW1zIHdpdGggbWVtY2cgZW5hYmxlZCwgd2hpY2ggbmFycm93cyB0aGUgc2NvcGUgb2YgaW52ZXN0aWdhdGlvbiwgYnV0IG5vdCB0aGUgaW1wb3J0YW5jZS4gSSBuZWVkIHRvIGJlYXIgaW4gbWluZCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTI0LCJPdXRwdXRUb2tlbnMiOjEyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyOTowNS43NTMzMjkxMjZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTg1Mzk5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkcmFpbl9hbGxfc3RvY2tcIixcbiAgICBcIl9fbWVtX2Nncm91cF9jaGFyZ2VcIixcbiAgICBcIm1lbV9jZ3JvdXBfc2tfY2hhcmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBmb3IgZHJhaW5pbmcgbWVtY2cgc3RvY2sgaW4gYGlzX21lbWNnX2RyYWluX25lZWRlZGAuIEl0IHJlbW92ZXMgdGhlIGNoZWNrIGZvciBgc3RvY2stXFx1MDAzZW5yX3BhZ2VzW2ldYCBiZWluZyBub24temVybywgZW5zdXJpbmcgdGhhdCBlbXB0eSBzbG90cyBzdGlsbCB0cmlnZ2VyIGEgZHJhaW4gdG8gcmVsZWFzZSBwaW5uZWQgY3NzIHJlZmVyZW5jZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1jZyBzdG9jayBkcmFpbmluZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRyYWluX2FsbF9zdG9ja1wiLFxuICAgIFwiX19tZW1fY2dyb3VwX2NoYXJnZVwiLFxuICAgIFwibWVtX2Nncm91cF9za19jaGFyZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciBkcmFpbmluZyBtZW1jZyBzdG9jayBpbiBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYC4gSXQgcmVtb3ZlcyB0aGUgY2hlY2sgZm9yIGBzdG9jay1cXHUwMDNlbnJfcGFnZXNbaV1gIGJlaW5nIG5vbi16ZXJvLCBlbnN1cmluZyB0aGF0IGVtcHR5IHNsb3RzIHN0aWxsIHRyaWdnZXIgYSBkcmFpbiB0byByZWxlYXNlIHBpbm5lZCBjc3MgcmVmZXJlbmNlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbWNnIHN0b2NrIGRyYWluaW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyOTowNS44MjMxODkzNjRaIiwiU2VxIjozNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjUyNTc3OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjk6MDUuODIzNzE0NjQ0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0MjUyMDQ1MjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYCBpbiBgbW0vbWVtY29udHJvbC5jYCB0byBmaXggYSBsb2dpYyBidWcgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIHJlZmVyZW5jZSBjb3VudGluZy4gSXQgZW5zdXJlcyB0aGF0IGEgcGVyLUNQVSBzdG9jayBpcyBkcmFpbmVkIGV2ZW4gaWYgYG5yX3BhZ2VzYCBpcyAwLCBiZWNhdXNlIHRoZSBgbWVtY2dgIHBvaW50ZXIgaXRzZWxmIGhvbGRzIGEgY3NzIHJlZmVyZW5jZSB0aGF0IG5lZWRzIHRvIGJlIHJlbGVhc2VkLiBUaGlzIGlzIGEgZml4IGZvciBhIHJlZmVyZW5jZSBsZWFrIG9yIGEgYnVnIHByZXZlbnRpbmcgYSBjZ3JvdXAgZnJvbSBiZWluZyBvZmZsaW5lZC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gKGZvciB1c2UtYWZ0ZXItZnJlZSkgYW5kIEtNRU1MRUFLIChmb3IgbWVtb3J5IGxlYWtzKSBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBpc3N1ZXMgaW4gdGhpcyBhcmVhLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4YjZhOTAzNzM2MmY4YjllMGMxNTdiYzNlYWI3ZjBjMmE4ZWQ1NDhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDM6Mjc6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDE3ZGExZjQzYjdkM2IuLmI5MzFlYzE2YmI4MjkgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTIyOTEsOCArMjI5MSwxMiBAQCBzdGF0aWMgYm9vbCBpc19tZW1jZ19kcmFpbl9uZWVkZWQoc3RydWN0IG1lbWNnX3N0b2NrX3BjcCAqc3RvY2ssXG4gXHRcdGlmICghbWVtY2cpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmIChSRUFEX09OQ0Uoc3RvY2stXHUwMDNlbnJfcGFnZXNbaV0pIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgbWVtX2Nncm91cF9pc19kZXNjZW5kYW50KG1lbWNnLCByb290X21lbWNnKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBBbiBlbXB0eSBzbG90IHN0aWxsIHBpbnMgYSBjc3MgcmVmZXJlbmNlIHdoaWNoXG4rXHRcdCAqIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoKSByZWxpZXMgb24gZHJhaW5fYWxsX3N0b2NrKClcbitcdFx0ICogdG8gcmVsZWFzZS5cbitcdFx0ICovXG4rXHRcdGlmIChtZW1fY2dyb3VwX2lzX2Rlc2NlbmRhbnQobWVtY2csIHJvb3RfbWVtY2cpKSB7XG4gXHRcdFx0Zmx1c2ggPSB0cnVlO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyOTowNS44MjM3MTU0ODRaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM5OTQ2NzYzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbWNnIERyYWluIENvbmRpdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgYGlzX21lbWNnX2RyYWluX25lZWRlZGAgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgdGhlIHJlbW92YWwgb2YgdGhlIGBSRUFEX09OQ0Uoc3RvY2stXHUwMDNlbnJfcGFnZXNbaV0pYCBjb25kaXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSByZWZlcmVuY2UgY291bnRpbmcgbG9naWMgYW5kIGhvdyB3ZSBoYW5kbGUgZHJhaW5pbmcgdGhlIHBlci1DUFUgY2FjaGVzIHdpdGhpbiBtZW1vcnkgY2dyb3Vwcy5cblxuVGhlIGNvbW1lbnQgaXRzZWxmIGdpdmVzIGEgZ29vZCBjbHVlLiBJdCBzZWVtcyB0aGF0IGV2ZW4gd2l0aCBgbnJfcGFnZXNgIGF0IHplcm8sIHRoZXJlJ3Mgc3RpbGwgYSBDU1MgcmVmZXJlbmNlIHBpbm5lZCwgd2hpY2ggYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoKWAgcmVsaWVzIG9uIGBkcmFpbl9hbGxfc3RvY2soKWAgdG8gcmVsZWFzZS4gSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCB0aGUgYmlnZ2VyIHBpY3R1cmUuIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgIHNlZW1zIHRvIGl0ZXJhdGUgb3ZlciBzb21lIGFzcGVjdCBvZiB0aGUgbWVtb3J5IGNncm91cCBzdG9jaywgbGlrZWx5IGBzdG9jay1cdTAwM2VjYWNoZWRgLCBgc3RvY2stXHUwMDNlbnJfcGFnZXNgLCBvciBgc3RvY2stXHUwMDNlbWVtY2dgLiBCeSByZW1vdmluZyB0aGUgY2hlY2sgZm9yIHplcm8gYG5yX3BhZ2VzYCwgdGhlIHBhdGNoIGlzIHNheWluZyBcInllcywgZHJhaW4gdGhpcyBzdG9jayBldmVuIGlmIGl0J3MgY3VycmVudGx5IGhvbGRpbmcgemVybyBwYWdlcywgYmVjYXVzZSB0aGUgQ1NTIHJlZmVyZW5jZSBzdGlsbCBuZWVkcyB0byBiZSBhY2NvdW50ZWQgZm9yLlwiXG5cblRoaXMgaXMsIGFsbW9zdCBjZXJ0YWlubHksIGEgbG9naWMgYnVnIGZpeCByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXAgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGUgaXNzdWUgaXMgbGlrZWx5IGEgQ1NTIHJlZmVyZW5jZSBsZWFrIG9yIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL29mZmxpbmUgc2l0dWF0aW9uLiBJZiB3ZSBmcmVlIHRoZSBDU1MgcHJlbWF0dXJlbHksIEtBU0FOIG1pZ2h0IHRyaWdnZXIgYSB1c2UtYWZ0ZXItZnJlZSBlcnJvci4gQnV0IHRoaXMgaXNuJ3QgS01TQU4gdGVycml0b3J5OyB0aGVyZSdzIG5vIGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIEtNU0FOIHdvdWxkbid0IGJlIHJlbGV2YW50IGhlcmUuIExldCdzIG1ha2Ugc3VyZSBJJ20gZm9sbG93aW5nIHRoZSBsb2dpYy4gSSBzaG91bGQgZG91YmxlIGNoZWNrIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgIGluIGBtbS9tZW1jb250cm9sLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjk6MTMuMjIzMTg2MDMyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ3NTQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpc19tZW1jZ19kcmFpbl9uZWVkZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0yMjIyPXN0YXRpYyB2b2lkIHJlZmlsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yMjgwLVxcbm1tL21lbWNvbnRyb2wuYzoyMjgxOnN0YXRpYyBib29sIGlzX21lbWNnX2RyYWluX25lZWRlZChzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwICpzdG9jayxcXG5tbS9tZW1jb250cm9sLmMtMjI4Mi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTIzMjU9dm9pZCBkcmFpbl9hbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjM0NC1cXHRcXHRpZiAoIXRlc3RfYml0KEZMVVNISU5HX0NBQ0hFRF9DSEFSR0UsIFxcdTAwMjZtZW1jZ19zdC1cXHUwMDNlZmxhZ3MpIFxcdTAwMjZcXHUwMDI2XFxubW0vbWVtY29udHJvbC5jOjIzNDU6XFx0XFx0ICAgIGlzX21lbWNnX2RyYWluX25lZWRlZChtZW1jZ19zdCwgcm9vdF9tZW1jZykgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1jb250cm9sLmMtMjM0Ni1cXHRcXHQgICAgIXRlc3RfYW5kX3NldF9iaXQoRkxVU0hJTkdfQ0FDSEVEX0NIQVJHRSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjk6MTMuMjcyNjY1NTlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjgwMzAzODY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaCwgYW5kIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGNvcmUgb2YgaXQgaW52b2x2ZXMgbW9kaWZ5aW5nIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgIGluIGBtbS9tZW1jb250cm9sLmNgLiBFc3NlbnRpYWxseSwgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGEgbG9naWNhbCBjb3JyZWN0aW9uIHJlbGF0ZWQgdG8gdGhlIHJlZmVyZW5jZSBjb3VudGluZyB3aXRoaW4gY2dyb3Vwcy4gVGhlIGZ1bmN0aW9uIGRldGVybWluZXMgaWYgYSBtZW1vcnkgY2dyb3VwIG5lZWRzIHRvIGJlIFwiZHJhaW5lZFwiIOKAkyB0aGF0IGlzLCBpZiB3ZSBuZWVkIHRvIGVuc3VyZSBpdHMgcmVzb3VyY2VzIGFyZSBwcm9wZXJseSBhY2NvdW50ZWQgZm9yIGFuZCByZWxlYXNlZC4gVGhlIGN1cnJlbnQgbG9naWMgd2FzIGNhdXNpbmcgaXNzdWVzLCBsaWtlbHkgbGVhZGluZyB0byByZWZlcmVuY2UgbGVha3Mgb3IgYmxvY2tpbmcgY2dyb3VwIG9mZmxpbmluZywgd2hpY2ggaXMgYSBrbm93biBwcm9ibGVtIGluIHRoaXMgYXJlYS5cblxuVGhlIGdvb2QgbmV3cyBpcyB0aGF0IHRoaXMgaXMgKm5vdCogYSB2dWxuZXJhYmlsaXR5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgYWx3YXlzIGEgcmVsaWVmLiBXZSBkb24ndCBuZWVkIHRvIGludm9sdmUgS01TQU4gZm9yIHRoaXMuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIGFuYWx5c2lzIHdpdGggS0FTQU4gYW5kIEtNRU1MRUFLLCBhbG9uZyB3aXRoIG5vcm1hbCB0ZXN0aW5nLCBzaG91bGQgYmUgcGVyZmVjdGx5IGFkZXF1YXRlIHRvIGVuc3VyZSBjb3JyZWN0bmVzcy5cblxuVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzIHBhdGNoLiBJdCdzIGEgY2xlYW4sIGZvY3VzZWQgZml4IHRoYXQgYWRkcmVzc2VzIGEgbG9naWMgZmxhdyBpbiB0aGUgY2dyb3VwIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgZG9lc24ndCByZXF1aXJlIHRoZSBvdmVyaGVhZCBvZiBLTVNBTi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA0MSwiT3V0cHV0VG9rZW5zIjoxODAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjk6MjAuMDc1NzA4OTg2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYCBpbiBgbW0vbWVtY29udHJvbC5jYCB0byBmaXggYSBsb2dpYyBidWcgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIHJlZmVyZW5jZSBjb3VudGluZy4gSXQgZW5zdXJlcyB0aGF0IGEgcGVyLUNQVSBzdG9jayBpcyBkcmFpbmVkIGV2ZW4gaWYgYG5yX3BhZ2VzYCBpcyAwLCBiZWNhdXNlIHRoZSBgbWVtY2dgIHBvaW50ZXIgaXRzZWxmIGhvbGRzIGEgY3NzIHJlZmVyZW5jZSB0aGF0IG5lZWRzIHRvIGJlIHJlbGVhc2VkLiBUaGlzIGlzIGEgZml4IGZvciBhIHJlZmVyZW5jZSBsZWFrIG9yIGEgYnVnIHByZXZlbnRpbmcgYSBjZ3JvdXAgZnJvbSBiZWluZyBvZmZsaW5lZC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gKGZvciB1c2UtYWZ0ZXItZnJlZSkgYW5kIEtNRU1MRUFLIChmb3IgbWVtb3J5IGxlYWtzKSBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBpc3N1ZXMgaW4gdGhpcyBhcmVhLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYCBpbiBgbW0vbWVtY29udHJvbC5jYCB0byBmaXggYSBsb2dpYyBidWcgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIHJlZmVyZW5jZSBjb3VudGluZy4gSXQgZW5zdXJlcyB0aGF0IGEgcGVyLUNQVSBzdG9jayBpcyBkcmFpbmVkIGV2ZW4gaWYgYG5yX3BhZ2VzYCBpcyAwLCBiZWNhdXNlIHRoZSBgbWVtY2dgIHBvaW50ZXIgaXRzZWxmIGhvbGRzIGEgY3NzIHJlZmVyZW5jZSB0aGF0IG5lZWRzIHRvIGJlIHJlbGVhc2VkLiBUaGlzIGlzIGEgZml4IGZvciBhIHJlZmVyZW5jZSBsZWFrIG9yIGEgYnVnIHByZXZlbnRpbmcgYSBjZ3JvdXAgZnJvbSBiZWluZyBvZmZsaW5lZC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gKGZvciB1c2UtYWZ0ZXItZnJlZSkgYW5kIEtNRU1MRUFLIChmb3IgbWVtb3J5IGxlYWtzKSBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBpc3N1ZXMgaW4gdGhpcyBhcmVhLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workfloww9kt8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 03:04:15 +0000 UTC FinishedAt: 2026-08-17 03:29:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4477a78374a57c3809b172ad30cceabda48c47c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4477a78374a57c3809b172ad30cceabda48c47c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG" ], "series_id": "061eaec8-37d9-4bf1-a5cc-b49bfe614c4f" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "drain_all_stock", "__mem_cgroup_charge", "mem_cgroup_sk_charge" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHJhaW5fYWxsX3N0b2NrJiMzNDssCiAgICAmIzM0O19fbWVtX2Nncm91cF9jaGFyZ2UmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9za19jaGFyZ2UmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYCBpbiBgbW0vbWVtY29udHJvbC5jYCB0byBmaXggYSBsb2dpYyBidWcgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIHJlZmVyZW5jZSBjb3VudGluZy4gSXQgZW5zdXJlcyB0aGF0IGEgcGVyLUNQVSBzdG9jayBpcyBkcmFpbmVkIGV2ZW4gaWYgYG5yX3BhZ2VzYCBpcyAwLCBiZWNhdXNlIHRoZSBgbWVtY2dgIHBvaW50ZXIgaXRzZWxmIGhvbGRzIGEgY3NzIHJlZmVyZW5jZSB0aGF0IG5lZWRzIHRvIGJlIHJlbGVhc2VkLiBUaGlzIGlzIGEgZml4IGZvciBhIHJlZmVyZW5jZSBsZWFrIG9yIGEgYnVnIHByZXZlbnRpbmcgYSBjZ3JvdXAgZnJvbSBiZWluZyBvZmZsaW5lZC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gKGZvciB1c2UtYWZ0ZXItZnJlZSkgYW5kIEtNRU1MRUFLIChmb3IgbWVtb3J5IGxlYWtzKSBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBpc3N1ZXMgaW4gdGhpcyBhcmVhLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBmb3IgZHJhaW5pbmcgbWVtY2cgc3RvY2sgaW4gYGlzX21lbWNnX2RyYWluX25lZWRlZGAuIEl0IHJlbW92ZXMgdGhlIGNoZWNrIGZvciBgc3RvY2stXHUwMDNlbnJfcGFnZXNbaV1gIGJlaW5nIG5vbi16ZXJvLCBlbnN1cmluZyB0aGF0IGVtcHR5IHNsb3RzIHN0aWxsIHRyaWdnZXIgYSBkcmFpbiB0byByZWxlYXNlIHBpbm5lZCBjc3MgcmVmZXJlbmNlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbWNnIHN0b2NrIGRyYWluaW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOGI2YTkwMzczNjJmOGI5ZTBjMTU3YmMzZWFiN2YwYzJhOGVkNTQ4ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDAzOjI3OjM1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMTdkYTFmNDNiN2QzYi4uYjkzMWVjMTZiYjgyOSAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMjI5MSw4ICYjNDM7MjI5MSwxMiBAQCBzdGF0aWMgYm9vbCBpc19tZW1jZ19kcmFpbl9uZWVkZWQoc3RydWN0IG1lbWNnX3N0b2NrX3BjcCAqc3RvY2ssXG4gXHRcdGlmICghbWVtY2cpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmIChSRUFEX09OQ0Uoc3RvY2stXHUwMDNlbnJfcGFnZXNbaV0pIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgbWVtX2Nncm91cF9pc19kZXNjZW5kYW50KG1lbWNnLCByb290X21lbWNnKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEFuIGVtcHR5IHNsb3Qgc3RpbGwgcGlucyBhIGNzcyByZWZlcmVuY2Ugd2hpY2hcbiYjNDM7XHRcdCAqIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoKSByZWxpZXMgb24gZHJhaW5fYWxsX3N0b2NrKClcbiYjNDM7XHRcdCAqIHRvIHJlbGVhc2UuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChtZW1fY2dyb3VwX2lzX2Rlc2NlbmRhbnQobWVtY2csIHJvb3RfbWVtY2cpKSB7XG4gXHRcdFx0Zmx1c2ggPSB0cnVlO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHJhaW5fYWxsX3N0b2NrJiMzNDssCiAgICAmIzM0O19fbWVtX2Nncm91cF9jaGFyZ2UmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9za19jaGFyZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBmb3IgZHJhaW5pbmcgbWVtY2cgc3RvY2sgaW4gYGlzX21lbWNnX2RyYWluX25lZWRlZGAuIEl0IHJlbW92ZXMgdGhlIGNoZWNrIGZvciBgc3RvY2stXHUwMDNlbnJfcGFnZXNbaV1gIGJlaW5nIG5vbi16ZXJvLCBlbnN1cmluZyB0aGF0IGVtcHR5IHNsb3RzIHN0aWxsIHRyaWdnZXIgYSBkcmFpbiB0byByZWxlYXNlIHBpbm5lZCBjc3MgcmVmZXJlbmNlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbWNnIHN0b2NrIGRyYWluaW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGI2YTkwMzczNjJmOGI5ZTBjMTU3YmMzZWFiN2YwYzJhOGVkNTQ4ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDAzOjI3OjM1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDE3ZGExZjQzYjdkM2IuLmI5MzFlYzE2YmI4MjkgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTIyOTEsOCAmIzQzOzIyOTEsMTIgQEAgc3RhdGljIGJvb2wgaXNfbWVtY2dfZHJhaW5fbmVlZGVkKHN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrLAogCQlpZiAoIW1lbWNnKQogCQkJY29udGludWU7CiAKLQkJaWYgKFJFQURfT05DRShzdG9jay0mZ3Q7bnJfcGFnZXNbaV0pICZhbXA7JmFtcDsKLQkJICAgIG1lbV9jZ3JvdXBfaXNfZGVzY2VuZGFudChtZW1jZywgcm9vdF9tZW1jZykpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBbiBlbXB0eSBzbG90IHN0aWxsIHBpbnMgYSBjc3MgcmVmZXJlbmNlIHdoaWNoCiYjNDM7CQkgKiBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKCkgcmVsaWVzIG9uIGRyYWluX2FsbF9zdG9jaygpCiYjNDM7CQkgKiB0byByZWxlYXNlLgomIzQzOwkJICovCiYjNDM7CQlpZiAobWVtX2Nncm91cF9pc19kZXNjZW5kYW50KG1lbWNnLCByb290X21lbWNnKSkgewogCQkJZmx1c2ggPSB0cnVlOwogCQkJYnJlYWs7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgYSBNZW1jZyBQYXRjaCoqCgpBbHJpZ2h0LCBJIHNlZSB3ZSBoYXZlIGEgcGF0Y2ggdG91Y2hpbmcgYG1tL21lbWNvbnRyb2wuY2AuIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZSBpbnZvbHZlcyBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudCB3aXRoaW4gYGlzX21lbWNnX2RyYWluX25lZWRlZGAuICBUaGUga2V5IGhlcmUgaXMgdGhhdCBgUkVBRF9PTkNFKHN0b2NrLSZndDtucl9wYWdlc1tpXSlgIGlzIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGF0IGNvbmRpdGlvbi4gIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIGNvcmUgYWx0ZXJhdGlvbiB0byBob3cgdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIChtZW1jZykgbG9naWMgb3BlcmF0ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBkZWVtZWQgbmVjZXNzYXJ5LiBUaGUgcmVtb3ZhbCBvZiB0aGlzIGBSRUFEX09OQ0VgIHN1Z2dlc3RzIHRoZSBwYXRjaCBhdXRob3IgaXMgbGlrZWx5IG9wdGltaXppbmcsIG9yIHBvc3NpYmx5IGFkZHJlc3NpbmcgYSBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWUgcmVsYXRlZCB0byBob3cgYG5yX3BhZ2VzYCBpcyBhY2Nlc3NlZCB3aXRoaW4gdGhlIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgIGZ1bmN0aW9uLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgZHJhaW4gbG9naWMgaW4gdGhlIG1lbWNnIHN1YnN5c3RlbS4gIEkgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCB0aGUgb3JpZ2luYWwgaW50ZW50IG9mIHRoYXQgYFJFQURfT05DRWAgY2FsbCB0byB0cnVseSBhc3Nlc3MgdGhlIGltcGxpY2F0aW9ucyBhbmQgZW5zdXJlIHRoaXMgd29uJiMzOTt0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiByYWNlIGNvbmRpdGlvbnMgb3IgZGF0YSBjb3JydXB0aW9uLiBMZXQmIzM5O3MgZ2V0IGludG8gYGlzX21lbWNnX2RyYWluX25lZWRlZGAgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc19tZW1jZ19kcmFpbl9uZWVkZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTIyMjI9c3RhdGljIHZvaWQgcmVmaWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yMjgwLVxubW0vbWVtY29udHJvbC5jOjIyODE6c3RhdGljIGJvb2wgaXNfbWVtY2dfZHJhaW5fbmVlZGVkKHN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrLFxubW0vbWVtY29udHJvbC5jLTIyODItXHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yMzI1PXZvaWQgZHJhaW5fYWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yMzQ0LVx0XHRpZiAoIXRlc3RfYml0KEZMVVNISU5HX0NBQ0hFRF9DSEFSR0UsIFx1MDAyNm1lbWNnX3N0LVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbm1tL21lbWNvbnRyb2wuYzoyMzQ1Olx0XHQgICAgaXNfbWVtY2dfZHJhaW5fbmVlZGVkKG1lbWNnX3N0LCByb290X21lbWNnKSBcdTAwMjZcdTAwMjZcbm1tL21lbWNvbnRyb2wuYy0yMzQ2LVx0XHQgICAgIXRlc3RfYW5kX3NldF9iaXQoRkxVU0hJTkdfQ0FDSEVEX0NIQVJHRSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjYyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IENHIERyYWluIERlcGVuZGVuY3kqKgoKQWxyaWdodCwgc28gYGlzX21lbWNnX2RyYWluX25lZWRlZGAgaXMgYSBmdW5jdGlvbiB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbiwgYW5kIGl0JiMzOTtzIGdldHRpbmcgY2FsbGVkIGJ5IGBkcmFpbl9hbGxfc3RvY2tgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBvZiBjb3Vyc2UsICp3aGVyZSogaXMgYGRyYWluX2FsbF9zdG9ja2AgYmVpbmcgY2FsbGVkPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHNpdGVzIG9mIGBkcmFpbl9hbGxfc3RvY2tgIGlzIGNydWNpYWwgdG8gbWFwcGluZyB0aGUgY29tcGxldGUgZGVwZW5kZW5jeSBjaGFpbiBhbmQgdGhlIGNpcmN1bXN0YW5jZXMgdGhhdCB0cmlnZ2VyIHRoaXMgZHJhaW5hZ2UgY2hlY2suIE5lZWQgdG8gdHJhY2UgdGhhdCBwYXRoIHRvIHNlZSBpZiBpdCBtYWtlcyBzZW5zZSBpbiB0aGUgY3VycmVudCBjb250ZXh0LiBBIGZvY3VzZWQgY2FsbCBncmFwaCBhbmFseXNpcyBpcyBwcm9iYWJseSBpbiBvcmRlciB0byBwaW5wb2ludCBldmVyeXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RyYWluX2FsbF9zdG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MjI4MT1zdGF0aWMgYm9vbCBpc19tZW1jZ19kcmFpbl9uZWVkZWQoc3RydWN0IG1lbWNnX3N0b2NrX3BjcCAqc3RvY2ssXG4tLVxubW0vbWVtY29udHJvbC5jLTIyOTUtXHRcdCAqIEFuIGVtcHR5IHNsb3Qgc3RpbGwgcGlucyBhIGNzcyByZWZlcmVuY2Ugd2hpY2hcbm1tL21lbWNvbnRyb2wuYzoyMjk2Olx0XHQgKiBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKCkgcmVsaWVzIG9uIGRyYWluX2FsbF9zdG9jaygpXG5tbS9tZW1jb250cm9sLmMtMjI5Ny1cdFx0ICogdG8gcmVsZWFzZS5cbi0tXG5tbS9tZW1jb250cm9sLmM9MjMwOD1zdGF0aWMgdm9pZCBzY2hlZHVsZV9kcmFpbl93b3JrKGludCBjcHUsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjMyNC0gKi9cbm1tL21lbWNvbnRyb2wuYzoyMzI1OnZvaWQgZHJhaW5fYWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKVxubW0vbWVtY29udHJvbC5jLTIzMjYte1xuLS1cbm1tL21lbWNvbnRyb2wuYz0yNjQ0PXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNzI0LVx0aWYgKCFkcmFpbmVkKSB7XG5tbS9tZW1jb250cm9sLmM6MjcyNTpcdFx0ZHJhaW5fYWxsX3N0b2NrKG1lbV9vdmVyX2xpbWl0KTtcbm1tL21lbWNvbnRyb2wuYy0yNzI2LVx0XHRkcmFpbmVkID0gdHJ1ZTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDM0Nz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQzNjgtXG5tbS9tZW1jb250cm9sLmM6NDM2OTpcdGRyYWluX2FsbF9zdG9jayhtZW1jZyk7XG5tbS9tZW1jb250cm9sLmMtNDM3MC1cbi0tXG5tbS9tZW1jb250cm9sLmM9NDgzNz1zdGF0aWMgc3NpemVfdCBtZW1vcnlfaGlnaF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4tLVxubW0vbWVtY29udHJvbC5jLTQ4NzMtXHRcdGlmICghZHJhaW5lZCkge1xubW0vbWVtY29udHJvbC5jOjQ4NzQ6XHRcdFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcbm1tL21lbWNvbnRyb2wuYy00ODc1LVx0XHRcdGRyYWluZWQgPSB0cnVlO1xuLS1cbm1tL21lbWNvbnRyb2wuYz00ODk2PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9tYXhfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuLS1cbm1tL21lbWNvbnRyb2wuYy00OTMxLVx0XHRpZiAoIWRyYWluZWQpIHtcbm1tL21lbWNvbnRyb2wuYzo0OTMyOlx0XHRcdGRyYWluX2FsbF9zdG9jayhtZW1jZyk7XG5tbS9tZW1jb250cm9sLmMtNDkzMy1cdFx0XHRkcmFpbmVkID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDg3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgU2NvcGUgb2YgYGRyYWluX2FsbF9zdG9ja2AqKgoKT2theSwgc28gYGRyYWluX2FsbF9zdG9ja2AgaXMgZ2V0dGluZyBjYWxsZWQgZnJvbSBhIGZldyBkaWZmZXJlbnQgcGxhY2VzOiBgdHJ5X2NoYXJnZV9tZW1jZ2AsIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCwgYG1lbW9yeV9oaWdoX3dyaXRlYCwgYW5kIGBtZW1vcnlfbWF4X3dyaXRlYC4gVGhhdCBnaXZlcyBtZSBhIGRlY2VudCBvdmVydmlldyBvZiAqd2hlcmUqIGl0JiMzOTtzIHVzZWQg4oCTIGFsbCByZWxhdGVkIHRvIG1lbW9yeSBjb250cm9sIGFuZCBjZ3JvdXBzLCBvZiBjb3Vyc2UuCgpOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdpZGVseSB0aGlzIGZ1bmN0aW9uIGlzIGFjY2Vzc2libGUuIElzIGl0IGEgbW9kdWxlLWludGVybmFsIHRoaW5nLCBvciBpcyBpdCBleHBvc2VkIGZvciBwb3RlbnRpYWwgdXNlIGVsc2V3aGVyZT8gTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgd2hldGhlciBpdCYjMzk7cyBkZWNsYXJlZCBgc3RhdGljYC4gQWhhLCBpdCYjMzk7cyAqbm90KiBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIHBvdGVudGlhbGx5IHZpc2libGUgb3V0c2lkZSBvZiBpdHMgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBUaGF04oCZcyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4KCk5leHQgcXVlc3Rpb246IEV2ZW4gdGhvdWdoIGl0ICpjb3VsZCogYmUgdXNlZCBlbHNld2hlcmUsIGlzIGl0ICphY3R1YWxseSogdXNlZCBvdXRzaWRlIG9mIGBtbS9tZW1jb250cm9sLmNgPyBUaGF0IHdvdWxkIHJlZmluZSBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBpbXBhY3QgYW5kIHBvdGVudGlhbCBmb3IgcmVmYWN0b3JpbmcuIElmIGl0JiMzOTtzICpvbmx5KiB1c2VkIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYCwgaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRpdmVseSBzYWZlIHRvIG1vZGlmeSwgZXZlbiBpZiBub3Qgc3RhdGljLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHVzYWdlIHNjb3BlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RyYWluX2FsbF9zdG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLXYxLmM9MTc3MT1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfcmVzaXplX21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE4MTAtXHRcdGlmICghZHJhaW5lZCkge1xubW0vbWVtY29udHJvbC12MS5jOjE4MTE6XHRcdFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcbm1tL21lbWNvbnRyb2wtdjEuYy0xODEyLVx0XHRcdGRyYWluZWQgPSB0cnVlO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xODM0PXN0YXRpYyBpbnQgbWVtX2Nncm91cF9mb3JjZV9lbXB0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE4NDAtXG5tbS9tZW1jb250cm9sLXYxLmM6MTg0MTpcdGRyYWluX2FsbF9zdG9jayhtZW1jZyk7XG5tbS9tZW1jb250cm9sLXYxLmMtMTg0Mi1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmgtMjAtXG5tbS9tZW1jb250cm9sLXYxLmg6MjE6dm9pZCBkcmFpbl9hbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtY2cpO1xubW0vbWVtY29udHJvbC12MS5oLTIyLVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yMjgxPXN0YXRpYyBib29sIGlzX21lbWNnX2RyYWluX25lZWRlZChzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwICpzdG9jayxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjI5NS1cdFx0ICogQW4gZW1wdHkgc2xvdCBzdGlsbCBwaW5zIGEgY3NzIHJlZmVyZW5jZSB3aGljaFxubW0vbWVtY29udHJvbC5jOjIyOTY6XHRcdCAqIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoKSByZWxpZXMgb24gZHJhaW5fYWxsX3N0b2NrKClcbm1tL21lbWNvbnRyb2wuYy0yMjk3LVx0XHQgKiB0byByZWxlYXNlLlxuLS1cbm1tL21lbWNvbnRyb2wuYz0yMzA4PXN0YXRpYyB2b2lkIHNjaGVkdWxlX2RyYWluX3dvcmsoaW50IGNwdSwgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yMzI0LSAqL1xubW0vbWVtY29udHJvbC5jOjIzMjU6dm9pZCBkcmFpbl9hbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtY2cpXG5tbS9tZW1jb250cm9sLmMtMjMyNi17XG4tLVxubW0vbWVtY29udHJvbC5jPTI2NDQ9c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vbWVtY29udHJvbC5jLTI3MjQtXHRpZiAoIWRyYWluZWQpIHtcbm1tL21lbWNvbnRyb2wuYzoyNzI1Olx0XHRkcmFpbl9hbGxfc3RvY2sobWVtX292ZXJfbGltaXQpO1xubW0vbWVtY29udHJvbC5jLTI3MjYtXHRcdGRyYWluZWQgPSB0cnVlO1xuLS1cbm1tL21lbWNvbnRyb2wuYz00MzQ3PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDM2OC1cbm1tL21lbWNvbnRyb2wuYzo0MzY5Olx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcbm1tL21lbWNvbnRyb2wuYy00MzcwLVxuLS1cbm1tL21lbWNvbnRyb2wuYz00ODM3PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9oaWdoX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbi0tXG5tbS9tZW1jb250cm9sLmMtNDg3My1cdFx0aWYgKCFkcmFpbmVkKSB7XG5tbS9tZW1jb250cm9sLmM6NDg3NDpcdFx0XHRkcmFpbl9hbGxfc3RvY2sobWVtY2cpO1xubW0vbWVtY29udHJvbC5jLTQ4NzUtXHRcdFx0ZHJhaW5lZCA9IHRydWU7XG4tLVxubW0vbWVtY29udHJvbC5jPTQ4OTY9c3RhdGljIHNzaXplX3QgbWVtb3J5X21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4tLVxubW0vbWVtY29udHJvbC5jLTQ5MzEtXHRcdGlmICghZHJhaW5lZCkge1xubW0vbWVtY29udHJvbC5jOjQ5MzI6XHRcdFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcbm1tL21lbWNvbnRyb2wuYy00OTMzLVx0XHRcdGRyYWluZWQgPSB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1jZyBEcmFpbiBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaG93IGBkcmFpbl9hbGxfc3RvY2tgIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBtZW1vcnkgY2dyb3VwIHN1YnN5c3RlbS4gSSYjMzk7bSBzZWVpbmcgaXQmIzM5O3MgY2FsbGVkIGZyb20gYSBudW1iZXIgb2YgcGxhY2VzOiBgbWVtX2Nncm91cF9yZXNpemVfbWF4YCwgYG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlgLCBgdHJ5X2NoYXJnZV9tZW1jZ2AsIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCwgYG1lbW9yeV9oaWdoX3dyaXRlYCwgYW5kIGBtZW1vcnlfbWF4X3dyaXRlYC4gQWxsIHNvbGlkbHkgbWVtY2cgZnVuY3Rpb25zLCBhcyBleHBlY3RlZC4KClRoZSBjcnV4IG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgLiBJdCBsb29rcyBsaWtlIGl0IG5vdyBkcmFpbnMgdGhlIHN0b2NrIGV2ZW4gaWYgYHN0b2NrLSZndDtucl9wYWdlc1tpXWAgaXMgemVyby4gQWgsIEkgc2VlLCB0aGF0IG1ha2VzIHNlbnNlLiBUaGUgY29tbWVudCBzcGVjaWZpY2FsbHkgcG9pbnRzIG91dCB0aGF0IGFuICYjMzQ7ZW1wdHkgc2xvdCBzdGlsbCBwaW5zIGEgY3NzIHJlZmVyZW5jZSB3aGljaCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKCkgcmVsaWVzIG9uIGRyYWluX2FsbF9zdG9jaygpIHRvIHJlbGVhc2UuJiMzNDsgU28sIHRoaXMgaXMgYSBmaXguIFdpdGhvdXQgZHJhaW5pbmcgdGhlIGVtcHR5IHNsb3QsIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCB3b3VsZG4mIzM5O3QgYmUgYWJsZSB0byByZWxlYXNlIHRoZSBDU1MgcmVmZXJlbmNlLiBUaGlzIHdvdWxkIGJlIGEgc3VidGxlIGJ1dCBjcml0aWNhbCBidWcgd2hlcmUgYSBDU1MgcmVmZXJlbmNlIGhhbmdzIGFyb3VuZCBldmVuIHdoZW4gYSBwYWdlIGlzIG5vIGxvbmdlciBhc3NvY2lhdGVkIHdpdGggaXQuCgpUaGlzIGlzIGZ1bmRhbWVudGFsbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gbWVtY2cuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgd291bGQgYmUgZ29vZCB0byBmdXp6IGFuZCB0ZXN0IGFzIHRoZSBiZWhhdmlvciBjb3VsZCBjYXVzZSBwcm9ibGVtcyBhdCBjZXJ0YWluIHRocmVzaG9sZHMsIGVzcGVjaWFsbHkgd2l0aCB0aGUgY2FsbHMgdG8gYGRyYWluX2FsbF9zdG9ja2AuIFNpbmNlIGBkcmFpbl9hbGxfc3RvY2tgIGlzIHRoZSBzdWJqZWN0IGhlcmUsIEkgc2hvdWxkIG1ha2Ugc3VyZSBpdCYjMzk7cyBmdXp6ZWQgYW5kIHRlc3RlZCB3ZWxsLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSB0aG9zZSBjb3JlIGZ1bmN0aW9ucy4gYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgLCBgbWVtb3J5X2hpZ2hfd3JpdGVgLCBgbWVtb3J5X21heF93cml0ZWAsIGBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5YCwgYG1lbV9jZ3JvdXBfcmVzaXplX21heGAsIGFuZCBgdHJ5X2NoYXJnZV9tZW1jZ2AuIExldCYjMzk7cyBwYXkgZXNwZWNpYWxseSBjbG9zZSBhdHRlbnRpb24gdG8gYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgIHRvIGVuc3VyZSB0aGF0IHRoaXMgY2hhbmdlIGFjdHVhbGx5IHJlc29sdmVzIHRoZSBwb3RlbnRpYWwgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfY3NzX29mZmxpbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTIyODE9c3RhdGljIGJvb2wgaXNfbWVtY2dfZHJhaW5fbmVlZGVkKHN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yMjk1LVx0XHQgKiBBbiBlbXB0eSBzbG90IHN0aWxsIHBpbnMgYSBjc3MgcmVmZXJlbmNlIHdoaWNoXG5tbS9tZW1jb250cm9sLmM6MjI5NjpcdFx0ICogbWVtX2Nncm91cF9jc3Nfb2ZmbGluZSgpIHJlbGllcyBvbiBkcmFpbl9hbGxfc3RvY2soKVxubW0vbWVtY29udHJvbC5jLTIyOTctXHRcdCAqIHRvIHJlbGVhc2UuXG4tLVxubW0vbWVtY29udHJvbC5jPTQyNzA9c3RhdGljIGludCBtZW1fY2dyb3VwX2Nzc19vbmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDM0Ni1cbm1tL21lbWNvbnRyb2wuYzo0MzQ3OnN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbm1tL21lbWNvbnRyb2wuYy00MzQ4LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTE1OT1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTUxNjEtXHQuY3NzX29ubGluZSA9IG1lbV9jZ3JvdXBfY3NzX29ubGluZSxcbm1tL21lbWNvbnRyb2wuYzo1MTYyOlx0LmNzc19vZmZsaW5lID0gbWVtX2Nncm91cF9jc3Nfb2ZmbGluZSxcbm1tL21lbWNvbnRyb2wuYy01MTYzLVx0LmNzc19yZWxlYXNlZCA9IG1lbV9jZ3JvdXBfY3NzX3JlbGVhc2VkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODIzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgQW5hbHlzaXMgb2YgTWVtb3J5IENHcm91cHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCwgdGhhdCYjMzk7cyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBjZ3JvdXAgc3Vic3lzdGVtLCByaWdodD8gQW5kIEkgc2VlIGBkcmFpbl9hbGxfc3RvY2tgIHdoaWNoIHJlbGllcyBvbiBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYC4gU2VlbXMgbG9naWNhbCB0byBhZGQgYGRyYWluX2FsbF9zdG9ja2AgdG8gdGhlIEZvY3VzU3ltYm9scyBsaXN0LCB0aGF0IHNlZW1zIHJlbGV2YW50IGdpdmVuIHRoZSBjb250ZXh0LgoKSSYjMzk7bSBhbHNvIHRoaW5raW5nIGFib3V0IGluY2x1ZGluZyBgbWVtb3J5X2hpZ2hfd3JpdGVgLCBgbWVtb3J5X21heF93cml0ZWAsIGBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5YCwgYW5kIGBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXhgLCBhcyB0aGV5IHNlZW0gbGlrZWx5IHRvIGJlIGltcG9ydGFudC4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyBhZGQgYHRyeV9jaGFyZ2VfbWVtY2dgIHRvIHRoZSBsaXN0LiBJIHNob3VsZCBjaGVjayB0aGF0IG9uZSB0b28uIEkmIzM5O2xsIG5lZWQgdG8gcmVhbGx5IGRpZyBpbnRvIGB0cnlfY2hhcmdlX21lbWNnYCwgdG8gdW5kZXJzdGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSB3aG9sZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfY2hhcmdlX21lbWNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0yNTU0PXZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubW0vbWVtY29udHJvbC5jLTI2NDMtXG5tbS9tZW1jb250cm9sLmM6MjY0NDpzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbm1tL21lbWNvbnRyb2wuYy0yNjQ1LVx0XHRcdCAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4tLVxubW0vbWVtY29udHJvbC5jPTI4NTM9c3RhdGljIGlubGluZSBpbnQgdHJ5X2NoYXJnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yODU4LVxubW0vbWVtY29udHJvbC5jOjI4NTk6XHRyZXR1cm4gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKTtcbm1tL21lbWNvbnRyb2wuYy0yODYwLX1cbi0tXG5tbS9tZW1jb250cm9sLmM9MzE1Mj1zdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMTU5LVxubW0vbWVtY29udHJvbC5jOjMxNjA6XHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcbm1tL21lbWNvbnRyb2wuYy0zMTYxLVx0aWYgKHJldClcbi0tXG5tbS9tZW1jb250cm9sLmM9NTIwMD1zdGF0aWMgaW50IGNoYXJnZV9tZW1jZyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTUyMDgtXHRpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpXG5tbS9tZW1jb250cm9sLmM6NTIwOTpcdFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xubW0vbWVtY29udHJvbC5jLTUyMTAtXHRpZiAocmV0KSB7XG4tLVxubW0vbWVtY29udHJvbC5jPTU2MjA9Ym9vbCBtZW1fY2dyb3VwX3NrX2NoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTYyNy1cbm1tL21lbWNvbnRyb2wuYzo1NjI4Olx0aWYgKHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcykgPT0gMCkge1xubW0vbWVtY29udHJvbC5jLTU2MjktXHRcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU09DSywgbnJfcGFnZXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzM5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIE1lbW9yeSBDb250cm9sIC0gQSBRdWljayBEaWFnbm9zdGljKioKCk9rYXksIHNvIGB0cnlfY2hhcmdlX21lbWNnYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgbWVhbmluZyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vd+KAlGxpbWl0cyB0aGUgc2NvcGUgb2Ygd2hlcmUgaXQgY291bGQgYmUgY2F1c2luZyBpc3N1ZXMgaWYgdGhlcmUgd2VyZSBhIHByb2JsZW0uIE5vdywgYGRyYWluX2FsbF9zdG9ja2AgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgdmlzaWJsZSBvdXRzaWRlIG9mIGl0cyBjb21waWxhdGlvbiB1bml0LCBtZWFuaW5nIGl0IGNvdWxkIGJlIGNhbGxlZCBmcm9tIGFueXdoZXJlLiBUaGF0IHJhaXNlcyBteSBleWVicm93cyBhIGJpdC4KCkdpdmVuIHRoYXQsIG15IG5leHQgc3RlcCBpcyBjbGVhcjogbGV0JiMzOTtzIGRpdmUgaW50byBgbW0vbWVtY29udHJvbC12MS5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBkcmFpbl9hbGxfc3RvY2tgLiBOZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgZnVuY3Rpb24gd29ya3MgYW5kIGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIG1lbW9yeSBjb250cm9sIHN5c3RlbSwgZXNwZWNpYWxseSBzaW5jZSBpdCYjMzk7cyBnb3Qgc3VjaCBicm9hZCB2aXNpYmlsaXR5LiBUaW1lIHRvIGRpc3NlY3QgdGhhdCBjb2RlIGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcmFpbl9hbGxfc3RvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLXYxLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC12MS5jPTE3NzE9c3RhdGljIGludCBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xODEwLVx0XHRpZiAoIWRyYWluZWQpIHtcbm1tL21lbWNvbnRyb2wtdjEuYzoxODExOlx0XHRcdGRyYWluX2FsbF9zdG9jayhtZW1jZyk7XG5tbS9tZW1jb250cm9sLXYxLmMtMTgxMi1cdFx0XHRkcmFpbmVkID0gdHJ1ZTtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MTgzND1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xODQwLVxubW0vbWVtY29udHJvbC12MS5jOjE4NDE6XHRkcmFpbl9hbGxfc3RvY2sobWVtY2cpO1xubW0vbWVtY29udHJvbC12MS5jLTE4NDItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMzAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIFN0b2NrIE1hbmFnZW1lbnQgTWV0aG9kcyoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4gVGhlIGBkcmFpbl9hbGxfc3RvY2tgIGZ1bmN0aW9uIGlzbiYjMzk7dCBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IHNwYXJrcyBhIGZldyBxdWVzdGlvbnMuIEdpdmVuIHRoYXQsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBtZW1vcnktcmVsYXRlZCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIGBtZW1vcnlfaGlnaF93cml0ZWAgYW5kIGBtZW1vcnlfbWF4X3dyaXRlYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBub24tc3RhdGljIG5hdHVyZSBvZiB0aGUgZnVuY3Rpb24gZG9lc24mIzM5O3QgY3JlYXRlIGFueSB1bmV4cGVjdGVkIGlzc3VlcyB3aGVuIG1hbmFnaW5nIGhpZ2ggbWVtb3J5IHNpdHVhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjYWxsIHRvIGBkcmFpbl9hbGxfc3RvY2tgIGlzIHBvdGVudGlhbGx5IGdvaW5nIHRvIHdyaXRlIG1vcmUgdG8gbWVtb3J5IHRoYW4gaW50ZW5kZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW9yeV9oaWdoX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz00ODMxPXN0YXRpYyBpbnQgbWVtb3J5X2hpZ2hfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ4MzYtXG5tbS9tZW1jb250cm9sLmM6NDgzNzpzdGF0aWMgc3NpemVfdCBtZW1vcnlfaGlnaF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG5tbS9tZW1jb250cm9sLmMtNDgzOC1cdFx0XHRcdCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG4tLVxubW0vbWVtY29udHJvbC5jPTUwODU9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTUxMTQtXHRcdC5zZXFfc2hvdyA9IG1lbW9yeV9oaWdoX3Nob3csXG5tbS9tZW1jb250cm9sLmM6NTExNTpcdFx0LndyaXRlID0gbWVtb3J5X2hpZ2hfd3JpdGUsXG5tbS9tZW1jb250cm9sLmMtNTExNi1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkNncm91cCBGaWxlIFdyaXRlIENhbGxiYWNrczogQ29uc2lkZXJhdGlvbnMgJmFtcDsgSW1wbGljYXRpb25zKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gdGhlc2UgY2dyb3VwIGZpbGUgd3JpdGUgY2FsbGJhY2tzLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIG1lY2hhbmljcyBvZiB0aGVzZSB3cml0ZXMuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZWlyIGltcGxpY2F0aW9ucywgdGhlaXIgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIFRoZSBmbG93IGlzIGNyaXRpY2FsLCBuYXR1cmFsbHkuIFdoZXJlIGFyZSB3ZSBnZXR0aW5nIHRoZXNlIGNhbGxiYWNrcz8gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gQW5kIG1vc3QgaW1wb3J0YW50bHksIGhvdyYjMzk7cyBpdCBhZmZlY3QgdGhlIHN5c3RlbSYjMzk7cyBvdmVyYWxsIGhlYWx0aD8KCkJ1dCB0aGF0IHRob3VnaHQgaXMgcXVpY2tseSBmb2xsb3dlZCBieSBhbm90aGVyOiAqKmBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCoqLiBUaGF0IGZ1bmN0aW9uLi4uIGl0JiMzOTtzIHBpdm90YWwsIGlzbiYjMzk7dCBpdD8gSG93IGRvZXMgdGhpcyBzZXQgb2Ygd3JpdGUgY2FsbGJhY2tzIGludGVyYWN0IHdpdGggdGhlIG1lbW9yeSBjZ3JvdXAmIzM5O3MgQ1NTIG9mZmxpbmluZyBwcm9jZXNzPyBJcyB0aGVyZSBhIHJhY2UgY29uZGl0aW9uIGNvbmNlcm4/IERvZXMgdGhpcyBjYWxsYmFjayBwYXRoIGhhdmUgYW55IGRlcGVuZGVuY2llcyBvbiBvciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgb2ZmbGluaW5nIHByb2NlZHVyZSwgYW5kIGNvbnZlcnNlbHk/IEtub3dpbmcgdGhpcyBpcyBnb2luZyB0byBiZSBrZXkgdG8gbWFraW5nIHN1cmUgdGhhdCB0aGVzZSB3cml0ZXMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IGludHJvZHVjZSBhIG5ldyBidWcsIG9yIGV4YWNlcmJhdGUgYW4gZXhpc3Rpbmcgb25lLiBUaGF0IGludGVyYWN0aW9uIGNvdWxkIGJlIGRlbGljYXRlLCBhbmQgaWYgSSYjMzk7bSBub3QgY2FyZWZ1bCwgSSBjb3VsZCBpbnRyb2R1Y2Ugc29tZSBzZXJpb3VzbHkgbmFzdHkgbWVtb3J5IGNvcnJ1cHRpb24sIG9yIHdvcnNlLCBhIHN5c3RlbSBjcmFzaC4gTmVlZCB0byBkaWcgaW50byB0aGF0IHJlbGF0aW9uc2hpcCBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX2Nzc19vZmZsaW5lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0yMjgxPXN0YXRpYyBib29sIGlzX21lbWNnX2RyYWluX25lZWRlZChzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwICpzdG9jayxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjI5NS1cdFx0ICogQW4gZW1wdHkgc2xvdCBzdGlsbCBwaW5zIGEgY3NzIHJlZmVyZW5jZSB3aGljaFxubW0vbWVtY29udHJvbC5jOjIyOTY6XHRcdCAqIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoKSByZWxpZXMgb24gZHJhaW5fYWxsX3N0b2NrKClcbm1tL21lbWNvbnRyb2wuYy0yMjk3LVx0XHQgKiB0byByZWxlYXNlLlxuLS1cbm1tL21lbWNvbnRyb2wuYz00MjcwPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQzNDYtXG5tbS9tZW1jb250cm9sLmM6NDM0NzpzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG5tbS9tZW1jb250cm9sLmMtNDM0OC17XG4tLVxubW0vbWVtY29udHJvbC5jPTUxNTk9c3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MTYxLVx0LmNzc19vbmxpbmUgPSBtZW1fY2dyb3VwX2Nzc19vbmxpbmUsXG5tbS9tZW1jb250cm9sLmM6NTE2MjpcdC5jc3Nfb2ZmbGluZSA9IG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUsXG5tbS9tZW1jb250cm9sLmMtNTE2My1cdC5jc3NfcmVsZWFzZWQgPSBtZW1fY2dyb3VwX2Nzc19yZWxlYXNlZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMyNgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgYXMgYSBQb3RlbnRpYWwgRm9jdXMgU3ltYm9sKioKCkFscmlnaHQsIHNvIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCBpcyBhIHN0YXRpYyB0aGluZywgbm90IHNvbWV0aGluZyB0aGF0IGNoYW5nZXMgZHluYW1pY2FsbHkuIFRoYXQgbWFrZXMgaXQgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIHVzZSBhcyBhIGBGb2N1c1N5bWJvbGAgZm9yIG9wdGltaXphdGlvbi4gSXQmIzM5O3MgYSBrZXkgcG9pbnQgb2YgcmVmZXJlbmNlLCBhIHN0YWJsZSBtYXJrZXIgd2l0aGluIHRoZSBtZW1vcnkgY2dyb3VwIHN1YnN5c3RlbS4gTm93LCB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLCB0aGUgYGRyYWluX2FsbF9zdG9ja2AgZnVuY3Rpb24gc2VlbXMgbGlrZSBhIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGV4YW1pbmUgaW4gbW9yZSBkZXRhaWwuIEl0JiMzOTtzIHByb2JhYmx5IHRpZWQgY2xvc2VseSB0byB0aGUgbGlmZWN5Y2xlIG9yIGhhbmRsaW5nIG9mIHJlc291cmNlcyByZWxhdGVkIHRvIHRoaXMgb2ZmbGluZSBwcm9jZXNzLgoKT2YgY291cnNlLCBiZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgc2hvdWxkIGNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBjYW4mIzM5O3QgcHJvY2VlZCBtZWFuaW5nZnVsbHkgaWYgbWVtb3J5IGNncm91cHMgYXJlbiYjMzk7dCBldmVuIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBidWlsZC4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHByZXJlcXVpc2l0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDY4PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDc3LVxuaW5pdC9LY29uZmlnOjEwNzg6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA3OS1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA4Ni1cbmluaXQvS2NvbmZpZzoxMDg3OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA4OC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5My1cbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTEwOTUtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDAtXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTAyLVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MzMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIGBkcmFpbl9hbGxfc3RvY2tgIGluIFJlbGF0aW9uIHRvIGBDT05GSUdfTUVNQ0dgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgQ09ORklHX01FTUNHYCByaWdodCBub3cuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFuZCB0aGUgZnVuY3Rpb24gYGRyYWluX2FsbF9zdG9ja2AuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGRyYWluX2FsbF9zdG9ja2AgaXMgYSBzeW1ib2wgdGhhdCYjMzk7cyBleHBvcnRlZCwgYWNjZXNzaWJsZSBvdXRzaWRlIG9mIGl0cyBpbW1lZGlhdGUgY29tcGlsYXRpb24gdW5pdCwgb3IgaWYgaXQgaXMgaW5zdGVhZCBkZWNsYXJlZCBhcyBub24tc3RhdGljLCB3aGljaCB3b3VsZCBvZmZlciBzaW1pbGFyIGJ1dCBsaW1pdGVkIGZ1bmN0aW9uYWxpdHkgYW5kIHZpc2liaWxpdHkuIFVuZGVyc3RhbmRpbmcgdGhpcyBjb25uZWN0aW9uIGlzIGtleSB0byBwcm9wZXJseSBhbmFseXppbmcgaXRzIGJlaGF2aW9yIHdpdGhpbiB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipkcmFpbl9hbGxfc3RvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDQ4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBxdWljayBtZW50YWwgc2NhbiwgdGFpbG9yZWQgZm9yIHNvbWVvbmUgd2hvIHVuZGVyc3RhbmRzIHRoZXNlIGtlcm5lbCBpbnRlcm5hbHMgYXMgd2VsbCBhcyBJIGRvOgoKKipBbmFseXppbmcgS2VybmVsIE1lbW9yeSBBY2NvdW50aW5nKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBpdCYjMzk7cyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IHNvbWV0aGluZyBpc24mIzM5O3QgZXhwb3J0ZWQsIHdoaWNoIGlzIGEga2V5IG9ic2VydmF0aW9uLiBUaGUgZnVuY3Rpb24gaXMgKm5vdCogc3RhdGljLCB3aGljaCBydWxlcyBvdXQgb25lIGNsYXNzIG9mIHZpc2liaWxpdHkgaXNzdWVzLiBUaGF0IG1ha2VzIHRoaW5ncyBzb21ld2hhdCBpbnRlcmVzdGluZzsgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGZyb20gaWYgaXQmIzM5O3Mgbm90IGV4cG9ydGVkLgoKSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGlmIHRoZXJlIGFyZSAqb3RoZXIqIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwcm9jZXNzLiBJJiMzOTttIG1vdmluZyBvbiB0byBjb25zaWRlciB0aGUgc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIGNvbnRleHQuCgpgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgYW5kIGBtZW1vcnlfaGlnaF93cml0ZWAgYXJlIGJvdGggc3RhdGljLCBidXQgdGhleSYjMzk7cmUgY2FsbGJhY2tzLCB3aGljaCBtZWFucyB0aGVpciB2aXNpYmlsaXR5IGFuZCB1c2UgYXJlIHRpZ2h0bHkgY29udHJvbGxlZCB3aXRoaW4gYSBzcGVjaWZpYyBmcmFtZXdvcmsuIFRob3NlIHN0YXRpYyBjYWxsYmFja3MgaGF2ZSBhIHNwZWNpZmljIHB1cnBvc2UuCgpgdHJ5X2NoYXJnZV9tZW1jZ2AgaXMgYWxzbyBzdGF0aWMsIHdoaWNoIHByb2JhYmx5IG1lYW5zIGl0JiMzOTtzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiwgbm90IGludGVuZGVkIGZvciBnZW5lcmFsIHVzZSBvdXRzaWRlIGl0cyBtb2R1bGUuCgpGaW5hbGx5LCBgbWVtX2Nncm91cF9za19jaGFyZ2VgIGlzICpub3QqIHN0YXRpYy4gVGhpcyBpcyBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSB1c2VkIG91dHNpZGUgb2YgdGhlIG1vZHVsZS4gU28sIHRoZSBsYWNrIG9mIHN0YXRpYyBzY29waW5nIGFuZCB0aGUgbm9uLWV4cG9ydGVkIGF0dHJpYnV0ZSBvZiB0aGUgZmlyc3QgZnVuY3Rpb24gYXJlIHdvcnRoIGludmVzdGlnYXRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfc2tfY2hhcmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz01NTk1PXZvaWQgbWVtX2Nncm91cF9za19pbmhlcml0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NjExLS8qKlxubW0vbWVtY29udHJvbC5jOjU2MTI6ICogbWVtX2Nncm91cF9za19jaGFyZ2UgLSBjaGFyZ2Ugc29ja2V0IG1lbW9yeVxubW0vbWVtY29udHJvbC5jLTU2MTMtICogQHNrOiBzb2NrZXQgaW4gbWVtY2cgdG8gY2hhcmdlXG4tLVxubW0vbWVtY29udHJvbC5jLTU2MTktICovXG5tbS9tZW1jb250cm9sLmM6NTYyMDpib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxubW0vbWVtY29udHJvbC5jLTU2MjEtXHRcdFx0ICBnZnBfdCBnZnBfbWFzaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYzMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBNZW1vcnkgQWNjb3VudGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nLCBhbmQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCBpcyBkZWZpbml0ZWx5IHN0YW5kaW5nIG91dCBhcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGEgY2xlYXIgRm9jdXNTeW1ib2wgZm9yIHRoaXMgaW52ZXN0aWdhdGlvbi4gQnV0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJIHdvbmRlciwgd2hhdCBhYm91dCBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgPyBUaGF0IGxvb2tzIHN0YXRpYywgd2hpY2ggdXN1YWxseSBtZWFucyBpdCYjMzk7cyBhIHBpZWNlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGluIHRoZSBiaWdnZXIgcGljdHVyZSwgc28gbGV0JiMzOTtzIGtlZXAgdGhhdCBpbiBtaW5kLiBBbmQgd2hpbGUgSSYjMzk7bSBhdCBpdCwgYGNoYXJnZV9tZW1jZ2AgaXMgYWxzbyBzdGF0aWMsIHNvIHRoZXkgYm90aCBkZXNlcnZlIGEgbG9vay4gQmVzdCBzdGFydCB3aXRoIHRoZSBrbm93biwgc28gbGV0JiMzOTtzIGNoZWNrIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAsIHF1aWNrbHkgcmVmZXJlbmNpbmcgYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYC4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSB0aGUgZGVmaW5pdGlvbnMgYW5kIGNvbnRleHQgSSBuZWVkIHRvIGtpY2sgb2ZmIHRoaXMgZGVlcCBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX3NrX2NoYXJnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE2MzM9dm9pZCBtZW1fY2dyb3VwX3NrX2luaGVyaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTYzNDpib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTYzNS1cdFx0XHQgIGdmcF90IGdmcF9tYXNrKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNjkzPXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3NrX2luaGVyaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTY5Ni1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE2OTc6c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2OTgtXHRcdFx0XHRcdHVuc2lnbmVkIGludCBucl9wYWdlcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxNjkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipGb2N1c2luZyBvbiBNZW1vcnkgQWNjb3VudGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgbWVtb3J5IGFjY291bnRpbmcgd2l0aGluIGNncm91cHMuIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgaXMgYSBzb2xpZCBpbmRpY2F0b3IsIGEgc3Ryb25nIEZvY3VzU3ltYm9sLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgcG9zaXRpdmUuIEJ1dC4uLiBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGBtZW1fY2dyb3VwX2NoYXJnZWAuIEl0JiMzOTtzIHJlbGF0ZWQsIGJ1dCB3YXJyYW50cyBhIGNsb3NlciBsb29rIHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGFuZCBhbnkgcG90ZW50aWFsIG92ZXJsYXBzIG9yIGRpZmZlcmVuY2VzIGluIHRoZSBtZXRyaWNzLiBUaW1lIHRvIGRpZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfY2hhcmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjI2PXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2JlbG93X21pbihzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTYzNS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjYzNjppbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTYzNy1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTYzOC0vKipcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjYzOTogKiBtZW1fY2dyb3VwX2NoYXJnZSAtIENoYXJnZSBhIG5ld2x5IGFsbG9jYXRlZCBmb2xpbyB0byBhIGNncm91cC5cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY0MC0gKiBAZm9saW86IEZvbGlvIHRvIGNoYXJnZS5cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NTEtICovXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NTI6c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NTMtXHRcdFx0XHQgICAgZ2ZwX3QgZ2ZwKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY1Ni1cdFx0cmV0dXJuIDA7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NTc6XHRyZXR1cm4gX19tZW1fY2dyb3VwX2NoYXJnZShmb2xpbywgbW0sIGdmcCk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NTgtfVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjU5LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NjYwOmludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcCk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjEtXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjY1PXZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY3MC0gKlxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NjcxOiAqIFVuY2hhcmdlIGEgZm9saW8gcHJldmlvdXNseSBjaGFyZ2VkIHdpdGggbWVtX2Nncm91cF9jaGFyZ2UoKS5cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY3Mi0gKi9cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMTQyPXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2JlbG93X21pbihzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNDctXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMTQ4OnN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTQ5LVx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNTMtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMTU0OnN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE1NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDM3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE1lbW9yeSBBY2NvdW50aW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBgX19tZW1fY2dyb3VwX2NoYXJnZWAgZmxhZ2dlZCBhcyBhIGtleSBhcmVhIG9mIGZvY3VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gUmlnaHQsIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciwgd2VsbCwgKmNoYXJnaW5nKiBtZW1vcnkgdG8gYSBjZ3JvdXAuIFRoYXQgc2VlbXMgY2VudHJhbCB0byBob3cgbWVtb3J5IGxpbWl0cyBhbmQgYWNjb3VudGluZyB3b3JrIGluIExpbnV4LiBMZXQmIzM5O3MgZGlnIGluIGFuZCBtYWtlIHN1cmUgdGhhdCBmdW5jdGlvbiBpcyBpbiBgbW0vbWVtY29udHJvbC5jYC4gWWVwLCBzZWVtcyByZWFzb25hYmxlIHRoYXQgdGhpcyBhY2NvdW50aW5nIGZ1bmN0aW9uIHdvdWxkIGxpdmUgdGhlcmUuIEFscmlnaHQsIHRpbWUgdG8gb3BlbiB1cCB0aGF0IGZpbGUgYW5kIGdldCB0byByZWFkaW5nIHRoZSBjb2RlLi4uIGxldCYjMzk7cyBzZWUgZXhhY3RseSBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcyBhbmQgd2hlcmUgaXQgZml0cyBpbiB0aGUgZ3JlYXRlciBzY2hlbWUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbnB1dHMsIG91dHB1dHMsIGFuZCBhbnkgY2FsbHMgdG8gb3RoZXIga2V5IG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gR290dGEgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgcmVsYXRlZCB0byB0aGlzLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWVtX2Nncm91cF9jaGFyZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTUyMDA9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjE5LVxubW0vbWVtY29udHJvbC5jOjUyMjA6aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcbm1tL21lbWNvbnRyb2wuYy01MjIxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MTkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQ2dyb3VwIEJ1ZyoqCgpPa2F5LCBzbyBgX19tZW1fY2dyb3VwX2NoYXJnZWAgZGVmaW5pdGVseSBzZWVtcyBsaWtlIGEga2V5IGFyZWEsIGEgZ29vZCBGb2N1c1N5bWJvbCB0byBzdGFydCB3aXRoLiBMZXQmIzM5O3MgcmV2aXNpdCBgZHJhaW5fYWxsX3N0b2NrYC4gSSByZW1lbWJlciBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAsIHdoaWNoIGlzIGEgY2dyb3VwIGNhbGxiYWNrLiBTbywgdGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gbGlrZWx5IHJlc2lkZXMgaW4gdGhlIG1lbWNnIHN0b2NrIGRyYWluaW5nIHByb2Nlc3MuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIGEgc2l0dWF0aW9uIHdoZXJlIGFuIGVtcHR5IHNsb3QgaXMgc3RpbGwgaG9sZGluZyBvbnRvIGEgQ1NTIHJlZmVyZW5jZSDigJMgaW50ZXJlc3RpbmcuIFRoZXJlZm9yZSwgYGRyYWluX2FsbF9zdG9ja2AgaXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gdG8gemVybyBpbiBvbi4gQWxzbywgdGhlIGZ1bmN0aW9ucyBgX19tZW1fY2dyb3VwX2NoYXJnZWAgYW5kIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgYXJlIGVxdWFsbHkgc3VpdGFibGUgdGFyZ2V0cyBmb3IgZnV6emluZy4gSG1tLCB3aGF0IGFib3V0IGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCBpdHNlbGY/IEl0JiMzOTtzIHN0YXRpYywgd2hpY2ggaXMgYSBiaXQgb2YgYSB3cmlua2xlLCBidXQgaXQmIzM5O3MgKnRoZSogY2FsbGJhY2sgZm9yIGBjc3Nfb2ZmbGluZWAsIHNvIGRlZmluaXRlbHkgcmVsZXZhbnQuIEFueSBvdGhlciBjYW5kaWRhdGVzPyBPaCwgcmlnaHQsIGBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5YCBpbiBgbW0vbWVtY29udHJvbC12MS5jYC4gSSBzaG91bGQgYWRkIHRoYXQgb25lIHRvIHRoZSBsaXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX2ZvcmNlX2VtcHR5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC12MS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wtdjEuYz0xNzcxPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9yZXNpemVfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTgzMy0gKi9cbm1tL21lbWNvbnRyb2wtdjEuYzoxODM0OnN0YXRpYyBpbnQgbWVtX2Nncm91cF9mb3JjZV9lbXB0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9tZW1jb250cm9sLXYxLmMtMTgzNS17XG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE4NTktXG5tbS9tZW1jb250cm9sLXYxLmM6MTg2MDpzdGF0aWMgc3NpemVfdCBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5X3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbm1tL21lbWNvbnRyb2wtdjEuYy0xODYxLVx0XHRcdFx0XHQgICAgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xODY3LVx0XHRyZXR1cm4gLUVJTlZBTDtcbm1tL21lbWNvbnRyb2wtdjEuYzoxODY4Olx0cmV0dXJuIG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHkobWVtY2cpID86IG5ieXRlcztcbm1tL21lbWNvbnRyb2wtdjEuYy0xODY5LX1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MjM3Nz1zdHJ1Y3QgY2Z0eXBlIG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5jLTI0MTEtXHRcdC5uYW1lID0gXCYjMzQ7Zm9yY2VfZW1wdHlcJiMzNDssXG5tbS9tZW1jb250cm9sLXYxLmM6MjQxMjpcdFx0LndyaXRlID0gbWVtX2Nncm91cF9mb3JjZV9lbXB0eV93cml0ZSxcbm1tL21lbWNvbnRyb2wtdjEuYy0yNDEzLVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyNzEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE1lbW9yeSBDb250cm9sIFBhdGNoKioKCk9rYXksIHRoaXMgbG9va3MgbGlrZSBhIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIGFyZWEgZm9yIGZ1enppbmcuIFRoZSBjb2RlJiMzOTtzIGEgYml0IHN0YXRpYywgYnV0IEkmIzM5O3ZlIGdvdCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O20gdGhpbmtpbmcgYGRyYWluX2FsbF9zdG9ja2AsIGBfX21lbV9jZ3JvdXBfY2hhcmdlYCwgYW5kIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgYXJlIGFsbCBzb2xpZCBmb2N1cyBzeW1ib2xzIGhlcmUuIExldCYjMzk7cyBzZWUuLi4gYGRyYWluX2FsbF9zdG9ja2AgaXNuJiMzOTt0IGV4cG9ydGVkLCB3aGljaCBpcyBhIHNoYW1lLCBidXQgaXQgKmlzKiBub24tc3RhdGljLCBzbyB0aGVyZSYjMzk7cyBob3BlLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGZpbmQgdGhlIGVudHJ5cG9pbnQgaW4gYW4gZXhwb3J0ZWQgZnVuY3Rpb24uCgpOb3csIGlzIHRoZXJlIGFueXRoaW5nIGVsc2UgZXhwb3J0ZWQgb3Igbm9uLXN0YXRpYyB0aGF0IGNhbGxzIGBkcmFpbl9hbGxfc3RvY2tgIGRpcmVjdGx5PyBOZWVkIHRvIGZvbGxvdyB0aGUgY2FsbCBncmFwaCwgc2VlIGlmIHRoZXJlJiMzOTtzIGFueSB3YXkgdG8gdHJpZ2dlciBpdCBleHRlcm5hbGx5LiBBaCwgaGVyZSYjMzk7cyBhIGdvb2QgbGVhZDogYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgLiBUaGF0JiMzOTtzIGEgY2FsbGJhY2ssIHNvIGl0JiMzOTtzIGluaXRpYXRlZCBieSB0aGUgY2dyb3VwIGNvcmUuIFRoYXQmIzM5O3MgZ29vZCwgdGhhdCBtZWFucyBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGNoZWNraW5nLgoKVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgaG93IG1lbW9yeSBjZ3JvdXAgc3RvY2sgZHJhaW5pbmcgd29ya3MuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGFyZWEgZm9yIGZ1enppbmc7IG1lbW9yeSBtYW5hZ2VtZW50IGJ1Z3MgYXJlIGFsd2F5cyB0cmlja3kuIFRoZSBwYXRjaCBpcyBwcm9iYWJseSBnb2luZyB0byBiZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBzdG9jayBkcmFpbmluZywgc28gSSYjMzk7bSB0aGlua2luZyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGBNRU1DR2AgY29uZmlndXJhdGlvbiBpcywgb2YgY291cnNlLCBhIHByZXJlcXVpc2l0ZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYGlzX21lbWNnX2RyYWluX25lZWRlZGAgZnVuY3Rpb24gaW4gYG1tL21lbWNvbnRyb2wuY2AuIEdvdHRhIGJlIHRob3JvdWdoIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc19tZW1jZ19kcmFpbl9uZWVkZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTIyMjI9c3RhdGljIHZvaWQgcmVmaWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yMjgwLVxubW0vbWVtY29udHJvbC5jOjIyODE6c3RhdGljIGJvb2wgaXNfbWVtY2dfZHJhaW5fbmVlZGVkKHN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrLFxubW0vbWVtY29udHJvbC5jLTIyODItXHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yMzI1PXZvaWQgZHJhaW5fYWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yMzQ0LVx0XHRpZiAoIXRlc3RfYml0KEZMVVNISU5HX0NBQ0hFRF9DSEFSR0UsIFx1MDAyNm1lbWNnX3N0LVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbm1tL21lbWNvbnRyb2wuYzoyMzQ1Olx0XHQgICAgaXNfbWVtY2dfZHJhaW5fbmVlZGVkKG1lbWNnX3N0LCByb290X21lbWNnKSBcdTAwMjZcdTAwMjZcbm1tL21lbWNvbnRyb2wuYy0yMzQ2LVx0XHQgICAgIXRlc3RfYW5kX3NldF9iaXQoRkxVU0hJTkdfQ0FDSEVEX0NIQVJHRSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMjQKCQkJCQkJCW91dHB1dDogMTI5CgkJCQkJCQl0aG91Z2h0czogMTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lbWNnIFN0b2NrIERyYWluaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgZnVuY3Rpb24gYGlzX21lbWNnX2RyYWluX25lZWRlZGAgaXMgc3RhdGljLCB3aGljaCBpcyBhIGtleSBkZXRhaWwgZm9yIHNjb3BpbmcgYW5kIHBvdGVudGlhbCBpbmxpbmluZyBjb25zaWRlcmF0aW9ucy4gYGRyYWluX2FsbF9zdG9ja2AsIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBub24tc3RhdGljLCBpbXBseWluZyBpdCBtaWdodCBiZSBjYWxsZWQgZnJvbSBhIHdpZGVyIHJhbmdlIG9mIGNvZGUgb3IgaGF2ZSBicm9hZGVyIGFjY2Vzcy4gSSBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZC4KCk15IGZvY3VzIGlzIGZpcm1seSBvbiBgZHJhaW5fYWxsX3N0b2NrYCwgYF9fbWVtX2Nncm91cF9jaGFyZ2VgLCBhbmQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCAtLSB0aG9zZSBhcmUgbXkgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyBpbiB0aGlzIGNvbnRleHQuIFRoZXkmIzM5O3JlIHdoZXJlIHRoZSBjb3JlIHdvcmsgaXMgaGFwcGVuaW5nLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBzdG9jayBkcmFpbmluZy4KClRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXMgYSAqZnVuY3Rpb25hbCBjaGFuZ2UqIHRvIGhvdyBtZW1jZyBzdG9jayBkcmFpbmluZyB3b3Jrcy4gVGhlIGNoYW5nZSBzZWVtcyByZWxhdGl2ZWx5IHRhcmdldGVkLCBtb2RpZnlpbmcgYSBjb25kaXRpb24gd2l0aGluIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgLiBSZW1vdmluZyB0aGUgYHN0b2NrLSZndDtucl9wYWdlc1tpXWAgY2hlY2sgaXMgc2lnbmlmaWNhbnQuIFRoZSBpbnRlbnQgaXMgY2xlYXI6IHRvIGVuc3VyZSAqZW1wdHkqIHN0b2NrIHNsb3RzIGFsc28gdHJpZ2dlciBhIGRyYWluLiBQcmV2aW91c2x5LCBlbXB0eSBzbG90cyBtaWdodCBub3QgaGF2ZSB0cmlnZ2VyZWQgaXQsIHNvIGl0JiMzOTtzIGEgZGVwYXJ0dXJlIGZyb20gdGhlIHByaW9yIGJlaGF2aW91ci4gVGhlIHJlYXNvbmluZyBpbXBsaWVzIGl0JiMzOTtzIGFib3V0IHJlbGVhc2luZyBwaW5uZWQgY3NzIHJlZmVyZW5jZXMsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBhcyB0aGVzZSBhcmUgcmVsYXRlZCB0byB0aGUgbWVtb3J5IHJlc291cmNlIGFjY291bnRpbmcuCgpHaXZlbiBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgY3JpdGljYWwgYXJlYSBsaWtlIG1lbWNnIHN0b2NrIGRyYWluaW5nLCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLiBJdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgcG90ZW50aWFsIGVkZ2UgY2FzZSBpc3N1ZXMgb3IgdW5leHBlY3RlZCBjb25zZXF1ZW5jZXMgcmVsYXRlZCB0byB0aW1pbmcgb3IgY29uY3VycmVuY3kuIFRoZSBmYWN0IHRoYXQgdGhlIGNoYW5nZSBpcyBzcGVjaWZpYyB0byB0aGUgYE1FTUNHYCBjb25maWd1cmF0aW9uIGlzIGFsc28gaW1wb3J0YW50IGNvbnRleHQuIFRoaXMgbWVhbnMgaXQgb25seSBpbXBhY3RzIHN5c3RlbXMgd2l0aCBtZW1jZyBlbmFibGVkLCB3aGljaCBuYXJyb3dzIHRoZSBzY29wZSBvZiBpbnZlc3RpZ2F0aW9uLCBidXQgbm90IHRoZSBpbXBvcnRhbmNlLiBJIG5lZWQgdG8gYmVhciBpbiBtaW5kIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZHJhaW5fYWxsX3N0b2NrJiMzNDssCiAgICAmIzM0O19fbWVtX2Nncm91cF9jaGFyZ2UmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9za19jaGFyZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBmb3IgZHJhaW5pbmcgbWVtY2cgc3RvY2sgaW4gYGlzX21lbWNnX2RyYWluX25lZWRlZGAuIEl0IHJlbW92ZXMgdGhlIGNoZWNrIGZvciBgc3RvY2stXHUwMDNlbnJfcGFnZXNbaV1gIGJlaW5nIG5vbi16ZXJvLCBlbnN1cmluZyB0aGF0IGVtcHR5IHNsb3RzIHN0aWxsIHRyaWdnZXIgYSBkcmFpbiB0byByZWxlYXNlIHBpbm5lZCBjc3MgcmVmZXJlbmNlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbWNnIHN0b2NrIGRyYWluaW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RyYWluX2FsbF9zdG9jayYjMzQ7LAogICAgJiMzNDtfX21lbV9jZ3JvdXBfY2hhcmdlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc2tfY2hhcmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIGRyYWluaW5nIG1lbWNnIHN0b2NrIGluIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgLiBJdCByZW1vdmVzIHRoZSBjaGVjayBmb3IgYHN0b2NrLVx1MDAzZW5yX3BhZ2VzW2ldYCBiZWluZyBub24temVybywgZW5zdXJpbmcgdGhhdCBlbXB0eSBzbG90cyBzdGlsbCB0cmlnZ2VyIGEgZHJhaW4gdG8gcmVsZWFzZSBwaW5uZWQgY3NzIHJlZmVyZW5jZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1jZyBzdG9jayBkcmFpbmluZyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYCBpbiBgbW0vbWVtY29udHJvbC5jYCB0byBmaXggYSBsb2dpYyBidWcgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIHJlZmVyZW5jZSBjb3VudGluZy4gSXQgZW5zdXJlcyB0aGF0IGEgcGVyLUNQVSBzdG9jayBpcyBkcmFpbmVkIGV2ZW4gaWYgYG5yX3BhZ2VzYCBpcyAwLCBiZWNhdXNlIHRoZSBgbWVtY2dgIHBvaW50ZXIgaXRzZWxmIGhvbGRzIGEgY3NzIHJlZmVyZW5jZSB0aGF0IG5lZWRzIHRvIGJlIHJlbGVhc2VkLiBUaGlzIGlzIGEgZml4IGZvciBhIHJlZmVyZW5jZSBsZWFrIG9yIGEgYnVnIHByZXZlbnRpbmcgYSBjZ3JvdXAgZnJvbSBiZWluZyBvZmZsaW5lZC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gKGZvciB1c2UtYWZ0ZXItZnJlZSkgYW5kIEtNRU1MRUFLIChmb3IgbWVtb3J5IGxlYWtzKSBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBpc3N1ZXMgaW4gdGhpcyBhcmVhLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGI2YTkwMzczNjJmOGI5ZTBjMTU3YmMzZWFiN2YwYzJhOGVkNTQ4ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDAzOjI3OjM1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDE3ZGExZjQzYjdkM2IuLmI5MzFlYzE2YmI4MjkgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTIyOTEsOCAmIzQzOzIyOTEsMTIgQEAgc3RhdGljIGJvb2wgaXNfbWVtY2dfZHJhaW5fbmVlZGVkKHN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrLAogCQlpZiAoIW1lbWNnKQogCQkJY29udGludWU7CiAKLQkJaWYgKFJFQURfT05DRShzdG9jay0mZ3Q7bnJfcGFnZXNbaV0pICZhbXA7JmFtcDsKLQkJICAgIG1lbV9jZ3JvdXBfaXNfZGVzY2VuZGFudChtZW1jZywgcm9vdF9tZW1jZykpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBbiBlbXB0eSBzbG90IHN0aWxsIHBpbnMgYSBjc3MgcmVmZXJlbmNlIHdoaWNoCiYjNDM7CQkgKiBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKCkgcmVsaWVzIG9uIGRyYWluX2FsbF9zdG9jaygpCiYjNDM7CQkgKiB0byByZWxlYXNlLgomIzQzOwkJICovCiYjNDM7CQlpZiAobWVtX2Nncm91cF9pc19kZXNjZW5kYW50KG1lbWNnLCByb290X21lbWNnKSkgewogCQkJZmx1c2ggPSB0cnVlOwogCQkJYnJlYWs7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1jZyBEcmFpbiBDb25kaXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSB0aGUgcmVtb3ZhbCBvZiB0aGUgYFJFQURfT05DRShzdG9jay0mZ3Q7bnJfcGFnZXNbaV0pYCBjb25kaXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSByZWZlcmVuY2UgY291bnRpbmcgbG9naWMgYW5kIGhvdyB3ZSBoYW5kbGUgZHJhaW5pbmcgdGhlIHBlci1DUFUgY2FjaGVzIHdpdGhpbiBtZW1vcnkgY2dyb3Vwcy4KClRoZSBjb21tZW50IGl0c2VsZiBnaXZlcyBhIGdvb2QgY2x1ZS4gSXQgc2VlbXMgdGhhdCBldmVuIHdpdGggYG5yX3BhZ2VzYCBhdCB6ZXJvLCB0aGVyZSYjMzk7cyBzdGlsbCBhIENTUyByZWZlcmVuY2UgcGlubmVkLCB3aGljaCBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZSgpYCByZWxpZXMgb24gYGRyYWluX2FsbF9zdG9jaygpYCB0byByZWxlYXNlLiBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBiaWdnZXIgcGljdHVyZS4gYGlzX21lbWNnX2RyYWluX25lZWRlZGAgc2VlbXMgdG8gaXRlcmF0ZSBvdmVyIHNvbWUgYXNwZWN0IG9mIHRoZSBtZW1vcnkgY2dyb3VwIHN0b2NrLCBsaWtlbHkgYHN0b2NrLSZndDtjYWNoZWRgLCBgc3RvY2stJmd0O25yX3BhZ2VzYCwgb3IgYHN0b2NrLSZndDttZW1jZ2AuIEJ5IHJlbW92aW5nIHRoZSBjaGVjayBmb3IgemVybyBgbnJfcGFnZXNgLCB0aGUgcGF0Y2ggaXMgc2F5aW5nICYjMzQ7eWVzLCBkcmFpbiB0aGlzIHN0b2NrIGV2ZW4gaWYgaXQmIzM5O3MgY3VycmVudGx5IGhvbGRpbmcgemVybyBwYWdlcywgYmVjYXVzZSB0aGUgQ1NTIHJlZmVyZW5jZSBzdGlsbCBuZWVkcyB0byBiZSBhY2NvdW50ZWQgZm9yLiYjMzQ7CgpUaGlzIGlzLCBhbG1vc3QgY2VydGFpbmx5LCBhIGxvZ2ljIGJ1ZyBmaXggcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIHJlZmVyZW5jZSBjb3VudGluZy4gVGhlIGlzc3VlIGlzIGxpa2VseSBhIENTUyByZWZlcmVuY2UgbGVhayBvciBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9vZmZsaW5lIHNpdHVhdGlvbi4gSWYgd2UgZnJlZSB0aGUgQ1NTIHByZW1hdHVyZWx5LCBLQVNBTiBtaWdodCB0cmlnZ2VyIGEgdXNlLWFmdGVyLWZyZWUgZXJyb3IuIEJ1dCB0aGlzIGlzbiYjMzk7dCBLTVNBTiB0ZXJyaXRvcnk7IHRoZXJlJiMzOTtzIG5vIGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIEtNU0FOIHdvdWxkbiYjMzk7dCBiZSByZWxldmFudCBoZXJlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gZm9sbG93aW5nIHRoZSBsb2dpYy4gSSBzaG91bGQgZG91YmxlIGNoZWNrIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgIGluIGBtbS9tZW1jb250cm9sLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMzoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc19tZW1jZ19kcmFpbl9uZWVkZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTIyMjI9c3RhdGljIHZvaWQgcmVmaWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yMjgwLVxubW0vbWVtY29udHJvbC5jOjIyODE6c3RhdGljIGJvb2wgaXNfbWVtY2dfZHJhaW5fbmVlZGVkKHN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrLFxubW0vbWVtY29udHJvbC5jLTIyODItXHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yMzI1PXZvaWQgZHJhaW5fYWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yMzQ0LVx0XHRpZiAoIXRlc3RfYml0KEZMVVNISU5HX0NBQ0hFRF9DSEFSR0UsIFx1MDAyNm1lbWNnX3N0LVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbm1tL21lbWNvbnRyb2wuYzoyMzQ1Olx0XHQgICAgaXNfbWVtY2dfZHJhaW5fbmVlZGVkKG1lbWNnX3N0LCByb290X21lbWNnKSBcdTAwMjZcdTAwMjZcbm1tL21lbWNvbnRyb2wuYy0yMzQ2LVx0XHQgICAgIXRlc3RfYW5kX3NldF9iaXQoRkxVU0hJTkdfQ0FDSEVEX0NIQVJHRSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDM6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA0MQoJCQkJCQkJb3V0cHV0OiAxODAKCQkJCQkJCXRob3VnaHRzOiAzNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGlzX21lbWNnX2RyYWluX25lZWRlZGAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaCwgYW5kIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjb3JlIG9mIGl0IGludm9sdmVzIG1vZGlmeWluZyBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYCBpbiBgbW0vbWVtY29udHJvbC5jYC4gRXNzZW50aWFsbHksIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBhIGxvZ2ljYWwgY29ycmVjdGlvbiByZWxhdGVkIHRvIHRoZSByZWZlcmVuY2UgY291bnRpbmcgd2l0aGluIGNncm91cHMuIFRoZSBmdW5jdGlvbiBkZXRlcm1pbmVzIGlmIGEgbWVtb3J5IGNncm91cCBuZWVkcyB0byBiZSAmIzM0O2RyYWluZWQmIzM0OyDigJMgdGhhdCBpcywgaWYgd2UgbmVlZCB0byBlbnN1cmUgaXRzIHJlc291cmNlcyBhcmUgcHJvcGVybHkgYWNjb3VudGVkIGZvciBhbmQgcmVsZWFzZWQuIFRoZSBjdXJyZW50IGxvZ2ljIHdhcyBjYXVzaW5nIGlzc3VlcywgbGlrZWx5IGxlYWRpbmcgdG8gcmVmZXJlbmNlIGxlYWtzIG9yIGJsb2NraW5nIGNncm91cCBvZmZsaW5pbmcsIHdoaWNoIGlzIGEga25vd24gcHJvYmxlbSBpbiB0aGlzIGFyZWEuCgpUaGUgZ29vZCBuZXdzIGlzIHRoYXQgdGhpcyBpcyAqbm90KiBhIHZ1bG5lcmFiaWxpdHkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyBhbHdheXMgYSByZWxpZWYuIFdlIGRvbiYjMzk7dCBuZWVkIHRvIGludm9sdmUgS01TQU4gZm9yIHRoaXMuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIGFuYWx5c2lzIHdpdGggS0FTQU4gYW5kIEtNRU1MRUFLLCBhbG9uZyB3aXRoIG5vcm1hbCB0ZXN0aW5nLCBzaG91bGQgYmUgcGVyZmVjdGx5IGFkZXF1YXRlIHRvIGVuc3VyZSBjb3JyZWN0bmVzcy4KClRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMgcGF0Y2guIEl0JiMzOTtzIGEgY2xlYW4sIGZvY3VzZWQgZml4IHRoYXQgYWRkcmVzc2VzIGEgbG9naWMgZmxhdyBpbiB0aGUgY2dyb3VwIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgZG9lc24mIzM5O3QgcmVxdWlyZSB0aGUgb3ZlcmhlYWQgb2YgS01TQU4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAzOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgIGluIGBtbS9tZW1jb250cm9sLmNgIHRvIGZpeCBhIGxvZ2ljIGJ1ZyByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXAgcmVmZXJlbmNlIGNvdW50aW5nLiBJdCBlbnN1cmVzIHRoYXQgYSBwZXItQ1BVIHN0b2NrIGlzIGRyYWluZWQgZXZlbiBpZiBgbnJfcGFnZXNgIGlzIDAsIGJlY2F1c2UgdGhlIGBtZW1jZ2AgcG9pbnRlciBpdHNlbGYgaG9sZHMgYSBjc3MgcmVmZXJlbmNlIHRoYXQgbmVlZHMgdG8gYmUgcmVsZWFzZWQuIFRoaXMgaXMgYSBmaXggZm9yIGEgcmVmZXJlbmNlIGxlYWsgb3IgYSBidWcgcHJldmVudGluZyBhIGNncm91cCBmcm9tIGJlaW5nIG9mZmxpbmVkLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiAoZm9yIHVzZS1hZnRlci1mcmVlKSBhbmQgS01FTUxFQUsgKGZvciBtZW1vcnkgbGVha3MpIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGlzc3VlcyBpbiB0aGlzIGFyZWEuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGlzX21lbWNnX2RyYWluX25lZWRlZGAgaW4gYG1tL21lbWNvbnRyb2wuY2AgdG8gZml4IGEgbG9naWMgYnVnIHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cCByZWZlcmVuY2UgY291bnRpbmcuIEl0IGVuc3VyZXMgdGhhdCBhIHBlci1DUFUgc3RvY2sgaXMgZHJhaW5lZCBldmVuIGlmIGBucl9wYWdlc2AgaXMgMCwgYmVjYXVzZSB0aGUgYG1lbWNnYCBwb2ludGVyIGl0c2VsZiBob2xkcyBhIGNzcyByZWZlcmVuY2UgdGhhdCBuZWVkcyB0byBiZSByZWxlYXNlZC4gVGhpcyBpcyBhIGZpeCBmb3IgYSByZWZlcmVuY2UgbGVhayBvciBhIGJ1ZyBwcmV2ZW50aW5nIGEgY2dyb3VwIGZyb20gYmVpbmcgb2ZmbGluZWQuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIEtBU0FOIChmb3IgdXNlLWFmdGVyLWZyZWUpIGFuZCBLTUVNTEVBSyAoZm9yIG1lbW9yeSBsZWFrcykgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggaXNzdWVzIGluIHRoaXMgYXJlYS4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjI3OjM2LjgyMjYyMzg1NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzI1MzE5NTQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRyYWluX2FsbF9zdG9ja1wiLFxuICAgIFwiX19tZW1fY2dyb3VwX2NoYXJnZVwiLFxuICAgIFwibWVtX2Nncm91cF9za19jaGFyZ2VcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgIGluIGBtbS9tZW1jb250cm9sLmNgIHRvIGZpeCBhIGxvZ2ljIGJ1ZyByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXAgcmVmZXJlbmNlIGNvdW50aW5nLiBJdCBlbnN1cmVzIHRoYXQgYSBwZXItQ1BVIHN0b2NrIGlzIGRyYWluZWQgZXZlbiBpZiBgbnJfcGFnZXNgIGlzIDAsIGJlY2F1c2UgdGhlIGBtZW1jZ2AgcG9pbnRlciBpdHNlbGYgaG9sZHMgYSBjc3MgcmVmZXJlbmNlIHRoYXQgbmVlZHMgdG8gYmUgcmVsZWFzZWQuIFRoaXMgaXMgYSBmaXggZm9yIGEgcmVmZXJlbmNlIGxlYWsgb3IgYSBidWcgcHJldmVudGluZyBhIGNncm91cCBmcm9tIGJlaW5nIG9mZmxpbmVkLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiAoZm9yIHVzZS1hZnRlci1mcmVlKSBhbmQgS01FTUxFQUsgKGZvciBtZW1vcnkgbGVha3MpIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGlzc3VlcyBpbiB0aGlzIGFyZWEuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIGRyYWluaW5nIG1lbWNnIHN0b2NrIGluIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgLiBJdCByZW1vdmVzIHRoZSBjaGVjayBmb3IgYHN0b2NrLVxcdTAwM2Vucl9wYWdlc1tpXWAgYmVpbmcgbm9uLXplcm8sIGVuc3VyaW5nIHRoYXQgZW1wdHkgc2xvdHMgc3RpbGwgdHJpZ2dlciBhIGRyYWluIHRvIHJlbGVhc2UgcGlubmVkIGNzcyByZWZlcmVuY2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtY2cgc3RvY2sgZHJhaW5pbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjI3OjM2LjgyMjYzMDU4NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2MDYzMDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGI2YTkwMzczNjJmOGI5ZTBjMTU3YmMzZWFiN2YwYzJhOGVkNTQ4ZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwMzoyNzozNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCAxN2RhMWY0M2I3ZDNiLi5iOTMxZWMxNmJiODI5IDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC0yMjkxLDggKzIyOTEsMTIgQEAgc3RhdGljIGJvb2wgaXNfbWVtY2dfZHJhaW5fbmVlZGVkKHN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrLFxcbiBcXHRcXHRpZiAoIW1lbWNnKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdGlmIChSRUFEX09OQ0Uoc3RvY2stXFx1MDAzZW5yX3BhZ2VzW2ldKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgbWVtX2Nncm91cF9pc19kZXNjZW5kYW50KG1lbWNnLCByb290X21lbWNnKSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBBbiBlbXB0eSBzbG90IHN0aWxsIHBpbnMgYSBjc3MgcmVmZXJlbmNlIHdoaWNoXFxuK1xcdFxcdCAqIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoKSByZWxpZXMgb24gZHJhaW5fYWxsX3N0b2NrKClcXG4rXFx0XFx0ICogdG8gcmVsZWFzZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChtZW1fY2dyb3VwX2lzX2Rlc2NlbmRhbnQobWVtY2csIHJvb3RfbWVtY2cpKSB7XFxuIFxcdFxcdFxcdGZsdXNoID0gdHJ1ZTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjc6MzcuMjc5NDc3NDMxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODg1NDM3MDg0MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkcmFpbl9hbGxfc3RvY2tcIixcbiAgICBcIl9fbWVtX2Nncm91cF9jaGFyZ2VcIixcbiAgICBcIm1lbV9jZ3JvdXBfc2tfY2hhcmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBmb3IgZHJhaW5pbmcgbWVtY2cgc3RvY2sgaW4gYGlzX21lbWNnX2RyYWluX25lZWRlZGAuIEl0IHJlbW92ZXMgdGhlIGNoZWNrIGZvciBgc3RvY2stXFx1MDAzZW5yX3BhZ2VzW2ldYCBiZWluZyBub24temVybywgZW5zdXJpbmcgdGhhdCBlbXB0eSBzbG90cyBzdGlsbCB0cmlnZ2VyIGEgZHJhaW4gdG8gcmVsZWFzZSBwaW5uZWQgY3NzIHJlZmVyZW5jZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1jZyBzdG9jayBkcmFpbmluZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGI2YTkwMzczNjJmOGI5ZTBjMTU3YmMzZWFiN2YwYzJhOGVkNTQ4ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDAzOjI3OjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxN2RhMWY0M2I3ZDNiLi5iOTMxZWMxNmJiODI5IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0yMjkxLDggKzIyOTEsMTIgQEAgc3RhdGljIGJvb2wgaXNfbWVtY2dfZHJhaW5fbmVlZGVkKHN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrLFxuIFx0XHRpZiAoIW1lbWNnKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRpZiAoUkVBRF9PTkNFKHN0b2NrLVx1MDAzZW5yX3BhZ2VzW2ldKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIG1lbV9jZ3JvdXBfaXNfZGVzY2VuZGFudChtZW1jZywgcm9vdF9tZW1jZykpIHtcbitcdFx0LypcbitcdFx0ICogQW4gZW1wdHkgc2xvdCBzdGlsbCBwaW5zIGEgY3NzIHJlZmVyZW5jZSB3aGljaFxuK1x0XHQgKiBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKCkgcmVsaWVzIG9uIGRyYWluX2FsbF9zdG9jaygpXG4rXHRcdCAqIHRvIHJlbGVhc2UuXG4rXHRcdCAqL1xuK1x0XHRpZiAobWVtX2Nncm91cF9pc19kZXNjZW5kYW50KG1lbWNnLCByb290X21lbWNnKSkge1xuIFx0XHRcdGZsdXNoID0gdHJ1ZTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjc6MzcuMjc5NDc4ODcxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2NDYyODc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyBhIE1lbWNnIFBhdGNoKipcblxuQWxyaWdodCwgSSBzZWUgd2UgaGF2ZSBhIHBhdGNoIHRvdWNoaW5nIGBtbS9tZW1jb250cm9sLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2UgaW52b2x2ZXMgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQgd2l0aGluIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgLiAgVGhlIGtleSBoZXJlIGlzIHRoYXQgYFJFQURfT05DRShzdG9jay1cdTAwM2Vucl9wYWdlc1tpXSlgIGlzIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGF0IGNvbmRpdGlvbi4gIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIGNvcmUgYWx0ZXJhdGlvbiB0byBob3cgdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIChtZW1jZykgbG9naWMgb3BlcmF0ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBkZWVtZWQgbmVjZXNzYXJ5LiBUaGUgcmVtb3ZhbCBvZiB0aGlzIGBSRUFEX09OQ0VgIHN1Z2dlc3RzIHRoZSBwYXRjaCBhdXRob3IgaXMgbGlrZWx5IG9wdGltaXppbmcsIG9yIHBvc3NpYmx5IGFkZHJlc3NpbmcgYSBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWUgcmVsYXRlZCB0byBob3cgYG5yX3BhZ2VzYCBpcyBhY2Nlc3NlZCB3aXRoaW4gdGhlIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgIGZ1bmN0aW9uLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgZHJhaW4gbG9naWMgaW4gdGhlIG1lbWNnIHN1YnN5c3RlbS4gIEkgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCB0aGUgb3JpZ2luYWwgaW50ZW50IG9mIHRoYXQgYFJFQURfT05DRWAgY2FsbCB0byB0cnVseSBhc3Nlc3MgdGhlIGltcGxpY2F0aW9ucyBhbmQgZW5zdXJlIHRoaXMgd29uJ3QgaW50cm9kdWNlIGFueSB1bmZvcmVzZWVuIHJhY2UgY29uZGl0aW9ucyBvciBkYXRhIGNvcnJ1cHRpb24uIExldCdzIGdldCBpbnRvIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA0MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjc6NDEuNjQ0MTEwODRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5MDI4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNfbWVtY2dfZHJhaW5fbmVlZGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MjIyMj1zdGF0aWMgdm9pZCByZWZpbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjI4MC1cXG5tbS9tZW1jb250cm9sLmM6MjI4MTpzdGF0aWMgYm9vbCBpc19tZW1jZ19kcmFpbl9uZWVkZWQoc3RydWN0IG1lbWNnX3N0b2NrX3BjcCAqc3RvY2ssXFxubW0vbWVtY29udHJvbC5jLTIyODItXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yMzI1PXZvaWQgZHJhaW5fYWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTIzNDQtXFx0XFx0aWYgKCF0ZXN0X2JpdChGTFVTSElOR19DQUNIRURfQ0hBUkdFLCBcXHUwMDI2bWVtY2dfc3QtXFx1MDAzZWZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbm1tL21lbWNvbnRyb2wuYzoyMzQ1OlxcdFxcdCAgICBpc19tZW1jZ19kcmFpbl9uZWVkZWQobWVtY2dfc3QsIHJvb3RfbWVtY2cpIFxcdTAwMjZcXHUwMDI2XFxubW0vbWVtY29udHJvbC5jLTIzNDYtXFx0XFx0ICAgICF0ZXN0X2FuZF9zZXRfYml0KEZMVVNISU5HX0NBQ0hFRF9DSEFSR0UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjI3OjQxLjY4OTAxOTUyOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNzQ3MTQyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IENHIERyYWluIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCBzbyBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYCBpcyBhIGZ1bmN0aW9uIHdlJ3JlIGludGVyZXN0ZWQgaW4sIGFuZCBpdCdzIGdldHRpbmcgY2FsbGVkIGJ5IGBkcmFpbl9hbGxfc3RvY2tgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBvZiBjb3Vyc2UsICp3aGVyZSogaXMgYGRyYWluX2FsbF9zdG9ja2AgYmVpbmcgY2FsbGVkPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHNpdGVzIG9mIGBkcmFpbl9hbGxfc3RvY2tgIGlzIGNydWNpYWwgdG8gbWFwcGluZyB0aGUgY29tcGxldGUgZGVwZW5kZW5jeSBjaGFpbiBhbmQgdGhlIGNpcmN1bXN0YW5jZXMgdGhhdCB0cmlnZ2VyIHRoaXMgZHJhaW5hZ2UgY2hlY2suIE5lZWQgdG8gdHJhY2UgdGhhdCBwYXRoIHRvIHNlZSBpZiBpdCBtYWtlcyBzZW5zZSBpbiB0aGUgY3VycmVudCBjb250ZXh0LiBBIGZvY3VzZWQgY2FsbCBncmFwaCBhbmFseXNpcyBpcyBwcm9iYWJseSBpbiBvcmRlciB0byBwaW5wb2ludCBldmVyeXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjYyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjc6NDUuNzYzNzM1NTI1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzU2NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRyYWluX2FsbF9zdG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTIyODE9c3RhdGljIGJvb2wgaXNfbWVtY2dfZHJhaW5fbmVlZGVkKHN0cnVjdCBtZW1jZ19zdG9ja19wY3AgKnN0b2NrLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTIyOTUtXFx0XFx0ICogQW4gZW1wdHkgc2xvdCBzdGlsbCBwaW5zIGEgY3NzIHJlZmVyZW5jZSB3aGljaFxcbm1tL21lbWNvbnRyb2wuYzoyMjk2OlxcdFxcdCAqIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoKSByZWxpZXMgb24gZHJhaW5fYWxsX3N0b2NrKClcXG5tbS9tZW1jb250cm9sLmMtMjI5Ny1cXHRcXHQgKiB0byByZWxlYXNlLlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTIzMDg9c3RhdGljIHZvaWQgc2NoZWR1bGVfZHJhaW5fd29yayhpbnQgY3B1LCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjMyNC0gKi9cXG5tbS9tZW1jb250cm9sLmM6MjMyNTp2b2lkIGRyYWluX2FsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1jZylcXG5tbS9tZW1jb250cm9sLmMtMjMyNi17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjY0ND1zdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNzI0LVxcdGlmICghZHJhaW5lZCkge1xcbm1tL21lbWNvbnRyb2wuYzoyNzI1OlxcdFxcdGRyYWluX2FsbF9zdG9jayhtZW1fb3Zlcl9saW1pdCk7XFxubW0vbWVtY29udHJvbC5jLTI3MjYtXFx0XFx0ZHJhaW5lZCA9IHRydWU7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDM0Nz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDM2OC1cXG5tbS9tZW1jb250cm9sLmM6NDM2OTpcXHRkcmFpbl9hbGxfc3RvY2sobWVtY2cpO1xcbm1tL21lbWNvbnRyb2wuYy00MzcwLVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ4Mzc9c3RhdGljIHNzaXplX3QgbWVtb3J5X2hpZ2hfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ4NzMtXFx0XFx0aWYgKCFkcmFpbmVkKSB7XFxubW0vbWVtY29udHJvbC5jOjQ4NzQ6XFx0XFx0XFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcXG5tbS9tZW1jb250cm9sLmMtNDg3NS1cXHRcXHRcXHRkcmFpbmVkID0gdHJ1ZTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00ODk2PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9tYXhfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ5MzEtXFx0XFx0aWYgKCFkcmFpbmVkKSB7XFxubW0vbWVtY29udHJvbC5jOjQ5MzI6XFx0XFx0XFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcXG5tbS9tZW1jb250cm9sLmMtNDkzMy1cXHRcXHRcXHRkcmFpbmVkID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjc6NDUuODA5MDk2ODk0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg1NzUxMzI0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgZHJhaW5fYWxsX3N0b2NrYCoqXG5cbk9rYXksIHNvIGBkcmFpbl9hbGxfc3RvY2tgIGlzIGdldHRpbmcgY2FsbGVkIGZyb20gYSBmZXcgZGlmZmVyZW50IHBsYWNlczogYHRyeV9jaGFyZ2VfbWVtY2dgLCBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAsIGBtZW1vcnlfaGlnaF93cml0ZWAsIGFuZCBgbWVtb3J5X21heF93cml0ZWAuIFRoYXQgZ2l2ZXMgbWUgYSBkZWNlbnQgb3ZlcnZpZXcgb2YgKndoZXJlKiBpdCdzIHVzZWQg4oCTIGFsbCByZWxhdGVkIHRvIG1lbW9yeSBjb250cm9sIGFuZCBjZ3JvdXBzLCBvZiBjb3Vyc2UuXG5cbk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2lkZWx5IHRoaXMgZnVuY3Rpb24gaXMgYWNjZXNzaWJsZS4gSXMgaXQgYSBtb2R1bGUtaW50ZXJuYWwgdGhpbmcsIG9yIGlzIGl0IGV4cG9zZWQgZm9yIHBvdGVudGlhbCB1c2UgZWxzZXdoZXJlPyBMZXQncyBxdWlja2x5IGNoZWNrIHdoZXRoZXIgaXQncyBkZWNsYXJlZCBgc3RhdGljYC4gQWhhLCBpdCdzICpub3QqIHN0YXRpYywgd2hpY2ggbWVhbnMgaXQncyBwb3RlbnRpYWxseSB2aXNpYmxlIG91dHNpZGUgb2YgaXRzIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhhdOKAmXMgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uXG5cbk5leHQgcXVlc3Rpb246IEV2ZW4gdGhvdWdoIGl0ICpjb3VsZCogYmUgdXNlZCBlbHNld2hlcmUsIGlzIGl0ICphY3R1YWxseSogdXNlZCBvdXRzaWRlIG9mIGBtbS9tZW1jb250cm9sLmNgPyBUaGF0IHdvdWxkIHJlZmluZSBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBpbXBhY3QgYW5kIHBvdGVudGlhbCBmb3IgcmVmYWN0b3JpbmcuIElmIGl0J3MgKm9ubHkqIHVzZWQgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLCBpdCdzIHByb2JhYmx5IHJlbGF0aXZlbHkgc2FmZSB0byBtb2RpZnksIGV2ZW4gaWYgbm90IHN0YXRpYy4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHVzYWdlIHNjb3BlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDg3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjc6NDkuNjY2NjEyNjc3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTEwMDM3NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJhaW5fYWxsX3N0b2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLXYxLmM9MTc3MT1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfcmVzaXplX21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTgxMC1cXHRcXHRpZiAoIWRyYWluZWQpIHtcXG5tbS9tZW1jb250cm9sLXYxLmM6MTgxMTpcXHRcXHRcXHRkcmFpbl9hbGxfc3RvY2sobWVtY2cpO1xcbm1tL21lbWNvbnRyb2wtdjEuYy0xODEyLVxcdFxcdFxcdGRyYWluZWQgPSB0cnVlO1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTE4MzQ9c3RhdGljIGludCBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODQwLVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxODQxOlxcdGRyYWluX2FsbF9zdG9jayhtZW1jZyk7XFxubW0vbWVtY29udHJvbC12MS5jLTE4NDItXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmgtMjAtXFxubW0vbWVtY29udHJvbC12MS5oOjIxOnZvaWQgZHJhaW5fYWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKTtcXG5tbS9tZW1jb250cm9sLXYxLmgtMjItXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjI4MT1zdGF0aWMgYm9vbCBpc19tZW1jZ19kcmFpbl9uZWVkZWQoc3RydWN0IG1lbWNnX3N0b2NrX3BjcCAqc3RvY2ssXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjI5NS1cXHRcXHQgKiBBbiBlbXB0eSBzbG90IHN0aWxsIHBpbnMgYSBjc3MgcmVmZXJlbmNlIHdoaWNoXFxubW0vbWVtY29udHJvbC5jOjIyOTY6XFx0XFx0ICogbWVtX2Nncm91cF9jc3Nfb2ZmbGluZSgpIHJlbGllcyBvbiBkcmFpbl9hbGxfc3RvY2soKVxcbm1tL21lbWNvbnRyb2wuYy0yMjk3LVxcdFxcdCAqIHRvIHJlbGVhc2UuXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjMwOD1zdGF0aWMgdm9pZCBzY2hlZHVsZV9kcmFpbl93b3JrKGludCBjcHUsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yMzI0LSAqL1xcbm1tL21lbWNvbnRyb2wuYzoyMzI1OnZvaWQgZHJhaW5fYWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKVxcbm1tL21lbWNvbnRyb2wuYy0yMzI2LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNjQ0PXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI3MjQtXFx0aWYgKCFkcmFpbmVkKSB7XFxubW0vbWVtY29udHJvbC5jOjI3MjU6XFx0XFx0ZHJhaW5fYWxsX3N0b2NrKG1lbV9vdmVyX2xpbWl0KTtcXG5tbS9tZW1jb250cm9sLmMtMjcyNi1cXHRcXHRkcmFpbmVkID0gdHJ1ZTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00MzQ3PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MzY4LVxcbm1tL21lbWNvbnRyb2wuYzo0MzY5OlxcdGRyYWluX2FsbF9zdG9jayhtZW1jZyk7XFxubW0vbWVtY29udHJvbC5jLTQzNzAtXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDgzNz1zdGF0aWMgc3NpemVfdCBtZW1vcnlfaGlnaF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDg3My1cXHRcXHRpZiAoIWRyYWluZWQpIHtcXG5tbS9tZW1jb250cm9sLmM6NDg3NDpcXHRcXHRcXHRkcmFpbl9hbGxfc3RvY2sobWVtY2cpO1xcbm1tL21lbWNvbnRyb2wuYy00ODc1LVxcdFxcdFxcdGRyYWluZWQgPSB0cnVlO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ4OTY9c3RhdGljIHNzaXplX3QgbWVtb3J5X21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDkzMS1cXHRcXHRpZiAoIWRyYWluZWQpIHtcXG5tbS9tZW1jb250cm9sLmM6NDkzMjpcXHRcXHRcXHRkcmFpbl9hbGxfc3RvY2sobWVtY2cpO1xcbm1tL21lbWNvbnRyb2wuYy00OTMzLVxcdFxcdFxcdGRyYWluZWQgPSB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyNzo1MS41Nzc2MjQyOThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTE1ODIxMDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtY2cgRHJhaW4gTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBob3cgYGRyYWluX2FsbF9zdG9ja2AgaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIG1lbW9yeSBjZ3JvdXAgc3Vic3lzdGVtLiBJJ20gc2VlaW5nIGl0J3MgY2FsbGVkIGZyb20gYSBudW1iZXIgb2YgcGxhY2VzOiBgbWVtX2Nncm91cF9yZXNpemVfbWF4YCwgYG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlgLCBgdHJ5X2NoYXJnZV9tZW1jZ2AsIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCwgYG1lbW9yeV9oaWdoX3dyaXRlYCwgYW5kIGBtZW1vcnlfbWF4X3dyaXRlYC4gQWxsIHNvbGlkbHkgbWVtY2cgZnVuY3Rpb25zLCBhcyBleHBlY3RlZC5cblxuVGhlIGNydXggb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgYGlzX21lbWNnX2RyYWluX25lZWRlZGAuIEl0IGxvb2tzIGxpa2UgaXQgbm93IGRyYWlucyB0aGUgc3RvY2sgZXZlbiBpZiBgc3RvY2stXHUwMDNlbnJfcGFnZXNbaV1gIGlzIHplcm8uIEFoLCBJIHNlZSwgdGhhdCBtYWtlcyBzZW5zZS4gVGhlIGNvbW1lbnQgc3BlY2lmaWNhbGx5IHBvaW50cyBvdXQgdGhhdCBhbiBcImVtcHR5IHNsb3Qgc3RpbGwgcGlucyBhIGNzcyByZWZlcmVuY2Ugd2hpY2ggbWVtX2Nncm91cF9jc3Nfb2ZmbGluZSgpIHJlbGllcyBvbiBkcmFpbl9hbGxfc3RvY2soKSB0byByZWxlYXNlLlwiIFNvLCB0aGlzIGlzIGEgZml4LiBXaXRob3V0IGRyYWluaW5nIHRoZSBlbXB0eSBzbG90LCBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgd291bGRuJ3QgYmUgYWJsZSB0byByZWxlYXNlIHRoZSBDU1MgcmVmZXJlbmNlLiBUaGlzIHdvdWxkIGJlIGEgc3VidGxlIGJ1dCBjcml0aWNhbCBidWcgd2hlcmUgYSBDU1MgcmVmZXJlbmNlIGhhbmdzIGFyb3VuZCBldmVuIHdoZW4gYSBwYWdlIGlzIG5vIGxvbmdlciBhc3NvY2lhdGVkIHdpdGggaXQuXG5cblRoaXMgaXMgZnVuZGFtZW50YWxseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBtZW1jZy4gVGhpcyBpcyBzb21ldGhpbmcgdGhhdCB3b3VsZCBiZSBnb29kIHRvIGZ1enogYW5kIHRlc3QgYXMgdGhlIGJlaGF2aW9yIGNvdWxkIGNhdXNlIHByb2JsZW1zIGF0IGNlcnRhaW4gdGhyZXNob2xkcywgZXNwZWNpYWxseSB3aXRoIHRoZSBjYWxscyB0byBgZHJhaW5fYWxsX3N0b2NrYC4gU2luY2UgYGRyYWluX2FsbF9zdG9ja2AgaXMgdGhlIHN1YmplY3QgaGVyZSwgSSBzaG91bGQgbWFrZSBzdXJlIGl0J3MgZnV6emVkIGFuZCB0ZXN0ZWQgd2VsbC4gSXQncyBjYWxsZWQgZnJvbSB0aG9zZSBjb3JlIGZ1bmN0aW9ucy4gYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgLCBgbWVtb3J5X2hpZ2hfd3JpdGVgLCBgbWVtb3J5X21heF93cml0ZWAsIGBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5YCwgYG1lbV9jZ3JvdXBfcmVzaXplX21heGAsIGFuZCBgdHJ5X2NoYXJnZV9tZW1jZ2AuIExldCdzIHBheSBlc3BlY2lhbGx5IGNsb3NlIGF0dGVudGlvbiB0byBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgdG8gZW5zdXJlIHRoYXQgdGhpcyBjaGFuZ2UgYWN0dWFsbHkgcmVzb2x2ZXMgdGhlIHBvdGVudGlhbCBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc1MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyNzo1Ny42OTM0NDkxMjRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDgwMjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfY3NzX29mZmxpbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0yMjgxPXN0YXRpYyBib29sIGlzX21lbWNnX2RyYWluX25lZWRlZChzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwICpzdG9jayxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yMjk1LVxcdFxcdCAqIEFuIGVtcHR5IHNsb3Qgc3RpbGwgcGlucyBhIGNzcyByZWZlcmVuY2Ugd2hpY2hcXG5tbS9tZW1jb250cm9sLmM6MjI5NjpcXHRcXHQgKiBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKCkgcmVsaWVzIG9uIGRyYWluX2FsbF9zdG9jaygpXFxubW0vbWVtY29udHJvbC5jLTIyOTctXFx0XFx0ICogdG8gcmVsZWFzZS5cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00MjcwPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDM0Ni1cXG5tbS9tZW1jb250cm9sLmM6NDM0NzpzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxubW0vbWVtY29udHJvbC5jLTQzNDgte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUxNTk9c3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTUxNjEtXFx0LmNzc19vbmxpbmUgPSBtZW1fY2dyb3VwX2Nzc19vbmxpbmUsXFxubW0vbWVtY29udHJvbC5jOjUxNjI6XFx0LmNzc19vZmZsaW5lID0gbWVtX2Nncm91cF9jc3Nfb2ZmbGluZSxcXG5tbS9tZW1jb250cm9sLmMtNTE2My1cXHQuY3NzX3JlbGVhc2VkID0gbWVtX2Nncm91cF9jc3NfcmVsZWFzZWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjI3OjU3LjczOTk0MTYwMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjExNDAxODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgQW5hbHlzaXMgb2YgTWVtb3J5IENHcm91cHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAsIHRoYXQncyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBjZ3JvdXAgc3Vic3lzdGVtLCByaWdodD8gQW5kIEkgc2VlIGBkcmFpbl9hbGxfc3RvY2tgIHdoaWNoIHJlbGllcyBvbiBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYC4gU2VlbXMgbG9naWNhbCB0byBhZGQgYGRyYWluX2FsbF9zdG9ja2AgdG8gdGhlIEZvY3VzU3ltYm9scyBsaXN0LCB0aGF0IHNlZW1zIHJlbGV2YW50IGdpdmVuIHRoZSBjb250ZXh0LlxuXG5JJ20gYWxzbyB0aGlua2luZyBhYm91dCBpbmNsdWRpbmcgYG1lbW9yeV9oaWdoX3dyaXRlYCwgYG1lbW9yeV9tYXhfd3JpdGVgLCBgbWVtX2Nncm91cF9mb3JjZV9lbXB0eWAsIGFuZCBgbWVtX2Nncm91cF9yZXNpemVfbWF4YCwgYXMgdGhleSBzZWVtIGxpa2VseSB0byBiZSBpbXBvcnRhbnQuIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gYWRkIGB0cnlfY2hhcmdlX21lbWNnYCB0byB0aGUgbGlzdC4gSSBzaG91bGQgY2hlY2sgdGhhdCBvbmUgdG9vLiBJJ2xsIG5lZWQgdG8gcmVhbGx5IGRpZyBpbnRvIGB0cnlfY2hhcmdlX21lbWNnYCwgdG8gdW5kZXJzdGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSB3aG9sZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODIzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjI4OjAxLjM1MTM0NjQ4M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2MTE4OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X2NoYXJnZV9tZW1jZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTI1NTQ9dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNjQzLVxcbm1tL21lbWNvbnRyb2wuYzoyNjQ0OnN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbm1tL21lbWNvbnRyb2wuYy0yNjQ1LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mjg1Mz1zdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjg1OC1cXG5tbS9tZW1jb250cm9sLmM6Mjg1OTpcXHRyZXR1cm4gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMjg2MC19XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzE1Mj1zdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMxNTktXFxubW0vbWVtY29udHJvbC5jOjMxNjA6XFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XFxubW0vbWVtY29udHJvbC5jLTMxNjEtXFx0aWYgKHJldClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjAwPXN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjA4LVxcdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcXG5tbS9tZW1jb250cm9sLmM6NTIwOTpcXHRcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxubW0vbWVtY29udHJvbC5jLTUyMTAtXFx0aWYgKHJldCkge1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU2MjA9Ym9vbCBtZW1fY2dyb3VwX3NrX2NoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NjI3LVxcbm1tL21lbWNvbnRyb2wuYzo1NjI4OlxcdGlmICh0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpID09IDApIHtcXG5tbS9tZW1jb250cm9sLmMtNTYyOS1cXHRcXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NPQ0ssIG5yX3BhZ2VzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjg6MDEuMzk3OTYzNTExWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTMwMDI3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBNZW1vcnkgQ29udHJvbCAtIEEgUXVpY2sgRGlhZ25vc3RpYyoqXG5cbk9rYXksIHNvIGB0cnlfY2hhcmdlX21lbWNnYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgbWVhbmluZyBpdCdzIG9ubHkgdmlzaWJsZSB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQuIFRoYXQncyBnb29kIHRvIGtub3figJRsaW1pdHMgdGhlIHNjb3BlIG9mIHdoZXJlIGl0IGNvdWxkIGJlIGNhdXNpbmcgaXNzdWVzIGlmIHRoZXJlIHdlcmUgYSBwcm9ibGVtLiBOb3csIGBkcmFpbl9hbGxfc3RvY2tgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0J3MgdmlzaWJsZSBvdXRzaWRlIG9mIGl0cyBjb21waWxhdGlvbiB1bml0LCBtZWFuaW5nIGl0IGNvdWxkIGJlIGNhbGxlZCBmcm9tIGFueXdoZXJlLiBUaGF0IHJhaXNlcyBteSBleWVicm93cyBhIGJpdC5cblxuR2l2ZW4gdGhhdCwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBsZXQncyBkaXZlIGludG8gYG1tL21lbWNvbnRyb2wtdjEuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZHJhaW5fYWxsX3N0b2NrYC4gTmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IGZ1bmN0aW9uIHdvcmtzIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBtZW1vcnkgY29udHJvbCBzeXN0ZW0sIGVzcGVjaWFsbHkgc2luY2UgaXQncyBnb3Qgc3VjaCBicm9hZCB2aXNpYmlsaXR5LiBUaW1lIHRvIGRpc3NlY3QgdGhhdCBjb2RlIGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzM5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjg6MDQuNTkwOTY5MTY1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjMxMTk2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcmFpbl9hbGxfc3RvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC12MS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuYz0xNzcxPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9yZXNpemVfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODEwLVxcdFxcdGlmICghZHJhaW5lZCkge1xcbm1tL21lbWNvbnRyb2wtdjEuYzoxODExOlxcdFxcdFxcdGRyYWluX2FsbF9zdG9jayhtZW1jZyk7XFxubW0vbWVtY29udHJvbC12MS5jLTE4MTItXFx0XFx0XFx0ZHJhaW5lZCA9IHRydWU7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MTgzND1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4NDAtXFxubW0vbWVtY29udHJvbC12MS5jOjE4NDE6XFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcXG5tbS9tZW1jb250cm9sLXYxLmMtMTg0Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjg6MDQuNjM3Mjg1MDAzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwODM0Nzc4NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBTdG9jayBNYW5hZ2VtZW50IE1ldGhvZHMqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLiBUaGUgYGRyYWluX2FsbF9zdG9ja2AgZnVuY3Rpb24gaXNuJ3Qgc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBzcGFya3MgYSBmZXcgcXVlc3Rpb25zLiBHaXZlbiB0aGF0LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgbWVtb3J5LXJlbGF0ZWQgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGBtZW1vcnlfaGlnaF93cml0ZWAgYW5kIGBtZW1vcnlfbWF4X3dyaXRlYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBub24tc3RhdGljIG5hdHVyZSBvZiB0aGUgZnVuY3Rpb24gZG9lc24ndCBjcmVhdGUgYW55IHVuZXhwZWN0ZWQgaXNzdWVzIHdoZW4gbWFuYWdpbmcgaGlnaCBtZW1vcnkgc2l0dWF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGNhbGwgdG8gYGRyYWluX2FsbF9zdG9ja2AgaXMgcG90ZW50aWFsbHkgZ29pbmcgdG8gd3JpdGUgbW9yZSB0byBtZW1vcnkgdGhhbiBpbnRlbmRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIzMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjI4OjA5LjcyMDc2NjY3MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2ODIxNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtb3J5X2hpZ2hfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz00ODMxPXN0YXRpYyBpbnQgbWVtb3J5X2hpZ2hfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDgzNi1cXG5tbS9tZW1jb250cm9sLmM6NDgzNzpzdGF0aWMgc3NpemVfdCBtZW1vcnlfaGlnaF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxubW0vbWVtY29udHJvbC5jLTQ4MzgtXFx0XFx0XFx0XFx0IGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MDg1PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIG1lbW9yeV9maWxlc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTUxMTQtXFx0XFx0LnNlcV9zaG93ID0gbWVtb3J5X2hpZ2hfc2hvdyxcXG5tbS9tZW1jb250cm9sLmM6NTExNTpcXHRcXHQud3JpdGUgPSBtZW1vcnlfaGlnaF93cml0ZSxcXG5tbS9tZW1jb250cm9sLmMtNTExNi1cXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyODowOS43Njc0NTY5MDlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA3Nzg2MjYxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipDZ3JvdXAgRmlsZSBXcml0ZSBDYWxsYmFja3M6IENvbnNpZGVyYXRpb25zIFx1MDAyNiBJbXBsaWNhdGlvbnMqKlxuXG5BbHJpZ2h0LCBJJ20gZGl2aW5nIGludG8gdGhlc2UgY2dyb3VwIGZpbGUgd3JpdGUgY2FsbGJhY2tzLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIG1lY2hhbmljcyBvZiB0aGVzZSB3cml0ZXMuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZWlyIGltcGxpY2F0aW9ucywgdGhlaXIgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIFRoZSBmbG93IGlzIGNyaXRpY2FsLCBuYXR1cmFsbHkuIFdoZXJlIGFyZSB3ZSBnZXR0aW5nIHRoZXNlIGNhbGxiYWNrcz8gV2hhdCdzIHRoZSBjb250ZXh0PyBBbmQgbW9zdCBpbXBvcnRhbnRseSwgaG93J3MgaXQgYWZmZWN0IHRoZSBzeXN0ZW0ncyBvdmVyYWxsIGhlYWx0aD9cblxuQnV0IHRoYXQgdGhvdWdodCBpcyBxdWlja2x5IGZvbGxvd2VkIGJ5IGFub3RoZXI6ICoqYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgKiouIFRoYXQgZnVuY3Rpb24uLi4gaXQncyBwaXZvdGFsLCBpc24ndCBpdD8gSG93IGRvZXMgdGhpcyBzZXQgb2Ygd3JpdGUgY2FsbGJhY2tzIGludGVyYWN0IHdpdGggdGhlIG1lbW9yeSBjZ3JvdXAncyBDU1Mgb2ZmbGluaW5nIHByb2Nlc3M/IElzIHRoZXJlIGEgcmFjZSBjb25kaXRpb24gY29uY2Vybj8gRG9lcyB0aGlzIGNhbGxiYWNrIHBhdGggaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIG9uIG9yIGludGVyYWN0aW9ucyB3aXRoIHRoZSBvZmZsaW5pbmcgcHJvY2VkdXJlLCBhbmQgY29udmVyc2VseT8gS25vd2luZyB0aGlzIGlzIGdvaW5nIHRvIGJlIGtleSB0byBtYWtpbmcgc3VyZSB0aGF0IHRoZXNlIHdyaXRlcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBpbnRyb2R1Y2UgYSBuZXcgYnVnLCBvciBleGFjZXJiYXRlIGFuIGV4aXN0aW5nIG9uZS4gVGhhdCBpbnRlcmFjdGlvbiBjb3VsZCBiZSBkZWxpY2F0ZSwgYW5kIGlmIEknbSBub3QgY2FyZWZ1bCwgSSBjb3VsZCBpbnRyb2R1Y2Ugc29tZSBzZXJpb3VzbHkgbmFzdHkgbWVtb3J5IGNvcnJ1cHRpb24sIG9yIHdvcnNlLCBhIHN5c3RlbSBjcmFzaC4gTmVlZCB0byBkaWcgaW50byB0aGF0IHJlbGF0aW9uc2hpcCBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjU4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjg6MTMuODQ1MzIzMDE3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTI5ODY3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX2Nzc19vZmZsaW5lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MjI4MT1zdGF0aWMgYm9vbCBpc19tZW1jZ19kcmFpbl9uZWVkZWQoc3RydWN0IG1lbWNnX3N0b2NrX3BjcCAqc3RvY2ssXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjI5NS1cXHRcXHQgKiBBbiBlbXB0eSBzbG90IHN0aWxsIHBpbnMgYSBjc3MgcmVmZXJlbmNlIHdoaWNoXFxubW0vbWVtY29udHJvbC5jOjIyOTY6XFx0XFx0ICogbWVtX2Nncm91cF9jc3Nfb2ZmbGluZSgpIHJlbGllcyBvbiBkcmFpbl9hbGxfc3RvY2soKVxcbm1tL21lbWNvbnRyb2wuYy0yMjk3LVxcdFxcdCAqIHRvIHJlbGVhc2UuXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDI3MD1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQzNDYtXFxubW0vbWVtY29udHJvbC5jOjQzNDc6c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbm1tL21lbWNvbnRyb2wuYy00MzQ4LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MTU5PXN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MTYxLVxcdC5jc3Nfb25saW5lID0gbWVtX2Nncm91cF9jc3Nfb25saW5lLFxcbm1tL21lbWNvbnRyb2wuYzo1MTYyOlxcdC5jc3Nfb2ZmbGluZSA9IG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUsXFxubW0vbWVtY29udHJvbC5jLTUxNjMtXFx0LmNzc19yZWxlYXNlZCA9IG1lbV9jZ3JvdXBfY3NzX3JlbGVhc2VkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyODoxMy44OTA2MjkyMzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyMzU1ODA5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQW5hbHl6aW5nIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCBhcyBhIFBvdGVudGlhbCBGb2N1cyBTeW1ib2wqKlxuXG5BbHJpZ2h0LCBzbyBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgaXMgYSBzdGF0aWMgdGhpbmcsIG5vdCBzb21ldGhpbmcgdGhhdCBjaGFuZ2VzIGR5bmFtaWNhbGx5LiBUaGF0IG1ha2VzIGl0IGEgc29saWQgY2FuZGlkYXRlIGZvciB1c2UgYXMgYSBgRm9jdXNTeW1ib2xgIGZvciBvcHRpbWl6YXRpb24uIEl0J3MgYSBrZXkgcG9pbnQgb2YgcmVmZXJlbmNlLCBhIHN0YWJsZSBtYXJrZXIgd2l0aGluIHRoZSBtZW1vcnkgY2dyb3VwIHN1YnN5c3RlbS4gTm93LCB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLCB0aGUgYGRyYWluX2FsbF9zdG9ja2AgZnVuY3Rpb24gc2VlbXMgbGlrZSBhIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGV4YW1pbmUgaW4gbW9yZSBkZXRhaWwuIEl0J3MgcHJvYmFibHkgdGllZCBjbG9zZWx5IHRvIHRoZSBsaWZlY3ljbGUgb3IgaGFuZGxpbmcgb2YgcmVzb3VyY2VzIHJlbGF0ZWQgdG8gdGhpcyBvZmZsaW5lIHByb2Nlc3MuXG5cbk9mIGNvdXJzZSwgYmVmb3JlIEkgZGlnIHRvbyBkZWVwLCBJIHNob3VsZCBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBjYW4ndCBwcm9jZWVkIG1lYW5pbmdmdWxseSBpZiBtZW1vcnkgY2dyb3VwcyBhcmVuJ3QgZXZlbiBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgYnVpbGQuIFRoYXQncyBhIGZ1bmRhbWVudGFsIHByZXJlcXVpc2l0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMyNiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjI4OjE3LjYxNDE4OTQ1M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwMzAzNTg3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDY4PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwNzctXFxuaW5pdC9LY29uZmlnOjEwNzg6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwNzktXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA4Ni1cXG5pbml0L0tjb25maWc6MTA4Nzpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDg4LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDkzLVxcbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMDk1LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTAyLVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjI4OjE5LjMxNzIzMDU4MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDMwNzk2MzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIGBkcmFpbl9hbGxfc3RvY2tgIGluIFJlbGF0aW9uIHRvIGBDT05GSUdfTUVNQ0dgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYENPTkZJR19NRU1DR2AgcmlnaHQgbm93LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgdGhlIGZ1bmN0aW9uIGBkcmFpbl9hbGxfc3RvY2tgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIGlmIGBkcmFpbl9hbGxfc3RvY2tgIGlzIGEgc3ltYm9sIHRoYXQncyBleHBvcnRlZCwgYWNjZXNzaWJsZSBvdXRzaWRlIG9mIGl0cyBpbW1lZGlhdGUgY29tcGlsYXRpb24gdW5pdCwgb3IgaWYgaXQgaXMgaW5zdGVhZCBkZWNsYXJlZCBhcyBub24tc3RhdGljLCB3aGljaCB3b3VsZCBvZmZlciBzaW1pbGFyIGJ1dCBsaW1pdGVkIGZ1bmN0aW9uYWxpdHkgYW5kIHZpc2liaWxpdHkuIFVuZGVyc3RhbmRpbmcgdGhpcyBjb25uZWN0aW9uIGlzIGtleSB0byBwcm9wZXJseSBhbmFseXppbmcgaXRzIGJlaGF2aW9yIHdpdGhpbiB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgzMywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjI4OjIyLjM0ODAyOTE1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDU1OTA4ODE4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipkcmFpbl9hbGxfc3RvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyODoyNC40MDM5NDc1ODhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwMTYwNzg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgcXVpY2sgbWVudGFsIHNjYW4sIHRhaWxvcmVkIGZvciBzb21lb25lIHdobyB1bmRlcnN0YW5kcyB0aGVzZSBrZXJuZWwgaW50ZXJuYWxzIGFzIHdlbGwgYXMgSSBkbzpcblxuKipBbmFseXppbmcgS2VybmVsIE1lbW9yeSBBY2NvdW50aW5nKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQncyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IHNvbWV0aGluZyBpc24ndCBleHBvcnRlZCwgd2hpY2ggaXMgYSBrZXkgb2JzZXJ2YXRpb24uIFRoZSBmdW5jdGlvbiBpcyAqbm90KiBzdGF0aWMsIHdoaWNoIHJ1bGVzIG91dCBvbmUgY2xhc3Mgb2YgdmlzaWJpbGl0eSBpc3N1ZXMuIFRoYXQgbWFrZXMgdGhpbmdzIHNvbWV3aGF0IGludGVyZXN0aW5nOyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIGlmIGl0J3Mgbm90IGV4cG9ydGVkLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaWYgdGhlcmUgYXJlICpvdGhlciogZnVuY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHByb2Nlc3MuIEknbSBtb3Zpbmcgb24gdG8gY29uc2lkZXIgdGhlIHN0YXRpYyBmdW5jdGlvbnMgaW4gdGhpcyBjb250ZXh0LlxuXG5gbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAgYW5kIGBtZW1vcnlfaGlnaF93cml0ZWAgYXJlIGJvdGggc3RhdGljLCBidXQgdGhleSdyZSBjYWxsYmFja3MsIHdoaWNoIG1lYW5zIHRoZWlyIHZpc2liaWxpdHkgYW5kIHVzZSBhcmUgdGlnaHRseSBjb250cm9sbGVkIHdpdGhpbiBhIHNwZWNpZmljIGZyYW1ld29yay4gVGhvc2Ugc3RhdGljIGNhbGxiYWNrcyBoYXZlIGEgc3BlY2lmaWMgcHVycG9zZS5cblxuYHRyeV9jaGFyZ2VfbWVtY2dgIGlzIGFsc28gc3RhdGljLCB3aGljaCBwcm9iYWJseSBtZWFucyBpdCdzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiwgbm90IGludGVuZGVkIGZvciBnZW5lcmFsIHVzZSBvdXRzaWRlIGl0cyBtb2R1bGUuXG5cbkZpbmFsbHksIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAgaXMgKm5vdCogc3RhdGljLiBUaGlzIGlzIHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUgbW9kdWxlLiBTbywgdGhlIGxhY2sgb2Ygc3RhdGljIHNjb3BpbmcgYW5kIHRoZSBub24tZXhwb3J0ZWQgYXR0cmlidXRlIG9mIHRoZSBmaXJzdCBmdW5jdGlvbiBhcmUgd29ydGggaW52ZXN0aWdhdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA0OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjI4OjI4LjcwNTU1Nzg0OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2MTc2NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF9za19jaGFyZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz01NTk1PXZvaWQgbWVtX2Nncm91cF9za19pbmhlcml0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU2MTEtLyoqXFxubW0vbWVtY29udHJvbC5jOjU2MTI6ICogbWVtX2Nncm91cF9za19jaGFyZ2UgLSBjaGFyZ2Ugc29ja2V0IG1lbW9yeVxcbm1tL21lbWNvbnRyb2wuYy01NjEzLSAqIEBzazogc29ja2V0IGluIG1lbWNnIHRvIGNoYXJnZVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU2MTktICovXFxubW0vbWVtY29udHJvbC5jOjU2MjA6Ym9vbCBtZW1fY2dyb3VwX3NrX2NoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcyxcXG5tbS9tZW1jb250cm9sLmMtNTYyMS1cXHRcXHRcXHQgIGdmcF90IGdmcF9tYXNrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyODoyOC43NTUxODE5NDdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAyNDkzMDAzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTWVtb3J5IEFjY291bnRpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcsIGFuZCBgbWVtX2Nncm91cF9za19jaGFyZ2VgIGlzIGRlZmluaXRlbHkgc3RhbmRpbmcgb3V0IGFzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYSBjbGVhciBGb2N1c1N5bWJvbCBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uLiBCdXQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gSSB3b25kZXIsIHdoYXQgYWJvdXQgYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzYD8gVGhhdCBsb29rcyBzdGF0aWMsIHdoaWNoIHVzdWFsbHkgbWVhbnMgaXQncyBhIHBpZWNlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGluIHRoZSBiaWdnZXIgcGljdHVyZSwgc28gbGV0J3Mga2VlcCB0aGF0IGluIG1pbmQuIEFuZCB3aGlsZSBJJ20gYXQgaXQsIGBjaGFyZ2VfbWVtY2dgIGlzIGFsc28gc3RhdGljLCBzbyB0aGV5IGJvdGggZGVzZXJ2ZSBhIGxvb2suIEJlc3Qgc3RhcnQgd2l0aCB0aGUga25vd24sIHNvIGxldCdzIGNoZWNrIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAsIHF1aWNrbHkgcmVmZXJlbmNpbmcgYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYC4gVGhhdCdsbCBnaXZlIG1lIHRoZSBkZWZpbml0aW9ucyBhbmQgY29udGV4dCBJIG5lZWQgdG8ga2ljayBvZmYgdGhpcyBkZWVwIGRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MzMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyODozNS43ODAxMTYzNzVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNDU1NDI1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX3NrX2NoYXJnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNjMzPXZvaWQgbWVtX2Nncm91cF9za19pbmhlcml0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNjM0OmJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTYzNS1cXHRcXHRcXHQgIGdmcF90IGdmcF9tYXNrKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE2OTM9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfc2tfaW5oZXJpdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzaylcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2OTYtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTY5NzpzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE2OTgtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyODozNi4xODQ2NzY1MjJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0OTE0NTAyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRm9jdXNpbmcgb24gTWVtb3J5IEFjY291bnRpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBtZW1vcnkgYWNjb3VudGluZyB3aXRoaW4gY2dyb3Vwcy4gYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCBpcyBhIHNvbGlkIGluZGljYXRvciwgYSBzdHJvbmcgRm9jdXNTeW1ib2wuIFRoYXQncyBhIGRlZmluaXRlIHBvc2l0aXZlLiBCdXQuLi4gSSBzaG91bGQgYWxzbyBjb25zaWRlciBgbWVtX2Nncm91cF9jaGFyZ2VgLiBJdCdzIHJlbGF0ZWQsIGJ1dCB3YXJyYW50cyBhIGNsb3NlciBsb29rIHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGFuZCBhbnkgcG90ZW50aWFsIG92ZXJsYXBzIG9yIGRpZmZlcmVuY2VzIGluIHRoZSBtZXRyaWNzLiBUaW1lIHRvIGRpZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTY5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjg6MzkuMjMzODI0MDhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzI1OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfY2hhcmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTYyNj1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTYzNS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2MzY6aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjM3LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTYzOC0vKipcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2Mzk6ICogbWVtX2Nncm91cF9jaGFyZ2UgLSBDaGFyZ2UgYSBuZXdseSBhbGxvY2F0ZWQgZm9saW8gdG8gYSBjZ3JvdXAuXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjQwLSAqIEBmb2xpbzogRm9saW8gdG8gY2hhcmdlLlxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjUxLSAqL1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY1MjpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NTMtXFx0XFx0XFx0XFx0ICAgIGdmcF90IGdmcClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY1Ni1cXHRcXHRyZXR1cm4gMDtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NTc6XFx0cmV0dXJuIF9fbWVtX2Nncm91cF9jaGFyZ2UoZm9saW8sIG1tLCBnZnApO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY1OC19XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjU5LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY2MDppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2MS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY2NT12b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY3MC0gKlxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY3MTogKiBVbmNoYXJnZSBhIGZvbGlvIHByZXZpb3VzbHkgY2hhcmdlZCB3aXRoIG1lbV9jZ3JvdXBfY2hhcmdlKCkuXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjcyLSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTE0Mj1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNDctXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTE0ODpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNDktXFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNTMtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTE1NDpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcClcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTU1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjg6MzkuMjc5NTUzMTU5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzczNTQzODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBBY2NvdW50aW5nKipcblxuT2theSwgc28gSSd2ZSBnb3QgYF9fbWVtX2Nncm91cF9jaGFyZ2VgIGZsYWdnZWQgYXMgYSBrZXkgYXJlYSBvZiBmb2N1cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIFJpZ2h0LCBpdCdzIHJlc3BvbnNpYmxlIGZvciwgd2VsbCwgKmNoYXJnaW5nKiBtZW1vcnkgdG8gYSBjZ3JvdXAuIFRoYXQgc2VlbXMgY2VudHJhbCB0byBob3cgbWVtb3J5IGxpbWl0cyBhbmQgYWNjb3VudGluZyB3b3JrIGluIExpbnV4LiBMZXQncyBkaWcgaW4gYW5kIG1ha2Ugc3VyZSB0aGF0IGZ1bmN0aW9uIGlzIGluIGBtbS9tZW1jb250cm9sLmNgLiBZZXAsIHNlZW1zIHJlYXNvbmFibGUgdGhhdCB0aGlzIGFjY291bnRpbmcgZnVuY3Rpb24gd291bGQgbGl2ZSB0aGVyZS4gQWxyaWdodCwgdGltZSB0byBvcGVuIHVwIHRoYXQgZmlsZSBhbmQgZ2V0IHRvIHJlYWRpbmcgdGhlIGNvZGUuLi4gbGV0J3Mgc2VlIGV4YWN0bHkgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MgYW5kIHdoZXJlIGl0IGZpdHMgaW4gdGhlIGdyZWF0ZXIgc2NoZW1lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW5wdXRzLCBvdXRwdXRzLCBhbmQgYW55IGNhbGxzIHRvIG90aGVyIGtleSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMuIEdvdHRhIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgcmVsYXRlZCB0byB0aGlzLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMzcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyODo0Mi40NTY5MDk5MjRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjQ2MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbWVtX2Nncm91cF9jaGFyZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz01MjAwPXN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjE5LVxcbm1tL21lbWNvbnRyb2wuYzo1MjIwOmludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXFxubW0vbWVtY29udHJvbC5jLTUyMjEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyODo0Mi41MDIxNjQ1NTJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzg1NzU3OTM2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBDZ3JvdXAgQnVnKipcblxuT2theSwgc28gYF9fbWVtX2Nncm91cF9jaGFyZ2VgIGRlZmluaXRlbHkgc2VlbXMgbGlrZSBhIGtleSBhcmVhLCBhIGdvb2QgRm9jdXNTeW1ib2wgdG8gc3RhcnQgd2l0aC4gTGV0J3MgcmV2aXNpdCBgZHJhaW5fYWxsX3N0b2NrYC4gSSByZW1lbWJlciBpdCdzIGNhbGxlZCBmcm9tIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCwgd2hpY2ggaXMgYSBjZ3JvdXAgY2FsbGJhY2suIFNvLCB0aGUgY29yZSBvZiB0aGUgcHJvYmxlbSBsaWtlbHkgcmVzaWRlcyBpbiB0aGUgbWVtY2cgc3RvY2sgZHJhaW5pbmcgcHJvY2Vzcy4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgYSBzaXR1YXRpb24gd2hlcmUgYW4gZW1wdHkgc2xvdCBpcyBzdGlsbCBob2xkaW5nIG9udG8gYSBDU1MgcmVmZXJlbmNlIOKAkyBpbnRlcmVzdGluZy4gVGhlcmVmb3JlLCBgZHJhaW5fYWxsX3N0b2NrYCBpcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiB0byB6ZXJvIGluIG9uLiBBbHNvLCB0aGUgZnVuY3Rpb25zIGBfX21lbV9jZ3JvdXBfY2hhcmdlYCBhbmQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCBhcmUgZXF1YWxseSBzdWl0YWJsZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBIbW0sIHdoYXQgYWJvdXQgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgIGl0c2VsZj8gSXQncyBzdGF0aWMsIHdoaWNoIGlzIGEgYml0IG9mIGEgd3JpbmtsZSwgYnV0IGl0J3MgKnRoZSogY2FsbGJhY2sgZm9yIGBjc3Nfb2ZmbGluZWAsIHNvIGRlZmluaXRlbHkgcmVsZXZhbnQuIEFueSBvdGhlciBjYW5kaWRhdGVzPyBPaCwgcmlnaHQsIGBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5YCBpbiBgbW0vbWVtY29udHJvbC12MS5jYC4gSSBzaG91bGQgYWRkIHRoYXQgb25lIHRvIHRoZSBsaXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQxOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyODo1MC4zNTk3NDYxNDZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTc3Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC12MS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuYz0xNzcxPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9yZXNpemVfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODMzLSAqL1xcbm1tL21lbWNvbnRyb2wtdjEuYzoxODM0OnN0YXRpYyBpbnQgbWVtX2Nncm91cF9mb3JjZV9lbXB0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vbWVtY29udHJvbC12MS5jLTE4MzUte1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4NTktXFxubW0vbWVtY29udHJvbC12MS5jOjE4NjA6c3RhdGljIHNzaXplX3QgbWVtX2Nncm91cF9mb3JjZV9lbXB0eV93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxubW0vbWVtY29udHJvbC12MS5jLTE4NjEtXFx0XFx0XFx0XFx0XFx0ICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcyxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODY3LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm1tL21lbWNvbnRyb2wtdjEuYzoxODY4OlxcdHJldHVybiBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5KG1lbWNnKSA/OiBuYnl0ZXM7XFxubW0vbWVtY29udHJvbC12MS5jLTE4NjktfVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTIzNzc9c3RydWN0IGNmdHlwZSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTI0MTEtXFx0XFx0Lm5hbWUgPSBcXFwiZm9yY2VfZW1wdHlcXFwiLFxcbm1tL21lbWNvbnRyb2wtdjEuYzoyNDEyOlxcdFxcdC53cml0ZSA9IG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlfd3JpdGUsXFxubW0vbWVtY29udHJvbC12MS5jLTI0MTMtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjg6NTAuNDA3OTI4Mzg0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NDQwNTIyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE1lbW9yeSBDb250cm9sIFBhdGNoKipcblxuT2theSwgdGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgYXJlYSBmb3IgZnV6emluZy4gVGhlIGNvZGUncyBhIGJpdCBzdGF0aWMsIGJ1dCBJJ3ZlIGdvdCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEknbSB0aGlua2luZyBgZHJhaW5fYWxsX3N0b2NrYCwgYF9fbWVtX2Nncm91cF9jaGFyZ2VgLCBhbmQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCBhcmUgYWxsIHNvbGlkIGZvY3VzIHN5bWJvbHMgaGVyZS4gTGV0J3Mgc2VlLi4uIGBkcmFpbl9hbGxfc3RvY2tgIGlzbid0IGV4cG9ydGVkLCB3aGljaCBpcyBhIHNoYW1lLCBidXQgaXQgKmlzKiBub24tc3RhdGljLCBzbyB0aGVyZSdzIGhvcGUuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZmluZCB0aGUgZW50cnlwb2ludCBpbiBhbiBleHBvcnRlZCBmdW5jdGlvbi5cblxuTm93LCBpcyB0aGVyZSBhbnl0aGluZyBlbHNlIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMgdGhhdCBjYWxscyBgZHJhaW5fYWxsX3N0b2NrYCBkaXJlY3RseT8gTmVlZCB0byBmb2xsb3cgdGhlIGNhbGwgZ3JhcGgsIHNlZSBpZiB0aGVyZSdzIGFueSB3YXkgdG8gdHJpZ2dlciBpdCBleHRlcm5hbGx5LiBBaCwgaGVyZSdzIGEgZ29vZCBsZWFkOiBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWAuIFRoYXQncyBhIGNhbGxiYWNrLCBzbyBpdCdzIGluaXRpYXRlZCBieSB0aGUgY2dyb3VwIGNvcmUuIFRoYXQncyBnb29kLCB0aGF0IG1lYW5zIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBjaGVja2luZy5cblxuVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgaG93IG1lbW9yeSBjZ3JvdXAgc3RvY2sgZHJhaW5pbmcgd29ya3MuIFRoYXQncyBhIGNsYXNzaWMgYXJlYSBmb3IgZnV6emluZzsgbWVtb3J5IG1hbmFnZW1lbnQgYnVncyBhcmUgYWx3YXlzIHRyaWNreS4gVGhlIHBhdGNoIGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHN0b2NrIGRyYWluaW5nLCBzbyBJJ20gdGhpbmtpbmcgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBgTUVNQ0dgIGNvbmZpZ3VyYXRpb24gaXMsIG9mIGNvdXJzZSwgYSBwcmVyZXF1aXNpdGUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYCBmdW5jdGlvbiBpbiBgbW0vbWVtY29udHJvbC5jYC4gR290dGEgYmUgdGhvcm91Z2ghXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjcxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjI4OjU1Ljg1MTk4MzcwM1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzODQ4NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNfbWVtY2dfZHJhaW5fbmVlZGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MjIyMj1zdGF0aWMgdm9pZCByZWZpbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjI4MC1cXG5tbS9tZW1jb250cm9sLmM6MjI4MTpzdGF0aWMgYm9vbCBpc19tZW1jZ19kcmFpbl9uZWVkZWQoc3RydWN0IG1lbWNnX3N0b2NrX3BjcCAqc3RvY2ssXFxubW0vbWVtY29udHJvbC5jLTIyODItXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yMzI1PXZvaWQgZHJhaW5fYWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTIzNDQtXFx0XFx0aWYgKCF0ZXN0X2JpdChGTFVTSElOR19DQUNIRURfQ0hBUkdFLCBcXHUwMDI2bWVtY2dfc3QtXFx1MDAzZWZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbm1tL21lbWNvbnRyb2wuYzoyMzQ1OlxcdFxcdCAgICBpc19tZW1jZ19kcmFpbl9uZWVkZWQobWVtY2dfc3QsIHJvb3RfbWVtY2cpIFxcdTAwMjZcXHUwMDI2XFxubW0vbWVtY29udHJvbC5jLTIzNDYtXFx0XFx0ICAgICF0ZXN0X2FuZF9zZXRfYml0KEZMVVNISU5HX0NBQ0hFRF9DSEFSR0UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAzOjI4OjU1Ljg5ODM3NzIxMVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODU0OTQ3OTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lbWNnIFN0b2NrIERyYWluaW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGZ1bmN0aW9uIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgIGlzIHN0YXRpYywgd2hpY2ggaXMgYSBrZXkgZGV0YWlsIGZvciBzY29waW5nIGFuZCBwb3RlbnRpYWwgaW5saW5pbmcgY29uc2lkZXJhdGlvbnMuIGBkcmFpbl9hbGxfc3RvY2tgLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgbm9uLXN0YXRpYywgaW1wbHlpbmcgaXQgbWlnaHQgYmUgY2FsbGVkIGZyb20gYSB3aWRlciByYW5nZSBvZiBjb2RlIG9yIGhhdmUgYnJvYWRlciBhY2Nlc3MuIEkgbmVlZCB0byBrZWVwIHRob3NlIGluIG1pbmQuXG5cbk15IGZvY3VzIGlzIGZpcm1seSBvbiBgZHJhaW5fYWxsX3N0b2NrYCwgYF9fbWVtX2Nncm91cF9jaGFyZ2VgLCBhbmQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCAtLSB0aG9zZSBhcmUgbXkgXCJGb2N1c1N5bWJvbHNcIiBpbiB0aGlzIGNvbnRleHQuIFRoZXkncmUgd2hlcmUgdGhlIGNvcmUgd29yayBpcyBoYXBwZW5pbmcsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdGhlIHN0b2NrIGRyYWluaW5nLlxuXG5UaGUgY29yZSBvZiB0aGlzIHBhdGNoIGlzIGEgKmZ1bmN0aW9uYWwgY2hhbmdlKiB0byBob3cgbWVtY2cgc3RvY2sgZHJhaW5pbmcgd29ya3MuIFRoZSBjaGFuZ2Ugc2VlbXMgcmVsYXRpdmVseSB0YXJnZXRlZCwgbW9kaWZ5aW5nIGEgY29uZGl0aW9uIHdpdGhpbiBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYC4gUmVtb3ZpbmcgdGhlIGBzdG9jay1cdTAwM2Vucl9wYWdlc1tpXWAgY2hlY2sgaXMgc2lnbmlmaWNhbnQuIFRoZSBpbnRlbnQgaXMgY2xlYXI6IHRvIGVuc3VyZSAqZW1wdHkqIHN0b2NrIHNsb3RzIGFsc28gdHJpZ2dlciBhIGRyYWluLiBQcmV2aW91c2x5LCBlbXB0eSBzbG90cyBtaWdodCBub3QgaGF2ZSB0cmlnZ2VyZWQgaXQsIHNvIGl0J3MgYSBkZXBhcnR1cmUgZnJvbSB0aGUgcHJpb3IgYmVoYXZpb3VyLiBUaGUgcmVhc29uaW5nIGltcGxpZXMgaXQncyBhYm91dCByZWxlYXNpbmcgcGlubmVkIGNzcyByZWZlcmVuY2VzLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYXMgdGhlc2UgYXJlIHJlbGF0ZWQgdG8gdGhlIG1lbW9yeSByZXNvdXJjZSBhY2NvdW50aW5nLlxuXG5HaXZlbiBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBjcml0aWNhbCBhcmVhIGxpa2UgbWVtY2cgc3RvY2sgZHJhaW5pbmcsIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuIEl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIHBvdGVudGlhbCBlZGdlIGNhc2UgaXNzdWVzIG9yIHVuZXhwZWN0ZWQgY29uc2VxdWVuY2VzIHJlbGF0ZWQgdG8gdGltaW5nIG9yIGNvbmN1cnJlbmN5LiBUaGUgZmFjdCB0aGF0IHRoZSBjaGFuZ2UgaXMgc3BlY2lmaWMgdG8gdGhlIGBNRU1DR2AgY29uZmlndXJhdGlvbiBpcyBhbHNvIGltcG9ydGFudCBjb250ZXh0LiBUaGlzIG1lYW5zIGl0IG9ubHkgaW1wYWN0cyBzeXN0ZW1zIHdpdGggbWVtY2cgZW5hYmxlZCwgd2hpY2ggbmFycm93cyB0aGUgc2NvcGUgb2YgaW52ZXN0aWdhdGlvbiwgYnV0IG5vdCB0aGUgaW1wb3J0YW5jZS4gSSBuZWVkIHRvIGJlYXIgaW4gbWluZCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTI0LCJPdXRwdXRUb2tlbnMiOjEyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyOTowNS43NTMzMjkxMjZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTg1Mzk5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkcmFpbl9hbGxfc3RvY2tcIixcbiAgICBcIl9fbWVtX2Nncm91cF9jaGFyZ2VcIixcbiAgICBcIm1lbV9jZ3JvdXBfc2tfY2hhcmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBmb3IgZHJhaW5pbmcgbWVtY2cgc3RvY2sgaW4gYGlzX21lbWNnX2RyYWluX25lZWRlZGAuIEl0IHJlbW92ZXMgdGhlIGNoZWNrIGZvciBgc3RvY2stXFx1MDAzZW5yX3BhZ2VzW2ldYCBiZWluZyBub24temVybywgZW5zdXJpbmcgdGhhdCBlbXB0eSBzbG90cyBzdGlsbCB0cmlnZ2VyIGEgZHJhaW4gdG8gcmVsZWFzZSBwaW5uZWQgY3NzIHJlZmVyZW5jZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1jZyBzdG9jayBkcmFpbmluZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRyYWluX2FsbF9zdG9ja1wiLFxuICAgIFwiX19tZW1fY2dyb3VwX2NoYXJnZVwiLFxuICAgIFwibWVtX2Nncm91cF9za19jaGFyZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciBkcmFpbmluZyBtZW1jZyBzdG9jayBpbiBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYC4gSXQgcmVtb3ZlcyB0aGUgY2hlY2sgZm9yIGBzdG9jay1cXHUwMDNlbnJfcGFnZXNbaV1gIGJlaW5nIG5vbi16ZXJvLCBlbnN1cmluZyB0aGF0IGVtcHR5IHNsb3RzIHN0aWxsIHRyaWdnZXIgYSBkcmFpbiB0byByZWxlYXNlIHBpbm5lZCBjc3MgcmVmZXJlbmNlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbWNnIHN0b2NrIGRyYWluaW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyOTowNS44MjMxODkzNjRaIiwiU2VxIjozNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjUyNTc3OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjk6MDUuODIzNzE0NjQ0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0MjUyMDQ1MjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYCBpbiBgbW0vbWVtY29udHJvbC5jYCB0byBmaXggYSBsb2dpYyBidWcgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIHJlZmVyZW5jZSBjb3VudGluZy4gSXQgZW5zdXJlcyB0aGF0IGEgcGVyLUNQVSBzdG9jayBpcyBkcmFpbmVkIGV2ZW4gaWYgYG5yX3BhZ2VzYCBpcyAwLCBiZWNhdXNlIHRoZSBgbWVtY2dgIHBvaW50ZXIgaXRzZWxmIGhvbGRzIGEgY3NzIHJlZmVyZW5jZSB0aGF0IG5lZWRzIHRvIGJlIHJlbGVhc2VkLiBUaGlzIGlzIGEgZml4IGZvciBhIHJlZmVyZW5jZSBsZWFrIG9yIGEgYnVnIHByZXZlbnRpbmcgYSBjZ3JvdXAgZnJvbSBiZWluZyBvZmZsaW5lZC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gKGZvciB1c2UtYWZ0ZXItZnJlZSkgYW5kIEtNRU1MRUFLIChmb3IgbWVtb3J5IGxlYWtzKSBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBpc3N1ZXMgaW4gdGhpcyBhcmVhLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4YjZhOTAzNzM2MmY4YjllMGMxNTdiYzNlYWI3ZjBjMmE4ZWQ1NDhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDM6Mjc6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDE3ZGExZjQzYjdkM2IuLmI5MzFlYzE2YmI4MjkgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTIyOTEsOCArMjI5MSwxMiBAQCBzdGF0aWMgYm9vbCBpc19tZW1jZ19kcmFpbl9uZWVkZWQoc3RydWN0IG1lbWNnX3N0b2NrX3BjcCAqc3RvY2ssXG4gXHRcdGlmICghbWVtY2cpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmIChSRUFEX09OQ0Uoc3RvY2stXHUwMDNlbnJfcGFnZXNbaV0pIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgbWVtX2Nncm91cF9pc19kZXNjZW5kYW50KG1lbWNnLCByb290X21lbWNnKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBBbiBlbXB0eSBzbG90IHN0aWxsIHBpbnMgYSBjc3MgcmVmZXJlbmNlIHdoaWNoXG4rXHRcdCAqIG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoKSByZWxpZXMgb24gZHJhaW5fYWxsX3N0b2NrKClcbitcdFx0ICogdG8gcmVsZWFzZS5cbitcdFx0ICovXG4rXHRcdGlmIChtZW1fY2dyb3VwX2lzX2Rlc2NlbmRhbnQobWVtY2csIHJvb3RfbWVtY2cpKSB7XG4gXHRcdFx0Zmx1c2ggPSB0cnVlO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMzoyOTowNS44MjM3MTU0ODRaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM5OTQ2NzYzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbWNnIERyYWluIENvbmRpdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgYGlzX21lbWNnX2RyYWluX25lZWRlZGAgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgdGhlIHJlbW92YWwgb2YgdGhlIGBSRUFEX09OQ0Uoc3RvY2stXHUwMDNlbnJfcGFnZXNbaV0pYCBjb25kaXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSByZWZlcmVuY2UgY291bnRpbmcgbG9naWMgYW5kIGhvdyB3ZSBoYW5kbGUgZHJhaW5pbmcgdGhlIHBlci1DUFUgY2FjaGVzIHdpdGhpbiBtZW1vcnkgY2dyb3Vwcy5cblxuVGhlIGNvbW1lbnQgaXRzZWxmIGdpdmVzIGEgZ29vZCBjbHVlLiBJdCBzZWVtcyB0aGF0IGV2ZW4gd2l0aCBgbnJfcGFnZXNgIGF0IHplcm8sIHRoZXJlJ3Mgc3RpbGwgYSBDU1MgcmVmZXJlbmNlIHBpbm5lZCwgd2hpY2ggYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmUoKWAgcmVsaWVzIG9uIGBkcmFpbl9hbGxfc3RvY2soKWAgdG8gcmVsZWFzZS4gSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCB0aGUgYmlnZ2VyIHBpY3R1cmUuIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgIHNlZW1zIHRvIGl0ZXJhdGUgb3ZlciBzb21lIGFzcGVjdCBvZiB0aGUgbWVtb3J5IGNncm91cCBzdG9jaywgbGlrZWx5IGBzdG9jay1cdTAwM2VjYWNoZWRgLCBgc3RvY2stXHUwMDNlbnJfcGFnZXNgLCBvciBgc3RvY2stXHUwMDNlbWVtY2dgLiBCeSByZW1vdmluZyB0aGUgY2hlY2sgZm9yIHplcm8gYG5yX3BhZ2VzYCwgdGhlIHBhdGNoIGlzIHNheWluZyBcInllcywgZHJhaW4gdGhpcyBzdG9jayBldmVuIGlmIGl0J3MgY3VycmVudGx5IGhvbGRpbmcgemVybyBwYWdlcywgYmVjYXVzZSB0aGUgQ1NTIHJlZmVyZW5jZSBzdGlsbCBuZWVkcyB0byBiZSBhY2NvdW50ZWQgZm9yLlwiXG5cblRoaXMgaXMsIGFsbW9zdCBjZXJ0YWlubHksIGEgbG9naWMgYnVnIGZpeCByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXAgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGUgaXNzdWUgaXMgbGlrZWx5IGEgQ1NTIHJlZmVyZW5jZSBsZWFrIG9yIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL29mZmxpbmUgc2l0dWF0aW9uLiBJZiB3ZSBmcmVlIHRoZSBDU1MgcHJlbWF0dXJlbHksIEtBU0FOIG1pZ2h0IHRyaWdnZXIgYSB1c2UtYWZ0ZXItZnJlZSBlcnJvci4gQnV0IHRoaXMgaXNuJ3QgS01TQU4gdGVycml0b3J5OyB0aGVyZSdzIG5vIGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIEtNU0FOIHdvdWxkbid0IGJlIHJlbGV2YW50IGhlcmUuIExldCdzIG1ha2Ugc3VyZSBJJ20gZm9sbG93aW5nIHRoZSBsb2dpYy4gSSBzaG91bGQgZG91YmxlIGNoZWNrIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgIGluIGBtbS9tZW1jb250cm9sLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjk6MTMuMjIzMTg2MDMyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ3NTQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpc19tZW1jZ19kcmFpbl9uZWVkZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0yMjIyPXN0YXRpYyB2b2lkIHJlZmlsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yMjgwLVxcbm1tL21lbWNvbnRyb2wuYzoyMjgxOnN0YXRpYyBib29sIGlzX21lbWNnX2RyYWluX25lZWRlZChzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwICpzdG9jayxcXG5tbS9tZW1jb250cm9sLmMtMjI4Mi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTIzMjU9dm9pZCBkcmFpbl9hbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjM0NC1cXHRcXHRpZiAoIXRlc3RfYml0KEZMVVNISU5HX0NBQ0hFRF9DSEFSR0UsIFxcdTAwMjZtZW1jZ19zdC1cXHUwMDNlZmxhZ3MpIFxcdTAwMjZcXHUwMDI2XFxubW0vbWVtY29udHJvbC5jOjIzNDU6XFx0XFx0ICAgIGlzX21lbWNnX2RyYWluX25lZWRlZChtZW1jZ19zdCwgcm9vdF9tZW1jZykgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1jb250cm9sLmMtMjM0Ni1cXHRcXHQgICAgIXRlc3RfYW5kX3NldF9iaXQoRkxVU0hJTkdfQ0FDSEVEX0NIQVJHRSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjk6MTMuMjcyNjY1NTlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjgwMzAzODY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaCwgYW5kIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGNvcmUgb2YgaXQgaW52b2x2ZXMgbW9kaWZ5aW5nIGBpc19tZW1jZ19kcmFpbl9uZWVkZWRgIGluIGBtbS9tZW1jb250cm9sLmNgLiBFc3NlbnRpYWxseSwgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGEgbG9naWNhbCBjb3JyZWN0aW9uIHJlbGF0ZWQgdG8gdGhlIHJlZmVyZW5jZSBjb3VudGluZyB3aXRoaW4gY2dyb3Vwcy4gVGhlIGZ1bmN0aW9uIGRldGVybWluZXMgaWYgYSBtZW1vcnkgY2dyb3VwIG5lZWRzIHRvIGJlIFwiZHJhaW5lZFwiIOKAkyB0aGF0IGlzLCBpZiB3ZSBuZWVkIHRvIGVuc3VyZSBpdHMgcmVzb3VyY2VzIGFyZSBwcm9wZXJseSBhY2NvdW50ZWQgZm9yIGFuZCByZWxlYXNlZC4gVGhlIGN1cnJlbnQgbG9naWMgd2FzIGNhdXNpbmcgaXNzdWVzLCBsaWtlbHkgbGVhZGluZyB0byByZWZlcmVuY2UgbGVha3Mgb3IgYmxvY2tpbmcgY2dyb3VwIG9mZmxpbmluZywgd2hpY2ggaXMgYSBrbm93biBwcm9ibGVtIGluIHRoaXMgYXJlYS5cblxuVGhlIGdvb2QgbmV3cyBpcyB0aGF0IHRoaXMgaXMgKm5vdCogYSB2dWxuZXJhYmlsaXR5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgYWx3YXlzIGEgcmVsaWVmLiBXZSBkb24ndCBuZWVkIHRvIGludm9sdmUgS01TQU4gZm9yIHRoaXMuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIGFuYWx5c2lzIHdpdGggS0FTQU4gYW5kIEtNRU1MRUFLLCBhbG9uZyB3aXRoIG5vcm1hbCB0ZXN0aW5nLCBzaG91bGQgYmUgcGVyZmVjdGx5IGFkZXF1YXRlIHRvIGVuc3VyZSBjb3JyZWN0bmVzcy5cblxuVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzIHBhdGNoLiBJdCdzIGEgY2xlYW4sIGZvY3VzZWQgZml4IHRoYXQgYWRkcmVzc2VzIGEgbG9naWMgZmxhdyBpbiB0aGUgY2dyb3VwIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgZG9lc24ndCByZXF1aXJlIHRoZSBvdmVyaGVhZCBvZiBLTVNBTi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA0MSwiT3V0cHV0VG9rZW5zIjoxODAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDM6Mjk6MjAuMDc1NzA4OTg2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYCBpbiBgbW0vbWVtY29udHJvbC5jYCB0byBmaXggYSBsb2dpYyBidWcgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIHJlZmVyZW5jZSBjb3VudGluZy4gSXQgZW5zdXJlcyB0aGF0IGEgcGVyLUNQVSBzdG9jayBpcyBkcmFpbmVkIGV2ZW4gaWYgYG5yX3BhZ2VzYCBpcyAwLCBiZWNhdXNlIHRoZSBgbWVtY2dgIHBvaW50ZXIgaXRzZWxmIGhvbGRzIGEgY3NzIHJlZmVyZW5jZSB0aGF0IG5lZWRzIHRvIGJlIHJlbGVhc2VkLiBUaGlzIGlzIGEgZml4IGZvciBhIHJlZmVyZW5jZSBsZWFrIG9yIGEgYnVnIHByZXZlbnRpbmcgYSBjZ3JvdXAgZnJvbSBiZWluZyBvZmZsaW5lZC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gKGZvciB1c2UtYWZ0ZXItZnJlZSkgYW5kIEtNRU1MRUFLIChmb3IgbWVtb3J5IGxlYWtzKSBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBpc3N1ZXMgaW4gdGhpcyBhcmVhLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaXNfbWVtY2dfZHJhaW5fbmVlZGVkYCBpbiBgbW0vbWVtY29udHJvbC5jYCB0byBmaXggYSBsb2dpYyBidWcgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIHJlZmVyZW5jZSBjb3VudGluZy4gSXQgZW5zdXJlcyB0aGF0IGEgcGVyLUNQVSBzdG9jayBpcyBkcmFpbmVkIGV2ZW4gaWYgYG5yX3BhZ2VzYCBpcyAwLCBiZWNhdXNlIHRoZSBgbWVtY2dgIHBvaW50ZXIgaXRzZWxmIGhvbGRzIGEgY3NzIHJlZmVyZW5jZSB0aGF0IG5lZWRzIHRvIGJlIHJlbGVhc2VkLiBUaGlzIGlzIGEgZml4IGZvciBhIHJlZmVyZW5jZSBsZWFrIG9yIGEgYnVnIHByZXZlbnRpbmcgYSBjZ3JvdXAgZnJvbSBiZWluZyBvZmZsaW5lZC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gKGZvciB1c2UtYWZ0ZXItZnJlZSkgYW5kIEtNRU1MRUFLIChmb3IgbWVtb3J5IGxlYWtzKSBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBpc3N1ZXMgaW4gdGhpcyBhcmVhLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workfloww9kt8[1] Phase: Succeeded StartedAt: 2026-08-17 03:29:31 +0000 UTC FinishedAt: 2026-08-17 03:29:31 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww9kt8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-17 03:29:31 +0000 UTC FinishedAt: 2026-08-17 03:29:31 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww9kt8[2] Phase: Succeeded StartedAt: 2026-08-17 03:29:31 +0000 UTC FinishedAt: 2026-08-17 07:12:19 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-17 03:29:31 +0000 UTC FinishedAt: 2026-08-17 07:12:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-17 03:29:31 +0000 UTC FinishedAt: 2026-08-17 03:29:41 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-17 03:29:31 +0000 UTC FinishedAt: 2026-08-17 03:29:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workfloww9kt8/series-workfloww9kt8-convert-artifact-817431221/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-17 03:29:41 +0000 UTC FinishedAt: 2026-08-17 03:46:33 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-17 03:29:41 +0000 UTC FinishedAt: 2026-08-17 03:46:33 +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:*9741b2c8-f025-4f92-8dd8-2b18812e0839,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-workfloww9kt8/series-workfloww9kt8-convert-artifact-817431221/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": "605be39d-f64b-4e22-a497-a5a21ff13efc", "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-workfloww9kt8/series-workfloww9kt8-build-action-2250686107/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-17 03:29:41 +0000 UTC FinishedAt: 2026-08-17 03:46:23 +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:*9741b2c8-f025-4f92-8dd8-2b18812e0839,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-workfloww9kt8/series-workfloww9kt8-convert-artifact-817431221/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": "605be39d-f64b-4e22-a497-a5a21ff13efc", "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-workfloww9kt8/series-workfloww9kt8-build-action-2250686107/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-17 03:46:33 +0000 UTC FinishedAt: 2026-08-17 03:46:33 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-17 03:46:33 +0000 UTC FinishedAt: 2026-08-17 03:46:33 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-17 03:46:33 +0000 UTC FinishedAt: 2026-08-17 03:46:43 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-17 03:46:33 +0000 UTC FinishedAt: 2026-08-17 03:46:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workfloww9kt8/series-workfloww9kt8-convert-artifact-4116750608/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-17 03:46:43 +0000 UTC FinishedAt: 2026-08-17 03:48:34 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-17 03:46:43 +0000 UTC FinishedAt: 2026-08-17 03:48:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*605be39d-f64b-4e22-a497-a5a21ff13efc,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-workfloww9kt8/series-workfloww9kt8-build-action-2250686107/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-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-17 03:48:34 +0000 UTC FinishedAt: 2026-08-17 03:48:34 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-17 03:48:34 +0000 UTC FinishedAt: 2026-08-17 03:48:34 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-17 03:48:34 +0000 UTC FinishedAt: 2026-08-17 04:05:15 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-17 03:48:34 +0000 UTC FinishedAt: 2026-08-17 04:05:15 +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:*9741b2c8-f025-4f92-8dd8-2b18812e0839,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-workfloww9kt8/series-workfloww9kt8-convert-artifact-4116750608/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": "777155c7-423c-4574-8ce9-eb97f0216af6", "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-workfloww9kt8/series-workfloww9kt8-build-action-132554124/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-17 03:48:34 +0000 UTC FinishedAt: 2026-08-17 04:05:05 +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:*9741b2c8-f025-4f92-8dd8-2b18812e0839,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-workfloww9kt8/series-workfloww9kt8-convert-artifact-4116750608/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": "777155c7-423c-4574-8ce9-eb97f0216af6", "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-workfloww9kt8/series-workfloww9kt8-build-action-132554124/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-17 04:05:15 +0000 UTC FinishedAt: 2026-08-17 04:05:15 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-17 04:05:15 +0000 UTC FinishedAt: 2026-08-17 04:05:15 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-17 04:05:15 +0000 UTC FinishedAt: 2026-08-17 04:07:10 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-17 04:05:15 +0000 UTC FinishedAt: 2026-08-17 04:07:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*777155c7-423c-4574-8ce9-eb97f0216af6,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-workfloww9kt8/series-workfloww9kt8-build-action-132554124/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-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-17 04:07:10 +0000 UTC FinishedAt: 2026-08-17 07:12:19 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-17 04:07:10 +0000 UTC FinishedAt: 2026-08-17 07:12:19 +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":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"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:*605be39d-f64b-4e22-a497-a5a21ff13efc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*777155c7-423c-4574-8ce9-eb97f0216af6,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-workfloww9kt8/series-workfloww9kt8-build-action-2250686107/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-workfloww9kt8/series-workfloww9kt8-build-action-132554124/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-17 04:07:10 +0000 UTC FinishedAt: 2026-08-17 04:07:20 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-17 04:07:10 +0000 UTC FinishedAt: 2026-08-17 04:07:15 +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":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"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-workfloww9kt8/series-workfloww9kt8-convert-artifact-910954505/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-17 04:07:10 +0000 UTC FinishedAt: 2026-08-17 04:07:10 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-17 04:07:10 +0000 UTC FinishedAt: 2026-08-17 04:07:10 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-17 04:07:10 +0000 UTC FinishedAt: 2026-08-17 04:07:10 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-17 04:07:20 +0000 UTC FinishedAt: 2026-08-17 07:12:19 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww9kt8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["drain_all_stock","__mem_cgroup_charge","mem_cgroup_sk_charge"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4477a78374a57c3809b172ad30cceabda48c47c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"061eaec8-37d9-4bf1-a5cc-b49bfe614c4f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-17 04:07:20 +0000 UTC FinishedAt: 2026-08-17 07:12:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*605be39d-f64b-4e22-a497-a5a21ff13efc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*777155c7-423c-4574-8ce9-eb97f0216af6,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-workfloww9kt8/series-workfloww9kt8-build-action-2250686107/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-workfloww9kt8/series-workfloww9kt8-build-action-132554124/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-workfloww9kt8/series-workfloww9kt8-convert-artifact-910954505/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,}