Name: series-workflowtzh77 Phase: Succeeded StartedAt: 2026-08-17 02:04:13 +0000 UTC FinishedAt: 2026-08-17 05:52:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzh77[0] Phase: Succeeded StartedAt: 2026-08-17 02:04:13 +0000 UTC FinishedAt: 2026-08-17 02:10:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzh77[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 02:04:13 +0000 UTC FinishedAt: 2026-08-17 02:10:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FB", "FB_VIRTUAL", "FRAMEBUFFER_CONSOLE", "FRAMEBUFFER_CONSOLE_ROTATION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FB", "FB_VIRTUAL", "FRAMEBUFFER_CONSOLE", "FRAMEBUFFER_CONSOLE_ROTATION" ], "series_id": "02ee36b6-6ef1-47d7-9748-27945a69a3d3" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "fbcon_set_font", "fbcon_set_def_font" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZCJiMzNDssCiAgICAmIzM0O0ZCX1ZJUlRVQUwmIzM0OywKICAgICYjMzQ7RlJBTUVCVUZGRVJfQ09OU09MRSYjMzQ7LAogICAgJiMzNDtGUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmJjb25fc2V0X2ZvbnQmIzM0OywKICAgICYjMzQ7ZmJjb25fc2V0X2RlZl9mb250JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGZiY29uX2RvX3NldF9mb250YCB3aGVyZSBjaGFuZ2luZyB0aGUgZm9udCBjaGFyYWN0ZXIgY291bnQgKGUuZy4sIGZyb20gMjU2IHRvIDUxMikgd2l0aG91dCB1cGRhdGluZyB0aGUgcm90YXRlZCBmb250IGJ1ZmZlciAoYHBhci1cdTAwM2Vyb3RhdGVkLmJ1ZmApIGxlYWRzIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gV2hlbiBgZmJjb25gIHJlbmRlcnMgdGV4dCwgaXQgdXNlcyB0aGUgbmV3IGNoYXJhY3RlciBjb3VudCB0byBpbmRleCBpbnRvIHRoZSBvbGQsIHNtYWxsZXIgYnVmZmVyLCByZXN1bHRpbmcgaW4gYSBoZWFwIE9PQiByZWFkLiBUaGlzIGlzIGEgY2xhc3NpYyBtZW1vcnkgc2FmZXR5IGlzc3VlIHRoYXQgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhayB0byB1c2VyIHNwYWNlIGludm9sdmVkLCBhcyB0aGUgYnVmZmVyIGlzIGZ1bGx5IGluaXRpYWxpemVkIHVwIHRvIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBmcmFtZWJ1ZmZlciBjb25zb2xlIGZvbnQgc2V0dGluZyBsb2dpYyAoZmJjb25fZG9fc2V0X2ZvbnQpIHRvIGhhbmRsZSBmb250IHJvdGF0aW9uIHdoZW4gdGhlIGNvbnNvbGUgaXMgdmlzaWJsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGNvcmUgc3Vic3lzdGVtIChmYmNvbikgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBpb2N0bHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0ZDU4OGUyMDJlNDNmODNhN2U4OTRmNzcwNzQwYjg4YzhmMzYyNjhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDI6MDc6NDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uY1xuaW5kZXggMjNiM2M1MzZkNTNkMS4uYzc0YTQ5MDViOGUyYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uY1xuQEAgLTI0MjUsNiAmIzQzOzI0MjUsMTMgQEAgc3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCxcbiBcdGVsc2UgaWYgKCF2Yy1cdTAwM2V2Y19oaV9mb250X21hc2sgXHUwMDI2XHUwMDI2IGNoYXJjb3VudCA9PSA1MTIpXG4gXHRcdHNldF92Y19oaV9mb250KHZjLCB0cnVlKTtcbiBcbiYjNDM7XHRpZiAoY29uX2lzX3Zpc2libGUodmMpKSB7XG4mIzQzO1x0XHRpZiAocGFyLVx1MDAzZWJpdG9wcy1cdTAwM2Vyb3RhdGVfZm9udCBcdTAwMjZcdTAwMjYgcGFyLVx1MDAzZWJpdG9wcy1cdTAwM2Vyb3RhdGVfZm9udChpbmZvLCB2YykpIHtcbiYjNDM7XHRcdFx0cGFyLVx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcbiYjNDM7XHRcdFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAocmVzaXplKSB7XG4gXHRcdGludCBjb2xzLCByb3dzO1xuIFxuQEAgLTI0NTksNiAmIzQzOzI0NjYsMTMgQEAgc3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCxcbiBcdGVsc2UgaWYgKCFvbGRfaGlfZm9udF9tYXNrIFx1MDAyNlx1MDAyNiB2Yy1cdTAwM2V2Y19oaV9mb250X21hc2spXG4gXHRcdHNldF92Y19oaV9mb250KHZjLCBmYWxzZSk7XG4gXG4mIzQzO1x0aWYgKGNvbl9pc192aXNpYmxlKHZjKSkge1xuJiM0MztcdFx0aWYgKHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQgXHUwMDI2XHUwMDI2IHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQoaW5mbywgdmMpKSB7XG4mIzQzO1x0XHRcdHBhci1cdTAwM2Vyb3RhdGUgPSBGQl9ST1RBVEVfVVI7XG4mIzQzO1x0XHRcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0Zm9udF9kYXRhX3B1dChkYXRhKTtcbiBcbiBcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZCJiMzNDssCiAgICAmIzM0O0ZCX1ZJUlRVQUwmIzM0OywKICAgICYjMzQ7RlJBTUVCVUZGRVJfQ09OU09MRSYjMzQ7LAogICAgJiMzNDtGUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmJjb25fc2V0X2ZvbnQmIzM0OywKICAgICYjMzQ7ZmJjb25fc2V0X2RlZl9mb250JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGZyYW1lYnVmZmVyIGNvbnNvbGUgZm9udCBzZXR0aW5nIGxvZ2ljIChmYmNvbl9kb19zZXRfZm9udCkgdG8gaGFuZGxlIGZvbnQgcm90YXRpb24gd2hlbiB0aGUgY29uc29sZSBpcyB2aXNpYmxlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgY29yZSBzdWJzeXN0ZW0gKGZiY29uKSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXIgc3BhY2UgdmlhIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRkNTg4ZTIwMmU0M2Y4M2E3ZTg5NGY3NzA3NDBiODhjOGYzNjI2OGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAwMjowNzo0NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jIGIvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMKaW5kZXggMjNiM2M1MzZkNTNkMS4uYzc0YTQ5MDViOGUyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMKQEAgLTI0MjUsNiAmIzQzOzI0MjUsMTMgQEAgc3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCwKIAllbHNlIGlmICghdmMtJmd0O3ZjX2hpX2ZvbnRfbWFzayAmYW1wOyZhbXA7IGNoYXJjb3VudCA9PSA1MTIpCiAJCXNldF92Y19oaV9mb250KHZjLCB0cnVlKTsKIAomIzQzOwlpZiAoY29uX2lzX3Zpc2libGUodmMpKSB7CiYjNDM7CQlpZiAocGFyLSZndDtiaXRvcHMtJmd0O3JvdGF0ZV9mb250ICZhbXA7JmFtcDsgcGFyLSZndDtiaXRvcHMtJmd0O3JvdGF0ZV9mb250KGluZm8sIHZjKSkgewomIzQzOwkJCXBhci0mZ3Q7cm90YXRlID0gRkJfUk9UQVRFX1VSOwomIzQzOwkJCXNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCWlmIChyZXNpemUpIHsKIAkJaW50IGNvbHMsIHJvd3M7CiAKQEAgLTI0NTksNiAmIzQzOzI0NjYsMTMgQEAgc3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCwKIAllbHNlIGlmICghb2xkX2hpX2ZvbnRfbWFzayAmYW1wOyZhbXA7IHZjLSZndDt2Y19oaV9mb250X21hc2spCiAJCXNldF92Y19oaV9mb250KHZjLCBmYWxzZSk7CiAKJiM0MzsJaWYgKGNvbl9pc192aXNpYmxlKHZjKSkgewomIzQzOwkJaWYgKHBhci0mZ3Q7Yml0b3BzLSZndDtyb3RhdGVfZm9udCAmYW1wOyZhbXA7IHBhci0mZ3Q7Yml0b3BzLSZndDtyb3RhdGVfZm9udChpbmZvLCB2YykpIHsKJiM0MzsJCQlwYXItJmd0O3JvdGF0ZSA9IEZCX1JPVEFURV9VUjsKJiM0MzsJCQlzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlmb250X2RhdGFfcHV0KGRhdGEpOwogCiAJcmV0dXJuIHJldDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGZiY29uLmMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGVkIGBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uY2AuIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZXMgYXJlIHdpdGhpbiB0aGUgYGZiY29uX2RvX3NldF9mb250YCBmdW5jdGlvbi4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBhZGRlZCB0aGlzIGNvbmRpdGlvbmFsIGNoZWNrOgoKYGBgYwoJaWYgKGNvbl9pc192aXNpYmxlKHZjKSkgewoJCWlmIChwYXItJmd0O2JpdG9wcy0mZ3Q7cm90YXRlX2ZvbnQgJmFtcDsmYW1wOyBwYXItJmd0O2JpdG9wcy0mZ3Q7cm90YXRlX2ZvbnQoaW5mbywgdmMpKSB7CgkJCXBhci0mZ3Q7cm90YXRlID0gRkJfUk9UQVRFX1VSOwoJCQlzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7CgkJfQoJfQpgYGAKCi4uLmFuZCB0aGlzIHNuaXBwZXQgaXMgcHJlc2VudCBpbiB0d28gbG9jYXRpb25zIGluc2lkZSBvZiBgZmJjb25fZG9fc2V0X2ZvbnRgLiBOb3csIGZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGlzIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gaG93IHRoZSBmcmFtZWJ1ZmZlciBjb25zb2xlIGhhbmRsZXMgZm9udCBzZXR0aW5nLiBHaXZlbiB0aGF0IGBmYmNvbl9kb19zZXRfZm9udGAgaXMgdGhlIHRhcmdldCwgYW5kIGBmYmNvbi5jYCBoYXMgYmVlbiBkaXJlY3RseSBlZGl0ZWQsIHRoaXMgaXMgZGVmaW5pdGVseSBhIHJlYWNoYWJsZSBjb2RlIHBhdGguIEdpdmVuIGl0cyByZWxldmFuY2UgdG8gZm9udCBzZXR0aW5ncywgaXQmIzM5O3MgdmVyeSBsaWtlbHkgdG8gYmUgd29ydGggZnV6emluZywgYW5kIEkgc2hvdWxkIHNlZSBpZiBJIGNhbiBmaW5kIHRoZSByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYGZiY29uLmNgIGFuZCBob3cgaXQmIzM5O3MgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdHJpZ2dlcnMgdGhpcyBgcm90YXRlX2ZvbnRgIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGZpcnN0IHBsYWNlLCBidXQgdGhlIGNvbmRpdGlvbmFsIGNoZWNrLCBhbmQgdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGJsaXR0aW5nIHR5cGVzLCBzaG91bGQgYmUgZ29vZCBwbGFjZXMgdG8gc3RhcnQgdGhlIGZ1enppbmcgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYmNvbi5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aWRlby9mYmRldi9jb3JlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9NYWtlZmlsZT0xNT1pZmVxICgkKENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFKSx5KVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL01ha2VmaWxlOjE2OmZiLXlcdFx0XHRcdCAgJiM0Mzs9IGZiY29uLm8gYml0YmxpdC5vIHNvZnRjdXJzb3Iub1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL01ha2VmaWxlLTE3LWlmZXEgKCQoQ09ORklHX0ZCX1RJTEVCTElUVElORykseSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTA2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBpczoKCioqRXhhbWluaW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgY29uZmlnIGFuZCBzZWUgYEZSQU1FQlVGRkVSX0NPTlNPTEVgIGlzIHNldC4gTXkgbmV4dCBzdGVwIGlzIGF1dG9tYXRpYyDigJMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBpdGVtJiMzOTtzIHBsYWNlIGluIHRoZSBicm9hZGVyIGNvbmZpZ3VyYXRpb24uIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBqdXN0IGtub3dpbmcgdGhlIHN0YXRlIG9mIG9uZSBjb25maWcgb3B0aW9uIGlzIHJhcmVseSBlbm91Z2ggdG8gZHJhdyBhbnkgdmFsaWQgY29uY2x1c2lvbnMuIFdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSByZWx5IG9uIGl0PyBBcmUgdGhlcmUgYW55IG9wdGlvbnMgdGhpcyBvbmUgZGVwZW5kcyBvbj8gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzLCBvciBsYWNrIHRoZXJlb2YsIG9mIGBGUkFNRUJVRkZFUl9DT05TT0xFYCB3aWxsIGRldGVybWluZSB3aGF0IG90aGVyIGl0ZW1zIEkgbWF5IGhhdmUgdG8gY29uc2lkZXIgZHVyaW5nIHRoZSBuZXh0IHBoYXNlcyBvZiBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRlJBTUVCVUZGRVJfQ09OU09MRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTE1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgRnJhbWVidWZmZXIgQ29uc29sZSBEcml2ZXJzKioKClJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byBmaW5kIHRoZSByZWxldmFudCBjb2RlLCBhbmQgYmFzZWQgb24gZXhwZXJpZW5jZSwgYEZSQU1FQlVGRkVSX0NPTlNPTEVgIGlzIHRoZSBrZXl3b3JkIEkmIzM5O20gYWZ0ZXIuIE5vdywgd2hlcmUgd291bGQgdGhlIGRyaXZlcnMgZm9yIHRoYXQgbGlrZWx5IHJlc2lkZT8gVGhlIGxvZ2ljYWwgcGxhY2UgaXMgdW5kZXIgdGhlIGBkcml2ZXJzL3ZpZGVvL2AgZGlyZWN0b3J5IGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGF0JiMzOTtzIHRoZSBicm9hZCBzdHJva2VzIHZpZGVvIGRyaXZlciBzZWN0aW9uLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIHN0YXJ0IGxvb2tpbmcuIENvbnNpZGVyaW5nIGhvdyBjb25zb2xlIGRyaXZlcnMgaW50ZXJhY3Qgd2l0aCB0aGUgZnJhbWVidWZmZXIsIEkmIzM5O2xsIGFsc28gY2hlY2sgYGRyaXZlcnMvdmlkZW8vY29uc29sZS9gLiBJdCYjMzk7cyBhIGJpdCBtb3JlIHNwZWNpZmljIGFuZCBtaWdodCBjb250YWluIG1vcmUgZm9jdXNlZCBpbXBsZW1lbnRhdGlvbnMsIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCByZWxldmFudCBoZWFkZXIgZmlsZXMgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTtsbCBzZWFyY2ggYm90aCBhcmVhcyBtZXRob2RpY2FsbHkuIFRoYXQmIzM5O3MgdGhlIHBsYW4uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSB0dXJuIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGUkFNRUJVRkZFUl9DT05TT0xFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aWRlby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWc9NDc9Y29uZmlnIERVTU1ZX0NPTlNPTEVfUk9XU1xuLS1cbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnLTU3LVxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWc6NTg6Y29uZmlnIEZSQU1FQlVGRkVSX0NPTlNPTEVcbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtGcmFtZWJ1ZmZlciBDb25zb2xlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZy02Ny1cbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnOjY4OmNvbmZpZyBGUkFNRUJVRkZFUl9DT05TT0xFX0xFR0FDWV9BQ0NFTEVSQVRJT05cbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtFbmFibGUgbGVnYWN5IGZiY29uIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBjb2RlXCYjMzQ7XG4tLVxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWctODctXG5kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZzo4ODpjb25maWcgRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWVxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWctODktICAgICAgIGJvb2wgXCYjMzQ7TWFwIHRoZSBjb25zb2xlIHRvIHRoZSBwcmltYXJ5IGRpc3BsYXkgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWctMTAzLVxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWc6MTA0OmNvbmZpZyBGUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OXG5kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZy0xMDUtICAgICAgIGJvb2wgXCYjMzQ7RnJhbWVidWZmZXIgQ29uc29sZSBSb3RhdGlvblwmIzM0O1xuLS1cbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnLTExMy1cbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnOjExNDpjb25maWcgRlJBTUVCVUZGRVJfQ09OU09MRV9ERUZFUlJFRF9UQUtFT1ZFUlxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWctMTE1LVx0Ym9vbCBcJiMzNDtGcmFtZWJ1ZmZlciBDb25zb2xlIERlZmVycmVkIFRha2VvdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY5NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25zb2xlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlIHZpZGVvIGNvbnNvbGUgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhpcyBrZXJuZWwuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBgZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbiBhcm91bmQgbGluZSA1OC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGJhc2ljIGZlYXR1cmUgZGVmaW5pdGlvbnMgaW4gdGhpcyBzZWN0aW9uLCBsaWtlbHkgcmVsYXRpbmcgdG8gdGhlIGNvcmUgY29uc29sZSBkcml2ZXIgaXRzZWxmLCBtYXliZSBvcHRpb25zIGZvciBzZWxlY3RpbmcgZGVmYXVsdCBtb2RlcyBvciBoYW5kbGluZyBkaWZmZXJlbnQgdHlwZXMgb2YgaGFyZHdhcmUuIEnigJltIGd1ZXNzaW5nIGl04oCZcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZ2V0IGFuIG92ZXJ2aWV3IG9mIHdoYXTigJlzIGF2YWlsYWJsZSBiZWZvcmUgbG9va2luZyBhdCBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBmb2xsb3cuIEnigJltIHRoaW5raW5nIEkgY2FuIGZpbmQgc29tZSBvZiB0aGUgY29yZSB2YXJpYWJsZXMgb3Igb3B0aW9ucyBiZWluZyBzZXQgaGVyZSB0aGF0IHdpbGwgcHJvYmFibHkgYmUgcmVsZXZhbnQgdG8gb3RoZXIgYXNwZWN0cyBvZiB0aGUgdmlkZW8gc3RhY2sgYXMgd2VsbC4gSXQgY291bGQgYmUgdXNlZnVsIGZvciBmaW5kaW5nIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTA6XHRcdGRlZmF1bHQgNjQgaWYgUEFSSVNDXG4gIDUxOlx0XHRkZWZhdWx0IDMwIGlmIEFSTVxuICA1MjpcdFx0ZGVmYXVsdCAyNVxuICA1MzpcdFx0aGVscFxuICA1NDpcdFx0ICBPbiBQQS1SSVNDLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyA2NCwgd2hpY2ggc2hvdWxkIGZpdCBhIDEyODB4MTAyNFxuICA1NTpcdFx0ICBtb25pdG9yLlxuICA1NjpcdFx0ICBTZWxlY3QgMjUgaWYgeW91IHVzZSBhIDY0MHg0ODAgcmVzb2x1dGlvbiBieSBkZWZhdWx0LlxuICA1NzpcdFxuICA1ODpcdGNvbmZpZyBGUkFNRUJVRkZFUl9DT05TT0xFXG4gIDU5Olx0XHRib29sIFwmIzM0O0ZyYW1lYnVmZmVyIENvbnNvbGUgc3VwcG9ydFwmIzM0O1xuICA2MDpcdFx0ZGVwZW5kcyBvbiBGQl9DT1JFIFx1MDAyNlx1MDAyNiAhVU1MXG4gIDYxOlx0XHRkZWZhdWx0IERSTV9GQkRFVl9FTVVMQVRJT05cbiAgNjI6XHRcdHNlbGVjdCBWVF9IV19DT05TT0xFX0JJTkRJTkdcbiAgNjM6XHRcdHNlbGVjdCBDUkMzMlxuICA2NDpcdFx0c2VsZWN0IEZPTlRfU1VQUE9SVFxuICA2NTpcdFx0aGVscFxuICA2NjpcdFx0ICBMb3ctbGV2ZWwgZnJhbWVidWZmZXItYmFzZWQgY29uc29sZSBkcml2ZXIuXG4gIDY3Olx0XG4gIDY4Olx0Y29uZmlnIEZSQU1FQlVGRkVSX0NPTlNPTEVfTEVHQUNZX0FDQ0VMRVJBVElPTlxuICA2OTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgbGVnYWN5IGZiY29uIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBjb2RlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMjIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBGcmFtZWJ1ZmZlciBDb25zb2xlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBGUkFNRUJVRkZFUl9DT05TT0xFYCBhbmQgdGhlIGJ1aWxkIHN5c3RlbSYjMzk7cyBsb2dpYy4gSXQmIzM5O3MgdGVsbGluZyBtZSB0aGF0IHRoaXMgcGFydGljdWxhciBjb25zb2xlIG9wdGlvbiBoaW5nZXMgZGlyZWN0bHkgb24gdGhlIHByZXNlbmNlIG9mIGBGQl9DT1JFYCwgYnV0IGl0IGFsc28gKmNhbiYjMzk7dCogYmUgZW5hYmxlZCB3aGVuIHJ1bm5pbmcgdW5kZXIgVU1MLiBIbW0sIHRoYXQmIzM5O3Mgbm90IHN1cnByaXNpbmcsIGFzIFVNTCBvZnRlbiBkb2VzbiYjMzk7dCBoYXZlIGEgZnJhbWVidWZmZXIgYXZhaWxhYmxlLiBOb3csIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IGBGQl9DT1JFYCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGRlZmluZXMgdGhlIGNvcmUgZnJhbWVidWZmZXIgc3VwcG9ydCwgc2luY2UgdGhhdCYjMzk7cyBhIHByZXJlcXVpc2l0ZSBmb3IgYEZSQU1FQlVGRkVSX0NPTlNPTEVgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBpbXBsaWVzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGQl9DT1JFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aWRlby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aWRlby9mYmRldi9jb3JlL0tjb25maWctNS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9LY29uZmlnOjY6Y29uZmlnIEZCX0NPUkVcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9LY29uZmlnLTctXHRzZWxlY3QgVklERU9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ4OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB0aGUgRnJhbWVidWZmZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgZnJhbWVidWZmZXIgY29yZSYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBoZWFkaW5nIHRvIGBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvS2NvbmZpZ2AgYXJvdW5kIGxpbmUgNi4gSSYjMzk7bSBhc3N1bWluZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBwcmltYXJ5IEZCREVWIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gc2VlIHRoZSBtYWluIGBDT05GSUdfRkJgIG9wdGlvbiBkZWNsYXJlZCB0aGVyZSwgYWxvbmcgd2l0aCBzb21lIG9mIHRoZSBtb3JlIGZ1bmRhbWVudGFsIGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdHMuIERlcGVuZGluZyBvbiB3aGF0IEkgZmluZCwgdGhpcyB3aWxsIGluZm9ybSB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIGhvdyB0aGUgRkJERVYgc3Vic3lzdGVtIGlzIGJ1aWx0IGFuZCBjb25maWd1cmVkIGludG8gdGhlIGtlcm5lbC4gSXTigJlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgZnJhbWVidWZmZXJzIGFyZSBlbmFibGVkIGFuZCwgYnkgZXh0ZW5zaW9uLCBob3cgdGhlIHJlc3Qgb2YgdGhlIGdyYXBoaWNzIHN0YWNrIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgZmJkZXYgY29yZSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBGQl9DT1JFXG4gICA3Olx0XHRzZWxlY3QgVklERU9cbiAgIDg6XHRcdHRyaXN0YXRlXG4gICA5Olx0XG4gIDEwOlx0Y29uZmlnIEZCX05PVElGWVxuICAxMTpcdFx0Ym9vbFxuICAxMjpcdFxuICAxMzpcdGNvbmZpZyBGQl9ERVZJQ0VcbiAgMTQ6XHRcdGJvb2wgXCYjMzQ7UHJvdmlkZSBsZWdhY3kgL2Rldi9mYiogZGV2aWNlXCYjMzQ7XG4gIDE1Olx0XHRkZXBlbmRzIG9uIEZCX0NPUkVcbiAgMTY6XHRcdGRlZmF1bHQgRkJcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0aGUgbGVnYWN5IC9kZXYvZmIqIGRldmljZSBmaWxlIGFuZFxuICAxOTpcdFx0ICBpbnRlcmZhY2VzIHdpdGhpbiBzeXNmcyBhbmQgcHJvY2ZzLiBJdCBpcyBvbmx5IHJlcXVpcmVkIGlmIHlvdVxuICAyMDpcdFx0ICBoYXZlIHVzZXJzcGFjZSBwcm9ncmFtcyB0aGF0IGRlcGVuZCBvbiBmYmRldiBmb3IgZ3JhcGhpY3Mgb3V0cHV0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTY2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRm9udCBSb3RhdGlvbiBMb2dpYyBpbiB0aGUgRnJhbWVidWZmZXIgQ29uc29sZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBiYWNrIGludG8gdGhpcyBmcmFtZWJ1ZmZlciBmb250IHJvdGF0aW9uIGlzc3VlLiBSZW1pbmRpbmcgbXlzZWxmIHRoYXQgYEZSQU1FQlVGRkVSX0NPTlNPTEVgIGFuZCBgRkJfQ09SRWAgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgaW4gcGxheSBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIG1vcmUgZGVlcGx5LgoKTGV0JiMzOTtzIHJlLWV4YW1pbmUgdGhhdCBjb2RlIHNuaXBwZXQuIFJpZ2h0LCBpdCYjMzk7cyBpbnNpZGUgYGZiY29uX2RvX3NldF9mb250YC4gU3BlY2lmaWNhbGx5LCBpdCBjaGVja3MgaWYgdGhlIHZpcnR1YWwgY29uc29sZSAoYHZjYCkgaXMgdmlzaWJsZS4gSWYgaXQgaXMsIGFuZCBpZiB0aGUgZnJhbWVidWZmZXImIzM5O3MgYml0IG9wZXJhdGlvbnMgaGF2ZSBhIGByb3RhdGVfZm9udGAgZnVuY3Rpb24gZGVmaW5lZCAqYW5kKiB0aGF0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGNhbGxlZCB3aXRoIHRoZSB2aWRlbyBpbmZvcm1hdGlvbiwgdGhlbiB3ZSBzZXQgdGhlIGBwYXItJmd0O3JvdGF0ZWAgZmxhZyB0byBgRkJfUk9UQVRFX1VSYCBhbmQgdXBkYXRlIHRoZSBibGl0dGluZyB0eXBlLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgY29uZmlybSB0aGUgc2NvcGUgb2YgYGZiY29uX2RvX3NldF9mb250YC4gR29vZCwgaXQgKmlzKiBhIHN0YXRpYyBmdW5jdGlvbjogYHN0YXRpYyBpbnQgZmJjb25fZG9fc2V0X2ZvbnQoLi4uKWAuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gV2hvJiMzOTtzIGNhbGxpbmcgdGhpcyBgZmJjb25fZG9fc2V0X2ZvbnRgPyBJIGhhdmUgdG8gdHJhY2UgYmFjayB0aGUgY2FsbGVycyB0byBnZXQgYSBmdWxsIHBpY3R1cmUgb2YgaG93IHRoaXMgZm9udCByb3RhdGlvbiBtZWNoYW5pc20gaXMgYWN0dWFsbHkgdHJpZ2dlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYmNvbl9kb19zZXRfZm9udCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTIzNDA9c3RhdGljIHZvaWQgc2V0X3ZjX2hpX2ZvbnQoc3RydWN0IHZjX2RhdGEgKnZjLCBib29sIHNldClcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yMzk5LVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjQwMDpzdGF0aWMgaW50IGZiY29uX2RvX3NldF9mb250KHN0cnVjdCB2Y19kYXRhICp2YywgaW50IHcsIGludCBoLCBpbnQgY2hhcmNvdW50LFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQwMS1cdFx0XHQgICAgIGZvbnRfZGF0YV90ICpkYXRhKVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI0ODY9c3RhdGljIGludCBmYmNvbl9zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGNvbnN0IHN0cnVjdCBjb25zb2xlX2ZvbnQgKmZvbnQsXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjUzMS1cdH1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI1MzI6XHRyZXQgPSBmYmNvbl9kb19zZXRfZm9udCh2YywgZm9udC1cdTAwM2V3aWR0aCwgZm9udC1cdTAwM2VoZWlnaHQsIGNoYXJjb3VudCwgbmV3X2RhdGEpO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjUzMy1cdGZvbnRfZGF0YV9wdXQobmV3X2RhdGEpO1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI1Mzg9c3RhdGljIGludCBmYmNvbl9zZXRfZGVmX2ZvbnQoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgY29uc29sZV9mb250ICpmb250LFxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI1NTEtXHRmb250LVx1MDAzZWhlaWdodCA9IGYtXHUwMDNlaGVpZ2h0O1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjU1MjpcdHJldHVybiBmYmNvbl9kb19zZXRfZm9udCh2YywgZi1cdTAwM2V3aWR0aCwgZi1cdTAwM2VoZWlnaHQsIGYtXHUwMDNlY2hhcmNvdW50LCBmLVx1MDAzZWRhdGEpO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjU1My19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MDEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCB0aGlzIGFyZWE6CgoqKkNoZWNraW5nIEZvbnQgSGFuZGxpbmcgaW4gdGhlIEtlcm5lbCoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBmYmNvbl9zZXRfZm9udGAgYW5kIGBmYmNvbl9zZXRfZGVmX2ZvbnRgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBzZXR0aW5nIHRoZSBmb250IGZvciB0aGUgZnJhbWVidWZmZXIgY29uc29sZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSB0aGV5IGFjdHVhbGx5ICpleHBvcnRlZCogc3ltYm9scz8gT3IgYXJlIHRoZXkgdHVja2VkIGF3YXksIG1heWJlIHBhcnQgb2Ygc29tZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBmcmFtZWJ1ZmZlciBkcml2ZXI/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGVpciB2aXNpYmlsaXR5LiBLbm93aW5nIHRoaXMgd2lsbCBpbW1lZGlhdGVseSBpbmZvcm0gaG93IEkmIzM5O2QgYXBwcm9hY2ggdXNpbmcgb3IgbW9kaWZ5aW5nIHRoZW0sIGFuZCB3aGV0aGVyIEkgY2FuIGRpcmVjdGx5IGNhbGwgdGhlbSBvciBuZWVkIHRvIHdvcmsgdGhyb3VnaCBzb21lIG90aGVyIG1lY2hhbmlzbS4gSXQgYWxzbyB0ZWxscyBtZSBhYm91dCB0aGUgZGVzaWduIGNob2ljZXMgdGhlIGRldmVsb3BlciBtYWRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYmNvbl9zZXRfZm9udCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI0MDA9c3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCxcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNDg1LVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjQ4NjpzdGF0aWMgaW50IGZiY29uX3NldF9mb250KHN0cnVjdCB2Y19kYXRhICp2YywgY29uc3Qgc3RydWN0IGNvbnNvbGVfZm9udCAqZm9udCxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI0ODctXHRcdFx0ICB1bnNpZ25lZCBpbnQgdnBpdGNoLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MzE3NT1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN3IGZiX2NvbiA9IHtcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0zMTg1LVx0LmNvbl9ibGFuayBcdFx0PSBmYmNvbl9ibGFuayxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjMxODY6XHQuY29uX2ZvbnRfc2V0IFx0XHQ9IGZiY29uX3NldF9mb250LFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMzE4Ny1cdC5jb25fZm9udF9nZXQgXHRcdD0gZmJjb25fZ2V0X2ZvbnQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MzEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipGb2N1c2luZyBvbiBGb250IFNldHRpbmcgaW4gdGhlIEZyYW1lYnVmZmVyIENvbnNvbGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBmYmNvbl9zZXRfZm9udGAgYW5kIGl0JiMzOTtzIGNsZWFybHkgYSBrZXkgZnVuY3Rpb24uIEl0JiMzOTtzIHBhcnQgb2YgYGZiX2NvbmAsIHdoaWNoIGlzIGltcGxlbWVudGVkIGFzIGEgYHN0cnVjdCBjb25zd2AuIFRoYXQgYGNvbnN3YCBzdHJ1Y3R1cmUgbWVhbnMgdGhpcyBmdW5jdGlvbiBwbGF5cyBhIHJvbGUgaW4gdGhlIGNvbnNvbGUsIHNvIHNldHRpbmcgdGhlIGZvbnQgbXVzdCBiZSBhIHByZXR0eSBjZW50cmFsIHRhc2suIGBmYmNvbl9zZXRfZm9udGAgaGFzIHRvIGJlIGEgZ29vZCBzeW1ib2wgdG8gY29uY2VudHJhdGUgb24gdG8gdW5kZXJzdGFuZCBob3cgdGhlIGZvbnQgaXMgbWFuaXB1bGF0ZWQuCgpOb3csIHRoYXQgZ2V0cyBtZSB0aGlua2luZzogd2hhdCBhYm91dCBgZmJjb25fc2V0X2RlZl9mb250YD8gSXMgdGhhdCBqdXN0IGEgZGVmYXVsdCBvciBpcyBpdCBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBmYmNvbl9zZXRfZm9udGAgYW5kIGBmYmNvbl9zZXRfZGVmX2ZvbnRgLCBtYXliZSB0aGVyZSBhcmUgc29tZSBkZWZhdWx0IGZvbnRzIGxvYWRlZCwgYW5kIHRoaXMgaXMgd2hlcmUgdGhhdCYjMzk7cyBoYW5kbGVkLiBNYXliZSBpdCBjYWxscyBgZmJjb25fc2V0X2ZvbnRgIHRvIHNldCB0aGUgbmV3IGRlZmF1bHQsIG9yIG1heWJlIHRoZSBkZWZhdWx0IGZvbnQgaXMgc2V0IG9uY2Ugb24gYm9vdCB1cC4gSSBuZWVkIHRvIGRpZyBpbnRvIGl0IGEgYml0IG1vcmUgdG8gdW5kZXJzdGFuZCB0aGUgYmlnIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZiY29uX3NldF9kZWZfZm9udCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI0ODY9c3RhdGljIGludCBmYmNvbl9zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGNvbnN0IHN0cnVjdCBjb25zb2xlX2ZvbnQgKmZvbnQsXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjUzNy1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI1Mzg6c3RhdGljIGludCBmYmNvbl9zZXRfZGVmX2ZvbnQoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgY29uc29sZV9mb250ICpmb250LFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjUzOS1cdFx0XHQgICAgICBjb25zdCBjaGFyICpuYW1lKVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTMxNzU9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdyBmYl9jb24gPSB7XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMzE4Ny1cdC5jb25fZm9udF9nZXQgXHRcdD0gZmJjb25fZ2V0X2ZvbnQsXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzozMTg4Olx0LmNvbl9mb250X2RlZmF1bHRcdD0gZmJjb25fc2V0X2RlZl9mb250LFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMzE4OS1cdC5jb25fc2V0X3BhbGV0dGUgXHQ9IGZiY29uX3NldF9wYWxldHRlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDY0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGJvdGggYGZiY29uX3NldF9mb250YCBhbmQgYGZiY29uX3NldF9kZWZfZm9udGAgYXJlIHBvdGVudGlhbGx5IHN0cm9uZyBjYW5kaWRhdGVzIGZvciBmb2N1c2luZyBvdXIgYXR0ZW50aW9uIGhlcmUuIFRoZXkgc2VlbSBsaWtlIGtleSBwb2ludHMgaW4gdGhlIGZvbnQgaGFuZGxpbmcuIEJ1dCwga25vd2luZyB0aGlzLCBJIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBlbHNlIGluIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHdpZGVyIGNvbmZpZ3VyYXRpb24uIFRoZSBjb2RlIHJlZmVyZW5jZXMgYHBhci0mZ3Q7Yml0b3BzLSZndDtyb3RhdGVfZm9udGAg4oCTIEkgc2hvdWxkIGRldGVybWluZSBpZiBgcm90YXRlX2ZvbnRgIGlzIHRpZWQgdG8gYSBwYXJ0aWN1bGFyIHNldHRpbmcgb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZy4gV2UgbmVlZCB0byBhc2NlcnRhaW4gaWYgaXRzIHByZXNlbmNlLCBvciBhYnNlbmNlLCBpcyBkaWN0YXRlZCBieSBhIHNwZWNpZmljIGJ1aWxkIGNvbmZpZ3VyYXRpb24gb3IgZGV2aWNlIHByb2ZpbGUuIFRoaXMgY291bGQgYmUgY3J1Y2lhbCB0byBpZGVudGlmeWluZyBhIHNwZWNpZmljIGlzc3VlIGlmIHRoZXJlIGFyZSBhbnkgdGhhdCBoYXZlIGNvbWUgdG8gbGlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JvdGF0ZV9mb250JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aWRlby9mYmRldi9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0xMDg4PXN0YXRpYyB2b2lkIGZiY29uX2luaXQoc3RydWN0IHZjX2RhdGEgKnZjLCBib29sIGluaXQpXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTIyOC1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjEyMjk6XHRpZiAocGFyLVx1MDAzZWJpdG9wcy1cdTAwM2Vyb3RhdGVfZm9udCBcdTAwMjZcdTAwMjYgcGFyLVx1MDAzZWJpdG9wcy1cdTAwM2Vyb3RhdGVfZm9udChpbmZvLCB2YykpIHtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTEyMzAtXHRcdHBhci1cdTAwM2Vyb3RhdGUgPSBGQl9ST1RBVEVfVVI7XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MjE0Mz1zdGF0aWMgYm9vbCBmYmNvbl9zd2l0Y2goc3RydWN0IHZjX2RhdGEgKnZjKVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTIyMTYtXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoyMjE3Olx0aWYgKHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQgXHUwMDI2XHUwMDI2IHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQoaW5mbywgdmMpKSB7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yMjE4LVx0XHRwYXItXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI0MDA9c3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCxcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNDI4LVx0aWYgKGNvbl9pc192aXNpYmxlKHZjKSkge1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjQyOTpcdFx0aWYgKHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQgXHUwMDI2XHUwMDI2IHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQoaW5mbywgdmMpKSB7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNDMwLVx0XHRcdHBhci1cdTAwM2Vyb3RhdGUgPSBGQl9ST1RBVEVfVVI7XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQ2OS1cdGlmIChjb25faXNfdmlzaWJsZSh2YykpIHtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI0NzA6XHRcdGlmIChwYXItXHUwMDNlYml0b3BzLVx1MDAzZXJvdGF0ZV9mb250IFx1MDAyNlx1MDAyNiBwYXItXHUwMDNlYml0b3BzLVx1MDAzZXJvdGF0ZV9mb250KGluZm8sIHZjKSkge1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQ3MS1cdFx0XHRwYXItXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI2NDQ9c3RhdGljIHZvaWQgZmJjb25fbW9kZWNoYW5nZWQoc3RydWN0IGZiX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjY3Ny1cdCAqL1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjY3ODpcdGlmIChwYXItXHUwMDNlYml0b3BzLVx1MDAzZXJvdGF0ZV9mb250IFx1MDAyNlx1MDAyNiBwYXItXHUwMDNlYml0b3BzLVx1MDAzZXJvdGF0ZV9mb250KGluZm8sIHZjKSkge1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjY3OS1cdFx0cGFyLVx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uaD01OT1zdHJ1Y3QgZmJjb25fYml0b3BzIHtcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uaC03MS1cdGludCAgKCp1cGRhdGVfc3RhcnQpKHN0cnVjdCBmYl9pbmZvICppbmZvKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5oOjcyOlx0aW50ICAoKnJvdGF0ZV9mb250KShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZjX2RhdGEgKnZjKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5oLTczLX07XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jPTM2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGZiY29uX2JpdG9wcyBjY3dfZmJjb25fYml0b3BzID0ge1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYy0zNjktXHQudXBkYXRlX3N0YXJ0ID0gY2N3X3VwZGF0ZV9zdGFydCxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYzozNzA6XHQucm90YXRlX2ZvbnQgPSBmYmNvbl9yb3RhdGVfZm9udCxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYy0zNzEtfTtcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYz0zNDY9c3RhdGljIGNvbnN0IHN0cnVjdCBmYmNvbl9iaXRvcHMgY3dfZmJjb25fYml0b3BzID0ge1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jLTM1Mi1cdC51cGRhdGVfc3RhcnQgPSBjd191cGRhdGVfc3RhcnQsXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYzozNTM6XHQucm90YXRlX2ZvbnQgPSBmYmNvbl9yb3RhdGVfZm9udCxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jLTM1NC19O1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYy0xNy1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYzoxODppbnQgZmJjb25fcm90YXRlX2ZvbnQoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2Y19kYXRhICp2YylcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYy0xOS17XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5oLTIxLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5oOjIyOmludCBmYmNvbl9yb3RhdGVfZm9udChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZjX2RhdGEgKnZjKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuaC0yMy1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYz0zOTc9c3RhdGljIGNvbnN0IHN0cnVjdCBmYmNvbl9iaXRvcHMgdWRfZmJjb25fYml0b3BzID0ge1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jLTQwMy1cdC51cGRhdGVfc3RhcnQgPSB1ZF91cGRhdGVfc3RhcnQsXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYzo0MDQ6XHQucm90YXRlX2ZvbnQgPSBmYmNvbl9yb3RhdGVfZm9udCxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jLTQwNS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzAzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOgoKKipFeGFtaW5pbmcgRm9udCBSb3RhdGlvbiBJbXBsZW1lbnRhdGlvbnMqKgoKT2theSwgc28gYHJvdGF0ZV9mb250YC4uLiB0aGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBJIGtub3cgaXQuIEFuZCwgSSByZWNhbGwgaXQmIzM5O3MgdXNlZCB3aXRoaW4gYGZiY29uX3JvdGF0ZS5jYCwgYGZiY29uX2Njdy5jYCwgYGZiY29uX2N3LmNgLCBhbmQgYGZiY29uX3VkLmNgLiBOb3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aG9zZSBzb3VyY2UgZmlsZXMgYW5kIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMuIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhlIGNvbmZpZyBmaWxlczsgdGhhdCB3aWxsIGJlIHRoZSBtb3N0IGVmZmljaWVudCBhcHByb2FjaCB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmJjb25fcm90YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aWRlby9mYmRldi9jb3JlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9NYWtlZmlsZT0yMD1pZmVxICgkKENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OKSx5KVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL01ha2VmaWxlOjIxOmZiLXlcdFx0XHRcdCAgJiM0Mzs9IGZiY29uX3JvdGF0ZS5vIGZiY29uX2N3Lm8gZmJjb25fdWQubyBcXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL01ha2VmaWxlLTIyLVx0XHRcdFx0ICAgICBmYmNvbl9jY3cub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDM2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkNvbnNpZGVyaW5nIGBGUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OYCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY29uc29sZSByb3RhdGlvbiB3aXRoaW4gdGhlIGZyYW1lYnVmZmVyLCB3aGljaCBpcyBhIGtleSBjb25zaWRlcmF0aW9uIHdoZW4gZGVhbGluZyB3aXRoIGRpc3BsYXlzIHRoYXQgYXJlbiYjMzk7dCBvcmllbnRlZCBpbiB0aGUgc3RhbmRhcmQgbGFuZHNjYXBlIG1vZGUuIElmIHdlJiMzOTtyZSBpbmNvcnBvcmF0aW5nIGZyYW1lYnVmZmVyIHN1cHBvcnQsIGl0JiMzOTtzIHByZXR0eSBsaWtlbHkgd2UmIzM5O2xsIGFsc28gbmVlZCB0aGUgYWJpbGl0eSB0byByb3RhdGUgdGhlIGNvbnNvbGUgb3V0cHV0LiBPdGhlcndpc2UsIHRoZSB1c2VyIGV4cGVyaWVuY2UgY291bGQgYmUsIHdlbGwsIHVwc2lkZSBkb3duLCBzaWRld2F5cywgb3IgZ2VuZXJhbGx5IGZydXN0cmF0aW5nLiBJdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBhZGRpdGlvbiB0byB0aGUgb3ZlcmFsbCBmcmFtZWJ1ZmZlciBjb25maWd1cmF0aW9uLgoKR2l2ZW4gdGhpcywgSSBzaG91bGQgaW1tZWRpYXRlbHkgY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnYC4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgYEZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT05gLiBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIGRlZmluZWQgYW5kIGNvcnJlY3RseSBoYW5kbGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHJlbGF0ZWQgb3B0aW9ucyB3aWxsIGJlIGNydWNpYWwuIEkmIzM5O2xsIGFsc28gYmUgbG9va2luZyBmb3IgYW55IGRvY3VtZW50YXRpb24gb3IgY29tbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb3B0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIGludGVuZGVkIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgY2F2ZWF0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZz04OD1jb25maWcgRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWVxuLS1cbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnLTEwMy1cbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnOjEwNDpjb25maWcgRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTlxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWctMTA1LSAgICAgICBib29sIFwmIzM0O0ZyYW1lYnVmZmVyIENvbnNvbGUgUm90YXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQzMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHRoZSBDb25zb2xlIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIGNvbnNvbGUgZHJpdmVycyBhcmUgZGVmaW5lZC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYGRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDEwNC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBjb25zb2xlLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlc2lkZS4gSSBhbnRpY2lwYXRlIGZpbmRpbmcgdGhlIGNvcmUgZGVmaW5pdGlvbnMgZm9yIHRoZSBzdXBwb3J0ZWQgY29uc29sZSB0eXBlcyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIHRoZXJlLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBiZSBhYmxlIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gb3RoZXIgb3B0aW9ucywgc3VjaCBhcyBncmFwaGljcyBjYXJkIGRyaXZlcnMsIGZyYW1lYnVmZmVycywgYW5kIHNlcmlhbCBwb3J0cy4gTXkgZ29hbCBpcyB0byBxdWlja2x5IHBpbnBvaW50IHdoaWNoIG9wdGlvbnMgSSBuZWVkIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRvIGFjaGlldmUgdGhlIGRlc2lyZWQgY29uc29sZSBiZWhhdmlvciBmb3IgdGhpcyBzcGVjaWZpYyBwbGF0Zm9ybSwgYXMgd2VsbCBhcyB0aGVpciByZWxldmFudCBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDk1Olx0XHQgc3VwcG9ydHMgdGhpcyBmZWF0dXJlKS4gIE90aGVyd2lzZSwgdGhlIGZyYW1lYnVmZmVyIGNvbnNvbGUgd2lsbFxuICA5NjpcdFx0IGFsd2F5cyBzZWxlY3QgdGhlIGZpcnN0IGZyYW1lYnVmZmVyIGRyaXZlciB0aGF0IGlzIGxvYWRlZC4gVGhlIGxhdHRlclxuICA5NzpcdFx0IGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLlxuICA5ODpcdFxuICA5OTpcdFx0IFlvdSBjYW4gYWx3YXlzIG92ZXJyaWRlIHRoZSBhdXRvbWF0aWMgc2VsZWN0aW9uIG9mIHRoZSBwcmltYXJ5IGRldmljZVxuIDEwMDpcdFx0IGJ5IHVzaW5nIHRoZSBmYmNvbj1tYXA6IGJvb3Qgb3B0aW9uLlxuIDEwMTpcdFxuIDEwMjpcdFx0IElmIHVuc3VyZSwgc2VsZWN0IG4uXG4gMTAzOlx0XG4gMTA0Olx0Y29uZmlnIEZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT05cbiAxMDU6XHQgICAgICAgYm9vbCBcJiMzNDtGcmFtZWJ1ZmZlciBDb25zb2xlIFJvdGF0aW9uXCYjMzQ7XG4gMTA2Olx0ICAgICAgIGRlcGVuZHMgb24gRlJBTUVCVUZGRVJfQ09OU09MRVxuIDEwNzpcdCAgICAgICBoZWxwXG4gMTA4Olx0XHQgRW5hYmxlIGRpc3BsYXkgcm90YXRpb24gZm9yIHRoZSBmcmFtZWJ1ZmZlciBjb25zb2xlLiAgVGhpcyBpcyBkb25lXG4gMTA5Olx0XHQgaW4gc29mdHdhcmUgYW5kIG1heSBiZSBzaWduaWZpY2FudGx5IHNsb3dlciB0aGFuIGEgbm9ybWFsbHkgb3JpZW50ZWRcbiAxMTA6XHRcdCBkaXNwbGF5LiAgTm90ZSB0aGF0IHRoZSByb3RhdGlvbiBpcyBkb25lIGF0IHRoZSBjb25zb2xlIGxldmVsIG9ubHlcbiAxMTE6XHRcdCBzdWNoIHRoYXQgb3RoZXIgdXNlcnMgb2YgdGhlIGZyYW1lYnVmZmVyIHdpbGwgcmVtYWluIG5vcm1hbGx5XG4gMTEyOlx0XHQgb3JpZW50ZWQuXG4gMTEzOlx0XG4gMTE0Olx0Y29uZmlnIEZSQU1FQlVGRkVSX0NPTlNPTEVfREVGRVJSRURfVEFLRU9WRVJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk0NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBGcmFtZWJ1ZmZlciBDb25zb2xlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTmAgc2V0dGluZy4gVGhlIGRlcGVuZGVuY3kgdHJlZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyBpdCBoaW5nZXMgb24gYEZSQU1FQlVGRkVSX0NPTlNPTEVgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMsIHNvIGxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0uIFJpZ2h0LCBJIGhhdmUgYEZCX0NPUkVgLCBgRlJBTUVCVUZGRVJfQ09OU09MRWAsIGFuZCBgRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTmAgdG8gY29uc2lkZXIuCgpOb3csIG15IG1haW4gY29uY2VybiBpcyB3aGV0aGVyIEkgY2FuIG1hbmlwdWxhdGUgdGhlIGZyYW1lYnVmZmVyIGNvbnNvbGUmIzM5O3MgZm9udCBmcm9tIHVzZXIgc3BhY2UsIHNwZWNpZmljYWxseSB1c2luZyBgZmJjb25fc2V0X2ZvbnRgLiBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyBwYXJ0IG9mIGBmYl9jb25gLCB3aGljaCBpdHNlbGYgaXMgbmVzdGVkIHdpdGhpbiBhIGBzdHJ1Y3QgY29uc3dgLiBUaGlzIGBzdHJ1Y3QgY29uc3dgIGlzIHRoZSBjb25zb2xlIHN3aXRjaCBzdHJ1Y3R1cmUuIEV4Y2VsbGVudC4KClRoZSByZWFsIHF1ZXN0aW9uIGlzIGhvdyB0byBnZXQgYXQgdGhpcyBmdW5jdGlvbmFsaXR5LiBNeSB0aG91Z2h0IGlzIGBpb2N0bChmZCwgUElPX0ZPTlQsIC4uLilgIG9yIGEgc2ltaWxhciBpb2N0bCBjYWxsIG9uIGEgY29uc29sZSBkZXZpY2UgbGlrZSBgL2Rldi90dHkqYCBvciBgL2Rldi9jb25zb2xlYCBtaWdodCBkbyB0aGUgdHJpY2suIEkgc2VlbSB0byByZWNhbGwgdGhhdCB0aGUgYHZ0X2lvY3RsYCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgYFBJT19GT05UYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBieSByZXZpZXdpbmcgdGhlIGNvZGUgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uX2ZvbnRfc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy90dHkvdnQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3Z0L3Z0LmM9NDkxMD1zdGF0aWMgaW50IGNvbl9mb250X2dldChzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBjb25zb2xlX2ZvbnRfb3AgKm9wKVxuLS1cbmRyaXZlcnMvdHR5L3Z0L3Z0LmMtNDk1NC1cbmRyaXZlcnMvdHR5L3Z0L3Z0LmM6NDk1NTpzdGF0aWMgaW50IGNvbl9mb250X3NldChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGNvbnN0IHN0cnVjdCBjb25zb2xlX2ZvbnRfb3AgKm9wKVxuZHJpdmVycy90dHkvdnQvdnQuYy00OTU2LXtcbi0tXG5kcml2ZXJzL3R0eS92dC92dC5jLTQ5ODUtXHRcdHJldHVybiAtRUlOVkFMO1xuZHJpdmVycy90dHkvdnQvdnQuYzo0OTg2Olx0aWYgKCF2Yy1cdTAwM2V2Y19zdy1cdTAwM2Vjb25fZm9udF9zZXQpXG5kcml2ZXJzL3R0eS92dC92dC5jLTQ5ODctXHRcdHJldHVybiAtRU5PU1lTO1xuLS1cbmRyaXZlcnMvdHR5L3Z0L3Z0LmMtNDk5MS1cbmRyaXZlcnMvdHR5L3Z0L3Z0LmM6NDk5MjpcdHJldHVybiB2Yy1cdTAwM2V2Y19zdy1cdTAwM2Vjb25fZm9udF9zZXQodmMsIFx1MDAyNmZvbnQsIHZwaXRjaCwgb3AtXHUwMDNlZmxhZ3MpO1xuZHJpdmVycy90dHkvdnQvdnQuYy00OTkzLX1cbi0tXG5kcml2ZXJzL3R0eS92dC92dC5jPTUwMjc9aW50IGNvbl9mb250X29wKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGNvbnNvbGVfZm9udF9vcCAqb3ApXG4tLVxuZHJpdmVycy90dHkvdnQvdnQuYy01MDMxLVx0Y2FzZSBLRF9GT05UX09QX1NFVF9UQUxMOlxuZHJpdmVycy90dHkvdnQvdnQuYzo1MDMyOlx0XHRyZXR1cm4gY29uX2ZvbnRfc2V0KHZjLCBvcCk7XG5kcml2ZXJzL3R0eS92dC92dC5jLTUwMzMtXHRjYXNlIEtEX0ZPTlRfT1BfR0VUOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgwNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIFJlYXNvbmluZyBmb3IgRm9udCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIHRyYWNlZCB0aGUgZm9udCBzZXR0aW5nIGZ1bmN0aW9uYWxpdHkuIEl0IGxvb2tzIGxpa2UgYGNvbl9mb250X3NldGAgdWx0aW1hdGVseSBjYWxscyBgdmMtJmd0O3ZjX3N3LSZndDtjb25fZm9udF9zZXRgLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlbiwgYGNvbl9mb250X29wYCBpcyB0aGUgaGFuZGxlciBmb3IgYEtEX0ZPTlRfT1BfU0VUYC4gVGhhdCBwYXJ0JiMzOTtzIGNsZWFyIOKAkyB1c2VyIHNwYWNlIGludGVyYWN0cyB3aXRoIGl0IHZpYSBpb2N0bCwganVzdCBhcyBJIGV4cGVjdGVkLgoKTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBJdCBsb29rcyBsaWtlIGBmYmNvbl9zZXRfZm9udGAgYW5kIGBmYmNvbl9zZXRfZGVmX2ZvbnRgIGFyZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnRzIGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kLgoKTmV4dCwgSSBuZWVkIHRvIHJlbWVtYmVyIHdoYXQmIzM5O3MgcmVsZXZhbnQgaW4gdGVybXMgb2YgY29uZmlncy4gTG9va3MgbGlrZSBgRkJfQ09SRWAsIGBGUkFNRUJVRkZFUl9DT05TT0xFYCwgYW5kIGBGUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OYCBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gZG91YmxlLWNoZWNrIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgaW50ZXJhY3Rpb25zLgoKVGhlIGJpZyBxdWVzdGlvbiBub3cgaXMgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQuIERvZXMganVzdCBgRkJfQ09SRWAgZ2l2ZSBtZSBlbm91Z2ggdG8gcnVuIGEgdGVzdD8gT3Igd2lsbCBJIG5lZWQgYSBtb3JlIGNvbmNyZXRlIGZyYW1lYnVmZmVyIGRyaXZlciB0byB1c2UgYXMgYSB0ZXN0YmVkPyBJIHRoaW5rIEkmIzM5O2xsIG5lZWQgYSBzcGVjaWZpYyBkcml2ZXIuIEkmIzM5O20gdGhpbmtpbmcgYERSTV9GQkRFVl9FTVVMQVRJT05gIG9yIGBGQl9WSVJUVUFMYCBjb3VsZCBiZSB1c2VmdWwgaGVyZS4gSG93ZXZlciwgYEZCX0RVTU1ZYCBtaWdodCBkbyB0aGUgdHJpY2sgdG9vLiBJJiMzOTtsbCBnbyB3aXRoIGVpdGhlciBgRkJfVklSVFVBTGAgb3IgYEZCX0RVTU1ZYC4gTGV0JiMzOTtzIHNlZSB3aGljaCBpcyBzaW1wbGVyIHRvIHNldCB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZCX1ZJUlRVQUwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZpZGVvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpZGVvL2ZiZGV2L0tjb25maWc9MTY0NT1jb25maWcgRkJfU0g3NzYwXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnLTE2NTctXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L0tjb25maWc6MTY1ODpjb25maWcgRkJfVklSVFVBTFxuZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnLTE2NTktXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIEZyYW1lIEJ1ZmZlciBzdXBwb3J0IChPTkxZIEZPUiBURVNUSU5HISlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NjkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIExpbnV4IEZyYW1lYnVmZmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBkcml2ZXJzL3ZpZGVvL2ZiZGV2L0tjb25maWdgIGZpbGUuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gbGluZSAxNjU4LCBiZWNhdXNlIGJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIHRoYXQmIzM5O3Mgb2Z0ZW4gd2hlcmUgeW91IGZpbmQgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gW2luc2VydCB5b3VyIGZpZWxkIGhlcmUsIGUuZy4sIGEgc3BlY2lmaWMgZnJhbWVidWZmZXIgZHJpdmVyIG9yIGZlYXR1cmVdLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBgY29uZmlnYCBkaXJlY3RpdmVzLCBtYXliZSBzb21lIGBtZW51Y29uZmlnYCBvciBgY2hvaWNlYCBzdHJ1Y3R1cmVzLCBhbmQgaG9wZWZ1bGx5LCBzb21lIGhlbHBmdWwgY29tbWVudHMgZXhwbGFpbmluZyB0aGUgbG9naWMgYmVoaW5kIHRoZSBzZXR0aW5ncy4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoZSBmcmFtZWJ1ZmZlciBkcml2ZXIgY3VzdG9taXphdGlvbiB1c3VhbGx5IHJlc2lkZXMsIGFuZCB1bmRlcnN0YW5kaW5nIHRoaXMgcGFydCBpcyBrZXkgdG8gYW55IGRlZXBlciBpbnZlc3RpZ2F0aW9uIG9yIHBvdGVudGlhbCBtb2RpZmljYXRpb25zIEkgbWlnaHQgbmVlZCB0byBtYWtlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4gSSYjMzk7bSBhbHJlYWR5IGZvcm11bGF0aW5nIGh5cG90aGVzZXMgYWJvdXQgd2hhdCBJICpzaG91bGQqIGZpbmQsIGdpdmVuIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiB0aGVzZSBLY29uZmlnIGZpbGVzLiBUaW1lIHRvIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY1MDpcdFx0aGVscFxuMTY1MTpcdFx0ICBTdXBwb3J0IGZvciB0aGUgU0g3NzYwL1NINzc2My9TSDc3MjAvU0g3NzIxIGludGVncmF0ZWRcbjE2NTI6XHRcdCAgKEQpU1ROL1RGVCBMQ0QgQ29udHJvbGxlci5cbjE2NTM6XHRcdCAgU3VwcG9ydHMgZGlzcGxheSByZXNvbHV0aW9ucyB1cCB0byAxMDI0eDEwMjQgcGl4ZWwsIGdyYXlzY2FsZSBhbmRcbjE2NTQ6XHRcdCAgY29sb3Igb3BlcmF0aW9uLCB3aXRoIGRlcHRocyByYW5naW5nIGZyb20gMSBicHAgdG8gOCBicHAgbW9ub2Nocm9tZVxuMTY1NTpcdFx0ICBhbmQgOCwgMTUgb3IgMTYgYnBwIGNvbG9yOyA5MCBkZWdyZWVzIGNsb2Nrd2lzZSBkaXNwbGF5IHJvdGF0aW9uIGZvclxuMTY1NjpcdFx0ICBwYW5lbHMgXHUwMDNjPSAzMjAgcGl4ZWwgaG9yaXpvbnRhbCByZXNvbHV0aW9uLlxuMTY1NzpcdFxuMTY1ODpcdGNvbmZpZyBGQl9WSVJUVUFMXG4xNjU5Olx0XHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIEZyYW1lIEJ1ZmZlciBzdXBwb3J0IChPTkxZIEZPUiBURVNUSU5HISlcJiMzNDtcbjE2NjA6XHRcdGRlcGVuZHMgb24gRkJcbjE2NjE6XHRcdHNlbGVjdCBGQl9TWVNNRU1fSEVMUEVSU1xuMTY2MjpcdFx0aGVscFxuMTY2MzpcdFx0ICBUaGlzIGlzIGEgYHZpcnR1YWwmIzM5OyBmcmFtZSBidWZmZXIgZGV2aWNlLiBJdCBvcGVyYXRlcyBvbiBhIGNodW5rIG9mXG4xNjY0Olx0XHQgIHVuc3dhcHBhYmxlIGtlcm5lbCBtZW1vcnkgaW5zdGVhZCBvZiBvbiB0aGUgbWVtb3J5IG9mIGEgZ3JhcGhpY3NcbjE2NjU6XHRcdCAgYm9hcmQuIFRoaXMgbWVhbnMgeW91IGNhbm5vdCBzZWUgYW55IG91dHB1dCBzZW50IHRvIHRoaXMgZnJhbWVcbjE2NjY6XHRcdCAgYnVmZmVyIGRldmljZSwgd2hpbGUgaXQgZG9lcyBjb25zdW1lIHByZWNpb3VzIG1lbW9yeS4gVGhlIG1haW4gdXNlXG4xNjY3Olx0XHQgIG9mIHRoaXMgZnJhbWUgYnVmZmVyIGRldmljZSBpcyB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcgdGhlIGZyYW1lXG4xNjY4Olx0XHQgIGJ1ZmZlciBzdWJzeXN0ZW0uIERvIE5PVCBlbmFibGUgaXQgZm9yIG5vcm1hbCBzeXN0ZW1zISBUbyBwcm90ZWN0XG4xNjY5Olx0XHQgIHRoZSBpbm5vY2VudCwgaXQgaGFzIHRvIGJlIGVuYWJsZWQgZXhwbGljaXRseSBhdCBib290IHRpbWUgdXNpbmcgdGhlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTM3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBkZXBlbmRlbmN5OgoKKipFeGFtaW5pbmcgYSBEZXBlbmRlbmN5OiBGQl9WSVJUVUFMIGFuZCBGQioqCgpPa2F5LCBzbyBgRkJfVklSVFVBTGAgaGFzIGEgZGVwZW5kZW5jeSBvbiBgRkJgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZS4gQmVmb3JlIEkgZGl2ZSBkZWVwZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYEZCYCBpcyBkb2luZyBhbmQgaXRzIGN1cnJlbnQgc3RhdGUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiBgRkJgIGl0c2VsZi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIGl0LiBVbmRlcnN0YW5kaW5nIGBGQmAgaXMgdGhlIGNyaXRpY2FsIGZpcnN0IHN0ZXAgaW4gcHJvcGVybHkgYXNzZXNzaW5nIHRoZSBpbXBhY3Qgb24gYEZCX1ZJUlRVQUxgLiBJIG5lZWQgdG8gYXNzZXNzIHdoYXQgY2hhbmdlcyB0byBgRkJgIGFyZSBuZWNlc3NhcnkgYW5kIGhvdyB0aGlzIGVmZmVjdHMgdGhlIHN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZCJCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvS2NvbmZpZy01LVxuZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnOjY6bWVudWNvbmZpZyBGQlxuZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtTdXBwb3J0IGZvciBmcmFtZSBidWZmZXIgZGV2aWNlIGRyaXZlcnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzOTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCB0ZXh0OgoKKipEaXZpbmcgaW50byB0aGUgYGZiZGV2YCBLY29uZmlnKioKCk9rYXksIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBgZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnYCBmaWxlIGFuZCB6ZXJvIGluIGFyb3VuZCBsaW5lIDYuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCYjMzk7cyB3aGVyZSB3ZSYjMzk7bGwgZmluZCB0aGUgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciB0aGUgZnJhbWVidWZmZXIgZGV2aWNlIGRyaXZlciBjb3JlLiBOZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5LCBsaWtlbHkgaXQmIzM5O3MgYENPTkZJR19GQmAgb3Igc29tZXRoaW5nIHNpbWlsYXIgdGhhdCBlbmFibGVzIHRoZSBlbnRpcmUgc3Vic3lzdGVtLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBiZSBhYmxlIHRvIHdvcmsgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBvcHRpb25zIHByZXNlbnRlZCB3aXRoaW4gdGhhdCBmaWxlLCBnZXR0aW5nIGEgaGFuZGxlIG9uIHRoZSBzdHJ1Y3R1cmUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHdlIGRlZmluZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgc3Vic3lzdGVtcywgbGlrZSBncmFwaGljcyBkcml2ZXJzLCBvciBpbnB1dCBkcml2ZXJzLCBldGMuIGFuZCBob3cgdGhleSYjMzk7cmUgZXhwb3NlZCB2aWEgdGhlIEtjb25maWcgc3RydWN0dXJlLiBTaG91bGQgYmUgYSBzdHJhaWdodGZvcndhcmQgc3RhcnQsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgYmFzZSBjb25maWd1cmF0aW9uIGZvciBhbnkgZnJhbWVidWZmZXIgd29yayBJIG5lZWQgdG8gZG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgZmJkZXYgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIEZCXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtTdXBwb3J0IGZvciBmcmFtZSBidWZmZXIgZGV2aWNlIGRyaXZlcnNcJiMzNDtcbiAgIDg6XHRcdHNlbGVjdCBGQl9DT1JFXG4gICA5Olx0XHRzZWxlY3QgRkJfTk9USUZZXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIFRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIHByb3ZpZGVzIGFuIGFic3RyYWN0aW9uIGZvciB0aGUgZ3JhcGhpY3NcbiAgMTI6XHRcdCAgaGFyZHdhcmUuIEl0IHJlcHJlc2VudHMgdGhlIGZyYW1lIGJ1ZmZlciBvZiBzb21lIHZpZGVvIGhhcmR3YXJlIGFuZFxuICAxMzpcdFx0ICBhbGxvd3MgYXBwbGljYXRpb24gc29mdHdhcmUgdG8gYWNjZXNzIHRoZSBncmFwaGljcyBoYXJkd2FyZSB0aHJvdWdoXG4gIDE0Olx0XHQgIGEgd2VsbC1kZWZpbmVkIGludGVyZmFjZSwgc28gdGhlIHNvZnR3YXJlIGRvZXNuJiMzOTt0IG5lZWQgdG8ga25vd1xuICAxNTpcdFx0ICBhbnl0aGluZyBhYm91dCB0aGUgbG93LWxldmVsIChoYXJkd2FyZSByZWdpc3Rlcikgc3R1ZmYuXG4gIDE2Olx0XG4gIDE3Olx0XHQgIEZyYW1lIGJ1ZmZlciBkZXZpY2VzIHdvcmsgaWRlbnRpY2FsbHkgYWNyb3NzIHRoZSBkaWZmZXJlbnRcbiAgMTg6XHRcdCAgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0ZWQgYnkgTGludXggYW5kIG1ha2UgdGhlIGltcGxlbWVudGF0aW9uIG9mXG4gIDE5Olx0XHQgIGFwcGxpY2F0aW9uIHByb2dyYW1zIGVhc2llciBhbmQgbW9yZSBwb3J0YWJsZTsgYXQgdGhpcyBwb2ludCwgYW4gWFxuICAyMDpcdFx0ICBzZXJ2ZXIgZXhpc3RzIHdoaWNoIHVzZXMgdGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZXhjbHVzaXZlbHkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTIzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IEZyYW1lYnVmZmVyIENvbnNvbGUgYW5kIEZvbnQgUm90YXRpb24qKgoKT2theSwgc28gdGhlIGdvYWwgaXMgY2xlYXJseSB0byB0YXJnZXQgYGZiY29uYCBmdW5jdGlvbmFsaXR5LiBUaGUgc2VsZWN0aW9uIG9mIGBGQl9DT1JFYCBhcyB0aGUgYmFzZSBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRvIG1ha2UgdGhpcyB0ZXN0YWJsZSwgSSYjMzk7bGwgbmVlZCBhIGZyYW1lYnVmZmVyIGRldmljZS4gYEZCX1ZJUlRVQUxgIG9yIGBEUk1fRkJERVZfRU1VTEFUSU9OYCBsb29rIGxpa2UgdGhlIGJlc3QgYmV0cyBoZXJlLCB3aGljaCBhbGlnbnMgd2l0aCBob3cgc3l6a2FsbGVyIHR5cGljYWxseSBoYW5kbGVzIHRoZXNlIHNjZW5hcmlvcyDigJMgYEZCX1ZJUlRVQUxgIG9yIGBEUk1fVktNU2Agd2l0aCBgRFJNX0ZCREVWX0VNVUxBVElPTmAgc2hvdWxkIGNvdmVyIGl0LgoKVGhlcmVmb3JlLCBJJiMzOTtsbCBhZGQgYEZCYCwgYEZCX1ZJUlRVQUxgLCBgRlJBTUVCVUZGRVJfQ09OU09MRWAsIGFuZCBgRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTmAgdG8gdGhlIGNvbmZpZ3VyYXRpb24uIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBmdXp6aW5nIHRoZSBjb25zb2xlLgoKTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgYW5kIHJldmlldyB0aGUgcmVsZXZhbnQgcGF0Y2ggYWdhaW4uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluOgpgYGBjCglpZiAoY29uX2lzX3Zpc2libGUodmMpKSB7CgkJaWYgKHBhci0mZ3Q7Yml0b3BzLSZndDtyb3RhdGVfZm9udCAmYW1wOyZhbXA7IHBhci0mZ3Q7Yml0b3BzLSZndDtyb3RhdGVfZm9udChpbmZvLCB2YykpIHsKCQkJcGFyLSZndDtyb3RhdGUgPSBGQl9ST1RBVEVfVVI7CgkJCXNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTsKCQl9Cgl9CmBgYApUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGBmYmNvbl9kb19zZXRfZm9udGAuIEl0IG1vZGlmaWVzIGBwYXItJmd0O3JvdGF0ZWAgYW5kIGNhbGxzIGBzZXRfYmxpdHRpbmdfdHlwZWAsIHdoaWNoIGlzIGRlZmluaXRlbHkgd29ydGggdGFyZ2V0aW5nLiBUaGVzZSBhcmUgZXhhY3RseSB0aGUgdHlwZXMgb2YgY2hhbmdlcyB0aGF0IGNhbiBsZWFkIHRvIGludGVyZXN0aW5nIGJ1Z3MuCgpCYXNlZCBvbiB0aGlzLCBteSBmb2N1cyBzeW1ib2xzIGFyZSBjbGVhcjogYGZiY29uX3NldF9mb250YCBhbmQgYGZiY29uX3NldF9kZWZfZm9udGAuIFRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzLgoKSSB3aWxsIGFsc28gbmVlZCB0byByZXZpZXcgYHNldF9ibGl0dGluZ190eXBlYCBhbmQgZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIGEgd29ydGh3aGlsZSBmb2N1cyBzeW1ib2wuCgoqKkluIHN1bW1hcnksIG15IGNvbmZpZyB3aWxsIGluY2x1ZGU6KioKKiAgIGBGQmAKKiAgIGBGQl9WSVJUVUFMYAoqICAgYEZSQU1FQlVGRkVSX0NPTlNPTEVgCiogICBgRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTmAKCkFuZCB0aGUgZm9jdXMgc3ltYm9scyB3aWxsIGJlIGBmYmNvbl9zZXRfZm9udGAsIGBmYmNvbl9zZXRfZGVmX2ZvbnRgLCBhbmQgYHNldF9ibGl0dGluZ190eXBlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0X2JsaXR0aW5nX3R5cGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz02NDE9c3RhdGljIHZvaWQgZmJjb25fcHJlcGFyZV9sb2dvKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8sXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtNzMwLSNpZmRlZiBDT05GSUdfRkJfVElMRUJMSVRUSU5HXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzo3MzE6c3RhdGljIHZvaWQgc2V0X2JsaXR0aW5nX3R5cGUoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbylcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTczMi17XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9NzQ1PXN0YXRpYyBpbnQgZmJjb25faW52YWxpZF9jaGFyY291bnQoc3RydWN0IGZiX2luZm8gKmluZm8sIHVuc2lnbmVkIGNoYXJjb3VudClcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy03NTUtI2Vsc2VcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjc1NjpzdGF0aWMgdm9pZCBzZXRfYmxpdHRpbmdfdHlwZShzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvKVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtNzU3LXtcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz04Mjc9c3RhdGljIGludCBjb24yZmJfYWNxdWlyZV9uZXdpbmZvKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8sXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtODM2LVx0aWYgKHZjKVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6ODM3Olx0XHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy04MzgtXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9OTEyPXN0YXRpYyBpbnQgc2V0X2NvbjJmYl9tYXAoaW50IHVuaXQsIGludCBuZXdpZHgsIGludCB1c2VyKVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTk0Mi1cdH0gZWxzZSBpZiAodmMpIHtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjk0MzpcdFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtOTQ0LVx0fVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTEwMTQ9c3RhdGljIGNvbnN0IGNoYXIgKmZiY29uX3N0YXJ0dXAodm9pZClcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0xMDUzLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MTA1NDpcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTEwNTUtXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MTA4OD1zdGF0aWMgdm9pZCBmYmNvbl9pbml0KHN0cnVjdCB2Y19kYXRhICp2YywgYm9vbCBpbml0KVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTExNzUtXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoxMTc2Olx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTE3Ny1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0xMjMwLVx0XHRwYXItXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MTIzMTpcdFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTIzMi1cdH1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0yMTQzPXN0YXRpYyBib29sIGZiY29uX3N3aXRjaChzdHJ1Y3QgdmNfZGF0YSAqdmMpXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjIxMy1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjIyMTQ6XHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yMjE1LVx0cGFyLVx1MDAzZWN1cnNvcl9yZXNldCA9IDE7XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjIxOC1cdFx0cGFyLVx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjIyMTk6XHRcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTIyMjAtXHR9XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MjQwMD1zdGF0aWMgaW50IGZiY29uX2RvX3NldF9mb250KHN0cnVjdCB2Y19kYXRhICp2YywgaW50IHcsIGludCBoLCBpbnQgY2hhcmNvdW50LFxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI0MzAtXHRcdFx0cGFyLVx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI0MzE6XHRcdFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQzMi1cdFx0fVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI0NzEtXHRcdFx0cGFyLVx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI0NzI6XHRcdFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQ3My1cdFx0fVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI2NDQ9c3RhdGljIHZvaWQgZmJjb25fbW9kZWNoYW5nZWQoc3RydWN0IGZiX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjY2OC1cdHAgPSBcdTAwMjZmYl9kaXNwbGF5W3ZjLVx1MDAzZXZjX251bV07XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoyNjY5Olx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjY3MC1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNjc5LVx0XHRwYXItXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjY4MDpcdFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjY4MS1cdH1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0yNzA0PXN0YXRpYyB2b2lkIGZiY29uX3NldF9hbGxfdmNzKHN0cnVjdCBmYl9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI3MjgtXHRcdHAgPSBcdTAwMjZmYl9kaXNwbGF5W3ZjLVx1MDAzZXZjX251bV07XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoyNzI5Olx0XHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNzMwLVx0XHR2YXJfdG9fZGlzcGxheShwLCBcdTAwMjZpbmZvLVx1MDAzZXZhciwgaW5mbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzY0CgkJCQkJCQlvdXRwdXQ6IDEzNAoJCQkJCQkJdGhvdWdodHM6IDE4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGb250IFJvdGF0aW9uIFBhdGNoKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBhcyBJIHNlZSBpdCwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGlzIG1vZGlmeWluZyBob3cgdGhlIGZyYW1lYnVmZmVyIGNvbnNvbGUgaGFuZGxlcyBmb250IHNldHRpbmdzLCBzcGVjaWZpY2FsbHkgd2hlbiByb3RhdGlvbiBpcyBlbmFibGVkLiBJdCYjMzk7cyB0b3VjaGluZyB0aGUgYGZiY29uX2RvX3NldF9mb250YCBmdW5jdGlvbiwgd2hpY2ggaXMsIG9mIGNvdXJzZSwgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBjb25zb2xlIHJlbmRlcmluZy4KCkkgdGhpbmsgdGhlIGltcG9ydGFudCB0aGluZyB0byBmb2N1cyBvbiBhcmUgdGhlIGVudHJ5IHBvaW50cyDigJMgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBleGFtaW5lIGBmYmNvbl9zZXRfZm9udGAgYW5kIGBmYmNvbl9zZXRfZGVmX2ZvbnRgLiBgc2V0X2JsaXR0aW5nX3R5cGVgIGJlaW5nIHN0YXRpYyBhbmQgdXNlZCBpbiB2YXJpb3VzIHBsYWNlcyBpcyBhIGJpdCBvZiBhIHJlZCBoZXJyaW5nLCB3ZSBuZWVkIHRvIGNvbmNlbnRyYXRlIG9uIHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGZ1bmN0aW9ucy4KClRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nOyBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgaXQgaW1wYWN0cyBhIHZlcnkgY2VudHJhbCBhbmQgYWNjZXNzaWJsZSBwYXJ0IG9mIHRoZSBzeXN0ZW0sIHRoZSBmcmFtZWJ1ZmZlciBjb25zb2xlLiBBbnkgaXNzdWUgaGVyZSBjb3VsZCBsZWFkIHRvIHZpc3VhbCBjb3JydXB0aW9uLCBjcmFzaGVzLCBvciBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBkZXBlbmRpbmcgb24gaG93IGZvbnRzIGFyZSBoYW5kbGVkIGFuZCByZW5kZXJlZCB3aXRoIHRoZSByb3RhdGlvbi4KCkkgd2lsbCB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cuIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYEZCYCwgYEZCX1ZJUlRVQUxgLCBgRlJBTUVCVUZGRVJfQ09OU09MRWAsIGFuZCBgRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTmAgYXJlIGFsbCBnb2luZyB0byBiZSBlc3NlbnRpYWwgZm9yIHRlc3RpbmcgdGhpcy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBvdXIgZnV6emluZyBjYW1wYWlnbnMgYXJlIGNvbXByZWhlbnNpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGQiYjMzQ7LAogICAgJiMzNDtGQl9WSVJUVUFMJiMzNDssCiAgICAmIzM0O0ZSQU1FQlVGRkVSX0NPTlNPTEUmIzM0OywKICAgICYjMzQ7RlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZiY29uX3NldF9mb250JiMzNDssCiAgICAmIzM0O2ZiY29uX3NldF9kZWZfZm9udCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBmcmFtZWJ1ZmZlciBjb25zb2xlIGZvbnQgc2V0dGluZyBsb2dpYyAoZmJjb25fZG9fc2V0X2ZvbnQpIHRvIGhhbmRsZSBmb250IHJvdGF0aW9uIHdoZW4gdGhlIGNvbnNvbGUgaXMgdmlzaWJsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGNvcmUgc3Vic3lzdGVtIChmYmNvbikgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBpb2N0bHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZCJiMzNDssCiAgICAmIzM0O0ZCX1ZJUlRVQUwmIzM0OywKICAgICYjMzQ7RlJBTUVCVUZGRVJfQ09OU09MRSYjMzQ7LAogICAgJiMzNDtGUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmJjb25fc2V0X2ZvbnQmIzM0OywKICAgICYjMzQ7ZmJjb25fc2V0X2RlZl9mb250JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGZyYW1lYnVmZmVyIGNvbnNvbGUgZm9udCBzZXR0aW5nIGxvZ2ljIChmYmNvbl9kb19zZXRfZm9udCkgdG8gaGFuZGxlIGZvbnQgcm90YXRpb24gd2hlbiB0aGUgY29uc29sZSBpcyB2aXNpYmxlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgY29yZSBzdWJzeXN0ZW0gKGZiY29uKSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXIgc3BhY2UgdmlhIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgZmJjb25fZG9fc2V0X2ZvbnRgIHdoZXJlIGNoYW5naW5nIHRoZSBmb250IGNoYXJhY3RlciBjb3VudCAoZS5nLiwgZnJvbSAyNTYgdG8gNTEyKSB3aXRob3V0IHVwZGF0aW5nIHRoZSByb3RhdGVkIGZvbnQgYnVmZmVyIChgcGFyLVx1MDAzZXJvdGF0ZWQuYnVmYCkgbGVhZHMgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkLiBXaGVuIGBmYmNvbmAgcmVuZGVycyB0ZXh0LCBpdCB1c2VzIHRoZSBuZXcgY2hhcmFjdGVyIGNvdW50IHRvIGluZGV4IGludG8gdGhlIG9sZCwgc21hbGxlciBidWZmZXIsIHJlc3VsdGluZyBpbiBhIGhlYXAgT09CIHJlYWQuIFRoaXMgaXMgYSBjbGFzc2ljIG1lbW9yeSBzYWZldHkgaXNzdWUgdGhhdCBpcyByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvcm1hdGlvbiBsZWFrIHRvIHVzZXIgc3BhY2UgaW52b2x2ZWQsIGFzIHRoZSBidWZmZXIgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdXAgdG8gaXRzIGFsbG9jYXRlZCBzaXplLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRkNTg4ZTIwMmU0M2Y4M2E3ZTg5NGY3NzA3NDBiODhjOGYzNjI2OGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAwMjowNzo0NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jIGIvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMKaW5kZXggMjNiM2M1MzZkNTNkMS4uYzc0YTQ5MDViOGUyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMKQEAgLTI0MjUsNiAmIzQzOzI0MjUsMTMgQEAgc3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCwKIAllbHNlIGlmICghdmMtJmd0O3ZjX2hpX2ZvbnRfbWFzayAmYW1wOyZhbXA7IGNoYXJjb3VudCA9PSA1MTIpCiAJCXNldF92Y19oaV9mb250KHZjLCB0cnVlKTsKIAomIzQzOwlpZiAoY29uX2lzX3Zpc2libGUodmMpKSB7CiYjNDM7CQlpZiAocGFyLSZndDtiaXRvcHMtJmd0O3JvdGF0ZV9mb250ICZhbXA7JmFtcDsgcGFyLSZndDtiaXRvcHMtJmd0O3JvdGF0ZV9mb250KGluZm8sIHZjKSkgewomIzQzOwkJCXBhci0mZ3Q7cm90YXRlID0gRkJfUk9UQVRFX1VSOwomIzQzOwkJCXNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCWlmIChyZXNpemUpIHsKIAkJaW50IGNvbHMsIHJvd3M7CiAKQEAgLTI0NTksNiAmIzQzOzI0NjYsMTMgQEAgc3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCwKIAllbHNlIGlmICghb2xkX2hpX2ZvbnRfbWFzayAmYW1wOyZhbXA7IHZjLSZndDt2Y19oaV9mb250X21hc2spCiAJCXNldF92Y19oaV9mb250KHZjLCBmYWxzZSk7CiAKJiM0MzsJaWYgKGNvbl9pc192aXNpYmxlKHZjKSkgewomIzQzOwkJaWYgKHBhci0mZ3Q7Yml0b3BzLSZndDtyb3RhdGVfZm9udCAmYW1wOyZhbXA7IHBhci0mZ3Q7Yml0b3BzLSZndDtyb3RhdGVfZm9udChpbmZvLCB2YykpIHsKJiM0MzsJCQlwYXItJmd0O3JvdGF0ZSA9IEZCX1JPVEFURV9VUjsKJiM0MzsJCQlzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlmb250X2RhdGFfcHV0KGRhdGEpOwogCiAJcmV0dXJuIHJldDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRm9udCBSb3RhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgc29tZSBsb2dpYyBhcm91bmQgZm9udCByb3RhdGlvbiwgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBgZmJjb25fZG9fc2V0X2ZvbnRgLiBUd28gaWRlbnRpY2FsIGJsb2NrcyBvZiBjb2RlIGFyZSBhZGRlZCB0aGF0IGludHJvZHVjZSBhIGNoZWNrIGZvciB2aXNpYmlsaXR5IGFuZCBjYWxsIGBwYXItJmd0O2JpdG9wcy0mZ3Q7cm90YXRlX2ZvbnRgIGlmIHRoZSBjb25zb2xlIGlzIHZpc2libGUuIFRoZW4gaXQmIzM5O3Mgc2V0dGluZyBgcGFyLSZndDtyb3RhdGVgIHRvIGBGQl9ST1RBVEVfVVJgIGFuZCBjYWxsaW5nIGBzZXRfYmxpdHRpbmdfdHlwZWAuCgpNeSBpbW1lZGlhdGUgY29uY2VybiwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHdoYXQgYHJvdGF0ZV9mb250YCBhY3R1YWxseSAqZG9lcyouIElzIGl0IGFsbG9jYXRpbmcgbWVtb3J5PyBDb3VsZCB0aGVyZSBiZSBhIHBvdGVudGlhbCBmb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSB3aXRoaW4gdGhhdCBmdW5jdGlvbj8gVGhlIGNvbW1lbnQgc3VnZ2VzdHMgYSBmb250IHJvdGF0aW9uIGJ1ZyBmaXgsIHdoaWNoIGNvdWxkIHZlcnkgd2VsbCBtZWFuIGEgY3Jhc2ggb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYHJvdGF0ZV9mb250YCBmdW5jdGlvbiBjb21wbGV0ZWx5IHRvIGFzc2VzcyB0aGUgcmlzay4gSSYjMzk7bGwgc3RhcnQgd2l0aCBhIHF1aWNrIGdyZXAgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQgYW5kIHNlZSBob3cgaXQmIzM5O3MgdXNlZCBlbHNld2hlcmUsIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHJlZCBmbGFncyBpbiBpdHMgaW1wbGVtZW50YXRpb24uIE1lbW9yeSBzYWZldHkgaXMgYWx3YXlzIGEgcHJpbWFyeSBjb25jZXJuIGluIGRyaXZlciBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyb3RhdGVfZm9udCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MTA4OD1zdGF0aWMgdm9pZCBmYmNvbl9pbml0KHN0cnVjdCB2Y19kYXRhICp2YywgYm9vbCBpbml0KVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTEyMjgtXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoxMjI5Olx0aWYgKHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQgXHUwMDI2XHUwMDI2IHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQoaW5mbywgdmMpKSB7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0xMjMwLVx0XHRwYXItXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTIxNDM9c3RhdGljIGJvb2wgZmJjb25fc3dpdGNoKHN0cnVjdCB2Y19kYXRhICp2Yylcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yMjE2LVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjIxNzpcdGlmIChwYXItXHUwMDNlYml0b3BzLVx1MDAzZXJvdGF0ZV9mb250IFx1MDAyNlx1MDAyNiBwYXItXHUwMDNlYml0b3BzLVx1MDAzZXJvdGF0ZV9mb250KGluZm8sIHZjKSkge1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjIxOC1cdFx0cGFyLVx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0yNDAwPXN0YXRpYyBpbnQgZmJjb25fZG9fc2V0X2ZvbnQoc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgdywgaW50IGgsIGludCBjaGFyY291bnQsXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQyOC1cdGlmIChjb25faXNfdmlzaWJsZSh2YykpIHtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI0Mjk6XHRcdGlmIChwYXItXHUwMDNlYml0b3BzLVx1MDAzZXJvdGF0ZV9mb250IFx1MDAyNlx1MDAyNiBwYXItXHUwMDNlYml0b3BzLVx1MDAzZXJvdGF0ZV9mb250KGluZm8sIHZjKSkge1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQzMC1cdFx0XHRwYXItXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI0NjktXHRpZiAoY29uX2lzX3Zpc2libGUodmMpKSB7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoyNDcwOlx0XHRpZiAocGFyLVx1MDAzZWJpdG9wcy1cdTAwM2Vyb3RhdGVfZm9udCBcdTAwMjZcdTAwMjYgcGFyLVx1MDAzZWJpdG9wcy1cdTAwM2Vyb3RhdGVfZm9udChpbmZvLCB2YykpIHtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI0NzEtXHRcdFx0cGFyLVx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0yNjQ0PXN0YXRpYyB2b2lkIGZiY29uX21vZGVjaGFuZ2VkKHN0cnVjdCBmYl9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI2NzctXHQgKi9cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI2Nzg6XHRpZiAocGFyLVx1MDAzZWJpdG9wcy1cdTAwM2Vyb3RhdGVfZm9udCBcdTAwMjZcdTAwMjYgcGFyLVx1MDAzZWJpdG9wcy1cdTAwM2Vyb3RhdGVfZm9udChpbmZvLCB2YykpIHtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI2NzktXHRcdHBhci1cdTAwM2Vyb3RhdGUgPSBGQl9ST1RBVEVfVVI7XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmg9NTk9c3RydWN0IGZiY29uX2JpdG9wcyB7XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmgtNzEtXHRpbnQgICgqdXBkYXRlX3N0YXJ0KShzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uaDo3MjpcdGludCAgKCpyb3RhdGVfZm9udCkoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2Y19kYXRhICp2Yyk7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uaC03My19O1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYz0zNjM9c3RhdGljIGNvbnN0IHN0cnVjdCBmYmNvbl9iaXRvcHMgY2N3X2ZiY29uX2JpdG9wcyA9IHtcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmMtMzY5LVx0LnVwZGF0ZV9zdGFydCA9IGNjd191cGRhdGVfc3RhcnQsXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmM6MzcwOlx0LnJvdGF0ZV9mb250ID0gZmJjb25fcm90YXRlX2ZvbnQsXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmMtMzcxLX07XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmM9MzQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJjb25fYml0b3BzIGN3X2ZiY29uX2JpdG9wcyA9IHtcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYy0zNTItXHQudXBkYXRlX3N0YXJ0ID0gY3dfdXBkYXRlX3N0YXJ0LFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmM6MzUzOlx0LnJvdGF0ZV9mb250ID0gZmJjb25fcm90YXRlX2ZvbnQsXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYy0zNTQtfTtcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtMTctXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmM6MTg6aW50IGZiY29uX3JvdGF0ZV9mb250KHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgdmNfZGF0YSAqdmMpXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtMTkte1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuaC0yMS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuaDoyMjppbnQgZmJjb25fcm90YXRlX2ZvbnQoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2Y19kYXRhICp2Yyk7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmgtMjMtXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmM9Mzk3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJjb25fYml0b3BzIHVkX2ZiY29uX2JpdG9wcyA9IHtcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYy00MDMtXHQudXBkYXRlX3N0YXJ0ID0gdWRfdXBkYXRlX3N0YXJ0LFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmM6NDA0Olx0LnJvdGF0ZV9mb250ID0gZmJjb25fcm90YXRlX2ZvbnQsXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYy00MDUtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExMAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBmYmNvbl9yb3RhdGVfZm9udGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBgZmJjb25fcm90YXRlX2ZvbnRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGZyYW1lYnVmZmVyIGNvbnNvbGUgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byBwaW4gZG93biB0aGUgY29yZSBmdW5jdGlvbiBvZiB0aGlzIHJvdXRpbmUuIElzIGl0IGFib3V0IHJlbmRlcmluZywgcmUtbWFwcGluZywgb3IgcG90ZW50aWFsbHkgYWx0ZXJpbmcgdGhlIGdseXBoIGFwcGVhcmFuY2UgYmFzZWQgb24gYSByb3RhdGlvbiBvciBwZXJzcGVjdGl2ZSBwYXJhbWV0ZXI/IEkmIzM5O20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIGNvbm5lY3QgaXQgdG8gdGhlIGxvdy1sZXZlbCBncmFwaGljcyBvcGVyYXRpb25zLiBJ4oCZbGwgYmUgbG9va2luZyB0byBzZWUgaWYgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSB2aWRlbyBjYXJkLCBmcmFtZWJ1ZmZlcnMsIG9yIGlmIGl0IGludGVyYWN0cyB3aXRoIHRoZSBzcGVjaWZpYyBmb250IGRhdGEgYmVpbmcgcmVuZGVyZWQuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgdGhpcyBpcyBoYW5kbGluZyBhIGZ1bmRhbWVudGFsIHRyYW5zZm9ybSBvZiB0aGUgY2hhcmFjdGVycyB0aGVtc2VsdmVzIG9yIGlmIGl0JiMzOTtzIG1vcmUgYWJvdXQgaG93IHRoZSBjb25zb2xlIGludGVycHJldHMgYW5kIGRpc3BsYXlzIHRoZW0gZ2l2ZW4gc29tZSB1bmRlcmx5aW5nIHJvdGF0aW9uIGNvbW1hbmRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYmNvbl9yb3RhdGVfZm9udCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtMTctXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmM6MTg6aW50IGZiY29uX3JvdGF0ZV9mb250KHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgdmNfZGF0YSAqdmMpXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtMTkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDQyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgdGV4dDoKCioqRGl2aW5nIGludG8gdGhlIGBmYmNvbl9yb3RhdGVfZm9udGAgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCB0aGUgc291cmNlIGNvZGUgZm9yIGBmYmNvbl9yb3RhdGVfZm9udGAg4oCTIHNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgaW1wbGVtZW50YXRpb24gd2l0aGluIGBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGZvbnQgcm90YXRpb24gd29ya3Mgd2l0aGluIHRoZSBmcmFtZWJ1ZmZlciBjb25zb2xlIGNvbnRleHQuIFRpbWUgdG8gYW5hbHl6ZSB0aGUgcm90YXRpb24gcm91dGluZSBhbmQgaXRzIGludGVncmF0aW9uIHdpdGggdGhlIGZyYW1lYnVmZmVyIGRldmljZSBkcml2ZXIgY29yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDE4Olx0aW50IGZiY29uX3JvdGF0ZV9mb250KHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgdmNfZGF0YSAqdmMpXG4gIDE5Olx0e1xuICAyMDpcdFx0c3RydWN0IGZiY29uX3BhciAqcGFyID0gaW5mby1cdTAwM2VmYmNvbl9wYXI7XG4gIDIxOlx0XHR1bnNpZ25lZCBjaGFyICpidWY7XG4gIDIyOlx0XHRpbnQgcmV0O1xuICAyMzpcdFxuICAyNDpcdFx0aWYgKHBhci1cdTAwM2VwLVx1MDAzZWZvbnRkYXRhID09IHBhci1cdTAwM2Vyb3RhdGVkLmZvbnRkYXRhIFx1MDAyNlx1MDAyNiBwYXItXHUwMDNlcm90YXRlID09IHBhci1cdTAwM2Vyb3RhdGVkLmJ1Zl9yb3RhdGUpXG4gIDI1Olx0XHRcdHJldHVybiAwO1xuICAyNjpcdFxuICAyNzpcdFx0cGFyLVx1MDAzZXJvdGF0ZWQuZm9udGRhdGEgPSBwYXItXHUwMDNlcC1cdTAwM2Vmb250ZGF0YTtcbiAgMjg6XHRcdHBhci1cdTAwM2Vyb3RhdGVkLmJ1Zl9yb3RhdGUgPSBwYXItXHUwMDNlcm90YXRlO1xuICAyOTpcdFxuICAzMDpcdFx0aWYgKGluZm8tXHUwMDNlZmJvcHMtXHUwMDNlZmJfc3luYylcbiAgMzE6XHRcdFx0aW5mby1cdTAwM2VmYm9wcy1cdTAwM2VmYl9zeW5jKGluZm8pO1xuICAzMjpcdFxuICAzMzpcdFx0YnVmID0gZm9udF9kYXRhX3JvdGF0ZShwYXItXHUwMDNlcm90YXRlZC5mb250ZGF0YSwgdmMtXHUwMDNldmNfZm9udC53aWR0aCxcbiAgMzQ6XHRcdFx0XHQgICAgICAgdmMtXHUwMDNldmNfZm9udC5oZWlnaHQsIHZjLVx1MDAzZXZjX2ZvbnQuY2hhcmNvdW50LFxuICAzNTpcdFx0XHRcdCAgICAgICBwYXItXHUwMDNlcm90YXRlZC5idWZfcm90YXRlLCBwYXItXHUwMDNlcm90YXRlZC5idWYsXG4gIDM2Olx0XHRcdFx0ICAgICAgIFx1MDAyNnBhci1cdTAwM2Vyb3RhdGVkLmJ1ZnNpemUpO1xuICAzNzpcdFx0aWYgKElTX0VSUihidWYpKSB7XG4gIDM4Olx0XHRcdHJldCA9IFBUUl9FUlIoYnVmKTtcbiAgMzk6XHRcdFx0Z290byBlcnJfa2ZyZWU7XG4gIDQwOlx0XHR9XG4gIDQxOlx0XG4gIDQyOlx0XHRwYXItXHUwMDNlcm90YXRlZC5idWYgPSBidWY7XG4gIDQzOlx0XG4gIDQ0Olx0XHRyZXR1cm4gMDtcbiAgNDU6XHRcbiAgNDY6XHRlcnJfa2ZyZWU6XG4gIDQ3Olx0XHRrZnJlZShwYXItXHUwMDNlcm90YXRlZC5idWYpO1xuICA0ODpcdFx0cGFyLVx1MDAzZXJvdGF0ZWQuYnVmID0gTlVMTDsgLyogY2xlYXIgaGVyZSB0byBhdm9pZCBvdXRwdXQgKi9cbiAgNDk6XHRcdHBhci1cdTAwM2Vyb3RhdGVkLmJ1ZnNpemUgPSAwO1xuICA1MDpcdFxuICA1MTpcdFx0cmV0dXJuIHJldDtcbiAgNTI6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqQW5hbHl6aW5nIGBmb250X2RhdGFfcm90YXRlYCoqCgpPa2F5LCBzbyBgZm9udF9kYXRhX3JvdGF0ZWAuLi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoaXMgZnVuY3Rpb24uIEJhc2VkIG9uIHRoZSBuYW1lLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgaXQmIzM5O3MgZ29pbmcgdG8gaW52b2x2ZSBzb21lIGtpbmQgb2YgZm9udCByb3RhdGlvbi4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcyAqaG93KiBpcyB0aGF0IGFjaGlldmVkPyBEb2VzIGl0IHByZS1hbGxvY2F0ZSBhIHNwZWNpZmljIGFtb3VudCBvZiBtZW1vcnkgZm9yIHRoZSByb3RhdGVkIGZvbnQ/IERvZXMgaXQgY2FsY3VsYXRlIHRoZSByZXF1aXJlZCBtZW1vcnkgb24gdGhlIGZseT8gVGhlIG5hbWUgYWxzbyBzdWdnZXN0cyBpdCBoYW5kbGVzIGZvbnQgZGF0YSwgc28gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB3aGF0IGtpbmQgb2YgZm9udCBkYXRhIGlzIGJlaW5nIHJvdGF0ZWQ6IGFyZSB3ZSB0YWxraW5nIGJpdG1hcCBmb250cywgdmVjdG9yIGZvbnRzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBsb29rIGF0IHRoZSBjb2RlIHNob3VsZCBjbGVhciB1cCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlsczogbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJvdGF0aW9uIGFsZ29yaXRobSBhcmUga2V5IGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZGl2aW5nIGludG8gdGhlIGBmb250X2RhdGFfcm90YXRlYCBmdW5jdGlvbiBpdHNlbGYuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbnRfZGF0YV9yb3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYz0xOD1pbnQgZmJjb25fcm90YXRlX2ZvbnQoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2Y19kYXRhICp2Yylcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtMzItXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmM6MzM6XHRidWYgPSBmb250X2RhdGFfcm90YXRlKHBhci1cdTAwM2Vyb3RhdGVkLmZvbnRkYXRhLCB2Yy1cdTAwM2V2Y19mb250LndpZHRoLFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTM0LVx0XHRcdCAgICAgICB2Yy1cdTAwM2V2Y19mb250LmhlaWdodCwgdmMtXHUwMDNldmNfZm9udC5jaGFyY291bnQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NTUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqU2VhcmNoaW5nIGZvciBhIE1pc3NpbmcgRnVuY3Rpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgZXhwZWN0aW5nIHRvIGZpbmQgYGZvbnRfZGF0YV9yb3RhdGVgIGluIGBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvYCwgYnV0IGl0JiMzOTtzIG5vdCB0aGVyZS4gSG1tLCB0aGF0JiMzOTtzIHVudXN1YWwuIEl0JiMzOTtzIHRpbWUgdG8gYnJvYWRlbiB0aGUgc2VhcmNoLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uICphY3R1YWxseSogbGl2ZXMgd2l0aGluIHRoZSBjb2RlYmFzZS4gTGV0JiMzOTtzIGZpcmUgdXAgYSBnbG9iYWwgc2VhcmNoIGFuZCBzZWUgd2hlcmUgdGhpcyBiZWFzdCBpcyBoaWRpbmcuIFRpbWUgdG8gY2FzdCBhIHdpZGVyIG5ldCBhbmQgZmlndXJlIG91dCBpdHMgdHJ1ZSBsb2NhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9udF9kYXRhX3JvdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmM9MTg9aW50IGZiY29uX3JvdGF0ZV9mb250KHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgdmNfZGF0YSAqdmMpXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTMyLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jOjMzOlx0YnVmID0gZm9udF9kYXRhX3JvdGF0ZShwYXItXHUwMDNlcm90YXRlZC5mb250ZGF0YSwgdmMtXHUwMDNldmNfZm9udC53aWR0aCxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYy0zNC1cdFx0XHQgICAgICAgdmMtXHUwMDNldmNfZm9udC5oZWlnaHQsIHZjLVx1MDAzZXZjX2ZvbnQuY2hhcmNvdW50LFxuLS1cbmluY2x1ZGUvbGludXgvZm9udC5oPTExMj12b2lkIGZvbnRfZ2x5cGhfcm90YXRlXzI3MChjb25zdCB1bnNpZ25lZCBjaGFyICpnbHlwaCwgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LFxuaW5jbHVkZS9saW51eC9mb250LmgtMTEzLVx0XHRcdCAgIHVuc2lnbmVkIGNoYXIgKm91dCk7XG5pbmNsdWRlL2xpbnV4L2ZvbnQuaDoxMTQ6dW5zaWduZWQgY2hhciAqZm9udF9kYXRhX3JvdGF0ZShmb250X2RhdGFfdCAqZmQsIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCxcbmluY2x1ZGUvbGludXgvZm9udC5oLTExNS1cdFx0XHRcdHVuc2lnbmVkIGludCBjaGFyY291bnQsIHVuc2lnbmVkIGludCBzdGVwcyxcbi0tXG5saWIvZm9udHMvZm9udF9yb3RhdGUuYz0xNzU9RVhQT1JUX1NZTUJPTF9HUEwoZm9udF9nbHlwaF9yb3RhdGVfMjcwKTtcbi0tXG5saWIvZm9udHMvZm9udF9yb3RhdGUuYy0xNzctLyoqXG5saWIvZm9udHMvZm9udF9yb3RhdGUuYzoxNzg6ICogZm9udF9kYXRhX3JvdGF0ZSAtIFJvdGF0ZSBmb250IGRhdGEgYnkgbXVsdGlwbGVzIG9mIDkwwrBcbmxpYi9mb250cy9mb250X3JvdGF0ZS5jLTE3OS0gKiBAZmQ6IFRoZSBmb250IGRhdGEgdG8gcm90YXRlXG4tLVxubGliL2ZvbnRzL2ZvbnRfcm90YXRlLmMtMjAzLSAqL1xubGliL2ZvbnRzL2ZvbnRfcm90YXRlLmM6MjA0OnVuc2lnbmVkIGNoYXIgKmZvbnRfZGF0YV9yb3RhdGUoZm9udF9kYXRhX3QgKmZkLCB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsXG5saWIvZm9udHMvZm9udF9yb3RhdGUuYy0yMDUtXHRcdFx0XHR1bnNpZ25lZCBpbnQgY2hhcmNvdW50LCB1bnNpZ25lZCBpbnQgc3RlcHMsXG4tLVxubGliL2ZvbnRzL2ZvbnRfcm90YXRlLmMtMjc0LX1cbmxpYi9mb250cy9mb250X3JvdGF0ZS5jOjI3NTpFWFBPUlRfU1lNQk9MX0dQTChmb250X2RhdGFfcm90YXRlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI0NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIGBmb250X2RhdGFfcm90YXRlYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGZvbnRfZGF0YV9yb3RhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBxdWlja2x5IGdldCBhIGhpZ2gtbGV2ZWwgdW5kZXJzdGFuZGluZy4gV2hhdCBpcyB0aGlzIGZ1bmN0aW9uICpzdXBwb3NlZCogdG8gZG8/IFRoZSBuYW1lIHN1Z2dlc3RzIHNvbWV0aGluZyByZWxhdGVkIHRvIGZvbnQgZGF0YSBhbmQgcm90YXRpb24uIE15IGJyYWluIGltbWVkaWF0ZWx5IHN0YXJ0cyBjb25uZWN0aW5nIHRoaXMgdG8gcG9zc2libGUgdXNlczogcmVuZGVyaW5nIHJvdGF0ZWQgdGV4dCwgZ2VuZXJhdGluZyByb3RhdGVkIGZvbnQgZ2x5cGhzIGZvciBkaWZmZXJlbnQgY2hhcmFjdGVyIHNldHMsIG9yIHBvdGVudGlhbGx5IGZvciB0cmFuc2Zvcm1hdGlvbnMgaW4gdHlwb2dyYXBoeSBsaWJyYXJpZXMuCgpJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgb2YgdGhlIG51YW5jZXMgYmFzZWQgb24gbXkgZXhwZXJpZW5jZS4gSXMgdGhpcyBhIHNpbXBsZSByb3RhdGlvbiBvZiBhIGJpdG1hcCwgb3IgaXMgaXQgZGVhbGluZyB3aXRoIHZlY3RvciBmb250IGRhdGEsIHdoaWNoIGludHJvZHVjZXMgYSB3aG9sZSBkaWZmZXJlbnQgc2V0IG9mIGNvbXBsZXhpdHk/IEFyZSB3ZSB0YWxraW5nIGFib3V0IHJvdGF0aW5nIGluZGl2aWR1YWwgZ2x5cGhzLCBvciBhbiBlbnRpcmUgc3RyaW5nIG9mIHRleHQ/IFRoZSBpbXBsZW1lbnRhdGlvbiB3aWxsIG1ha2UgYSBiaWcgZGlmZmVyZW5jZSwgY29uc2lkZXJpbmcgdGhlIG1hbnkgYXNwZWN0cyBvZiB0aGUgZm9udCBkYXRhLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcHMgd291bGQgYmU6CgoqICAgKipMb29rIGF0IHRoZSBmdW5jdGlvbiBzaWduYXR1cmU6KiogV2hhdCBhcmUgdGhlIGlucHV0cz8gQXJlIHdlIGRlYWxpbmcgd2l0aCBjaGFyYWN0ZXIgY29kZXMsIGZvbnQgZGF0YSBzdHJ1Y3R1cmVzIChsaWtlIGBUVEZfRm9udGAsIGBGVF9GYWNlYCBldGMuKSwgcm90YXRpb24gYW5nbGUgaW4gZGVncmVlcyBvciByYWRpYW5zPyBXaGF0IGFib3V0IHRoZSBvdXRwdXQgZm9ybWF0PyBJcyB0aGlzIGluLXBsYWNlIG1hbmlwdWxhdGlvbiwgb3IgZG9lcyBpdCByZXR1cm4gYSBuZXcgcm90YXRlZCBkYXRhIHN0cnVjdHVyZT8KKiAgICoqSW5zcGVjdCB0aGUgY29yZSBhbGdvcml0aG06KiogSeKAmW0gZ29pbmcgdG8gc2NhbiB0aGUgY29kZSBmb3IgdGhlIGNlbnRyYWwgb3BlcmF0aW9ucy4gQXJlIHRoZXkgbGV2ZXJhZ2luZyByb3RhdGlvbiBtYXRyaWNlcz8gQml0d2lzZSBvcGVyYXRpb25zIGZvciBiaXRtYXAgcm90YXRpb24/IEJlemllciBjdXJ2ZSB0cmFuc2Zvcm1hdGlvbnM/IFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZ2V0IHRoZSByZWFsIHN0b3J5LgoqICAgKipDb25zaWRlciBlZGdlIGNhc2VzOioqIEkmIzM5O20gYXV0b21hdGljYWxseSB0aGlua2luZyBhYm91dCBoYW5kbGluZyBvZiBkaWZmZXJlbnQgZm9udCBkYXRhIHN0cnVjdHVyZXMsIGdseXBocyB3aXRoIGNvbXBsZXggY29udG91cnMsIGVtcHR5IGdseXBocywgYW50aS1hbGlhc2luZyB0ZWNobmlxdWVzLCBhbmQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gQXJlIHRoZXJlIG9wdGltaXphdGlvbnMgZm9yIGNvbW1vbiByb3RhdGlvbiBhbmdsZXMgKDkwLCAxODAgZGVncmVlcyk/CiogICAqKkludmVzdGlnYXRlIGRlcGVuZGVuY2llczoqKiBJJiMzOTtsbCBiZSBjdXJpb3VzIGFib3V0IHdoYXQgbGlicmFyaWVzIG9yIGZ1bmN0aW9ucyB0aGlzIGZ1bmN0aW9uIGNhbGxzLiBEb2VzIGl0IHVzZSBhIGxpbmVhciBhbGdlYnJhIGxpYnJhcnk/IEFyZSB0aGVyZSBhbnkgbWVtb3J5IGFsbG9jYXRpb24gb3IgZGVhbGxvY2F0aW9uIHJvdXRpbmVzIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgcG90ZW50aWFsIHRocmVhZGluZyBjb25jZXJucz8KCkJhc2VkIG9uIHRob3NlIGluaXRpYWwgY2hlY2tzLCBJIGNhbiBmb3JtIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlLCBhbmQgc3RhcnQgdG8ganVkZ2UgdGhlIHF1YWxpdHksIGVmZmljaWVuY3ksIGFuZCBwb3RlbnRpYWwgbGltaXRhdGlvbnMgb2YgdGhpcyBgZm9udF9kYXRhX3JvdGF0ZWAgZnVuY3Rpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIGlmIGl0JiMzOTtzIHdlbGwtZGVzaWduZWQsIGVhc3kgdG8gbWFpbnRhaW4sIGFuZCBkb2VzIGl0cyBqb2IgY29ycmVjdGx5IGluIGFsbCBzY2VuYXJpb3MuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9mb250cy9mb250X3JvdGF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDQ6XHR1bnNpZ25lZCBjaGFyICpmb250X2RhdGFfcm90YXRlKGZvbnRfZGF0YV90ICpmZCwgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LFxuIDIwNTpcdFx0XHRcdFx0dW5zaWduZWQgaW50IGNoYXJjb3VudCwgdW5zaWduZWQgaW50IHN0ZXBzLFxuIDIwNjpcdFx0XHRcdFx0dW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgKmJ1ZnNpemUpXG4gMjA3Olx0e1xuIDIwODpcdFx0Y29uc3QgdW5zaWduZWQgY2hhciAqc3JjID0gZm9udF9kYXRhX2J1ZihmZCk7XG4gMjA5Olx0XHR1bnNpZ25lZCBpbnQgc19jZWxsc2l6ZSA9IGZvbnRfZ2x5cGhfc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAyMTA6XHRcdHVuc2lnbmVkIGludCBkX2NlbGxzaXplLCBpO1xuIDIxMTpcdFx0dW5zaWduZWQgY2hhciAqZHN0O1xuIDIxMjpcdFx0c2l6ZV90IHNpemU7XG4gMjEzOlx0XG4gMjE0Olx0XHRzdGVwcyAlPSA0O1xuIDIxNTpcdFxuIDIxNjpcdFx0c3dpdGNoIChzdGVwcykge1xuIDIxNzpcdFx0Y2FzZSAwOlxuIDIxODpcdFx0Y2FzZSAyOlxuIDIxOTpcdFx0XHRkX2NlbGxzaXplID0gc19jZWxsc2l6ZTtcbiAyMjA6XHRcdFx0YnJlYWs7XG4gMjIxOlx0XHRjYXNlIDE6XG4gMjIyOlx0XHRjYXNlIDM6XG4gMjIzOlx0XHRcdGRfY2VsbHNpemUgPSBmb250X2dseXBoX3NpemUoaGVpZ2h0LCB3aWR0aCk7IC8qIGZsaXAgd2lkdGgvaGVpZ2h0ICovXG4gMjI0Olx0XHRcdGJyZWFrO1xuIDIyNTpcdFx0fVxuIDIyNjpcdFxuIDIyNzpcdFx0aWYgKGNoZWNrX211bF9vdmVyZmxvdyhjaGFyY291bnQsIGRfY2VsbHNpemUsIFx1MDAyNnNpemUpKVxuIDIyODpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiAyMjk6XHRcbiAyMzA6XHRcdGlmICghYnVmIHx8ICFidWZzaXplIHx8IHNpemUgXHUwMDNlICpidWZzaXplKSB7XG4gMjMxOlx0XHRcdGRzdCA9IGttYWxsb2NfYXJyYXkoY2hhcmNvdW50LCBkX2NlbGxzaXplLCBHRlBfS0VSTkVMKTtcbiAyMzI6XHRcdFx0aWYgKCFkc3QpXG4gMjMzOlx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gMjM0Olx0XG4gMjM1Olx0XHRcdGtmcmVlKGJ1Zik7XG4gMjM2Olx0XHRcdGJ1ZiA9IGRzdDtcbiAyMzc6XHRcdFx0aWYgKGJ1ZnNpemUpXG4gMjM4Olx0XHRcdFx0KmJ1ZnNpemUgPSBzaXplO1xuIDIzOTpcdFx0fSBlbHNlIHtcbiAyNDA6XHRcdFx0ZHN0ID0gYnVmO1xuIDI0MTpcdFx0fVxuIDI0MjpcdFxuIDI0MzpcdFx0c3dpdGNoIChzdGVwcykge1xuIDI0NDpcdFx0Y2FzZSAwOlxuIDI0NTpcdFx0XHRtZW1jcHkoZHN0LCBzcmMsIHNpemUpO1xuIDI0NjpcdFx0XHRicmVhaztcbiAyNDc6XHRcdGNhc2UgMTpcbiAyNDg6XHRcdFx0bWVtc2V0KGRzdCwgMCwgc2l6ZSk7XG4gMjQ5Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNoYXJjb3VudDsgJiM0MzsmIzQzO2kpIHtcbiAyNTA6XHRcdFx0XHRfX2ZvbnRfZ2x5cGhfcm90YXRlXzkwKHNyYywgd2lkdGgsIGhlaWdodCwgZHN0KTtcbiAyNTE6XHRcdFx0XHRzcmMgJiM0Mzs9IHNfY2VsbHNpemU7XG4gMjUyOlx0XHRcdFx0ZHN0ICYjNDM7PSBkX2NlbGxzaXplO1xuIDI1MzpcdFx0XHR9XG4gMjU0Olx0XHRcdGJyZWFrO1xuIDI1NTpcdFx0Y2FzZSAyOlxuIDI1NjpcdFx0XHRtZW1zZXQoZHN0LCAwLCBzaXplKTtcbiAyNTc6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY2hhcmNvdW50OyAmIzQzOyYjNDM7aSkge1xuIDI1ODpcdFx0XHRcdF9fZm9udF9nbHlwaF9yb3RhdGVfMTgwKHNyYywgd2lkdGgsIGhlaWdodCwgZHN0KTtcbiAyNTk6XHRcdFx0XHRzcmMgJiM0Mzs9IHNfY2VsbHNpemU7XG4gMjYwOlx0XHRcdFx0ZHN0ICYjNDM7PSBkX2NlbGxzaXplO1xuIDI2MTpcdFx0XHR9XG4gMjYyOlx0XHRcdGJyZWFrO1xuIDI2MzpcdFx0Y2FzZSAzOlxuIDI2NDpcdFx0XHRtZW1zZXQoZHN0LCAwLCBzaXplKTtcbiAyNjU6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY2hhcmNvdW50OyAmIzQzOyYjNDM7aSkge1xuIDI2NjpcdFx0XHRcdF9fZm9udF9nbHlwaF9yb3RhdGVfMjcwKHNyYywgd2lkdGgsIGhlaWdodCwgZHN0KTtcbiAyNjc6XHRcdFx0XHRzcmMgJiM0Mzs9IHNfY2VsbHNpemU7XG4gMjY4Olx0XHRcdFx0ZHN0ICYjNDM7PSBkX2NlbGxzaXplO1xuIDI2OTpcdFx0XHR9XG4gMjcwOlx0XHRcdGJyZWFrO1xuIDI3MTpcdFx0fVxuIDI3MjpcdFxuIDI3MzpcdFx0cmV0dXJuIGJ1ZjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc4NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBGb250IFJvdGF0aW9uIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBgZm9udF9kYXRhX3JvdGF0ZWAsIHdoaWNoIGZyb20gdGhlIGxvb2tzIG9mIGl0LCBoYW5kbGVzIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBmb3Igcm90YXRlZCBmb250IGRhdGEuIFNwZWNpZmljYWxseSwgaXQgdXNlcyBlaXRoZXIgYG1lbWNweWAgb3IgYSBjb21iaW5hdGlvbiBvZiBgbWVtc2V0YCBhbmQgc29tZSBgX19mb250X2dseXBoX3JvdGF0ZV8qYCBmdW5jdGlvbnMsIGRlcGVuZGluZyBvbiB0aGUgY2lyY3Vtc3RhbmNlcy4KClRoZSBrZXkgY2hhbmdlIGlzIHRoaXMgYWRkaXRpb24gaW4gYGZiY29uX2RvX3NldF9mb250YC4gSXQgY2hlY2tzIGlmIHRoZSB2aXJ0dWFsIGNvbnNvbGUgaXMgdmlzaWJsZSBhbmQsIGlmIHNvLCBjYWxscyBgcm90YXRlX2ZvbnRgIHdoaWNoLCBhZ2FpbiwgYWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyBhIGJ1ZmZlci4gVGhlIGluaXRpYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGludHJvZHVjdGlvbiBoYXMgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4KCkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBhIGJ1ZyB3aGVyZSB0aGUgYHJvdGF0ZV9mb250YCBmdW5jdGlvbiB3YXNuJiMzOTt0IGJlaW5nIGNhbGxlZCB3aGVuIGEgZm9udCB3YXMgc2V0LiBUaGF0JiMzOTtzIHdoYXQmIzM5O3MgcGlxdWluZyBteSBpbnRlcmVzdC4gSWYgYHJvdGF0ZV9mb250YCAqd2FzbiYjMzk7dCogY2FsbGVkLCB0aGVuIEkgbmVlZCB0byBjb25zaWRlciB3aGF0IHN0YXRlIGBwYXItJmd0O3JvdGF0ZWQuYnVmYCB3b3VsZCBiZSBsZWZ0IGluLiBXYXMgaXQgbGVmdCB1bmluaXRpYWxpemVkIG9yIGV2ZW4gTlVMTD8KCklmIGBwYXItJmd0O3JvdGF0ZWQuYnVmYCB3YXMgaW5kZWVkIE5VTEwgaW4gdGhlIGJ1Z2d5IHN0YXRlLCB0aGF0IHdvdWxkJiMzOTt2ZSByZXN1bHRlZCBpbiBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggd2UmIzM5O2QgdHlwaWNhbGx5IGV4cGVjdCB0byBiZSBjYXVnaHQgYnkgS0FTQU4gb3IgYSBnZW5lcmFsIHByb3RlY3Rpb24gZmF1bHQsIHdoaWNoIGlzIHdoeSBpdCBpcyB1bmxpa2VseSBpdCB3ZW50IHVubm90aWNlZC4gU28gdGhlIG1vcmUgaW50ZXJlc3RpbmcgcG9zc2liaWxpdHkgaXMgdGhhdCBpdCB3YXMgdW5pbml0aWFsaXplZC4gSW4gdGhhdCBzY2VuYXJpbywgS01TQU4gc2hvdWxkIGhhdmUgc3BvdHRlZCB0aGF0LgoKU28sIHNpbmNlIGl0IHdhcyBmaXhlZCwgbGV0JiMzOTtzIHNlZSB3aGVyZSBgcGFyLSZndDtyb3RhdGVkLmJ1ZmAgaXMgdXNlZCB0byBzZWUgaWYgd2UgY2FuIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBmaXggd2FzIG5lZWRlZCwgb3IgaWYgd2UgY2FuIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgZm9yIGZ1cnRoZXIgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYXItXHUwMDNlcm90YXRlZC5idWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTc3Mz1zdGF0aWMgdm9pZCBmYmNvbl9yZWxlYXNlKHN0cnVjdCBmYl9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTc4OS0jaWZkZWYgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT05cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjc5MDpcdFx0a2ZyZWUocGFyLVx1MDAzZXJvdGF0ZWQuYnVmKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTc5MS0jZW5kaWZcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0xMDE0PXN0YXRpYyBjb25zdCBjaGFyICpmYmNvbl9zdGFydHVwKHZvaWQpXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTA0NC0jaWZkZWYgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT05cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjEwNDU6XHRwYXItXHUwMDNlcm90YXRlZC5idWZfcm90YXRlID0gLTE7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0xMDQ2LSNlbmRpZlxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI2NDQ9c3RhdGljIHZvaWQgZmJjb25fbW9kZWNoYW5nZWQoc3RydWN0IGZiX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjY3MS1cdC8qXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoyNjcyOlx0ICogUmVidWlsZCBwYXItXHUwMDNlcm90YXRlZC5idWYgZm9yIHRoZSBuZXcgcm90YXRpb24gbm93IHRoYXQgYml0b3BzIGhhdmVcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI2NzMtXHQgKiBzd2l0Y2hlZC4gIFRoZSBuZXcgcHV0Y3MvY3Vyc29yIG9wcyByZWFkIHRoaXMgYnVmZmVyOyBpZiBpdCBpcyBzdGlsbFxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYz05OD1zdGF0aWMgaW5saW5lIHZvaWQgY2N3X3B1dGNzX2FsaWduZWQoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyxcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmMtMTA4LVx0d2hpbGUgKGNudC0tKSB7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmM6MTA5Olx0XHRzcmMgPSBwYXItXHUwMDNlcm90YXRlZC5idWYgJiM0MzsgKHNjcl9yZWFkdyhzLS0pIFx1MDAyNiBjaGFybWFzaykgKiBjZWxsc2l6ZTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYy0xMTAtXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jPTEyOT1zdGF0aWMgdm9pZCBjY3dfcHV0Y3Moc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyxcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmMtMTQ0LVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jOjE0NTpcdGlmICghcGFyLVx1MDAzZXJvdGF0ZWQuYnVmKVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jLTE0Ni1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYz0yMjE9c3RhdGljIHZvaWQgY2N3X2N1cnNvcihzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLCBib29sIGVuYWJsZSxcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmMtMjM0LVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jOjIzNTpcdGlmICghcGFyLVx1MDAzZXJvdGF0ZWQuYnVmKVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jLTIzNi1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYy0yNDEtXHRhdHRyaWJ1dGUgPSBnZXRfYXR0cmlidXRlKGluZm8sIGMpO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jOjI0MjpcdHNyYyA9IHBhci1cdTAwM2Vyb3RhdGVkLmJ1ZiAmIzQzOyAoKGMgXHUwMDI2IGNoYXJtYXNrKSAqICh3ICogdmMtXHUwMDNldmNfZm9udC53aWR0aCkpO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jLTI0My1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYz04Mz1zdGF0aWMgaW5saW5lIHZvaWQgY3dfcHV0Y3NfYWxpZ25lZChzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLFxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jLTkzLVx0d2hpbGUgKGNudC0tKSB7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYzo5NDpcdFx0c3JjID0gcGFyLVx1MDAzZXJvdGF0ZWQuYnVmICYjNDM7IChzY3JfcmVhZHcocyYjNDM7JiM0MzspIFx1MDAyNiBjaGFybWFzaykgKiBjZWxsc2l6ZTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jLTk1LVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jPTExND1zdGF0aWMgdm9pZCBjd19wdXRjcyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLFxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jLTEyOS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jOjEzMDpcdGlmICghcGFyLVx1MDAzZXJvdGF0ZWQuYnVmKVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmMtMTMxLVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmM9MjA0PXN0YXRpYyB2b2lkIGN3X2N1cnNvcihzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLCBib29sIGVuYWJsZSxcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYy0yMTctXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYzoyMTg6XHRpZiAoIXBhci1cdTAwM2Vyb3RhdGVkLmJ1ZilcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jLTIxOS1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jLTIyNC1cdGF0dHJpYnV0ZSA9IGdldF9hdHRyaWJ1dGUoaW5mbywgYyk7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYzoyMjU6XHRzcmMgPSBwYXItXHUwMDNlcm90YXRlZC5idWYgJiM0MzsgKChjIFx1MDAyNiBjaGFybWFzaykgKiAodyAqIHZjLVx1MDAzZXZjX2ZvbnQud2lkdGgpKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jLTIyNi1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmM9MTg9aW50IGZiY29uX3JvdGF0ZV9mb250KHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgdmNfZGF0YSAqdmMpXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTIzLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jOjI0Olx0aWYgKHBhci1cdTAwM2VwLVx1MDAzZWZvbnRkYXRhID09IHBhci1cdTAwM2Vyb3RhdGVkLmZvbnRkYXRhIFx1MDAyNlx1MDAyNiBwYXItXHUwMDNlcm90YXRlID09IHBhci1cdTAwM2Vyb3RhdGVkLmJ1Zl9yb3RhdGUpXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtMjUtXHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYy0yNy1cdHBhci1cdTAwM2Vyb3RhdGVkLmZvbnRkYXRhID0gcGFyLVx1MDAzZXAtXHUwMDNlZm9udGRhdGE7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmM6Mjg6XHRwYXItXHUwMDNlcm90YXRlZC5idWZfcm90YXRlID0gcGFyLVx1MDAzZXJvdGF0ZTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYy0yOS1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtMzQtXHRcdFx0ICAgICAgIHZjLVx1MDAzZXZjX2ZvbnQuaGVpZ2h0LCB2Yy1cdTAwM2V2Y19mb250LmNoYXJjb3VudCxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYzozNTpcdFx0XHQgICAgICAgcGFyLVx1MDAzZXJvdGF0ZWQuYnVmX3JvdGF0ZSwgcGFyLVx1MDAzZXJvdGF0ZWQuYnVmLFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jOjM2Olx0XHRcdCAgICAgICBcdTAwMjZwYXItXHUwMDNlcm90YXRlZC5idWZzaXplKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYy0zNy1cdGlmIChJU19FUlIoYnVmKSkge1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYy00MS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYzo0MjpcdHBhci1cdTAwM2Vyb3RhdGVkLmJ1ZiA9IGJ1ZjtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYy00My1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtNDYtZXJyX2tmcmVlOlxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jOjQ3Olx0a2ZyZWUocGFyLVx1MDAzZXJvdGF0ZWQuYnVmKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYzo0ODpcdHBhci1cdTAwM2Vyb3RhdGVkLmJ1ZiA9IE5VTEw7IC8qIGNsZWFyIGhlcmUgdG8gYXZvaWQgb3V0cHV0ICovXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmM6NDk6XHRwYXItXHUwMDNlcm90YXRlZC5idWZzaXplID0gMDtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYy01MC1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYz04ND1zdGF0aWMgaW5saW5lIHZvaWQgdWRfcHV0Y3NfYWxpZ25lZChzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLFxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jLTk0LVx0d2hpbGUgKGNudC0tKSB7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYzo5NTpcdFx0c3JjID0gcGFyLVx1MDAzZXJvdGF0ZWQuYnVmICYjNDM7IChzY3JfcmVhZHcocy0tKSBcdTAwMjYgY2hhcm1hc2spICogY2VsbHNpemU7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYy05Ni1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYz0xMTU9c3RhdGljIGlubGluZSB2b2lkIHVkX3B1dGNzX3VuYWxpZ25lZChzdHJ1Y3QgdmNfZGF0YSAqdmMsXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmMtMTI5LVx0d2hpbGUgKGNudC0tKSB7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYzoxMzA6XHRcdHNyYyA9IHBhci1cdTAwM2Vyb3RhdGVkLmJ1ZiAmIzQzOyAoc2NyX3JlYWR3KHMtLSkgXHUwMDI2IGNoYXJtYXNrKSAqIGNlbGxzaXplO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmMtMTMxLVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jPTE1MD1zdGF0aWMgdm9pZCB1ZF9wdXRjcyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLFxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jLTE2Ni1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jOjE2NzpcdGlmICghcGFyLVx1MDAzZXJvdGF0ZWQuYnVmKVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmMtMTY4LVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmM9MjUwPXN0YXRpYyB2b2lkIHVkX2N1cnNvcihzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLCBib29sIGVuYWJsZSxcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYy0yNjQtXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYzoyNjU6XHRpZiAoIXBhci1cdTAwM2Vyb3RhdGVkLmJ1ZilcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jLTI2Ni1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jLTI3MS1cdGF0dHJpYnV0ZSA9IGdldF9hdHRyaWJ1dGUoaW5mbywgYyk7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYzoyNzI6XHRzcmMgPSBwYXItXHUwMDNlcm90YXRlZC5idWYgJiM0MzsgKChjIFx1MDAyNiBjaGFybWFzaykgKiAodyAqIHZjLVx1MDAzZXZjX2ZvbnQuaGVpZ2h0KSk7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYy0yNzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDI1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzM4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgYGZiY29uX2RvX3NldF9mb250YCBQYXRjaDogT09CIFJlYWQgaW4gUm90YXRlZCBGb250IEJ1ZmZlcioqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggaW50cm9kdWNlcyBjYWxscyB0byBgcm90YXRlX2ZvbnRgIHdpdGhpbiBgZmJjb25fZG9fc2V0X2ZvbnRgLiBNeSBwcmltYXJ5IGNvbmNlcm4gaW5pdGlhbGx5IHdhcyB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBkdWUgdG8gYSBtaXNtYXRjaCBiZXR3ZWVuIGZvbnQgZGF0YSBhbmQgdGhlIHJvdGF0ZWQgYnVmZmVyIChgcGFyLSZndDtyb3RhdGVkLmJ1ZmApLiBJZiBgcm90YXRlX2ZvbnRgIGlzbiYjMzk7dCBjYWxsZWQsIGFuZCBmb250IGRpbWVuc2lvbnMgKHdpZHRoLCBoZWlnaHQsIGBjaGFyY291bnRgKSBjaGFuZ2UsIGBwYXItJmd0O3JvdGF0ZWQuYnVmYCBtaWdodCBiZSBvdXQgb2Ygc3luYy4KClRoZSBjb3JlIGlzc3VlIHNlZW1zIHRvIGFyaXNlIHdoZW4gYGNoYXJjb3VudGAgY2hhbmdlcywgc3BlY2lmaWNhbGx5IGZyb20gMjU2IHRvIDUxMiAob3IgdmljZS12ZXJzYSksIGltcGFjdGluZyB0aGUgdW5kZXJseWluZyBidWZmZXIgc2l6ZS4gSWYgdGhlIGZvbnQgZG91YmxlcyBpbiBjaGFyYWN0ZXIgY291bnQsIGJ1dCBgcGFyLSZndDtyb3RhdGVkLmJ1ZmAgaXNuJiMzOTt0IHVwZGF0ZWQgYnkgYHJvdGF0ZV9mb250YCwgdGhlbiB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIHNvdXJjZSBmb3IgdGhlIGNoYXJhY3RlciBkYXRhIHdpdGhpbiBgY3dfcHV0Y3NgIG9yIGB1ZF9wdXRjc2Agd2lsbCB1c2UgdGhlICpuZXcqIGBjaGFyY291bnRgIGJ1dCBzdGlsbCByZWFkIGZyb20gdGhlICpvbGQqIChzbWFsbGVyKSBidWZmZXIuIElmIHRoZSBgY2hhcmNvdW50YCBpbmNyZWFzZXMgZnJvbSAyNTYgdG8gNTEyLCB0aGVuIGFuIGFjY2VzcyB0byBhIGNoYXJhY3RlciBwYXN0IDI1NSBiZWNvbWVzIGFuIE9PQiByZWFkLiBUaGUgYGMgJmFtcDsgY2hhcm1hc2tgIG9wZXJhdGlvbiB3aWxsIGFsbG93IHJlYWRzIHVwIHRvIDUxMSwgYW5kIHRoZSByZXN1bHRpbmcgYHNyY2AgcG9pbnRlciB3b3VsZCBwb2ludCBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIDI1Ni1jaGFyYWN0ZXIgYnVmZmVyLiBUaGUgb2Zmc2V0IGBwYXItJmd0O3JvdGF0ZWQuYnVmICYjNDM7ICgoYyAmYW1wOyBjaGFybWFzaykgKiBjZWxsc2l6ZSlgIGNhbiB0aGVuIHJlYWQgb3V0IG9mIHRoZSBib3VuZHMuCgpNeSBwcmltYXJ5IGNvbmNlcm4gd2FzIGlmIHRoZXJlIHdhcyBhbiBvcHBvcnR1bml0eSBmb3IgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgYnV0IEtBU0FOIHNob3VsZCBoYW5kbGUgdGhpcyBwZXJmZWN0bHkuIFNpbmNlIGBwYXItJmd0O3JvdGF0ZWQuYnVmYCBpcyBhIGhlYXAgYnVmZmVyIGFsbG9jYXRlZCB2aWEgYGttYWxsb2NfYXJyYXlgLCB0aGUgYWNjZXNzIHZpb2xhdGlvbiBpcyBhbiBPT0IgcmVhZCwgd2hpY2ggS0FTQU4gd291bGQgZGV0ZWN0LiBLQVNBTiBwb2lzb25zIHRoZSBhcmVhIHRvIGNhdGNoIHRoaXMuCgpJIGR1ZyBkZWVwZXIgaW50byB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgd2l0aGluIGBmb250X2RhdGFfcm90YXRlYC4gSXQgaW5pdGlhbGl6ZXMgdGhlIGJ1ZmZlciBjb21wbGV0ZWx5IHVzaW5nIGBtZW1jcHlgIG9yIGBtZW1zZXRgICYjNDM7IGBfX2ZvbnRfZ2x5cGhfcm90YXRlXypgLiBUaGlzIGVuc3VyZWQgdGhlIGJ1ZmZlciBpcyAqYWx3YXlzKiBpbml0aWFsaXplZCwgZWxpbWluYXRpbmcgdGhlIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMuIElmIGByb3RhdGVfZm9udGAgaXMgbm90IGNhbGxlZCwgdGhlbiB0aGUgb2xkIGZvbnQgZGF0YSBwZXJzaXN0cyBpbiB0aGUgbWVtb3J5LgoKSSB2ZXJpZmllZCB0aGUgY29kZSBhbmQgZGlzY292ZXJlZCBhIGNyaXRpY2FsIHBvaW50OiBgZm9udF9kYXRhX3JvdGF0ZWAgKm9ubHkqIHVwZGF0ZXMgYCpidWZzaXplYCB3aGVuIGl0IHJlYWxsb2NhdGVzLiBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlIGZvbnQgc2hyaW5rcyAoZS5nLiwgZnJvbSA1MTIgdG8gMjU2IGNoYXJhY3RlcnMpIGFuZCB0aGUgYnVmZmVyIGlzICpub3QqIHJlYWxsb2NhdGVkLCBgKmJ1ZnNpemVgIG1haW50YWlucyB0aGUgKmxhcmdlciogc2l6ZSBmcm9tIHRoZSBwcmV2aW91cyBhbGxvY2F0aW9uLiBUaGUgY29kZSB3aWxsIHJldXNlIHRoZSBleGlzdGluZyBidWZmZXIsIGFuZCBvbmx5IGluaXRpYWxpemUgYSBzbWFsbGVyIGNodW5rLCBzYXkgMjU2IGNoYXJhY3RlcnMuIFRoaXMgbWVhbnMgdGhhdCBpZiBpdCBzdWJzZXF1ZW50bHkgYXR0ZW1wdHMgdG8gcmVhZCBmcm9tIHRoZSAqc21hbGxlciogZm9udCwgc2F5IGBjaGFyY291bnQgPSAyNTZgLCB0aGUgY29kZSBtYXkgYmUgYWJsZSB0byByZWFkIHNvbWUgb2YgdGhlIHByZXZpb3VzIGNvbnRlbnQsIHdoaWNoIG1lYW5zIGl0IHdpbGwgcmVhZCBvbGQgZm9udCBkYXRhLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgcmVpbmZvcmNlcyB0aGF0IEtBU0FOIGNhdGNoZXMgdGhlIE9PQiBpc3N1ZXMuIElmIGEgbmV3IGxhcmdlciBmb250IGlzIHVzZWQsIGFuZCBpdCBpcyBub3QgcmVhbGxvY2F0ZWQsIHRoZW4gdGhlIHJlYWQgKndpbGwqIGJlIE9PQiwgYnV0IGlzIHN0aWxsIGluaXRpYWxpemVkLCBzbyBpdCBkb2VzbiYjMzk7dCBjYXVzZSBhbnkgcHJvYmxlbXMuCgpUaGUga2V5IHRha2Vhd2F5IGlzIHRoYXQsIHdoaWxlIHRoZSBjb2RlIG1pZ2h0IHBvdGVudGlhbGx5IHJlYWQgZnJvbSBhIHNlY3Rpb24gdGhhdCAqd2FzKiBpbml0aWFsaXplZCBieSBhbiAqb2xkZXIqIGZvbnQgKGlmIHRoZSBjdXJyZW50IGZvbnQgaXMgc21hbGxlciksIHRoaXMgd2lsbCBuZXZlciBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIEtBU0FOIGlzIHN1ZmZpY2llbnQgZm9yIGNhdGNoaW5nIE9PQiByZWFkcyBkdWUgdG8gYSBtaXNtYXRjaCBiZXR3ZWVuIGZvbnQgc2l6ZSBhbmQgYnVmZmVyIHNpemUuIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldF9ibGl0dGluZ190eXBlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9NjQxPXN0YXRpYyB2b2lkIGZiY29uX3ByZXBhcmVfbG9nbyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLFxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTczMC0jaWZkZWYgQ09ORklHX0ZCX1RJTEVCTElUVElOR1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6NzMxOnN0YXRpYyB2b2lkIHNldF9ibGl0dGluZ190eXBlKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8pXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy03MzIte1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTc0NT1zdGF0aWMgaW50IGZiY29uX2ludmFsaWRfY2hhcmNvdW50KHN0cnVjdCBmYl9pbmZvICppbmZvLCB1bnNpZ25lZCBjaGFyY291bnQpXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtNzU1LSNlbHNlXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzo3NTY6c3RhdGljIHZvaWQgc2V0X2JsaXR0aW5nX3R5cGUoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbylcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTc1Ny17XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9ODI3PXN0YXRpYyBpbnQgY29uMmZiX2FjcXVpcmVfbmV3aW5mbyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLFxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTgzNi1cdGlmICh2YylcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjgzNzpcdFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtODM4LVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTkxMj1zdGF0aWMgaW50IHNldF9jb24yZmJfbWFwKGludCB1bml0LCBpbnQgbmV3aWR4LCBpbnQgdXNlcilcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy05NDItXHR9IGVsc2UgaWYgKHZjKSB7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzo5NDM6XHRcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTk0NC1cdH1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0xMDE0PXN0YXRpYyBjb25zdCBjaGFyICpmYmNvbl9zdGFydHVwKHZvaWQpXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTA1My1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjEwNTQ6XHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0xMDU1LVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTEwODg9c3RhdGljIHZvaWQgZmJjb25faW5pdChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGJvb2wgaW5pdClcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0xMTc1LVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MTE3NjpcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTExNzctXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTIzMC1cdFx0cGFyLVx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjEyMzE6XHRcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTEyMzItXHR9XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MjE0Mz1zdGF0aWMgYm9vbCBmYmNvbl9zd2l0Y2goc3RydWN0IHZjX2RhdGEgKnZjKVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTIyMTMtXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoyMjE0Olx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjIxNS1cdHBhci1cdTAwM2VjdXJzb3JfcmVzZXQgPSAxO1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTIyMTgtXHRcdHBhci1cdTAwM2Vyb3RhdGUgPSBGQl9ST1RBVEVfVVI7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoyMjE5Olx0XHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yMjIwLVx0fVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI0MDA9c3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCxcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNDMwLVx0XHRcdHBhci1cdTAwM2Vyb3RhdGUgPSBGQl9ST1RBVEVfVVI7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoyNDMxOlx0XHRcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI0MzItXHRcdH1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNDcxLVx0XHRcdHBhci1cdTAwM2Vyb3RhdGUgPSBGQl9ST1RBVEVfVVI7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoyNDcyOlx0XHRcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI0NzMtXHRcdH1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0yNjQ0PXN0YXRpYyB2b2lkIGZiY29uX21vZGVjaGFuZ2VkKHN0cnVjdCBmYl9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI2NjgtXHRwID0gXHUwMDI2ZmJfZGlzcGxheVt2Yy1cdTAwM2V2Y19udW1dO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjY2OTpcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI2NzAtXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjY3OS1cdFx0cGFyLVx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI2ODA6XHRcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI2ODEtXHR9XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MjcwND1zdGF0aWMgdm9pZCBmYmNvbl9zZXRfYWxsX3ZjcyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNzI4LVx0XHRwID0gXHUwMDI2ZmJfZGlzcGxheVt2Yy1cdTAwM2V2Y19udW1dO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjcyOTpcdFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjczMC1cdFx0dmFyX3RvX2Rpc3BsYXkocCwgXHUwMDI2aW5mby1cdTAwM2V2YXIsIGluZm8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgyMwoJCQkJCQkJb3V0cHV0OiAxNzQKCQkJCQkJCXRob3VnaHRzOiAzMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJ1ZyoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBUaGUgZnVuY3Rpb24gYHNldF9ibGl0dGluZ190eXBlYCBpcyBqdXN0IHNldHRpbmcgdXAgdGhlIHJlbmRlcmluZyBmdW5jdGlvbiBwb2ludGVycyDigJMgdGhpbmdzIGxpa2UgYHZjLSZndDt2Y19zdy0mZ3Q7Y29uX3B1dGNgIGFuZCBzbyBvbi4gTm8gbWVtb3J5IGFsbG9jYXRpb24sIG5vIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgbm90aGluZyBsaWtlIHRoYXQuIFRoZSBoZWFydCBvZiB0aGUgcHJvYmxlbSBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBvdXQtb2YtYm91bmRzIChPT0IpIHJlYWQgb24gdGhlIGhlYXAgd2hlbiB0ZXh0IGlzIHJlbmRlcmVkIHRvIHRoZSBmcmFtZWJ1ZmZlci4gS0FTQU4gc2hvdWxkIGJlIGFibGUgdG8gY2F0Y2ggdGhpcyBlYXNpbHkuCgpIZXJlJiMzOTtzIHRoZSBicmVha2Rvd24sIGFzIEkgc2VlIGl0OgoKMS4gIFRoZSBwYXRjaCBpcyBpbnRyb2R1Y2luZyBjYWxscyB0byBgcm90YXRlX2ZvbnRgIHdpdGhpbiBgZmJjb25fZG9fc2V0X2ZvbnRgIHdoZW4gYHZjX2hpX2ZvbnRfbWFza2AgZ2V0cyBtb2RpZmllZC4KMi4gIGB2Y19oaV9mb250X21hc2tgIGNoYW5nZXMgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGZvbnQmIzM5O3MgY2hhcmFjdGVyIGNvdW50IHN3aXRjaGVzIGJldHdlZW4gMjU2IGFuZCA1MTIgY2hhcmFjdGVycy4KMy4gIFRoZSBjcml0aWNhbCBvdmVyc2lnaHQgaXMgdGhhdCBpZiBgcm90YXRlX2ZvbnRgIGlzbiYjMzk7dCBjYWxsZWQsIGBwYXItJmd0O3JvdGF0ZWQuYnVmYCBkb2VzbiYjMzk7dCBnZXQgcmVhbGxvY2F0ZWQgdG8gdGhlIHNpemUgcmVxdWlyZWQgZm9yIHRoZSAqbmV3KiBmb250LCB3aGljaCBpcyA1MTIgY2hhcmFjdGVycy4KNC4gIENvbnNlcXVlbnRseSwgd2hlbiBgZmJjb25gIGdvZXMgdG8gcmVuZGVyIHRleHQsIGl0JiMzOTtzIHVzaW5nIHRoZSAqbmV3KiBjaGFyYWN0ZXIgY291bnQgKDUxMikgdG8gaW5kZXggaW50byBgcGFyLSZndDtyb3RhdGVkLmJ1ZmAsIHdoaWNoIHdhcyBpbml0aWFsbHkgYWxsb2NhdGVkIGZvciB0aGUgKm9sZCogY291bnQgKDI1NikuCjUuICBUaGlzIGlzIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb24gdGhlIGhlYXAuIFdlJiMzOTtyZSBhY2Nlc3NpbmcgbWVtb3J5IG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgYWxsb2NhdGVkIGJ1ZmZlci4KNi4gIFRoYXQmIzM5O3MgZXhhY3RseSB3aGF0IEtBU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoIOKAkyBoZWFwIG91dC1vZi1ib3VuZHMgcmVhZHMuCjcuICBDcnVjaWFsbHksIHRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgYW55IGluZm9ybWF0aW9uIGxlYWsgdG8gdXNlciBzcGFjZSBpbnZvbHZlZCBpbiB0aGlzLgo4LiAgU28sIEtNU0FOIGlzbiYjMzk7dCByZWxldmFudCBoZXJlLiBUaGUgcHJvYmxlbSBpcyBhIHNpbXBsZSBPT0IgcmVhZCB0aGF0IEtBU0FOIHNob3VsZCBoYW5kbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBmYmNvbl9kb19zZXRfZm9udGAgd2hlcmUgY2hhbmdpbmcgdGhlIGZvbnQgY2hhcmFjdGVyIGNvdW50IChlLmcuLCBmcm9tIDI1NiB0byA1MTIpIHdpdGhvdXQgdXBkYXRpbmcgdGhlIHJvdGF0ZWQgZm9udCBidWZmZXIgKGBwYXItXHUwMDNlcm90YXRlZC5idWZgKSBsZWFkcyB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQuIFdoZW4gYGZiY29uYCByZW5kZXJzIHRleHQsIGl0IHVzZXMgdGhlIG5ldyBjaGFyYWN0ZXIgY291bnQgdG8gaW5kZXggaW50byB0aGUgb2xkLCBzbWFsbGVyIGJ1ZmZlciwgcmVzdWx0aW5nIGluIGEgaGVhcCBPT0IgcmVhZC4gVGhpcyBpcyBhIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBpc3N1ZSB0aGF0IGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWsgdG8gdXNlciBzcGFjZSBpbnZvbHZlZCwgYXMgdGhlIGJ1ZmZlciBpcyBmdWxseSBpbml0aWFsaXplZCB1cCB0byBpdHMgYWxsb2NhdGVkIHNpemUuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBmYmNvbl9kb19zZXRfZm9udGAgd2hlcmUgY2hhbmdpbmcgdGhlIGZvbnQgY2hhcmFjdGVyIGNvdW50IChlLmcuLCBmcm9tIDI1NiB0byA1MTIpIHdpdGhvdXQgdXBkYXRpbmcgdGhlIHJvdGF0ZWQgZm9udCBidWZmZXIgKGBwYXItXHUwMDNlcm90YXRlZC5idWZgKSBsZWFkcyB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQuIFdoZW4gYGZiY29uYCByZW5kZXJzIHRleHQsIGl0IHVzZXMgdGhlIG5ldyBjaGFyYWN0ZXIgY291bnQgdG8gaW5kZXggaW50byB0aGUgb2xkLCBzbWFsbGVyIGJ1ZmZlciwgcmVzdWx0aW5nIGluIGEgaGVhcCBPT0IgcmVhZC4gVGhpcyBpcyBhIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBpc3N1ZSB0aGF0IGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWsgdG8gdXNlciBzcGFjZSBpbnZvbHZlZCwgYXMgdGhlIGJ1ZmZlciBpcyBmdWxseSBpbml0aWFsaXplZCB1cCB0byBpdHMgYWxsb2NhdGVkIHNpemUuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDc6NDkuMjU2OTczNzA5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0ODYzMDA3MzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZCXCIsXG4gICAgXCJGQl9WSVJUVUFMXCIsXG4gICAgXCJGUkFNRUJVRkZFUl9DT05TT0xFXCIsXG4gICAgXCJGUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmJjb25fc2V0X2ZvbnRcIixcbiAgICBcImZiY29uX3NldF9kZWZfZm9udFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGZiY29uX2RvX3NldF9mb250YCB3aGVyZSBjaGFuZ2luZyB0aGUgZm9udCBjaGFyYWN0ZXIgY291bnQgKGUuZy4sIGZyb20gMjU2IHRvIDUxMikgd2l0aG91dCB1cGRhdGluZyB0aGUgcm90YXRlZCBmb250IGJ1ZmZlciAoYHBhci1cXHUwMDNlcm90YXRlZC5idWZgKSBsZWFkcyB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQuIFdoZW4gYGZiY29uYCByZW5kZXJzIHRleHQsIGl0IHVzZXMgdGhlIG5ldyBjaGFyYWN0ZXIgY291bnQgdG8gaW5kZXggaW50byB0aGUgb2xkLCBzbWFsbGVyIGJ1ZmZlciwgcmVzdWx0aW5nIGluIGEgaGVhcCBPT0IgcmVhZC4gVGhpcyBpcyBhIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBpc3N1ZSB0aGF0IGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWsgdG8gdXNlciBzcGFjZSBpbnZvbHZlZCwgYXMgdGhlIGJ1ZmZlciBpcyBmdWxseSBpbml0aWFsaXplZCB1cCB0byBpdHMgYWxsb2NhdGVkIHNpemUuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBmcmFtZWJ1ZmZlciBjb25zb2xlIGZvbnQgc2V0dGluZyBsb2dpYyAoZmJjb25fZG9fc2V0X2ZvbnQpIHRvIGhhbmRsZSBmb250IHJvdGF0aW9uIHdoZW4gdGhlIGNvbnNvbGUgaXMgdmlzaWJsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGNvcmUgc3Vic3lzdGVtIChmYmNvbikgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBpb2N0bHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA3OjQ5LjI1Njk3OTU2OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1NTk4NzcxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDRkNTg4ZTIwMmU0M2Y4M2E3ZTg5NGY3NzA3NDBiODhjOGYzNjI2OGVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDI6MDc6NDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uY1xcbmluZGV4IDIzYjNjNTM2ZDUzZDEuLmM3NGE0OTA1YjhlMmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmNcXG4rKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uY1xcbkBAIC0yNDI1LDYgKzI0MjUsMTMgQEAgc3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCxcXG4gXFx0ZWxzZSBpZiAoIXZjLVxcdTAwM2V2Y19oaV9mb250X21hc2sgXFx1MDAyNlxcdTAwMjYgY2hhcmNvdW50ID09IDUxMilcXG4gXFx0XFx0c2V0X3ZjX2hpX2ZvbnQodmMsIHRydWUpO1xcbiBcXG4rXFx0aWYgKGNvbl9pc192aXNpYmxlKHZjKSkge1xcbitcXHRcXHRpZiAocGFyLVxcdTAwM2ViaXRvcHMtXFx1MDAzZXJvdGF0ZV9mb250IFxcdTAwMjZcXHUwMDI2IHBhci1cXHUwMDNlYml0b3BzLVxcdTAwM2Vyb3RhdGVfZm9udChpbmZvLCB2YykpIHtcXG4rXFx0XFx0XFx0cGFyLVxcdTAwM2Vyb3RhdGUgPSBGQl9ST1RBVEVfVVI7XFxuK1xcdFxcdFxcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbiBcXHRpZiAocmVzaXplKSB7XFxuIFxcdFxcdGludCBjb2xzLCByb3dzO1xcbiBcXG5AQCAtMjQ1OSw2ICsyNDY2LDEzIEBAIHN0YXRpYyBpbnQgZmJjb25fZG9fc2V0X2ZvbnQoc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgdywgaW50IGgsIGludCBjaGFyY291bnQsXFxuIFxcdGVsc2UgaWYgKCFvbGRfaGlfZm9udF9tYXNrIFxcdTAwMjZcXHUwMDI2IHZjLVxcdTAwM2V2Y19oaV9mb250X21hc2spXFxuIFxcdFxcdHNldF92Y19oaV9mb250KHZjLCBmYWxzZSk7XFxuIFxcbitcXHRpZiAoY29uX2lzX3Zpc2libGUodmMpKSB7XFxuK1xcdFxcdGlmIChwYXItXFx1MDAzZWJpdG9wcy1cXHUwMDNlcm90YXRlX2ZvbnQgXFx1MDAyNlxcdTAwMjYgcGFyLVxcdTAwM2ViaXRvcHMtXFx1MDAzZXJvdGF0ZV9mb250KGluZm8sIHZjKSkge1xcbitcXHRcXHRcXHRwYXItXFx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcXG4rXFx0XFx0XFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdGZvbnRfZGF0YV9wdXQoZGF0YSk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowNzo1MC41MTM5MzIxNjhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MTc1MTE0MTY2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGQlwiLFxuICAgIFwiRkJfVklSVFVBTFwiLFxuICAgIFwiRlJBTUVCVUZGRVJfQ09OU09MRVwiLFxuICAgIFwiRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZiY29uX3NldF9mb250XCIsXG4gICAgXCJmYmNvbl9zZXRfZGVmX2ZvbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBmcmFtZWJ1ZmZlciBjb25zb2xlIGZvbnQgc2V0dGluZyBsb2dpYyAoZmJjb25fZG9fc2V0X2ZvbnQpIHRvIGhhbmRsZSBmb250IHJvdGF0aW9uIHdoZW4gdGhlIGNvbnNvbGUgaXMgdmlzaWJsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGNvcmUgc3Vic3lzdGVtIChmYmNvbikgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBpb2N0bHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRkNTg4ZTIwMmU0M2Y4M2E3ZTg5NGY3NzA3NDBiODhjOGYzNjI2OGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwMjowNzo0NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jIGIvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmNcbmluZGV4IDIzYjNjNTM2ZDUzZDEuLmM3NGE0OTA1YjhlMmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uY1xuKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmNcbkBAIC0yNDI1LDYgKzI0MjUsMTMgQEAgc3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCxcbiBcdGVsc2UgaWYgKCF2Yy1cdTAwM2V2Y19oaV9mb250X21hc2sgXHUwMDI2XHUwMDI2IGNoYXJjb3VudCA9PSA1MTIpXG4gXHRcdHNldF92Y19oaV9mb250KHZjLCB0cnVlKTtcbiBcbitcdGlmIChjb25faXNfdmlzaWJsZSh2YykpIHtcbitcdFx0aWYgKHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQgXHUwMDI2XHUwMDI2IHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQoaW5mbywgdmMpKSB7XG4rXHRcdFx0cGFyLVx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcbitcdFx0XHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XG4rXHRcdH1cbitcdH1cbitcbiBcdGlmIChyZXNpemUpIHtcbiBcdFx0aW50IGNvbHMsIHJvd3M7XG4gXG5AQCAtMjQ1OSw2ICsyNDY2LDEzIEBAIHN0YXRpYyBpbnQgZmJjb25fZG9fc2V0X2ZvbnQoc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgdywgaW50IGgsIGludCBjaGFyY291bnQsXG4gXHRlbHNlIGlmICghb2xkX2hpX2ZvbnRfbWFzayBcdTAwMjZcdTAwMjYgdmMtXHUwMDNldmNfaGlfZm9udF9tYXNrKVxuIFx0XHRzZXRfdmNfaGlfZm9udCh2YywgZmFsc2UpO1xuIFxuK1x0aWYgKGNvbl9pc192aXNpYmxlKHZjKSkge1xuK1x0XHRpZiAocGFyLVx1MDAzZWJpdG9wcy1cdTAwM2Vyb3RhdGVfZm9udCBcdTAwMjZcdTAwMjYgcGFyLVx1MDAzZWJpdG9wcy1cdTAwM2Vyb3RhdGVfZm9udChpbmZvLCB2YykpIHtcbitcdFx0XHRwYXItXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xuK1x0XHRcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcbitcdFx0fVxuK1x0fVxuK1xuIFx0Zm9udF9kYXRhX3B1dChkYXRhKTtcbiBcbiBcdHJldHVybiByZXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowNzo1MC41MTU4NjkwOThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzIzNzM1ODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgZmJjb24uYyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCdzIHRvdWNoZWQgYGRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyBhcmUgd2l0aGluIHRoZSBgZmJjb25fZG9fc2V0X2ZvbnRgIGZ1bmN0aW9uLiBMb29raW5nIGF0IHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlIHRoZXkndmUgYWRkZWQgdGhpcyBjb25kaXRpb25hbCBjaGVjazpcblxuYGBgY1xuXHRpZiAoY29uX2lzX3Zpc2libGUodmMpKSB7XG5cdFx0aWYgKHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQgXHUwMDI2XHUwMDI2IHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQoaW5mbywgdmMpKSB7XG5cdFx0XHRwYXItXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xuXHRcdFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xuXHRcdH1cblx0fVxuYGBgXG5cbi4uLmFuZCB0aGlzIHNuaXBwZXQgaXMgcHJlc2VudCBpbiB0d28gbG9jYXRpb25zIGluc2lkZSBvZiBgZmJjb25fZG9fc2V0X2ZvbnRgLiBOb3csIGZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGlzIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gaG93IHRoZSBmcmFtZWJ1ZmZlciBjb25zb2xlIGhhbmRsZXMgZm9udCBzZXR0aW5nLiBHaXZlbiB0aGF0IGBmYmNvbl9kb19zZXRfZm9udGAgaXMgdGhlIHRhcmdldCwgYW5kIGBmYmNvbi5jYCBoYXMgYmVlbiBkaXJlY3RseSBlZGl0ZWQsIHRoaXMgaXMgZGVmaW5pdGVseSBhIHJlYWNoYWJsZSBjb2RlIHBhdGguIEdpdmVuIGl0cyByZWxldmFuY2UgdG8gZm9udCBzZXR0aW5ncywgaXQncyB2ZXJ5IGxpa2VseSB0byBiZSB3b3J0aCBmdXp6aW5nLCBhbmQgSSBzaG91bGQgc2VlIGlmIEkgY2FuIGZpbmQgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBgZmJjb24uY2AgYW5kIGhvdyBpdCdzIGVuYWJsZWQuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdHJpZ2dlcnMgdGhpcyBgcm90YXRlX2ZvbnRgIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGZpcnN0IHBsYWNlLCBidXQgdGhlIGNvbmRpdGlvbmFsIGNoZWNrLCBhbmQgdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGJsaXR0aW5nIHR5cGVzLCBzaG91bGQgYmUgZ29vZCBwbGFjZXMgdG8gc3RhcnQgdGhlIGZ1enppbmcgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA3OjU0LjgzOTYwODAwN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTQzNTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYmNvbi5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvTWFrZWZpbGU9MTU9aWZlcSAoJChDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSkseSlcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvTWFrZWZpbGU6MTY6ZmIteVxcdFxcdFxcdFxcdCAgKz0gZmJjb24ubyBiaXRibGl0Lm8gc29mdGN1cnNvci5vXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL01ha2VmaWxlLTE3LWlmZXEgKCQoQ09ORklHX0ZCX1RJTEVCTElUVElORykseSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDc6NTQuOTM5MDQ5Nzg3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzNjg2MTEzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgaXM6XG5cbioqRXhhbWluaW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGNvbmZpZyBhbmQgc2VlIGBGUkFNRUJVRkZFUl9DT05TT0xFYCBpcyBzZXQuIE15IG5leHQgc3RlcCBpcyBhdXRvbWF0aWMg4oCTIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgaXRlbSdzIHBsYWNlIGluIHRoZSBicm9hZGVyIGNvbmZpZ3VyYXRpb24uIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBqdXN0IGtub3dpbmcgdGhlIHN0YXRlIG9mIG9uZSBjb25maWcgb3B0aW9uIGlzIHJhcmVseSBlbm91Z2ggdG8gZHJhdyBhbnkgdmFsaWQgY29uY2x1c2lvbnMuIFdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSByZWx5IG9uIGl0PyBBcmUgdGhlcmUgYW55IG9wdGlvbnMgdGhpcyBvbmUgZGVwZW5kcyBvbj8gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzLCBvciBsYWNrIHRoZXJlb2YsIG9mIGBGUkFNRUJVRkZFUl9DT05TT0xFYCB3aWxsIGRldGVybWluZSB3aGF0IG90aGVyIGl0ZW1zIEkgbWF5IGhhdmUgdG8gY29uc2lkZXIgZHVyaW5nIHRoZSBuZXh0IHBoYXNlcyBvZiBkZWJ1Z2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MDYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowNzo1OS4yNzU5MTQ0MzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk2OTQ2ODYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGUkFNRUJVRkZFUl9DT05TT0xFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowNzo1OS4zNDU2MTc5MTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODQ4OTcyMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEZyYW1lYnVmZmVyIENvbnNvbGUgRHJpdmVycyoqXG5cblJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byBmaW5kIHRoZSByZWxldmFudCBjb2RlLCBhbmQgYmFzZWQgb24gZXhwZXJpZW5jZSwgYEZSQU1FQlVGRkVSX0NPTlNPTEVgIGlzIHRoZSBrZXl3b3JkIEknbSBhZnRlci4gTm93LCB3aGVyZSB3b3VsZCB0aGUgZHJpdmVycyBmb3IgdGhhdCBsaWtlbHkgcmVzaWRlPyBUaGUgbG9naWNhbCBwbGFjZSBpcyB1bmRlciB0aGUgYGRyaXZlcnMvdmlkZW8vYCBkaXJlY3RvcnkgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFRoYXQncyB0aGUgYnJvYWQgc3Ryb2tlcyB2aWRlbyBkcml2ZXIgc2VjdGlvbiwgc28gdGhhdCdzIHdoZXJlIEknbGwgc3RhcnQgbG9va2luZy4gQ29uc2lkZXJpbmcgaG93IGNvbnNvbGUgZHJpdmVycyBpbnRlcmFjdCB3aXRoIHRoZSBmcmFtZWJ1ZmZlciwgSSdsbCBhbHNvIGNoZWNrIGBkcml2ZXJzL3ZpZGVvL2NvbnNvbGUvYC4gSXQncyBhIGJpdCBtb3JlIHNwZWNpZmljIGFuZCBtaWdodCBjb250YWluIG1vcmUgZm9jdXNlZCBpbXBsZW1lbnRhdGlvbnMsIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCByZWxldmFudCBoZWFkZXIgZmlsZXMgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ2xsIHNlYXJjaCBib3RoIGFyZWFzIG1ldGhvZGljYWxseS4gVGhhdCdzIHRoZSBwbGFuLiBMZXQncyBzZWUgd2hhdCB3ZSB0dXJuIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTE1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDg6MDIuMTk0NTkzMDM0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MTEwMjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGUkFNRUJVRkZFUl9DT05TT0xFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmlkZW8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnPTQ3PWNvbmZpZyBEVU1NWV9DT05TT0xFX1JPV1NcXG4tLVxcbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnLTU3LVxcbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnOjU4OmNvbmZpZyBGUkFNRUJVRkZFUl9DT05TT0xFXFxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWctNTktXFx0Ym9vbCBcXFwiRnJhbWVidWZmZXIgQ29uc29sZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWctNjctXFxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWc6Njg6Y29uZmlnIEZSQU1FQlVGRkVSX0NPTlNPTEVfTEVHQUNZX0FDQ0VMRVJBVElPTlxcbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkVuYWJsZSBsZWdhY3kgZmJjb24gaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGNvZGVcXFwiXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZy04Ny1cXG5kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZzo4ODpjb25maWcgRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWVxcbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnLTg5LSAgICAgICBib29sIFxcXCJNYXAgdGhlIGNvbnNvbGUgdG8gdGhlIHByaW1hcnkgZGlzcGxheSBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZy0xMDMtXFxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWc6MTA0OmNvbmZpZyBGUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OXFxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWctMTA1LSAgICAgICBib29sIFxcXCJGcmFtZWJ1ZmZlciBDb25zb2xlIFJvdGF0aW9uXFxcIlxcbi0tXFxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWctMTEzLVxcbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnOjExNDpjb25maWcgRlJBTUVCVUZGRVJfQ09OU09MRV9ERUZFUlJFRF9UQUtFT1ZFUlxcbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnLTExNS1cXHRib29sIFxcXCJGcmFtZWJ1ZmZlciBDb25zb2xlIERlZmVycmVkIFRha2VvdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODowMi4yNjI3MDg5MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODkzNjkwMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25zb2xlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGUgdmlkZW8gY29uc29sZSBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGlzIGtlcm5lbC4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgYGRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8ganVtcCBpbiBhcm91bmQgbGluZSA1OC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGJhc2ljIGZlYXR1cmUgZGVmaW5pdGlvbnMgaW4gdGhpcyBzZWN0aW9uLCBsaWtlbHkgcmVsYXRpbmcgdG8gdGhlIGNvcmUgY29uc29sZSBkcml2ZXIgaXRzZWxmLCBtYXliZSBvcHRpb25zIGZvciBzZWxlY3RpbmcgZGVmYXVsdCBtb2RlcyBvciBoYW5kbGluZyBkaWZmZXJlbnQgdHlwZXMgb2YgaGFyZHdhcmUuIEnigJltIGd1ZXNzaW5nIGl04oCZcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZ2V0IGFuIG92ZXJ2aWV3IG9mIHdoYXTigJlzIGF2YWlsYWJsZSBiZWZvcmUgbG9va2luZyBhdCBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBmb2xsb3cuIEnigJltIHRoaW5raW5nIEkgY2FuIGZpbmQgc29tZSBvZiB0aGUgY29yZSB2YXJpYWJsZXMgb3Igb3B0aW9ucyBiZWluZyBzZXQgaGVyZSB0aGF0IHdpbGwgcHJvYmFibHkgYmUgcmVsZXZhbnQgdG8gb3RoZXIgYXNwZWN0cyBvZiB0aGUgdmlkZW8gc3RhY2sgYXMgd2VsbC4gSXQgY291bGQgYmUgdXNlZnVsIGZvciBmaW5kaW5nIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY5NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA4OjA2LjA1MjA4MDYwOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzc5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHRcXHRkZWZhdWx0IDY0IGlmIFBBUklTQ1xcbiAgNTE6XFx0XFx0ZGVmYXVsdCAzMCBpZiBBUk1cXG4gIDUyOlxcdFxcdGRlZmF1bHQgMjVcXG4gIDUzOlxcdFxcdGhlbHBcXG4gIDU0OlxcdFxcdCAgT24gUEEtUklTQywgdGhlIGRlZmF1bHQgdmFsdWUgaXMgNjQsIHdoaWNoIHNob3VsZCBmaXQgYSAxMjgweDEwMjRcXG4gIDU1OlxcdFxcdCAgbW9uaXRvci5cXG4gIDU2OlxcdFxcdCAgU2VsZWN0IDI1IGlmIHlvdSB1c2UgYSA2NDB4NDgwIHJlc29sdXRpb24gYnkgZGVmYXVsdC5cXG4gIDU3OlxcdFxcbiAgNTg6XFx0Y29uZmlnIEZSQU1FQlVGRkVSX0NPTlNPTEVcXG4gIDU5OlxcdFxcdGJvb2wgXFxcIkZyYW1lYnVmZmVyIENvbnNvbGUgc3VwcG9ydFxcXCJcXG4gIDYwOlxcdFxcdGRlcGVuZHMgb24gRkJfQ09SRSBcXHUwMDI2XFx1MDAyNiAhVU1MXFxuICA2MTpcXHRcXHRkZWZhdWx0IERSTV9GQkRFVl9FTVVMQVRJT05cXG4gIDYyOlxcdFxcdHNlbGVjdCBWVF9IV19DT05TT0xFX0JJTkRJTkdcXG4gIDYzOlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgNjQ6XFx0XFx0c2VsZWN0IEZPTlRfU1VQUE9SVFxcbiAgNjU6XFx0XFx0aGVscFxcbiAgNjY6XFx0XFx0ICBMb3ctbGV2ZWwgZnJhbWVidWZmZXItYmFzZWQgY29uc29sZSBkcml2ZXIuXFxuICA2NzpcXHRcXG4gIDY4OlxcdGNvbmZpZyBGUkFNRUJVRkZFUl9DT05TT0xFX0xFR0FDWV9BQ0NFTEVSQVRJT05cXG4gIDY5OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBsZWdhY3kgZmJjb24gaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGNvZGVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA4OjA2LjA1MjE0NzA0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTI1Mzc5ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIEZyYW1lYnVmZmVyIENvbnNvbGUgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBGUkFNRUJVRkZFUl9DT05TT0xFYCBhbmQgdGhlIGJ1aWxkIHN5c3RlbSdzIGxvZ2ljLiBJdCdzIHRlbGxpbmcgbWUgdGhhdCB0aGlzIHBhcnRpY3VsYXIgY29uc29sZSBvcHRpb24gaGluZ2VzIGRpcmVjdGx5IG9uIHRoZSBwcmVzZW5jZSBvZiBgRkJfQ09SRWAsIGJ1dCBpdCBhbHNvICpjYW4ndCogYmUgZW5hYmxlZCB3aGVuIHJ1bm5pbmcgdW5kZXIgVU1MLiBIbW0sIHRoYXQncyBub3Qgc3VycHJpc2luZywgYXMgVU1MIG9mdGVuIGRvZXNuJ3QgaGF2ZSBhIGZyYW1lYnVmZmVyIGF2YWlsYWJsZS4gTm93LCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBgRkJfQ09SRWAgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBkZWZpbmVzIHRoZSBjb3JlIGZyYW1lYnVmZmVyIHN1cHBvcnQsIHNpbmNlIHRoYXQncyBhIHByZXJlcXVpc2l0ZSBmb3IgYEZSQU1FQlVGRkVSX0NPTlNPTEVgLiBMZXQncyBzZWUgd2hhdCB0aGF0IGltcGxpZXMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIyMiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDg6MDkuNzQ0Njg5MDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzUyNjMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRkJfQ09SRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZpZGVvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvS2NvbmZpZy01LVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9LY29uZmlnOjY6Y29uZmlnIEZCX0NPUkVcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvS2NvbmZpZy03LVxcdHNlbGVjdCBWSURFT1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODowOS44NDgyMjAyMjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4MDAxNTAwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGcmFtZWJ1ZmZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgZnJhbWVidWZmZXIgY29yZSdzIGNvbmZpZ3VyYXRpb24gZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gaGVhZGluZyB0byBgZHJpdmVycy92aWRlby9mYmRldi9jb3JlL0tjb25maWdgIGFyb3VuZCBsaW5lIDYuIEknbSBhc3N1bWluZyB0aGF0J3Mgd2hlcmUgdGhlIHByaW1hcnkgRkJERVYgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBzZWUgdGhlIG1haW4gYENPTkZJR19GQmAgb3B0aW9uIGRlY2xhcmVkIHRoZXJlLCBhbG9uZyB3aXRoIHNvbWUgb2YgdGhlIG1vcmUgZnVuZGFtZW50YWwgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0cy4gRGVwZW5kaW5nIG9uIHdoYXQgSSBmaW5kLCB0aGlzIHdpbGwgaW5mb3JtIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgaG93IHRoZSBGQkRFViBzdWJzeXN0ZW0gaXMgYnVpbHQgYW5kIGNvbmZpZ3VyZWQgaW50byB0aGUga2VybmVsLiBJdOKAmXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBmcmFtZWJ1ZmZlcnMgYXJlIGVuYWJsZWQgYW5kLCBieSBleHRlbnNpb24sIGhvdyB0aGUgcmVzdCBvZiB0aGUgZ3JhcGhpY3Mgc3RhY2sgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0ODksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODoxMy40MjgyMzgyODlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIGZiZGV2IGNvcmUgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgRkJfQ09SRVxcbiAgIDc6XFx0XFx0c2VsZWN0IFZJREVPXFxuICAgODpcXHRcXHR0cmlzdGF0ZVxcbiAgIDk6XFx0XFxuICAxMDpcXHRjb25maWcgRkJfTk9USUZZXFxuICAxMTpcXHRcXHRib29sXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBGQl9ERVZJQ0VcXG4gIDE0OlxcdFxcdGJvb2wgXFxcIlByb3ZpZGUgbGVnYWN5IC9kZXYvZmIqIGRldmljZVxcXCJcXG4gIDE1OlxcdFxcdGRlcGVuZHMgb24gRkJfQ09SRVxcbiAgMTY6XFx0XFx0ZGVmYXVsdCBGQlxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRoZSBsZWdhY3kgL2Rldi9mYiogZGV2aWNlIGZpbGUgYW5kXFxuICAxOTpcXHRcXHQgIGludGVyZmFjZXMgd2l0aGluIHN5c2ZzIGFuZCBwcm9jZnMuIEl0IGlzIG9ubHkgcmVxdWlyZWQgaWYgeW91XFxuICAyMDpcXHRcXHQgIGhhdmUgdXNlcnNwYWNlIHByb2dyYW1zIHRoYXQgZGVwZW5kIG9uIGZiZGV2IGZvciBncmFwaGljcyBvdXRwdXQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA4OjEzLjQyODM0MTkyOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTYzNTczMzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRm9udCBSb3RhdGlvbiBMb2dpYyBpbiB0aGUgRnJhbWVidWZmZXIgQ29uc29sZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgYmFjayBpbnRvIHRoaXMgZnJhbWVidWZmZXIgZm9udCByb3RhdGlvbiBpc3N1ZS4gUmVtaW5kaW5nIG15c2VsZiB0aGF0IGBGUkFNRUJVRkZFUl9DT05TT0xFYCBhbmQgYEZCX0NPUkVgIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGluIHBsYXkgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCBtb3JlIGRlZXBseS5cblxuTGV0J3MgcmUtZXhhbWluZSB0aGF0IGNvZGUgc25pcHBldC4gUmlnaHQsIGl0J3MgaW5zaWRlIGBmYmNvbl9kb19zZXRfZm9udGAuIFNwZWNpZmljYWxseSwgaXQgY2hlY2tzIGlmIHRoZSB2aXJ0dWFsIGNvbnNvbGUgKGB2Y2ApIGlzIHZpc2libGUuIElmIGl0IGlzLCBhbmQgaWYgdGhlIGZyYW1lYnVmZmVyJ3MgYml0IG9wZXJhdGlvbnMgaGF2ZSBhIGByb3RhdGVfZm9udGAgZnVuY3Rpb24gZGVmaW5lZCAqYW5kKiB0aGF0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGNhbGxlZCB3aXRoIHRoZSB2aWRlbyBpbmZvcm1hdGlvbiwgdGhlbiB3ZSBzZXQgdGhlIGBwYXItXHUwMDNlcm90YXRlYCBmbGFnIHRvIGBGQl9ST1RBVEVfVVJgIGFuZCB1cGRhdGUgdGhlIGJsaXR0aW5nIHR5cGUuXG5cbk15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGNvbmZpcm0gdGhlIHNjb3BlIG9mIGBmYmNvbl9kb19zZXRfZm9udGAuIEdvb2QsIGl0ICppcyogYSBzdGF0aWMgZnVuY3Rpb246IGBzdGF0aWMgaW50IGZiY29uX2RvX3NldF9mb250KC4uLilgLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuIFdobydzIGNhbGxpbmcgdGhpcyBgZmJjb25fZG9fc2V0X2ZvbnRgPyBJIGhhdmUgdG8gdHJhY2UgYmFjayB0aGUgY2FsbGVycyB0byBnZXQgYSBmdWxsIHBpY3R1cmUgb2YgaG93IHRoaXMgZm9udCByb3RhdGlvbiBtZWNoYW5pc20gaXMgYWN0dWFsbHkgdHJpZ2dlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTY2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDg6MTcuMzkxOTE4NTY0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzUyOTIxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYmNvbl9kb19zZXRfZm9udFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0yMzQwPXN0YXRpYyB2b2lkIHNldF92Y19oaV9mb250KHN0cnVjdCB2Y19kYXRhICp2YywgYm9vbCBzZXQpXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yMzk5LVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI0MDA6c3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCxcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNDAxLVxcdFxcdFxcdCAgICAgZm9udF9kYXRhX3QgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0yNDg2PXN0YXRpYyBpbnQgZmJjb25fc2V0X2ZvbnQoc3RydWN0IHZjX2RhdGEgKnZjLCBjb25zdCBzdHJ1Y3QgY29uc29sZV9mb250ICpmb250LFxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjUzMS1cXHR9XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjUzMjpcXHRyZXQgPSBmYmNvbl9kb19zZXRfZm9udCh2YywgZm9udC1cXHUwMDNld2lkdGgsIGZvbnQtXFx1MDAzZWhlaWdodCwgY2hhcmNvdW50LCBuZXdfZGF0YSk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjUzMy1cXHRmb250X2RhdGFfcHV0KG5ld19kYXRhKTtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI1Mzg9c3RhdGljIGludCBmYmNvbl9zZXRfZGVmX2ZvbnQoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgY29uc29sZV9mb250ICpmb250LFxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjU1MS1cXHRmb250LVxcdTAwM2VoZWlnaHQgPSBmLVxcdTAwM2VoZWlnaHQ7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjU1MjpcXHRyZXR1cm4gZmJjb25fZG9fc2V0X2ZvbnQodmMsIGYtXFx1MDAzZXdpZHRoLCBmLVxcdTAwM2VoZWlnaHQsIGYtXFx1MDAzZWNoYXJjb3VudCwgZi1cXHUwMDNlZGF0YSk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjU1My19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA4OjE3LjQ1NTQ1Mjg1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzkxNTg4MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCB0aGlzIGFyZWE6XG5cbioqQ2hlY2tpbmcgRm9udCBIYW5kbGluZyBpbiB0aGUgS2VybmVsKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBmYmNvbl9zZXRfZm9udGAgYW5kIGBmYmNvbl9zZXRfZGVmX2ZvbnRgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBzZXR0aW5nIHRoZSBmb250IGZvciB0aGUgZnJhbWVidWZmZXIgY29uc29sZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSB0aGV5IGFjdHVhbGx5ICpleHBvcnRlZCogc3ltYm9scz8gT3IgYXJlIHRoZXkgdHVja2VkIGF3YXksIG1heWJlIHBhcnQgb2Ygc29tZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBmcmFtZWJ1ZmZlciBkcml2ZXI/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGVpciB2aXNpYmlsaXR5LiBLbm93aW5nIHRoaXMgd2lsbCBpbW1lZGlhdGVseSBpbmZvcm0gaG93IEknZCBhcHByb2FjaCB1c2luZyBvciBtb2RpZnlpbmcgdGhlbSwgYW5kIHdoZXRoZXIgSSBjYW4gZGlyZWN0bHkgY2FsbCB0aGVtIG9yIG5lZWQgdG8gd29yayB0aHJvdWdoIHNvbWUgb3RoZXIgbWVjaGFuaXNtLiBJdCBhbHNvIHRlbGxzIG1lIGFib3V0IHRoZSBkZXNpZ24gY2hvaWNlcyB0aGUgZGV2ZWxvcGVyIG1hZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MDEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODoyMC41MzQ2MTQ4MjJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNzExMzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZiY29uX3NldF9mb250XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI0MDA9c3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCxcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI0ODUtXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjQ4NjpzdGF0aWMgaW50IGZiY29uX3NldF9mb250KHN0cnVjdCB2Y19kYXRhICp2YywgY29uc3Qgc3RydWN0IGNvbnNvbGVfZm9udCAqZm9udCxcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNDg3LVxcdFxcdFxcdCAgdW5zaWduZWQgaW50IHZwaXRjaCwgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MzE3NT1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN3IGZiX2NvbiA9IHtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTMxODUtXFx0LmNvbl9ibGFuayBcXHRcXHQ9IGZiY29uX2JsYW5rLFxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjMxODY6XFx0LmNvbl9mb250X3NldCBcXHRcXHQ9IGZiY29uX3NldF9mb250LFxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTMxODctXFx0LmNvbl9mb250X2dldCBcXHRcXHQ9IGZiY29uX2dldF9mb250LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODoyMC42MTYzMzQ1NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODkxMzQzNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipGb2N1c2luZyBvbiBGb250IFNldHRpbmcgaW4gdGhlIEZyYW1lYnVmZmVyIENvbnNvbGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZmJjb25fc2V0X2ZvbnRgIGFuZCBpdCdzIGNsZWFybHkgYSBrZXkgZnVuY3Rpb24uIEl0J3MgcGFydCBvZiBgZmJfY29uYCwgd2hpY2ggaXMgaW1wbGVtZW50ZWQgYXMgYSBgc3RydWN0IGNvbnN3YC4gVGhhdCBgY29uc3dgIHN0cnVjdHVyZSBtZWFucyB0aGlzIGZ1bmN0aW9uIHBsYXlzIGEgcm9sZSBpbiB0aGUgY29uc29sZSwgc28gc2V0dGluZyB0aGUgZm9udCBtdXN0IGJlIGEgcHJldHR5IGNlbnRyYWwgdGFzay4gYGZiY29uX3NldF9mb250YCBoYXMgdG8gYmUgYSBnb29kIHN5bWJvbCB0byBjb25jZW50cmF0ZSBvbiB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZm9udCBpcyBtYW5pcHVsYXRlZC5cblxuTm93LCB0aGF0IGdldHMgbWUgdGhpbmtpbmc6IHdoYXQgYWJvdXQgYGZiY29uX3NldF9kZWZfZm9udGA/IElzIHRoYXQganVzdCBhIGRlZmF1bHQgb3IgaXMgaXQgc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgZmJjb25fc2V0X2ZvbnRgIGFuZCBgZmJjb25fc2V0X2RlZl9mb250YCwgbWF5YmUgdGhlcmUgYXJlIHNvbWUgZGVmYXVsdCBmb250cyBsb2FkZWQsIGFuZCB0aGlzIGlzIHdoZXJlIHRoYXQncyBoYW5kbGVkLiBNYXliZSBpdCBjYWxscyBgZmJjb25fc2V0X2ZvbnRgIHRvIHNldCB0aGUgbmV3IGRlZmF1bHQsIG9yIG1heWJlIHRoZSBkZWZhdWx0IGZvbnQgaXMgc2V0IG9uY2Ugb24gYm9vdCB1cC4gSSBuZWVkIHRvIGRpZyBpbnRvIGl0IGEgYml0IG1vcmUgdG8gdW5kZXJzdGFuZCB0aGUgYmlnIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MzEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODoyNC41MDc2ODE3N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTczOTgxMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmJjb25fc2V0X2RlZl9mb250XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI0ODY9c3RhdGljIGludCBmYmNvbl9zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGNvbnN0IHN0cnVjdCBjb25zb2xlX2ZvbnQgKmZvbnQsXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNTM3LVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI1Mzg6c3RhdGljIGludCBmYmNvbl9zZXRfZGVmX2ZvbnQoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgY29uc29sZV9mb250ICpmb250LFxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI1MzktXFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTMxNzU9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdyBmYl9jb24gPSB7XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0zMTg3LVxcdC5jb25fZm9udF9nZXQgXFx0XFx0PSBmYmNvbl9nZXRfZm9udCxcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzozMTg4OlxcdC5jb25fZm9udF9kZWZhdWx0XFx0PSBmYmNvbl9zZXRfZGVmX2ZvbnQsXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMzE4OS1cXHQuY29uX3NldF9wYWxldHRlIFxcdD0gZmJjb25fc2V0X3BhbGV0dGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA4OjI0LjU2NTA4NTE4NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzg1NjQ5OTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGJvdGggYGZiY29uX3NldF9mb250YCBhbmQgYGZiY29uX3NldF9kZWZfZm9udGAgYXJlIHBvdGVudGlhbGx5IHN0cm9uZyBjYW5kaWRhdGVzIGZvciBmb2N1c2luZyBvdXIgYXR0ZW50aW9uIGhlcmUuIFRoZXkgc2VlbSBsaWtlIGtleSBwb2ludHMgaW4gdGhlIGZvbnQgaGFuZGxpbmcuIEJ1dCwga25vd2luZyB0aGlzLCBJIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGVsc2UgaW4gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSB3aWRlciBjb25maWd1cmF0aW9uLiBUaGUgY29kZSByZWZlcmVuY2VzIGBwYXItXHUwMDNlYml0b3BzLVx1MDAzZXJvdGF0ZV9mb250YCDigJMgSSBzaG91bGQgZGV0ZXJtaW5lIGlmIGByb3RhdGVfZm9udGAgaXMgdGllZCB0byBhIHBhcnRpY3VsYXIgc2V0dGluZyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFnLiBXZSBuZWVkIHRvIGFzY2VydGFpbiBpZiBpdHMgcHJlc2VuY2UsIG9yIGFic2VuY2UsIGlzIGRpY3RhdGVkIGJ5IGEgc3BlY2lmaWMgYnVpbGQgY29uZmlndXJhdGlvbiBvciBkZXZpY2UgcHJvZmlsZS4gVGhpcyBjb3VsZCBiZSBjcnVjaWFsIHRvIGlkZW50aWZ5aW5nIGEgc3BlY2lmaWMgaXNzdWUgaWYgdGhlcmUgYXJlIGFueSB0aGF0IGhhdmUgY29tZSB0byBsaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA2NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA4OjI3Ljk1MDczNzQzNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEzNDc5MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicm90YXRlX2ZvbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aWRlby9mYmRldi9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0xMDg4PXN0YXRpYyB2b2lkIGZiY29uX2luaXQoc3RydWN0IHZjX2RhdGEgKnZjLCBib29sIGluaXQpXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0xMjI4LVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjEyMjk6XFx0aWYgKHBhci1cXHUwMDNlYml0b3BzLVxcdTAwM2Vyb3RhdGVfZm9udCBcXHUwMDI2XFx1MDAyNiBwYXItXFx1MDAzZWJpdG9wcy1cXHUwMDNlcm90YXRlX2ZvbnQoaW5mbywgdmMpKSB7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTIzMC1cXHRcXHRwYXItXFx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTIxNDM9c3RhdGljIGJvb2wgZmJjb25fc3dpdGNoKHN0cnVjdCB2Y19kYXRhICp2YylcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTIyMTYtXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjIxNzpcXHRpZiAocGFyLVxcdTAwM2ViaXRvcHMtXFx1MDAzZXJvdGF0ZV9mb250IFxcdTAwMjZcXHUwMDI2IHBhci1cXHUwMDNlYml0b3BzLVxcdTAwM2Vyb3RhdGVfZm9udChpbmZvLCB2YykpIHtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yMjE4LVxcdFxcdHBhci1cXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MjQwMD1zdGF0aWMgaW50IGZiY29uX2RvX3NldF9mb250KHN0cnVjdCB2Y19kYXRhICp2YywgaW50IHcsIGludCBoLCBpbnQgY2hhcmNvdW50LFxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQyOC1cXHRpZiAoY29uX2lzX3Zpc2libGUodmMpKSB7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjQyOTpcXHRcXHRpZiAocGFyLVxcdTAwM2ViaXRvcHMtXFx1MDAzZXJvdGF0ZV9mb250IFxcdTAwMjZcXHUwMDI2IHBhci1cXHUwMDNlYml0b3BzLVxcdTAwM2Vyb3RhdGVfZm9udChpbmZvLCB2YykpIHtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNDMwLVxcdFxcdFxcdHBhci1cXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQ2OS1cXHRpZiAoY29uX2lzX3Zpc2libGUodmMpKSB7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjQ3MDpcXHRcXHRpZiAocGFyLVxcdTAwM2ViaXRvcHMtXFx1MDAzZXJvdGF0ZV9mb250IFxcdTAwMjZcXHUwMDI2IHBhci1cXHUwMDNlYml0b3BzLVxcdTAwM2Vyb3RhdGVfZm9udChpbmZvLCB2YykpIHtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNDcxLVxcdFxcdFxcdHBhci1cXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MjY0ND1zdGF0aWMgdm9pZCBmYmNvbl9tb2RlY2hhbmdlZChzdHJ1Y3QgZmJfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI2NzctXFx0ICovXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjY3ODpcXHRpZiAocGFyLVxcdTAwM2ViaXRvcHMtXFx1MDAzZXJvdGF0ZV9mb250IFxcdTAwMjZcXHUwMDI2IHBhci1cXHUwMDNlYml0b3BzLVxcdTAwM2Vyb3RhdGVfZm9udChpbmZvLCB2YykpIHtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNjc5LVxcdFxcdHBhci1cXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmg9NTk9c3RydWN0IGZiY29uX2JpdG9wcyB7XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uaC03MS1cXHRpbnQgICgqdXBkYXRlX3N0YXJ0KShzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmg6NzI6XFx0aW50ICAoKnJvdGF0ZV9mb250KShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZjX2RhdGEgKnZjKTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uaC03My19O1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jPTM2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGZiY29uX2JpdG9wcyBjY3dfZmJjb25fYml0b3BzID0ge1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jLTM2OS1cXHQudXBkYXRlX3N0YXJ0ID0gY2N3X3VwZGF0ZV9zdGFydCxcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmM6MzcwOlxcdC5yb3RhdGVfZm9udCA9IGZiY29uX3JvdGF0ZV9mb250LFxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYy0zNzEtfTtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jPTM0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGZiY29uX2JpdG9wcyBjd19mYmNvbl9iaXRvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYy0zNTItXFx0LnVwZGF0ZV9zdGFydCA9IGN3X3VwZGF0ZV9zdGFydCxcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYzozNTM6XFx0LnJvdGF0ZV9mb250ID0gZmJjb25fcm90YXRlX2ZvbnQsXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmMtMzU0LX07XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtMTctXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jOjE4OmludCBmYmNvbl9yb3RhdGVfZm9udChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZjX2RhdGEgKnZjKVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYy0xOS17XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmgtMjEtXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5oOjIyOmludCBmYmNvbl9yb3RhdGVfZm9udChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZjX2RhdGEgKnZjKTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmgtMjMtXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYz0zOTc9c3RhdGljIGNvbnN0IHN0cnVjdCBmYmNvbl9iaXRvcHMgdWRfZmJjb25fYml0b3BzID0ge1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmMtNDAzLVxcdC51cGRhdGVfc3RhcnQgPSB1ZF91cGRhdGVfc3RhcnQsXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmM6NDA0OlxcdC5yb3RhdGVfZm9udCA9IGZiY29uX3JvdGF0ZV9mb250LFxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jLTQwNS19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODoyOC4wNDIxMDc4NDVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4MzcxMzgyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipFeGFtaW5pbmcgRm9udCBSb3RhdGlvbiBJbXBsZW1lbnRhdGlvbnMqKlxuXG5Pa2F5LCBzbyBgcm90YXRlX2ZvbnRgLi4uIHRoYXQncyBhIGtleSBmdW5jdGlvbiwgSSBrbm93IGl0LiBBbmQsIEkgcmVjYWxsIGl0J3MgdXNlZCB3aXRoaW4gYGZiY29uX3JvdGF0ZS5jYCwgYGZiY29uX2Njdy5jYCwgYGZiY29uX2N3LmNgLCBhbmQgYGZiY29uX3VkLmNgLiBOb3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRob3NlIHNvdXJjZSBmaWxlcyBhbmQgdW5kZXJzdGFuZCB0aGUgbnVhbmNlcy4gSSdsbCBzdGFydCB3aXRoIHRoZSBjb25maWcgZmlsZXM7IHRoYXQgd2lsbCBiZSB0aGUgbW9zdCBlZmZpY2llbnQgYXBwcm9hY2ggdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MDMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODozMS40MjU4NDkzNzVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NjY5Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZiY29uX3JvdGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aWRlby9mYmRldi9jb3JlL01ha2VmaWxlPTIwPWlmZXEgKCQoQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04pLHkpXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL01ha2VmaWxlOjIxOmZiLXlcXHRcXHRcXHRcXHQgICs9IGZiY29uX3JvdGF0ZS5vIGZiY29uX2N3Lm8gZmJjb25fdWQubyBcXFxcXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL01ha2VmaWxlLTIyLVxcdFxcdFxcdFxcdCAgICAgZmJjb25fY2N3Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDg6MzEuNDkxNTI0OTgxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDM1OTYzMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipDb25zaWRlcmluZyBgRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTmAqKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBjb25zb2xlIHJvdGF0aW9uIHdpdGhpbiB0aGUgZnJhbWVidWZmZXIsIHdoaWNoIGlzIGEga2V5IGNvbnNpZGVyYXRpb24gd2hlbiBkZWFsaW5nIHdpdGggZGlzcGxheXMgdGhhdCBhcmVuJ3Qgb3JpZW50ZWQgaW4gdGhlIHN0YW5kYXJkIGxhbmRzY2FwZSBtb2RlLiBJZiB3ZSdyZSBpbmNvcnBvcmF0aW5nIGZyYW1lYnVmZmVyIHN1cHBvcnQsIGl0J3MgcHJldHR5IGxpa2VseSB3ZSdsbCBhbHNvIG5lZWQgdGhlIGFiaWxpdHkgdG8gcm90YXRlIHRoZSBjb25zb2xlIG91dHB1dC4gT3RoZXJ3aXNlLCB0aGUgdXNlciBleHBlcmllbmNlIGNvdWxkIGJlLCB3ZWxsLCB1cHNpZGUgZG93biwgc2lkZXdheXMsIG9yIGdlbmVyYWxseSBmcnVzdHJhdGluZy4gSXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgYWRkaXRpb24gdG8gdGhlIG92ZXJhbGwgZnJhbWVidWZmZXIgY29uZmlndXJhdGlvbi5cblxuR2l2ZW4gdGhpcywgSSBzaG91bGQgaW1tZWRpYXRlbHkgY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBgRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTmAuIEkgbmVlZCB0byBlbnN1cmUgaXQncyBkZWZpbmVkIGFuZCBjb3JyZWN0bHkgaGFuZGxlZC4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGFueSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciByZWxhdGVkIG9wdGlvbnMgd2lsbCBiZSBjcnVjaWFsLiBJJ2xsIGFsc28gYmUgbG9va2luZyBmb3IgYW55IGRvY3VtZW50YXRpb24gb3IgY29tbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb3B0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIGludGVuZGVkIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgY2F2ZWF0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAzNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA4OjM1LjMzNTEyMzc4NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE4NTU5ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnPTg4PWNvbmZpZyBGUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZy0xMDMtXFxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWc6MTA0OmNvbmZpZyBGUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OXFxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWctMTA1LSAgICAgICBib29sIFxcXCJGcmFtZWJ1ZmZlciBDb25zb2xlIFJvdGF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODozNi4yNTM2OTA0MzNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwNDc2MDIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgdGhlIENvbnNvbGUgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIGNvbnNvbGUgZHJpdmVycyBhcmUgZGVmaW5lZC4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTA0LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgY29uc29sZS1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZXNpZGUuIEkgYW50aWNpcGF0ZSBmaW5kaW5nIHRoZSBjb3JlIGRlZmluaXRpb25zIGZvciB0aGUgc3VwcG9ydGVkIGNvbnNvbGUgdHlwZXMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcyB0aGVyZS4gRnJvbSB0aGVyZSwgSSdsbCBiZSBhYmxlIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gb3RoZXIgb3B0aW9ucywgc3VjaCBhcyBncmFwaGljcyBjYXJkIGRyaXZlcnMsIGZyYW1lYnVmZmVycywgYW5kIHNlcmlhbCBwb3J0cy4gTXkgZ29hbCBpcyB0byBxdWlja2x5IHBpbnBvaW50IHdoaWNoIG9wdGlvbnMgSSBuZWVkIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRvIGFjaGlldmUgdGhlIGRlc2lyZWQgY29uc29sZSBiZWhhdmlvciBmb3IgdGhpcyBzcGVjaWZpYyBwbGF0Zm9ybSwgYXMgd2VsbCBhcyB0aGVpciByZWxldmFudCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MzAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODozOS4zNTg0NTM0NzdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTU6XFx0XFx0IHN1cHBvcnRzIHRoaXMgZmVhdHVyZSkuICBPdGhlcndpc2UsIHRoZSBmcmFtZWJ1ZmZlciBjb25zb2xlIHdpbGxcXG4gIDk2OlxcdFxcdCBhbHdheXMgc2VsZWN0IHRoZSBmaXJzdCBmcmFtZWJ1ZmZlciBkcml2ZXIgdGhhdCBpcyBsb2FkZWQuIFRoZSBsYXR0ZXJcXG4gIDk3OlxcdFxcdCBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci5cXG4gIDk4OlxcdFxcbiAgOTk6XFx0XFx0IFlvdSBjYW4gYWx3YXlzIG92ZXJyaWRlIHRoZSBhdXRvbWF0aWMgc2VsZWN0aW9uIG9mIHRoZSBwcmltYXJ5IGRldmljZVxcbiAxMDA6XFx0XFx0IGJ5IHVzaW5nIHRoZSBmYmNvbj1tYXA6IGJvb3Qgb3B0aW9uLlxcbiAxMDE6XFx0XFxuIDEwMjpcXHRcXHQgSWYgdW5zdXJlLCBzZWxlY3Qgbi5cXG4gMTAzOlxcdFxcbiAxMDQ6XFx0Y29uZmlnIEZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT05cXG4gMTA1OlxcdCAgICAgICBib29sIFxcXCJGcmFtZWJ1ZmZlciBDb25zb2xlIFJvdGF0aW9uXFxcIlxcbiAxMDY6XFx0ICAgICAgIGRlcGVuZHMgb24gRlJBTUVCVUZGRVJfQ09OU09MRVxcbiAxMDc6XFx0ICAgICAgIGhlbHBcXG4gMTA4OlxcdFxcdCBFbmFibGUgZGlzcGxheSByb3RhdGlvbiBmb3IgdGhlIGZyYW1lYnVmZmVyIGNvbnNvbGUuICBUaGlzIGlzIGRvbmVcXG4gMTA5OlxcdFxcdCBpbiBzb2Z0d2FyZSBhbmQgbWF5IGJlIHNpZ25pZmljYW50bHkgc2xvd2VyIHRoYW4gYSBub3JtYWxseSBvcmllbnRlZFxcbiAxMTA6XFx0XFx0IGRpc3BsYXkuICBOb3RlIHRoYXQgdGhlIHJvdGF0aW9uIGlzIGRvbmUgYXQgdGhlIGNvbnNvbGUgbGV2ZWwgb25seVxcbiAxMTE6XFx0XFx0IHN1Y2ggdGhhdCBvdGhlciB1c2VycyBvZiB0aGUgZnJhbWVidWZmZXIgd2lsbCByZW1haW4gbm9ybWFsbHlcXG4gMTEyOlxcdFxcdCBvcmllbnRlZC5cXG4gMTEzOlxcdFxcbiAxMTQ6XFx0Y29uZmlnIEZSQU1FQlVGRkVSX0NPTlNPTEVfREVGRVJSRURfVEFLRU9WRVJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDg6MzkuMzU4NTE3Njk3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NjgwMjAxNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgRnJhbWVidWZmZXIgQ29uc29sZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBGUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OYCBzZXR0aW5nLiBUaGUgZGVwZW5kZW5jeSB0cmVlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IGl0IGhpbmdlcyBvbiBgRlJBTUVCVUZGRVJfQ09OU09MRWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBvdmVybG9va2VkIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBzbyBsZXQncyBxdWlja2x5IGNvbmZpcm0uIFJpZ2h0LCBJIGhhdmUgYEZCX0NPUkVgLCBgRlJBTUVCVUZGRVJfQ09OU09MRWAsIGFuZCBgRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTmAgdG8gY29uc2lkZXIuXG5cbk5vdywgbXkgbWFpbiBjb25jZXJuIGlzIHdoZXRoZXIgSSBjYW4gbWFuaXB1bGF0ZSB0aGUgZnJhbWVidWZmZXIgY29uc29sZSdzIGZvbnQgZnJvbSB1c2VyIHNwYWNlLCBzcGVjaWZpY2FsbHkgdXNpbmcgYGZiY29uX3NldF9mb250YC4gSSBrbm93IHRoYXQgZnVuY3Rpb24gaXMgcGFydCBvZiBgZmJfY29uYCwgd2hpY2ggaXRzZWxmIGlzIG5lc3RlZCB3aXRoaW4gYSBgc3RydWN0IGNvbnN3YC4gVGhpcyBgc3RydWN0IGNvbnN3YCBpcyB0aGUgY29uc29sZSBzd2l0Y2ggc3RydWN0dXJlLiBFeGNlbGxlbnQuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzIGhvdyB0byBnZXQgYXQgdGhpcyBmdW5jdGlvbmFsaXR5LiBNeSB0aG91Z2h0IGlzIGBpb2N0bChmZCwgUElPX0ZPTlQsIC4uLilgIG9yIGEgc2ltaWxhciBpb2N0bCBjYWxsIG9uIGEgY29uc29sZSBkZXZpY2UgbGlrZSBgL2Rldi90dHkqYCBvciBgL2Rldi9jb25zb2xlYCBtaWdodCBkbyB0aGUgdHJpY2suIEkgc2VlbSB0byByZWNhbGwgdGhhdCB0aGUgYHZ0X2lvY3RsYCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgYFBJT19GT05UYC4gTGV0J3MgY29uZmlybSB0aGF0IGJ5IHJldmlld2luZyB0aGUgY29kZSB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTQ2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDg6NDQuMjI2NTQxMzk4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjU5NzgwMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uX2ZvbnRfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdHR5L3Z0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3R0eS92dC92dC5jPTQ5MTA9c3RhdGljIGludCBjb25fZm9udF9nZXQoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgY29uc29sZV9mb250X29wICpvcClcXG4tLVxcbmRyaXZlcnMvdHR5L3Z0L3Z0LmMtNDk1NC1cXG5kcml2ZXJzL3R0eS92dC92dC5jOjQ5NTU6c3RhdGljIGludCBjb25fZm9udF9zZXQoc3RydWN0IHZjX2RhdGEgKnZjLCBjb25zdCBzdHJ1Y3QgY29uc29sZV9mb250X29wICpvcClcXG5kcml2ZXJzL3R0eS92dC92dC5jLTQ5NTYte1xcbi0tXFxuZHJpdmVycy90dHkvdnQvdnQuYy00OTg1LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmRyaXZlcnMvdHR5L3Z0L3Z0LmM6NDk4NjpcXHRpZiAoIXZjLVxcdTAwM2V2Y19zdy1cXHUwMDNlY29uX2ZvbnRfc2V0KVxcbmRyaXZlcnMvdHR5L3Z0L3Z0LmMtNDk4Ny1cXHRcXHRyZXR1cm4gLUVOT1NZUztcXG4tLVxcbmRyaXZlcnMvdHR5L3Z0L3Z0LmMtNDk5MS1cXG5kcml2ZXJzL3R0eS92dC92dC5jOjQ5OTI6XFx0cmV0dXJuIHZjLVxcdTAwM2V2Y19zdy1cXHUwMDNlY29uX2ZvbnRfc2V0KHZjLCBcXHUwMDI2Zm9udCwgdnBpdGNoLCBvcC1cXHUwMDNlZmxhZ3MpO1xcbmRyaXZlcnMvdHR5L3Z0L3Z0LmMtNDk5My19XFxuLS1cXG5kcml2ZXJzL3R0eS92dC92dC5jPTUwMjc9aW50IGNvbl9mb250X29wKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGNvbnNvbGVfZm9udF9vcCAqb3ApXFxuLS1cXG5kcml2ZXJzL3R0eS92dC92dC5jLTUwMzEtXFx0Y2FzZSBLRF9GT05UX09QX1NFVF9UQUxMOlxcbmRyaXZlcnMvdHR5L3Z0L3Z0LmM6NTAzMjpcXHRcXHRyZXR1cm4gY29uX2ZvbnRfc2V0KHZjLCBvcCk7XFxuZHJpdmVycy90dHkvdnQvdnQuYy01MDMzLVxcdGNhc2UgS0RfRk9OVF9PUF9HRVQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA4OjQ0LjU1MjUyNDYyOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzkyMTQ2MTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IExpbmUgb2YgUmVhc29uaW5nIGZvciBGb250IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIHRyYWNlZCB0aGUgZm9udCBzZXR0aW5nIGZ1bmN0aW9uYWxpdHkuIEl0IGxvb2tzIGxpa2UgYGNvbl9mb250X3NldGAgdWx0aW1hdGVseSBjYWxscyBgdmMtXHUwMDNldmNfc3ctXHUwMDNlY29uX2ZvbnRfc2V0YCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZW4sIGBjb25fZm9udF9vcGAgaXMgdGhlIGhhbmRsZXIgZm9yIGBLRF9GT05UX09QX1NFVGAuIFRoYXQgcGFydCdzIGNsZWFyIOKAkyB1c2VyIHNwYWNlIGludGVyYWN0cyB3aXRoIGl0IHZpYSBpb2N0bCwganVzdCBhcyBJIGV4cGVjdGVkLlxuXG5Ob3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQuIEl0IGxvb2tzIGxpa2UgYGZiY29uX3NldF9mb250YCBhbmQgYGZiY29uX3NldF9kZWZfZm9udGAgYXJlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgaGVyZS4gSSdsbCBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZC5cblxuTmV4dCwgSSBuZWVkIHRvIHJlbWVtYmVyIHdoYXQncyByZWxldmFudCBpbiB0ZXJtcyBvZiBjb25maWdzLiBMb29rcyBsaWtlIGBGQl9DT1JFYCwgYEZSQU1FQlVGRkVSX0NPTlNPTEVgLCBhbmQgYEZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT05gIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIEknbGwgbWFrZSBzdXJlIHRvIGRvdWJsZS1jaGVjayB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIGludGVyYWN0aW9ucy5cblxuVGhlIGJpZyBxdWVzdGlvbiBub3cgaXMgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQuIERvZXMganVzdCBgRkJfQ09SRWAgZ2l2ZSBtZSBlbm91Z2ggdG8gcnVuIGEgdGVzdD8gT3Igd2lsbCBJIG5lZWQgYSBtb3JlIGNvbmNyZXRlIGZyYW1lYnVmZmVyIGRyaXZlciB0byB1c2UgYXMgYSB0ZXN0YmVkPyBJIHRoaW5rIEknbGwgbmVlZCBhIHNwZWNpZmljIGRyaXZlci4gSSdtIHRoaW5raW5nIGBEUk1fRkJERVZfRU1VTEFUSU9OYCBvciBgRkJfVklSVFVBTGAgY291bGQgYmUgdXNlZnVsIGhlcmUuIEhvd2V2ZXIsIGBGQl9EVU1NWWAgbWlnaHQgZG8gdGhlIHRyaWNrIHRvby4gSSdsbCBnbyB3aXRoIGVpdGhlciBgRkJfVklSVFVBTGAgb3IgYEZCX0RVTU1ZYC4gTGV0J3Mgc2VlIHdoaWNoIGlzIHNpbXBsZXIgdG8gc2V0IHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgwNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODo0OC45NDQ2NzI5NTVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTI5NzEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRkJfVklSVFVBTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZpZGVvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZpZGVvL2ZiZGV2L0tjb25maWc9MTY0NT1jb25maWcgRkJfU0g3NzYwXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L0tjb25maWctMTY1Ny1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L0tjb25maWc6MTY1ODpjb25maWcgRkJfVklSVFVBTFxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvS2NvbmZpZy0xNjU5LVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIEZyYW1lIEJ1ZmZlciBzdXBwb3J0IChPTkxZIEZPUiBURVNUSU5HISlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA4OjQ5LjA0NTk3NDg1NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjUwMjE5MjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIExpbnV4IEZyYW1lYnVmZmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnYCBmaWxlLiBJJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gbGluZSAxNjU4LCBiZWNhdXNlIGJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIHRoYXQncyBvZnRlbiB3aGVyZSB5b3UgZmluZCB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBbaW5zZXJ0IHlvdXIgZmllbGQgaGVyZSwgZS5nLiwgYSBzcGVjaWZpYyBmcmFtZWJ1ZmZlciBkcml2ZXIgb3IgZmVhdHVyZV0uIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgYGNvbmZpZ2AgZGlyZWN0aXZlcywgbWF5YmUgc29tZSBgbWVudWNvbmZpZ2Agb3IgYGNob2ljZWAgc3RydWN0dXJlcywgYW5kIGhvcGVmdWxseSwgc29tZSBoZWxwZnVsIGNvbW1lbnRzIGV4cGxhaW5pbmcgdGhlIGxvZ2ljIGJlaGluZCB0aGUgc2V0dGluZ3MuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgZnJhbWVidWZmZXIgZHJpdmVyIGN1c3RvbWl6YXRpb24gdXN1YWxseSByZXNpZGVzLCBhbmQgdW5kZXJzdGFuZGluZyB0aGlzIHBhcnQgaXMga2V5IHRvIGFueSBkZWVwZXIgaW52ZXN0aWdhdGlvbiBvciBwb3RlbnRpYWwgbW9kaWZpY2F0aW9ucyBJIG1pZ2h0IG5lZWQgdG8gbWFrZS4gTGV0J3Mgc2VlIHdoYXQncyB0aGVyZS4uLiBJJ20gYWxyZWFkeSBmb3JtdWxhdGluZyBoeXBvdGhlc2VzIGFib3V0IHdoYXQgSSAqc2hvdWxkKiBmaW5kLCBnaXZlbiB0aGUgZ2VuZXJhbCBzdHJ1Y3R1cmUgb2YgdGhlc2UgS2NvbmZpZyBmaWxlcy4gVGltZSB0byBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NjksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODo1NS4yOTYxOTY4NjdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzNDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmlkZW8vZmJkZXYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjUwOlxcdFxcdGhlbHBcXG4xNjUxOlxcdFxcdCAgU3VwcG9ydCBmb3IgdGhlIFNINzc2MC9TSDc3NjMvU0g3NzIwL1NINzcyMSBpbnRlZ3JhdGVkXFxuMTY1MjpcXHRcXHQgIChEKVNUTi9URlQgTENEIENvbnRyb2xsZXIuXFxuMTY1MzpcXHRcXHQgIFN1cHBvcnRzIGRpc3BsYXkgcmVzb2x1dGlvbnMgdXAgdG8gMTAyNHgxMDI0IHBpeGVsLCBncmF5c2NhbGUgYW5kXFxuMTY1NDpcXHRcXHQgIGNvbG9yIG9wZXJhdGlvbiwgd2l0aCBkZXB0aHMgcmFuZ2luZyBmcm9tIDEgYnBwIHRvIDggYnBwIG1vbm9jaHJvbWVcXG4xNjU1OlxcdFxcdCAgYW5kIDgsIDE1IG9yIDE2IGJwcCBjb2xvcjsgOTAgZGVncmVlcyBjbG9ja3dpc2UgZGlzcGxheSByb3RhdGlvbiBmb3JcXG4xNjU2OlxcdFxcdCAgcGFuZWxzIFxcdTAwM2M9IDMyMCBwaXhlbCBob3Jpem9udGFsIHJlc29sdXRpb24uXFxuMTY1NzpcXHRcXG4xNjU4OlxcdGNvbmZpZyBGQl9WSVJUVUFMXFxuMTY1OTpcXHRcXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBGcmFtZSBCdWZmZXIgc3VwcG9ydCAoT05MWSBGT1IgVEVTVElORyEpXFxcIlxcbjE2NjA6XFx0XFx0ZGVwZW5kcyBvbiBGQlxcbjE2NjE6XFx0XFx0c2VsZWN0IEZCX1NZU01FTV9IRUxQRVJTXFxuMTY2MjpcXHRcXHRoZWxwXFxuMTY2MzpcXHRcXHQgIFRoaXMgaXMgYSBgdmlydHVhbCcgZnJhbWUgYnVmZmVyIGRldmljZS4gSXQgb3BlcmF0ZXMgb24gYSBjaHVuayBvZlxcbjE2NjQ6XFx0XFx0ICB1bnN3YXBwYWJsZSBrZXJuZWwgbWVtb3J5IGluc3RlYWQgb2Ygb24gdGhlIG1lbW9yeSBvZiBhIGdyYXBoaWNzXFxuMTY2NTpcXHRcXHQgIGJvYXJkLiBUaGlzIG1lYW5zIHlvdSBjYW5ub3Qgc2VlIGFueSBvdXRwdXQgc2VudCB0byB0aGlzIGZyYW1lXFxuMTY2NjpcXHRcXHQgIGJ1ZmZlciBkZXZpY2UsIHdoaWxlIGl0IGRvZXMgY29uc3VtZSBwcmVjaW91cyBtZW1vcnkuIFRoZSBtYWluIHVzZVxcbjE2Njc6XFx0XFx0ICBvZiB0aGlzIGZyYW1lIGJ1ZmZlciBkZXZpY2UgaXMgdGVzdGluZyBhbmQgZGVidWdnaW5nIHRoZSBmcmFtZVxcbjE2Njg6XFx0XFx0ICBidWZmZXIgc3Vic3lzdGVtLiBEbyBOT1QgZW5hYmxlIGl0IGZvciBub3JtYWwgc3lzdGVtcyEgVG8gcHJvdGVjdFxcbjE2Njk6XFx0XFx0ICB0aGUgaW5ub2NlbnQsIGl0IGhhcyB0byBiZSBlbmFibGVkIGV4cGxpY2l0bHkgYXQgYm9vdCB0aW1lIHVzaW5nIHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODo1NS4yOTYzOTQwOTdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3OTEwNTAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgZGVwZW5kZW5jeTpcblxuKipFeGFtaW5pbmcgYSBEZXBlbmRlbmN5OiBGQl9WSVJUVUFMIGFuZCBGQioqXG5cbk9rYXksIHNvIGBGQl9WSVJUVUFMYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBGQmAuIFRoYXQncyB0aGUgY29yZSBvZiB0aGUgaXNzdWUuIEJlZm9yZSBJIGRpdmUgZGVlcGVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBGQmAgaXMgZG9pbmcgYW5kIGl0cyBjdXJyZW50IHN0YXRlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiBgRkJgIGl0c2VsZi4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBpdC4gVW5kZXJzdGFuZGluZyBgRkJgIGlzIHRoZSBjcml0aWNhbCBmaXJzdCBzdGVwIGluIHByb3Blcmx5IGFzc2Vzc2luZyB0aGUgaW1wYWN0IG9uIGBGQl9WSVJUVUFMYC4gSSBuZWVkIHRvIGFzc2VzcyB3aGF0IGNoYW5nZXMgdG8gYEZCYCBhcmUgbmVjZXNzYXJ5IGFuZCBob3cgdGhpcyBlZmZlY3RzIHRoZSBzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTM3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODo1OC4zNzU1MDM3NjhaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0Mzc3MDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGQiRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aWRlby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnLTUtXFxuZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnOjY6bWVudWNvbmZpZyBGQlxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IGZvciBmcmFtZSBidWZmZXIgZGV2aWNlIGRyaXZlcnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA4OjU4LjQ1OTg4ODE1NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDU0ODYxNDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCB0ZXh0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgZmJkZXZgIEtjb25maWcqKlxuXG5Pa2F5LCBsZXQncyBwdWxsIHVwIHRoZSBgZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnYCBmaWxlIGFuZCB6ZXJvIGluIGFyb3VuZCBsaW5lIDYuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgd2UnbGwgZmluZCB0aGUgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciB0aGUgZnJhbWVidWZmZXIgZGV2aWNlIGRyaXZlciBjb3JlLiBOZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5LCBsaWtlbHkgaXQncyBgQ09ORklHX0ZCYCBvciBzb21ldGhpbmcgc2ltaWxhciB0aGF0IGVuYWJsZXMgdGhlIGVudGlyZSBzdWJzeXN0ZW0uIEZyb20gdGhlcmUsIEknbGwgYmUgYWJsZSB0byB3b3JrIHRocm91Z2ggdGhlIGRlcGVuZGVuY2llcyBhbmQgb3B0aW9ucyBwcmVzZW50ZWQgd2l0aGluIHRoYXQgZmlsZSwgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgc3RydWN0dXJlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHdlIGRlZmluZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgc3Vic3lzdGVtcywgbGlrZSBncmFwaGljcyBkcml2ZXJzLCBvciBpbnB1dCBkcml2ZXJzLCBldGMuIGFuZCBob3cgdGhleSdyZSBleHBvc2VkIHZpYSB0aGUgS2NvbmZpZyBzdHJ1Y3R1cmUuIFNob3VsZCBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCBzdGFydCwgYnV0IGl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGJhc2UgY29uZmlndXJhdGlvbiBmb3IgYW55IGZyYW1lYnVmZmVyIHdvcmsgSSBuZWVkIHRvIGRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM5NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA5OjAyLjUxNDc1NTI5MVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODM5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIGZiZGV2IGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBGQlxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlN1cHBvcnQgZm9yIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyc1xcXCJcXG4gICA4OlxcdFxcdHNlbGVjdCBGQl9DT1JFXFxuICAgOTpcXHRcXHRzZWxlY3QgRkJfTk9USUZZXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIFRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIHByb3ZpZGVzIGFuIGFic3RyYWN0aW9uIGZvciB0aGUgZ3JhcGhpY3NcXG4gIDEyOlxcdFxcdCAgaGFyZHdhcmUuIEl0IHJlcHJlc2VudHMgdGhlIGZyYW1lIGJ1ZmZlciBvZiBzb21lIHZpZGVvIGhhcmR3YXJlIGFuZFxcbiAgMTM6XFx0XFx0ICBhbGxvd3MgYXBwbGljYXRpb24gc29mdHdhcmUgdG8gYWNjZXNzIHRoZSBncmFwaGljcyBoYXJkd2FyZSB0aHJvdWdoXFxuICAxNDpcXHRcXHQgIGEgd2VsbC1kZWZpbmVkIGludGVyZmFjZSwgc28gdGhlIHNvZnR3YXJlIGRvZXNuJ3QgbmVlZCB0byBrbm93XFxuICAxNTpcXHRcXHQgIGFueXRoaW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgKGhhcmR3YXJlIHJlZ2lzdGVyKSBzdHVmZi5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBGcmFtZSBidWZmZXIgZGV2aWNlcyB3b3JrIGlkZW50aWNhbGx5IGFjcm9zcyB0aGUgZGlmZmVyZW50XFxuICAxODpcXHRcXHQgIGFyY2hpdGVjdHVyZXMgc3VwcG9ydGVkIGJ5IExpbnV4IGFuZCBtYWtlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZlxcbiAgMTk6XFx0XFx0ICBhcHBsaWNhdGlvbiBwcm9ncmFtcyBlYXNpZXIgYW5kIG1vcmUgcG9ydGFibGU7IGF0IHRoaXMgcG9pbnQsIGFuIFhcXG4gIDIwOlxcdFxcdCAgc2VydmVyIGV4aXN0cyB3aGljaCB1c2VzIHRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGV4Y2x1c2l2ZWx5LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowOTowMi41MTQ5NDE0MzFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI2NzMxNjY2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogRnJhbWVidWZmZXIgQ29uc29sZSBhbmQgRm9udCBSb3RhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBnb2FsIGlzIGNsZWFybHkgdG8gdGFyZ2V0IGBmYmNvbmAgZnVuY3Rpb25hbGl0eS4gVGhlIHNlbGVjdGlvbiBvZiBgRkJfQ09SRWAgYXMgdGhlIGJhc2UgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUbyBtYWtlIHRoaXMgdGVzdGFibGUsIEknbGwgbmVlZCBhIGZyYW1lYnVmZmVyIGRldmljZS4gYEZCX1ZJUlRVQUxgIG9yIGBEUk1fRkJERVZfRU1VTEFUSU9OYCBsb29rIGxpa2UgdGhlIGJlc3QgYmV0cyBoZXJlLCB3aGljaCBhbGlnbnMgd2l0aCBob3cgc3l6a2FsbGVyIHR5cGljYWxseSBoYW5kbGVzIHRoZXNlIHNjZW5hcmlvcyDigJMgYEZCX1ZJUlRVQUxgIG9yIGBEUk1fVktNU2Agd2l0aCBgRFJNX0ZCREVWX0VNVUxBVElPTmAgc2hvdWxkIGNvdmVyIGl0LlxuXG5UaGVyZWZvcmUsIEknbGwgYWRkIGBGQmAsIGBGQl9WSVJUVUFMYCwgYEZSQU1FQlVGRkVSX0NPTlNPTEVgLCBhbmQgYEZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT05gIHRvIHRoZSBjb25maWd1cmF0aW9uLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZnV6emluZyB0aGUgY29uc29sZS5cblxuTm93LCBsZXQncyBjaXJjbGUgYmFjayBhbmQgcmV2aWV3IHRoZSByZWxldmFudCBwYXRjaCBhZ2Fpbi4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbjpcbmBgYGNcblx0aWYgKGNvbl9pc192aXNpYmxlKHZjKSkge1xuXHRcdGlmIChwYXItXHUwMDNlYml0b3BzLVx1MDAzZXJvdGF0ZV9mb250IFx1MDAyNlx1MDAyNiBwYXItXHUwMDNlYml0b3BzLVx1MDAzZXJvdGF0ZV9mb250KGluZm8sIHZjKSkge1xuXHRcdFx0cGFyLVx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcblx0XHRcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcblx0XHR9XG5cdH1cbmBgYFxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBgZmJjb25fZG9fc2V0X2ZvbnRgLiBJdCBtb2RpZmllcyBgcGFyLVx1MDAzZXJvdGF0ZWAgYW5kIGNhbGxzIGBzZXRfYmxpdHRpbmdfdHlwZWAsIHdoaWNoIGlzIGRlZmluaXRlbHkgd29ydGggdGFyZ2V0aW5nLiBUaGVzZSBhcmUgZXhhY3RseSB0aGUgdHlwZXMgb2YgY2hhbmdlcyB0aGF0IGNhbiBsZWFkIHRvIGludGVyZXN0aW5nIGJ1Z3MuXG5cbkJhc2VkIG9uIHRoaXMsIG15IGZvY3VzIHN5bWJvbHMgYXJlIGNsZWFyOiBgZmJjb25fc2V0X2ZvbnRgIGFuZCBgZmJjb25fc2V0X2RlZl9mb250YC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMuXG5cbkkgd2lsbCBhbHNvIG5lZWQgdG8gcmV2aWV3IGBzZXRfYmxpdHRpbmdfdHlwZWAgYW5kIGRldGVybWluZSBpZiBpdCdzIGEgd29ydGh3aGlsZSBmb2N1cyBzeW1ib2wuXG5cbioqSW4gc3VtbWFyeSwgbXkgY29uZmlnIHdpbGwgaW5jbHVkZToqKlxuKiAgIGBGQmBcbiogICBgRkJfVklSVFVBTGBcbiogICBgRlJBTUVCVUZGRVJfQ09OU09MRWBcbiogICBgRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTmBcblxuQW5kIHRoZSBmb2N1cyBzeW1ib2xzIHdpbGwgYmUgYGZiY29uX3NldF9mb250YCwgYGZiY29uX3NldF9kZWZfZm9udGAsIGFuZCBgc2V0X2JsaXR0aW5nX3R5cGVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjkyMywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA5OjE1LjE4ODExMTM4MVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg1NzY4NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0X2JsaXR0aW5nX3R5cGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9NjQxPXN0YXRpYyB2b2lkIGZiY29uX3ByZXBhcmVfbG9nbyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLFxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtNzMwLSNpZmRlZiBDT05GSUdfRkJfVElMRUJMSVRUSU5HXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6NzMxOnN0YXRpYyB2b2lkIHNldF9ibGl0dGluZ190eXBlKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8pXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtNzMyLXtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTc0NT1zdGF0aWMgaW50IGZiY29uX2ludmFsaWRfY2hhcmNvdW50KHN0cnVjdCBmYl9pbmZvICppbmZvLCB1bnNpZ25lZCBjaGFyY291bnQpXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy03NTUtI2Vsc2VcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzo3NTY6c3RhdGljIHZvaWQgc2V0X2JsaXR0aW5nX3R5cGUoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbylcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy03NTcte1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9ODI3PXN0YXRpYyBpbnQgY29uMmZiX2FjcXVpcmVfbmV3aW5mbyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLFxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtODM2LVxcdGlmICh2YylcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzo4Mzc6XFx0XFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTgzOC1cXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTkxMj1zdGF0aWMgaW50IHNldF9jb24yZmJfbWFwKGludCB1bml0LCBpbnQgbmV3aWR4LCBpbnQgdXNlcilcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTk0Mi1cXHR9IGVsc2UgaWYgKHZjKSB7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6OTQzOlxcdFxcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy05NDQtXFx0fVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MTAxND1zdGF0aWMgY29uc3QgY2hhciAqZmJjb25fc3RhcnR1cCh2b2lkKVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTA1My1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoxMDU0OlxcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0xMDU1LVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MTA4OD1zdGF0aWMgdm9pZCBmYmNvbl9pbml0KHN0cnVjdCB2Y19kYXRhICp2YywgYm9vbCBpbml0KVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTE3NS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoxMTc2OlxcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0xMTc3LVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTIzMC1cXHRcXHRwYXItXFx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoxMjMxOlxcdFxcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0xMjMyLVxcdH1cXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTIxNDM9c3RhdGljIGJvb2wgZmJjb25fc3dpdGNoKHN0cnVjdCB2Y19kYXRhICp2YylcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTIyMTMtXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjIxNDpcXHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjIxNS1cXHRwYXItXFx1MDAzZWN1cnNvcl9yZXNldCA9IDE7XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yMjE4LVxcdFxcdHBhci1cXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjIyMTk6XFx0XFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTIyMjAtXFx0fVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MjQwMD1zdGF0aWMgaW50IGZiY29uX2RvX3NldF9mb250KHN0cnVjdCB2Y19kYXRhICp2YywgaW50IHcsIGludCBoLCBpbnQgY2hhcmNvdW50LFxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQzMC1cXHRcXHRcXHRwYXItXFx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoyNDMxOlxcdFxcdFxcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNDMyLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI0NzEtXFx0XFx0XFx0cGFyLVxcdTAwM2Vyb3RhdGUgPSBGQl9ST1RBVEVfVVI7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjQ3MjpcXHRcXHRcXHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQ3My1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0yNjQ0PXN0YXRpYyB2b2lkIGZiY29uX21vZGVjaGFuZ2VkKHN0cnVjdCBmYl9pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjY2OC1cXHRwID0gXFx1MDAyNmZiX2Rpc3BsYXlbdmMtXFx1MDAzZXZjX251bV07XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjY2OTpcXHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjY3MC1cXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI2NzktXFx0XFx0cGFyLVxcdTAwM2Vyb3RhdGUgPSBGQl9ST1RBVEVfVVI7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjY4MDpcXHRcXHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjY4MS1cXHR9XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0yNzA0PXN0YXRpYyB2b2lkIGZiY29uX3NldF9hbGxfdmNzKHN0cnVjdCBmYl9pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjcyOC1cXHRcXHRwID0gXFx1MDAyNmZiX2Rpc3BsYXlbdmMtXFx1MDAzZXZjX251bV07XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjcyOTpcXHRcXHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjczMC1cXHRcXHR2YXJfdG9fZGlzcGxheShwLCBcXHUwMDI2aW5mby1cXHUwMDNldmFyLCBpbmZvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDk6MTUuMjU2NjkyNzM4WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4ODEwMjE3ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRm9udCBSb3RhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGhlcmUncyB0aGUgYnJlYWtkb3duIGFzIEkgc2VlIGl0LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2UuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGhvdyB0aGUgZnJhbWVidWZmZXIgY29uc29sZSBoYW5kbGVzIGZvbnQgc2V0dGluZ3MsIHNwZWNpZmljYWxseSB3aGVuIHJvdGF0aW9uIGlzIGVuYWJsZWQuIEl0J3MgdG91Y2hpbmcgdGhlIGBmYmNvbl9kb19zZXRfZm9udGAgZnVuY3Rpb24sIHdoaWNoIGlzLCBvZiBjb3Vyc2UsIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgY29uc29sZSByZW5kZXJpbmcuXG5cbkkgdGhpbmsgdGhlIGltcG9ydGFudCB0aGluZyB0byBmb2N1cyBvbiBhcmUgdGhlIGVudHJ5IHBvaW50cyDigJMgbGV0J3MgbWFrZSBzdXJlIHdlIGV4YW1pbmUgYGZiY29uX3NldF9mb250YCBhbmQgYGZiY29uX3NldF9kZWZfZm9udGAuIGBzZXRfYmxpdHRpbmdfdHlwZWAgYmVpbmcgc3RhdGljIGFuZCB1c2VkIGluIHZhcmlvdXMgcGxhY2VzIGlzIGEgYml0IG9mIGEgcmVkIGhlcnJpbmcsIHdlIG5lZWQgdG8gY29uY2VudHJhdGUgb24gdGhlIHB1YmxpY2x5IGFjY2Vzc2libGUgZnVuY3Rpb25zLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZzsgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgaXQgaW1wYWN0cyBhIHZlcnkgY2VudHJhbCBhbmQgYWNjZXNzaWJsZSBwYXJ0IG9mIHRoZSBzeXN0ZW0sIHRoZSBmcmFtZWJ1ZmZlciBjb25zb2xlLiBBbnkgaXNzdWUgaGVyZSBjb3VsZCBsZWFkIHRvIHZpc3VhbCBjb3JydXB0aW9uLCBjcmFzaGVzLCBvciBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBkZXBlbmRpbmcgb24gaG93IGZvbnRzIGFyZSBoYW5kbGVkIGFuZCByZW5kZXJlZCB3aXRoIHRoZSByb3RhdGlvbi5cblxuSSB3aWxsIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIG5vdy4gVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBgRkJgLCBgRkJfVklSVFVBTGAsIGBGUkFNRUJVRkZFUl9DT05TT0xFYCwgYW5kIGBGUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OYCBhcmUgYWxsIGdvaW5nIHRvIGJlIGVzc2VudGlhbCBmb3IgdGVzdGluZyB0aGlzLiBMZXQncyBtYWtlIHN1cmUgb3VyIGZ1enppbmcgY2FtcGFpZ25zIGFyZSBjb21wcmVoZW5zaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM2NCwiT3V0cHV0VG9rZW5zIjoxMzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDk6MjIuMTM3NzE2ODM5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MzUzNTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGQlwiLFxuICAgIFwiRkJfVklSVFVBTFwiLFxuICAgIFwiRlJBTUVCVUZGRVJfQ09OU09MRVwiLFxuICAgIFwiRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZiY29uX3NldF9mb250XCIsXG4gICAgXCJmYmNvbl9zZXRfZGVmX2ZvbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBmcmFtZWJ1ZmZlciBjb25zb2xlIGZvbnQgc2V0dGluZyBsb2dpYyAoZmJjb25fZG9fc2V0X2ZvbnQpIHRvIGhhbmRsZSBmb250IHJvdGF0aW9uIHdoZW4gdGhlIGNvbnNvbGUgaXMgdmlzaWJsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGNvcmUgc3Vic3lzdGVtIChmYmNvbikgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBpb2N0bHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRkJcIixcbiAgICBcIkZCX1ZJUlRVQUxcIixcbiAgICBcIkZSQU1FQlVGRkVSX0NPTlNPTEVcIixcbiAgICBcIkZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmYmNvbl9zZXRfZm9udFwiLFxuICAgIFwiZmJjb25fc2V0X2RlZl9mb250XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgZnJhbWVidWZmZXIgY29uc29sZSBmb250IHNldHRpbmcgbG9naWMgKGZiY29uX2RvX3NldF9mb250KSB0byBoYW5kbGUgZm9udCByb3RhdGlvbiB3aGVuIHRoZSBjb25zb2xlIGlzIHZpc2libGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBjb3JlIHN1YnN5c3RlbSAoZmJjb24pIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlciBzcGFjZSB2aWEgaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowOToyMi4yNjUwNzg4NTFaIiwiU2VxIjo0MywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxODU0ODg4MDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDk6MjIuMjY1NjM2NjAxWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcxODU0MzI1MDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgZmJjb25fZG9fc2V0X2ZvbnRgIHdoZXJlIGNoYW5naW5nIHRoZSBmb250IGNoYXJhY3RlciBjb3VudCAoZS5nLiwgZnJvbSAyNTYgdG8gNTEyKSB3aXRob3V0IHVwZGF0aW5nIHRoZSByb3RhdGVkIGZvbnQgYnVmZmVyIChgcGFyLVxcdTAwM2Vyb3RhdGVkLmJ1ZmApIGxlYWRzIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gV2hlbiBgZmJjb25gIHJlbmRlcnMgdGV4dCwgaXQgdXNlcyB0aGUgbmV3IGNoYXJhY3RlciBjb3VudCB0byBpbmRleCBpbnRvIHRoZSBvbGQsIHNtYWxsZXIgYnVmZmVyLCByZXN1bHRpbmcgaW4gYSBoZWFwIE9PQiByZWFkLiBUaGlzIGlzIGEgY2xhc3NpYyBtZW1vcnkgc2FmZXR5IGlzc3VlIHRoYXQgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhayB0byB1c2VyIHNwYWNlIGludm9sdmVkLCBhcyB0aGUgYnVmZmVyIGlzIGZ1bGx5IGluaXRpYWxpemVkIHVwIHRvIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRkNTg4ZTIwMmU0M2Y4M2E3ZTg5NGY3NzA3NDBiODhjOGYzNjI2OGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwMjowNzo0NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jIGIvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmNcbmluZGV4IDIzYjNjNTM2ZDUzZDEuLmM3NGE0OTA1YjhlMmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uY1xuKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmNcbkBAIC0yNDI1LDYgKzI0MjUsMTMgQEAgc3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCxcbiBcdGVsc2UgaWYgKCF2Yy1cdTAwM2V2Y19oaV9mb250X21hc2sgXHUwMDI2XHUwMDI2IGNoYXJjb3VudCA9PSA1MTIpXG4gXHRcdHNldF92Y19oaV9mb250KHZjLCB0cnVlKTtcbiBcbitcdGlmIChjb25faXNfdmlzaWJsZSh2YykpIHtcbitcdFx0aWYgKHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQgXHUwMDI2XHUwMDI2IHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQoaW5mbywgdmMpKSB7XG4rXHRcdFx0cGFyLVx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcbitcdFx0XHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XG4rXHRcdH1cbitcdH1cbitcbiBcdGlmIChyZXNpemUpIHtcbiBcdFx0aW50IGNvbHMsIHJvd3M7XG4gXG5AQCAtMjQ1OSw2ICsyNDY2LDEzIEBAIHN0YXRpYyBpbnQgZmJjb25fZG9fc2V0X2ZvbnQoc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgdywgaW50IGgsIGludCBjaGFyY291bnQsXG4gXHRlbHNlIGlmICghb2xkX2hpX2ZvbnRfbWFzayBcdTAwMjZcdTAwMjYgdmMtXHUwMDNldmNfaGlfZm9udF9tYXNrKVxuIFx0XHRzZXRfdmNfaGlfZm9udCh2YywgZmFsc2UpO1xuIFxuK1x0aWYgKGNvbl9pc192aXNpYmxlKHZjKSkge1xuK1x0XHRpZiAocGFyLVx1MDAzZWJpdG9wcy1cdTAwM2Vyb3RhdGVfZm9udCBcdTAwMjZcdTAwMjYgcGFyLVx1MDAzZWJpdG9wcy1cdTAwM2Vyb3RhdGVfZm9udChpbmZvLCB2YykpIHtcbitcdFx0XHRwYXItXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xuK1x0XHRcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcbitcdFx0fVxuK1x0fVxuK1xuIFx0Zm9udF9kYXRhX3B1dChkYXRhKTtcbiBcbiBcdHJldHVybiByZXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowOToyMi4yNjU2Mzc1NTFaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2OTQ1Nzg1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBGb250IFJvdGF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jYC4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZGluZyBzb21lIGxvZ2ljIGFyb3VuZCBmb250IHJvdGF0aW9uLCBzcGVjaWZpY2FsbHkgbW9kaWZ5aW5nIGBmYmNvbl9kb19zZXRfZm9udGAuIFR3byBpZGVudGljYWwgYmxvY2tzIG9mIGNvZGUgYXJlIGFkZGVkIHRoYXQgaW50cm9kdWNlIGEgY2hlY2sgZm9yIHZpc2liaWxpdHkgYW5kIGNhbGwgYHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnRgIGlmIHRoZSBjb25zb2xlIGlzIHZpc2libGUuIFRoZW4gaXQncyBzZXR0aW5nIGBwYXItXHUwMDNlcm90YXRlYCB0byBgRkJfUk9UQVRFX1VSYCBhbmQgY2FsbGluZyBgc2V0X2JsaXR0aW5nX3R5cGVgLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHdoYXQgYHJvdGF0ZV9mb250YCBhY3R1YWxseSAqZG9lcyouIElzIGl0IGFsbG9jYXRpbmcgbWVtb3J5PyBDb3VsZCB0aGVyZSBiZSBhIHBvdGVudGlhbCBmb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSB3aXRoaW4gdGhhdCBmdW5jdGlvbj8gVGhlIGNvbW1lbnQgc3VnZ2VzdHMgYSBmb250IHJvdGF0aW9uIGJ1ZyBmaXgsIHdoaWNoIGNvdWxkIHZlcnkgd2VsbCBtZWFuIGEgY3Jhc2ggb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYHJvdGF0ZV9mb250YCBmdW5jdGlvbiBjb21wbGV0ZWx5IHRvIGFzc2VzcyB0aGUgcmlzay4gSSdsbCBzdGFydCB3aXRoIGEgcXVpY2sgZ3JlcCB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCBhbmQgc2VlIGhvdyBpdCdzIHVzZWQgZWxzZXdoZXJlLCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyByZWQgZmxhZ3MgaW4gaXRzIGltcGxlbWVudGF0aW9uLiBNZW1vcnkgc2FmZXR5IGlzIGFsd2F5cyBhIHByaW1hcnkgY29uY2VybiBpbiBkcml2ZXIgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA5OjI3LjIzNTA5ODM0MloiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMDc2ODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJvdGF0ZV9mb250XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MTA4OD1zdGF0aWMgdm9pZCBmYmNvbl9pbml0KHN0cnVjdCB2Y19kYXRhICp2YywgYm9vbCBpbml0KVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTIyOC1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoxMjI5OlxcdGlmIChwYXItXFx1MDAzZWJpdG9wcy1cXHUwMDNlcm90YXRlX2ZvbnQgXFx1MDAyNlxcdTAwMjYgcGFyLVxcdTAwM2ViaXRvcHMtXFx1MDAzZXJvdGF0ZV9mb250KGluZm8sIHZjKSkge1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTEyMzAtXFx0XFx0cGFyLVxcdTAwM2Vyb3RhdGUgPSBGQl9ST1RBVEVfVVI7XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0yMTQzPXN0YXRpYyBib29sIGZiY29uX3N3aXRjaChzdHJ1Y3QgdmNfZGF0YSAqdmMpXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yMjE2LVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjIyMTc6XFx0aWYgKHBhci1cXHUwMDNlYml0b3BzLVxcdTAwM2Vyb3RhdGVfZm9udCBcXHUwMDI2XFx1MDAyNiBwYXItXFx1MDAzZWJpdG9wcy1cXHUwMDNlcm90YXRlX2ZvbnQoaW5mbywgdmMpKSB7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjIxOC1cXHRcXHRwYXItXFx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI0MDA9c3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCxcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI0MjgtXFx0aWYgKGNvbl9pc192aXNpYmxlKHZjKSkge1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI0Mjk6XFx0XFx0aWYgKHBhci1cXHUwMDNlYml0b3BzLVxcdTAwM2Vyb3RhdGVfZm9udCBcXHUwMDI2XFx1MDAyNiBwYXItXFx1MDAzZWJpdG9wcy1cXHUwMDNlcm90YXRlX2ZvbnQoaW5mbywgdmMpKSB7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQzMC1cXHRcXHRcXHRwYXItXFx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI0NjktXFx0aWYgKGNvbl9pc192aXNpYmxlKHZjKSkge1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI0NzA6XFx0XFx0aWYgKHBhci1cXHUwMDNlYml0b3BzLVxcdTAwM2Vyb3RhdGVfZm9udCBcXHUwMDI2XFx1MDAyNiBwYXItXFx1MDAzZWJpdG9wcy1cXHUwMDNlcm90YXRlX2ZvbnQoaW5mbywgdmMpKSB7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQ3MS1cXHRcXHRcXHRwYXItXFx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI2NDQ9c3RhdGljIHZvaWQgZmJjb25fbW9kZWNoYW5nZWQoc3RydWN0IGZiX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNjc3LVxcdCAqL1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI2Nzg6XFx0aWYgKHBhci1cXHUwMDNlYml0b3BzLVxcdTAwM2Vyb3RhdGVfZm9udCBcXHUwMDI2XFx1MDAyNiBwYXItXFx1MDAzZWJpdG9wcy1cXHUwMDNlcm90YXRlX2ZvbnQoaW5mbywgdmMpKSB7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjY3OS1cXHRcXHRwYXItXFx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5oPTU5PXN0cnVjdCBmYmNvbl9iaXRvcHMge1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmgtNzEtXFx0aW50ICAoKnVwZGF0ZV9zdGFydCkoc3RydWN0IGZiX2luZm8gKmluZm8pO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5oOjcyOlxcdGludCAgKCpyb3RhdGVfZm9udCkoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2Y19kYXRhICp2Yyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmgtNzMtfTtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYz0zNjM9c3RhdGljIGNvbnN0IHN0cnVjdCBmYmNvbl9iaXRvcHMgY2N3X2ZiY29uX2JpdG9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYy0zNjktXFx0LnVwZGF0ZV9zdGFydCA9IGNjd191cGRhdGVfc3RhcnQsXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jOjM3MDpcXHQucm90YXRlX2ZvbnQgPSBmYmNvbl9yb3RhdGVfZm9udCxcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmMtMzcxLX07XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYz0zNDY9c3RhdGljIGNvbnN0IHN0cnVjdCBmYmNvbl9iaXRvcHMgY3dfZmJjb25fYml0b3BzID0ge1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmMtMzUyLVxcdC51cGRhdGVfc3RhcnQgPSBjd191cGRhdGVfc3RhcnQsXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmM6MzUzOlxcdC5yb3RhdGVfZm9udCA9IGZiY29uX3JvdGF0ZV9mb250LFxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jLTM1NC19O1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTE3LVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYzoxODppbnQgZmJjb25fcm90YXRlX2ZvbnQoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2Y19kYXRhICp2YylcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtMTkte1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5oLTIxLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuaDoyMjppbnQgZmJjb25fcm90YXRlX2ZvbnQoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2Y19kYXRhICp2Yyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5oLTIzLVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmM9Mzk3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJjb25fYml0b3BzIHVkX2ZiY29uX2JpdG9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jLTQwMy1cXHQudXBkYXRlX3N0YXJ0ID0gdWRfdXBkYXRlX3N0YXJ0LFxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jOjQwNDpcXHQucm90YXRlX2ZvbnQgPSBmYmNvbl9yb3RhdGVfZm9udCxcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYy00MDUtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDk6MjcuMzQ1MTgwMzAzWiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTUwNjg5MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBmYmNvbl9yb3RhdGVfZm9udGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gYGZiY29uX3JvdGF0ZV9mb250YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBmcmFtZWJ1ZmZlciBjb25zb2xlIGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSdtIHRyeWluZyB0byBwaW4gZG93biB0aGUgY29yZSBmdW5jdGlvbiBvZiB0aGlzIHJvdXRpbmUuIElzIGl0IGFib3V0IHJlbmRlcmluZywgcmUtbWFwcGluZywgb3IgcG90ZW50aWFsbHkgYWx0ZXJpbmcgdGhlIGdseXBoIGFwcGVhcmFuY2UgYmFzZWQgb24gYSByb3RhdGlvbiBvciBwZXJzcGVjdGl2ZSBwYXJhbWV0ZXI/IEknbSBpbW1lZGlhdGVseSB0cnlpbmcgdG8gY29ubmVjdCBpdCB0byB0aGUgbG93LWxldmVsIGdyYXBoaWNzIG9wZXJhdGlvbnMuIEnigJlsbCBiZSBsb29raW5nIHRvIHNlZSBpZiBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIHZpZGVvIGNhcmQsIGZyYW1lYnVmZmVycywgb3IgaWYgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHNwZWNpZmljIGZvbnQgZGF0YSBiZWluZyByZW5kZXJlZC4gSSdtIGtlZW4gdG8gc2VlIGlmIHRoaXMgaXMgaGFuZGxpbmcgYSBmdW5kYW1lbnRhbCB0cmFuc2Zvcm0gb2YgdGhlIGNoYXJhY3RlcnMgdGhlbXNlbHZlcyBvciBpZiBpdCdzIG1vcmUgYWJvdXQgaG93IHRoZSBjb25zb2xlIGludGVycHJldHMgYW5kIGRpc3BsYXlzIHRoZW0gZ2l2ZW4gc29tZSB1bmRlcmx5aW5nIHJvdGF0aW9uIGNvbW1hbmRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTEwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDk6MzAuNTAwMjUyMDQyWiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzE5MDA5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYmNvbl9yb3RhdGVfZm9udFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTE3LVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYzoxODppbnQgZmJjb25fcm90YXRlX2ZvbnQoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2Y19kYXRhICp2YylcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtMTkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowOTozMC41NjM0NjM1NzhaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc5NTYxNDc2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgdGV4dDpcblxuKipEaXZpbmcgaW50byB0aGUgYGZiY29uX3JvdGF0ZV9mb250YCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgYGZiY29uX3JvdGF0ZV9mb250YCDigJMgc3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uIHdpdGhpbiBgZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBmb250IHJvdGF0aW9uIHdvcmtzIHdpdGhpbiB0aGUgZnJhbWVidWZmZXIgY29uc29sZSBjb250ZXh0LiBUaW1lIHRvIGFuYWx5emUgdGhlIHJvdGF0aW9uIHJvdXRpbmUgYW5kIGl0cyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBmcmFtZWJ1ZmZlciBkZXZpY2UgZHJpdmVyIGNvcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NDIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowOTozMy4zNTkwODEyOTNaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE0NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE4OlxcdGludCBmYmNvbl9yb3RhdGVfZm9udChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZjX2RhdGEgKnZjKVxcbiAgMTk6XFx0e1xcbiAgMjA6XFx0XFx0c3RydWN0IGZiY29uX3BhciAqcGFyID0gaW5mby1cXHUwMDNlZmJjb25fcGFyO1xcbiAgMjE6XFx0XFx0dW5zaWduZWQgY2hhciAqYnVmO1xcbiAgMjI6XFx0XFx0aW50IHJldDtcXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0aWYgKHBhci1cXHUwMDNlcC1cXHUwMDNlZm9udGRhdGEgPT0gcGFyLVxcdTAwM2Vyb3RhdGVkLmZvbnRkYXRhIFxcdTAwMjZcXHUwMDI2IHBhci1cXHUwMDNlcm90YXRlID09IHBhci1cXHUwMDNlcm90YXRlZC5idWZfcm90YXRlKVxcbiAgMjU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuICAyNjpcXHRcXG4gIDI3OlxcdFxcdHBhci1cXHUwMDNlcm90YXRlZC5mb250ZGF0YSA9IHBhci1cXHUwMDNlcC1cXHUwMDNlZm9udGRhdGE7XFxuICAyODpcXHRcXHRwYXItXFx1MDAzZXJvdGF0ZWQuYnVmX3JvdGF0ZSA9IHBhci1cXHUwMDNlcm90YXRlO1xcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHRpZiAoaW5mby1cXHUwMDNlZmJvcHMtXFx1MDAzZWZiX3N5bmMpXFxuICAzMTpcXHRcXHRcXHRpbmZvLVxcdTAwM2VmYm9wcy1cXHUwMDNlZmJfc3luYyhpbmZvKTtcXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0YnVmID0gZm9udF9kYXRhX3JvdGF0ZShwYXItXFx1MDAzZXJvdGF0ZWQuZm9udGRhdGEsIHZjLVxcdTAwM2V2Y19mb250LndpZHRoLFxcbiAgMzQ6XFx0XFx0XFx0XFx0ICAgICAgIHZjLVxcdTAwM2V2Y19mb250LmhlaWdodCwgdmMtXFx1MDAzZXZjX2ZvbnQuY2hhcmNvdW50LFxcbiAgMzU6XFx0XFx0XFx0XFx0ICAgICAgIHBhci1cXHUwMDNlcm90YXRlZC5idWZfcm90YXRlLCBwYXItXFx1MDAzZXJvdGF0ZWQuYnVmLFxcbiAgMzY6XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZwYXItXFx1MDAzZXJvdGF0ZWQuYnVmc2l6ZSk7XFxuICAzNzpcXHRcXHRpZiAoSVNfRVJSKGJ1ZikpIHtcXG4gIDM4OlxcdFxcdFxcdHJldCA9IFBUUl9FUlIoYnVmKTtcXG4gIDM5OlxcdFxcdFxcdGdvdG8gZXJyX2tmcmVlO1xcbiAgNDA6XFx0XFx0fVxcbiAgNDE6XFx0XFxuICA0MjpcXHRcXHRwYXItXFx1MDAzZXJvdGF0ZWQuYnVmID0gYnVmO1xcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHRyZXR1cm4gMDtcXG4gIDQ1OlxcdFxcbiAgNDY6XFx0ZXJyX2tmcmVlOlxcbiAgNDc6XFx0XFx0a2ZyZWUocGFyLVxcdTAwM2Vyb3RhdGVkLmJ1Zik7XFxuICA0ODpcXHRcXHRwYXItXFx1MDAzZXJvdGF0ZWQuYnVmID0gTlVMTDsgLyogY2xlYXIgaGVyZSB0byBhdm9pZCBvdXRwdXQgKi9cXG4gIDQ5OlxcdFxcdHBhci1cXHUwMDNlcm90YXRlZC5idWZzaXplID0gMDtcXG4gIDUwOlxcdFxcbiAgNTE6XFx0XFx0cmV0dXJuIHJldDtcXG4gIDUyOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDk6MzMuMzU5MTQzOTMzWiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTM0NzAzNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkFuYWx5emluZyBgZm9udF9kYXRhX3JvdGF0ZWAqKlxuXG5Pa2F5LCBzbyBgZm9udF9kYXRhX3JvdGF0ZWAuLi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBmdW5jdGlvbi4gQmFzZWQgb24gdGhlIG5hbWUsIGl0J3MgcHJldHR5IGNsZWFyIGl0J3MgZ29pbmcgdG8gaW52b2x2ZSBzb21lIGtpbmQgb2YgZm9udCByb3RhdGlvbi4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcyAqaG93KiBpcyB0aGF0IGFjaGlldmVkPyBEb2VzIGl0IHByZS1hbGxvY2F0ZSBhIHNwZWNpZmljIGFtb3VudCBvZiBtZW1vcnkgZm9yIHRoZSByb3RhdGVkIGZvbnQ/IERvZXMgaXQgY2FsY3VsYXRlIHRoZSByZXF1aXJlZCBtZW1vcnkgb24gdGhlIGZseT8gVGhlIG5hbWUgYWxzbyBzdWdnZXN0cyBpdCBoYW5kbGVzIGZvbnQgZGF0YSwgc28gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB3aGF0IGtpbmQgb2YgZm9udCBkYXRhIGlzIGJlaW5nIHJvdGF0ZWQ6IGFyZSB3ZSB0YWxraW5nIGJpdG1hcCBmb250cywgdmVjdG9yIGZvbnRzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBsb29rIGF0IHRoZSBjb2RlIHNob3VsZCBjbGVhciB1cCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlsczogbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJvdGF0aW9uIGFsZ29yaXRobSBhcmUga2V5IGhlcmUuIEknbSBnb2luZyB0byBzdGFydCBieSBkaXZpbmcgaW50byB0aGUgYGZvbnRfZGF0YV9yb3RhdGVgIGZ1bmN0aW9uIGl0c2VsZi4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTM2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowOTozNi4yMTI2MTcyNDNaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MTExMjU1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb250X2RhdGFfcm90YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jPTE4PWludCBmYmNvbl9yb3RhdGVfZm9udChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZjX2RhdGEgKnZjKVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTMyLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYzozMzpcXHRidWYgPSBmb250X2RhdGFfcm90YXRlKHBhci1cXHUwMDNlcm90YXRlZC5mb250ZGF0YSwgdmMtXFx1MDAzZXZjX2ZvbnQud2lkdGgsXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTM0LVxcdFxcdFxcdCAgICAgICB2Yy1cXHUwMDNldmNfZm9udC5oZWlnaHQsIHZjLVxcdTAwM2V2Y19mb250LmNoYXJjb3VudCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDk6MzcuMTUzNzM0MzgyWiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODQ4Mjk5NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipTZWFyY2hpbmcgZm9yIGEgTWlzc2luZyBGdW5jdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIGV4cGVjdGluZyB0byBmaW5kIGBmb250X2RhdGFfcm90YXRlYCBpbiBgZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2AsIGJ1dCBpdCdzIG5vdCB0aGVyZS4gSG1tLCB0aGF0J3MgdW51c3VhbC4gSXQncyB0aW1lIHRvIGJyb2FkZW4gdGhlIHNlYXJjaC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiAqYWN0dWFsbHkqIGxpdmVzIHdpdGhpbiB0aGUgY29kZWJhc2UuIExldCdzIGZpcmUgdXAgYSBnbG9iYWwgc2VhcmNoIGFuZCBzZWUgd2hlcmUgdGhpcyBiZWFzdCBpcyBoaWRpbmcuIFRpbWUgdG8gY2FzdCBhIHdpZGVyIG5ldCBhbmQgZmlndXJlIG91dCBpdHMgdHJ1ZSBsb2NhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU1NSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA5OjQwLjEzODU2Njk1NVoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0MzU2MDgzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb250X2RhdGFfcm90YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmM9MTg9aW50IGZiY29uX3JvdGF0ZV9mb250KHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgdmNfZGF0YSAqdmMpXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtMzItXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jOjMzOlxcdGJ1ZiA9IGZvbnRfZGF0YV9yb3RhdGUocGFyLVxcdTAwM2Vyb3RhdGVkLmZvbnRkYXRhLCB2Yy1cXHUwMDNldmNfZm9udC53aWR0aCxcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtMzQtXFx0XFx0XFx0ICAgICAgIHZjLVxcdTAwM2V2Y19mb250LmhlaWdodCwgdmMtXFx1MDAzZXZjX2ZvbnQuY2hhcmNvdW50LFxcbi0tXFxuaW5jbHVkZS9saW51eC9mb250Lmg9MTEyPXZvaWQgZm9udF9nbHlwaF9yb3RhdGVfMjcwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmdseXBoLCB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsXFxuaW5jbHVkZS9saW51eC9mb250LmgtMTEzLVxcdFxcdFxcdCAgIHVuc2lnbmVkIGNoYXIgKm91dCk7XFxuaW5jbHVkZS9saW51eC9mb250Lmg6MTE0OnVuc2lnbmVkIGNoYXIgKmZvbnRfZGF0YV9yb3RhdGUoZm9udF9kYXRhX3QgKmZkLCB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsXFxuaW5jbHVkZS9saW51eC9mb250LmgtMTE1LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBjaGFyY291bnQsIHVuc2lnbmVkIGludCBzdGVwcyxcXG4tLVxcbmxpYi9mb250cy9mb250X3JvdGF0ZS5jPTE3NT1FWFBPUlRfU1lNQk9MX0dQTChmb250X2dseXBoX3JvdGF0ZV8yNzApO1xcbi0tXFxubGliL2ZvbnRzL2ZvbnRfcm90YXRlLmMtMTc3LS8qKlxcbmxpYi9mb250cy9mb250X3JvdGF0ZS5jOjE3ODogKiBmb250X2RhdGFfcm90YXRlIC0gUm90YXRlIGZvbnQgZGF0YSBieSBtdWx0aXBsZXMgb2YgOTDCsFxcbmxpYi9mb250cy9mb250X3JvdGF0ZS5jLTE3OS0gKiBAZmQ6IFRoZSBmb250IGRhdGEgdG8gcm90YXRlXFxuLS1cXG5saWIvZm9udHMvZm9udF9yb3RhdGUuYy0yMDMtICovXFxubGliL2ZvbnRzL2ZvbnRfcm90YXRlLmM6MjA0OnVuc2lnbmVkIGNoYXIgKmZvbnRfZGF0YV9yb3RhdGUoZm9udF9kYXRhX3QgKmZkLCB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsXFxubGliL2ZvbnRzL2ZvbnRfcm90YXRlLmMtMjA1LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBjaGFyY291bnQsIHVuc2lnbmVkIGludCBzdGVwcyxcXG4tLVxcbmxpYi9mb250cy9mb250X3JvdGF0ZS5jLTI3NC19XFxubGliL2ZvbnRzL2ZvbnRfcm90YXRlLmM6Mjc1OkVYUE9SVF9TWU1CT0xfR1BMKGZvbnRfZGF0YV9yb3RhdGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowOTo0Mi4zODIxMzUzMDdaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU0ODUyNjMwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYGZvbnRfZGF0YV9yb3RhdGVgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGZvbnRfZGF0YV9yb3RhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBxdWlja2x5IGdldCBhIGhpZ2gtbGV2ZWwgdW5kZXJzdGFuZGluZy4gV2hhdCBpcyB0aGlzIGZ1bmN0aW9uICpzdXBwb3NlZCogdG8gZG8/IFRoZSBuYW1lIHN1Z2dlc3RzIHNvbWV0aGluZyByZWxhdGVkIHRvIGZvbnQgZGF0YSBhbmQgcm90YXRpb24uIE15IGJyYWluIGltbWVkaWF0ZWx5IHN0YXJ0cyBjb25uZWN0aW5nIHRoaXMgdG8gcG9zc2libGUgdXNlczogcmVuZGVyaW5nIHJvdGF0ZWQgdGV4dCwgZ2VuZXJhdGluZyByb3RhdGVkIGZvbnQgZ2x5cGhzIGZvciBkaWZmZXJlbnQgY2hhcmFjdGVyIHNldHMsIG9yIHBvdGVudGlhbGx5IGZvciB0cmFuc2Zvcm1hdGlvbnMgaW4gdHlwb2dyYXBoeSBsaWJyYXJpZXMuXG5cbkknbSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIG9mIHRoZSBudWFuY2VzIGJhc2VkIG9uIG15IGV4cGVyaWVuY2UuIElzIHRoaXMgYSBzaW1wbGUgcm90YXRpb24gb2YgYSBiaXRtYXAsIG9yIGlzIGl0IGRlYWxpbmcgd2l0aCB2ZWN0b3IgZm9udCBkYXRhLCB3aGljaCBpbnRyb2R1Y2VzIGEgd2hvbGUgZGlmZmVyZW50IHNldCBvZiBjb21wbGV4aXR5PyBBcmUgd2UgdGFsa2luZyBhYm91dCByb3RhdGluZyBpbmRpdmlkdWFsIGdseXBocywgb3IgYW4gZW50aXJlIHN0cmluZyBvZiB0ZXh0PyBUaGUgaW1wbGVtZW50YXRpb24gd2lsbCBtYWtlIGEgYmlnIGRpZmZlcmVuY2UsIGNvbnNpZGVyaW5nIHRoZSBtYW55IGFzcGVjdHMgb2YgdGhlIGZvbnQgZGF0YS5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcHMgd291bGQgYmU6XG5cbiogICAqKkxvb2sgYXQgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZToqKiBXaGF0IGFyZSB0aGUgaW5wdXRzPyBBcmUgd2UgZGVhbGluZyB3aXRoIGNoYXJhY3RlciBjb2RlcywgZm9udCBkYXRhIHN0cnVjdHVyZXMgKGxpa2UgYFRURl9Gb250YCwgYEZUX0ZhY2VgIGV0Yy4pLCByb3RhdGlvbiBhbmdsZSBpbiBkZWdyZWVzIG9yIHJhZGlhbnM/IFdoYXQgYWJvdXQgdGhlIG91dHB1dCBmb3JtYXQ/IElzIHRoaXMgaW4tcGxhY2UgbWFuaXB1bGF0aW9uLCBvciBkb2VzIGl0IHJldHVybiBhIG5ldyByb3RhdGVkIGRhdGEgc3RydWN0dXJlP1xuKiAgICoqSW5zcGVjdCB0aGUgY29yZSBhbGdvcml0aG06KiogSeKAmW0gZ29pbmcgdG8gc2NhbiB0aGUgY29kZSBmb3IgdGhlIGNlbnRyYWwgb3BlcmF0aW9ucy4gQXJlIHRoZXkgbGV2ZXJhZ2luZyByb3RhdGlvbiBtYXRyaWNlcz8gQml0d2lzZSBvcGVyYXRpb25zIGZvciBiaXRtYXAgcm90YXRpb24/IEJlemllciBjdXJ2ZSB0cmFuc2Zvcm1hdGlvbnM/IFRoaXMgaXMgd2hlcmUgSSdsbCBnZXQgdGhlIHJlYWwgc3RvcnkuXG4qICAgKipDb25zaWRlciBlZGdlIGNhc2VzOioqIEknbSBhdXRvbWF0aWNhbGx5IHRoaW5raW5nIGFib3V0IGhhbmRsaW5nIG9mIGRpZmZlcmVudCBmb250IGRhdGEgc3RydWN0dXJlcywgZ2x5cGhzIHdpdGggY29tcGxleCBjb250b3VycywgZW1wdHkgZ2x5cGhzLCBhbnRpLWFsaWFzaW5nIHRlY2huaXF1ZXMsIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBBcmUgdGhlcmUgb3B0aW1pemF0aW9ucyBmb3IgY29tbW9uIHJvdGF0aW9uIGFuZ2xlcyAoOTAsIDE4MCBkZWdyZWVzKT9cbiogICAqKkludmVzdGlnYXRlIGRlcGVuZGVuY2llczoqKiBJJ2xsIGJlIGN1cmlvdXMgYWJvdXQgd2hhdCBsaWJyYXJpZXMgb3IgZnVuY3Rpb25zIHRoaXMgZnVuY3Rpb24gY2FsbHMuIERvZXMgaXQgdXNlIGEgbGluZWFyIGFsZ2VicmEgbGlicmFyeT8gQXJlIHRoZXJlIGFueSBtZW1vcnkgYWxsb2NhdGlvbiBvciBkZWFsbG9jYXRpb24gcm91dGluZXMgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBwb3RlbnRpYWwgdGhyZWFkaW5nIGNvbmNlcm5zP1xuXG5CYXNlZCBvbiB0aG9zZSBpbml0aWFsIGNoZWNrcywgSSBjYW4gZm9ybSBhIG1vcmUgY29tcGxldGUgcGljdHVyZSwgYW5kIHN0YXJ0IHRvIGp1ZGdlIHRoZSBxdWFsaXR5LCBlZmZpY2llbmN5LCBhbmQgcG90ZW50aWFsIGxpbWl0YXRpb25zIG9mIHRoaXMgYGZvbnRfZGF0YV9yb3RhdGVgIGZ1bmN0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgdG8gc2VlIGlmIGl0J3Mgd2VsbC1kZXNpZ25lZCwgZWFzeSB0byBtYWludGFpbiwgYW5kIGRvZXMgaXRzIGpvYiBjb3JyZWN0bHkgaW4gYWxsIHNjZW5hcmlvcy4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNDcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowOTo0Ni45MzA2NjUxODhaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9mb250cy9mb250X3JvdGF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwNCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwNDpcXHR1bnNpZ25lZCBjaGFyICpmb250X2RhdGFfcm90YXRlKGZvbnRfZGF0YV90ICpmZCwgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LFxcbiAyMDU6XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGNoYXJjb3VudCwgdW5zaWduZWQgaW50IHN0ZXBzLFxcbiAyMDY6XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgKmJ1ZnNpemUpXFxuIDIwNzpcXHR7XFxuIDIwODpcXHRcXHRjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMgPSBmb250X2RhdGFfYnVmKGZkKTtcXG4gMjA5OlxcdFxcdHVuc2lnbmVkIGludCBzX2NlbGxzaXplID0gZm9udF9nbHlwaF9zaXplKHdpZHRoLCBoZWlnaHQpO1xcbiAyMTA6XFx0XFx0dW5zaWduZWQgaW50IGRfY2VsbHNpemUsIGk7XFxuIDIxMTpcXHRcXHR1bnNpZ25lZCBjaGFyICpkc3Q7XFxuIDIxMjpcXHRcXHRzaXplX3Qgc2l6ZTtcXG4gMjEzOlxcdFxcbiAyMTQ6XFx0XFx0c3RlcHMgJT0gNDtcXG4gMjE1OlxcdFxcbiAyMTY6XFx0XFx0c3dpdGNoIChzdGVwcykge1xcbiAyMTc6XFx0XFx0Y2FzZSAwOlxcbiAyMTg6XFx0XFx0Y2FzZSAyOlxcbiAyMTk6XFx0XFx0XFx0ZF9jZWxsc2l6ZSA9IHNfY2VsbHNpemU7XFxuIDIyMDpcXHRcXHRcXHRicmVhaztcXG4gMjIxOlxcdFxcdGNhc2UgMTpcXG4gMjIyOlxcdFxcdGNhc2UgMzpcXG4gMjIzOlxcdFxcdFxcdGRfY2VsbHNpemUgPSBmb250X2dseXBoX3NpemUoaGVpZ2h0LCB3aWR0aCk7IC8qIGZsaXAgd2lkdGgvaGVpZ2h0ICovXFxuIDIyNDpcXHRcXHRcXHRicmVhaztcXG4gMjI1OlxcdFxcdH1cXG4gMjI2OlxcdFxcbiAyMjc6XFx0XFx0aWYgKGNoZWNrX211bF9vdmVyZmxvdyhjaGFyY291bnQsIGRfY2VsbHNpemUsIFxcdTAwMjZzaXplKSlcXG4gMjI4OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbiAyMjk6XFx0XFxuIDIzMDpcXHRcXHRpZiAoIWJ1ZiB8fCAhYnVmc2l6ZSB8fCBzaXplIFxcdTAwM2UgKmJ1ZnNpemUpIHtcXG4gMjMxOlxcdFxcdFxcdGRzdCA9IGttYWxsb2NfYXJyYXkoY2hhcmNvdW50LCBkX2NlbGxzaXplLCBHRlBfS0VSTkVMKTtcXG4gMjMyOlxcdFxcdFxcdGlmICghZHN0KVxcbiAyMzM6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIDIzNDpcXHRcXG4gMjM1OlxcdFxcdFxcdGtmcmVlKGJ1Zik7XFxuIDIzNjpcXHRcXHRcXHRidWYgPSBkc3Q7XFxuIDIzNzpcXHRcXHRcXHRpZiAoYnVmc2l6ZSlcXG4gMjM4OlxcdFxcdFxcdFxcdCpidWZzaXplID0gc2l6ZTtcXG4gMjM5OlxcdFxcdH0gZWxzZSB7XFxuIDI0MDpcXHRcXHRcXHRkc3QgPSBidWY7XFxuIDI0MTpcXHRcXHR9XFxuIDI0MjpcXHRcXG4gMjQzOlxcdFxcdHN3aXRjaCAoc3RlcHMpIHtcXG4gMjQ0OlxcdFxcdGNhc2UgMDpcXG4gMjQ1OlxcdFxcdFxcdG1lbWNweShkc3QsIHNyYywgc2l6ZSk7XFxuIDI0NjpcXHRcXHRcXHRicmVhaztcXG4gMjQ3OlxcdFxcdGNhc2UgMTpcXG4gMjQ4OlxcdFxcdFxcdG1lbXNldChkc3QsIDAsIHNpemUpO1xcbiAyNDk6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNoYXJjb3VudDsgKytpKSB7XFxuIDI1MDpcXHRcXHRcXHRcXHRfX2ZvbnRfZ2x5cGhfcm90YXRlXzkwKHNyYywgd2lkdGgsIGhlaWdodCwgZHN0KTtcXG4gMjUxOlxcdFxcdFxcdFxcdHNyYyArPSBzX2NlbGxzaXplO1xcbiAyNTI6XFx0XFx0XFx0XFx0ZHN0ICs9IGRfY2VsbHNpemU7XFxuIDI1MzpcXHRcXHRcXHR9XFxuIDI1NDpcXHRcXHRcXHRicmVhaztcXG4gMjU1OlxcdFxcdGNhc2UgMjpcXG4gMjU2OlxcdFxcdFxcdG1lbXNldChkc3QsIDAsIHNpemUpO1xcbiAyNTc6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNoYXJjb3VudDsgKytpKSB7XFxuIDI1ODpcXHRcXHRcXHRcXHRfX2ZvbnRfZ2x5cGhfcm90YXRlXzE4MChzcmMsIHdpZHRoLCBoZWlnaHQsIGRzdCk7XFxuIDI1OTpcXHRcXHRcXHRcXHRzcmMgKz0gc19jZWxsc2l6ZTtcXG4gMjYwOlxcdFxcdFxcdFxcdGRzdCArPSBkX2NlbGxzaXplO1xcbiAyNjE6XFx0XFx0XFx0fVxcbiAyNjI6XFx0XFx0XFx0YnJlYWs7XFxuIDI2MzpcXHRcXHRjYXNlIDM6XFxuIDI2NDpcXHRcXHRcXHRtZW1zZXQoZHN0LCAwLCBzaXplKTtcXG4gMjY1OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjaGFyY291bnQ7ICsraSkge1xcbiAyNjY6XFx0XFx0XFx0XFx0X19mb250X2dseXBoX3JvdGF0ZV8yNzAoc3JjLCB3aWR0aCwgaGVpZ2h0LCBkc3QpO1xcbiAyNjc6XFx0XFx0XFx0XFx0c3JjICs9IHNfY2VsbHNpemU7XFxuIDI2ODpcXHRcXHRcXHRcXHRkc3QgKz0gZF9jZWxsc2l6ZTtcXG4gMjY5OlxcdFxcdFxcdH1cXG4gMjcwOlxcdFxcdFxcdGJyZWFrO1xcbiAyNzE6XFx0XFx0fVxcbiAyNzI6XFx0XFxuIDI3MzpcXHRcXHRyZXR1cm4gYnVmO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowOTo0Ni45MzA4MDMwODhaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA3NDIwNDg0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBGb250IFJvdGF0aW9uIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gYGZvbnRfZGF0YV9yb3RhdGVgLCB3aGljaCBmcm9tIHRoZSBsb29rcyBvZiBpdCwgaGFuZGxlcyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gZm9yIHJvdGF0ZWQgZm9udCBkYXRhLiBTcGVjaWZpY2FsbHksIGl0IHVzZXMgZWl0aGVyIGBtZW1jcHlgIG9yIGEgY29tYmluYXRpb24gb2YgYG1lbXNldGAgYW5kIHNvbWUgYF9fZm9udF9nbHlwaF9yb3RhdGVfKmAgZnVuY3Rpb25zLCBkZXBlbmRpbmcgb24gdGhlIGNpcmN1bXN0YW5jZXMuXG5cblRoZSBrZXkgY2hhbmdlIGlzIHRoaXMgYWRkaXRpb24gaW4gYGZiY29uX2RvX3NldF9mb250YC4gSXQgY2hlY2tzIGlmIHRoZSB2aXJ0dWFsIGNvbnNvbGUgaXMgdmlzaWJsZSBhbmQsIGlmIHNvLCBjYWxscyBgcm90YXRlX2ZvbnRgIHdoaWNoLCBhZ2FpbiwgYWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyBhIGJ1ZmZlci4gVGhlIGluaXRpYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGludHJvZHVjdGlvbiBoYXMgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy5cblxuRXNzZW50aWFsbHksIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgYnVnIHdoZXJlIHRoZSBgcm90YXRlX2ZvbnRgIGZ1bmN0aW9uIHdhc24ndCBiZWluZyBjYWxsZWQgd2hlbiBhIGZvbnQgd2FzIHNldC4gVGhhdCdzIHdoYXQncyBwaXF1aW5nIG15IGludGVyZXN0LiBJZiBgcm90YXRlX2ZvbnRgICp3YXNuJ3QqIGNhbGxlZCwgdGhlbiBJIG5lZWQgdG8gY29uc2lkZXIgd2hhdCBzdGF0ZSBgcGFyLVx1MDAzZXJvdGF0ZWQuYnVmYCB3b3VsZCBiZSBsZWZ0IGluLiBXYXMgaXQgbGVmdCB1bmluaXRpYWxpemVkIG9yIGV2ZW4gTlVMTD9cblxuSWYgYHBhci1cdTAwM2Vyb3RhdGVkLmJ1ZmAgd2FzIGluZGVlZCBOVUxMIGluIHRoZSBidWdneSBzdGF0ZSwgdGhhdCB3b3VsZCd2ZSByZXN1bHRlZCBpbiBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggd2UnZCB0eXBpY2FsbHkgZXhwZWN0IHRvIGJlIGNhdWdodCBieSBLQVNBTiBvciBhIGdlbmVyYWwgcHJvdGVjdGlvbiBmYXVsdCwgd2hpY2ggaXMgd2h5IGl0IGlzIHVubGlrZWx5IGl0IHdlbnQgdW5ub3RpY2VkLiBTbyB0aGUgbW9yZSBpbnRlcmVzdGluZyBwb3NzaWJpbGl0eSBpcyB0aGF0IGl0IHdhcyB1bmluaXRpYWxpemVkLiBJbiB0aGF0IHNjZW5hcmlvLCBLTVNBTiBzaG91bGQgaGF2ZSBzcG90dGVkIHRoYXQuXG5cblNvLCBzaW5jZSBpdCB3YXMgZml4ZWQsIGxldCdzIHNlZSB3aGVyZSBgcGFyLVx1MDAzZXJvdGF0ZWQuYnVmYCBpcyB1c2VkIHRvIHNlZSBpZiB3ZSBjYW4gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZpeCB3YXMgbmVlZGVkLCBvciBpZiB3ZSBjYW4gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBmb3IgZnVydGhlciBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3ODYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowOTo1Mi4wMDUwMTM3NzlaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0OTkxNDU0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYXItXFx1MDAzZXJvdGF0ZWQuYnVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9NzczPXN0YXRpYyB2b2lkIGZiY29uX3JlbGVhc2Uoc3RydWN0IGZiX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy03ODktI2lmZGVmIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6NzkwOlxcdFxcdGtmcmVlKHBhci1cXHUwMDNlcm90YXRlZC5idWYpO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTc5MS0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTEwMTQ9c3RhdGljIGNvbnN0IGNoYXIgKmZiY29uX3N0YXJ0dXAodm9pZClcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTEwNDQtI2lmZGVmIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MTA0NTpcXHRwYXItXFx1MDAzZXJvdGF0ZWQuYnVmX3JvdGF0ZSA9IC0xO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTEwNDYtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0yNjQ0PXN0YXRpYyB2b2lkIGZiY29uX21vZGVjaGFuZ2VkKHN0cnVjdCBmYl9pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjY3MS1cXHQvKlxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI2NzI6XFx0ICogUmVidWlsZCBwYXItXFx1MDAzZXJvdGF0ZWQuYnVmIGZvciB0aGUgbmV3IHJvdGF0aW9uIG5vdyB0aGF0IGJpdG9wcyBoYXZlXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjY3My1cXHQgKiBzd2l0Y2hlZC4gIFRoZSBuZXcgcHV0Y3MvY3Vyc29yIG9wcyByZWFkIHRoaXMgYnVmZmVyOyBpZiBpdCBpcyBzdGlsbFxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jPTk4PXN0YXRpYyBpbmxpbmUgdm9pZCBjY3dfcHV0Y3NfYWxpZ25lZChzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLFxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jLTEwOC1cXHR3aGlsZSAoY250LS0pIHtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmM6MTA5OlxcdFxcdHNyYyA9IHBhci1cXHUwMDNlcm90YXRlZC5idWYgKyAoc2NyX3JlYWR3KHMtLSkgXFx1MDAyNiBjaGFybWFzaykgKiBjZWxsc2l6ZTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmMtMTEwLVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jPTEyOT1zdGF0aWMgdm9pZCBjY3dfcHV0Y3Moc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyxcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYy0xNDQtXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jOjE0NTpcXHRpZiAoIXBhci1cXHUwMDNlcm90YXRlZC5idWYpXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jLTE0Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmM9MjIxPXN0YXRpYyB2b2lkIGNjd19jdXJzb3Ioc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgYm9vbCBlbmFibGUsXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmMtMjM0LVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYzoyMzU6XFx0aWYgKCFwYXItXFx1MDAzZXJvdGF0ZWQuYnVmKVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYy0yMzYtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jLTI0MS1cXHRhdHRyaWJ1dGUgPSBnZXRfYXR0cmlidXRlKGluZm8sIGMpO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYzoyNDI6XFx0c3JjID0gcGFyLVxcdTAwM2Vyb3RhdGVkLmJ1ZiArICgoYyBcXHUwMDI2IGNoYXJtYXNrKSAqICh3ICogdmMtXFx1MDAzZXZjX2ZvbnQud2lkdGgpKTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmMtMjQzLVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmM9ODM9c3RhdGljIGlubGluZSB2b2lkIGN3X3B1dGNzX2FsaWduZWQoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyxcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jLTkzLVxcdHdoaWxlIChjbnQtLSkge1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jOjk0OlxcdFxcdHNyYyA9IHBhci1cXHUwMDNlcm90YXRlZC5idWYgKyAoc2NyX3JlYWR3KHMrKykgXFx1MDAyNiBjaGFybWFzaykgKiBjZWxsc2l6ZTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYy05NS1cXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jPTExND1zdGF0aWMgdm9pZCBjd19wdXRjcyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLFxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmMtMTI5LVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jOjEzMDpcXHRpZiAoIXBhci1cXHUwMDNlcm90YXRlZC5idWYpXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmMtMTMxLVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jPTIwND1zdGF0aWMgdm9pZCBjd19jdXJzb3Ioc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgYm9vbCBlbmFibGUsXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYy0yMTctXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmM6MjE4OlxcdGlmICghcGFyLVxcdTAwM2Vyb3RhdGVkLmJ1ZilcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYy0yMTktXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmMtMjI0LVxcdGF0dHJpYnV0ZSA9IGdldF9hdHRyaWJ1dGUoaW5mbywgYyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmM6MjI1OlxcdHNyYyA9IHBhci1cXHUwMDNlcm90YXRlZC5idWYgKyAoKGMgXFx1MDAyNiBjaGFybWFzaykgKiAodyAqIHZjLVxcdTAwM2V2Y19mb250LndpZHRoKSk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmMtMjI2LVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jPTE4PWludCBmYmNvbl9yb3RhdGVfZm9udChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZjX2RhdGEgKnZjKVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTIzLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYzoyNDpcXHRpZiAocGFyLVxcdTAwM2VwLVxcdTAwM2Vmb250ZGF0YSA9PSBwYXItXFx1MDAzZXJvdGF0ZWQuZm9udGRhdGEgXFx1MDAyNlxcdTAwMjYgcGFyLVxcdTAwM2Vyb3RhdGUgPT0gcGFyLVxcdTAwM2Vyb3RhdGVkLmJ1Zl9yb3RhdGUpXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTI1LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTI3LVxcdHBhci1cXHUwMDNlcm90YXRlZC5mb250ZGF0YSA9IHBhci1cXHUwMDNlcC1cXHUwMDNlZm9udGRhdGE7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jOjI4OlxcdHBhci1cXHUwMDNlcm90YXRlZC5idWZfcm90YXRlID0gcGFyLVxcdTAwM2Vyb3RhdGU7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTI5LVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTM0LVxcdFxcdFxcdCAgICAgICB2Yy1cXHUwMDNldmNfZm9udC5oZWlnaHQsIHZjLVxcdTAwM2V2Y19mb250LmNoYXJjb3VudCxcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmM6MzU6XFx0XFx0XFx0ICAgICAgIHBhci1cXHUwMDNlcm90YXRlZC5idWZfcm90YXRlLCBwYXItXFx1MDAzZXJvdGF0ZWQuYnVmLFxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYzozNjpcXHRcXHRcXHQgICAgICAgXFx1MDAyNnBhci1cXHUwMDNlcm90YXRlZC5idWZzaXplKTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtMzctXFx0aWYgKElTX0VSUihidWYpKSB7XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtNDEtXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jOjQyOlxcdHBhci1cXHUwMDNlcm90YXRlZC5idWYgPSBidWY7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTQzLVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTQ2LWVycl9rZnJlZTpcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmM6NDc6XFx0a2ZyZWUocGFyLVxcdTAwM2Vyb3RhdGVkLmJ1Zik7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jOjQ4OlxcdHBhci1cXHUwMDNlcm90YXRlZC5idWYgPSBOVUxMOyAvKiBjbGVhciBoZXJlIHRvIGF2b2lkIG91dHB1dCAqL1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYzo0OTpcXHRwYXItXFx1MDAzZXJvdGF0ZWQuYnVmc2l6ZSA9IDA7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTUwLVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmM9ODQ9c3RhdGljIGlubGluZSB2b2lkIHVkX3B1dGNzX2FsaWduZWQoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyxcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jLTk0LVxcdHdoaWxlIChjbnQtLSkge1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jOjk1OlxcdFxcdHNyYyA9IHBhci1cXHUwMDNlcm90YXRlZC5idWYgKyAoc2NyX3JlYWR3KHMtLSkgXFx1MDAyNiBjaGFybWFzaykgKiBjZWxsc2l6ZTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYy05Ni1cXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jPTExNT1zdGF0aWMgaW5saW5lIHZvaWQgdWRfcHV0Y3NfdW5hbGlnbmVkKHN0cnVjdCB2Y19kYXRhICp2YyxcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jLTEyOS1cXHR3aGlsZSAoY250LS0pIHtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYzoxMzA6XFx0XFx0c3JjID0gcGFyLVxcdTAwM2Vyb3RhdGVkLmJ1ZiArIChzY3JfcmVhZHcocy0tKSBcXHUwMDI2IGNoYXJtYXNrKSAqIGNlbGxzaXplO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jLTEzMS1cXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jPTE1MD1zdGF0aWMgdm9pZCB1ZF9wdXRjcyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLFxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmMtMTY2LVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jOjE2NzpcXHRpZiAoIXBhci1cXHUwMDNlcm90YXRlZC5idWYpXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmMtMTY4LVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jPTI1MD1zdGF0aWMgdm9pZCB1ZF9jdXJzb3Ioc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgYm9vbCBlbmFibGUsXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYy0yNjQtXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmM6MjY1OlxcdGlmICghcGFyLVxcdTAwM2Vyb3RhdGVkLmJ1ZilcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYy0yNjYtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmMtMjcxLVxcdGF0dHJpYnV0ZSA9IGdldF9hdHRyaWJ1dGUoaW5mbywgYyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmM6MjcyOlxcdHNyYyA9IHBhci1cXHUwMDNlcm90YXRlZC5idWYgKyAoKGMgXFx1MDAyNiBjaGFybWFzaykgKiAodyAqIHZjLVxcdTAwM2V2Y19mb250LmhlaWdodCkpO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jLTI3My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDk6NTIuMzU0OTMzMzcyWiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjc1Mzc3ODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBgZmJjb25fZG9fc2V0X2ZvbnRgIFBhdGNoOiBPT0IgUmVhZCBpbiBSb3RhdGVkIEZvbnQgQnVmZmVyKipcblxuT2theSwgc28gdGhlIHBhdGNoIGludHJvZHVjZXMgY2FsbHMgdG8gYHJvdGF0ZV9mb250YCB3aXRoaW4gYGZiY29uX2RvX3NldF9mb250YC4gTXkgcHJpbWFyeSBjb25jZXJuIGluaXRpYWxseSB3YXMgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgZHVlIHRvIGEgbWlzbWF0Y2ggYmV0d2VlbiBmb250IGRhdGEgYW5kIHRoZSByb3RhdGVkIGJ1ZmZlciAoYHBhci1cdTAwM2Vyb3RhdGVkLmJ1ZmApLiBJZiBgcm90YXRlX2ZvbnRgIGlzbid0IGNhbGxlZCwgYW5kIGZvbnQgZGltZW5zaW9ucyAod2lkdGgsIGhlaWdodCwgYGNoYXJjb3VudGApIGNoYW5nZSwgYHBhci1cdTAwM2Vyb3RhdGVkLmJ1ZmAgbWlnaHQgYmUgb3V0IG9mIHN5bmMuXG5cblRoZSBjb3JlIGlzc3VlIHNlZW1zIHRvIGFyaXNlIHdoZW4gYGNoYXJjb3VudGAgY2hhbmdlcywgc3BlY2lmaWNhbGx5IGZyb20gMjU2IHRvIDUxMiAob3IgdmljZS12ZXJzYSksIGltcGFjdGluZyB0aGUgdW5kZXJseWluZyBidWZmZXIgc2l6ZS4gSWYgdGhlIGZvbnQgZG91YmxlcyBpbiBjaGFyYWN0ZXIgY291bnQsIGJ1dCBgcGFyLVx1MDAzZXJvdGF0ZWQuYnVmYCBpc24ndCB1cGRhdGVkIGJ5IGByb3RhdGVfZm9udGAsIHRoZW4gdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBzb3VyY2UgZm9yIHRoZSBjaGFyYWN0ZXIgZGF0YSB3aXRoaW4gYGN3X3B1dGNzYCBvciBgdWRfcHV0Y3NgIHdpbGwgdXNlIHRoZSAqbmV3KiBgY2hhcmNvdW50YCBidXQgc3RpbGwgcmVhZCBmcm9tIHRoZSAqb2xkKiAoc21hbGxlcikgYnVmZmVyLiBJZiB0aGUgYGNoYXJjb3VudGAgaW5jcmVhc2VzIGZyb20gMjU2IHRvIDUxMiwgdGhlbiBhbiBhY2Nlc3MgdG8gYSBjaGFyYWN0ZXIgcGFzdCAyNTUgYmVjb21lcyBhbiBPT0IgcmVhZC4gVGhlIGBjIFx1MDAyNiBjaGFybWFza2Agb3BlcmF0aW9uIHdpbGwgYWxsb3cgcmVhZHMgdXAgdG8gNTExLCBhbmQgdGhlIHJlc3VsdGluZyBgc3JjYCBwb2ludGVyIHdvdWxkIHBvaW50IG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgMjU2LWNoYXJhY3RlciBidWZmZXIuIFRoZSBvZmZzZXQgYHBhci1cdTAwM2Vyb3RhdGVkLmJ1ZiArICgoYyBcdTAwMjYgY2hhcm1hc2spICogY2VsbHNpemUpYCBjYW4gdGhlbiByZWFkIG91dCBvZiB0aGUgYm91bmRzLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4gd2FzIGlmIHRoZXJlIHdhcyBhbiBvcHBvcnR1bml0eSBmb3IgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgYnV0IEtBU0FOIHNob3VsZCBoYW5kbGUgdGhpcyBwZXJmZWN0bHkuIFNpbmNlIGBwYXItXHUwMDNlcm90YXRlZC5idWZgIGlzIGEgaGVhcCBidWZmZXIgYWxsb2NhdGVkIHZpYSBga21hbGxvY19hcnJheWAsIHRoZSBhY2Nlc3MgdmlvbGF0aW9uIGlzIGFuIE9PQiByZWFkLCB3aGljaCBLQVNBTiB3b3VsZCBkZXRlY3QuIEtBU0FOIHBvaXNvbnMgdGhlIGFyZWEgdG8gY2F0Y2ggdGhpcy5cblxuSSBkdWcgZGVlcGVyIGludG8gdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBwcm9jZXNzIHdpdGhpbiBgZm9udF9kYXRhX3JvdGF0ZWAuIEl0IGluaXRpYWxpemVzIHRoZSBidWZmZXIgY29tcGxldGVseSB1c2luZyBgbWVtY3B5YCBvciBgbWVtc2V0YCArIGBfX2ZvbnRfZ2x5cGhfcm90YXRlXypgLiBUaGlzIGVuc3VyZWQgdGhlIGJ1ZmZlciBpcyAqYWx3YXlzKiBpbml0aWFsaXplZCwgZWxpbWluYXRpbmcgdGhlIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMuIElmIGByb3RhdGVfZm9udGAgaXMgbm90IGNhbGxlZCwgdGhlbiB0aGUgb2xkIGZvbnQgZGF0YSBwZXJzaXN0cyBpbiB0aGUgbWVtb3J5LlxuXG5JIHZlcmlmaWVkIHRoZSBjb2RlIGFuZCBkaXNjb3ZlcmVkIGEgY3JpdGljYWwgcG9pbnQ6IGBmb250X2RhdGFfcm90YXRlYCAqb25seSogdXBkYXRlcyBgKmJ1ZnNpemVgIHdoZW4gaXQgcmVhbGxvY2F0ZXMuIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgZm9udCBzaHJpbmtzIChlLmcuLCBmcm9tIDUxMiB0byAyNTYgY2hhcmFjdGVycykgYW5kIHRoZSBidWZmZXIgaXMgKm5vdCogcmVhbGxvY2F0ZWQsIGAqYnVmc2l6ZWAgbWFpbnRhaW5zIHRoZSAqbGFyZ2VyKiBzaXplIGZyb20gdGhlIHByZXZpb3VzIGFsbG9jYXRpb24uIFRoZSBjb2RlIHdpbGwgcmV1c2UgdGhlIGV4aXN0aW5nIGJ1ZmZlciwgYW5kIG9ubHkgaW5pdGlhbGl6ZSBhIHNtYWxsZXIgY2h1bmssIHNheSAyNTYgY2hhcmFjdGVycy4gVGhpcyBtZWFucyB0aGF0IGlmIGl0IHN1YnNlcXVlbnRseSBhdHRlbXB0cyB0byByZWFkIGZyb20gdGhlICpzbWFsbGVyKiBmb250LCBzYXkgYGNoYXJjb3VudCA9IDI1NmAsIHRoZSBjb2RlIG1heSBiZSBhYmxlIHRvIHJlYWQgc29tZSBvZiB0aGUgcHJldmlvdXMgY29udGVudCwgd2hpY2ggbWVhbnMgaXQgd2lsbCByZWFkIG9sZCBmb250IGRhdGEsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyByZWluZm9yY2VzIHRoYXQgS0FTQU4gY2F0Y2hlcyB0aGUgT09CIGlzc3Vlcy4gSWYgYSBuZXcgbGFyZ2VyIGZvbnQgaXMgdXNlZCwgYW5kIGl0IGlzIG5vdCByZWFsbG9jYXRlZCwgdGhlbiB0aGUgcmVhZCAqd2lsbCogYmUgT09CLCBidXQgaXMgc3RpbGwgaW5pdGlhbGl6ZWQsIHNvIGl0IGRvZXNuJ3QgY2F1c2UgYW55IHByb2JsZW1zLlxuXG5UaGUga2V5IHRha2Vhd2F5IGlzIHRoYXQsIHdoaWxlIHRoZSBjb2RlIG1pZ2h0IHBvdGVudGlhbGx5IHJlYWQgZnJvbSBhIHNlY3Rpb24gdGhhdCAqd2FzKiBpbml0aWFsaXplZCBieSBhbiAqb2xkZXIqIGZvbnQgKGlmIHRoZSBjdXJyZW50IGZvbnQgaXMgc21hbGxlciksIHRoaXMgd2lsbCBuZXZlciBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIEtBU0FOIGlzIHN1ZmZpY2llbnQgZm9yIGNhdGNoaW5nIE9PQiByZWFkcyBkdWUgdG8gYSBtaXNtYXRjaCBiZXR3ZWVuIGZvbnQgc2l6ZSBhbmQgYnVmZmVyIHNpemUuIFRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMjUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjEwOjI2LjAzMDMxNTE4M1oiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5Mjg0NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9ibGl0dGluZ190eXBlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTY0MT1zdGF0aWMgdm9pZCBmYmNvbl9wcmVwYXJlX2xvZ28oc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyxcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTczMC0jaWZkZWYgQ09ORklHX0ZCX1RJTEVCTElUVElOR1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjczMTpzdGF0aWMgdm9pZCBzZXRfYmxpdHRpbmdfdHlwZShzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvKVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTczMi17XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz03NDU9c3RhdGljIGludCBmYmNvbl9pbnZhbGlkX2NoYXJjb3VudChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdW5zaWduZWQgY2hhcmNvdW50KVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtNzU1LSNlbHNlXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6NzU2OnN0YXRpYyB2b2lkIHNldF9ibGl0dGluZ190eXBlKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8pXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtNzU3LXtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTgyNz1zdGF0aWMgaW50IGNvbjJmYl9hY3F1aXJlX25ld2luZm8oc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyxcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTgzNi1cXHRpZiAodmMpXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6ODM3OlxcdFxcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy04MzgtXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz05MTI9c3RhdGljIGludCBzZXRfY29uMmZiX21hcChpbnQgdW5pdCwgaW50IG5ld2lkeCwgaW50IHVzZXIpXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy05NDItXFx0fSBlbHNlIGlmICh2Yykge1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjk0MzpcXHRcXHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtOTQ0LVxcdH1cXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTEwMTQ9c3RhdGljIGNvbnN0IGNoYXIgKmZiY29uX3N0YXJ0dXAodm9pZClcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTEwNTMtXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MTA1NDpcXHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTA1NS1cXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTEwODg9c3RhdGljIHZvaWQgZmJjb25faW5pdChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGJvb2wgaW5pdClcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTExNzUtXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MTE3NjpcXHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTE3Ny1cXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTEyMzAtXFx0XFx0cGFyLVxcdTAwM2Vyb3RhdGUgPSBGQl9ST1RBVEVfVVI7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MTIzMTpcXHRcXHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTIzMi1cXHR9XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0yMTQzPXN0YXRpYyBib29sIGZiY29uX3N3aXRjaChzdHJ1Y3QgdmNfZGF0YSAqdmMpXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yMjEzLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjIyMTQ6XFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTIyMTUtXFx0cGFyLVxcdTAwM2VjdXJzb3JfcmVzZXQgPSAxO1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjIxOC1cXHRcXHRwYXItXFx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoyMjE5OlxcdFxcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yMjIwLVxcdH1cXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI0MDA9c3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCxcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI0MzAtXFx0XFx0XFx0cGFyLVxcdTAwM2Vyb3RhdGUgPSBGQl9ST1RBVEVfVVI7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjQzMTpcXHRcXHRcXHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQzMi1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNDcxLVxcdFxcdFxcdHBhci1cXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI0NzI6XFx0XFx0XFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI0NzMtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MjY0ND1zdGF0aWMgdm9pZCBmYmNvbl9tb2RlY2hhbmdlZChzdHJ1Y3QgZmJfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI2NjgtXFx0cCA9IFxcdTAwMjZmYl9kaXNwbGF5W3ZjLVxcdTAwM2V2Y19udW1dO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI2Njk6XFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI2NzAtXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNjc5LVxcdFxcdHBhci1cXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI2ODA6XFx0XFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI2ODEtXFx0fVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MjcwND1zdGF0aWMgdm9pZCBmYmNvbl9zZXRfYWxsX3ZjcyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI3MjgtXFx0XFx0cCA9IFxcdTAwMjZmYl9kaXNwbGF5W3ZjLVxcdTAwM2V2Y19udW1dO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI3Mjk6XFx0XFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI3MzAtXFx0XFx0dmFyX3RvX2Rpc3BsYXkocCwgXFx1MDAyNmluZm8tXFx1MDAzZXZhciwgaW5mbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjEwOjI2LjEzOTYwNTA1M1oiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTgwMzIxOTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCdWcqKlxuXG5Pa2F5LCBzbyBoZXJlJ3Mgd2hhdCdzIGhhcHBlbmluZy4gVGhlIGZ1bmN0aW9uIGBzZXRfYmxpdHRpbmdfdHlwZWAgaXMganVzdCBzZXR0aW5nIHVwIHRoZSByZW5kZXJpbmcgZnVuY3Rpb24gcG9pbnRlcnMg4oCTIHRoaW5ncyBsaWtlIGB2Yy1cdTAwM2V2Y19zdy1cdTAwM2Vjb25fcHV0Y2AgYW5kIHNvIG9uLiBObyBtZW1vcnkgYWxsb2NhdGlvbiwgbm8gY29weWluZyB0byB1c2VyIHNwYWNlLCBub3RoaW5nIGxpa2UgdGhhdC4gVGhlIGhlYXJ0IG9mIHRoZSBwcm9ibGVtIGlzIGEgc3RyYWlnaHRmb3J3YXJkIG91dC1vZi1ib3VuZHMgKE9PQikgcmVhZCBvbiB0aGUgaGVhcCB3aGVuIHRleHQgaXMgcmVuZGVyZWQgdG8gdGhlIGZyYW1lYnVmZmVyLiBLQVNBTiBzaG91bGQgYmUgYWJsZSB0byBjYXRjaCB0aGlzIGVhc2lseS5cblxuSGVyZSdzIHRoZSBicmVha2Rvd24sIGFzIEkgc2VlIGl0OlxuXG4xLiAgVGhlIHBhdGNoIGlzIGludHJvZHVjaW5nIGNhbGxzIHRvIGByb3RhdGVfZm9udGAgd2l0aGluIGBmYmNvbl9kb19zZXRfZm9udGAgd2hlbiBgdmNfaGlfZm9udF9tYXNrYCBnZXRzIG1vZGlmaWVkLlxuMi4gIGB2Y19oaV9mb250X21hc2tgIGNoYW5nZXMgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGZvbnQncyBjaGFyYWN0ZXIgY291bnQgc3dpdGNoZXMgYmV0d2VlbiAyNTYgYW5kIDUxMiBjaGFyYWN0ZXJzLlxuMy4gIFRoZSBjcml0aWNhbCBvdmVyc2lnaHQgaXMgdGhhdCBpZiBgcm90YXRlX2ZvbnRgIGlzbid0IGNhbGxlZCwgYHBhci1cdTAwM2Vyb3RhdGVkLmJ1ZmAgZG9lc24ndCBnZXQgcmVhbGxvY2F0ZWQgdG8gdGhlIHNpemUgcmVxdWlyZWQgZm9yIHRoZSAqbmV3KiBmb250LCB3aGljaCBpcyA1MTIgY2hhcmFjdGVycy5cbjQuICBDb25zZXF1ZW50bHksIHdoZW4gYGZiY29uYCBnb2VzIHRvIHJlbmRlciB0ZXh0LCBpdCdzIHVzaW5nIHRoZSAqbmV3KiBjaGFyYWN0ZXIgY291bnQgKDUxMikgdG8gaW5kZXggaW50byBgcGFyLVx1MDAzZXJvdGF0ZWQuYnVmYCwgd2hpY2ggd2FzIGluaXRpYWxseSBhbGxvY2F0ZWQgZm9yIHRoZSAqb2xkKiBjb3VudCAoMjU2KS5cbjUuICBUaGlzIGlzIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb24gdGhlIGhlYXAuIFdlJ3JlIGFjY2Vzc2luZyBtZW1vcnkgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLlxuNi4gIFRoYXQncyBleGFjdGx5IHdoYXQgS0FTQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2gg4oCTIGhlYXAgb3V0LW9mLWJvdW5kcyByZWFkcy5cbjcuICBDcnVjaWFsbHksIHRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBhbnkgaW5mb3JtYXRpb24gbGVhayB0byB1c2VyIHNwYWNlIGludm9sdmVkIGluIHRoaXMuXG44LiAgU28sIEtNU0FOIGlzbid0IHJlbGV2YW50IGhlcmUuIFRoZSBwcm9ibGVtIGlzIGEgc2ltcGxlIE9PQiByZWFkIHRoYXQgS0FTQU4gc2hvdWxkIGhhbmRsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MjMsIk91dHB1dFRva2VucyI6MTc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjEwOjM0LjExOTkzMDYxOVoiLCJTZXEiOjYyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGZiY29uX2RvX3NldF9mb250YCB3aGVyZSBjaGFuZ2luZyB0aGUgZm9udCBjaGFyYWN0ZXIgY291bnQgKGUuZy4sIGZyb20gMjU2IHRvIDUxMikgd2l0aG91dCB1cGRhdGluZyB0aGUgcm90YXRlZCBmb250IGJ1ZmZlciAoYHBhci1cXHUwMDNlcm90YXRlZC5idWZgKSBsZWFkcyB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQuIFdoZW4gYGZiY29uYCByZW5kZXJzIHRleHQsIGl0IHVzZXMgdGhlIG5ldyBjaGFyYWN0ZXIgY291bnQgdG8gaW5kZXggaW50byB0aGUgb2xkLCBzbWFsbGVyIGJ1ZmZlciwgcmVzdWx0aW5nIGluIGEgaGVhcCBPT0IgcmVhZC4gVGhpcyBpcyBhIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBpc3N1ZSB0aGF0IGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWsgdG8gdXNlciBzcGFjZSBpbnZvbHZlZCwgYXMgdGhlIGJ1ZmZlciBpcyBmdWxseSBpbml0aWFsaXplZCB1cCB0byBpdHMgYWxsb2NhdGVkIHNpemUuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgZmJjb25fZG9fc2V0X2ZvbnRgIHdoZXJlIGNoYW5naW5nIHRoZSBmb250IGNoYXJhY3RlciBjb3VudCAoZS5nLiwgZnJvbSAyNTYgdG8gNTEyKSB3aXRob3V0IHVwZGF0aW5nIHRoZSByb3RhdGVkIGZvbnQgYnVmZmVyIChgcGFyLVxcdTAwM2Vyb3RhdGVkLmJ1ZmApIGxlYWRzIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gV2hlbiBgZmJjb25gIHJlbmRlcnMgdGV4dCwgaXQgdXNlcyB0aGUgbmV3IGNoYXJhY3RlciBjb3VudCB0byBpbmRleCBpbnRvIHRoZSBvbGQsIHNtYWxsZXIgYnVmZmVyLCByZXN1bHRpbmcgaW4gYSBoZWFwIE9PQiByZWFkLiBUaGlzIGlzIGEgY2xhc3NpYyBtZW1vcnkgc2FmZXR5IGlzc3VlIHRoYXQgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhayB0byB1c2VyIHNwYWNlIGludm9sdmVkLCBhcyB0aGUgYnVmZmVyIGlzIGZ1bGx5IGluaXRpYWxpemVkIHVwIHRvIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowtzh77[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 02:04:13 +0000 UTC FinishedAt: 2026-08-17 02:10:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FB", "FB_VIRTUAL", "FRAMEBUFFER_CONSOLE", "FRAMEBUFFER_CONSOLE_ROTATION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FB", "FB_VIRTUAL", "FRAMEBUFFER_CONSOLE", "FRAMEBUFFER_CONSOLE_ROTATION" ], "series_id": "02ee36b6-6ef1-47d7-9748-27945a69a3d3" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "fbcon_set_font", "fbcon_set_def_font" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZCJiMzNDssCiAgICAmIzM0O0ZCX1ZJUlRVQUwmIzM0OywKICAgICYjMzQ7RlJBTUVCVUZGRVJfQ09OU09MRSYjMzQ7LAogICAgJiMzNDtGUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmJjb25fc2V0X2ZvbnQmIzM0OywKICAgICYjMzQ7ZmJjb25fc2V0X2RlZl9mb250JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGZiY29uX2RvX3NldF9mb250YCB3aGVyZSBjaGFuZ2luZyB0aGUgZm9udCBjaGFyYWN0ZXIgY291bnQgKGUuZy4sIGZyb20gMjU2IHRvIDUxMikgd2l0aG91dCB1cGRhdGluZyB0aGUgcm90YXRlZCBmb250IGJ1ZmZlciAoYHBhci1cdTAwM2Vyb3RhdGVkLmJ1ZmApIGxlYWRzIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gV2hlbiBgZmJjb25gIHJlbmRlcnMgdGV4dCwgaXQgdXNlcyB0aGUgbmV3IGNoYXJhY3RlciBjb3VudCB0byBpbmRleCBpbnRvIHRoZSBvbGQsIHNtYWxsZXIgYnVmZmVyLCByZXN1bHRpbmcgaW4gYSBoZWFwIE9PQiByZWFkLiBUaGlzIGlzIGEgY2xhc3NpYyBtZW1vcnkgc2FmZXR5IGlzc3VlIHRoYXQgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhayB0byB1c2VyIHNwYWNlIGludm9sdmVkLCBhcyB0aGUgYnVmZmVyIGlzIGZ1bGx5IGluaXRpYWxpemVkIHVwIHRvIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBmcmFtZWJ1ZmZlciBjb25zb2xlIGZvbnQgc2V0dGluZyBsb2dpYyAoZmJjb25fZG9fc2V0X2ZvbnQpIHRvIGhhbmRsZSBmb250IHJvdGF0aW9uIHdoZW4gdGhlIGNvbnNvbGUgaXMgdmlzaWJsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGNvcmUgc3Vic3lzdGVtIChmYmNvbikgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBpb2N0bHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0ZDU4OGUyMDJlNDNmODNhN2U4OTRmNzcwNzQwYjg4YzhmMzYyNjhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDI6MDc6NDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uY1xuaW5kZXggMjNiM2M1MzZkNTNkMS4uYzc0YTQ5MDViOGUyYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uY1xuQEAgLTI0MjUsNiAmIzQzOzI0MjUsMTMgQEAgc3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCxcbiBcdGVsc2UgaWYgKCF2Yy1cdTAwM2V2Y19oaV9mb250X21hc2sgXHUwMDI2XHUwMDI2IGNoYXJjb3VudCA9PSA1MTIpXG4gXHRcdHNldF92Y19oaV9mb250KHZjLCB0cnVlKTtcbiBcbiYjNDM7XHRpZiAoY29uX2lzX3Zpc2libGUodmMpKSB7XG4mIzQzO1x0XHRpZiAocGFyLVx1MDAzZWJpdG9wcy1cdTAwM2Vyb3RhdGVfZm9udCBcdTAwMjZcdTAwMjYgcGFyLVx1MDAzZWJpdG9wcy1cdTAwM2Vyb3RhdGVfZm9udChpbmZvLCB2YykpIHtcbiYjNDM7XHRcdFx0cGFyLVx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcbiYjNDM7XHRcdFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAocmVzaXplKSB7XG4gXHRcdGludCBjb2xzLCByb3dzO1xuIFxuQEAgLTI0NTksNiAmIzQzOzI0NjYsMTMgQEAgc3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCxcbiBcdGVsc2UgaWYgKCFvbGRfaGlfZm9udF9tYXNrIFx1MDAyNlx1MDAyNiB2Yy1cdTAwM2V2Y19oaV9mb250X21hc2spXG4gXHRcdHNldF92Y19oaV9mb250KHZjLCBmYWxzZSk7XG4gXG4mIzQzO1x0aWYgKGNvbl9pc192aXNpYmxlKHZjKSkge1xuJiM0MztcdFx0aWYgKHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQgXHUwMDI2XHUwMDI2IHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQoaW5mbywgdmMpKSB7XG4mIzQzO1x0XHRcdHBhci1cdTAwM2Vyb3RhdGUgPSBGQl9ST1RBVEVfVVI7XG4mIzQzO1x0XHRcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0Zm9udF9kYXRhX3B1dChkYXRhKTtcbiBcbiBcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZCJiMzNDssCiAgICAmIzM0O0ZCX1ZJUlRVQUwmIzM0OywKICAgICYjMzQ7RlJBTUVCVUZGRVJfQ09OU09MRSYjMzQ7LAogICAgJiMzNDtGUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmJjb25fc2V0X2ZvbnQmIzM0OywKICAgICYjMzQ7ZmJjb25fc2V0X2RlZl9mb250JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGZyYW1lYnVmZmVyIGNvbnNvbGUgZm9udCBzZXR0aW5nIGxvZ2ljIChmYmNvbl9kb19zZXRfZm9udCkgdG8gaGFuZGxlIGZvbnQgcm90YXRpb24gd2hlbiB0aGUgY29uc29sZSBpcyB2aXNpYmxlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgY29yZSBzdWJzeXN0ZW0gKGZiY29uKSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXIgc3BhY2UgdmlhIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRkNTg4ZTIwMmU0M2Y4M2E3ZTg5NGY3NzA3NDBiODhjOGYzNjI2OGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAwMjowNzo0NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jIGIvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMKaW5kZXggMjNiM2M1MzZkNTNkMS4uYzc0YTQ5MDViOGUyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMKQEAgLTI0MjUsNiAmIzQzOzI0MjUsMTMgQEAgc3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCwKIAllbHNlIGlmICghdmMtJmd0O3ZjX2hpX2ZvbnRfbWFzayAmYW1wOyZhbXA7IGNoYXJjb3VudCA9PSA1MTIpCiAJCXNldF92Y19oaV9mb250KHZjLCB0cnVlKTsKIAomIzQzOwlpZiAoY29uX2lzX3Zpc2libGUodmMpKSB7CiYjNDM7CQlpZiAocGFyLSZndDtiaXRvcHMtJmd0O3JvdGF0ZV9mb250ICZhbXA7JmFtcDsgcGFyLSZndDtiaXRvcHMtJmd0O3JvdGF0ZV9mb250KGluZm8sIHZjKSkgewomIzQzOwkJCXBhci0mZ3Q7cm90YXRlID0gRkJfUk9UQVRFX1VSOwomIzQzOwkJCXNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCWlmIChyZXNpemUpIHsKIAkJaW50IGNvbHMsIHJvd3M7CiAKQEAgLTI0NTksNiAmIzQzOzI0NjYsMTMgQEAgc3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCwKIAllbHNlIGlmICghb2xkX2hpX2ZvbnRfbWFzayAmYW1wOyZhbXA7IHZjLSZndDt2Y19oaV9mb250X21hc2spCiAJCXNldF92Y19oaV9mb250KHZjLCBmYWxzZSk7CiAKJiM0MzsJaWYgKGNvbl9pc192aXNpYmxlKHZjKSkgewomIzQzOwkJaWYgKHBhci0mZ3Q7Yml0b3BzLSZndDtyb3RhdGVfZm9udCAmYW1wOyZhbXA7IHBhci0mZ3Q7Yml0b3BzLSZndDtyb3RhdGVfZm9udChpbmZvLCB2YykpIHsKJiM0MzsJCQlwYXItJmd0O3JvdGF0ZSA9IEZCX1JPVEFURV9VUjsKJiM0MzsJCQlzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlmb250X2RhdGFfcHV0KGRhdGEpOwogCiAJcmV0dXJuIHJldDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGZiY29uLmMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGVkIGBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uY2AuIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZXMgYXJlIHdpdGhpbiB0aGUgYGZiY29uX2RvX3NldF9mb250YCBmdW5jdGlvbi4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBhZGRlZCB0aGlzIGNvbmRpdGlvbmFsIGNoZWNrOgoKYGBgYwoJaWYgKGNvbl9pc192aXNpYmxlKHZjKSkgewoJCWlmIChwYXItJmd0O2JpdG9wcy0mZ3Q7cm90YXRlX2ZvbnQgJmFtcDsmYW1wOyBwYXItJmd0O2JpdG9wcy0mZ3Q7cm90YXRlX2ZvbnQoaW5mbywgdmMpKSB7CgkJCXBhci0mZ3Q7cm90YXRlID0gRkJfUk9UQVRFX1VSOwoJCQlzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7CgkJfQoJfQpgYGAKCi4uLmFuZCB0aGlzIHNuaXBwZXQgaXMgcHJlc2VudCBpbiB0d28gbG9jYXRpb25zIGluc2lkZSBvZiBgZmJjb25fZG9fc2V0X2ZvbnRgLiBOb3csIGZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGlzIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gaG93IHRoZSBmcmFtZWJ1ZmZlciBjb25zb2xlIGhhbmRsZXMgZm9udCBzZXR0aW5nLiBHaXZlbiB0aGF0IGBmYmNvbl9kb19zZXRfZm9udGAgaXMgdGhlIHRhcmdldCwgYW5kIGBmYmNvbi5jYCBoYXMgYmVlbiBkaXJlY3RseSBlZGl0ZWQsIHRoaXMgaXMgZGVmaW5pdGVseSBhIHJlYWNoYWJsZSBjb2RlIHBhdGguIEdpdmVuIGl0cyByZWxldmFuY2UgdG8gZm9udCBzZXR0aW5ncywgaXQmIzM5O3MgdmVyeSBsaWtlbHkgdG8gYmUgd29ydGggZnV6emluZywgYW5kIEkgc2hvdWxkIHNlZSBpZiBJIGNhbiBmaW5kIHRoZSByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYGZiY29uLmNgIGFuZCBob3cgaXQmIzM5O3MgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdHJpZ2dlcnMgdGhpcyBgcm90YXRlX2ZvbnRgIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGZpcnN0IHBsYWNlLCBidXQgdGhlIGNvbmRpdGlvbmFsIGNoZWNrLCBhbmQgdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGJsaXR0aW5nIHR5cGVzLCBzaG91bGQgYmUgZ29vZCBwbGFjZXMgdG8gc3RhcnQgdGhlIGZ1enppbmcgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYmNvbi5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aWRlby9mYmRldi9jb3JlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9NYWtlZmlsZT0xNT1pZmVxICgkKENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFKSx5KVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL01ha2VmaWxlOjE2OmZiLXlcdFx0XHRcdCAgJiM0Mzs9IGZiY29uLm8gYml0YmxpdC5vIHNvZnRjdXJzb3Iub1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL01ha2VmaWxlLTE3LWlmZXEgKCQoQ09ORklHX0ZCX1RJTEVCTElUVElORykseSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTA2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBpczoKCioqRXhhbWluaW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgY29uZmlnIGFuZCBzZWUgYEZSQU1FQlVGRkVSX0NPTlNPTEVgIGlzIHNldC4gTXkgbmV4dCBzdGVwIGlzIGF1dG9tYXRpYyDigJMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBpdGVtJiMzOTtzIHBsYWNlIGluIHRoZSBicm9hZGVyIGNvbmZpZ3VyYXRpb24uIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBqdXN0IGtub3dpbmcgdGhlIHN0YXRlIG9mIG9uZSBjb25maWcgb3B0aW9uIGlzIHJhcmVseSBlbm91Z2ggdG8gZHJhdyBhbnkgdmFsaWQgY29uY2x1c2lvbnMuIFdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSByZWx5IG9uIGl0PyBBcmUgdGhlcmUgYW55IG9wdGlvbnMgdGhpcyBvbmUgZGVwZW5kcyBvbj8gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzLCBvciBsYWNrIHRoZXJlb2YsIG9mIGBGUkFNRUJVRkZFUl9DT05TT0xFYCB3aWxsIGRldGVybWluZSB3aGF0IG90aGVyIGl0ZW1zIEkgbWF5IGhhdmUgdG8gY29uc2lkZXIgZHVyaW5nIHRoZSBuZXh0IHBoYXNlcyBvZiBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRlJBTUVCVUZGRVJfQ09OU09MRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTE1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgRnJhbWVidWZmZXIgQ29uc29sZSBEcml2ZXJzKioKClJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byBmaW5kIHRoZSByZWxldmFudCBjb2RlLCBhbmQgYmFzZWQgb24gZXhwZXJpZW5jZSwgYEZSQU1FQlVGRkVSX0NPTlNPTEVgIGlzIHRoZSBrZXl3b3JkIEkmIzM5O20gYWZ0ZXIuIE5vdywgd2hlcmUgd291bGQgdGhlIGRyaXZlcnMgZm9yIHRoYXQgbGlrZWx5IHJlc2lkZT8gVGhlIGxvZ2ljYWwgcGxhY2UgaXMgdW5kZXIgdGhlIGBkcml2ZXJzL3ZpZGVvL2AgZGlyZWN0b3J5IGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGF0JiMzOTtzIHRoZSBicm9hZCBzdHJva2VzIHZpZGVvIGRyaXZlciBzZWN0aW9uLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIHN0YXJ0IGxvb2tpbmcuIENvbnNpZGVyaW5nIGhvdyBjb25zb2xlIGRyaXZlcnMgaW50ZXJhY3Qgd2l0aCB0aGUgZnJhbWVidWZmZXIsIEkmIzM5O2xsIGFsc28gY2hlY2sgYGRyaXZlcnMvdmlkZW8vY29uc29sZS9gLiBJdCYjMzk7cyBhIGJpdCBtb3JlIHNwZWNpZmljIGFuZCBtaWdodCBjb250YWluIG1vcmUgZm9jdXNlZCBpbXBsZW1lbnRhdGlvbnMsIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCByZWxldmFudCBoZWFkZXIgZmlsZXMgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTtsbCBzZWFyY2ggYm90aCBhcmVhcyBtZXRob2RpY2FsbHkuIFRoYXQmIzM5O3MgdGhlIHBsYW4uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSB0dXJuIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGUkFNRUJVRkZFUl9DT05TT0xFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aWRlby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWc9NDc9Y29uZmlnIERVTU1ZX0NPTlNPTEVfUk9XU1xuLS1cbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnLTU3LVxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWc6NTg6Y29uZmlnIEZSQU1FQlVGRkVSX0NPTlNPTEVcbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtGcmFtZWJ1ZmZlciBDb25zb2xlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZy02Ny1cbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnOjY4OmNvbmZpZyBGUkFNRUJVRkZFUl9DT05TT0xFX0xFR0FDWV9BQ0NFTEVSQVRJT05cbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtFbmFibGUgbGVnYWN5IGZiY29uIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBjb2RlXCYjMzQ7XG4tLVxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWctODctXG5kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZzo4ODpjb25maWcgRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWVxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWctODktICAgICAgIGJvb2wgXCYjMzQ7TWFwIHRoZSBjb25zb2xlIHRvIHRoZSBwcmltYXJ5IGRpc3BsYXkgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWctMTAzLVxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWc6MTA0OmNvbmZpZyBGUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OXG5kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZy0xMDUtICAgICAgIGJvb2wgXCYjMzQ7RnJhbWVidWZmZXIgQ29uc29sZSBSb3RhdGlvblwmIzM0O1xuLS1cbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnLTExMy1cbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnOjExNDpjb25maWcgRlJBTUVCVUZGRVJfQ09OU09MRV9ERUZFUlJFRF9UQUtFT1ZFUlxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWctMTE1LVx0Ym9vbCBcJiMzNDtGcmFtZWJ1ZmZlciBDb25zb2xlIERlZmVycmVkIFRha2VvdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY5NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25zb2xlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlIHZpZGVvIGNvbnNvbGUgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhpcyBrZXJuZWwuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBgZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbiBhcm91bmQgbGluZSA1OC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGJhc2ljIGZlYXR1cmUgZGVmaW5pdGlvbnMgaW4gdGhpcyBzZWN0aW9uLCBsaWtlbHkgcmVsYXRpbmcgdG8gdGhlIGNvcmUgY29uc29sZSBkcml2ZXIgaXRzZWxmLCBtYXliZSBvcHRpb25zIGZvciBzZWxlY3RpbmcgZGVmYXVsdCBtb2RlcyBvciBoYW5kbGluZyBkaWZmZXJlbnQgdHlwZXMgb2YgaGFyZHdhcmUuIEnigJltIGd1ZXNzaW5nIGl04oCZcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZ2V0IGFuIG92ZXJ2aWV3IG9mIHdoYXTigJlzIGF2YWlsYWJsZSBiZWZvcmUgbG9va2luZyBhdCBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBmb2xsb3cuIEnigJltIHRoaW5raW5nIEkgY2FuIGZpbmQgc29tZSBvZiB0aGUgY29yZSB2YXJpYWJsZXMgb3Igb3B0aW9ucyBiZWluZyBzZXQgaGVyZSB0aGF0IHdpbGwgcHJvYmFibHkgYmUgcmVsZXZhbnQgdG8gb3RoZXIgYXNwZWN0cyBvZiB0aGUgdmlkZW8gc3RhY2sgYXMgd2VsbC4gSXQgY291bGQgYmUgdXNlZnVsIGZvciBmaW5kaW5nIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTA6XHRcdGRlZmF1bHQgNjQgaWYgUEFSSVNDXG4gIDUxOlx0XHRkZWZhdWx0IDMwIGlmIEFSTVxuICA1MjpcdFx0ZGVmYXVsdCAyNVxuICA1MzpcdFx0aGVscFxuICA1NDpcdFx0ICBPbiBQQS1SSVNDLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyA2NCwgd2hpY2ggc2hvdWxkIGZpdCBhIDEyODB4MTAyNFxuICA1NTpcdFx0ICBtb25pdG9yLlxuICA1NjpcdFx0ICBTZWxlY3QgMjUgaWYgeW91IHVzZSBhIDY0MHg0ODAgcmVzb2x1dGlvbiBieSBkZWZhdWx0LlxuICA1NzpcdFxuICA1ODpcdGNvbmZpZyBGUkFNRUJVRkZFUl9DT05TT0xFXG4gIDU5Olx0XHRib29sIFwmIzM0O0ZyYW1lYnVmZmVyIENvbnNvbGUgc3VwcG9ydFwmIzM0O1xuICA2MDpcdFx0ZGVwZW5kcyBvbiBGQl9DT1JFIFx1MDAyNlx1MDAyNiAhVU1MXG4gIDYxOlx0XHRkZWZhdWx0IERSTV9GQkRFVl9FTVVMQVRJT05cbiAgNjI6XHRcdHNlbGVjdCBWVF9IV19DT05TT0xFX0JJTkRJTkdcbiAgNjM6XHRcdHNlbGVjdCBDUkMzMlxuICA2NDpcdFx0c2VsZWN0IEZPTlRfU1VQUE9SVFxuICA2NTpcdFx0aGVscFxuICA2NjpcdFx0ICBMb3ctbGV2ZWwgZnJhbWVidWZmZXItYmFzZWQgY29uc29sZSBkcml2ZXIuXG4gIDY3Olx0XG4gIDY4Olx0Y29uZmlnIEZSQU1FQlVGRkVSX0NPTlNPTEVfTEVHQUNZX0FDQ0VMRVJBVElPTlxuICA2OTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgbGVnYWN5IGZiY29uIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBjb2RlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMjIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBGcmFtZWJ1ZmZlciBDb25zb2xlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBGUkFNRUJVRkZFUl9DT05TT0xFYCBhbmQgdGhlIGJ1aWxkIHN5c3RlbSYjMzk7cyBsb2dpYy4gSXQmIzM5O3MgdGVsbGluZyBtZSB0aGF0IHRoaXMgcGFydGljdWxhciBjb25zb2xlIG9wdGlvbiBoaW5nZXMgZGlyZWN0bHkgb24gdGhlIHByZXNlbmNlIG9mIGBGQl9DT1JFYCwgYnV0IGl0IGFsc28gKmNhbiYjMzk7dCogYmUgZW5hYmxlZCB3aGVuIHJ1bm5pbmcgdW5kZXIgVU1MLiBIbW0sIHRoYXQmIzM5O3Mgbm90IHN1cnByaXNpbmcsIGFzIFVNTCBvZnRlbiBkb2VzbiYjMzk7dCBoYXZlIGEgZnJhbWVidWZmZXIgYXZhaWxhYmxlLiBOb3csIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IGBGQl9DT1JFYCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGRlZmluZXMgdGhlIGNvcmUgZnJhbWVidWZmZXIgc3VwcG9ydCwgc2luY2UgdGhhdCYjMzk7cyBhIHByZXJlcXVpc2l0ZSBmb3IgYEZSQU1FQlVGRkVSX0NPTlNPTEVgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBpbXBsaWVzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGQl9DT1JFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aWRlby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aWRlby9mYmRldi9jb3JlL0tjb25maWctNS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9LY29uZmlnOjY6Y29uZmlnIEZCX0NPUkVcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9LY29uZmlnLTctXHRzZWxlY3QgVklERU9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ4OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB0aGUgRnJhbWVidWZmZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgZnJhbWVidWZmZXIgY29yZSYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBoZWFkaW5nIHRvIGBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvS2NvbmZpZ2AgYXJvdW5kIGxpbmUgNi4gSSYjMzk7bSBhc3N1bWluZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBwcmltYXJ5IEZCREVWIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gc2VlIHRoZSBtYWluIGBDT05GSUdfRkJgIG9wdGlvbiBkZWNsYXJlZCB0aGVyZSwgYWxvbmcgd2l0aCBzb21lIG9mIHRoZSBtb3JlIGZ1bmRhbWVudGFsIGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdHMuIERlcGVuZGluZyBvbiB3aGF0IEkgZmluZCwgdGhpcyB3aWxsIGluZm9ybSB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIGhvdyB0aGUgRkJERVYgc3Vic3lzdGVtIGlzIGJ1aWx0IGFuZCBjb25maWd1cmVkIGludG8gdGhlIGtlcm5lbC4gSXTigJlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgZnJhbWVidWZmZXJzIGFyZSBlbmFibGVkIGFuZCwgYnkgZXh0ZW5zaW9uLCBob3cgdGhlIHJlc3Qgb2YgdGhlIGdyYXBoaWNzIHN0YWNrIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgZmJkZXYgY29yZSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBGQl9DT1JFXG4gICA3Olx0XHRzZWxlY3QgVklERU9cbiAgIDg6XHRcdHRyaXN0YXRlXG4gICA5Olx0XG4gIDEwOlx0Y29uZmlnIEZCX05PVElGWVxuICAxMTpcdFx0Ym9vbFxuICAxMjpcdFxuICAxMzpcdGNvbmZpZyBGQl9ERVZJQ0VcbiAgMTQ6XHRcdGJvb2wgXCYjMzQ7UHJvdmlkZSBsZWdhY3kgL2Rldi9mYiogZGV2aWNlXCYjMzQ7XG4gIDE1Olx0XHRkZXBlbmRzIG9uIEZCX0NPUkVcbiAgMTY6XHRcdGRlZmF1bHQgRkJcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0aGUgbGVnYWN5IC9kZXYvZmIqIGRldmljZSBmaWxlIGFuZFxuICAxOTpcdFx0ICBpbnRlcmZhY2VzIHdpdGhpbiBzeXNmcyBhbmQgcHJvY2ZzLiBJdCBpcyBvbmx5IHJlcXVpcmVkIGlmIHlvdVxuICAyMDpcdFx0ICBoYXZlIHVzZXJzcGFjZSBwcm9ncmFtcyB0aGF0IGRlcGVuZCBvbiBmYmRldiBmb3IgZ3JhcGhpY3Mgb3V0cHV0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTY2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRm9udCBSb3RhdGlvbiBMb2dpYyBpbiB0aGUgRnJhbWVidWZmZXIgQ29uc29sZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBiYWNrIGludG8gdGhpcyBmcmFtZWJ1ZmZlciBmb250IHJvdGF0aW9uIGlzc3VlLiBSZW1pbmRpbmcgbXlzZWxmIHRoYXQgYEZSQU1FQlVGRkVSX0NPTlNPTEVgIGFuZCBgRkJfQ09SRWAgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgaW4gcGxheSBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIG1vcmUgZGVlcGx5LgoKTGV0JiMzOTtzIHJlLWV4YW1pbmUgdGhhdCBjb2RlIHNuaXBwZXQuIFJpZ2h0LCBpdCYjMzk7cyBpbnNpZGUgYGZiY29uX2RvX3NldF9mb250YC4gU3BlY2lmaWNhbGx5LCBpdCBjaGVja3MgaWYgdGhlIHZpcnR1YWwgY29uc29sZSAoYHZjYCkgaXMgdmlzaWJsZS4gSWYgaXQgaXMsIGFuZCBpZiB0aGUgZnJhbWVidWZmZXImIzM5O3MgYml0IG9wZXJhdGlvbnMgaGF2ZSBhIGByb3RhdGVfZm9udGAgZnVuY3Rpb24gZGVmaW5lZCAqYW5kKiB0aGF0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGNhbGxlZCB3aXRoIHRoZSB2aWRlbyBpbmZvcm1hdGlvbiwgdGhlbiB3ZSBzZXQgdGhlIGBwYXItJmd0O3JvdGF0ZWAgZmxhZyB0byBgRkJfUk9UQVRFX1VSYCBhbmQgdXBkYXRlIHRoZSBibGl0dGluZyB0eXBlLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgY29uZmlybSB0aGUgc2NvcGUgb2YgYGZiY29uX2RvX3NldF9mb250YC4gR29vZCwgaXQgKmlzKiBhIHN0YXRpYyBmdW5jdGlvbjogYHN0YXRpYyBpbnQgZmJjb25fZG9fc2V0X2ZvbnQoLi4uKWAuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gV2hvJiMzOTtzIGNhbGxpbmcgdGhpcyBgZmJjb25fZG9fc2V0X2ZvbnRgPyBJIGhhdmUgdG8gdHJhY2UgYmFjayB0aGUgY2FsbGVycyB0byBnZXQgYSBmdWxsIHBpY3R1cmUgb2YgaG93IHRoaXMgZm9udCByb3RhdGlvbiBtZWNoYW5pc20gaXMgYWN0dWFsbHkgdHJpZ2dlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYmNvbl9kb19zZXRfZm9udCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTIzNDA9c3RhdGljIHZvaWQgc2V0X3ZjX2hpX2ZvbnQoc3RydWN0IHZjX2RhdGEgKnZjLCBib29sIHNldClcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yMzk5LVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjQwMDpzdGF0aWMgaW50IGZiY29uX2RvX3NldF9mb250KHN0cnVjdCB2Y19kYXRhICp2YywgaW50IHcsIGludCBoLCBpbnQgY2hhcmNvdW50LFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQwMS1cdFx0XHQgICAgIGZvbnRfZGF0YV90ICpkYXRhKVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI0ODY9c3RhdGljIGludCBmYmNvbl9zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGNvbnN0IHN0cnVjdCBjb25zb2xlX2ZvbnQgKmZvbnQsXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjUzMS1cdH1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI1MzI6XHRyZXQgPSBmYmNvbl9kb19zZXRfZm9udCh2YywgZm9udC1cdTAwM2V3aWR0aCwgZm9udC1cdTAwM2VoZWlnaHQsIGNoYXJjb3VudCwgbmV3X2RhdGEpO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjUzMy1cdGZvbnRfZGF0YV9wdXQobmV3X2RhdGEpO1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI1Mzg9c3RhdGljIGludCBmYmNvbl9zZXRfZGVmX2ZvbnQoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgY29uc29sZV9mb250ICpmb250LFxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI1NTEtXHRmb250LVx1MDAzZWhlaWdodCA9IGYtXHUwMDNlaGVpZ2h0O1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjU1MjpcdHJldHVybiBmYmNvbl9kb19zZXRfZm9udCh2YywgZi1cdTAwM2V3aWR0aCwgZi1cdTAwM2VoZWlnaHQsIGYtXHUwMDNlY2hhcmNvdW50LCBmLVx1MDAzZWRhdGEpO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjU1My19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MDEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCB0aGlzIGFyZWE6CgoqKkNoZWNraW5nIEZvbnQgSGFuZGxpbmcgaW4gdGhlIEtlcm5lbCoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBmYmNvbl9zZXRfZm9udGAgYW5kIGBmYmNvbl9zZXRfZGVmX2ZvbnRgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBzZXR0aW5nIHRoZSBmb250IGZvciB0aGUgZnJhbWVidWZmZXIgY29uc29sZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSB0aGV5IGFjdHVhbGx5ICpleHBvcnRlZCogc3ltYm9scz8gT3IgYXJlIHRoZXkgdHVja2VkIGF3YXksIG1heWJlIHBhcnQgb2Ygc29tZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBmcmFtZWJ1ZmZlciBkcml2ZXI/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGVpciB2aXNpYmlsaXR5LiBLbm93aW5nIHRoaXMgd2lsbCBpbW1lZGlhdGVseSBpbmZvcm0gaG93IEkmIzM5O2QgYXBwcm9hY2ggdXNpbmcgb3IgbW9kaWZ5aW5nIHRoZW0sIGFuZCB3aGV0aGVyIEkgY2FuIGRpcmVjdGx5IGNhbGwgdGhlbSBvciBuZWVkIHRvIHdvcmsgdGhyb3VnaCBzb21lIG90aGVyIG1lY2hhbmlzbS4gSXQgYWxzbyB0ZWxscyBtZSBhYm91dCB0aGUgZGVzaWduIGNob2ljZXMgdGhlIGRldmVsb3BlciBtYWRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYmNvbl9zZXRfZm9udCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI0MDA9c3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCxcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNDg1LVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjQ4NjpzdGF0aWMgaW50IGZiY29uX3NldF9mb250KHN0cnVjdCB2Y19kYXRhICp2YywgY29uc3Qgc3RydWN0IGNvbnNvbGVfZm9udCAqZm9udCxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI0ODctXHRcdFx0ICB1bnNpZ25lZCBpbnQgdnBpdGNoLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MzE3NT1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN3IGZiX2NvbiA9IHtcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0zMTg1LVx0LmNvbl9ibGFuayBcdFx0PSBmYmNvbl9ibGFuayxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjMxODY6XHQuY29uX2ZvbnRfc2V0IFx0XHQ9IGZiY29uX3NldF9mb250LFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMzE4Ny1cdC5jb25fZm9udF9nZXQgXHRcdD0gZmJjb25fZ2V0X2ZvbnQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MzEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipGb2N1c2luZyBvbiBGb250IFNldHRpbmcgaW4gdGhlIEZyYW1lYnVmZmVyIENvbnNvbGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBmYmNvbl9zZXRfZm9udGAgYW5kIGl0JiMzOTtzIGNsZWFybHkgYSBrZXkgZnVuY3Rpb24uIEl0JiMzOTtzIHBhcnQgb2YgYGZiX2NvbmAsIHdoaWNoIGlzIGltcGxlbWVudGVkIGFzIGEgYHN0cnVjdCBjb25zd2AuIFRoYXQgYGNvbnN3YCBzdHJ1Y3R1cmUgbWVhbnMgdGhpcyBmdW5jdGlvbiBwbGF5cyBhIHJvbGUgaW4gdGhlIGNvbnNvbGUsIHNvIHNldHRpbmcgdGhlIGZvbnQgbXVzdCBiZSBhIHByZXR0eSBjZW50cmFsIHRhc2suIGBmYmNvbl9zZXRfZm9udGAgaGFzIHRvIGJlIGEgZ29vZCBzeW1ib2wgdG8gY29uY2VudHJhdGUgb24gdG8gdW5kZXJzdGFuZCBob3cgdGhlIGZvbnQgaXMgbWFuaXB1bGF0ZWQuCgpOb3csIHRoYXQgZ2V0cyBtZSB0aGlua2luZzogd2hhdCBhYm91dCBgZmJjb25fc2V0X2RlZl9mb250YD8gSXMgdGhhdCBqdXN0IGEgZGVmYXVsdCBvciBpcyBpdCBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBmYmNvbl9zZXRfZm9udGAgYW5kIGBmYmNvbl9zZXRfZGVmX2ZvbnRgLCBtYXliZSB0aGVyZSBhcmUgc29tZSBkZWZhdWx0IGZvbnRzIGxvYWRlZCwgYW5kIHRoaXMgaXMgd2hlcmUgdGhhdCYjMzk7cyBoYW5kbGVkLiBNYXliZSBpdCBjYWxscyBgZmJjb25fc2V0X2ZvbnRgIHRvIHNldCB0aGUgbmV3IGRlZmF1bHQsIG9yIG1heWJlIHRoZSBkZWZhdWx0IGZvbnQgaXMgc2V0IG9uY2Ugb24gYm9vdCB1cC4gSSBuZWVkIHRvIGRpZyBpbnRvIGl0IGEgYml0IG1vcmUgdG8gdW5kZXJzdGFuZCB0aGUgYmlnIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZiY29uX3NldF9kZWZfZm9udCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI0ODY9c3RhdGljIGludCBmYmNvbl9zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGNvbnN0IHN0cnVjdCBjb25zb2xlX2ZvbnQgKmZvbnQsXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjUzNy1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI1Mzg6c3RhdGljIGludCBmYmNvbl9zZXRfZGVmX2ZvbnQoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgY29uc29sZV9mb250ICpmb250LFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjUzOS1cdFx0XHQgICAgICBjb25zdCBjaGFyICpuYW1lKVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTMxNzU9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdyBmYl9jb24gPSB7XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMzE4Ny1cdC5jb25fZm9udF9nZXQgXHRcdD0gZmJjb25fZ2V0X2ZvbnQsXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzozMTg4Olx0LmNvbl9mb250X2RlZmF1bHRcdD0gZmJjb25fc2V0X2RlZl9mb250LFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMzE4OS1cdC5jb25fc2V0X3BhbGV0dGUgXHQ9IGZiY29uX3NldF9wYWxldHRlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDY0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGJvdGggYGZiY29uX3NldF9mb250YCBhbmQgYGZiY29uX3NldF9kZWZfZm9udGAgYXJlIHBvdGVudGlhbGx5IHN0cm9uZyBjYW5kaWRhdGVzIGZvciBmb2N1c2luZyBvdXIgYXR0ZW50aW9uIGhlcmUuIFRoZXkgc2VlbSBsaWtlIGtleSBwb2ludHMgaW4gdGhlIGZvbnQgaGFuZGxpbmcuIEJ1dCwga25vd2luZyB0aGlzLCBJIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBlbHNlIGluIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHdpZGVyIGNvbmZpZ3VyYXRpb24uIFRoZSBjb2RlIHJlZmVyZW5jZXMgYHBhci0mZ3Q7Yml0b3BzLSZndDtyb3RhdGVfZm9udGAg4oCTIEkgc2hvdWxkIGRldGVybWluZSBpZiBgcm90YXRlX2ZvbnRgIGlzIHRpZWQgdG8gYSBwYXJ0aWN1bGFyIHNldHRpbmcgb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZy4gV2UgbmVlZCB0byBhc2NlcnRhaW4gaWYgaXRzIHByZXNlbmNlLCBvciBhYnNlbmNlLCBpcyBkaWN0YXRlZCBieSBhIHNwZWNpZmljIGJ1aWxkIGNvbmZpZ3VyYXRpb24gb3IgZGV2aWNlIHByb2ZpbGUuIFRoaXMgY291bGQgYmUgY3J1Y2lhbCB0byBpZGVudGlmeWluZyBhIHNwZWNpZmljIGlzc3VlIGlmIHRoZXJlIGFyZSBhbnkgdGhhdCBoYXZlIGNvbWUgdG8gbGlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JvdGF0ZV9mb250JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aWRlby9mYmRldi9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0xMDg4PXN0YXRpYyB2b2lkIGZiY29uX2luaXQoc3RydWN0IHZjX2RhdGEgKnZjLCBib29sIGluaXQpXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTIyOC1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjEyMjk6XHRpZiAocGFyLVx1MDAzZWJpdG9wcy1cdTAwM2Vyb3RhdGVfZm9udCBcdTAwMjZcdTAwMjYgcGFyLVx1MDAzZWJpdG9wcy1cdTAwM2Vyb3RhdGVfZm9udChpbmZvLCB2YykpIHtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTEyMzAtXHRcdHBhci1cdTAwM2Vyb3RhdGUgPSBGQl9ST1RBVEVfVVI7XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MjE0Mz1zdGF0aWMgYm9vbCBmYmNvbl9zd2l0Y2goc3RydWN0IHZjX2RhdGEgKnZjKVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTIyMTYtXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoyMjE3Olx0aWYgKHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQgXHUwMDI2XHUwMDI2IHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQoaW5mbywgdmMpKSB7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yMjE4LVx0XHRwYXItXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI0MDA9c3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCxcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNDI4LVx0aWYgKGNvbl9pc192aXNpYmxlKHZjKSkge1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjQyOTpcdFx0aWYgKHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQgXHUwMDI2XHUwMDI2IHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQoaW5mbywgdmMpKSB7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNDMwLVx0XHRcdHBhci1cdTAwM2Vyb3RhdGUgPSBGQl9ST1RBVEVfVVI7XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQ2OS1cdGlmIChjb25faXNfdmlzaWJsZSh2YykpIHtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI0NzA6XHRcdGlmIChwYXItXHUwMDNlYml0b3BzLVx1MDAzZXJvdGF0ZV9mb250IFx1MDAyNlx1MDAyNiBwYXItXHUwMDNlYml0b3BzLVx1MDAzZXJvdGF0ZV9mb250KGluZm8sIHZjKSkge1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQ3MS1cdFx0XHRwYXItXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI2NDQ9c3RhdGljIHZvaWQgZmJjb25fbW9kZWNoYW5nZWQoc3RydWN0IGZiX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjY3Ny1cdCAqL1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjY3ODpcdGlmIChwYXItXHUwMDNlYml0b3BzLVx1MDAzZXJvdGF0ZV9mb250IFx1MDAyNlx1MDAyNiBwYXItXHUwMDNlYml0b3BzLVx1MDAzZXJvdGF0ZV9mb250KGluZm8sIHZjKSkge1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjY3OS1cdFx0cGFyLVx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uaD01OT1zdHJ1Y3QgZmJjb25fYml0b3BzIHtcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uaC03MS1cdGludCAgKCp1cGRhdGVfc3RhcnQpKHN0cnVjdCBmYl9pbmZvICppbmZvKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5oOjcyOlx0aW50ICAoKnJvdGF0ZV9mb250KShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZjX2RhdGEgKnZjKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5oLTczLX07XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jPTM2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGZiY29uX2JpdG9wcyBjY3dfZmJjb25fYml0b3BzID0ge1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYy0zNjktXHQudXBkYXRlX3N0YXJ0ID0gY2N3X3VwZGF0ZV9zdGFydCxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYzozNzA6XHQucm90YXRlX2ZvbnQgPSBmYmNvbl9yb3RhdGVfZm9udCxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYy0zNzEtfTtcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYz0zNDY9c3RhdGljIGNvbnN0IHN0cnVjdCBmYmNvbl9iaXRvcHMgY3dfZmJjb25fYml0b3BzID0ge1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jLTM1Mi1cdC51cGRhdGVfc3RhcnQgPSBjd191cGRhdGVfc3RhcnQsXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYzozNTM6XHQucm90YXRlX2ZvbnQgPSBmYmNvbl9yb3RhdGVfZm9udCxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jLTM1NC19O1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYy0xNy1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYzoxODppbnQgZmJjb25fcm90YXRlX2ZvbnQoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2Y19kYXRhICp2YylcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYy0xOS17XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5oLTIxLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5oOjIyOmludCBmYmNvbl9yb3RhdGVfZm9udChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZjX2RhdGEgKnZjKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuaC0yMy1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYz0zOTc9c3RhdGljIGNvbnN0IHN0cnVjdCBmYmNvbl9iaXRvcHMgdWRfZmJjb25fYml0b3BzID0ge1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jLTQwMy1cdC51cGRhdGVfc3RhcnQgPSB1ZF91cGRhdGVfc3RhcnQsXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYzo0MDQ6XHQucm90YXRlX2ZvbnQgPSBmYmNvbl9yb3RhdGVfZm9udCxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jLTQwNS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzAzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOgoKKipFeGFtaW5pbmcgRm9udCBSb3RhdGlvbiBJbXBsZW1lbnRhdGlvbnMqKgoKT2theSwgc28gYHJvdGF0ZV9mb250YC4uLiB0aGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBJIGtub3cgaXQuIEFuZCwgSSByZWNhbGwgaXQmIzM5O3MgdXNlZCB3aXRoaW4gYGZiY29uX3JvdGF0ZS5jYCwgYGZiY29uX2Njdy5jYCwgYGZiY29uX2N3LmNgLCBhbmQgYGZiY29uX3VkLmNgLiBOb3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aG9zZSBzb3VyY2UgZmlsZXMgYW5kIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMuIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhlIGNvbmZpZyBmaWxlczsgdGhhdCB3aWxsIGJlIHRoZSBtb3N0IGVmZmljaWVudCBhcHByb2FjaCB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmJjb25fcm90YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aWRlby9mYmRldi9jb3JlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9NYWtlZmlsZT0yMD1pZmVxICgkKENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OKSx5KVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL01ha2VmaWxlOjIxOmZiLXlcdFx0XHRcdCAgJiM0Mzs9IGZiY29uX3JvdGF0ZS5vIGZiY29uX2N3Lm8gZmJjb25fdWQubyBcXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL01ha2VmaWxlLTIyLVx0XHRcdFx0ICAgICBmYmNvbl9jY3cub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDM2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkNvbnNpZGVyaW5nIGBGUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OYCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY29uc29sZSByb3RhdGlvbiB3aXRoaW4gdGhlIGZyYW1lYnVmZmVyLCB3aGljaCBpcyBhIGtleSBjb25zaWRlcmF0aW9uIHdoZW4gZGVhbGluZyB3aXRoIGRpc3BsYXlzIHRoYXQgYXJlbiYjMzk7dCBvcmllbnRlZCBpbiB0aGUgc3RhbmRhcmQgbGFuZHNjYXBlIG1vZGUuIElmIHdlJiMzOTtyZSBpbmNvcnBvcmF0aW5nIGZyYW1lYnVmZmVyIHN1cHBvcnQsIGl0JiMzOTtzIHByZXR0eSBsaWtlbHkgd2UmIzM5O2xsIGFsc28gbmVlZCB0aGUgYWJpbGl0eSB0byByb3RhdGUgdGhlIGNvbnNvbGUgb3V0cHV0LiBPdGhlcndpc2UsIHRoZSB1c2VyIGV4cGVyaWVuY2UgY291bGQgYmUsIHdlbGwsIHVwc2lkZSBkb3duLCBzaWRld2F5cywgb3IgZ2VuZXJhbGx5IGZydXN0cmF0aW5nLiBJdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBhZGRpdGlvbiB0byB0aGUgb3ZlcmFsbCBmcmFtZWJ1ZmZlciBjb25maWd1cmF0aW9uLgoKR2l2ZW4gdGhpcywgSSBzaG91bGQgaW1tZWRpYXRlbHkgY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnYC4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgYEZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT05gLiBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIGRlZmluZWQgYW5kIGNvcnJlY3RseSBoYW5kbGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHJlbGF0ZWQgb3B0aW9ucyB3aWxsIGJlIGNydWNpYWwuIEkmIzM5O2xsIGFsc28gYmUgbG9va2luZyBmb3IgYW55IGRvY3VtZW50YXRpb24gb3IgY29tbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb3B0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIGludGVuZGVkIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgY2F2ZWF0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZz04OD1jb25maWcgRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWVxuLS1cbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnLTEwMy1cbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnOjEwNDpjb25maWcgRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTlxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWctMTA1LSAgICAgICBib29sIFwmIzM0O0ZyYW1lYnVmZmVyIENvbnNvbGUgUm90YXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQzMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHRoZSBDb25zb2xlIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIGNvbnNvbGUgZHJpdmVycyBhcmUgZGVmaW5lZC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYGRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDEwNC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBjb25zb2xlLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlc2lkZS4gSSBhbnRpY2lwYXRlIGZpbmRpbmcgdGhlIGNvcmUgZGVmaW5pdGlvbnMgZm9yIHRoZSBzdXBwb3J0ZWQgY29uc29sZSB0eXBlcyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIHRoZXJlLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBiZSBhYmxlIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gb3RoZXIgb3B0aW9ucywgc3VjaCBhcyBncmFwaGljcyBjYXJkIGRyaXZlcnMsIGZyYW1lYnVmZmVycywgYW5kIHNlcmlhbCBwb3J0cy4gTXkgZ29hbCBpcyB0byBxdWlja2x5IHBpbnBvaW50IHdoaWNoIG9wdGlvbnMgSSBuZWVkIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRvIGFjaGlldmUgdGhlIGRlc2lyZWQgY29uc29sZSBiZWhhdmlvciBmb3IgdGhpcyBzcGVjaWZpYyBwbGF0Zm9ybSwgYXMgd2VsbCBhcyB0aGVpciByZWxldmFudCBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDk1Olx0XHQgc3VwcG9ydHMgdGhpcyBmZWF0dXJlKS4gIE90aGVyd2lzZSwgdGhlIGZyYW1lYnVmZmVyIGNvbnNvbGUgd2lsbFxuICA5NjpcdFx0IGFsd2F5cyBzZWxlY3QgdGhlIGZpcnN0IGZyYW1lYnVmZmVyIGRyaXZlciB0aGF0IGlzIGxvYWRlZC4gVGhlIGxhdHRlclxuICA5NzpcdFx0IGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLlxuICA5ODpcdFxuICA5OTpcdFx0IFlvdSBjYW4gYWx3YXlzIG92ZXJyaWRlIHRoZSBhdXRvbWF0aWMgc2VsZWN0aW9uIG9mIHRoZSBwcmltYXJ5IGRldmljZVxuIDEwMDpcdFx0IGJ5IHVzaW5nIHRoZSBmYmNvbj1tYXA6IGJvb3Qgb3B0aW9uLlxuIDEwMTpcdFxuIDEwMjpcdFx0IElmIHVuc3VyZSwgc2VsZWN0IG4uXG4gMTAzOlx0XG4gMTA0Olx0Y29uZmlnIEZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT05cbiAxMDU6XHQgICAgICAgYm9vbCBcJiMzNDtGcmFtZWJ1ZmZlciBDb25zb2xlIFJvdGF0aW9uXCYjMzQ7XG4gMTA2Olx0ICAgICAgIGRlcGVuZHMgb24gRlJBTUVCVUZGRVJfQ09OU09MRVxuIDEwNzpcdCAgICAgICBoZWxwXG4gMTA4Olx0XHQgRW5hYmxlIGRpc3BsYXkgcm90YXRpb24gZm9yIHRoZSBmcmFtZWJ1ZmZlciBjb25zb2xlLiAgVGhpcyBpcyBkb25lXG4gMTA5Olx0XHQgaW4gc29mdHdhcmUgYW5kIG1heSBiZSBzaWduaWZpY2FudGx5IHNsb3dlciB0aGFuIGEgbm9ybWFsbHkgb3JpZW50ZWRcbiAxMTA6XHRcdCBkaXNwbGF5LiAgTm90ZSB0aGF0IHRoZSByb3RhdGlvbiBpcyBkb25lIGF0IHRoZSBjb25zb2xlIGxldmVsIG9ubHlcbiAxMTE6XHRcdCBzdWNoIHRoYXQgb3RoZXIgdXNlcnMgb2YgdGhlIGZyYW1lYnVmZmVyIHdpbGwgcmVtYWluIG5vcm1hbGx5XG4gMTEyOlx0XHQgb3JpZW50ZWQuXG4gMTEzOlx0XG4gMTE0Olx0Y29uZmlnIEZSQU1FQlVGRkVSX0NPTlNPTEVfREVGRVJSRURfVEFLRU9WRVJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk0NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBGcmFtZWJ1ZmZlciBDb25zb2xlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTmAgc2V0dGluZy4gVGhlIGRlcGVuZGVuY3kgdHJlZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyBpdCBoaW5nZXMgb24gYEZSQU1FQlVGRkVSX0NPTlNPTEVgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMsIHNvIGxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0uIFJpZ2h0LCBJIGhhdmUgYEZCX0NPUkVgLCBgRlJBTUVCVUZGRVJfQ09OU09MRWAsIGFuZCBgRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTmAgdG8gY29uc2lkZXIuCgpOb3csIG15IG1haW4gY29uY2VybiBpcyB3aGV0aGVyIEkgY2FuIG1hbmlwdWxhdGUgdGhlIGZyYW1lYnVmZmVyIGNvbnNvbGUmIzM5O3MgZm9udCBmcm9tIHVzZXIgc3BhY2UsIHNwZWNpZmljYWxseSB1c2luZyBgZmJjb25fc2V0X2ZvbnRgLiBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyBwYXJ0IG9mIGBmYl9jb25gLCB3aGljaCBpdHNlbGYgaXMgbmVzdGVkIHdpdGhpbiBhIGBzdHJ1Y3QgY29uc3dgLiBUaGlzIGBzdHJ1Y3QgY29uc3dgIGlzIHRoZSBjb25zb2xlIHN3aXRjaCBzdHJ1Y3R1cmUuIEV4Y2VsbGVudC4KClRoZSByZWFsIHF1ZXN0aW9uIGlzIGhvdyB0byBnZXQgYXQgdGhpcyBmdW5jdGlvbmFsaXR5LiBNeSB0aG91Z2h0IGlzIGBpb2N0bChmZCwgUElPX0ZPTlQsIC4uLilgIG9yIGEgc2ltaWxhciBpb2N0bCBjYWxsIG9uIGEgY29uc29sZSBkZXZpY2UgbGlrZSBgL2Rldi90dHkqYCBvciBgL2Rldi9jb25zb2xlYCBtaWdodCBkbyB0aGUgdHJpY2suIEkgc2VlbSB0byByZWNhbGwgdGhhdCB0aGUgYHZ0X2lvY3RsYCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgYFBJT19GT05UYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBieSByZXZpZXdpbmcgdGhlIGNvZGUgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uX2ZvbnRfc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy90dHkvdnQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3Z0L3Z0LmM9NDkxMD1zdGF0aWMgaW50IGNvbl9mb250X2dldChzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBjb25zb2xlX2ZvbnRfb3AgKm9wKVxuLS1cbmRyaXZlcnMvdHR5L3Z0L3Z0LmMtNDk1NC1cbmRyaXZlcnMvdHR5L3Z0L3Z0LmM6NDk1NTpzdGF0aWMgaW50IGNvbl9mb250X3NldChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGNvbnN0IHN0cnVjdCBjb25zb2xlX2ZvbnRfb3AgKm9wKVxuZHJpdmVycy90dHkvdnQvdnQuYy00OTU2LXtcbi0tXG5kcml2ZXJzL3R0eS92dC92dC5jLTQ5ODUtXHRcdHJldHVybiAtRUlOVkFMO1xuZHJpdmVycy90dHkvdnQvdnQuYzo0OTg2Olx0aWYgKCF2Yy1cdTAwM2V2Y19zdy1cdTAwM2Vjb25fZm9udF9zZXQpXG5kcml2ZXJzL3R0eS92dC92dC5jLTQ5ODctXHRcdHJldHVybiAtRU5PU1lTO1xuLS1cbmRyaXZlcnMvdHR5L3Z0L3Z0LmMtNDk5MS1cbmRyaXZlcnMvdHR5L3Z0L3Z0LmM6NDk5MjpcdHJldHVybiB2Yy1cdTAwM2V2Y19zdy1cdTAwM2Vjb25fZm9udF9zZXQodmMsIFx1MDAyNmZvbnQsIHZwaXRjaCwgb3AtXHUwMDNlZmxhZ3MpO1xuZHJpdmVycy90dHkvdnQvdnQuYy00OTkzLX1cbi0tXG5kcml2ZXJzL3R0eS92dC92dC5jPTUwMjc9aW50IGNvbl9mb250X29wKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGNvbnNvbGVfZm9udF9vcCAqb3ApXG4tLVxuZHJpdmVycy90dHkvdnQvdnQuYy01MDMxLVx0Y2FzZSBLRF9GT05UX09QX1NFVF9UQUxMOlxuZHJpdmVycy90dHkvdnQvdnQuYzo1MDMyOlx0XHRyZXR1cm4gY29uX2ZvbnRfc2V0KHZjLCBvcCk7XG5kcml2ZXJzL3R0eS92dC92dC5jLTUwMzMtXHRjYXNlIEtEX0ZPTlRfT1BfR0VUOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgwNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIFJlYXNvbmluZyBmb3IgRm9udCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIHRyYWNlZCB0aGUgZm9udCBzZXR0aW5nIGZ1bmN0aW9uYWxpdHkuIEl0IGxvb2tzIGxpa2UgYGNvbl9mb250X3NldGAgdWx0aW1hdGVseSBjYWxscyBgdmMtJmd0O3ZjX3N3LSZndDtjb25fZm9udF9zZXRgLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlbiwgYGNvbl9mb250X29wYCBpcyB0aGUgaGFuZGxlciBmb3IgYEtEX0ZPTlRfT1BfU0VUYC4gVGhhdCBwYXJ0JiMzOTtzIGNsZWFyIOKAkyB1c2VyIHNwYWNlIGludGVyYWN0cyB3aXRoIGl0IHZpYSBpb2N0bCwganVzdCBhcyBJIGV4cGVjdGVkLgoKTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBJdCBsb29rcyBsaWtlIGBmYmNvbl9zZXRfZm9udGAgYW5kIGBmYmNvbl9zZXRfZGVmX2ZvbnRgIGFyZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnRzIGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kLgoKTmV4dCwgSSBuZWVkIHRvIHJlbWVtYmVyIHdoYXQmIzM5O3MgcmVsZXZhbnQgaW4gdGVybXMgb2YgY29uZmlncy4gTG9va3MgbGlrZSBgRkJfQ09SRWAsIGBGUkFNRUJVRkZFUl9DT05TT0xFYCwgYW5kIGBGUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OYCBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gZG91YmxlLWNoZWNrIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgaW50ZXJhY3Rpb25zLgoKVGhlIGJpZyBxdWVzdGlvbiBub3cgaXMgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQuIERvZXMganVzdCBgRkJfQ09SRWAgZ2l2ZSBtZSBlbm91Z2ggdG8gcnVuIGEgdGVzdD8gT3Igd2lsbCBJIG5lZWQgYSBtb3JlIGNvbmNyZXRlIGZyYW1lYnVmZmVyIGRyaXZlciB0byB1c2UgYXMgYSB0ZXN0YmVkPyBJIHRoaW5rIEkmIzM5O2xsIG5lZWQgYSBzcGVjaWZpYyBkcml2ZXIuIEkmIzM5O20gdGhpbmtpbmcgYERSTV9GQkRFVl9FTVVMQVRJT05gIG9yIGBGQl9WSVJUVUFMYCBjb3VsZCBiZSB1c2VmdWwgaGVyZS4gSG93ZXZlciwgYEZCX0RVTU1ZYCBtaWdodCBkbyB0aGUgdHJpY2sgdG9vLiBJJiMzOTtsbCBnbyB3aXRoIGVpdGhlciBgRkJfVklSVFVBTGAgb3IgYEZCX0RVTU1ZYC4gTGV0JiMzOTtzIHNlZSB3aGljaCBpcyBzaW1wbGVyIHRvIHNldCB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZCX1ZJUlRVQUwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZpZGVvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpZGVvL2ZiZGV2L0tjb25maWc9MTY0NT1jb25maWcgRkJfU0g3NzYwXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnLTE2NTctXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L0tjb25maWc6MTY1ODpjb25maWcgRkJfVklSVFVBTFxuZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnLTE2NTktXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIEZyYW1lIEJ1ZmZlciBzdXBwb3J0IChPTkxZIEZPUiBURVNUSU5HISlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NjkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIExpbnV4IEZyYW1lYnVmZmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBkcml2ZXJzL3ZpZGVvL2ZiZGV2L0tjb25maWdgIGZpbGUuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gbGluZSAxNjU4LCBiZWNhdXNlIGJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIHRoYXQmIzM5O3Mgb2Z0ZW4gd2hlcmUgeW91IGZpbmQgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gW2luc2VydCB5b3VyIGZpZWxkIGhlcmUsIGUuZy4sIGEgc3BlY2lmaWMgZnJhbWVidWZmZXIgZHJpdmVyIG9yIGZlYXR1cmVdLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBgY29uZmlnYCBkaXJlY3RpdmVzLCBtYXliZSBzb21lIGBtZW51Y29uZmlnYCBvciBgY2hvaWNlYCBzdHJ1Y3R1cmVzLCBhbmQgaG9wZWZ1bGx5LCBzb21lIGhlbHBmdWwgY29tbWVudHMgZXhwbGFpbmluZyB0aGUgbG9naWMgYmVoaW5kIHRoZSBzZXR0aW5ncy4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoZSBmcmFtZWJ1ZmZlciBkcml2ZXIgY3VzdG9taXphdGlvbiB1c3VhbGx5IHJlc2lkZXMsIGFuZCB1bmRlcnN0YW5kaW5nIHRoaXMgcGFydCBpcyBrZXkgdG8gYW55IGRlZXBlciBpbnZlc3RpZ2F0aW9uIG9yIHBvdGVudGlhbCBtb2RpZmljYXRpb25zIEkgbWlnaHQgbmVlZCB0byBtYWtlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4gSSYjMzk7bSBhbHJlYWR5IGZvcm11bGF0aW5nIGh5cG90aGVzZXMgYWJvdXQgd2hhdCBJICpzaG91bGQqIGZpbmQsIGdpdmVuIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiB0aGVzZSBLY29uZmlnIGZpbGVzLiBUaW1lIHRvIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY1MDpcdFx0aGVscFxuMTY1MTpcdFx0ICBTdXBwb3J0IGZvciB0aGUgU0g3NzYwL1NINzc2My9TSDc3MjAvU0g3NzIxIGludGVncmF0ZWRcbjE2NTI6XHRcdCAgKEQpU1ROL1RGVCBMQ0QgQ29udHJvbGxlci5cbjE2NTM6XHRcdCAgU3VwcG9ydHMgZGlzcGxheSByZXNvbHV0aW9ucyB1cCB0byAxMDI0eDEwMjQgcGl4ZWwsIGdyYXlzY2FsZSBhbmRcbjE2NTQ6XHRcdCAgY29sb3Igb3BlcmF0aW9uLCB3aXRoIGRlcHRocyByYW5naW5nIGZyb20gMSBicHAgdG8gOCBicHAgbW9ub2Nocm9tZVxuMTY1NTpcdFx0ICBhbmQgOCwgMTUgb3IgMTYgYnBwIGNvbG9yOyA5MCBkZWdyZWVzIGNsb2Nrd2lzZSBkaXNwbGF5IHJvdGF0aW9uIGZvclxuMTY1NjpcdFx0ICBwYW5lbHMgXHUwMDNjPSAzMjAgcGl4ZWwgaG9yaXpvbnRhbCByZXNvbHV0aW9uLlxuMTY1NzpcdFxuMTY1ODpcdGNvbmZpZyBGQl9WSVJUVUFMXG4xNjU5Olx0XHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIEZyYW1lIEJ1ZmZlciBzdXBwb3J0IChPTkxZIEZPUiBURVNUSU5HISlcJiMzNDtcbjE2NjA6XHRcdGRlcGVuZHMgb24gRkJcbjE2NjE6XHRcdHNlbGVjdCBGQl9TWVNNRU1fSEVMUEVSU1xuMTY2MjpcdFx0aGVscFxuMTY2MzpcdFx0ICBUaGlzIGlzIGEgYHZpcnR1YWwmIzM5OyBmcmFtZSBidWZmZXIgZGV2aWNlLiBJdCBvcGVyYXRlcyBvbiBhIGNodW5rIG9mXG4xNjY0Olx0XHQgIHVuc3dhcHBhYmxlIGtlcm5lbCBtZW1vcnkgaW5zdGVhZCBvZiBvbiB0aGUgbWVtb3J5IG9mIGEgZ3JhcGhpY3NcbjE2NjU6XHRcdCAgYm9hcmQuIFRoaXMgbWVhbnMgeW91IGNhbm5vdCBzZWUgYW55IG91dHB1dCBzZW50IHRvIHRoaXMgZnJhbWVcbjE2NjY6XHRcdCAgYnVmZmVyIGRldmljZSwgd2hpbGUgaXQgZG9lcyBjb25zdW1lIHByZWNpb3VzIG1lbW9yeS4gVGhlIG1haW4gdXNlXG4xNjY3Olx0XHQgIG9mIHRoaXMgZnJhbWUgYnVmZmVyIGRldmljZSBpcyB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcgdGhlIGZyYW1lXG4xNjY4Olx0XHQgIGJ1ZmZlciBzdWJzeXN0ZW0uIERvIE5PVCBlbmFibGUgaXQgZm9yIG5vcm1hbCBzeXN0ZW1zISBUbyBwcm90ZWN0XG4xNjY5Olx0XHQgIHRoZSBpbm5vY2VudCwgaXQgaGFzIHRvIGJlIGVuYWJsZWQgZXhwbGljaXRseSBhdCBib290IHRpbWUgdXNpbmcgdGhlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTM3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBkZXBlbmRlbmN5OgoKKipFeGFtaW5pbmcgYSBEZXBlbmRlbmN5OiBGQl9WSVJUVUFMIGFuZCBGQioqCgpPa2F5LCBzbyBgRkJfVklSVFVBTGAgaGFzIGEgZGVwZW5kZW5jeSBvbiBgRkJgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZS4gQmVmb3JlIEkgZGl2ZSBkZWVwZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYEZCYCBpcyBkb2luZyBhbmQgaXRzIGN1cnJlbnQgc3RhdGUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiBgRkJgIGl0c2VsZi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIGl0LiBVbmRlcnN0YW5kaW5nIGBGQmAgaXMgdGhlIGNyaXRpY2FsIGZpcnN0IHN0ZXAgaW4gcHJvcGVybHkgYXNzZXNzaW5nIHRoZSBpbXBhY3Qgb24gYEZCX1ZJUlRVQUxgLiBJIG5lZWQgdG8gYXNzZXNzIHdoYXQgY2hhbmdlcyB0byBgRkJgIGFyZSBuZWNlc3NhcnkgYW5kIGhvdyB0aGlzIGVmZmVjdHMgdGhlIHN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZCJCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvS2NvbmZpZy01LVxuZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnOjY6bWVudWNvbmZpZyBGQlxuZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtTdXBwb3J0IGZvciBmcmFtZSBidWZmZXIgZGV2aWNlIGRyaXZlcnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzOTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCB0ZXh0OgoKKipEaXZpbmcgaW50byB0aGUgYGZiZGV2YCBLY29uZmlnKioKCk9rYXksIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBgZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnYCBmaWxlIGFuZCB6ZXJvIGluIGFyb3VuZCBsaW5lIDYuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCYjMzk7cyB3aGVyZSB3ZSYjMzk7bGwgZmluZCB0aGUgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciB0aGUgZnJhbWVidWZmZXIgZGV2aWNlIGRyaXZlciBjb3JlLiBOZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5LCBsaWtlbHkgaXQmIzM5O3MgYENPTkZJR19GQmAgb3Igc29tZXRoaW5nIHNpbWlsYXIgdGhhdCBlbmFibGVzIHRoZSBlbnRpcmUgc3Vic3lzdGVtLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBiZSBhYmxlIHRvIHdvcmsgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBvcHRpb25zIHByZXNlbnRlZCB3aXRoaW4gdGhhdCBmaWxlLCBnZXR0aW5nIGEgaGFuZGxlIG9uIHRoZSBzdHJ1Y3R1cmUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHdlIGRlZmluZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgc3Vic3lzdGVtcywgbGlrZSBncmFwaGljcyBkcml2ZXJzLCBvciBpbnB1dCBkcml2ZXJzLCBldGMuIGFuZCBob3cgdGhleSYjMzk7cmUgZXhwb3NlZCB2aWEgdGhlIEtjb25maWcgc3RydWN0dXJlLiBTaG91bGQgYmUgYSBzdHJhaWdodGZvcndhcmQgc3RhcnQsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgYmFzZSBjb25maWd1cmF0aW9uIGZvciBhbnkgZnJhbWVidWZmZXIgd29yayBJIG5lZWQgdG8gZG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgZmJkZXYgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIEZCXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtTdXBwb3J0IGZvciBmcmFtZSBidWZmZXIgZGV2aWNlIGRyaXZlcnNcJiMzNDtcbiAgIDg6XHRcdHNlbGVjdCBGQl9DT1JFXG4gICA5Olx0XHRzZWxlY3QgRkJfTk9USUZZXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIFRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIHByb3ZpZGVzIGFuIGFic3RyYWN0aW9uIGZvciB0aGUgZ3JhcGhpY3NcbiAgMTI6XHRcdCAgaGFyZHdhcmUuIEl0IHJlcHJlc2VudHMgdGhlIGZyYW1lIGJ1ZmZlciBvZiBzb21lIHZpZGVvIGhhcmR3YXJlIGFuZFxuICAxMzpcdFx0ICBhbGxvd3MgYXBwbGljYXRpb24gc29mdHdhcmUgdG8gYWNjZXNzIHRoZSBncmFwaGljcyBoYXJkd2FyZSB0aHJvdWdoXG4gIDE0Olx0XHQgIGEgd2VsbC1kZWZpbmVkIGludGVyZmFjZSwgc28gdGhlIHNvZnR3YXJlIGRvZXNuJiMzOTt0IG5lZWQgdG8ga25vd1xuICAxNTpcdFx0ICBhbnl0aGluZyBhYm91dCB0aGUgbG93LWxldmVsIChoYXJkd2FyZSByZWdpc3Rlcikgc3R1ZmYuXG4gIDE2Olx0XG4gIDE3Olx0XHQgIEZyYW1lIGJ1ZmZlciBkZXZpY2VzIHdvcmsgaWRlbnRpY2FsbHkgYWNyb3NzIHRoZSBkaWZmZXJlbnRcbiAgMTg6XHRcdCAgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0ZWQgYnkgTGludXggYW5kIG1ha2UgdGhlIGltcGxlbWVudGF0aW9uIG9mXG4gIDE5Olx0XHQgIGFwcGxpY2F0aW9uIHByb2dyYW1zIGVhc2llciBhbmQgbW9yZSBwb3J0YWJsZTsgYXQgdGhpcyBwb2ludCwgYW4gWFxuICAyMDpcdFx0ICBzZXJ2ZXIgZXhpc3RzIHdoaWNoIHVzZXMgdGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZXhjbHVzaXZlbHkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTIzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IEZyYW1lYnVmZmVyIENvbnNvbGUgYW5kIEZvbnQgUm90YXRpb24qKgoKT2theSwgc28gdGhlIGdvYWwgaXMgY2xlYXJseSB0byB0YXJnZXQgYGZiY29uYCBmdW5jdGlvbmFsaXR5LiBUaGUgc2VsZWN0aW9uIG9mIGBGQl9DT1JFYCBhcyB0aGUgYmFzZSBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRvIG1ha2UgdGhpcyB0ZXN0YWJsZSwgSSYjMzk7bGwgbmVlZCBhIGZyYW1lYnVmZmVyIGRldmljZS4gYEZCX1ZJUlRVQUxgIG9yIGBEUk1fRkJERVZfRU1VTEFUSU9OYCBsb29rIGxpa2UgdGhlIGJlc3QgYmV0cyBoZXJlLCB3aGljaCBhbGlnbnMgd2l0aCBob3cgc3l6a2FsbGVyIHR5cGljYWxseSBoYW5kbGVzIHRoZXNlIHNjZW5hcmlvcyDigJMgYEZCX1ZJUlRVQUxgIG9yIGBEUk1fVktNU2Agd2l0aCBgRFJNX0ZCREVWX0VNVUxBVElPTmAgc2hvdWxkIGNvdmVyIGl0LgoKVGhlcmVmb3JlLCBJJiMzOTtsbCBhZGQgYEZCYCwgYEZCX1ZJUlRVQUxgLCBgRlJBTUVCVUZGRVJfQ09OU09MRWAsIGFuZCBgRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTmAgdG8gdGhlIGNvbmZpZ3VyYXRpb24uIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBmdXp6aW5nIHRoZSBjb25zb2xlLgoKTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgYW5kIHJldmlldyB0aGUgcmVsZXZhbnQgcGF0Y2ggYWdhaW4uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluOgpgYGBjCglpZiAoY29uX2lzX3Zpc2libGUodmMpKSB7CgkJaWYgKHBhci0mZ3Q7Yml0b3BzLSZndDtyb3RhdGVfZm9udCAmYW1wOyZhbXA7IHBhci0mZ3Q7Yml0b3BzLSZndDtyb3RhdGVfZm9udChpbmZvLCB2YykpIHsKCQkJcGFyLSZndDtyb3RhdGUgPSBGQl9ST1RBVEVfVVI7CgkJCXNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTsKCQl9Cgl9CmBgYApUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGBmYmNvbl9kb19zZXRfZm9udGAuIEl0IG1vZGlmaWVzIGBwYXItJmd0O3JvdGF0ZWAgYW5kIGNhbGxzIGBzZXRfYmxpdHRpbmdfdHlwZWAsIHdoaWNoIGlzIGRlZmluaXRlbHkgd29ydGggdGFyZ2V0aW5nLiBUaGVzZSBhcmUgZXhhY3RseSB0aGUgdHlwZXMgb2YgY2hhbmdlcyB0aGF0IGNhbiBsZWFkIHRvIGludGVyZXN0aW5nIGJ1Z3MuCgpCYXNlZCBvbiB0aGlzLCBteSBmb2N1cyBzeW1ib2xzIGFyZSBjbGVhcjogYGZiY29uX3NldF9mb250YCBhbmQgYGZiY29uX3NldF9kZWZfZm9udGAuIFRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzLgoKSSB3aWxsIGFsc28gbmVlZCB0byByZXZpZXcgYHNldF9ibGl0dGluZ190eXBlYCBhbmQgZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIGEgd29ydGh3aGlsZSBmb2N1cyBzeW1ib2wuCgoqKkluIHN1bW1hcnksIG15IGNvbmZpZyB3aWxsIGluY2x1ZGU6KioKKiAgIGBGQmAKKiAgIGBGQl9WSVJUVUFMYAoqICAgYEZSQU1FQlVGRkVSX0NPTlNPTEVgCiogICBgRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTmAKCkFuZCB0aGUgZm9jdXMgc3ltYm9scyB3aWxsIGJlIGBmYmNvbl9zZXRfZm9udGAsIGBmYmNvbl9zZXRfZGVmX2ZvbnRgLCBhbmQgYHNldF9ibGl0dGluZ190eXBlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0X2JsaXR0aW5nX3R5cGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz02NDE9c3RhdGljIHZvaWQgZmJjb25fcHJlcGFyZV9sb2dvKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8sXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtNzMwLSNpZmRlZiBDT05GSUdfRkJfVElMRUJMSVRUSU5HXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzo3MzE6c3RhdGljIHZvaWQgc2V0X2JsaXR0aW5nX3R5cGUoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbylcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTczMi17XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9NzQ1PXN0YXRpYyBpbnQgZmJjb25faW52YWxpZF9jaGFyY291bnQoc3RydWN0IGZiX2luZm8gKmluZm8sIHVuc2lnbmVkIGNoYXJjb3VudClcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy03NTUtI2Vsc2VcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjc1NjpzdGF0aWMgdm9pZCBzZXRfYmxpdHRpbmdfdHlwZShzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvKVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtNzU3LXtcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz04Mjc9c3RhdGljIGludCBjb24yZmJfYWNxdWlyZV9uZXdpbmZvKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8sXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtODM2LVx0aWYgKHZjKVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6ODM3Olx0XHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy04MzgtXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9OTEyPXN0YXRpYyBpbnQgc2V0X2NvbjJmYl9tYXAoaW50IHVuaXQsIGludCBuZXdpZHgsIGludCB1c2VyKVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTk0Mi1cdH0gZWxzZSBpZiAodmMpIHtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjk0MzpcdFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtOTQ0LVx0fVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTEwMTQ9c3RhdGljIGNvbnN0IGNoYXIgKmZiY29uX3N0YXJ0dXAodm9pZClcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0xMDUzLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MTA1NDpcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTEwNTUtXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MTA4OD1zdGF0aWMgdm9pZCBmYmNvbl9pbml0KHN0cnVjdCB2Y19kYXRhICp2YywgYm9vbCBpbml0KVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTExNzUtXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoxMTc2Olx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTE3Ny1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0xMjMwLVx0XHRwYXItXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MTIzMTpcdFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTIzMi1cdH1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0yMTQzPXN0YXRpYyBib29sIGZiY29uX3N3aXRjaChzdHJ1Y3QgdmNfZGF0YSAqdmMpXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjIxMy1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjIyMTQ6XHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yMjE1LVx0cGFyLVx1MDAzZWN1cnNvcl9yZXNldCA9IDE7XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjIxOC1cdFx0cGFyLVx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjIyMTk6XHRcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTIyMjAtXHR9XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MjQwMD1zdGF0aWMgaW50IGZiY29uX2RvX3NldF9mb250KHN0cnVjdCB2Y19kYXRhICp2YywgaW50IHcsIGludCBoLCBpbnQgY2hhcmNvdW50LFxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI0MzAtXHRcdFx0cGFyLVx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI0MzE6XHRcdFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQzMi1cdFx0fVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI0NzEtXHRcdFx0cGFyLVx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI0NzI6XHRcdFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQ3My1cdFx0fVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI2NDQ9c3RhdGljIHZvaWQgZmJjb25fbW9kZWNoYW5nZWQoc3RydWN0IGZiX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjY2OC1cdHAgPSBcdTAwMjZmYl9kaXNwbGF5W3ZjLVx1MDAzZXZjX251bV07XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoyNjY5Olx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjY3MC1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNjc5LVx0XHRwYXItXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjY4MDpcdFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjY4MS1cdH1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0yNzA0PXN0YXRpYyB2b2lkIGZiY29uX3NldF9hbGxfdmNzKHN0cnVjdCBmYl9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI3MjgtXHRcdHAgPSBcdTAwMjZmYl9kaXNwbGF5W3ZjLVx1MDAzZXZjX251bV07XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoyNzI5Olx0XHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNzMwLVx0XHR2YXJfdG9fZGlzcGxheShwLCBcdTAwMjZpbmZvLVx1MDAzZXZhciwgaW5mbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzY0CgkJCQkJCQlvdXRwdXQ6IDEzNAoJCQkJCQkJdGhvdWdodHM6IDE4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGb250IFJvdGF0aW9uIFBhdGNoKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBhcyBJIHNlZSBpdCwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGlzIG1vZGlmeWluZyBob3cgdGhlIGZyYW1lYnVmZmVyIGNvbnNvbGUgaGFuZGxlcyBmb250IHNldHRpbmdzLCBzcGVjaWZpY2FsbHkgd2hlbiByb3RhdGlvbiBpcyBlbmFibGVkLiBJdCYjMzk7cyB0b3VjaGluZyB0aGUgYGZiY29uX2RvX3NldF9mb250YCBmdW5jdGlvbiwgd2hpY2ggaXMsIG9mIGNvdXJzZSwgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBjb25zb2xlIHJlbmRlcmluZy4KCkkgdGhpbmsgdGhlIGltcG9ydGFudCB0aGluZyB0byBmb2N1cyBvbiBhcmUgdGhlIGVudHJ5IHBvaW50cyDigJMgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBleGFtaW5lIGBmYmNvbl9zZXRfZm9udGAgYW5kIGBmYmNvbl9zZXRfZGVmX2ZvbnRgLiBgc2V0X2JsaXR0aW5nX3R5cGVgIGJlaW5nIHN0YXRpYyBhbmQgdXNlZCBpbiB2YXJpb3VzIHBsYWNlcyBpcyBhIGJpdCBvZiBhIHJlZCBoZXJyaW5nLCB3ZSBuZWVkIHRvIGNvbmNlbnRyYXRlIG9uIHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGZ1bmN0aW9ucy4KClRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nOyBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgaXQgaW1wYWN0cyBhIHZlcnkgY2VudHJhbCBhbmQgYWNjZXNzaWJsZSBwYXJ0IG9mIHRoZSBzeXN0ZW0sIHRoZSBmcmFtZWJ1ZmZlciBjb25zb2xlLiBBbnkgaXNzdWUgaGVyZSBjb3VsZCBsZWFkIHRvIHZpc3VhbCBjb3JydXB0aW9uLCBjcmFzaGVzLCBvciBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBkZXBlbmRpbmcgb24gaG93IGZvbnRzIGFyZSBoYW5kbGVkIGFuZCByZW5kZXJlZCB3aXRoIHRoZSByb3RhdGlvbi4KCkkgd2lsbCB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cuIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYEZCYCwgYEZCX1ZJUlRVQUxgLCBgRlJBTUVCVUZGRVJfQ09OU09MRWAsIGFuZCBgRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTmAgYXJlIGFsbCBnb2luZyB0byBiZSBlc3NlbnRpYWwgZm9yIHRlc3RpbmcgdGhpcy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBvdXIgZnV6emluZyBjYW1wYWlnbnMgYXJlIGNvbXByZWhlbnNpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGQiYjMzQ7LAogICAgJiMzNDtGQl9WSVJUVUFMJiMzNDssCiAgICAmIzM0O0ZSQU1FQlVGRkVSX0NPTlNPTEUmIzM0OywKICAgICYjMzQ7RlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZiY29uX3NldF9mb250JiMzNDssCiAgICAmIzM0O2ZiY29uX3NldF9kZWZfZm9udCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBmcmFtZWJ1ZmZlciBjb25zb2xlIGZvbnQgc2V0dGluZyBsb2dpYyAoZmJjb25fZG9fc2V0X2ZvbnQpIHRvIGhhbmRsZSBmb250IHJvdGF0aW9uIHdoZW4gdGhlIGNvbnNvbGUgaXMgdmlzaWJsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGNvcmUgc3Vic3lzdGVtIChmYmNvbikgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBpb2N0bHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZCJiMzNDssCiAgICAmIzM0O0ZCX1ZJUlRVQUwmIzM0OywKICAgICYjMzQ7RlJBTUVCVUZGRVJfQ09OU09MRSYjMzQ7LAogICAgJiMzNDtGUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmJjb25fc2V0X2ZvbnQmIzM0OywKICAgICYjMzQ7ZmJjb25fc2V0X2RlZl9mb250JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGZyYW1lYnVmZmVyIGNvbnNvbGUgZm9udCBzZXR0aW5nIGxvZ2ljIChmYmNvbl9kb19zZXRfZm9udCkgdG8gaGFuZGxlIGZvbnQgcm90YXRpb24gd2hlbiB0aGUgY29uc29sZSBpcyB2aXNpYmxlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgY29yZSBzdWJzeXN0ZW0gKGZiY29uKSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXIgc3BhY2UgdmlhIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgZmJjb25fZG9fc2V0X2ZvbnRgIHdoZXJlIGNoYW5naW5nIHRoZSBmb250IGNoYXJhY3RlciBjb3VudCAoZS5nLiwgZnJvbSAyNTYgdG8gNTEyKSB3aXRob3V0IHVwZGF0aW5nIHRoZSByb3RhdGVkIGZvbnQgYnVmZmVyIChgcGFyLVx1MDAzZXJvdGF0ZWQuYnVmYCkgbGVhZHMgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkLiBXaGVuIGBmYmNvbmAgcmVuZGVycyB0ZXh0LCBpdCB1c2VzIHRoZSBuZXcgY2hhcmFjdGVyIGNvdW50IHRvIGluZGV4IGludG8gdGhlIG9sZCwgc21hbGxlciBidWZmZXIsIHJlc3VsdGluZyBpbiBhIGhlYXAgT09CIHJlYWQuIFRoaXMgaXMgYSBjbGFzc2ljIG1lbW9yeSBzYWZldHkgaXNzdWUgdGhhdCBpcyByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvcm1hdGlvbiBsZWFrIHRvIHVzZXIgc3BhY2UgaW52b2x2ZWQsIGFzIHRoZSBidWZmZXIgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdXAgdG8gaXRzIGFsbG9jYXRlZCBzaXplLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRkNTg4ZTIwMmU0M2Y4M2E3ZTg5NGY3NzA3NDBiODhjOGYzNjI2OGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAwMjowNzo0NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jIGIvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMKaW5kZXggMjNiM2M1MzZkNTNkMS4uYzc0YTQ5MDViOGUyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMKQEAgLTI0MjUsNiAmIzQzOzI0MjUsMTMgQEAgc3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCwKIAllbHNlIGlmICghdmMtJmd0O3ZjX2hpX2ZvbnRfbWFzayAmYW1wOyZhbXA7IGNoYXJjb3VudCA9PSA1MTIpCiAJCXNldF92Y19oaV9mb250KHZjLCB0cnVlKTsKIAomIzQzOwlpZiAoY29uX2lzX3Zpc2libGUodmMpKSB7CiYjNDM7CQlpZiAocGFyLSZndDtiaXRvcHMtJmd0O3JvdGF0ZV9mb250ICZhbXA7JmFtcDsgcGFyLSZndDtiaXRvcHMtJmd0O3JvdGF0ZV9mb250KGluZm8sIHZjKSkgewomIzQzOwkJCXBhci0mZ3Q7cm90YXRlID0gRkJfUk9UQVRFX1VSOwomIzQzOwkJCXNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCWlmIChyZXNpemUpIHsKIAkJaW50IGNvbHMsIHJvd3M7CiAKQEAgLTI0NTksNiAmIzQzOzI0NjYsMTMgQEAgc3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCwKIAllbHNlIGlmICghb2xkX2hpX2ZvbnRfbWFzayAmYW1wOyZhbXA7IHZjLSZndDt2Y19oaV9mb250X21hc2spCiAJCXNldF92Y19oaV9mb250KHZjLCBmYWxzZSk7CiAKJiM0MzsJaWYgKGNvbl9pc192aXNpYmxlKHZjKSkgewomIzQzOwkJaWYgKHBhci0mZ3Q7Yml0b3BzLSZndDtyb3RhdGVfZm9udCAmYW1wOyZhbXA7IHBhci0mZ3Q7Yml0b3BzLSZndDtyb3RhdGVfZm9udChpbmZvLCB2YykpIHsKJiM0MzsJCQlwYXItJmd0O3JvdGF0ZSA9IEZCX1JPVEFURV9VUjsKJiM0MzsJCQlzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlmb250X2RhdGFfcHV0KGRhdGEpOwogCiAJcmV0dXJuIHJldDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRm9udCBSb3RhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgc29tZSBsb2dpYyBhcm91bmQgZm9udCByb3RhdGlvbiwgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBgZmJjb25fZG9fc2V0X2ZvbnRgLiBUd28gaWRlbnRpY2FsIGJsb2NrcyBvZiBjb2RlIGFyZSBhZGRlZCB0aGF0IGludHJvZHVjZSBhIGNoZWNrIGZvciB2aXNpYmlsaXR5IGFuZCBjYWxsIGBwYXItJmd0O2JpdG9wcy0mZ3Q7cm90YXRlX2ZvbnRgIGlmIHRoZSBjb25zb2xlIGlzIHZpc2libGUuIFRoZW4gaXQmIzM5O3Mgc2V0dGluZyBgcGFyLSZndDtyb3RhdGVgIHRvIGBGQl9ST1RBVEVfVVJgIGFuZCBjYWxsaW5nIGBzZXRfYmxpdHRpbmdfdHlwZWAuCgpNeSBpbW1lZGlhdGUgY29uY2VybiwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHdoYXQgYHJvdGF0ZV9mb250YCBhY3R1YWxseSAqZG9lcyouIElzIGl0IGFsbG9jYXRpbmcgbWVtb3J5PyBDb3VsZCB0aGVyZSBiZSBhIHBvdGVudGlhbCBmb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSB3aXRoaW4gdGhhdCBmdW5jdGlvbj8gVGhlIGNvbW1lbnQgc3VnZ2VzdHMgYSBmb250IHJvdGF0aW9uIGJ1ZyBmaXgsIHdoaWNoIGNvdWxkIHZlcnkgd2VsbCBtZWFuIGEgY3Jhc2ggb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYHJvdGF0ZV9mb250YCBmdW5jdGlvbiBjb21wbGV0ZWx5IHRvIGFzc2VzcyB0aGUgcmlzay4gSSYjMzk7bGwgc3RhcnQgd2l0aCBhIHF1aWNrIGdyZXAgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQgYW5kIHNlZSBob3cgaXQmIzM5O3MgdXNlZCBlbHNld2hlcmUsIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHJlZCBmbGFncyBpbiBpdHMgaW1wbGVtZW50YXRpb24uIE1lbW9yeSBzYWZldHkgaXMgYWx3YXlzIGEgcHJpbWFyeSBjb25jZXJuIGluIGRyaXZlciBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyb3RhdGVfZm9udCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MTA4OD1zdGF0aWMgdm9pZCBmYmNvbl9pbml0KHN0cnVjdCB2Y19kYXRhICp2YywgYm9vbCBpbml0KVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTEyMjgtXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoxMjI5Olx0aWYgKHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQgXHUwMDI2XHUwMDI2IHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQoaW5mbywgdmMpKSB7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0xMjMwLVx0XHRwYXItXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTIxNDM9c3RhdGljIGJvb2wgZmJjb25fc3dpdGNoKHN0cnVjdCB2Y19kYXRhICp2Yylcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yMjE2LVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjIxNzpcdGlmIChwYXItXHUwMDNlYml0b3BzLVx1MDAzZXJvdGF0ZV9mb250IFx1MDAyNlx1MDAyNiBwYXItXHUwMDNlYml0b3BzLVx1MDAzZXJvdGF0ZV9mb250KGluZm8sIHZjKSkge1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjIxOC1cdFx0cGFyLVx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0yNDAwPXN0YXRpYyBpbnQgZmJjb25fZG9fc2V0X2ZvbnQoc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgdywgaW50IGgsIGludCBjaGFyY291bnQsXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQyOC1cdGlmIChjb25faXNfdmlzaWJsZSh2YykpIHtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI0Mjk6XHRcdGlmIChwYXItXHUwMDNlYml0b3BzLVx1MDAzZXJvdGF0ZV9mb250IFx1MDAyNlx1MDAyNiBwYXItXHUwMDNlYml0b3BzLVx1MDAzZXJvdGF0ZV9mb250KGluZm8sIHZjKSkge1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQzMC1cdFx0XHRwYXItXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI0NjktXHRpZiAoY29uX2lzX3Zpc2libGUodmMpKSB7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoyNDcwOlx0XHRpZiAocGFyLVx1MDAzZWJpdG9wcy1cdTAwM2Vyb3RhdGVfZm9udCBcdTAwMjZcdTAwMjYgcGFyLVx1MDAzZWJpdG9wcy1cdTAwM2Vyb3RhdGVfZm9udChpbmZvLCB2YykpIHtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI0NzEtXHRcdFx0cGFyLVx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0yNjQ0PXN0YXRpYyB2b2lkIGZiY29uX21vZGVjaGFuZ2VkKHN0cnVjdCBmYl9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI2NzctXHQgKi9cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI2Nzg6XHRpZiAocGFyLVx1MDAzZWJpdG9wcy1cdTAwM2Vyb3RhdGVfZm9udCBcdTAwMjZcdTAwMjYgcGFyLVx1MDAzZWJpdG9wcy1cdTAwM2Vyb3RhdGVfZm9udChpbmZvLCB2YykpIHtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI2NzktXHRcdHBhci1cdTAwM2Vyb3RhdGUgPSBGQl9ST1RBVEVfVVI7XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmg9NTk9c3RydWN0IGZiY29uX2JpdG9wcyB7XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmgtNzEtXHRpbnQgICgqdXBkYXRlX3N0YXJ0KShzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uaDo3MjpcdGludCAgKCpyb3RhdGVfZm9udCkoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2Y19kYXRhICp2Yyk7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uaC03My19O1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYz0zNjM9c3RhdGljIGNvbnN0IHN0cnVjdCBmYmNvbl9iaXRvcHMgY2N3X2ZiY29uX2JpdG9wcyA9IHtcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmMtMzY5LVx0LnVwZGF0ZV9zdGFydCA9IGNjd191cGRhdGVfc3RhcnQsXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmM6MzcwOlx0LnJvdGF0ZV9mb250ID0gZmJjb25fcm90YXRlX2ZvbnQsXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmMtMzcxLX07XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmM9MzQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJjb25fYml0b3BzIGN3X2ZiY29uX2JpdG9wcyA9IHtcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYy0zNTItXHQudXBkYXRlX3N0YXJ0ID0gY3dfdXBkYXRlX3N0YXJ0LFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmM6MzUzOlx0LnJvdGF0ZV9mb250ID0gZmJjb25fcm90YXRlX2ZvbnQsXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYy0zNTQtfTtcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtMTctXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmM6MTg6aW50IGZiY29uX3JvdGF0ZV9mb250KHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgdmNfZGF0YSAqdmMpXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtMTkte1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuaC0yMS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuaDoyMjppbnQgZmJjb25fcm90YXRlX2ZvbnQoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2Y19kYXRhICp2Yyk7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmgtMjMtXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmM9Mzk3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJjb25fYml0b3BzIHVkX2ZiY29uX2JpdG9wcyA9IHtcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYy00MDMtXHQudXBkYXRlX3N0YXJ0ID0gdWRfdXBkYXRlX3N0YXJ0LFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmM6NDA0Olx0LnJvdGF0ZV9mb250ID0gZmJjb25fcm90YXRlX2ZvbnQsXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYy00MDUtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExMAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBmYmNvbl9yb3RhdGVfZm9udGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBgZmJjb25fcm90YXRlX2ZvbnRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGZyYW1lYnVmZmVyIGNvbnNvbGUgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byBwaW4gZG93biB0aGUgY29yZSBmdW5jdGlvbiBvZiB0aGlzIHJvdXRpbmUuIElzIGl0IGFib3V0IHJlbmRlcmluZywgcmUtbWFwcGluZywgb3IgcG90ZW50aWFsbHkgYWx0ZXJpbmcgdGhlIGdseXBoIGFwcGVhcmFuY2UgYmFzZWQgb24gYSByb3RhdGlvbiBvciBwZXJzcGVjdGl2ZSBwYXJhbWV0ZXI/IEkmIzM5O20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIGNvbm5lY3QgaXQgdG8gdGhlIGxvdy1sZXZlbCBncmFwaGljcyBvcGVyYXRpb25zLiBJ4oCZbGwgYmUgbG9va2luZyB0byBzZWUgaWYgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSB2aWRlbyBjYXJkLCBmcmFtZWJ1ZmZlcnMsIG9yIGlmIGl0IGludGVyYWN0cyB3aXRoIHRoZSBzcGVjaWZpYyBmb250IGRhdGEgYmVpbmcgcmVuZGVyZWQuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgdGhpcyBpcyBoYW5kbGluZyBhIGZ1bmRhbWVudGFsIHRyYW5zZm9ybSBvZiB0aGUgY2hhcmFjdGVycyB0aGVtc2VsdmVzIG9yIGlmIGl0JiMzOTtzIG1vcmUgYWJvdXQgaG93IHRoZSBjb25zb2xlIGludGVycHJldHMgYW5kIGRpc3BsYXlzIHRoZW0gZ2l2ZW4gc29tZSB1bmRlcmx5aW5nIHJvdGF0aW9uIGNvbW1hbmRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYmNvbl9yb3RhdGVfZm9udCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtMTctXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmM6MTg6aW50IGZiY29uX3JvdGF0ZV9mb250KHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgdmNfZGF0YSAqdmMpXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtMTkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDQyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgdGV4dDoKCioqRGl2aW5nIGludG8gdGhlIGBmYmNvbl9yb3RhdGVfZm9udGAgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCB0aGUgc291cmNlIGNvZGUgZm9yIGBmYmNvbl9yb3RhdGVfZm9udGAg4oCTIHNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgaW1wbGVtZW50YXRpb24gd2l0aGluIGBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGZvbnQgcm90YXRpb24gd29ya3Mgd2l0aGluIHRoZSBmcmFtZWJ1ZmZlciBjb25zb2xlIGNvbnRleHQuIFRpbWUgdG8gYW5hbHl6ZSB0aGUgcm90YXRpb24gcm91dGluZSBhbmQgaXRzIGludGVncmF0aW9uIHdpdGggdGhlIGZyYW1lYnVmZmVyIGRldmljZSBkcml2ZXIgY29yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDE4Olx0aW50IGZiY29uX3JvdGF0ZV9mb250KHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgdmNfZGF0YSAqdmMpXG4gIDE5Olx0e1xuICAyMDpcdFx0c3RydWN0IGZiY29uX3BhciAqcGFyID0gaW5mby1cdTAwM2VmYmNvbl9wYXI7XG4gIDIxOlx0XHR1bnNpZ25lZCBjaGFyICpidWY7XG4gIDIyOlx0XHRpbnQgcmV0O1xuICAyMzpcdFxuICAyNDpcdFx0aWYgKHBhci1cdTAwM2VwLVx1MDAzZWZvbnRkYXRhID09IHBhci1cdTAwM2Vyb3RhdGVkLmZvbnRkYXRhIFx1MDAyNlx1MDAyNiBwYXItXHUwMDNlcm90YXRlID09IHBhci1cdTAwM2Vyb3RhdGVkLmJ1Zl9yb3RhdGUpXG4gIDI1Olx0XHRcdHJldHVybiAwO1xuICAyNjpcdFxuICAyNzpcdFx0cGFyLVx1MDAzZXJvdGF0ZWQuZm9udGRhdGEgPSBwYXItXHUwMDNlcC1cdTAwM2Vmb250ZGF0YTtcbiAgMjg6XHRcdHBhci1cdTAwM2Vyb3RhdGVkLmJ1Zl9yb3RhdGUgPSBwYXItXHUwMDNlcm90YXRlO1xuICAyOTpcdFxuICAzMDpcdFx0aWYgKGluZm8tXHUwMDNlZmJvcHMtXHUwMDNlZmJfc3luYylcbiAgMzE6XHRcdFx0aW5mby1cdTAwM2VmYm9wcy1cdTAwM2VmYl9zeW5jKGluZm8pO1xuICAzMjpcdFxuICAzMzpcdFx0YnVmID0gZm9udF9kYXRhX3JvdGF0ZShwYXItXHUwMDNlcm90YXRlZC5mb250ZGF0YSwgdmMtXHUwMDNldmNfZm9udC53aWR0aCxcbiAgMzQ6XHRcdFx0XHQgICAgICAgdmMtXHUwMDNldmNfZm9udC5oZWlnaHQsIHZjLVx1MDAzZXZjX2ZvbnQuY2hhcmNvdW50LFxuICAzNTpcdFx0XHRcdCAgICAgICBwYXItXHUwMDNlcm90YXRlZC5idWZfcm90YXRlLCBwYXItXHUwMDNlcm90YXRlZC5idWYsXG4gIDM2Olx0XHRcdFx0ICAgICAgIFx1MDAyNnBhci1cdTAwM2Vyb3RhdGVkLmJ1ZnNpemUpO1xuICAzNzpcdFx0aWYgKElTX0VSUihidWYpKSB7XG4gIDM4Olx0XHRcdHJldCA9IFBUUl9FUlIoYnVmKTtcbiAgMzk6XHRcdFx0Z290byBlcnJfa2ZyZWU7XG4gIDQwOlx0XHR9XG4gIDQxOlx0XG4gIDQyOlx0XHRwYXItXHUwMDNlcm90YXRlZC5idWYgPSBidWY7XG4gIDQzOlx0XG4gIDQ0Olx0XHRyZXR1cm4gMDtcbiAgNDU6XHRcbiAgNDY6XHRlcnJfa2ZyZWU6XG4gIDQ3Olx0XHRrZnJlZShwYXItXHUwMDNlcm90YXRlZC5idWYpO1xuICA0ODpcdFx0cGFyLVx1MDAzZXJvdGF0ZWQuYnVmID0gTlVMTDsgLyogY2xlYXIgaGVyZSB0byBhdm9pZCBvdXRwdXQgKi9cbiAgNDk6XHRcdHBhci1cdTAwM2Vyb3RhdGVkLmJ1ZnNpemUgPSAwO1xuICA1MDpcdFxuICA1MTpcdFx0cmV0dXJuIHJldDtcbiAgNTI6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqQW5hbHl6aW5nIGBmb250X2RhdGFfcm90YXRlYCoqCgpPa2F5LCBzbyBgZm9udF9kYXRhX3JvdGF0ZWAuLi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoaXMgZnVuY3Rpb24uIEJhc2VkIG9uIHRoZSBuYW1lLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgaXQmIzM5O3MgZ29pbmcgdG8gaW52b2x2ZSBzb21lIGtpbmQgb2YgZm9udCByb3RhdGlvbi4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcyAqaG93KiBpcyB0aGF0IGFjaGlldmVkPyBEb2VzIGl0IHByZS1hbGxvY2F0ZSBhIHNwZWNpZmljIGFtb3VudCBvZiBtZW1vcnkgZm9yIHRoZSByb3RhdGVkIGZvbnQ/IERvZXMgaXQgY2FsY3VsYXRlIHRoZSByZXF1aXJlZCBtZW1vcnkgb24gdGhlIGZseT8gVGhlIG5hbWUgYWxzbyBzdWdnZXN0cyBpdCBoYW5kbGVzIGZvbnQgZGF0YSwgc28gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB3aGF0IGtpbmQgb2YgZm9udCBkYXRhIGlzIGJlaW5nIHJvdGF0ZWQ6IGFyZSB3ZSB0YWxraW5nIGJpdG1hcCBmb250cywgdmVjdG9yIGZvbnRzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBsb29rIGF0IHRoZSBjb2RlIHNob3VsZCBjbGVhciB1cCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlsczogbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJvdGF0aW9uIGFsZ29yaXRobSBhcmUga2V5IGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZGl2aW5nIGludG8gdGhlIGBmb250X2RhdGFfcm90YXRlYCBmdW5jdGlvbiBpdHNlbGYuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbnRfZGF0YV9yb3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYz0xOD1pbnQgZmJjb25fcm90YXRlX2ZvbnQoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2Y19kYXRhICp2Yylcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtMzItXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmM6MzM6XHRidWYgPSBmb250X2RhdGFfcm90YXRlKHBhci1cdTAwM2Vyb3RhdGVkLmZvbnRkYXRhLCB2Yy1cdTAwM2V2Y19mb250LndpZHRoLFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTM0LVx0XHRcdCAgICAgICB2Yy1cdTAwM2V2Y19mb250LmhlaWdodCwgdmMtXHUwMDNldmNfZm9udC5jaGFyY291bnQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NTUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqU2VhcmNoaW5nIGZvciBhIE1pc3NpbmcgRnVuY3Rpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgZXhwZWN0aW5nIHRvIGZpbmQgYGZvbnRfZGF0YV9yb3RhdGVgIGluIGBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvYCwgYnV0IGl0JiMzOTtzIG5vdCB0aGVyZS4gSG1tLCB0aGF0JiMzOTtzIHVudXN1YWwuIEl0JiMzOTtzIHRpbWUgdG8gYnJvYWRlbiB0aGUgc2VhcmNoLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uICphY3R1YWxseSogbGl2ZXMgd2l0aGluIHRoZSBjb2RlYmFzZS4gTGV0JiMzOTtzIGZpcmUgdXAgYSBnbG9iYWwgc2VhcmNoIGFuZCBzZWUgd2hlcmUgdGhpcyBiZWFzdCBpcyBoaWRpbmcuIFRpbWUgdG8gY2FzdCBhIHdpZGVyIG5ldCBhbmQgZmlndXJlIG91dCBpdHMgdHJ1ZSBsb2NhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9udF9kYXRhX3JvdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmM9MTg9aW50IGZiY29uX3JvdGF0ZV9mb250KHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgdmNfZGF0YSAqdmMpXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTMyLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jOjMzOlx0YnVmID0gZm9udF9kYXRhX3JvdGF0ZShwYXItXHUwMDNlcm90YXRlZC5mb250ZGF0YSwgdmMtXHUwMDNldmNfZm9udC53aWR0aCxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYy0zNC1cdFx0XHQgICAgICAgdmMtXHUwMDNldmNfZm9udC5oZWlnaHQsIHZjLVx1MDAzZXZjX2ZvbnQuY2hhcmNvdW50LFxuLS1cbmluY2x1ZGUvbGludXgvZm9udC5oPTExMj12b2lkIGZvbnRfZ2x5cGhfcm90YXRlXzI3MChjb25zdCB1bnNpZ25lZCBjaGFyICpnbHlwaCwgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LFxuaW5jbHVkZS9saW51eC9mb250LmgtMTEzLVx0XHRcdCAgIHVuc2lnbmVkIGNoYXIgKm91dCk7XG5pbmNsdWRlL2xpbnV4L2ZvbnQuaDoxMTQ6dW5zaWduZWQgY2hhciAqZm9udF9kYXRhX3JvdGF0ZShmb250X2RhdGFfdCAqZmQsIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCxcbmluY2x1ZGUvbGludXgvZm9udC5oLTExNS1cdFx0XHRcdHVuc2lnbmVkIGludCBjaGFyY291bnQsIHVuc2lnbmVkIGludCBzdGVwcyxcbi0tXG5saWIvZm9udHMvZm9udF9yb3RhdGUuYz0xNzU9RVhQT1JUX1NZTUJPTF9HUEwoZm9udF9nbHlwaF9yb3RhdGVfMjcwKTtcbi0tXG5saWIvZm9udHMvZm9udF9yb3RhdGUuYy0xNzctLyoqXG5saWIvZm9udHMvZm9udF9yb3RhdGUuYzoxNzg6ICogZm9udF9kYXRhX3JvdGF0ZSAtIFJvdGF0ZSBmb250IGRhdGEgYnkgbXVsdGlwbGVzIG9mIDkwwrBcbmxpYi9mb250cy9mb250X3JvdGF0ZS5jLTE3OS0gKiBAZmQ6IFRoZSBmb250IGRhdGEgdG8gcm90YXRlXG4tLVxubGliL2ZvbnRzL2ZvbnRfcm90YXRlLmMtMjAzLSAqL1xubGliL2ZvbnRzL2ZvbnRfcm90YXRlLmM6MjA0OnVuc2lnbmVkIGNoYXIgKmZvbnRfZGF0YV9yb3RhdGUoZm9udF9kYXRhX3QgKmZkLCB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsXG5saWIvZm9udHMvZm9udF9yb3RhdGUuYy0yMDUtXHRcdFx0XHR1bnNpZ25lZCBpbnQgY2hhcmNvdW50LCB1bnNpZ25lZCBpbnQgc3RlcHMsXG4tLVxubGliL2ZvbnRzL2ZvbnRfcm90YXRlLmMtMjc0LX1cbmxpYi9mb250cy9mb250X3JvdGF0ZS5jOjI3NTpFWFBPUlRfU1lNQk9MX0dQTChmb250X2RhdGFfcm90YXRlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI0NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIGBmb250X2RhdGFfcm90YXRlYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGZvbnRfZGF0YV9yb3RhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBxdWlja2x5IGdldCBhIGhpZ2gtbGV2ZWwgdW5kZXJzdGFuZGluZy4gV2hhdCBpcyB0aGlzIGZ1bmN0aW9uICpzdXBwb3NlZCogdG8gZG8/IFRoZSBuYW1lIHN1Z2dlc3RzIHNvbWV0aGluZyByZWxhdGVkIHRvIGZvbnQgZGF0YSBhbmQgcm90YXRpb24uIE15IGJyYWluIGltbWVkaWF0ZWx5IHN0YXJ0cyBjb25uZWN0aW5nIHRoaXMgdG8gcG9zc2libGUgdXNlczogcmVuZGVyaW5nIHJvdGF0ZWQgdGV4dCwgZ2VuZXJhdGluZyByb3RhdGVkIGZvbnQgZ2x5cGhzIGZvciBkaWZmZXJlbnQgY2hhcmFjdGVyIHNldHMsIG9yIHBvdGVudGlhbGx5IGZvciB0cmFuc2Zvcm1hdGlvbnMgaW4gdHlwb2dyYXBoeSBsaWJyYXJpZXMuCgpJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgb2YgdGhlIG51YW5jZXMgYmFzZWQgb24gbXkgZXhwZXJpZW5jZS4gSXMgdGhpcyBhIHNpbXBsZSByb3RhdGlvbiBvZiBhIGJpdG1hcCwgb3IgaXMgaXQgZGVhbGluZyB3aXRoIHZlY3RvciBmb250IGRhdGEsIHdoaWNoIGludHJvZHVjZXMgYSB3aG9sZSBkaWZmZXJlbnQgc2V0IG9mIGNvbXBsZXhpdHk/IEFyZSB3ZSB0YWxraW5nIGFib3V0IHJvdGF0aW5nIGluZGl2aWR1YWwgZ2x5cGhzLCBvciBhbiBlbnRpcmUgc3RyaW5nIG9mIHRleHQ/IFRoZSBpbXBsZW1lbnRhdGlvbiB3aWxsIG1ha2UgYSBiaWcgZGlmZmVyZW5jZSwgY29uc2lkZXJpbmcgdGhlIG1hbnkgYXNwZWN0cyBvZiB0aGUgZm9udCBkYXRhLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcHMgd291bGQgYmU6CgoqICAgKipMb29rIGF0IHRoZSBmdW5jdGlvbiBzaWduYXR1cmU6KiogV2hhdCBhcmUgdGhlIGlucHV0cz8gQXJlIHdlIGRlYWxpbmcgd2l0aCBjaGFyYWN0ZXIgY29kZXMsIGZvbnQgZGF0YSBzdHJ1Y3R1cmVzIChsaWtlIGBUVEZfRm9udGAsIGBGVF9GYWNlYCBldGMuKSwgcm90YXRpb24gYW5nbGUgaW4gZGVncmVlcyBvciByYWRpYW5zPyBXaGF0IGFib3V0IHRoZSBvdXRwdXQgZm9ybWF0PyBJcyB0aGlzIGluLXBsYWNlIG1hbmlwdWxhdGlvbiwgb3IgZG9lcyBpdCByZXR1cm4gYSBuZXcgcm90YXRlZCBkYXRhIHN0cnVjdHVyZT8KKiAgICoqSW5zcGVjdCB0aGUgY29yZSBhbGdvcml0aG06KiogSeKAmW0gZ29pbmcgdG8gc2NhbiB0aGUgY29kZSBmb3IgdGhlIGNlbnRyYWwgb3BlcmF0aW9ucy4gQXJlIHRoZXkgbGV2ZXJhZ2luZyByb3RhdGlvbiBtYXRyaWNlcz8gQml0d2lzZSBvcGVyYXRpb25zIGZvciBiaXRtYXAgcm90YXRpb24/IEJlemllciBjdXJ2ZSB0cmFuc2Zvcm1hdGlvbnM/IFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZ2V0IHRoZSByZWFsIHN0b3J5LgoqICAgKipDb25zaWRlciBlZGdlIGNhc2VzOioqIEkmIzM5O20gYXV0b21hdGljYWxseSB0aGlua2luZyBhYm91dCBoYW5kbGluZyBvZiBkaWZmZXJlbnQgZm9udCBkYXRhIHN0cnVjdHVyZXMsIGdseXBocyB3aXRoIGNvbXBsZXggY29udG91cnMsIGVtcHR5IGdseXBocywgYW50aS1hbGlhc2luZyB0ZWNobmlxdWVzLCBhbmQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gQXJlIHRoZXJlIG9wdGltaXphdGlvbnMgZm9yIGNvbW1vbiByb3RhdGlvbiBhbmdsZXMgKDkwLCAxODAgZGVncmVlcyk/CiogICAqKkludmVzdGlnYXRlIGRlcGVuZGVuY2llczoqKiBJJiMzOTtsbCBiZSBjdXJpb3VzIGFib3V0IHdoYXQgbGlicmFyaWVzIG9yIGZ1bmN0aW9ucyB0aGlzIGZ1bmN0aW9uIGNhbGxzLiBEb2VzIGl0IHVzZSBhIGxpbmVhciBhbGdlYnJhIGxpYnJhcnk/IEFyZSB0aGVyZSBhbnkgbWVtb3J5IGFsbG9jYXRpb24gb3IgZGVhbGxvY2F0aW9uIHJvdXRpbmVzIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgcG90ZW50aWFsIHRocmVhZGluZyBjb25jZXJucz8KCkJhc2VkIG9uIHRob3NlIGluaXRpYWwgY2hlY2tzLCBJIGNhbiBmb3JtIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlLCBhbmQgc3RhcnQgdG8ganVkZ2UgdGhlIHF1YWxpdHksIGVmZmljaWVuY3ksIGFuZCBwb3RlbnRpYWwgbGltaXRhdGlvbnMgb2YgdGhpcyBgZm9udF9kYXRhX3JvdGF0ZWAgZnVuY3Rpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIGlmIGl0JiMzOTtzIHdlbGwtZGVzaWduZWQsIGVhc3kgdG8gbWFpbnRhaW4sIGFuZCBkb2VzIGl0cyBqb2IgY29ycmVjdGx5IGluIGFsbCBzY2VuYXJpb3MuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9mb250cy9mb250X3JvdGF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDQ6XHR1bnNpZ25lZCBjaGFyICpmb250X2RhdGFfcm90YXRlKGZvbnRfZGF0YV90ICpmZCwgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LFxuIDIwNTpcdFx0XHRcdFx0dW5zaWduZWQgaW50IGNoYXJjb3VudCwgdW5zaWduZWQgaW50IHN0ZXBzLFxuIDIwNjpcdFx0XHRcdFx0dW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgKmJ1ZnNpemUpXG4gMjA3Olx0e1xuIDIwODpcdFx0Y29uc3QgdW5zaWduZWQgY2hhciAqc3JjID0gZm9udF9kYXRhX2J1ZihmZCk7XG4gMjA5Olx0XHR1bnNpZ25lZCBpbnQgc19jZWxsc2l6ZSA9IGZvbnRfZ2x5cGhfc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAyMTA6XHRcdHVuc2lnbmVkIGludCBkX2NlbGxzaXplLCBpO1xuIDIxMTpcdFx0dW5zaWduZWQgY2hhciAqZHN0O1xuIDIxMjpcdFx0c2l6ZV90IHNpemU7XG4gMjEzOlx0XG4gMjE0Olx0XHRzdGVwcyAlPSA0O1xuIDIxNTpcdFxuIDIxNjpcdFx0c3dpdGNoIChzdGVwcykge1xuIDIxNzpcdFx0Y2FzZSAwOlxuIDIxODpcdFx0Y2FzZSAyOlxuIDIxOTpcdFx0XHRkX2NlbGxzaXplID0gc19jZWxsc2l6ZTtcbiAyMjA6XHRcdFx0YnJlYWs7XG4gMjIxOlx0XHRjYXNlIDE6XG4gMjIyOlx0XHRjYXNlIDM6XG4gMjIzOlx0XHRcdGRfY2VsbHNpemUgPSBmb250X2dseXBoX3NpemUoaGVpZ2h0LCB3aWR0aCk7IC8qIGZsaXAgd2lkdGgvaGVpZ2h0ICovXG4gMjI0Olx0XHRcdGJyZWFrO1xuIDIyNTpcdFx0fVxuIDIyNjpcdFxuIDIyNzpcdFx0aWYgKGNoZWNrX211bF9vdmVyZmxvdyhjaGFyY291bnQsIGRfY2VsbHNpemUsIFx1MDAyNnNpemUpKVxuIDIyODpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiAyMjk6XHRcbiAyMzA6XHRcdGlmICghYnVmIHx8ICFidWZzaXplIHx8IHNpemUgXHUwMDNlICpidWZzaXplKSB7XG4gMjMxOlx0XHRcdGRzdCA9IGttYWxsb2NfYXJyYXkoY2hhcmNvdW50LCBkX2NlbGxzaXplLCBHRlBfS0VSTkVMKTtcbiAyMzI6XHRcdFx0aWYgKCFkc3QpXG4gMjMzOlx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gMjM0Olx0XG4gMjM1Olx0XHRcdGtmcmVlKGJ1Zik7XG4gMjM2Olx0XHRcdGJ1ZiA9IGRzdDtcbiAyMzc6XHRcdFx0aWYgKGJ1ZnNpemUpXG4gMjM4Olx0XHRcdFx0KmJ1ZnNpemUgPSBzaXplO1xuIDIzOTpcdFx0fSBlbHNlIHtcbiAyNDA6XHRcdFx0ZHN0ID0gYnVmO1xuIDI0MTpcdFx0fVxuIDI0MjpcdFxuIDI0MzpcdFx0c3dpdGNoIChzdGVwcykge1xuIDI0NDpcdFx0Y2FzZSAwOlxuIDI0NTpcdFx0XHRtZW1jcHkoZHN0LCBzcmMsIHNpemUpO1xuIDI0NjpcdFx0XHRicmVhaztcbiAyNDc6XHRcdGNhc2UgMTpcbiAyNDg6XHRcdFx0bWVtc2V0KGRzdCwgMCwgc2l6ZSk7XG4gMjQ5Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNoYXJjb3VudDsgJiM0MzsmIzQzO2kpIHtcbiAyNTA6XHRcdFx0XHRfX2ZvbnRfZ2x5cGhfcm90YXRlXzkwKHNyYywgd2lkdGgsIGhlaWdodCwgZHN0KTtcbiAyNTE6XHRcdFx0XHRzcmMgJiM0Mzs9IHNfY2VsbHNpemU7XG4gMjUyOlx0XHRcdFx0ZHN0ICYjNDM7PSBkX2NlbGxzaXplO1xuIDI1MzpcdFx0XHR9XG4gMjU0Olx0XHRcdGJyZWFrO1xuIDI1NTpcdFx0Y2FzZSAyOlxuIDI1NjpcdFx0XHRtZW1zZXQoZHN0LCAwLCBzaXplKTtcbiAyNTc6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY2hhcmNvdW50OyAmIzQzOyYjNDM7aSkge1xuIDI1ODpcdFx0XHRcdF9fZm9udF9nbHlwaF9yb3RhdGVfMTgwKHNyYywgd2lkdGgsIGhlaWdodCwgZHN0KTtcbiAyNTk6XHRcdFx0XHRzcmMgJiM0Mzs9IHNfY2VsbHNpemU7XG4gMjYwOlx0XHRcdFx0ZHN0ICYjNDM7PSBkX2NlbGxzaXplO1xuIDI2MTpcdFx0XHR9XG4gMjYyOlx0XHRcdGJyZWFrO1xuIDI2MzpcdFx0Y2FzZSAzOlxuIDI2NDpcdFx0XHRtZW1zZXQoZHN0LCAwLCBzaXplKTtcbiAyNjU6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY2hhcmNvdW50OyAmIzQzOyYjNDM7aSkge1xuIDI2NjpcdFx0XHRcdF9fZm9udF9nbHlwaF9yb3RhdGVfMjcwKHNyYywgd2lkdGgsIGhlaWdodCwgZHN0KTtcbiAyNjc6XHRcdFx0XHRzcmMgJiM0Mzs9IHNfY2VsbHNpemU7XG4gMjY4Olx0XHRcdFx0ZHN0ICYjNDM7PSBkX2NlbGxzaXplO1xuIDI2OTpcdFx0XHR9XG4gMjcwOlx0XHRcdGJyZWFrO1xuIDI3MTpcdFx0fVxuIDI3MjpcdFxuIDI3MzpcdFx0cmV0dXJuIGJ1ZjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc4NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBGb250IFJvdGF0aW9uIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBgZm9udF9kYXRhX3JvdGF0ZWAsIHdoaWNoIGZyb20gdGhlIGxvb2tzIG9mIGl0LCBoYW5kbGVzIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBmb3Igcm90YXRlZCBmb250IGRhdGEuIFNwZWNpZmljYWxseSwgaXQgdXNlcyBlaXRoZXIgYG1lbWNweWAgb3IgYSBjb21iaW5hdGlvbiBvZiBgbWVtc2V0YCBhbmQgc29tZSBgX19mb250X2dseXBoX3JvdGF0ZV8qYCBmdW5jdGlvbnMsIGRlcGVuZGluZyBvbiB0aGUgY2lyY3Vtc3RhbmNlcy4KClRoZSBrZXkgY2hhbmdlIGlzIHRoaXMgYWRkaXRpb24gaW4gYGZiY29uX2RvX3NldF9mb250YC4gSXQgY2hlY2tzIGlmIHRoZSB2aXJ0dWFsIGNvbnNvbGUgaXMgdmlzaWJsZSBhbmQsIGlmIHNvLCBjYWxscyBgcm90YXRlX2ZvbnRgIHdoaWNoLCBhZ2FpbiwgYWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyBhIGJ1ZmZlci4gVGhlIGluaXRpYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGludHJvZHVjdGlvbiBoYXMgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4KCkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBhIGJ1ZyB3aGVyZSB0aGUgYHJvdGF0ZV9mb250YCBmdW5jdGlvbiB3YXNuJiMzOTt0IGJlaW5nIGNhbGxlZCB3aGVuIGEgZm9udCB3YXMgc2V0LiBUaGF0JiMzOTtzIHdoYXQmIzM5O3MgcGlxdWluZyBteSBpbnRlcmVzdC4gSWYgYHJvdGF0ZV9mb250YCAqd2FzbiYjMzk7dCogY2FsbGVkLCB0aGVuIEkgbmVlZCB0byBjb25zaWRlciB3aGF0IHN0YXRlIGBwYXItJmd0O3JvdGF0ZWQuYnVmYCB3b3VsZCBiZSBsZWZ0IGluLiBXYXMgaXQgbGVmdCB1bmluaXRpYWxpemVkIG9yIGV2ZW4gTlVMTD8KCklmIGBwYXItJmd0O3JvdGF0ZWQuYnVmYCB3YXMgaW5kZWVkIE5VTEwgaW4gdGhlIGJ1Z2d5IHN0YXRlLCB0aGF0IHdvdWxkJiMzOTt2ZSByZXN1bHRlZCBpbiBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggd2UmIzM5O2QgdHlwaWNhbGx5IGV4cGVjdCB0byBiZSBjYXVnaHQgYnkgS0FTQU4gb3IgYSBnZW5lcmFsIHByb3RlY3Rpb24gZmF1bHQsIHdoaWNoIGlzIHdoeSBpdCBpcyB1bmxpa2VseSBpdCB3ZW50IHVubm90aWNlZC4gU28gdGhlIG1vcmUgaW50ZXJlc3RpbmcgcG9zc2liaWxpdHkgaXMgdGhhdCBpdCB3YXMgdW5pbml0aWFsaXplZC4gSW4gdGhhdCBzY2VuYXJpbywgS01TQU4gc2hvdWxkIGhhdmUgc3BvdHRlZCB0aGF0LgoKU28sIHNpbmNlIGl0IHdhcyBmaXhlZCwgbGV0JiMzOTtzIHNlZSB3aGVyZSBgcGFyLSZndDtyb3RhdGVkLmJ1ZmAgaXMgdXNlZCB0byBzZWUgaWYgd2UgY2FuIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBmaXggd2FzIG5lZWRlZCwgb3IgaWYgd2UgY2FuIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgZm9yIGZ1cnRoZXIgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYXItXHUwMDNlcm90YXRlZC5idWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTc3Mz1zdGF0aWMgdm9pZCBmYmNvbl9yZWxlYXNlKHN0cnVjdCBmYl9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTc4OS0jaWZkZWYgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT05cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjc5MDpcdFx0a2ZyZWUocGFyLVx1MDAzZXJvdGF0ZWQuYnVmKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTc5MS0jZW5kaWZcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0xMDE0PXN0YXRpYyBjb25zdCBjaGFyICpmYmNvbl9zdGFydHVwKHZvaWQpXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTA0NC0jaWZkZWYgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT05cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjEwNDU6XHRwYXItXHUwMDNlcm90YXRlZC5idWZfcm90YXRlID0gLTE7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0xMDQ2LSNlbmRpZlxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI2NDQ9c3RhdGljIHZvaWQgZmJjb25fbW9kZWNoYW5nZWQoc3RydWN0IGZiX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjY3MS1cdC8qXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoyNjcyOlx0ICogUmVidWlsZCBwYXItXHUwMDNlcm90YXRlZC5idWYgZm9yIHRoZSBuZXcgcm90YXRpb24gbm93IHRoYXQgYml0b3BzIGhhdmVcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI2NzMtXHQgKiBzd2l0Y2hlZC4gIFRoZSBuZXcgcHV0Y3MvY3Vyc29yIG9wcyByZWFkIHRoaXMgYnVmZmVyOyBpZiBpdCBpcyBzdGlsbFxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYz05OD1zdGF0aWMgaW5saW5lIHZvaWQgY2N3X3B1dGNzX2FsaWduZWQoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyxcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmMtMTA4LVx0d2hpbGUgKGNudC0tKSB7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmM6MTA5Olx0XHRzcmMgPSBwYXItXHUwMDNlcm90YXRlZC5idWYgJiM0MzsgKHNjcl9yZWFkdyhzLS0pIFx1MDAyNiBjaGFybWFzaykgKiBjZWxsc2l6ZTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYy0xMTAtXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jPTEyOT1zdGF0aWMgdm9pZCBjY3dfcHV0Y3Moc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyxcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmMtMTQ0LVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jOjE0NTpcdGlmICghcGFyLVx1MDAzZXJvdGF0ZWQuYnVmKVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jLTE0Ni1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYz0yMjE9c3RhdGljIHZvaWQgY2N3X2N1cnNvcihzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLCBib29sIGVuYWJsZSxcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmMtMjM0LVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jOjIzNTpcdGlmICghcGFyLVx1MDAzZXJvdGF0ZWQuYnVmKVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jLTIzNi1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYy0yNDEtXHRhdHRyaWJ1dGUgPSBnZXRfYXR0cmlidXRlKGluZm8sIGMpO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jOjI0MjpcdHNyYyA9IHBhci1cdTAwM2Vyb3RhdGVkLmJ1ZiAmIzQzOyAoKGMgXHUwMDI2IGNoYXJtYXNrKSAqICh3ICogdmMtXHUwMDNldmNfZm9udC53aWR0aCkpO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jLTI0My1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYz04Mz1zdGF0aWMgaW5saW5lIHZvaWQgY3dfcHV0Y3NfYWxpZ25lZChzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLFxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jLTkzLVx0d2hpbGUgKGNudC0tKSB7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYzo5NDpcdFx0c3JjID0gcGFyLVx1MDAzZXJvdGF0ZWQuYnVmICYjNDM7IChzY3JfcmVhZHcocyYjNDM7JiM0MzspIFx1MDAyNiBjaGFybWFzaykgKiBjZWxsc2l6ZTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jLTk1LVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jPTExND1zdGF0aWMgdm9pZCBjd19wdXRjcyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLFxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jLTEyOS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jOjEzMDpcdGlmICghcGFyLVx1MDAzZXJvdGF0ZWQuYnVmKVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmMtMTMxLVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmM9MjA0PXN0YXRpYyB2b2lkIGN3X2N1cnNvcihzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLCBib29sIGVuYWJsZSxcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYy0yMTctXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYzoyMTg6XHRpZiAoIXBhci1cdTAwM2Vyb3RhdGVkLmJ1ZilcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jLTIxOS1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jLTIyNC1cdGF0dHJpYnV0ZSA9IGdldF9hdHRyaWJ1dGUoaW5mbywgYyk7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYzoyMjU6XHRzcmMgPSBwYXItXHUwMDNlcm90YXRlZC5idWYgJiM0MzsgKChjIFx1MDAyNiBjaGFybWFzaykgKiAodyAqIHZjLVx1MDAzZXZjX2ZvbnQud2lkdGgpKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jLTIyNi1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmM9MTg9aW50IGZiY29uX3JvdGF0ZV9mb250KHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgdmNfZGF0YSAqdmMpXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTIzLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jOjI0Olx0aWYgKHBhci1cdTAwM2VwLVx1MDAzZWZvbnRkYXRhID09IHBhci1cdTAwM2Vyb3RhdGVkLmZvbnRkYXRhIFx1MDAyNlx1MDAyNiBwYXItXHUwMDNlcm90YXRlID09IHBhci1cdTAwM2Vyb3RhdGVkLmJ1Zl9yb3RhdGUpXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtMjUtXHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYy0yNy1cdHBhci1cdTAwM2Vyb3RhdGVkLmZvbnRkYXRhID0gcGFyLVx1MDAzZXAtXHUwMDNlZm9udGRhdGE7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmM6Mjg6XHRwYXItXHUwMDNlcm90YXRlZC5idWZfcm90YXRlID0gcGFyLVx1MDAzZXJvdGF0ZTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYy0yOS1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtMzQtXHRcdFx0ICAgICAgIHZjLVx1MDAzZXZjX2ZvbnQuaGVpZ2h0LCB2Yy1cdTAwM2V2Y19mb250LmNoYXJjb3VudCxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYzozNTpcdFx0XHQgICAgICAgcGFyLVx1MDAzZXJvdGF0ZWQuYnVmX3JvdGF0ZSwgcGFyLVx1MDAzZXJvdGF0ZWQuYnVmLFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jOjM2Olx0XHRcdCAgICAgICBcdTAwMjZwYXItXHUwMDNlcm90YXRlZC5idWZzaXplKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYy0zNy1cdGlmIChJU19FUlIoYnVmKSkge1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYy00MS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYzo0MjpcdHBhci1cdTAwM2Vyb3RhdGVkLmJ1ZiA9IGJ1ZjtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYy00My1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtNDYtZXJyX2tmcmVlOlxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jOjQ3Olx0a2ZyZWUocGFyLVx1MDAzZXJvdGF0ZWQuYnVmKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYzo0ODpcdHBhci1cdTAwM2Vyb3RhdGVkLmJ1ZiA9IE5VTEw7IC8qIGNsZWFyIGhlcmUgdG8gYXZvaWQgb3V0cHV0ICovXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmM6NDk6XHRwYXItXHUwMDNlcm90YXRlZC5idWZzaXplID0gMDtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYy01MC1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYz04ND1zdGF0aWMgaW5saW5lIHZvaWQgdWRfcHV0Y3NfYWxpZ25lZChzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLFxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jLTk0LVx0d2hpbGUgKGNudC0tKSB7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYzo5NTpcdFx0c3JjID0gcGFyLVx1MDAzZXJvdGF0ZWQuYnVmICYjNDM7IChzY3JfcmVhZHcocy0tKSBcdTAwMjYgY2hhcm1hc2spICogY2VsbHNpemU7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYy05Ni1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYz0xMTU9c3RhdGljIGlubGluZSB2b2lkIHVkX3B1dGNzX3VuYWxpZ25lZChzdHJ1Y3QgdmNfZGF0YSAqdmMsXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmMtMTI5LVx0d2hpbGUgKGNudC0tKSB7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYzoxMzA6XHRcdHNyYyA9IHBhci1cdTAwM2Vyb3RhdGVkLmJ1ZiAmIzQzOyAoc2NyX3JlYWR3KHMtLSkgXHUwMDI2IGNoYXJtYXNrKSAqIGNlbGxzaXplO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmMtMTMxLVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jPTE1MD1zdGF0aWMgdm9pZCB1ZF9wdXRjcyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLFxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jLTE2Ni1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jOjE2NzpcdGlmICghcGFyLVx1MDAzZXJvdGF0ZWQuYnVmKVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmMtMTY4LVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmM9MjUwPXN0YXRpYyB2b2lkIHVkX2N1cnNvcihzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLCBib29sIGVuYWJsZSxcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYy0yNjQtXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYzoyNjU6XHRpZiAoIXBhci1cdTAwM2Vyb3RhdGVkLmJ1ZilcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jLTI2Ni1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jLTI3MS1cdGF0dHJpYnV0ZSA9IGdldF9hdHRyaWJ1dGUoaW5mbywgYyk7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYzoyNzI6XHRzcmMgPSBwYXItXHUwMDNlcm90YXRlZC5idWYgJiM0MzsgKChjIFx1MDAyNiBjaGFybWFzaykgKiAodyAqIHZjLVx1MDAzZXZjX2ZvbnQuaGVpZ2h0KSk7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYy0yNzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDI1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzM4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgYGZiY29uX2RvX3NldF9mb250YCBQYXRjaDogT09CIFJlYWQgaW4gUm90YXRlZCBGb250IEJ1ZmZlcioqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggaW50cm9kdWNlcyBjYWxscyB0byBgcm90YXRlX2ZvbnRgIHdpdGhpbiBgZmJjb25fZG9fc2V0X2ZvbnRgLiBNeSBwcmltYXJ5IGNvbmNlcm4gaW5pdGlhbGx5IHdhcyB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBkdWUgdG8gYSBtaXNtYXRjaCBiZXR3ZWVuIGZvbnQgZGF0YSBhbmQgdGhlIHJvdGF0ZWQgYnVmZmVyIChgcGFyLSZndDtyb3RhdGVkLmJ1ZmApLiBJZiBgcm90YXRlX2ZvbnRgIGlzbiYjMzk7dCBjYWxsZWQsIGFuZCBmb250IGRpbWVuc2lvbnMgKHdpZHRoLCBoZWlnaHQsIGBjaGFyY291bnRgKSBjaGFuZ2UsIGBwYXItJmd0O3JvdGF0ZWQuYnVmYCBtaWdodCBiZSBvdXQgb2Ygc3luYy4KClRoZSBjb3JlIGlzc3VlIHNlZW1zIHRvIGFyaXNlIHdoZW4gYGNoYXJjb3VudGAgY2hhbmdlcywgc3BlY2lmaWNhbGx5IGZyb20gMjU2IHRvIDUxMiAob3IgdmljZS12ZXJzYSksIGltcGFjdGluZyB0aGUgdW5kZXJseWluZyBidWZmZXIgc2l6ZS4gSWYgdGhlIGZvbnQgZG91YmxlcyBpbiBjaGFyYWN0ZXIgY291bnQsIGJ1dCBgcGFyLSZndDtyb3RhdGVkLmJ1ZmAgaXNuJiMzOTt0IHVwZGF0ZWQgYnkgYHJvdGF0ZV9mb250YCwgdGhlbiB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIHNvdXJjZSBmb3IgdGhlIGNoYXJhY3RlciBkYXRhIHdpdGhpbiBgY3dfcHV0Y3NgIG9yIGB1ZF9wdXRjc2Agd2lsbCB1c2UgdGhlICpuZXcqIGBjaGFyY291bnRgIGJ1dCBzdGlsbCByZWFkIGZyb20gdGhlICpvbGQqIChzbWFsbGVyKSBidWZmZXIuIElmIHRoZSBgY2hhcmNvdW50YCBpbmNyZWFzZXMgZnJvbSAyNTYgdG8gNTEyLCB0aGVuIGFuIGFjY2VzcyB0byBhIGNoYXJhY3RlciBwYXN0IDI1NSBiZWNvbWVzIGFuIE9PQiByZWFkLiBUaGUgYGMgJmFtcDsgY2hhcm1hc2tgIG9wZXJhdGlvbiB3aWxsIGFsbG93IHJlYWRzIHVwIHRvIDUxMSwgYW5kIHRoZSByZXN1bHRpbmcgYHNyY2AgcG9pbnRlciB3b3VsZCBwb2ludCBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIDI1Ni1jaGFyYWN0ZXIgYnVmZmVyLiBUaGUgb2Zmc2V0IGBwYXItJmd0O3JvdGF0ZWQuYnVmICYjNDM7ICgoYyAmYW1wOyBjaGFybWFzaykgKiBjZWxsc2l6ZSlgIGNhbiB0aGVuIHJlYWQgb3V0IG9mIHRoZSBib3VuZHMuCgpNeSBwcmltYXJ5IGNvbmNlcm4gd2FzIGlmIHRoZXJlIHdhcyBhbiBvcHBvcnR1bml0eSBmb3IgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgYnV0IEtBU0FOIHNob3VsZCBoYW5kbGUgdGhpcyBwZXJmZWN0bHkuIFNpbmNlIGBwYXItJmd0O3JvdGF0ZWQuYnVmYCBpcyBhIGhlYXAgYnVmZmVyIGFsbG9jYXRlZCB2aWEgYGttYWxsb2NfYXJyYXlgLCB0aGUgYWNjZXNzIHZpb2xhdGlvbiBpcyBhbiBPT0IgcmVhZCwgd2hpY2ggS0FTQU4gd291bGQgZGV0ZWN0LiBLQVNBTiBwb2lzb25zIHRoZSBhcmVhIHRvIGNhdGNoIHRoaXMuCgpJIGR1ZyBkZWVwZXIgaW50byB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgd2l0aGluIGBmb250X2RhdGFfcm90YXRlYC4gSXQgaW5pdGlhbGl6ZXMgdGhlIGJ1ZmZlciBjb21wbGV0ZWx5IHVzaW5nIGBtZW1jcHlgIG9yIGBtZW1zZXRgICYjNDM7IGBfX2ZvbnRfZ2x5cGhfcm90YXRlXypgLiBUaGlzIGVuc3VyZWQgdGhlIGJ1ZmZlciBpcyAqYWx3YXlzKiBpbml0aWFsaXplZCwgZWxpbWluYXRpbmcgdGhlIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMuIElmIGByb3RhdGVfZm9udGAgaXMgbm90IGNhbGxlZCwgdGhlbiB0aGUgb2xkIGZvbnQgZGF0YSBwZXJzaXN0cyBpbiB0aGUgbWVtb3J5LgoKSSB2ZXJpZmllZCB0aGUgY29kZSBhbmQgZGlzY292ZXJlZCBhIGNyaXRpY2FsIHBvaW50OiBgZm9udF9kYXRhX3JvdGF0ZWAgKm9ubHkqIHVwZGF0ZXMgYCpidWZzaXplYCB3aGVuIGl0IHJlYWxsb2NhdGVzLiBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlIGZvbnQgc2hyaW5rcyAoZS5nLiwgZnJvbSA1MTIgdG8gMjU2IGNoYXJhY3RlcnMpIGFuZCB0aGUgYnVmZmVyIGlzICpub3QqIHJlYWxsb2NhdGVkLCBgKmJ1ZnNpemVgIG1haW50YWlucyB0aGUgKmxhcmdlciogc2l6ZSBmcm9tIHRoZSBwcmV2aW91cyBhbGxvY2F0aW9uLiBUaGUgY29kZSB3aWxsIHJldXNlIHRoZSBleGlzdGluZyBidWZmZXIsIGFuZCBvbmx5IGluaXRpYWxpemUgYSBzbWFsbGVyIGNodW5rLCBzYXkgMjU2IGNoYXJhY3RlcnMuIFRoaXMgbWVhbnMgdGhhdCBpZiBpdCBzdWJzZXF1ZW50bHkgYXR0ZW1wdHMgdG8gcmVhZCBmcm9tIHRoZSAqc21hbGxlciogZm9udCwgc2F5IGBjaGFyY291bnQgPSAyNTZgLCB0aGUgY29kZSBtYXkgYmUgYWJsZSB0byByZWFkIHNvbWUgb2YgdGhlIHByZXZpb3VzIGNvbnRlbnQsIHdoaWNoIG1lYW5zIGl0IHdpbGwgcmVhZCBvbGQgZm9udCBkYXRhLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgcmVpbmZvcmNlcyB0aGF0IEtBU0FOIGNhdGNoZXMgdGhlIE9PQiBpc3N1ZXMuIElmIGEgbmV3IGxhcmdlciBmb250IGlzIHVzZWQsIGFuZCBpdCBpcyBub3QgcmVhbGxvY2F0ZWQsIHRoZW4gdGhlIHJlYWQgKndpbGwqIGJlIE9PQiwgYnV0IGlzIHN0aWxsIGluaXRpYWxpemVkLCBzbyBpdCBkb2VzbiYjMzk7dCBjYXVzZSBhbnkgcHJvYmxlbXMuCgpUaGUga2V5IHRha2Vhd2F5IGlzIHRoYXQsIHdoaWxlIHRoZSBjb2RlIG1pZ2h0IHBvdGVudGlhbGx5IHJlYWQgZnJvbSBhIHNlY3Rpb24gdGhhdCAqd2FzKiBpbml0aWFsaXplZCBieSBhbiAqb2xkZXIqIGZvbnQgKGlmIHRoZSBjdXJyZW50IGZvbnQgaXMgc21hbGxlciksIHRoaXMgd2lsbCBuZXZlciBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIEtBU0FOIGlzIHN1ZmZpY2llbnQgZm9yIGNhdGNoaW5nIE9PQiByZWFkcyBkdWUgdG8gYSBtaXNtYXRjaCBiZXR3ZWVuIGZvbnQgc2l6ZSBhbmQgYnVmZmVyIHNpemUuIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldF9ibGl0dGluZ190eXBlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9NjQxPXN0YXRpYyB2b2lkIGZiY29uX3ByZXBhcmVfbG9nbyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLFxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTczMC0jaWZkZWYgQ09ORklHX0ZCX1RJTEVCTElUVElOR1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6NzMxOnN0YXRpYyB2b2lkIHNldF9ibGl0dGluZ190eXBlKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8pXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy03MzIte1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTc0NT1zdGF0aWMgaW50IGZiY29uX2ludmFsaWRfY2hhcmNvdW50KHN0cnVjdCBmYl9pbmZvICppbmZvLCB1bnNpZ25lZCBjaGFyY291bnQpXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtNzU1LSNlbHNlXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzo3NTY6c3RhdGljIHZvaWQgc2V0X2JsaXR0aW5nX3R5cGUoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbylcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTc1Ny17XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9ODI3PXN0YXRpYyBpbnQgY29uMmZiX2FjcXVpcmVfbmV3aW5mbyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLFxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTgzNi1cdGlmICh2YylcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjgzNzpcdFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtODM4LVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTkxMj1zdGF0aWMgaW50IHNldF9jb24yZmJfbWFwKGludCB1bml0LCBpbnQgbmV3aWR4LCBpbnQgdXNlcilcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy05NDItXHR9IGVsc2UgaWYgKHZjKSB7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzo5NDM6XHRcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTk0NC1cdH1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0xMDE0PXN0YXRpYyBjb25zdCBjaGFyICpmYmNvbl9zdGFydHVwKHZvaWQpXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTA1My1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjEwNTQ6XHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0xMDU1LVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTEwODg9c3RhdGljIHZvaWQgZmJjb25faW5pdChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGJvb2wgaW5pdClcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0xMTc1LVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MTE3NjpcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTExNzctXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTIzMC1cdFx0cGFyLVx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjEyMzE6XHRcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTEyMzItXHR9XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MjE0Mz1zdGF0aWMgYm9vbCBmYmNvbl9zd2l0Y2goc3RydWN0IHZjX2RhdGEgKnZjKVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTIyMTMtXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoyMjE0Olx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjIxNS1cdHBhci1cdTAwM2VjdXJzb3JfcmVzZXQgPSAxO1xuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTIyMTgtXHRcdHBhci1cdTAwM2Vyb3RhdGUgPSBGQl9ST1RBVEVfVVI7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoyMjE5Olx0XHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yMjIwLVx0fVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI0MDA9c3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCxcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNDMwLVx0XHRcdHBhci1cdTAwM2Vyb3RhdGUgPSBGQl9ST1RBVEVfVVI7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoyNDMxOlx0XHRcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI0MzItXHRcdH1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNDcxLVx0XHRcdHBhci1cdTAwM2Vyb3RhdGUgPSBGQl9ST1RBVEVfVVI7XG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoyNDcyOlx0XHRcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI0NzMtXHRcdH1cbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0yNjQ0PXN0YXRpYyB2b2lkIGZiY29uX21vZGVjaGFuZ2VkKHN0cnVjdCBmYl9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI2NjgtXHRwID0gXHUwMDI2ZmJfZGlzcGxheVt2Yy1cdTAwM2V2Y19udW1dO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjY2OTpcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI2NzAtXG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjY3OS1cdFx0cGFyLVx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI2ODA6XHRcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI2ODEtXHR9XG4tLVxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MjcwND1zdGF0aWMgdm9pZCBmYmNvbl9zZXRfYWxsX3ZjcyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNzI4LVx0XHRwID0gXHUwMDI2ZmJfZGlzcGxheVt2Yy1cdTAwM2V2Y19udW1dO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjcyOTpcdFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjczMC1cdFx0dmFyX3RvX2Rpc3BsYXkocCwgXHUwMDI2aW5mby1cdTAwM2V2YXIsIGluZm8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgyMwoJCQkJCQkJb3V0cHV0OiAxNzQKCQkJCQkJCXRob3VnaHRzOiAzMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJ1ZyoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBUaGUgZnVuY3Rpb24gYHNldF9ibGl0dGluZ190eXBlYCBpcyBqdXN0IHNldHRpbmcgdXAgdGhlIHJlbmRlcmluZyBmdW5jdGlvbiBwb2ludGVycyDigJMgdGhpbmdzIGxpa2UgYHZjLSZndDt2Y19zdy0mZ3Q7Y29uX3B1dGNgIGFuZCBzbyBvbi4gTm8gbWVtb3J5IGFsbG9jYXRpb24sIG5vIGNvcHlpbmcgdG8gdXNlciBzcGFjZSwgbm90aGluZyBsaWtlIHRoYXQuIFRoZSBoZWFydCBvZiB0aGUgcHJvYmxlbSBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBvdXQtb2YtYm91bmRzIChPT0IpIHJlYWQgb24gdGhlIGhlYXAgd2hlbiB0ZXh0IGlzIHJlbmRlcmVkIHRvIHRoZSBmcmFtZWJ1ZmZlci4gS0FTQU4gc2hvdWxkIGJlIGFibGUgdG8gY2F0Y2ggdGhpcyBlYXNpbHkuCgpIZXJlJiMzOTtzIHRoZSBicmVha2Rvd24sIGFzIEkgc2VlIGl0OgoKMS4gIFRoZSBwYXRjaCBpcyBpbnRyb2R1Y2luZyBjYWxscyB0byBgcm90YXRlX2ZvbnRgIHdpdGhpbiBgZmJjb25fZG9fc2V0X2ZvbnRgIHdoZW4gYHZjX2hpX2ZvbnRfbWFza2AgZ2V0cyBtb2RpZmllZC4KMi4gIGB2Y19oaV9mb250X21hc2tgIGNoYW5nZXMgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGZvbnQmIzM5O3MgY2hhcmFjdGVyIGNvdW50IHN3aXRjaGVzIGJldHdlZW4gMjU2IGFuZCA1MTIgY2hhcmFjdGVycy4KMy4gIFRoZSBjcml0aWNhbCBvdmVyc2lnaHQgaXMgdGhhdCBpZiBgcm90YXRlX2ZvbnRgIGlzbiYjMzk7dCBjYWxsZWQsIGBwYXItJmd0O3JvdGF0ZWQuYnVmYCBkb2VzbiYjMzk7dCBnZXQgcmVhbGxvY2F0ZWQgdG8gdGhlIHNpemUgcmVxdWlyZWQgZm9yIHRoZSAqbmV3KiBmb250LCB3aGljaCBpcyA1MTIgY2hhcmFjdGVycy4KNC4gIENvbnNlcXVlbnRseSwgd2hlbiBgZmJjb25gIGdvZXMgdG8gcmVuZGVyIHRleHQsIGl0JiMzOTtzIHVzaW5nIHRoZSAqbmV3KiBjaGFyYWN0ZXIgY291bnQgKDUxMikgdG8gaW5kZXggaW50byBgcGFyLSZndDtyb3RhdGVkLmJ1ZmAsIHdoaWNoIHdhcyBpbml0aWFsbHkgYWxsb2NhdGVkIGZvciB0aGUgKm9sZCogY291bnQgKDI1NikuCjUuICBUaGlzIGlzIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb24gdGhlIGhlYXAuIFdlJiMzOTtyZSBhY2Nlc3NpbmcgbWVtb3J5IG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgYWxsb2NhdGVkIGJ1ZmZlci4KNi4gIFRoYXQmIzM5O3MgZXhhY3RseSB3aGF0IEtBU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoIOKAkyBoZWFwIG91dC1vZi1ib3VuZHMgcmVhZHMuCjcuICBDcnVjaWFsbHksIHRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgYW55IGluZm9ybWF0aW9uIGxlYWsgdG8gdXNlciBzcGFjZSBpbnZvbHZlZCBpbiB0aGlzLgo4LiAgU28sIEtNU0FOIGlzbiYjMzk7dCByZWxldmFudCBoZXJlLiBUaGUgcHJvYmxlbSBpcyBhIHNpbXBsZSBPT0IgcmVhZCB0aGF0IEtBU0FOIHNob3VsZCBoYW5kbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBmYmNvbl9kb19zZXRfZm9udGAgd2hlcmUgY2hhbmdpbmcgdGhlIGZvbnQgY2hhcmFjdGVyIGNvdW50IChlLmcuLCBmcm9tIDI1NiB0byA1MTIpIHdpdGhvdXQgdXBkYXRpbmcgdGhlIHJvdGF0ZWQgZm9udCBidWZmZXIgKGBwYXItXHUwMDNlcm90YXRlZC5idWZgKSBsZWFkcyB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQuIFdoZW4gYGZiY29uYCByZW5kZXJzIHRleHQsIGl0IHVzZXMgdGhlIG5ldyBjaGFyYWN0ZXIgY291bnQgdG8gaW5kZXggaW50byB0aGUgb2xkLCBzbWFsbGVyIGJ1ZmZlciwgcmVzdWx0aW5nIGluIGEgaGVhcCBPT0IgcmVhZC4gVGhpcyBpcyBhIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBpc3N1ZSB0aGF0IGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWsgdG8gdXNlciBzcGFjZSBpbnZvbHZlZCwgYXMgdGhlIGJ1ZmZlciBpcyBmdWxseSBpbml0aWFsaXplZCB1cCB0byBpdHMgYWxsb2NhdGVkIHNpemUuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBmYmNvbl9kb19zZXRfZm9udGAgd2hlcmUgY2hhbmdpbmcgdGhlIGZvbnQgY2hhcmFjdGVyIGNvdW50IChlLmcuLCBmcm9tIDI1NiB0byA1MTIpIHdpdGhvdXQgdXBkYXRpbmcgdGhlIHJvdGF0ZWQgZm9udCBidWZmZXIgKGBwYXItXHUwMDNlcm90YXRlZC5idWZgKSBsZWFkcyB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQuIFdoZW4gYGZiY29uYCByZW5kZXJzIHRleHQsIGl0IHVzZXMgdGhlIG5ldyBjaGFyYWN0ZXIgY291bnQgdG8gaW5kZXggaW50byB0aGUgb2xkLCBzbWFsbGVyIGJ1ZmZlciwgcmVzdWx0aW5nIGluIGEgaGVhcCBPT0IgcmVhZC4gVGhpcyBpcyBhIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBpc3N1ZSB0aGF0IGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWsgdG8gdXNlciBzcGFjZSBpbnZvbHZlZCwgYXMgdGhlIGJ1ZmZlciBpcyBmdWxseSBpbml0aWFsaXplZCB1cCB0byBpdHMgYWxsb2NhdGVkIHNpemUuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDc6NDkuMjU2OTczNzA5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0ODYzMDA3MzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZCXCIsXG4gICAgXCJGQl9WSVJUVUFMXCIsXG4gICAgXCJGUkFNRUJVRkZFUl9DT05TT0xFXCIsXG4gICAgXCJGUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmJjb25fc2V0X2ZvbnRcIixcbiAgICBcImZiY29uX3NldF9kZWZfZm9udFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGZiY29uX2RvX3NldF9mb250YCB3aGVyZSBjaGFuZ2luZyB0aGUgZm9udCBjaGFyYWN0ZXIgY291bnQgKGUuZy4sIGZyb20gMjU2IHRvIDUxMikgd2l0aG91dCB1cGRhdGluZyB0aGUgcm90YXRlZCBmb250IGJ1ZmZlciAoYHBhci1cXHUwMDNlcm90YXRlZC5idWZgKSBsZWFkcyB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQuIFdoZW4gYGZiY29uYCByZW5kZXJzIHRleHQsIGl0IHVzZXMgdGhlIG5ldyBjaGFyYWN0ZXIgY291bnQgdG8gaW5kZXggaW50byB0aGUgb2xkLCBzbWFsbGVyIGJ1ZmZlciwgcmVzdWx0aW5nIGluIGEgaGVhcCBPT0IgcmVhZC4gVGhpcyBpcyBhIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBpc3N1ZSB0aGF0IGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWsgdG8gdXNlciBzcGFjZSBpbnZvbHZlZCwgYXMgdGhlIGJ1ZmZlciBpcyBmdWxseSBpbml0aWFsaXplZCB1cCB0byBpdHMgYWxsb2NhdGVkIHNpemUuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBmcmFtZWJ1ZmZlciBjb25zb2xlIGZvbnQgc2V0dGluZyBsb2dpYyAoZmJjb25fZG9fc2V0X2ZvbnQpIHRvIGhhbmRsZSBmb250IHJvdGF0aW9uIHdoZW4gdGhlIGNvbnNvbGUgaXMgdmlzaWJsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGNvcmUgc3Vic3lzdGVtIChmYmNvbikgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBpb2N0bHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA3OjQ5LjI1Njk3OTU2OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1NTk4NzcxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDRkNTg4ZTIwMmU0M2Y4M2E3ZTg5NGY3NzA3NDBiODhjOGYzNjI2OGVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDI6MDc6NDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uY1xcbmluZGV4IDIzYjNjNTM2ZDUzZDEuLmM3NGE0OTA1YjhlMmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmNcXG4rKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uY1xcbkBAIC0yNDI1LDYgKzI0MjUsMTMgQEAgc3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCxcXG4gXFx0ZWxzZSBpZiAoIXZjLVxcdTAwM2V2Y19oaV9mb250X21hc2sgXFx1MDAyNlxcdTAwMjYgY2hhcmNvdW50ID09IDUxMilcXG4gXFx0XFx0c2V0X3ZjX2hpX2ZvbnQodmMsIHRydWUpO1xcbiBcXG4rXFx0aWYgKGNvbl9pc192aXNpYmxlKHZjKSkge1xcbitcXHRcXHRpZiAocGFyLVxcdTAwM2ViaXRvcHMtXFx1MDAzZXJvdGF0ZV9mb250IFxcdTAwMjZcXHUwMDI2IHBhci1cXHUwMDNlYml0b3BzLVxcdTAwM2Vyb3RhdGVfZm9udChpbmZvLCB2YykpIHtcXG4rXFx0XFx0XFx0cGFyLVxcdTAwM2Vyb3RhdGUgPSBGQl9ST1RBVEVfVVI7XFxuK1xcdFxcdFxcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbiBcXHRpZiAocmVzaXplKSB7XFxuIFxcdFxcdGludCBjb2xzLCByb3dzO1xcbiBcXG5AQCAtMjQ1OSw2ICsyNDY2LDEzIEBAIHN0YXRpYyBpbnQgZmJjb25fZG9fc2V0X2ZvbnQoc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgdywgaW50IGgsIGludCBjaGFyY291bnQsXFxuIFxcdGVsc2UgaWYgKCFvbGRfaGlfZm9udF9tYXNrIFxcdTAwMjZcXHUwMDI2IHZjLVxcdTAwM2V2Y19oaV9mb250X21hc2spXFxuIFxcdFxcdHNldF92Y19oaV9mb250KHZjLCBmYWxzZSk7XFxuIFxcbitcXHRpZiAoY29uX2lzX3Zpc2libGUodmMpKSB7XFxuK1xcdFxcdGlmIChwYXItXFx1MDAzZWJpdG9wcy1cXHUwMDNlcm90YXRlX2ZvbnQgXFx1MDAyNlxcdTAwMjYgcGFyLVxcdTAwM2ViaXRvcHMtXFx1MDAzZXJvdGF0ZV9mb250KGluZm8sIHZjKSkge1xcbitcXHRcXHRcXHRwYXItXFx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcXG4rXFx0XFx0XFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdGZvbnRfZGF0YV9wdXQoZGF0YSk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowNzo1MC41MTM5MzIxNjhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MTc1MTE0MTY2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGQlwiLFxuICAgIFwiRkJfVklSVFVBTFwiLFxuICAgIFwiRlJBTUVCVUZGRVJfQ09OU09MRVwiLFxuICAgIFwiRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZiY29uX3NldF9mb250XCIsXG4gICAgXCJmYmNvbl9zZXRfZGVmX2ZvbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBmcmFtZWJ1ZmZlciBjb25zb2xlIGZvbnQgc2V0dGluZyBsb2dpYyAoZmJjb25fZG9fc2V0X2ZvbnQpIHRvIGhhbmRsZSBmb250IHJvdGF0aW9uIHdoZW4gdGhlIGNvbnNvbGUgaXMgdmlzaWJsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGNvcmUgc3Vic3lzdGVtIChmYmNvbikgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBpb2N0bHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRkNTg4ZTIwMmU0M2Y4M2E3ZTg5NGY3NzA3NDBiODhjOGYzNjI2OGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwMjowNzo0NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jIGIvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmNcbmluZGV4IDIzYjNjNTM2ZDUzZDEuLmM3NGE0OTA1YjhlMmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uY1xuKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmNcbkBAIC0yNDI1LDYgKzI0MjUsMTMgQEAgc3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCxcbiBcdGVsc2UgaWYgKCF2Yy1cdTAwM2V2Y19oaV9mb250X21hc2sgXHUwMDI2XHUwMDI2IGNoYXJjb3VudCA9PSA1MTIpXG4gXHRcdHNldF92Y19oaV9mb250KHZjLCB0cnVlKTtcbiBcbitcdGlmIChjb25faXNfdmlzaWJsZSh2YykpIHtcbitcdFx0aWYgKHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQgXHUwMDI2XHUwMDI2IHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQoaW5mbywgdmMpKSB7XG4rXHRcdFx0cGFyLVx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcbitcdFx0XHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XG4rXHRcdH1cbitcdH1cbitcbiBcdGlmIChyZXNpemUpIHtcbiBcdFx0aW50IGNvbHMsIHJvd3M7XG4gXG5AQCAtMjQ1OSw2ICsyNDY2LDEzIEBAIHN0YXRpYyBpbnQgZmJjb25fZG9fc2V0X2ZvbnQoc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgdywgaW50IGgsIGludCBjaGFyY291bnQsXG4gXHRlbHNlIGlmICghb2xkX2hpX2ZvbnRfbWFzayBcdTAwMjZcdTAwMjYgdmMtXHUwMDNldmNfaGlfZm9udF9tYXNrKVxuIFx0XHRzZXRfdmNfaGlfZm9udCh2YywgZmFsc2UpO1xuIFxuK1x0aWYgKGNvbl9pc192aXNpYmxlKHZjKSkge1xuK1x0XHRpZiAocGFyLVx1MDAzZWJpdG9wcy1cdTAwM2Vyb3RhdGVfZm9udCBcdTAwMjZcdTAwMjYgcGFyLVx1MDAzZWJpdG9wcy1cdTAwM2Vyb3RhdGVfZm9udChpbmZvLCB2YykpIHtcbitcdFx0XHRwYXItXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xuK1x0XHRcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcbitcdFx0fVxuK1x0fVxuK1xuIFx0Zm9udF9kYXRhX3B1dChkYXRhKTtcbiBcbiBcdHJldHVybiByZXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowNzo1MC41MTU4NjkwOThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzIzNzM1ODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgZmJjb24uYyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCdzIHRvdWNoZWQgYGRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyBhcmUgd2l0aGluIHRoZSBgZmJjb25fZG9fc2V0X2ZvbnRgIGZ1bmN0aW9uLiBMb29raW5nIGF0IHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlIHRoZXkndmUgYWRkZWQgdGhpcyBjb25kaXRpb25hbCBjaGVjazpcblxuYGBgY1xuXHRpZiAoY29uX2lzX3Zpc2libGUodmMpKSB7XG5cdFx0aWYgKHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQgXHUwMDI2XHUwMDI2IHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQoaW5mbywgdmMpKSB7XG5cdFx0XHRwYXItXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xuXHRcdFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xuXHRcdH1cblx0fVxuYGBgXG5cbi4uLmFuZCB0aGlzIHNuaXBwZXQgaXMgcHJlc2VudCBpbiB0d28gbG9jYXRpb25zIGluc2lkZSBvZiBgZmJjb25fZG9fc2V0X2ZvbnRgLiBOb3csIGZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGlzIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gaG93IHRoZSBmcmFtZWJ1ZmZlciBjb25zb2xlIGhhbmRsZXMgZm9udCBzZXR0aW5nLiBHaXZlbiB0aGF0IGBmYmNvbl9kb19zZXRfZm9udGAgaXMgdGhlIHRhcmdldCwgYW5kIGBmYmNvbi5jYCBoYXMgYmVlbiBkaXJlY3RseSBlZGl0ZWQsIHRoaXMgaXMgZGVmaW5pdGVseSBhIHJlYWNoYWJsZSBjb2RlIHBhdGguIEdpdmVuIGl0cyByZWxldmFuY2UgdG8gZm9udCBzZXR0aW5ncywgaXQncyB2ZXJ5IGxpa2VseSB0byBiZSB3b3J0aCBmdXp6aW5nLCBhbmQgSSBzaG91bGQgc2VlIGlmIEkgY2FuIGZpbmQgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBgZmJjb24uY2AgYW5kIGhvdyBpdCdzIGVuYWJsZWQuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdHJpZ2dlcnMgdGhpcyBgcm90YXRlX2ZvbnRgIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGZpcnN0IHBsYWNlLCBidXQgdGhlIGNvbmRpdGlvbmFsIGNoZWNrLCBhbmQgdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGJsaXR0aW5nIHR5cGVzLCBzaG91bGQgYmUgZ29vZCBwbGFjZXMgdG8gc3RhcnQgdGhlIGZ1enppbmcgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA3OjU0LjgzOTYwODAwN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTQzNTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYmNvbi5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvTWFrZWZpbGU9MTU9aWZlcSAoJChDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSkseSlcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvTWFrZWZpbGU6MTY6ZmIteVxcdFxcdFxcdFxcdCAgKz0gZmJjb24ubyBiaXRibGl0Lm8gc29mdGN1cnNvci5vXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL01ha2VmaWxlLTE3LWlmZXEgKCQoQ09ORklHX0ZCX1RJTEVCTElUVElORykseSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDc6NTQuOTM5MDQ5Nzg3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzNjg2MTEzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgaXM6XG5cbioqRXhhbWluaW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGNvbmZpZyBhbmQgc2VlIGBGUkFNRUJVRkZFUl9DT05TT0xFYCBpcyBzZXQuIE15IG5leHQgc3RlcCBpcyBhdXRvbWF0aWMg4oCTIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgaXRlbSdzIHBsYWNlIGluIHRoZSBicm9hZGVyIGNvbmZpZ3VyYXRpb24uIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBqdXN0IGtub3dpbmcgdGhlIHN0YXRlIG9mIG9uZSBjb25maWcgb3B0aW9uIGlzIHJhcmVseSBlbm91Z2ggdG8gZHJhdyBhbnkgdmFsaWQgY29uY2x1c2lvbnMuIFdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSByZWx5IG9uIGl0PyBBcmUgdGhlcmUgYW55IG9wdGlvbnMgdGhpcyBvbmUgZGVwZW5kcyBvbj8gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzLCBvciBsYWNrIHRoZXJlb2YsIG9mIGBGUkFNRUJVRkZFUl9DT05TT0xFYCB3aWxsIGRldGVybWluZSB3aGF0IG90aGVyIGl0ZW1zIEkgbWF5IGhhdmUgdG8gY29uc2lkZXIgZHVyaW5nIHRoZSBuZXh0IHBoYXNlcyBvZiBkZWJ1Z2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MDYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowNzo1OS4yNzU5MTQ0MzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk2OTQ2ODYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGUkFNRUJVRkZFUl9DT05TT0xFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowNzo1OS4zNDU2MTc5MTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODQ4OTcyMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEZyYW1lYnVmZmVyIENvbnNvbGUgRHJpdmVycyoqXG5cblJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byBmaW5kIHRoZSByZWxldmFudCBjb2RlLCBhbmQgYmFzZWQgb24gZXhwZXJpZW5jZSwgYEZSQU1FQlVGRkVSX0NPTlNPTEVgIGlzIHRoZSBrZXl3b3JkIEknbSBhZnRlci4gTm93LCB3aGVyZSB3b3VsZCB0aGUgZHJpdmVycyBmb3IgdGhhdCBsaWtlbHkgcmVzaWRlPyBUaGUgbG9naWNhbCBwbGFjZSBpcyB1bmRlciB0aGUgYGRyaXZlcnMvdmlkZW8vYCBkaXJlY3RvcnkgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFRoYXQncyB0aGUgYnJvYWQgc3Ryb2tlcyB2aWRlbyBkcml2ZXIgc2VjdGlvbiwgc28gdGhhdCdzIHdoZXJlIEknbGwgc3RhcnQgbG9va2luZy4gQ29uc2lkZXJpbmcgaG93IGNvbnNvbGUgZHJpdmVycyBpbnRlcmFjdCB3aXRoIHRoZSBmcmFtZWJ1ZmZlciwgSSdsbCBhbHNvIGNoZWNrIGBkcml2ZXJzL3ZpZGVvL2NvbnNvbGUvYC4gSXQncyBhIGJpdCBtb3JlIHNwZWNpZmljIGFuZCBtaWdodCBjb250YWluIG1vcmUgZm9jdXNlZCBpbXBsZW1lbnRhdGlvbnMsIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCByZWxldmFudCBoZWFkZXIgZmlsZXMgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ2xsIHNlYXJjaCBib3RoIGFyZWFzIG1ldGhvZGljYWxseS4gVGhhdCdzIHRoZSBwbGFuLiBMZXQncyBzZWUgd2hhdCB3ZSB0dXJuIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTE1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDg6MDIuMTk0NTkzMDM0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MTEwMjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGUkFNRUJVRkZFUl9DT05TT0xFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmlkZW8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnPTQ3PWNvbmZpZyBEVU1NWV9DT05TT0xFX1JPV1NcXG4tLVxcbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnLTU3LVxcbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnOjU4OmNvbmZpZyBGUkFNRUJVRkZFUl9DT05TT0xFXFxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWctNTktXFx0Ym9vbCBcXFwiRnJhbWVidWZmZXIgQ29uc29sZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWctNjctXFxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWc6Njg6Y29uZmlnIEZSQU1FQlVGRkVSX0NPTlNPTEVfTEVHQUNZX0FDQ0VMRVJBVElPTlxcbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkVuYWJsZSBsZWdhY3kgZmJjb24gaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGNvZGVcXFwiXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZy04Ny1cXG5kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZzo4ODpjb25maWcgRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWVxcbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnLTg5LSAgICAgICBib29sIFxcXCJNYXAgdGhlIGNvbnNvbGUgdG8gdGhlIHByaW1hcnkgZGlzcGxheSBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZy0xMDMtXFxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWc6MTA0OmNvbmZpZyBGUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OXFxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWctMTA1LSAgICAgICBib29sIFxcXCJGcmFtZWJ1ZmZlciBDb25zb2xlIFJvdGF0aW9uXFxcIlxcbi0tXFxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWctMTEzLVxcbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnOjExNDpjb25maWcgRlJBTUVCVUZGRVJfQ09OU09MRV9ERUZFUlJFRF9UQUtFT1ZFUlxcbmRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnLTExNS1cXHRib29sIFxcXCJGcmFtZWJ1ZmZlciBDb25zb2xlIERlZmVycmVkIFRha2VvdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODowMi4yNjI3MDg5MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODkzNjkwMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25zb2xlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGUgdmlkZW8gY29uc29sZSBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGlzIGtlcm5lbC4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgYGRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8ganVtcCBpbiBhcm91bmQgbGluZSA1OC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGJhc2ljIGZlYXR1cmUgZGVmaW5pdGlvbnMgaW4gdGhpcyBzZWN0aW9uLCBsaWtlbHkgcmVsYXRpbmcgdG8gdGhlIGNvcmUgY29uc29sZSBkcml2ZXIgaXRzZWxmLCBtYXliZSBvcHRpb25zIGZvciBzZWxlY3RpbmcgZGVmYXVsdCBtb2RlcyBvciBoYW5kbGluZyBkaWZmZXJlbnQgdHlwZXMgb2YgaGFyZHdhcmUuIEnigJltIGd1ZXNzaW5nIGl04oCZcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZ2V0IGFuIG92ZXJ2aWV3IG9mIHdoYXTigJlzIGF2YWlsYWJsZSBiZWZvcmUgbG9va2luZyBhdCBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBmb2xsb3cuIEnigJltIHRoaW5raW5nIEkgY2FuIGZpbmQgc29tZSBvZiB0aGUgY29yZSB2YXJpYWJsZXMgb3Igb3B0aW9ucyBiZWluZyBzZXQgaGVyZSB0aGF0IHdpbGwgcHJvYmFibHkgYmUgcmVsZXZhbnQgdG8gb3RoZXIgYXNwZWN0cyBvZiB0aGUgdmlkZW8gc3RhY2sgYXMgd2VsbC4gSXQgY291bGQgYmUgdXNlZnVsIGZvciBmaW5kaW5nIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY5NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA4OjA2LjA1MjA4MDYwOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzc5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHRcXHRkZWZhdWx0IDY0IGlmIFBBUklTQ1xcbiAgNTE6XFx0XFx0ZGVmYXVsdCAzMCBpZiBBUk1cXG4gIDUyOlxcdFxcdGRlZmF1bHQgMjVcXG4gIDUzOlxcdFxcdGhlbHBcXG4gIDU0OlxcdFxcdCAgT24gUEEtUklTQywgdGhlIGRlZmF1bHQgdmFsdWUgaXMgNjQsIHdoaWNoIHNob3VsZCBmaXQgYSAxMjgweDEwMjRcXG4gIDU1OlxcdFxcdCAgbW9uaXRvci5cXG4gIDU2OlxcdFxcdCAgU2VsZWN0IDI1IGlmIHlvdSB1c2UgYSA2NDB4NDgwIHJlc29sdXRpb24gYnkgZGVmYXVsdC5cXG4gIDU3OlxcdFxcbiAgNTg6XFx0Y29uZmlnIEZSQU1FQlVGRkVSX0NPTlNPTEVcXG4gIDU5OlxcdFxcdGJvb2wgXFxcIkZyYW1lYnVmZmVyIENvbnNvbGUgc3VwcG9ydFxcXCJcXG4gIDYwOlxcdFxcdGRlcGVuZHMgb24gRkJfQ09SRSBcXHUwMDI2XFx1MDAyNiAhVU1MXFxuICA2MTpcXHRcXHRkZWZhdWx0IERSTV9GQkRFVl9FTVVMQVRJT05cXG4gIDYyOlxcdFxcdHNlbGVjdCBWVF9IV19DT05TT0xFX0JJTkRJTkdcXG4gIDYzOlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgNjQ6XFx0XFx0c2VsZWN0IEZPTlRfU1VQUE9SVFxcbiAgNjU6XFx0XFx0aGVscFxcbiAgNjY6XFx0XFx0ICBMb3ctbGV2ZWwgZnJhbWVidWZmZXItYmFzZWQgY29uc29sZSBkcml2ZXIuXFxuICA2NzpcXHRcXG4gIDY4OlxcdGNvbmZpZyBGUkFNRUJVRkZFUl9DT05TT0xFX0xFR0FDWV9BQ0NFTEVSQVRJT05cXG4gIDY5OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBsZWdhY3kgZmJjb24gaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGNvZGVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA4OjA2LjA1MjE0NzA0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTI1Mzc5ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIEZyYW1lYnVmZmVyIENvbnNvbGUgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBGUkFNRUJVRkZFUl9DT05TT0xFYCBhbmQgdGhlIGJ1aWxkIHN5c3RlbSdzIGxvZ2ljLiBJdCdzIHRlbGxpbmcgbWUgdGhhdCB0aGlzIHBhcnRpY3VsYXIgY29uc29sZSBvcHRpb24gaGluZ2VzIGRpcmVjdGx5IG9uIHRoZSBwcmVzZW5jZSBvZiBgRkJfQ09SRWAsIGJ1dCBpdCBhbHNvICpjYW4ndCogYmUgZW5hYmxlZCB3aGVuIHJ1bm5pbmcgdW5kZXIgVU1MLiBIbW0sIHRoYXQncyBub3Qgc3VycHJpc2luZywgYXMgVU1MIG9mdGVuIGRvZXNuJ3QgaGF2ZSBhIGZyYW1lYnVmZmVyIGF2YWlsYWJsZS4gTm93LCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBgRkJfQ09SRWAgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBkZWZpbmVzIHRoZSBjb3JlIGZyYW1lYnVmZmVyIHN1cHBvcnQsIHNpbmNlIHRoYXQncyBhIHByZXJlcXVpc2l0ZSBmb3IgYEZSQU1FQlVGRkVSX0NPTlNPTEVgLiBMZXQncyBzZWUgd2hhdCB0aGF0IGltcGxpZXMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIyMiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDg6MDkuNzQ0Njg5MDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzUyNjMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRkJfQ09SRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZpZGVvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvS2NvbmZpZy01LVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9LY29uZmlnOjY6Y29uZmlnIEZCX0NPUkVcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvS2NvbmZpZy03LVxcdHNlbGVjdCBWSURFT1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODowOS44NDgyMjAyMjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4MDAxNTAwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGcmFtZWJ1ZmZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgZnJhbWVidWZmZXIgY29yZSdzIGNvbmZpZ3VyYXRpb24gZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gaGVhZGluZyB0byBgZHJpdmVycy92aWRlby9mYmRldi9jb3JlL0tjb25maWdgIGFyb3VuZCBsaW5lIDYuIEknbSBhc3N1bWluZyB0aGF0J3Mgd2hlcmUgdGhlIHByaW1hcnkgRkJERVYgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBzZWUgdGhlIG1haW4gYENPTkZJR19GQmAgb3B0aW9uIGRlY2xhcmVkIHRoZXJlLCBhbG9uZyB3aXRoIHNvbWUgb2YgdGhlIG1vcmUgZnVuZGFtZW50YWwgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0cy4gRGVwZW5kaW5nIG9uIHdoYXQgSSBmaW5kLCB0aGlzIHdpbGwgaW5mb3JtIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgaG93IHRoZSBGQkRFViBzdWJzeXN0ZW0gaXMgYnVpbHQgYW5kIGNvbmZpZ3VyZWQgaW50byB0aGUga2VybmVsLiBJdOKAmXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBmcmFtZWJ1ZmZlcnMgYXJlIGVuYWJsZWQgYW5kLCBieSBleHRlbnNpb24sIGhvdyB0aGUgcmVzdCBvZiB0aGUgZ3JhcGhpY3Mgc3RhY2sgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0ODksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODoxMy40MjgyMzgyODlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIGZiZGV2IGNvcmUgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgRkJfQ09SRVxcbiAgIDc6XFx0XFx0c2VsZWN0IFZJREVPXFxuICAgODpcXHRcXHR0cmlzdGF0ZVxcbiAgIDk6XFx0XFxuICAxMDpcXHRjb25maWcgRkJfTk9USUZZXFxuICAxMTpcXHRcXHRib29sXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBGQl9ERVZJQ0VcXG4gIDE0OlxcdFxcdGJvb2wgXFxcIlByb3ZpZGUgbGVnYWN5IC9kZXYvZmIqIGRldmljZVxcXCJcXG4gIDE1OlxcdFxcdGRlcGVuZHMgb24gRkJfQ09SRVxcbiAgMTY6XFx0XFx0ZGVmYXVsdCBGQlxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRoZSBsZWdhY3kgL2Rldi9mYiogZGV2aWNlIGZpbGUgYW5kXFxuICAxOTpcXHRcXHQgIGludGVyZmFjZXMgd2l0aGluIHN5c2ZzIGFuZCBwcm9jZnMuIEl0IGlzIG9ubHkgcmVxdWlyZWQgaWYgeW91XFxuICAyMDpcXHRcXHQgIGhhdmUgdXNlcnNwYWNlIHByb2dyYW1zIHRoYXQgZGVwZW5kIG9uIGZiZGV2IGZvciBncmFwaGljcyBvdXRwdXQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA4OjEzLjQyODM0MTkyOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTYzNTczMzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRm9udCBSb3RhdGlvbiBMb2dpYyBpbiB0aGUgRnJhbWVidWZmZXIgQ29uc29sZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgYmFjayBpbnRvIHRoaXMgZnJhbWVidWZmZXIgZm9udCByb3RhdGlvbiBpc3N1ZS4gUmVtaW5kaW5nIG15c2VsZiB0aGF0IGBGUkFNRUJVRkZFUl9DT05TT0xFYCBhbmQgYEZCX0NPUkVgIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGluIHBsYXkgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCBtb3JlIGRlZXBseS5cblxuTGV0J3MgcmUtZXhhbWluZSB0aGF0IGNvZGUgc25pcHBldC4gUmlnaHQsIGl0J3MgaW5zaWRlIGBmYmNvbl9kb19zZXRfZm9udGAuIFNwZWNpZmljYWxseSwgaXQgY2hlY2tzIGlmIHRoZSB2aXJ0dWFsIGNvbnNvbGUgKGB2Y2ApIGlzIHZpc2libGUuIElmIGl0IGlzLCBhbmQgaWYgdGhlIGZyYW1lYnVmZmVyJ3MgYml0IG9wZXJhdGlvbnMgaGF2ZSBhIGByb3RhdGVfZm9udGAgZnVuY3Rpb24gZGVmaW5lZCAqYW5kKiB0aGF0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGNhbGxlZCB3aXRoIHRoZSB2aWRlbyBpbmZvcm1hdGlvbiwgdGhlbiB3ZSBzZXQgdGhlIGBwYXItXHUwMDNlcm90YXRlYCBmbGFnIHRvIGBGQl9ST1RBVEVfVVJgIGFuZCB1cGRhdGUgdGhlIGJsaXR0aW5nIHR5cGUuXG5cbk15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGNvbmZpcm0gdGhlIHNjb3BlIG9mIGBmYmNvbl9kb19zZXRfZm9udGAuIEdvb2QsIGl0ICppcyogYSBzdGF0aWMgZnVuY3Rpb246IGBzdGF0aWMgaW50IGZiY29uX2RvX3NldF9mb250KC4uLilgLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuIFdobydzIGNhbGxpbmcgdGhpcyBgZmJjb25fZG9fc2V0X2ZvbnRgPyBJIGhhdmUgdG8gdHJhY2UgYmFjayB0aGUgY2FsbGVycyB0byBnZXQgYSBmdWxsIHBpY3R1cmUgb2YgaG93IHRoaXMgZm9udCByb3RhdGlvbiBtZWNoYW5pc20gaXMgYWN0dWFsbHkgdHJpZ2dlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTY2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDg6MTcuMzkxOTE4NTY0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzUyOTIxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYmNvbl9kb19zZXRfZm9udFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0yMzQwPXN0YXRpYyB2b2lkIHNldF92Y19oaV9mb250KHN0cnVjdCB2Y19kYXRhICp2YywgYm9vbCBzZXQpXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yMzk5LVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI0MDA6c3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCxcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNDAxLVxcdFxcdFxcdCAgICAgZm9udF9kYXRhX3QgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0yNDg2PXN0YXRpYyBpbnQgZmJjb25fc2V0X2ZvbnQoc3RydWN0IHZjX2RhdGEgKnZjLCBjb25zdCBzdHJ1Y3QgY29uc29sZV9mb250ICpmb250LFxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjUzMS1cXHR9XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjUzMjpcXHRyZXQgPSBmYmNvbl9kb19zZXRfZm9udCh2YywgZm9udC1cXHUwMDNld2lkdGgsIGZvbnQtXFx1MDAzZWhlaWdodCwgY2hhcmNvdW50LCBuZXdfZGF0YSk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjUzMy1cXHRmb250X2RhdGFfcHV0KG5ld19kYXRhKTtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI1Mzg9c3RhdGljIGludCBmYmNvbl9zZXRfZGVmX2ZvbnQoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgY29uc29sZV9mb250ICpmb250LFxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjU1MS1cXHRmb250LVxcdTAwM2VoZWlnaHQgPSBmLVxcdTAwM2VoZWlnaHQ7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjU1MjpcXHRyZXR1cm4gZmJjb25fZG9fc2V0X2ZvbnQodmMsIGYtXFx1MDAzZXdpZHRoLCBmLVxcdTAwM2VoZWlnaHQsIGYtXFx1MDAzZWNoYXJjb3VudCwgZi1cXHUwMDNlZGF0YSk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjU1My19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA4OjE3LjQ1NTQ1Mjg1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzkxNTg4MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCB0aGlzIGFyZWE6XG5cbioqQ2hlY2tpbmcgRm9udCBIYW5kbGluZyBpbiB0aGUgS2VybmVsKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBmYmNvbl9zZXRfZm9udGAgYW5kIGBmYmNvbl9zZXRfZGVmX2ZvbnRgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBzZXR0aW5nIHRoZSBmb250IGZvciB0aGUgZnJhbWVidWZmZXIgY29uc29sZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSB0aGV5IGFjdHVhbGx5ICpleHBvcnRlZCogc3ltYm9scz8gT3IgYXJlIHRoZXkgdHVja2VkIGF3YXksIG1heWJlIHBhcnQgb2Ygc29tZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBmcmFtZWJ1ZmZlciBkcml2ZXI/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGVpciB2aXNpYmlsaXR5LiBLbm93aW5nIHRoaXMgd2lsbCBpbW1lZGlhdGVseSBpbmZvcm0gaG93IEknZCBhcHByb2FjaCB1c2luZyBvciBtb2RpZnlpbmcgdGhlbSwgYW5kIHdoZXRoZXIgSSBjYW4gZGlyZWN0bHkgY2FsbCB0aGVtIG9yIG5lZWQgdG8gd29yayB0aHJvdWdoIHNvbWUgb3RoZXIgbWVjaGFuaXNtLiBJdCBhbHNvIHRlbGxzIG1lIGFib3V0IHRoZSBkZXNpZ24gY2hvaWNlcyB0aGUgZGV2ZWxvcGVyIG1hZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MDEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODoyMC41MzQ2MTQ4MjJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNzExMzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZiY29uX3NldF9mb250XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI0MDA9c3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCxcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI0ODUtXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjQ4NjpzdGF0aWMgaW50IGZiY29uX3NldF9mb250KHN0cnVjdCB2Y19kYXRhICp2YywgY29uc3Qgc3RydWN0IGNvbnNvbGVfZm9udCAqZm9udCxcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNDg3LVxcdFxcdFxcdCAgdW5zaWduZWQgaW50IHZwaXRjaCwgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MzE3NT1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbnN3IGZiX2NvbiA9IHtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTMxODUtXFx0LmNvbl9ibGFuayBcXHRcXHQ9IGZiY29uX2JsYW5rLFxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjMxODY6XFx0LmNvbl9mb250X3NldCBcXHRcXHQ9IGZiY29uX3NldF9mb250LFxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTMxODctXFx0LmNvbl9mb250X2dldCBcXHRcXHQ9IGZiY29uX2dldF9mb250LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODoyMC42MTYzMzQ1NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODkxMzQzNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipGb2N1c2luZyBvbiBGb250IFNldHRpbmcgaW4gdGhlIEZyYW1lYnVmZmVyIENvbnNvbGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZmJjb25fc2V0X2ZvbnRgIGFuZCBpdCdzIGNsZWFybHkgYSBrZXkgZnVuY3Rpb24uIEl0J3MgcGFydCBvZiBgZmJfY29uYCwgd2hpY2ggaXMgaW1wbGVtZW50ZWQgYXMgYSBgc3RydWN0IGNvbnN3YC4gVGhhdCBgY29uc3dgIHN0cnVjdHVyZSBtZWFucyB0aGlzIGZ1bmN0aW9uIHBsYXlzIGEgcm9sZSBpbiB0aGUgY29uc29sZSwgc28gc2V0dGluZyB0aGUgZm9udCBtdXN0IGJlIGEgcHJldHR5IGNlbnRyYWwgdGFzay4gYGZiY29uX3NldF9mb250YCBoYXMgdG8gYmUgYSBnb29kIHN5bWJvbCB0byBjb25jZW50cmF0ZSBvbiB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZm9udCBpcyBtYW5pcHVsYXRlZC5cblxuTm93LCB0aGF0IGdldHMgbWUgdGhpbmtpbmc6IHdoYXQgYWJvdXQgYGZiY29uX3NldF9kZWZfZm9udGA/IElzIHRoYXQganVzdCBhIGRlZmF1bHQgb3IgaXMgaXQgc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgZmJjb25fc2V0X2ZvbnRgIGFuZCBgZmJjb25fc2V0X2RlZl9mb250YCwgbWF5YmUgdGhlcmUgYXJlIHNvbWUgZGVmYXVsdCBmb250cyBsb2FkZWQsIGFuZCB0aGlzIGlzIHdoZXJlIHRoYXQncyBoYW5kbGVkLiBNYXliZSBpdCBjYWxscyBgZmJjb25fc2V0X2ZvbnRgIHRvIHNldCB0aGUgbmV3IGRlZmF1bHQsIG9yIG1heWJlIHRoZSBkZWZhdWx0IGZvbnQgaXMgc2V0IG9uY2Ugb24gYm9vdCB1cC4gSSBuZWVkIHRvIGRpZyBpbnRvIGl0IGEgYml0IG1vcmUgdG8gdW5kZXJzdGFuZCB0aGUgYmlnIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MzEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODoyNC41MDc2ODE3N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTczOTgxMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmJjb25fc2V0X2RlZl9mb250XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI0ODY9c3RhdGljIGludCBmYmNvbl9zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGNvbnN0IHN0cnVjdCBjb25zb2xlX2ZvbnQgKmZvbnQsXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNTM3LVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI1Mzg6c3RhdGljIGludCBmYmNvbl9zZXRfZGVmX2ZvbnQoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgY29uc29sZV9mb250ICpmb250LFxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI1MzktXFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTMxNzU9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdyBmYl9jb24gPSB7XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0zMTg3LVxcdC5jb25fZm9udF9nZXQgXFx0XFx0PSBmYmNvbl9nZXRfZm9udCxcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzozMTg4OlxcdC5jb25fZm9udF9kZWZhdWx0XFx0PSBmYmNvbl9zZXRfZGVmX2ZvbnQsXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMzE4OS1cXHQuY29uX3NldF9wYWxldHRlIFxcdD0gZmJjb25fc2V0X3BhbGV0dGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA4OjI0LjU2NTA4NTE4NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzg1NjQ5OTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGJvdGggYGZiY29uX3NldF9mb250YCBhbmQgYGZiY29uX3NldF9kZWZfZm9udGAgYXJlIHBvdGVudGlhbGx5IHN0cm9uZyBjYW5kaWRhdGVzIGZvciBmb2N1c2luZyBvdXIgYXR0ZW50aW9uIGhlcmUuIFRoZXkgc2VlbSBsaWtlIGtleSBwb2ludHMgaW4gdGhlIGZvbnQgaGFuZGxpbmcuIEJ1dCwga25vd2luZyB0aGlzLCBJIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGVsc2UgaW4gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSB3aWRlciBjb25maWd1cmF0aW9uLiBUaGUgY29kZSByZWZlcmVuY2VzIGBwYXItXHUwMDNlYml0b3BzLVx1MDAzZXJvdGF0ZV9mb250YCDigJMgSSBzaG91bGQgZGV0ZXJtaW5lIGlmIGByb3RhdGVfZm9udGAgaXMgdGllZCB0byBhIHBhcnRpY3VsYXIgc2V0dGluZyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFnLiBXZSBuZWVkIHRvIGFzY2VydGFpbiBpZiBpdHMgcHJlc2VuY2UsIG9yIGFic2VuY2UsIGlzIGRpY3RhdGVkIGJ5IGEgc3BlY2lmaWMgYnVpbGQgY29uZmlndXJhdGlvbiBvciBkZXZpY2UgcHJvZmlsZS4gVGhpcyBjb3VsZCBiZSBjcnVjaWFsIHRvIGlkZW50aWZ5aW5nIGEgc3BlY2lmaWMgaXNzdWUgaWYgdGhlcmUgYXJlIGFueSB0aGF0IGhhdmUgY29tZSB0byBsaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA2NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA4OjI3Ljk1MDczNzQzNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEzNDc5MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicm90YXRlX2ZvbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aWRlby9mYmRldi9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0xMDg4PXN0YXRpYyB2b2lkIGZiY29uX2luaXQoc3RydWN0IHZjX2RhdGEgKnZjLCBib29sIGluaXQpXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0xMjI4LVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjEyMjk6XFx0aWYgKHBhci1cXHUwMDNlYml0b3BzLVxcdTAwM2Vyb3RhdGVfZm9udCBcXHUwMDI2XFx1MDAyNiBwYXItXFx1MDAzZWJpdG9wcy1cXHUwMDNlcm90YXRlX2ZvbnQoaW5mbywgdmMpKSB7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTIzMC1cXHRcXHRwYXItXFx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTIxNDM9c3RhdGljIGJvb2wgZmJjb25fc3dpdGNoKHN0cnVjdCB2Y19kYXRhICp2YylcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTIyMTYtXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjIxNzpcXHRpZiAocGFyLVxcdTAwM2ViaXRvcHMtXFx1MDAzZXJvdGF0ZV9mb250IFxcdTAwMjZcXHUwMDI2IHBhci1cXHUwMDNlYml0b3BzLVxcdTAwM2Vyb3RhdGVfZm9udChpbmZvLCB2YykpIHtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yMjE4LVxcdFxcdHBhci1cXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MjQwMD1zdGF0aWMgaW50IGZiY29uX2RvX3NldF9mb250KHN0cnVjdCB2Y19kYXRhICp2YywgaW50IHcsIGludCBoLCBpbnQgY2hhcmNvdW50LFxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQyOC1cXHRpZiAoY29uX2lzX3Zpc2libGUodmMpKSB7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjQyOTpcXHRcXHRpZiAocGFyLVxcdTAwM2ViaXRvcHMtXFx1MDAzZXJvdGF0ZV9mb250IFxcdTAwMjZcXHUwMDI2IHBhci1cXHUwMDNlYml0b3BzLVxcdTAwM2Vyb3RhdGVfZm9udChpbmZvLCB2YykpIHtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNDMwLVxcdFxcdFxcdHBhci1cXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQ2OS1cXHRpZiAoY29uX2lzX3Zpc2libGUodmMpKSB7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjQ3MDpcXHRcXHRpZiAocGFyLVxcdTAwM2ViaXRvcHMtXFx1MDAzZXJvdGF0ZV9mb250IFxcdTAwMjZcXHUwMDI2IHBhci1cXHUwMDNlYml0b3BzLVxcdTAwM2Vyb3RhdGVfZm9udChpbmZvLCB2YykpIHtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNDcxLVxcdFxcdFxcdHBhci1cXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MjY0ND1zdGF0aWMgdm9pZCBmYmNvbl9tb2RlY2hhbmdlZChzdHJ1Y3QgZmJfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI2NzctXFx0ICovXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjY3ODpcXHRpZiAocGFyLVxcdTAwM2ViaXRvcHMtXFx1MDAzZXJvdGF0ZV9mb250IFxcdTAwMjZcXHUwMDI2IHBhci1cXHUwMDNlYml0b3BzLVxcdTAwM2Vyb3RhdGVfZm9udChpbmZvLCB2YykpIHtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNjc5LVxcdFxcdHBhci1cXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmg9NTk9c3RydWN0IGZiY29uX2JpdG9wcyB7XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uaC03MS1cXHRpbnQgICgqdXBkYXRlX3N0YXJ0KShzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmg6NzI6XFx0aW50ICAoKnJvdGF0ZV9mb250KShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZjX2RhdGEgKnZjKTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uaC03My19O1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jPTM2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGZiY29uX2JpdG9wcyBjY3dfZmJjb25fYml0b3BzID0ge1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jLTM2OS1cXHQudXBkYXRlX3N0YXJ0ID0gY2N3X3VwZGF0ZV9zdGFydCxcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmM6MzcwOlxcdC5yb3RhdGVfZm9udCA9IGZiY29uX3JvdGF0ZV9mb250LFxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYy0zNzEtfTtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jPTM0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGZiY29uX2JpdG9wcyBjd19mYmNvbl9iaXRvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYy0zNTItXFx0LnVwZGF0ZV9zdGFydCA9IGN3X3VwZGF0ZV9zdGFydCxcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYzozNTM6XFx0LnJvdGF0ZV9mb250ID0gZmJjb25fcm90YXRlX2ZvbnQsXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmMtMzU0LX07XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtMTctXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jOjE4OmludCBmYmNvbl9yb3RhdGVfZm9udChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZjX2RhdGEgKnZjKVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYy0xOS17XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmgtMjEtXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5oOjIyOmludCBmYmNvbl9yb3RhdGVfZm9udChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZjX2RhdGEgKnZjKTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmgtMjMtXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYz0zOTc9c3RhdGljIGNvbnN0IHN0cnVjdCBmYmNvbl9iaXRvcHMgdWRfZmJjb25fYml0b3BzID0ge1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmMtNDAzLVxcdC51cGRhdGVfc3RhcnQgPSB1ZF91cGRhdGVfc3RhcnQsXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmM6NDA0OlxcdC5yb3RhdGVfZm9udCA9IGZiY29uX3JvdGF0ZV9mb250LFxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jLTQwNS19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODoyOC4wNDIxMDc4NDVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4MzcxMzgyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipFeGFtaW5pbmcgRm9udCBSb3RhdGlvbiBJbXBsZW1lbnRhdGlvbnMqKlxuXG5Pa2F5LCBzbyBgcm90YXRlX2ZvbnRgLi4uIHRoYXQncyBhIGtleSBmdW5jdGlvbiwgSSBrbm93IGl0LiBBbmQsIEkgcmVjYWxsIGl0J3MgdXNlZCB3aXRoaW4gYGZiY29uX3JvdGF0ZS5jYCwgYGZiY29uX2Njdy5jYCwgYGZiY29uX2N3LmNgLCBhbmQgYGZiY29uX3VkLmNgLiBOb3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRob3NlIHNvdXJjZSBmaWxlcyBhbmQgdW5kZXJzdGFuZCB0aGUgbnVhbmNlcy4gSSdsbCBzdGFydCB3aXRoIHRoZSBjb25maWcgZmlsZXM7IHRoYXQgd2lsbCBiZSB0aGUgbW9zdCBlZmZpY2llbnQgYXBwcm9hY2ggdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MDMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODozMS40MjU4NDkzNzVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NjY5Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZiY29uX3JvdGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aWRlby9mYmRldi9jb3JlL01ha2VmaWxlPTIwPWlmZXEgKCQoQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04pLHkpXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL01ha2VmaWxlOjIxOmZiLXlcXHRcXHRcXHRcXHQgICs9IGZiY29uX3JvdGF0ZS5vIGZiY29uX2N3Lm8gZmJjb25fdWQubyBcXFxcXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL01ha2VmaWxlLTIyLVxcdFxcdFxcdFxcdCAgICAgZmJjb25fY2N3Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDg6MzEuNDkxNTI0OTgxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDM1OTYzMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipDb25zaWRlcmluZyBgRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTmAqKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBjb25zb2xlIHJvdGF0aW9uIHdpdGhpbiB0aGUgZnJhbWVidWZmZXIsIHdoaWNoIGlzIGEga2V5IGNvbnNpZGVyYXRpb24gd2hlbiBkZWFsaW5nIHdpdGggZGlzcGxheXMgdGhhdCBhcmVuJ3Qgb3JpZW50ZWQgaW4gdGhlIHN0YW5kYXJkIGxhbmRzY2FwZSBtb2RlLiBJZiB3ZSdyZSBpbmNvcnBvcmF0aW5nIGZyYW1lYnVmZmVyIHN1cHBvcnQsIGl0J3MgcHJldHR5IGxpa2VseSB3ZSdsbCBhbHNvIG5lZWQgdGhlIGFiaWxpdHkgdG8gcm90YXRlIHRoZSBjb25zb2xlIG91dHB1dC4gT3RoZXJ3aXNlLCB0aGUgdXNlciBleHBlcmllbmNlIGNvdWxkIGJlLCB3ZWxsLCB1cHNpZGUgZG93biwgc2lkZXdheXMsIG9yIGdlbmVyYWxseSBmcnVzdHJhdGluZy4gSXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgYWRkaXRpb24gdG8gdGhlIG92ZXJhbGwgZnJhbWVidWZmZXIgY29uZmlndXJhdGlvbi5cblxuR2l2ZW4gdGhpcywgSSBzaG91bGQgaW1tZWRpYXRlbHkgY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBgRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTmAuIEkgbmVlZCB0byBlbnN1cmUgaXQncyBkZWZpbmVkIGFuZCBjb3JyZWN0bHkgaGFuZGxlZC4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGFueSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciByZWxhdGVkIG9wdGlvbnMgd2lsbCBiZSBjcnVjaWFsLiBJJ2xsIGFsc28gYmUgbG9va2luZyBmb3IgYW55IGRvY3VtZW50YXRpb24gb3IgY29tbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb3B0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIGludGVuZGVkIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgY2F2ZWF0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAzNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA4OjM1LjMzNTEyMzc4NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE4NTU5ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnPTg4PWNvbmZpZyBGUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZy0xMDMtXFxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWc6MTA0OmNvbmZpZyBGUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OXFxuZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWctMTA1LSAgICAgICBib29sIFxcXCJGcmFtZWJ1ZmZlciBDb25zb2xlIFJvdGF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODozNi4yNTM2OTA0MzNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwNDc2MDIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgdGhlIENvbnNvbGUgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWcuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIGNvbnNvbGUgZHJpdmVycyBhcmUgZGVmaW5lZC4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTA0LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgY29uc29sZS1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZXNpZGUuIEkgYW50aWNpcGF0ZSBmaW5kaW5nIHRoZSBjb3JlIGRlZmluaXRpb25zIGZvciB0aGUgc3VwcG9ydGVkIGNvbnNvbGUgdHlwZXMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcyB0aGVyZS4gRnJvbSB0aGVyZSwgSSdsbCBiZSBhYmxlIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gb3RoZXIgb3B0aW9ucywgc3VjaCBhcyBncmFwaGljcyBjYXJkIGRyaXZlcnMsIGZyYW1lYnVmZmVycywgYW5kIHNlcmlhbCBwb3J0cy4gTXkgZ29hbCBpcyB0byBxdWlja2x5IHBpbnBvaW50IHdoaWNoIG9wdGlvbnMgSSBuZWVkIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRvIGFjaGlldmUgdGhlIGRlc2lyZWQgY29uc29sZSBiZWhhdmlvciBmb3IgdGhpcyBzcGVjaWZpYyBwbGF0Zm9ybSwgYXMgd2VsbCBhcyB0aGVpciByZWxldmFudCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MzAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODozOS4zNTg0NTM0NzdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTU6XFx0XFx0IHN1cHBvcnRzIHRoaXMgZmVhdHVyZSkuICBPdGhlcndpc2UsIHRoZSBmcmFtZWJ1ZmZlciBjb25zb2xlIHdpbGxcXG4gIDk2OlxcdFxcdCBhbHdheXMgc2VsZWN0IHRoZSBmaXJzdCBmcmFtZWJ1ZmZlciBkcml2ZXIgdGhhdCBpcyBsb2FkZWQuIFRoZSBsYXR0ZXJcXG4gIDk3OlxcdFxcdCBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci5cXG4gIDk4OlxcdFxcbiAgOTk6XFx0XFx0IFlvdSBjYW4gYWx3YXlzIG92ZXJyaWRlIHRoZSBhdXRvbWF0aWMgc2VsZWN0aW9uIG9mIHRoZSBwcmltYXJ5IGRldmljZVxcbiAxMDA6XFx0XFx0IGJ5IHVzaW5nIHRoZSBmYmNvbj1tYXA6IGJvb3Qgb3B0aW9uLlxcbiAxMDE6XFx0XFxuIDEwMjpcXHRcXHQgSWYgdW5zdXJlLCBzZWxlY3Qgbi5cXG4gMTAzOlxcdFxcbiAxMDQ6XFx0Y29uZmlnIEZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT05cXG4gMTA1OlxcdCAgICAgICBib29sIFxcXCJGcmFtZWJ1ZmZlciBDb25zb2xlIFJvdGF0aW9uXFxcIlxcbiAxMDY6XFx0ICAgICAgIGRlcGVuZHMgb24gRlJBTUVCVUZGRVJfQ09OU09MRVxcbiAxMDc6XFx0ICAgICAgIGhlbHBcXG4gMTA4OlxcdFxcdCBFbmFibGUgZGlzcGxheSByb3RhdGlvbiBmb3IgdGhlIGZyYW1lYnVmZmVyIGNvbnNvbGUuICBUaGlzIGlzIGRvbmVcXG4gMTA5OlxcdFxcdCBpbiBzb2Z0d2FyZSBhbmQgbWF5IGJlIHNpZ25pZmljYW50bHkgc2xvd2VyIHRoYW4gYSBub3JtYWxseSBvcmllbnRlZFxcbiAxMTA6XFx0XFx0IGRpc3BsYXkuICBOb3RlIHRoYXQgdGhlIHJvdGF0aW9uIGlzIGRvbmUgYXQgdGhlIGNvbnNvbGUgbGV2ZWwgb25seVxcbiAxMTE6XFx0XFx0IHN1Y2ggdGhhdCBvdGhlciB1c2VycyBvZiB0aGUgZnJhbWVidWZmZXIgd2lsbCByZW1haW4gbm9ybWFsbHlcXG4gMTEyOlxcdFxcdCBvcmllbnRlZC5cXG4gMTEzOlxcdFxcbiAxMTQ6XFx0Y29uZmlnIEZSQU1FQlVGRkVSX0NPTlNPTEVfREVGRVJSRURfVEFLRU9WRVJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDg6MzkuMzU4NTE3Njk3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NjgwMjAxNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgRnJhbWVidWZmZXIgQ29uc29sZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBGUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OYCBzZXR0aW5nLiBUaGUgZGVwZW5kZW5jeSB0cmVlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IGl0IGhpbmdlcyBvbiBgRlJBTUVCVUZGRVJfQ09OU09MRWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBvdmVybG9va2VkIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBzbyBsZXQncyBxdWlja2x5IGNvbmZpcm0uIFJpZ2h0LCBJIGhhdmUgYEZCX0NPUkVgLCBgRlJBTUVCVUZGRVJfQ09OU09MRWAsIGFuZCBgRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTmAgdG8gY29uc2lkZXIuXG5cbk5vdywgbXkgbWFpbiBjb25jZXJuIGlzIHdoZXRoZXIgSSBjYW4gbWFuaXB1bGF0ZSB0aGUgZnJhbWVidWZmZXIgY29uc29sZSdzIGZvbnQgZnJvbSB1c2VyIHNwYWNlLCBzcGVjaWZpY2FsbHkgdXNpbmcgYGZiY29uX3NldF9mb250YC4gSSBrbm93IHRoYXQgZnVuY3Rpb24gaXMgcGFydCBvZiBgZmJfY29uYCwgd2hpY2ggaXRzZWxmIGlzIG5lc3RlZCB3aXRoaW4gYSBgc3RydWN0IGNvbnN3YC4gVGhpcyBgc3RydWN0IGNvbnN3YCBpcyB0aGUgY29uc29sZSBzd2l0Y2ggc3RydWN0dXJlLiBFeGNlbGxlbnQuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzIGhvdyB0byBnZXQgYXQgdGhpcyBmdW5jdGlvbmFsaXR5LiBNeSB0aG91Z2h0IGlzIGBpb2N0bChmZCwgUElPX0ZPTlQsIC4uLilgIG9yIGEgc2ltaWxhciBpb2N0bCBjYWxsIG9uIGEgY29uc29sZSBkZXZpY2UgbGlrZSBgL2Rldi90dHkqYCBvciBgL2Rldi9jb25zb2xlYCBtaWdodCBkbyB0aGUgdHJpY2suIEkgc2VlbSB0byByZWNhbGwgdGhhdCB0aGUgYHZ0X2lvY3RsYCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgYFBJT19GT05UYC4gTGV0J3MgY29uZmlybSB0aGF0IGJ5IHJldmlld2luZyB0aGUgY29kZSB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTQ2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDg6NDQuMjI2NTQxMzk4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjU5NzgwMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uX2ZvbnRfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdHR5L3Z0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3R0eS92dC92dC5jPTQ5MTA9c3RhdGljIGludCBjb25fZm9udF9nZXQoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgY29uc29sZV9mb250X29wICpvcClcXG4tLVxcbmRyaXZlcnMvdHR5L3Z0L3Z0LmMtNDk1NC1cXG5kcml2ZXJzL3R0eS92dC92dC5jOjQ5NTU6c3RhdGljIGludCBjb25fZm9udF9zZXQoc3RydWN0IHZjX2RhdGEgKnZjLCBjb25zdCBzdHJ1Y3QgY29uc29sZV9mb250X29wICpvcClcXG5kcml2ZXJzL3R0eS92dC92dC5jLTQ5NTYte1xcbi0tXFxuZHJpdmVycy90dHkvdnQvdnQuYy00OTg1LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmRyaXZlcnMvdHR5L3Z0L3Z0LmM6NDk4NjpcXHRpZiAoIXZjLVxcdTAwM2V2Y19zdy1cXHUwMDNlY29uX2ZvbnRfc2V0KVxcbmRyaXZlcnMvdHR5L3Z0L3Z0LmMtNDk4Ny1cXHRcXHRyZXR1cm4gLUVOT1NZUztcXG4tLVxcbmRyaXZlcnMvdHR5L3Z0L3Z0LmMtNDk5MS1cXG5kcml2ZXJzL3R0eS92dC92dC5jOjQ5OTI6XFx0cmV0dXJuIHZjLVxcdTAwM2V2Y19zdy1cXHUwMDNlY29uX2ZvbnRfc2V0KHZjLCBcXHUwMDI2Zm9udCwgdnBpdGNoLCBvcC1cXHUwMDNlZmxhZ3MpO1xcbmRyaXZlcnMvdHR5L3Z0L3Z0LmMtNDk5My19XFxuLS1cXG5kcml2ZXJzL3R0eS92dC92dC5jPTUwMjc9aW50IGNvbl9mb250X29wKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGNvbnNvbGVfZm9udF9vcCAqb3ApXFxuLS1cXG5kcml2ZXJzL3R0eS92dC92dC5jLTUwMzEtXFx0Y2FzZSBLRF9GT05UX09QX1NFVF9UQUxMOlxcbmRyaXZlcnMvdHR5L3Z0L3Z0LmM6NTAzMjpcXHRcXHRyZXR1cm4gY29uX2ZvbnRfc2V0KHZjLCBvcCk7XFxuZHJpdmVycy90dHkvdnQvdnQuYy01MDMzLVxcdGNhc2UgS0RfRk9OVF9PUF9HRVQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA4OjQ0LjU1MjUyNDYyOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzkyMTQ2MTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IExpbmUgb2YgUmVhc29uaW5nIGZvciBGb250IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIHRyYWNlZCB0aGUgZm9udCBzZXR0aW5nIGZ1bmN0aW9uYWxpdHkuIEl0IGxvb2tzIGxpa2UgYGNvbl9mb250X3NldGAgdWx0aW1hdGVseSBjYWxscyBgdmMtXHUwMDNldmNfc3ctXHUwMDNlY29uX2ZvbnRfc2V0YCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZW4sIGBjb25fZm9udF9vcGAgaXMgdGhlIGhhbmRsZXIgZm9yIGBLRF9GT05UX09QX1NFVGAuIFRoYXQgcGFydCdzIGNsZWFyIOKAkyB1c2VyIHNwYWNlIGludGVyYWN0cyB3aXRoIGl0IHZpYSBpb2N0bCwganVzdCBhcyBJIGV4cGVjdGVkLlxuXG5Ob3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQuIEl0IGxvb2tzIGxpa2UgYGZiY29uX3NldF9mb250YCBhbmQgYGZiY29uX3NldF9kZWZfZm9udGAgYXJlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgaGVyZS4gSSdsbCBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZC5cblxuTmV4dCwgSSBuZWVkIHRvIHJlbWVtYmVyIHdoYXQncyByZWxldmFudCBpbiB0ZXJtcyBvZiBjb25maWdzLiBMb29rcyBsaWtlIGBGQl9DT1JFYCwgYEZSQU1FQlVGRkVSX0NPTlNPTEVgLCBhbmQgYEZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT05gIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIEknbGwgbWFrZSBzdXJlIHRvIGRvdWJsZS1jaGVjayB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIGludGVyYWN0aW9ucy5cblxuVGhlIGJpZyBxdWVzdGlvbiBub3cgaXMgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQuIERvZXMganVzdCBgRkJfQ09SRWAgZ2l2ZSBtZSBlbm91Z2ggdG8gcnVuIGEgdGVzdD8gT3Igd2lsbCBJIG5lZWQgYSBtb3JlIGNvbmNyZXRlIGZyYW1lYnVmZmVyIGRyaXZlciB0byB1c2UgYXMgYSB0ZXN0YmVkPyBJIHRoaW5rIEknbGwgbmVlZCBhIHNwZWNpZmljIGRyaXZlci4gSSdtIHRoaW5raW5nIGBEUk1fRkJERVZfRU1VTEFUSU9OYCBvciBgRkJfVklSVFVBTGAgY291bGQgYmUgdXNlZnVsIGhlcmUuIEhvd2V2ZXIsIGBGQl9EVU1NWWAgbWlnaHQgZG8gdGhlIHRyaWNrIHRvby4gSSdsbCBnbyB3aXRoIGVpdGhlciBgRkJfVklSVFVBTGAgb3IgYEZCX0RVTU1ZYC4gTGV0J3Mgc2VlIHdoaWNoIGlzIHNpbXBsZXIgdG8gc2V0IHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgwNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODo0OC45NDQ2NzI5NTVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTI5NzEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRkJfVklSVFVBTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZpZGVvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZpZGVvL2ZiZGV2L0tjb25maWc9MTY0NT1jb25maWcgRkJfU0g3NzYwXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L0tjb25maWctMTY1Ny1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L0tjb25maWc6MTY1ODpjb25maWcgRkJfVklSVFVBTFxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvS2NvbmZpZy0xNjU5LVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIEZyYW1lIEJ1ZmZlciBzdXBwb3J0IChPTkxZIEZPUiBURVNUSU5HISlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA4OjQ5LjA0NTk3NDg1NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjUwMjE5MjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIExpbnV4IEZyYW1lYnVmZmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnYCBmaWxlLiBJJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gbGluZSAxNjU4LCBiZWNhdXNlIGJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIHRoYXQncyBvZnRlbiB3aGVyZSB5b3UgZmluZCB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBbaW5zZXJ0IHlvdXIgZmllbGQgaGVyZSwgZS5nLiwgYSBzcGVjaWZpYyBmcmFtZWJ1ZmZlciBkcml2ZXIgb3IgZmVhdHVyZV0uIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgYGNvbmZpZ2AgZGlyZWN0aXZlcywgbWF5YmUgc29tZSBgbWVudWNvbmZpZ2Agb3IgYGNob2ljZWAgc3RydWN0dXJlcywgYW5kIGhvcGVmdWxseSwgc29tZSBoZWxwZnVsIGNvbW1lbnRzIGV4cGxhaW5pbmcgdGhlIGxvZ2ljIGJlaGluZCB0aGUgc2V0dGluZ3MuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgZnJhbWVidWZmZXIgZHJpdmVyIGN1c3RvbWl6YXRpb24gdXN1YWxseSByZXNpZGVzLCBhbmQgdW5kZXJzdGFuZGluZyB0aGlzIHBhcnQgaXMga2V5IHRvIGFueSBkZWVwZXIgaW52ZXN0aWdhdGlvbiBvciBwb3RlbnRpYWwgbW9kaWZpY2F0aW9ucyBJIG1pZ2h0IG5lZWQgdG8gbWFrZS4gTGV0J3Mgc2VlIHdoYXQncyB0aGVyZS4uLiBJJ20gYWxyZWFkeSBmb3JtdWxhdGluZyBoeXBvdGhlc2VzIGFib3V0IHdoYXQgSSAqc2hvdWxkKiBmaW5kLCBnaXZlbiB0aGUgZ2VuZXJhbCBzdHJ1Y3R1cmUgb2YgdGhlc2UgS2NvbmZpZyBmaWxlcy4gVGltZSB0byBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NjksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODo1NS4yOTYxOTY4NjdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzNDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmlkZW8vZmJkZXYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjUwOlxcdFxcdGhlbHBcXG4xNjUxOlxcdFxcdCAgU3VwcG9ydCBmb3IgdGhlIFNINzc2MC9TSDc3NjMvU0g3NzIwL1NINzcyMSBpbnRlZ3JhdGVkXFxuMTY1MjpcXHRcXHQgIChEKVNUTi9URlQgTENEIENvbnRyb2xsZXIuXFxuMTY1MzpcXHRcXHQgIFN1cHBvcnRzIGRpc3BsYXkgcmVzb2x1dGlvbnMgdXAgdG8gMTAyNHgxMDI0IHBpeGVsLCBncmF5c2NhbGUgYW5kXFxuMTY1NDpcXHRcXHQgIGNvbG9yIG9wZXJhdGlvbiwgd2l0aCBkZXB0aHMgcmFuZ2luZyBmcm9tIDEgYnBwIHRvIDggYnBwIG1vbm9jaHJvbWVcXG4xNjU1OlxcdFxcdCAgYW5kIDgsIDE1IG9yIDE2IGJwcCBjb2xvcjsgOTAgZGVncmVlcyBjbG9ja3dpc2UgZGlzcGxheSByb3RhdGlvbiBmb3JcXG4xNjU2OlxcdFxcdCAgcGFuZWxzIFxcdTAwM2M9IDMyMCBwaXhlbCBob3Jpem9udGFsIHJlc29sdXRpb24uXFxuMTY1NzpcXHRcXG4xNjU4OlxcdGNvbmZpZyBGQl9WSVJUVUFMXFxuMTY1OTpcXHRcXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBGcmFtZSBCdWZmZXIgc3VwcG9ydCAoT05MWSBGT1IgVEVTVElORyEpXFxcIlxcbjE2NjA6XFx0XFx0ZGVwZW5kcyBvbiBGQlxcbjE2NjE6XFx0XFx0c2VsZWN0IEZCX1NZU01FTV9IRUxQRVJTXFxuMTY2MjpcXHRcXHRoZWxwXFxuMTY2MzpcXHRcXHQgIFRoaXMgaXMgYSBgdmlydHVhbCcgZnJhbWUgYnVmZmVyIGRldmljZS4gSXQgb3BlcmF0ZXMgb24gYSBjaHVuayBvZlxcbjE2NjQ6XFx0XFx0ICB1bnN3YXBwYWJsZSBrZXJuZWwgbWVtb3J5IGluc3RlYWQgb2Ygb24gdGhlIG1lbW9yeSBvZiBhIGdyYXBoaWNzXFxuMTY2NTpcXHRcXHQgIGJvYXJkLiBUaGlzIG1lYW5zIHlvdSBjYW5ub3Qgc2VlIGFueSBvdXRwdXQgc2VudCB0byB0aGlzIGZyYW1lXFxuMTY2NjpcXHRcXHQgIGJ1ZmZlciBkZXZpY2UsIHdoaWxlIGl0IGRvZXMgY29uc3VtZSBwcmVjaW91cyBtZW1vcnkuIFRoZSBtYWluIHVzZVxcbjE2Njc6XFx0XFx0ICBvZiB0aGlzIGZyYW1lIGJ1ZmZlciBkZXZpY2UgaXMgdGVzdGluZyBhbmQgZGVidWdnaW5nIHRoZSBmcmFtZVxcbjE2Njg6XFx0XFx0ICBidWZmZXIgc3Vic3lzdGVtLiBEbyBOT1QgZW5hYmxlIGl0IGZvciBub3JtYWwgc3lzdGVtcyEgVG8gcHJvdGVjdFxcbjE2Njk6XFx0XFx0ICB0aGUgaW5ub2NlbnQsIGl0IGhhcyB0byBiZSBlbmFibGVkIGV4cGxpY2l0bHkgYXQgYm9vdCB0aW1lIHVzaW5nIHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODo1NS4yOTYzOTQwOTdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3OTEwNTAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgZGVwZW5kZW5jeTpcblxuKipFeGFtaW5pbmcgYSBEZXBlbmRlbmN5OiBGQl9WSVJUVUFMIGFuZCBGQioqXG5cbk9rYXksIHNvIGBGQl9WSVJUVUFMYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBGQmAuIFRoYXQncyB0aGUgY29yZSBvZiB0aGUgaXNzdWUuIEJlZm9yZSBJIGRpdmUgZGVlcGVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBGQmAgaXMgZG9pbmcgYW5kIGl0cyBjdXJyZW50IHN0YXRlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiBgRkJgIGl0c2VsZi4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBpdC4gVW5kZXJzdGFuZGluZyBgRkJgIGlzIHRoZSBjcml0aWNhbCBmaXJzdCBzdGVwIGluIHByb3Blcmx5IGFzc2Vzc2luZyB0aGUgaW1wYWN0IG9uIGBGQl9WSVJUVUFMYC4gSSBuZWVkIHRvIGFzc2VzcyB3aGF0IGNoYW5nZXMgdG8gYEZCYCBhcmUgbmVjZXNzYXJ5IGFuZCBob3cgdGhpcyBlZmZlY3RzIHRoZSBzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTM3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowODo1OC4zNzU1MDM3NjhaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0Mzc3MDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGQiRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aWRlby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnLTUtXFxuZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnOjY6bWVudWNvbmZpZyBGQlxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IGZvciBmcmFtZSBidWZmZXIgZGV2aWNlIGRyaXZlcnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA4OjU4LjQ1OTg4ODE1NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDU0ODYxNDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCB0ZXh0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgZmJkZXZgIEtjb25maWcqKlxuXG5Pa2F5LCBsZXQncyBwdWxsIHVwIHRoZSBgZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnYCBmaWxlIGFuZCB6ZXJvIGluIGFyb3VuZCBsaW5lIDYuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgd2UnbGwgZmluZCB0aGUgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciB0aGUgZnJhbWVidWZmZXIgZGV2aWNlIGRyaXZlciBjb3JlLiBOZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5LCBsaWtlbHkgaXQncyBgQ09ORklHX0ZCYCBvciBzb21ldGhpbmcgc2ltaWxhciB0aGF0IGVuYWJsZXMgdGhlIGVudGlyZSBzdWJzeXN0ZW0uIEZyb20gdGhlcmUsIEknbGwgYmUgYWJsZSB0byB3b3JrIHRocm91Z2ggdGhlIGRlcGVuZGVuY2llcyBhbmQgb3B0aW9ucyBwcmVzZW50ZWQgd2l0aGluIHRoYXQgZmlsZSwgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgc3RydWN0dXJlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHdlIGRlZmluZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgc3Vic3lzdGVtcywgbGlrZSBncmFwaGljcyBkcml2ZXJzLCBvciBpbnB1dCBkcml2ZXJzLCBldGMuIGFuZCBob3cgdGhleSdyZSBleHBvc2VkIHZpYSB0aGUgS2NvbmZpZyBzdHJ1Y3R1cmUuIFNob3VsZCBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCBzdGFydCwgYnV0IGl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGJhc2UgY29uZmlndXJhdGlvbiBmb3IgYW55IGZyYW1lYnVmZmVyIHdvcmsgSSBuZWVkIHRvIGRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM5NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA5OjAyLjUxNDc1NTI5MVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODM5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIGZiZGV2IGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBGQlxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlN1cHBvcnQgZm9yIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyc1xcXCJcXG4gICA4OlxcdFxcdHNlbGVjdCBGQl9DT1JFXFxuICAgOTpcXHRcXHRzZWxlY3QgRkJfTk9USUZZXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIFRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIHByb3ZpZGVzIGFuIGFic3RyYWN0aW9uIGZvciB0aGUgZ3JhcGhpY3NcXG4gIDEyOlxcdFxcdCAgaGFyZHdhcmUuIEl0IHJlcHJlc2VudHMgdGhlIGZyYW1lIGJ1ZmZlciBvZiBzb21lIHZpZGVvIGhhcmR3YXJlIGFuZFxcbiAgMTM6XFx0XFx0ICBhbGxvd3MgYXBwbGljYXRpb24gc29mdHdhcmUgdG8gYWNjZXNzIHRoZSBncmFwaGljcyBoYXJkd2FyZSB0aHJvdWdoXFxuICAxNDpcXHRcXHQgIGEgd2VsbC1kZWZpbmVkIGludGVyZmFjZSwgc28gdGhlIHNvZnR3YXJlIGRvZXNuJ3QgbmVlZCB0byBrbm93XFxuICAxNTpcXHRcXHQgIGFueXRoaW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgKGhhcmR3YXJlIHJlZ2lzdGVyKSBzdHVmZi5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBGcmFtZSBidWZmZXIgZGV2aWNlcyB3b3JrIGlkZW50aWNhbGx5IGFjcm9zcyB0aGUgZGlmZmVyZW50XFxuICAxODpcXHRcXHQgIGFyY2hpdGVjdHVyZXMgc3VwcG9ydGVkIGJ5IExpbnV4IGFuZCBtYWtlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZlxcbiAgMTk6XFx0XFx0ICBhcHBsaWNhdGlvbiBwcm9ncmFtcyBlYXNpZXIgYW5kIG1vcmUgcG9ydGFibGU7IGF0IHRoaXMgcG9pbnQsIGFuIFhcXG4gIDIwOlxcdFxcdCAgc2VydmVyIGV4aXN0cyB3aGljaCB1c2VzIHRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGV4Y2x1c2l2ZWx5LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowOTowMi41MTQ5NDE0MzFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI2NzMxNjY2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogRnJhbWVidWZmZXIgQ29uc29sZSBhbmQgRm9udCBSb3RhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBnb2FsIGlzIGNsZWFybHkgdG8gdGFyZ2V0IGBmYmNvbmAgZnVuY3Rpb25hbGl0eS4gVGhlIHNlbGVjdGlvbiBvZiBgRkJfQ09SRWAgYXMgdGhlIGJhc2UgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUbyBtYWtlIHRoaXMgdGVzdGFibGUsIEknbGwgbmVlZCBhIGZyYW1lYnVmZmVyIGRldmljZS4gYEZCX1ZJUlRVQUxgIG9yIGBEUk1fRkJERVZfRU1VTEFUSU9OYCBsb29rIGxpa2UgdGhlIGJlc3QgYmV0cyBoZXJlLCB3aGljaCBhbGlnbnMgd2l0aCBob3cgc3l6a2FsbGVyIHR5cGljYWxseSBoYW5kbGVzIHRoZXNlIHNjZW5hcmlvcyDigJMgYEZCX1ZJUlRVQUxgIG9yIGBEUk1fVktNU2Agd2l0aCBgRFJNX0ZCREVWX0VNVUxBVElPTmAgc2hvdWxkIGNvdmVyIGl0LlxuXG5UaGVyZWZvcmUsIEknbGwgYWRkIGBGQmAsIGBGQl9WSVJUVUFMYCwgYEZSQU1FQlVGRkVSX0NPTlNPTEVgLCBhbmQgYEZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT05gIHRvIHRoZSBjb25maWd1cmF0aW9uLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZnV6emluZyB0aGUgY29uc29sZS5cblxuTm93LCBsZXQncyBjaXJjbGUgYmFjayBhbmQgcmV2aWV3IHRoZSByZWxldmFudCBwYXRjaCBhZ2Fpbi4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbjpcbmBgYGNcblx0aWYgKGNvbl9pc192aXNpYmxlKHZjKSkge1xuXHRcdGlmIChwYXItXHUwMDNlYml0b3BzLVx1MDAzZXJvdGF0ZV9mb250IFx1MDAyNlx1MDAyNiBwYXItXHUwMDNlYml0b3BzLVx1MDAzZXJvdGF0ZV9mb250KGluZm8sIHZjKSkge1xuXHRcdFx0cGFyLVx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcblx0XHRcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcblx0XHR9XG5cdH1cbmBgYFxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBgZmJjb25fZG9fc2V0X2ZvbnRgLiBJdCBtb2RpZmllcyBgcGFyLVx1MDAzZXJvdGF0ZWAgYW5kIGNhbGxzIGBzZXRfYmxpdHRpbmdfdHlwZWAsIHdoaWNoIGlzIGRlZmluaXRlbHkgd29ydGggdGFyZ2V0aW5nLiBUaGVzZSBhcmUgZXhhY3RseSB0aGUgdHlwZXMgb2YgY2hhbmdlcyB0aGF0IGNhbiBsZWFkIHRvIGludGVyZXN0aW5nIGJ1Z3MuXG5cbkJhc2VkIG9uIHRoaXMsIG15IGZvY3VzIHN5bWJvbHMgYXJlIGNsZWFyOiBgZmJjb25fc2V0X2ZvbnRgIGFuZCBgZmJjb25fc2V0X2RlZl9mb250YC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMuXG5cbkkgd2lsbCBhbHNvIG5lZWQgdG8gcmV2aWV3IGBzZXRfYmxpdHRpbmdfdHlwZWAgYW5kIGRldGVybWluZSBpZiBpdCdzIGEgd29ydGh3aGlsZSBmb2N1cyBzeW1ib2wuXG5cbioqSW4gc3VtbWFyeSwgbXkgY29uZmlnIHdpbGwgaW5jbHVkZToqKlxuKiAgIGBGQmBcbiogICBgRkJfVklSVFVBTGBcbiogICBgRlJBTUVCVUZGRVJfQ09OU09MRWBcbiogICBgRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTmBcblxuQW5kIHRoZSBmb2N1cyBzeW1ib2xzIHdpbGwgYmUgYGZiY29uX3NldF9mb250YCwgYGZiY29uX3NldF9kZWZfZm9udGAsIGFuZCBgc2V0X2JsaXR0aW5nX3R5cGVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjkyMywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA5OjE1LjE4ODExMTM4MVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg1NzY4NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0X2JsaXR0aW5nX3R5cGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9NjQxPXN0YXRpYyB2b2lkIGZiY29uX3ByZXBhcmVfbG9nbyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLFxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtNzMwLSNpZmRlZiBDT05GSUdfRkJfVElMRUJMSVRUSU5HXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6NzMxOnN0YXRpYyB2b2lkIHNldF9ibGl0dGluZ190eXBlKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8pXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtNzMyLXtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTc0NT1zdGF0aWMgaW50IGZiY29uX2ludmFsaWRfY2hhcmNvdW50KHN0cnVjdCBmYl9pbmZvICppbmZvLCB1bnNpZ25lZCBjaGFyY291bnQpXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy03NTUtI2Vsc2VcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzo3NTY6c3RhdGljIHZvaWQgc2V0X2JsaXR0aW5nX3R5cGUoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbylcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy03NTcte1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9ODI3PXN0YXRpYyBpbnQgY29uMmZiX2FjcXVpcmVfbmV3aW5mbyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLFxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtODM2LVxcdGlmICh2YylcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzo4Mzc6XFx0XFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTgzOC1cXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTkxMj1zdGF0aWMgaW50IHNldF9jb24yZmJfbWFwKGludCB1bml0LCBpbnQgbmV3aWR4LCBpbnQgdXNlcilcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTk0Mi1cXHR9IGVsc2UgaWYgKHZjKSB7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6OTQzOlxcdFxcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy05NDQtXFx0fVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MTAxND1zdGF0aWMgY29uc3QgY2hhciAqZmJjb25fc3RhcnR1cCh2b2lkKVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTA1My1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoxMDU0OlxcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0xMDU1LVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MTA4OD1zdGF0aWMgdm9pZCBmYmNvbl9pbml0KHN0cnVjdCB2Y19kYXRhICp2YywgYm9vbCBpbml0KVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTE3NS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoxMTc2OlxcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0xMTc3LVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTIzMC1cXHRcXHRwYXItXFx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoxMjMxOlxcdFxcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0xMjMyLVxcdH1cXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTIxNDM9c3RhdGljIGJvb2wgZmJjb25fc3dpdGNoKHN0cnVjdCB2Y19kYXRhICp2YylcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTIyMTMtXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjIxNDpcXHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjIxNS1cXHRwYXItXFx1MDAzZWN1cnNvcl9yZXNldCA9IDE7XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yMjE4LVxcdFxcdHBhci1cXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjIyMTk6XFx0XFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTIyMjAtXFx0fVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MjQwMD1zdGF0aWMgaW50IGZiY29uX2RvX3NldF9mb250KHN0cnVjdCB2Y19kYXRhICp2YywgaW50IHcsIGludCBoLCBpbnQgY2hhcmNvdW50LFxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQzMC1cXHRcXHRcXHRwYXItXFx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoyNDMxOlxcdFxcdFxcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNDMyLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI0NzEtXFx0XFx0XFx0cGFyLVxcdTAwM2Vyb3RhdGUgPSBGQl9ST1RBVEVfVVI7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjQ3MjpcXHRcXHRcXHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQ3My1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0yNjQ0PXN0YXRpYyB2b2lkIGZiY29uX21vZGVjaGFuZ2VkKHN0cnVjdCBmYl9pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjY2OC1cXHRwID0gXFx1MDAyNmZiX2Rpc3BsYXlbdmMtXFx1MDAzZXZjX251bV07XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjY2OTpcXHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjY3MC1cXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI2NzktXFx0XFx0cGFyLVxcdTAwM2Vyb3RhdGUgPSBGQl9ST1RBVEVfVVI7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjY4MDpcXHRcXHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjY4MS1cXHR9XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0yNzA0PXN0YXRpYyB2b2lkIGZiY29uX3NldF9hbGxfdmNzKHN0cnVjdCBmYl9pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjcyOC1cXHRcXHRwID0gXFx1MDAyNmZiX2Rpc3BsYXlbdmMtXFx1MDAzZXZjX251bV07XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjcyOTpcXHRcXHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjczMC1cXHRcXHR2YXJfdG9fZGlzcGxheShwLCBcXHUwMDI2aW5mby1cXHUwMDNldmFyLCBpbmZvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDk6MTUuMjU2NjkyNzM4WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4ODEwMjE3ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRm9udCBSb3RhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGhlcmUncyB0aGUgYnJlYWtkb3duIGFzIEkgc2VlIGl0LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2UuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGhvdyB0aGUgZnJhbWVidWZmZXIgY29uc29sZSBoYW5kbGVzIGZvbnQgc2V0dGluZ3MsIHNwZWNpZmljYWxseSB3aGVuIHJvdGF0aW9uIGlzIGVuYWJsZWQuIEl0J3MgdG91Y2hpbmcgdGhlIGBmYmNvbl9kb19zZXRfZm9udGAgZnVuY3Rpb24sIHdoaWNoIGlzLCBvZiBjb3Vyc2UsIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgY29uc29sZSByZW5kZXJpbmcuXG5cbkkgdGhpbmsgdGhlIGltcG9ydGFudCB0aGluZyB0byBmb2N1cyBvbiBhcmUgdGhlIGVudHJ5IHBvaW50cyDigJMgbGV0J3MgbWFrZSBzdXJlIHdlIGV4YW1pbmUgYGZiY29uX3NldF9mb250YCBhbmQgYGZiY29uX3NldF9kZWZfZm9udGAuIGBzZXRfYmxpdHRpbmdfdHlwZWAgYmVpbmcgc3RhdGljIGFuZCB1c2VkIGluIHZhcmlvdXMgcGxhY2VzIGlzIGEgYml0IG9mIGEgcmVkIGhlcnJpbmcsIHdlIG5lZWQgdG8gY29uY2VudHJhdGUgb24gdGhlIHB1YmxpY2x5IGFjY2Vzc2libGUgZnVuY3Rpb25zLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZzsgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgaXQgaW1wYWN0cyBhIHZlcnkgY2VudHJhbCBhbmQgYWNjZXNzaWJsZSBwYXJ0IG9mIHRoZSBzeXN0ZW0sIHRoZSBmcmFtZWJ1ZmZlciBjb25zb2xlLiBBbnkgaXNzdWUgaGVyZSBjb3VsZCBsZWFkIHRvIHZpc3VhbCBjb3JydXB0aW9uLCBjcmFzaGVzLCBvciBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBkZXBlbmRpbmcgb24gaG93IGZvbnRzIGFyZSBoYW5kbGVkIGFuZCByZW5kZXJlZCB3aXRoIHRoZSByb3RhdGlvbi5cblxuSSB3aWxsIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIG5vdy4gVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBgRkJgLCBgRkJfVklSVFVBTGAsIGBGUkFNRUJVRkZFUl9DT05TT0xFYCwgYW5kIGBGUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OYCBhcmUgYWxsIGdvaW5nIHRvIGJlIGVzc2VudGlhbCBmb3IgdGVzdGluZyB0aGlzLiBMZXQncyBtYWtlIHN1cmUgb3VyIGZ1enppbmcgY2FtcGFpZ25zIGFyZSBjb21wcmVoZW5zaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM2NCwiT3V0cHV0VG9rZW5zIjoxMzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDk6MjIuMTM3NzE2ODM5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MzUzNTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGQlwiLFxuICAgIFwiRkJfVklSVFVBTFwiLFxuICAgIFwiRlJBTUVCVUZGRVJfQ09OU09MRVwiLFxuICAgIFwiRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZiY29uX3NldF9mb250XCIsXG4gICAgXCJmYmNvbl9zZXRfZGVmX2ZvbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBmcmFtZWJ1ZmZlciBjb25zb2xlIGZvbnQgc2V0dGluZyBsb2dpYyAoZmJjb25fZG9fc2V0X2ZvbnQpIHRvIGhhbmRsZSBmb250IHJvdGF0aW9uIHdoZW4gdGhlIGNvbnNvbGUgaXMgdmlzaWJsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGNvcmUgc3Vic3lzdGVtIChmYmNvbikgYW5kIGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBpb2N0bHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRkJcIixcbiAgICBcIkZCX1ZJUlRVQUxcIixcbiAgICBcIkZSQU1FQlVGRkVSX0NPTlNPTEVcIixcbiAgICBcIkZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmYmNvbl9zZXRfZm9udFwiLFxuICAgIFwiZmJjb25fc2V0X2RlZl9mb250XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgZnJhbWVidWZmZXIgY29uc29sZSBmb250IHNldHRpbmcgbG9naWMgKGZiY29uX2RvX3NldF9mb250KSB0byBoYW5kbGUgZm9udCByb3RhdGlvbiB3aGVuIHRoZSBjb25zb2xlIGlzIHZpc2libGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBjb3JlIHN1YnN5c3RlbSAoZmJjb24pIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlciBzcGFjZSB2aWEgaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowOToyMi4yNjUwNzg4NTFaIiwiU2VxIjo0MywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxODU0ODg4MDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDk6MjIuMjY1NjM2NjAxWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcxODU0MzI1MDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgZmJjb25fZG9fc2V0X2ZvbnRgIHdoZXJlIGNoYW5naW5nIHRoZSBmb250IGNoYXJhY3RlciBjb3VudCAoZS5nLiwgZnJvbSAyNTYgdG8gNTEyKSB3aXRob3V0IHVwZGF0aW5nIHRoZSByb3RhdGVkIGZvbnQgYnVmZmVyIChgcGFyLVxcdTAwM2Vyb3RhdGVkLmJ1ZmApIGxlYWRzIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gV2hlbiBgZmJjb25gIHJlbmRlcnMgdGV4dCwgaXQgdXNlcyB0aGUgbmV3IGNoYXJhY3RlciBjb3VudCB0byBpbmRleCBpbnRvIHRoZSBvbGQsIHNtYWxsZXIgYnVmZmVyLCByZXN1bHRpbmcgaW4gYSBoZWFwIE9PQiByZWFkLiBUaGlzIGlzIGEgY2xhc3NpYyBtZW1vcnkgc2FmZXR5IGlzc3VlIHRoYXQgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhayB0byB1c2VyIHNwYWNlIGludm9sdmVkLCBhcyB0aGUgYnVmZmVyIGlzIGZ1bGx5IGluaXRpYWxpemVkIHVwIHRvIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRkNTg4ZTIwMmU0M2Y4M2E3ZTg5NGY3NzA3NDBiODhjOGYzNjI2OGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwMjowNzo0NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jIGIvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmNcbmluZGV4IDIzYjNjNTM2ZDUzZDEuLmM3NGE0OTA1YjhlMmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uY1xuKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmNcbkBAIC0yNDI1LDYgKzI0MjUsMTMgQEAgc3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCxcbiBcdGVsc2UgaWYgKCF2Yy1cdTAwM2V2Y19oaV9mb250X21hc2sgXHUwMDI2XHUwMDI2IGNoYXJjb3VudCA9PSA1MTIpXG4gXHRcdHNldF92Y19oaV9mb250KHZjLCB0cnVlKTtcbiBcbitcdGlmIChjb25faXNfdmlzaWJsZSh2YykpIHtcbitcdFx0aWYgKHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQgXHUwMDI2XHUwMDI2IHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnQoaW5mbywgdmMpKSB7XG4rXHRcdFx0cGFyLVx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcbitcdFx0XHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XG4rXHRcdH1cbitcdH1cbitcbiBcdGlmIChyZXNpemUpIHtcbiBcdFx0aW50IGNvbHMsIHJvd3M7XG4gXG5AQCAtMjQ1OSw2ICsyNDY2LDEzIEBAIHN0YXRpYyBpbnQgZmJjb25fZG9fc2V0X2ZvbnQoc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgdywgaW50IGgsIGludCBjaGFyY291bnQsXG4gXHRlbHNlIGlmICghb2xkX2hpX2ZvbnRfbWFzayBcdTAwMjZcdTAwMjYgdmMtXHUwMDNldmNfaGlfZm9udF9tYXNrKVxuIFx0XHRzZXRfdmNfaGlfZm9udCh2YywgZmFsc2UpO1xuIFxuK1x0aWYgKGNvbl9pc192aXNpYmxlKHZjKSkge1xuK1x0XHRpZiAocGFyLVx1MDAzZWJpdG9wcy1cdTAwM2Vyb3RhdGVfZm9udCBcdTAwMjZcdTAwMjYgcGFyLVx1MDAzZWJpdG9wcy1cdTAwM2Vyb3RhdGVfZm9udChpbmZvLCB2YykpIHtcbitcdFx0XHRwYXItXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xuK1x0XHRcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcbitcdFx0fVxuK1x0fVxuK1xuIFx0Zm9udF9kYXRhX3B1dChkYXRhKTtcbiBcbiBcdHJldHVybiByZXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowOToyMi4yNjU2Mzc1NTFaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2OTQ1Nzg1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBGb250IFJvdGF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jYC4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZGluZyBzb21lIGxvZ2ljIGFyb3VuZCBmb250IHJvdGF0aW9uLCBzcGVjaWZpY2FsbHkgbW9kaWZ5aW5nIGBmYmNvbl9kb19zZXRfZm9udGAuIFR3byBpZGVudGljYWwgYmxvY2tzIG9mIGNvZGUgYXJlIGFkZGVkIHRoYXQgaW50cm9kdWNlIGEgY2hlY2sgZm9yIHZpc2liaWxpdHkgYW5kIGNhbGwgYHBhci1cdTAwM2ViaXRvcHMtXHUwMDNlcm90YXRlX2ZvbnRgIGlmIHRoZSBjb25zb2xlIGlzIHZpc2libGUuIFRoZW4gaXQncyBzZXR0aW5nIGBwYXItXHUwMDNlcm90YXRlYCB0byBgRkJfUk9UQVRFX1VSYCBhbmQgY2FsbGluZyBgc2V0X2JsaXR0aW5nX3R5cGVgLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHdoYXQgYHJvdGF0ZV9mb250YCBhY3R1YWxseSAqZG9lcyouIElzIGl0IGFsbG9jYXRpbmcgbWVtb3J5PyBDb3VsZCB0aGVyZSBiZSBhIHBvdGVudGlhbCBmb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSB3aXRoaW4gdGhhdCBmdW5jdGlvbj8gVGhlIGNvbW1lbnQgc3VnZ2VzdHMgYSBmb250IHJvdGF0aW9uIGJ1ZyBmaXgsIHdoaWNoIGNvdWxkIHZlcnkgd2VsbCBtZWFuIGEgY3Jhc2ggb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYHJvdGF0ZV9mb250YCBmdW5jdGlvbiBjb21wbGV0ZWx5IHRvIGFzc2VzcyB0aGUgcmlzay4gSSdsbCBzdGFydCB3aXRoIGEgcXVpY2sgZ3JlcCB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCBhbmQgc2VlIGhvdyBpdCdzIHVzZWQgZWxzZXdoZXJlLCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyByZWQgZmxhZ3MgaW4gaXRzIGltcGxlbWVudGF0aW9uLiBNZW1vcnkgc2FmZXR5IGlzIGFsd2F5cyBhIHByaW1hcnkgY29uY2VybiBpbiBkcml2ZXIgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA5OjI3LjIzNTA5ODM0MloiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMDc2ODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJvdGF0ZV9mb250XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MTA4OD1zdGF0aWMgdm9pZCBmYmNvbl9pbml0KHN0cnVjdCB2Y19kYXRhICp2YywgYm9vbCBpbml0KVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTIyOC1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoxMjI5OlxcdGlmIChwYXItXFx1MDAzZWJpdG9wcy1cXHUwMDNlcm90YXRlX2ZvbnQgXFx1MDAyNlxcdTAwMjYgcGFyLVxcdTAwM2ViaXRvcHMtXFx1MDAzZXJvdGF0ZV9mb250KGluZm8sIHZjKSkge1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTEyMzAtXFx0XFx0cGFyLVxcdTAwM2Vyb3RhdGUgPSBGQl9ST1RBVEVfVVI7XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0yMTQzPXN0YXRpYyBib29sIGZiY29uX3N3aXRjaChzdHJ1Y3QgdmNfZGF0YSAqdmMpXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yMjE2LVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjIyMTc6XFx0aWYgKHBhci1cXHUwMDNlYml0b3BzLVxcdTAwM2Vyb3RhdGVfZm9udCBcXHUwMDI2XFx1MDAyNiBwYXItXFx1MDAzZWJpdG9wcy1cXHUwMDNlcm90YXRlX2ZvbnQoaW5mbywgdmMpKSB7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjIxOC1cXHRcXHRwYXItXFx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI0MDA9c3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCxcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI0MjgtXFx0aWYgKGNvbl9pc192aXNpYmxlKHZjKSkge1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI0Mjk6XFx0XFx0aWYgKHBhci1cXHUwMDNlYml0b3BzLVxcdTAwM2Vyb3RhdGVfZm9udCBcXHUwMDI2XFx1MDAyNiBwYXItXFx1MDAzZWJpdG9wcy1cXHUwMDNlcm90YXRlX2ZvbnQoaW5mbywgdmMpKSB7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQzMC1cXHRcXHRcXHRwYXItXFx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI0NjktXFx0aWYgKGNvbl9pc192aXNpYmxlKHZjKSkge1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI0NzA6XFx0XFx0aWYgKHBhci1cXHUwMDNlYml0b3BzLVxcdTAwM2Vyb3RhdGVfZm9udCBcXHUwMDI2XFx1MDAyNiBwYXItXFx1MDAzZWJpdG9wcy1cXHUwMDNlcm90YXRlX2ZvbnQoaW5mbywgdmMpKSB7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQ3MS1cXHRcXHRcXHRwYXItXFx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI2NDQ9c3RhdGljIHZvaWQgZmJjb25fbW9kZWNoYW5nZWQoc3RydWN0IGZiX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNjc3LVxcdCAqL1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI2Nzg6XFx0aWYgKHBhci1cXHUwMDNlYml0b3BzLVxcdTAwM2Vyb3RhdGVfZm9udCBcXHUwMDI2XFx1MDAyNiBwYXItXFx1MDAzZWJpdG9wcy1cXHUwMDNlcm90YXRlX2ZvbnQoaW5mbywgdmMpKSB7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjY3OS1cXHRcXHRwYXItXFx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5oPTU5PXN0cnVjdCBmYmNvbl9iaXRvcHMge1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmgtNzEtXFx0aW50ICAoKnVwZGF0ZV9zdGFydCkoc3RydWN0IGZiX2luZm8gKmluZm8pO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5oOjcyOlxcdGludCAgKCpyb3RhdGVfZm9udCkoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2Y19kYXRhICp2Yyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmgtNzMtfTtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYz0zNjM9c3RhdGljIGNvbnN0IHN0cnVjdCBmYmNvbl9iaXRvcHMgY2N3X2ZiY29uX2JpdG9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYy0zNjktXFx0LnVwZGF0ZV9zdGFydCA9IGNjd191cGRhdGVfc3RhcnQsXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jOjM3MDpcXHQucm90YXRlX2ZvbnQgPSBmYmNvbl9yb3RhdGVfZm9udCxcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmMtMzcxLX07XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYz0zNDY9c3RhdGljIGNvbnN0IHN0cnVjdCBmYmNvbl9iaXRvcHMgY3dfZmJjb25fYml0b3BzID0ge1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmMtMzUyLVxcdC51cGRhdGVfc3RhcnQgPSBjd191cGRhdGVfc3RhcnQsXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmM6MzUzOlxcdC5yb3RhdGVfZm9udCA9IGZiY29uX3JvdGF0ZV9mb250LFxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jLTM1NC19O1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTE3LVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYzoxODppbnQgZmJjb25fcm90YXRlX2ZvbnQoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2Y19kYXRhICp2YylcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtMTkte1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5oLTIxLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuaDoyMjppbnQgZmJjb25fcm90YXRlX2ZvbnQoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2Y19kYXRhICp2Yyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5oLTIzLVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmM9Mzk3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJjb25fYml0b3BzIHVkX2ZiY29uX2JpdG9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jLTQwMy1cXHQudXBkYXRlX3N0YXJ0ID0gdWRfdXBkYXRlX3N0YXJ0LFxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jOjQwNDpcXHQucm90YXRlX2ZvbnQgPSBmYmNvbl9yb3RhdGVfZm9udCxcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYy00MDUtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDk6MjcuMzQ1MTgwMzAzWiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTUwNjg5MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBmYmNvbl9yb3RhdGVfZm9udGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gYGZiY29uX3JvdGF0ZV9mb250YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBmcmFtZWJ1ZmZlciBjb25zb2xlIGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSdtIHRyeWluZyB0byBwaW4gZG93biB0aGUgY29yZSBmdW5jdGlvbiBvZiB0aGlzIHJvdXRpbmUuIElzIGl0IGFib3V0IHJlbmRlcmluZywgcmUtbWFwcGluZywgb3IgcG90ZW50aWFsbHkgYWx0ZXJpbmcgdGhlIGdseXBoIGFwcGVhcmFuY2UgYmFzZWQgb24gYSByb3RhdGlvbiBvciBwZXJzcGVjdGl2ZSBwYXJhbWV0ZXI/IEknbSBpbW1lZGlhdGVseSB0cnlpbmcgdG8gY29ubmVjdCBpdCB0byB0aGUgbG93LWxldmVsIGdyYXBoaWNzIG9wZXJhdGlvbnMuIEnigJlsbCBiZSBsb29raW5nIHRvIHNlZSBpZiBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIHZpZGVvIGNhcmQsIGZyYW1lYnVmZmVycywgb3IgaWYgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHNwZWNpZmljIGZvbnQgZGF0YSBiZWluZyByZW5kZXJlZC4gSSdtIGtlZW4gdG8gc2VlIGlmIHRoaXMgaXMgaGFuZGxpbmcgYSBmdW5kYW1lbnRhbCB0cmFuc2Zvcm0gb2YgdGhlIGNoYXJhY3RlcnMgdGhlbXNlbHZlcyBvciBpZiBpdCdzIG1vcmUgYWJvdXQgaG93IHRoZSBjb25zb2xlIGludGVycHJldHMgYW5kIGRpc3BsYXlzIHRoZW0gZ2l2ZW4gc29tZSB1bmRlcmx5aW5nIHJvdGF0aW9uIGNvbW1hbmRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTEwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDk6MzAuNTAwMjUyMDQyWiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzE5MDA5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYmNvbl9yb3RhdGVfZm9udFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTE3LVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYzoxODppbnQgZmJjb25fcm90YXRlX2ZvbnQoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2Y19kYXRhICp2YylcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtMTkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowOTozMC41NjM0NjM1NzhaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc5NTYxNDc2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgdGV4dDpcblxuKipEaXZpbmcgaW50byB0aGUgYGZiY29uX3JvdGF0ZV9mb250YCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgYGZiY29uX3JvdGF0ZV9mb250YCDigJMgc3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uIHdpdGhpbiBgZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBmb250IHJvdGF0aW9uIHdvcmtzIHdpdGhpbiB0aGUgZnJhbWVidWZmZXIgY29uc29sZSBjb250ZXh0LiBUaW1lIHRvIGFuYWx5emUgdGhlIHJvdGF0aW9uIHJvdXRpbmUgYW5kIGl0cyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBmcmFtZWJ1ZmZlciBkZXZpY2UgZHJpdmVyIGNvcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NDIsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowOTozMy4zNTkwODEyOTNaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE0NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE4OlxcdGludCBmYmNvbl9yb3RhdGVfZm9udChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZjX2RhdGEgKnZjKVxcbiAgMTk6XFx0e1xcbiAgMjA6XFx0XFx0c3RydWN0IGZiY29uX3BhciAqcGFyID0gaW5mby1cXHUwMDNlZmJjb25fcGFyO1xcbiAgMjE6XFx0XFx0dW5zaWduZWQgY2hhciAqYnVmO1xcbiAgMjI6XFx0XFx0aW50IHJldDtcXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0aWYgKHBhci1cXHUwMDNlcC1cXHUwMDNlZm9udGRhdGEgPT0gcGFyLVxcdTAwM2Vyb3RhdGVkLmZvbnRkYXRhIFxcdTAwMjZcXHUwMDI2IHBhci1cXHUwMDNlcm90YXRlID09IHBhci1cXHUwMDNlcm90YXRlZC5idWZfcm90YXRlKVxcbiAgMjU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuICAyNjpcXHRcXG4gIDI3OlxcdFxcdHBhci1cXHUwMDNlcm90YXRlZC5mb250ZGF0YSA9IHBhci1cXHUwMDNlcC1cXHUwMDNlZm9udGRhdGE7XFxuICAyODpcXHRcXHRwYXItXFx1MDAzZXJvdGF0ZWQuYnVmX3JvdGF0ZSA9IHBhci1cXHUwMDNlcm90YXRlO1xcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHRpZiAoaW5mby1cXHUwMDNlZmJvcHMtXFx1MDAzZWZiX3N5bmMpXFxuICAzMTpcXHRcXHRcXHRpbmZvLVxcdTAwM2VmYm9wcy1cXHUwMDNlZmJfc3luYyhpbmZvKTtcXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0YnVmID0gZm9udF9kYXRhX3JvdGF0ZShwYXItXFx1MDAzZXJvdGF0ZWQuZm9udGRhdGEsIHZjLVxcdTAwM2V2Y19mb250LndpZHRoLFxcbiAgMzQ6XFx0XFx0XFx0XFx0ICAgICAgIHZjLVxcdTAwM2V2Y19mb250LmhlaWdodCwgdmMtXFx1MDAzZXZjX2ZvbnQuY2hhcmNvdW50LFxcbiAgMzU6XFx0XFx0XFx0XFx0ICAgICAgIHBhci1cXHUwMDNlcm90YXRlZC5idWZfcm90YXRlLCBwYXItXFx1MDAzZXJvdGF0ZWQuYnVmLFxcbiAgMzY6XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZwYXItXFx1MDAzZXJvdGF0ZWQuYnVmc2l6ZSk7XFxuICAzNzpcXHRcXHRpZiAoSVNfRVJSKGJ1ZikpIHtcXG4gIDM4OlxcdFxcdFxcdHJldCA9IFBUUl9FUlIoYnVmKTtcXG4gIDM5OlxcdFxcdFxcdGdvdG8gZXJyX2tmcmVlO1xcbiAgNDA6XFx0XFx0fVxcbiAgNDE6XFx0XFxuICA0MjpcXHRcXHRwYXItXFx1MDAzZXJvdGF0ZWQuYnVmID0gYnVmO1xcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHRyZXR1cm4gMDtcXG4gIDQ1OlxcdFxcbiAgNDY6XFx0ZXJyX2tmcmVlOlxcbiAgNDc6XFx0XFx0a2ZyZWUocGFyLVxcdTAwM2Vyb3RhdGVkLmJ1Zik7XFxuICA0ODpcXHRcXHRwYXItXFx1MDAzZXJvdGF0ZWQuYnVmID0gTlVMTDsgLyogY2xlYXIgaGVyZSB0byBhdm9pZCBvdXRwdXQgKi9cXG4gIDQ5OlxcdFxcdHBhci1cXHUwMDNlcm90YXRlZC5idWZzaXplID0gMDtcXG4gIDUwOlxcdFxcbiAgNTE6XFx0XFx0cmV0dXJuIHJldDtcXG4gIDUyOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDk6MzMuMzU5MTQzOTMzWiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTM0NzAzNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkFuYWx5emluZyBgZm9udF9kYXRhX3JvdGF0ZWAqKlxuXG5Pa2F5LCBzbyBgZm9udF9kYXRhX3JvdGF0ZWAuLi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBmdW5jdGlvbi4gQmFzZWQgb24gdGhlIG5hbWUsIGl0J3MgcHJldHR5IGNsZWFyIGl0J3MgZ29pbmcgdG8gaW52b2x2ZSBzb21lIGtpbmQgb2YgZm9udCByb3RhdGlvbi4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcyAqaG93KiBpcyB0aGF0IGFjaGlldmVkPyBEb2VzIGl0IHByZS1hbGxvY2F0ZSBhIHNwZWNpZmljIGFtb3VudCBvZiBtZW1vcnkgZm9yIHRoZSByb3RhdGVkIGZvbnQ/IERvZXMgaXQgY2FsY3VsYXRlIHRoZSByZXF1aXJlZCBtZW1vcnkgb24gdGhlIGZseT8gVGhlIG5hbWUgYWxzbyBzdWdnZXN0cyBpdCBoYW5kbGVzIGZvbnQgZGF0YSwgc28gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB3aGF0IGtpbmQgb2YgZm9udCBkYXRhIGlzIGJlaW5nIHJvdGF0ZWQ6IGFyZSB3ZSB0YWxraW5nIGJpdG1hcCBmb250cywgdmVjdG9yIGZvbnRzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBsb29rIGF0IHRoZSBjb2RlIHNob3VsZCBjbGVhciB1cCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlsczogbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJvdGF0aW9uIGFsZ29yaXRobSBhcmUga2V5IGhlcmUuIEknbSBnb2luZyB0byBzdGFydCBieSBkaXZpbmcgaW50byB0aGUgYGZvbnRfZGF0YV9yb3RhdGVgIGZ1bmN0aW9uIGl0c2VsZi4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTM2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowOTozNi4yMTI2MTcyNDNaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MTExMjU1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb250X2RhdGFfcm90YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jPTE4PWludCBmYmNvbl9yb3RhdGVfZm9udChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZjX2RhdGEgKnZjKVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTMyLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYzozMzpcXHRidWYgPSBmb250X2RhdGFfcm90YXRlKHBhci1cXHUwMDNlcm90YXRlZC5mb250ZGF0YSwgdmMtXFx1MDAzZXZjX2ZvbnQud2lkdGgsXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTM0LVxcdFxcdFxcdCAgICAgICB2Yy1cXHUwMDNldmNfZm9udC5oZWlnaHQsIHZjLVxcdTAwM2V2Y19mb250LmNoYXJjb3VudCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDk6MzcuMTUzNzM0MzgyWiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODQ4Mjk5NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipTZWFyY2hpbmcgZm9yIGEgTWlzc2luZyBGdW5jdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIGV4cGVjdGluZyB0byBmaW5kIGBmb250X2RhdGFfcm90YXRlYCBpbiBgZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2AsIGJ1dCBpdCdzIG5vdCB0aGVyZS4gSG1tLCB0aGF0J3MgdW51c3VhbC4gSXQncyB0aW1lIHRvIGJyb2FkZW4gdGhlIHNlYXJjaC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiAqYWN0dWFsbHkqIGxpdmVzIHdpdGhpbiB0aGUgY29kZWJhc2UuIExldCdzIGZpcmUgdXAgYSBnbG9iYWwgc2VhcmNoIGFuZCBzZWUgd2hlcmUgdGhpcyBiZWFzdCBpcyBoaWRpbmcuIFRpbWUgdG8gY2FzdCBhIHdpZGVyIG5ldCBhbmQgZmlndXJlIG91dCBpdHMgdHJ1ZSBsb2NhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU1NSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjA5OjQwLjEzODU2Njk1NVoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0MzU2MDgzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb250X2RhdGFfcm90YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmM9MTg9aW50IGZiY29uX3JvdGF0ZV9mb250KHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgdmNfZGF0YSAqdmMpXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtMzItXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jOjMzOlxcdGJ1ZiA9IGZvbnRfZGF0YV9yb3RhdGUocGFyLVxcdTAwM2Vyb3RhdGVkLmZvbnRkYXRhLCB2Yy1cXHUwMDNldmNfZm9udC53aWR0aCxcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtMzQtXFx0XFx0XFx0ICAgICAgIHZjLVxcdTAwM2V2Y19mb250LmhlaWdodCwgdmMtXFx1MDAzZXZjX2ZvbnQuY2hhcmNvdW50LFxcbi0tXFxuaW5jbHVkZS9saW51eC9mb250Lmg9MTEyPXZvaWQgZm9udF9nbHlwaF9yb3RhdGVfMjcwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmdseXBoLCB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsXFxuaW5jbHVkZS9saW51eC9mb250LmgtMTEzLVxcdFxcdFxcdCAgIHVuc2lnbmVkIGNoYXIgKm91dCk7XFxuaW5jbHVkZS9saW51eC9mb250Lmg6MTE0OnVuc2lnbmVkIGNoYXIgKmZvbnRfZGF0YV9yb3RhdGUoZm9udF9kYXRhX3QgKmZkLCB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsXFxuaW5jbHVkZS9saW51eC9mb250LmgtMTE1LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBjaGFyY291bnQsIHVuc2lnbmVkIGludCBzdGVwcyxcXG4tLVxcbmxpYi9mb250cy9mb250X3JvdGF0ZS5jPTE3NT1FWFBPUlRfU1lNQk9MX0dQTChmb250X2dseXBoX3JvdGF0ZV8yNzApO1xcbi0tXFxubGliL2ZvbnRzL2ZvbnRfcm90YXRlLmMtMTc3LS8qKlxcbmxpYi9mb250cy9mb250X3JvdGF0ZS5jOjE3ODogKiBmb250X2RhdGFfcm90YXRlIC0gUm90YXRlIGZvbnQgZGF0YSBieSBtdWx0aXBsZXMgb2YgOTDCsFxcbmxpYi9mb250cy9mb250X3JvdGF0ZS5jLTE3OS0gKiBAZmQ6IFRoZSBmb250IGRhdGEgdG8gcm90YXRlXFxuLS1cXG5saWIvZm9udHMvZm9udF9yb3RhdGUuYy0yMDMtICovXFxubGliL2ZvbnRzL2ZvbnRfcm90YXRlLmM6MjA0OnVuc2lnbmVkIGNoYXIgKmZvbnRfZGF0YV9yb3RhdGUoZm9udF9kYXRhX3QgKmZkLCB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsXFxubGliL2ZvbnRzL2ZvbnRfcm90YXRlLmMtMjA1LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBjaGFyY291bnQsIHVuc2lnbmVkIGludCBzdGVwcyxcXG4tLVxcbmxpYi9mb250cy9mb250X3JvdGF0ZS5jLTI3NC19XFxubGliL2ZvbnRzL2ZvbnRfcm90YXRlLmM6Mjc1OkVYUE9SVF9TWU1CT0xfR1BMKGZvbnRfZGF0YV9yb3RhdGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowOTo0Mi4zODIxMzUzMDdaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU0ODUyNjMwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYGZvbnRfZGF0YV9yb3RhdGVgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGZvbnRfZGF0YV9yb3RhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBxdWlja2x5IGdldCBhIGhpZ2gtbGV2ZWwgdW5kZXJzdGFuZGluZy4gV2hhdCBpcyB0aGlzIGZ1bmN0aW9uICpzdXBwb3NlZCogdG8gZG8/IFRoZSBuYW1lIHN1Z2dlc3RzIHNvbWV0aGluZyByZWxhdGVkIHRvIGZvbnQgZGF0YSBhbmQgcm90YXRpb24uIE15IGJyYWluIGltbWVkaWF0ZWx5IHN0YXJ0cyBjb25uZWN0aW5nIHRoaXMgdG8gcG9zc2libGUgdXNlczogcmVuZGVyaW5nIHJvdGF0ZWQgdGV4dCwgZ2VuZXJhdGluZyByb3RhdGVkIGZvbnQgZ2x5cGhzIGZvciBkaWZmZXJlbnQgY2hhcmFjdGVyIHNldHMsIG9yIHBvdGVudGlhbGx5IGZvciB0cmFuc2Zvcm1hdGlvbnMgaW4gdHlwb2dyYXBoeSBsaWJyYXJpZXMuXG5cbkknbSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIG9mIHRoZSBudWFuY2VzIGJhc2VkIG9uIG15IGV4cGVyaWVuY2UuIElzIHRoaXMgYSBzaW1wbGUgcm90YXRpb24gb2YgYSBiaXRtYXAsIG9yIGlzIGl0IGRlYWxpbmcgd2l0aCB2ZWN0b3IgZm9udCBkYXRhLCB3aGljaCBpbnRyb2R1Y2VzIGEgd2hvbGUgZGlmZmVyZW50IHNldCBvZiBjb21wbGV4aXR5PyBBcmUgd2UgdGFsa2luZyBhYm91dCByb3RhdGluZyBpbmRpdmlkdWFsIGdseXBocywgb3IgYW4gZW50aXJlIHN0cmluZyBvZiB0ZXh0PyBUaGUgaW1wbGVtZW50YXRpb24gd2lsbCBtYWtlIGEgYmlnIGRpZmZlcmVuY2UsIGNvbnNpZGVyaW5nIHRoZSBtYW55IGFzcGVjdHMgb2YgdGhlIGZvbnQgZGF0YS5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcHMgd291bGQgYmU6XG5cbiogICAqKkxvb2sgYXQgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZToqKiBXaGF0IGFyZSB0aGUgaW5wdXRzPyBBcmUgd2UgZGVhbGluZyB3aXRoIGNoYXJhY3RlciBjb2RlcywgZm9udCBkYXRhIHN0cnVjdHVyZXMgKGxpa2UgYFRURl9Gb250YCwgYEZUX0ZhY2VgIGV0Yy4pLCByb3RhdGlvbiBhbmdsZSBpbiBkZWdyZWVzIG9yIHJhZGlhbnM/IFdoYXQgYWJvdXQgdGhlIG91dHB1dCBmb3JtYXQ/IElzIHRoaXMgaW4tcGxhY2UgbWFuaXB1bGF0aW9uLCBvciBkb2VzIGl0IHJldHVybiBhIG5ldyByb3RhdGVkIGRhdGEgc3RydWN0dXJlP1xuKiAgICoqSW5zcGVjdCB0aGUgY29yZSBhbGdvcml0aG06KiogSeKAmW0gZ29pbmcgdG8gc2NhbiB0aGUgY29kZSBmb3IgdGhlIGNlbnRyYWwgb3BlcmF0aW9ucy4gQXJlIHRoZXkgbGV2ZXJhZ2luZyByb3RhdGlvbiBtYXRyaWNlcz8gQml0d2lzZSBvcGVyYXRpb25zIGZvciBiaXRtYXAgcm90YXRpb24/IEJlemllciBjdXJ2ZSB0cmFuc2Zvcm1hdGlvbnM/IFRoaXMgaXMgd2hlcmUgSSdsbCBnZXQgdGhlIHJlYWwgc3RvcnkuXG4qICAgKipDb25zaWRlciBlZGdlIGNhc2VzOioqIEknbSBhdXRvbWF0aWNhbGx5IHRoaW5raW5nIGFib3V0IGhhbmRsaW5nIG9mIGRpZmZlcmVudCBmb250IGRhdGEgc3RydWN0dXJlcywgZ2x5cGhzIHdpdGggY29tcGxleCBjb250b3VycywgZW1wdHkgZ2x5cGhzLCBhbnRpLWFsaWFzaW5nIHRlY2huaXF1ZXMsIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBBcmUgdGhlcmUgb3B0aW1pemF0aW9ucyBmb3IgY29tbW9uIHJvdGF0aW9uIGFuZ2xlcyAoOTAsIDE4MCBkZWdyZWVzKT9cbiogICAqKkludmVzdGlnYXRlIGRlcGVuZGVuY2llczoqKiBJJ2xsIGJlIGN1cmlvdXMgYWJvdXQgd2hhdCBsaWJyYXJpZXMgb3IgZnVuY3Rpb25zIHRoaXMgZnVuY3Rpb24gY2FsbHMuIERvZXMgaXQgdXNlIGEgbGluZWFyIGFsZ2VicmEgbGlicmFyeT8gQXJlIHRoZXJlIGFueSBtZW1vcnkgYWxsb2NhdGlvbiBvciBkZWFsbG9jYXRpb24gcm91dGluZXMgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBwb3RlbnRpYWwgdGhyZWFkaW5nIGNvbmNlcm5zP1xuXG5CYXNlZCBvbiB0aG9zZSBpbml0aWFsIGNoZWNrcywgSSBjYW4gZm9ybSBhIG1vcmUgY29tcGxldGUgcGljdHVyZSwgYW5kIHN0YXJ0IHRvIGp1ZGdlIHRoZSBxdWFsaXR5LCBlZmZpY2llbmN5LCBhbmQgcG90ZW50aWFsIGxpbWl0YXRpb25zIG9mIHRoaXMgYGZvbnRfZGF0YV9yb3RhdGVgIGZ1bmN0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgdG8gc2VlIGlmIGl0J3Mgd2VsbC1kZXNpZ25lZCwgZWFzeSB0byBtYWludGFpbiwgYW5kIGRvZXMgaXRzIGpvYiBjb3JyZWN0bHkgaW4gYWxsIHNjZW5hcmlvcy4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNDcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowOTo0Ni45MzA2NjUxODhaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9mb250cy9mb250X3JvdGF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwNCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwNDpcXHR1bnNpZ25lZCBjaGFyICpmb250X2RhdGFfcm90YXRlKGZvbnRfZGF0YV90ICpmZCwgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LFxcbiAyMDU6XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGNoYXJjb3VudCwgdW5zaWduZWQgaW50IHN0ZXBzLFxcbiAyMDY6XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgKmJ1ZnNpemUpXFxuIDIwNzpcXHR7XFxuIDIwODpcXHRcXHRjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMgPSBmb250X2RhdGFfYnVmKGZkKTtcXG4gMjA5OlxcdFxcdHVuc2lnbmVkIGludCBzX2NlbGxzaXplID0gZm9udF9nbHlwaF9zaXplKHdpZHRoLCBoZWlnaHQpO1xcbiAyMTA6XFx0XFx0dW5zaWduZWQgaW50IGRfY2VsbHNpemUsIGk7XFxuIDIxMTpcXHRcXHR1bnNpZ25lZCBjaGFyICpkc3Q7XFxuIDIxMjpcXHRcXHRzaXplX3Qgc2l6ZTtcXG4gMjEzOlxcdFxcbiAyMTQ6XFx0XFx0c3RlcHMgJT0gNDtcXG4gMjE1OlxcdFxcbiAyMTY6XFx0XFx0c3dpdGNoIChzdGVwcykge1xcbiAyMTc6XFx0XFx0Y2FzZSAwOlxcbiAyMTg6XFx0XFx0Y2FzZSAyOlxcbiAyMTk6XFx0XFx0XFx0ZF9jZWxsc2l6ZSA9IHNfY2VsbHNpemU7XFxuIDIyMDpcXHRcXHRcXHRicmVhaztcXG4gMjIxOlxcdFxcdGNhc2UgMTpcXG4gMjIyOlxcdFxcdGNhc2UgMzpcXG4gMjIzOlxcdFxcdFxcdGRfY2VsbHNpemUgPSBmb250X2dseXBoX3NpemUoaGVpZ2h0LCB3aWR0aCk7IC8qIGZsaXAgd2lkdGgvaGVpZ2h0ICovXFxuIDIyNDpcXHRcXHRcXHRicmVhaztcXG4gMjI1OlxcdFxcdH1cXG4gMjI2OlxcdFxcbiAyMjc6XFx0XFx0aWYgKGNoZWNrX211bF9vdmVyZmxvdyhjaGFyY291bnQsIGRfY2VsbHNpemUsIFxcdTAwMjZzaXplKSlcXG4gMjI4OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbiAyMjk6XFx0XFxuIDIzMDpcXHRcXHRpZiAoIWJ1ZiB8fCAhYnVmc2l6ZSB8fCBzaXplIFxcdTAwM2UgKmJ1ZnNpemUpIHtcXG4gMjMxOlxcdFxcdFxcdGRzdCA9IGttYWxsb2NfYXJyYXkoY2hhcmNvdW50LCBkX2NlbGxzaXplLCBHRlBfS0VSTkVMKTtcXG4gMjMyOlxcdFxcdFxcdGlmICghZHN0KVxcbiAyMzM6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIDIzNDpcXHRcXG4gMjM1OlxcdFxcdFxcdGtmcmVlKGJ1Zik7XFxuIDIzNjpcXHRcXHRcXHRidWYgPSBkc3Q7XFxuIDIzNzpcXHRcXHRcXHRpZiAoYnVmc2l6ZSlcXG4gMjM4OlxcdFxcdFxcdFxcdCpidWZzaXplID0gc2l6ZTtcXG4gMjM5OlxcdFxcdH0gZWxzZSB7XFxuIDI0MDpcXHRcXHRcXHRkc3QgPSBidWY7XFxuIDI0MTpcXHRcXHR9XFxuIDI0MjpcXHRcXG4gMjQzOlxcdFxcdHN3aXRjaCAoc3RlcHMpIHtcXG4gMjQ0OlxcdFxcdGNhc2UgMDpcXG4gMjQ1OlxcdFxcdFxcdG1lbWNweShkc3QsIHNyYywgc2l6ZSk7XFxuIDI0NjpcXHRcXHRcXHRicmVhaztcXG4gMjQ3OlxcdFxcdGNhc2UgMTpcXG4gMjQ4OlxcdFxcdFxcdG1lbXNldChkc3QsIDAsIHNpemUpO1xcbiAyNDk6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNoYXJjb3VudDsgKytpKSB7XFxuIDI1MDpcXHRcXHRcXHRcXHRfX2ZvbnRfZ2x5cGhfcm90YXRlXzkwKHNyYywgd2lkdGgsIGhlaWdodCwgZHN0KTtcXG4gMjUxOlxcdFxcdFxcdFxcdHNyYyArPSBzX2NlbGxzaXplO1xcbiAyNTI6XFx0XFx0XFx0XFx0ZHN0ICs9IGRfY2VsbHNpemU7XFxuIDI1MzpcXHRcXHRcXHR9XFxuIDI1NDpcXHRcXHRcXHRicmVhaztcXG4gMjU1OlxcdFxcdGNhc2UgMjpcXG4gMjU2OlxcdFxcdFxcdG1lbXNldChkc3QsIDAsIHNpemUpO1xcbiAyNTc6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNoYXJjb3VudDsgKytpKSB7XFxuIDI1ODpcXHRcXHRcXHRcXHRfX2ZvbnRfZ2x5cGhfcm90YXRlXzE4MChzcmMsIHdpZHRoLCBoZWlnaHQsIGRzdCk7XFxuIDI1OTpcXHRcXHRcXHRcXHRzcmMgKz0gc19jZWxsc2l6ZTtcXG4gMjYwOlxcdFxcdFxcdFxcdGRzdCArPSBkX2NlbGxzaXplO1xcbiAyNjE6XFx0XFx0XFx0fVxcbiAyNjI6XFx0XFx0XFx0YnJlYWs7XFxuIDI2MzpcXHRcXHRjYXNlIDM6XFxuIDI2NDpcXHRcXHRcXHRtZW1zZXQoZHN0LCAwLCBzaXplKTtcXG4gMjY1OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjaGFyY291bnQ7ICsraSkge1xcbiAyNjY6XFx0XFx0XFx0XFx0X19mb250X2dseXBoX3JvdGF0ZV8yNzAoc3JjLCB3aWR0aCwgaGVpZ2h0LCBkc3QpO1xcbiAyNjc6XFx0XFx0XFx0XFx0c3JjICs9IHNfY2VsbHNpemU7XFxuIDI2ODpcXHRcXHRcXHRcXHRkc3QgKz0gZF9jZWxsc2l6ZTtcXG4gMjY5OlxcdFxcdFxcdH1cXG4gMjcwOlxcdFxcdFxcdGJyZWFrO1xcbiAyNzE6XFx0XFx0fVxcbiAyNzI6XFx0XFxuIDI3MzpcXHRcXHRyZXR1cm4gYnVmO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowOTo0Ni45MzA4MDMwODhaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA3NDIwNDg0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBGb250IFJvdGF0aW9uIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gYGZvbnRfZGF0YV9yb3RhdGVgLCB3aGljaCBmcm9tIHRoZSBsb29rcyBvZiBpdCwgaGFuZGxlcyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gZm9yIHJvdGF0ZWQgZm9udCBkYXRhLiBTcGVjaWZpY2FsbHksIGl0IHVzZXMgZWl0aGVyIGBtZW1jcHlgIG9yIGEgY29tYmluYXRpb24gb2YgYG1lbXNldGAgYW5kIHNvbWUgYF9fZm9udF9nbHlwaF9yb3RhdGVfKmAgZnVuY3Rpb25zLCBkZXBlbmRpbmcgb24gdGhlIGNpcmN1bXN0YW5jZXMuXG5cblRoZSBrZXkgY2hhbmdlIGlzIHRoaXMgYWRkaXRpb24gaW4gYGZiY29uX2RvX3NldF9mb250YC4gSXQgY2hlY2tzIGlmIHRoZSB2aXJ0dWFsIGNvbnNvbGUgaXMgdmlzaWJsZSBhbmQsIGlmIHNvLCBjYWxscyBgcm90YXRlX2ZvbnRgIHdoaWNoLCBhZ2FpbiwgYWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyBhIGJ1ZmZlci4gVGhlIGluaXRpYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGludHJvZHVjdGlvbiBoYXMgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy5cblxuRXNzZW50aWFsbHksIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgYnVnIHdoZXJlIHRoZSBgcm90YXRlX2ZvbnRgIGZ1bmN0aW9uIHdhc24ndCBiZWluZyBjYWxsZWQgd2hlbiBhIGZvbnQgd2FzIHNldC4gVGhhdCdzIHdoYXQncyBwaXF1aW5nIG15IGludGVyZXN0LiBJZiBgcm90YXRlX2ZvbnRgICp3YXNuJ3QqIGNhbGxlZCwgdGhlbiBJIG5lZWQgdG8gY29uc2lkZXIgd2hhdCBzdGF0ZSBgcGFyLVx1MDAzZXJvdGF0ZWQuYnVmYCB3b3VsZCBiZSBsZWZ0IGluLiBXYXMgaXQgbGVmdCB1bmluaXRpYWxpemVkIG9yIGV2ZW4gTlVMTD9cblxuSWYgYHBhci1cdTAwM2Vyb3RhdGVkLmJ1ZmAgd2FzIGluZGVlZCBOVUxMIGluIHRoZSBidWdneSBzdGF0ZSwgdGhhdCB3b3VsZCd2ZSByZXN1bHRlZCBpbiBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggd2UnZCB0eXBpY2FsbHkgZXhwZWN0IHRvIGJlIGNhdWdodCBieSBLQVNBTiBvciBhIGdlbmVyYWwgcHJvdGVjdGlvbiBmYXVsdCwgd2hpY2ggaXMgd2h5IGl0IGlzIHVubGlrZWx5IGl0IHdlbnQgdW5ub3RpY2VkLiBTbyB0aGUgbW9yZSBpbnRlcmVzdGluZyBwb3NzaWJpbGl0eSBpcyB0aGF0IGl0IHdhcyB1bmluaXRpYWxpemVkLiBJbiB0aGF0IHNjZW5hcmlvLCBLTVNBTiBzaG91bGQgaGF2ZSBzcG90dGVkIHRoYXQuXG5cblNvLCBzaW5jZSBpdCB3YXMgZml4ZWQsIGxldCdzIHNlZSB3aGVyZSBgcGFyLVx1MDAzZXJvdGF0ZWQuYnVmYCBpcyB1c2VkIHRvIHNlZSBpZiB3ZSBjYW4gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZpeCB3YXMgbmVlZGVkLCBvciBpZiB3ZSBjYW4gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBmb3IgZnVydGhlciBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3ODYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjowOTo1Mi4wMDUwMTM3NzlaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0OTkxNDU0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYXItXFx1MDAzZXJvdGF0ZWQuYnVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9NzczPXN0YXRpYyB2b2lkIGZiY29uX3JlbGVhc2Uoc3RydWN0IGZiX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy03ODktI2lmZGVmIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6NzkwOlxcdFxcdGtmcmVlKHBhci1cXHUwMDNlcm90YXRlZC5idWYpO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTc5MS0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTEwMTQ9c3RhdGljIGNvbnN0IGNoYXIgKmZiY29uX3N0YXJ0dXAodm9pZClcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTEwNDQtI2lmZGVmIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MTA0NTpcXHRwYXItXFx1MDAzZXJvdGF0ZWQuYnVmX3JvdGF0ZSA9IC0xO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTEwNDYtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0yNjQ0PXN0YXRpYyB2b2lkIGZiY29uX21vZGVjaGFuZ2VkKHN0cnVjdCBmYl9pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjY3MS1cXHQvKlxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI2NzI6XFx0ICogUmVidWlsZCBwYXItXFx1MDAzZXJvdGF0ZWQuYnVmIGZvciB0aGUgbmV3IHJvdGF0aW9uIG5vdyB0aGF0IGJpdG9wcyBoYXZlXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjY3My1cXHQgKiBzd2l0Y2hlZC4gIFRoZSBuZXcgcHV0Y3MvY3Vyc29yIG9wcyByZWFkIHRoaXMgYnVmZmVyOyBpZiBpdCBpcyBzdGlsbFxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jPTk4PXN0YXRpYyBpbmxpbmUgdm9pZCBjY3dfcHV0Y3NfYWxpZ25lZChzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLFxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jLTEwOC1cXHR3aGlsZSAoY250LS0pIHtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmM6MTA5OlxcdFxcdHNyYyA9IHBhci1cXHUwMDNlcm90YXRlZC5idWYgKyAoc2NyX3JlYWR3KHMtLSkgXFx1MDAyNiBjaGFybWFzaykgKiBjZWxsc2l6ZTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmMtMTEwLVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jPTEyOT1zdGF0aWMgdm9pZCBjY3dfcHV0Y3Moc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyxcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYy0xNDQtXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jOjE0NTpcXHRpZiAoIXBhci1cXHUwMDNlcm90YXRlZC5idWYpXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jLTE0Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmM9MjIxPXN0YXRpYyB2b2lkIGNjd19jdXJzb3Ioc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgYm9vbCBlbmFibGUsXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmMtMjM0LVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYzoyMzU6XFx0aWYgKCFwYXItXFx1MDAzZXJvdGF0ZWQuYnVmKVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYy0yMzYtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2Njdy5jLTI0MS1cXHRhdHRyaWJ1dGUgPSBnZXRfYXR0cmlidXRlKGluZm8sIGMpO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jY3cuYzoyNDI6XFx0c3JjID0gcGFyLVxcdTAwM2Vyb3RhdGVkLmJ1ZiArICgoYyBcXHUwMDI2IGNoYXJtYXNrKSAqICh3ICogdmMtXFx1MDAzZXZjX2ZvbnQud2lkdGgpKTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY2N3LmMtMjQzLVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmM9ODM9c3RhdGljIGlubGluZSB2b2lkIGN3X3B1dGNzX2FsaWduZWQoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyxcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jLTkzLVxcdHdoaWxlIChjbnQtLSkge1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jOjk0OlxcdFxcdHNyYyA9IHBhci1cXHUwMDNlcm90YXRlZC5idWYgKyAoc2NyX3JlYWR3KHMrKykgXFx1MDAyNiBjaGFybWFzaykgKiBjZWxsc2l6ZTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYy05NS1cXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jPTExND1zdGF0aWMgdm9pZCBjd19wdXRjcyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLFxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmMtMTI5LVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jOjEzMDpcXHRpZiAoIXBhci1cXHUwMDNlcm90YXRlZC5idWYpXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmMtMTMxLVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9jdy5jPTIwND1zdGF0aWMgdm9pZCBjd19jdXJzb3Ioc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgYm9vbCBlbmFibGUsXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYy0yMTctXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmM6MjE4OlxcdGlmICghcGFyLVxcdTAwM2Vyb3RhdGVkLmJ1ZilcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fY3cuYy0yMTktXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmMtMjI0LVxcdGF0dHJpYnV0ZSA9IGdldF9hdHRyaWJ1dGUoaW5mbywgYyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmM6MjI1OlxcdHNyYyA9IHBhci1cXHUwMDNlcm90YXRlZC5idWYgKyAoKGMgXFx1MDAyNiBjaGFybWFzaykgKiAodyAqIHZjLVxcdTAwM2V2Y19mb250LndpZHRoKSk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX2N3LmMtMjI2LVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jPTE4PWludCBmYmNvbl9yb3RhdGVfZm9udChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZjX2RhdGEgKnZjKVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTIzLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYzoyNDpcXHRpZiAocGFyLVxcdTAwM2VwLVxcdTAwM2Vmb250ZGF0YSA9PSBwYXItXFx1MDAzZXJvdGF0ZWQuZm9udGRhdGEgXFx1MDAyNlxcdTAwMjYgcGFyLVxcdTAwM2Vyb3RhdGUgPT0gcGFyLVxcdTAwM2Vyb3RhdGVkLmJ1Zl9yb3RhdGUpXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTI1LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTI3LVxcdHBhci1cXHUwMDNlcm90YXRlZC5mb250ZGF0YSA9IHBhci1cXHUwMDNlcC1cXHUwMDNlZm9udGRhdGE7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jOjI4OlxcdHBhci1cXHUwMDNlcm90YXRlZC5idWZfcm90YXRlID0gcGFyLVxcdTAwM2Vyb3RhdGU7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTI5LVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTM0LVxcdFxcdFxcdCAgICAgICB2Yy1cXHUwMDNldmNfZm9udC5oZWlnaHQsIHZjLVxcdTAwM2V2Y19mb250LmNoYXJjb3VudCxcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmM6MzU6XFx0XFx0XFx0ICAgICAgIHBhci1cXHUwMDNlcm90YXRlZC5idWZfcm90YXRlLCBwYXItXFx1MDAzZXJvdGF0ZWQuYnVmLFxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYzozNjpcXHRcXHRcXHQgICAgICAgXFx1MDAyNnBhci1cXHUwMDNlcm90YXRlZC5idWZzaXplKTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtMzctXFx0aWYgKElTX0VSUihidWYpKSB7XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmMtNDEtXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jOjQyOlxcdHBhci1cXHUwMDNlcm90YXRlZC5idWYgPSBidWY7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTQzLVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTQ2LWVycl9rZnJlZTpcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fcm90YXRlLmM6NDc6XFx0a2ZyZWUocGFyLVxcdTAwM2Vyb3RhdGVkLmJ1Zik7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jOjQ4OlxcdHBhci1cXHUwMDNlcm90YXRlZC5idWYgPSBOVUxMOyAvKiBjbGVhciBoZXJlIHRvIGF2b2lkIG91dHB1dCAqL1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYzo0OTpcXHRwYXItXFx1MDAzZXJvdGF0ZWQuYnVmc2l6ZSA9IDA7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jLTUwLVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmM9ODQ9c3RhdGljIGlubGluZSB2b2lkIHVkX3B1dGNzX2FsaWduZWQoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyxcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jLTk0LVxcdHdoaWxlIChjbnQtLSkge1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jOjk1OlxcdFxcdHNyYyA9IHBhci1cXHUwMDNlcm90YXRlZC5idWYgKyAoc2NyX3JlYWR3KHMtLSkgXFx1MDAyNiBjaGFybWFzaykgKiBjZWxsc2l6ZTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYy05Ni1cXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jPTExNT1zdGF0aWMgaW5saW5lIHZvaWQgdWRfcHV0Y3NfdW5hbGlnbmVkKHN0cnVjdCB2Y19kYXRhICp2YyxcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jLTEyOS1cXHR3aGlsZSAoY250LS0pIHtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYzoxMzA6XFx0XFx0c3JjID0gcGFyLVxcdTAwM2Vyb3RhdGVkLmJ1ZiArIChzY3JfcmVhZHcocy0tKSBcXHUwMDI2IGNoYXJtYXNrKSAqIGNlbGxzaXplO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jLTEzMS1cXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jPTE1MD1zdGF0aWMgdm9pZCB1ZF9wdXRjcyhzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvLFxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmMtMTY2LVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jOjE2NzpcXHRpZiAoIXBhci1cXHUwMDNlcm90YXRlZC5idWYpXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmMtMTY4LVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jPTI1MD1zdGF0aWMgdm9pZCB1ZF9jdXJzb3Ioc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgYm9vbCBlbmFibGUsXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYy0yNjQtXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmM6MjY1OlxcdGlmICghcGFyLVxcdTAwM2Vyb3RhdGVkLmJ1ZilcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb25fdWQuYy0yNjYtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmMtMjcxLVxcdGF0dHJpYnV0ZSA9IGdldF9hdHRyaWJ1dGUoaW5mbywgYyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3VkLmM6MjcyOlxcdHNyYyA9IHBhci1cXHUwMDNlcm90YXRlZC5idWYgKyAoKGMgXFx1MDAyNiBjaGFybWFzaykgKiAodyAqIHZjLVxcdTAwM2V2Y19mb250LmhlaWdodCkpO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbl91ZC5jLTI3My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MDk6NTIuMzU0OTMzMzcyWiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjc1Mzc3ODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBgZmJjb25fZG9fc2V0X2ZvbnRgIFBhdGNoOiBPT0IgUmVhZCBpbiBSb3RhdGVkIEZvbnQgQnVmZmVyKipcblxuT2theSwgc28gdGhlIHBhdGNoIGludHJvZHVjZXMgY2FsbHMgdG8gYHJvdGF0ZV9mb250YCB3aXRoaW4gYGZiY29uX2RvX3NldF9mb250YC4gTXkgcHJpbWFyeSBjb25jZXJuIGluaXRpYWxseSB3YXMgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgZHVlIHRvIGEgbWlzbWF0Y2ggYmV0d2VlbiBmb250IGRhdGEgYW5kIHRoZSByb3RhdGVkIGJ1ZmZlciAoYHBhci1cdTAwM2Vyb3RhdGVkLmJ1ZmApLiBJZiBgcm90YXRlX2ZvbnRgIGlzbid0IGNhbGxlZCwgYW5kIGZvbnQgZGltZW5zaW9ucyAod2lkdGgsIGhlaWdodCwgYGNoYXJjb3VudGApIGNoYW5nZSwgYHBhci1cdTAwM2Vyb3RhdGVkLmJ1ZmAgbWlnaHQgYmUgb3V0IG9mIHN5bmMuXG5cblRoZSBjb3JlIGlzc3VlIHNlZW1zIHRvIGFyaXNlIHdoZW4gYGNoYXJjb3VudGAgY2hhbmdlcywgc3BlY2lmaWNhbGx5IGZyb20gMjU2IHRvIDUxMiAob3IgdmljZS12ZXJzYSksIGltcGFjdGluZyB0aGUgdW5kZXJseWluZyBidWZmZXIgc2l6ZS4gSWYgdGhlIGZvbnQgZG91YmxlcyBpbiBjaGFyYWN0ZXIgY291bnQsIGJ1dCBgcGFyLVx1MDAzZXJvdGF0ZWQuYnVmYCBpc24ndCB1cGRhdGVkIGJ5IGByb3RhdGVfZm9udGAsIHRoZW4gdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBzb3VyY2UgZm9yIHRoZSBjaGFyYWN0ZXIgZGF0YSB3aXRoaW4gYGN3X3B1dGNzYCBvciBgdWRfcHV0Y3NgIHdpbGwgdXNlIHRoZSAqbmV3KiBgY2hhcmNvdW50YCBidXQgc3RpbGwgcmVhZCBmcm9tIHRoZSAqb2xkKiAoc21hbGxlcikgYnVmZmVyLiBJZiB0aGUgYGNoYXJjb3VudGAgaW5jcmVhc2VzIGZyb20gMjU2IHRvIDUxMiwgdGhlbiBhbiBhY2Nlc3MgdG8gYSBjaGFyYWN0ZXIgcGFzdCAyNTUgYmVjb21lcyBhbiBPT0IgcmVhZC4gVGhlIGBjIFx1MDAyNiBjaGFybWFza2Agb3BlcmF0aW9uIHdpbGwgYWxsb3cgcmVhZHMgdXAgdG8gNTExLCBhbmQgdGhlIHJlc3VsdGluZyBgc3JjYCBwb2ludGVyIHdvdWxkIHBvaW50IG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgMjU2LWNoYXJhY3RlciBidWZmZXIuIFRoZSBvZmZzZXQgYHBhci1cdTAwM2Vyb3RhdGVkLmJ1ZiArICgoYyBcdTAwMjYgY2hhcm1hc2spICogY2VsbHNpemUpYCBjYW4gdGhlbiByZWFkIG91dCBvZiB0aGUgYm91bmRzLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4gd2FzIGlmIHRoZXJlIHdhcyBhbiBvcHBvcnR1bml0eSBmb3IgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgYnV0IEtBU0FOIHNob3VsZCBoYW5kbGUgdGhpcyBwZXJmZWN0bHkuIFNpbmNlIGBwYXItXHUwMDNlcm90YXRlZC5idWZgIGlzIGEgaGVhcCBidWZmZXIgYWxsb2NhdGVkIHZpYSBga21hbGxvY19hcnJheWAsIHRoZSBhY2Nlc3MgdmlvbGF0aW9uIGlzIGFuIE9PQiByZWFkLCB3aGljaCBLQVNBTiB3b3VsZCBkZXRlY3QuIEtBU0FOIHBvaXNvbnMgdGhlIGFyZWEgdG8gY2F0Y2ggdGhpcy5cblxuSSBkdWcgZGVlcGVyIGludG8gdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBwcm9jZXNzIHdpdGhpbiBgZm9udF9kYXRhX3JvdGF0ZWAuIEl0IGluaXRpYWxpemVzIHRoZSBidWZmZXIgY29tcGxldGVseSB1c2luZyBgbWVtY3B5YCBvciBgbWVtc2V0YCArIGBfX2ZvbnRfZ2x5cGhfcm90YXRlXypgLiBUaGlzIGVuc3VyZWQgdGhlIGJ1ZmZlciBpcyAqYWx3YXlzKiBpbml0aWFsaXplZCwgZWxpbWluYXRpbmcgdGhlIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMuIElmIGByb3RhdGVfZm9udGAgaXMgbm90IGNhbGxlZCwgdGhlbiB0aGUgb2xkIGZvbnQgZGF0YSBwZXJzaXN0cyBpbiB0aGUgbWVtb3J5LlxuXG5JIHZlcmlmaWVkIHRoZSBjb2RlIGFuZCBkaXNjb3ZlcmVkIGEgY3JpdGljYWwgcG9pbnQ6IGBmb250X2RhdGFfcm90YXRlYCAqb25seSogdXBkYXRlcyBgKmJ1ZnNpemVgIHdoZW4gaXQgcmVhbGxvY2F0ZXMuIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgZm9udCBzaHJpbmtzIChlLmcuLCBmcm9tIDUxMiB0byAyNTYgY2hhcmFjdGVycykgYW5kIHRoZSBidWZmZXIgaXMgKm5vdCogcmVhbGxvY2F0ZWQsIGAqYnVmc2l6ZWAgbWFpbnRhaW5zIHRoZSAqbGFyZ2VyKiBzaXplIGZyb20gdGhlIHByZXZpb3VzIGFsbG9jYXRpb24uIFRoZSBjb2RlIHdpbGwgcmV1c2UgdGhlIGV4aXN0aW5nIGJ1ZmZlciwgYW5kIG9ubHkgaW5pdGlhbGl6ZSBhIHNtYWxsZXIgY2h1bmssIHNheSAyNTYgY2hhcmFjdGVycy4gVGhpcyBtZWFucyB0aGF0IGlmIGl0IHN1YnNlcXVlbnRseSBhdHRlbXB0cyB0byByZWFkIGZyb20gdGhlICpzbWFsbGVyKiBmb250LCBzYXkgYGNoYXJjb3VudCA9IDI1NmAsIHRoZSBjb2RlIG1heSBiZSBhYmxlIHRvIHJlYWQgc29tZSBvZiB0aGUgcHJldmlvdXMgY29udGVudCwgd2hpY2ggbWVhbnMgaXQgd2lsbCByZWFkIG9sZCBmb250IGRhdGEsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyByZWluZm9yY2VzIHRoYXQgS0FTQU4gY2F0Y2hlcyB0aGUgT09CIGlzc3Vlcy4gSWYgYSBuZXcgbGFyZ2VyIGZvbnQgaXMgdXNlZCwgYW5kIGl0IGlzIG5vdCByZWFsbG9jYXRlZCwgdGhlbiB0aGUgcmVhZCAqd2lsbCogYmUgT09CLCBidXQgaXMgc3RpbGwgaW5pdGlhbGl6ZWQsIHNvIGl0IGRvZXNuJ3QgY2F1c2UgYW55IHByb2JsZW1zLlxuXG5UaGUga2V5IHRha2Vhd2F5IGlzIHRoYXQsIHdoaWxlIHRoZSBjb2RlIG1pZ2h0IHBvdGVudGlhbGx5IHJlYWQgZnJvbSBhIHNlY3Rpb24gdGhhdCAqd2FzKiBpbml0aWFsaXplZCBieSBhbiAqb2xkZXIqIGZvbnQgKGlmIHRoZSBjdXJyZW50IGZvbnQgaXMgc21hbGxlciksIHRoaXMgd2lsbCBuZXZlciBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIEtBU0FOIGlzIHN1ZmZpY2llbnQgZm9yIGNhdGNoaW5nIE9PQiByZWFkcyBkdWUgdG8gYSBtaXNtYXRjaCBiZXR3ZWVuIGZvbnQgc2l6ZSBhbmQgYnVmZmVyIHNpemUuIFRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMjUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjEwOjI2LjAzMDMxNTE4M1oiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5Mjg0NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9ibGl0dGluZ190eXBlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTY0MT1zdGF0aWMgdm9pZCBmYmNvbl9wcmVwYXJlX2xvZ28oc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyxcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTczMC0jaWZkZWYgQ09ORklHX0ZCX1RJTEVCTElUVElOR1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjczMTpzdGF0aWMgdm9pZCBzZXRfYmxpdHRpbmdfdHlwZShzdHJ1Y3QgdmNfZGF0YSAqdmMsIHN0cnVjdCBmYl9pbmZvICppbmZvKVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTczMi17XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz03NDU9c3RhdGljIGludCBmYmNvbl9pbnZhbGlkX2NoYXJjb3VudChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdW5zaWduZWQgY2hhcmNvdW50KVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtNzU1LSNlbHNlXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6NzU2OnN0YXRpYyB2b2lkIHNldF9ibGl0dGluZ190eXBlKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8pXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtNzU3LXtcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTgyNz1zdGF0aWMgaW50IGNvbjJmYl9hY3F1aXJlX25ld2luZm8oc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyxcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTgzNi1cXHRpZiAodmMpXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6ODM3OlxcdFxcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy04MzgtXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz05MTI9c3RhdGljIGludCBzZXRfY29uMmZiX21hcChpbnQgdW5pdCwgaW50IG5ld2lkeCwgaW50IHVzZXIpXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy05NDItXFx0fSBlbHNlIGlmICh2Yykge1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjk0MzpcXHRcXHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtOTQ0LVxcdH1cXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTEwMTQ9c3RhdGljIGNvbnN0IGNoYXIgKmZiY29uX3N0YXJ0dXAodm9pZClcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTEwNTMtXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MTA1NDpcXHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTA1NS1cXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTEwODg9c3RhdGljIHZvaWQgZmJjb25faW5pdChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGJvb2wgaW5pdClcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTExNzUtXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MTE3NjpcXHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTE3Ny1cXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTEyMzAtXFx0XFx0cGFyLVxcdTAwM2Vyb3RhdGUgPSBGQl9ST1RBVEVfVVI7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MTIzMTpcXHRcXHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMTIzMi1cXHR9XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYz0yMTQzPXN0YXRpYyBib29sIGZiY29uX3N3aXRjaChzdHJ1Y3QgdmNfZGF0YSAqdmMpXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yMjEzLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjIyMTQ6XFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTIyMTUtXFx0cGFyLVxcdTAwM2VjdXJzb3JfcmVzZXQgPSAxO1xcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjIxOC1cXHRcXHRwYXItXFx1MDAzZXJvdGF0ZSA9IEZCX1JPVEFURV9VUjtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYzoyMjE5OlxcdFxcdHNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTtcXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yMjIwLVxcdH1cXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jPTI0MDA9c3RhdGljIGludCBmYmNvbl9kb19zZXRfZm9udChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCB3LCBpbnQgaCwgaW50IGNoYXJjb3VudCxcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI0MzAtXFx0XFx0XFx0cGFyLVxcdTAwM2Vyb3RhdGUgPSBGQl9ST1RBVEVfVVI7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM6MjQzMTpcXHRcXHRcXHRzZXRfYmxpdHRpbmdfdHlwZSh2YywgaW5mbyk7XFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMtMjQzMi1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNDcxLVxcdFxcdFxcdHBhci1cXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI0NzI6XFx0XFx0XFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI0NzMtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MjY0ND1zdGF0aWMgdm9pZCBmYmNvbl9tb2RlY2hhbmdlZChzdHJ1Y3QgZmJfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI2NjgtXFx0cCA9IFxcdTAwMjZmYl9kaXNwbGF5W3ZjLVxcdTAwM2V2Y19udW1dO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI2Njk6XFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI2NzAtXFxuLS1cXG5kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYy0yNjc5LVxcdFxcdHBhci1cXHUwMDNlcm90YXRlID0gRkJfUk9UQVRFX1VSO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI2ODA6XFx0XFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI2ODEtXFx0fVxcbi0tXFxuZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmM9MjcwND1zdGF0aWMgdm9pZCBmYmNvbl9zZXRfYWxsX3ZjcyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI3MjgtXFx0XFx0cCA9IFxcdTAwMjZmYl9kaXNwbGF5W3ZjLVxcdTAwM2V2Y19udW1dO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jOjI3Mjk6XFx0XFx0c2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pO1xcbmRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jLTI3MzAtXFx0XFx0dmFyX3RvX2Rpc3BsYXkocCwgXFx1MDAyNmluZm8tXFx1MDAzZXZhciwgaW5mbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjEwOjI2LjEzOTYwNTA1M1oiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTgwMzIxOTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCdWcqKlxuXG5Pa2F5LCBzbyBoZXJlJ3Mgd2hhdCdzIGhhcHBlbmluZy4gVGhlIGZ1bmN0aW9uIGBzZXRfYmxpdHRpbmdfdHlwZWAgaXMganVzdCBzZXR0aW5nIHVwIHRoZSByZW5kZXJpbmcgZnVuY3Rpb24gcG9pbnRlcnMg4oCTIHRoaW5ncyBsaWtlIGB2Yy1cdTAwM2V2Y19zdy1cdTAwM2Vjb25fcHV0Y2AgYW5kIHNvIG9uLiBObyBtZW1vcnkgYWxsb2NhdGlvbiwgbm8gY29weWluZyB0byB1c2VyIHNwYWNlLCBub3RoaW5nIGxpa2UgdGhhdC4gVGhlIGhlYXJ0IG9mIHRoZSBwcm9ibGVtIGlzIGEgc3RyYWlnaHRmb3J3YXJkIG91dC1vZi1ib3VuZHMgKE9PQikgcmVhZCBvbiB0aGUgaGVhcCB3aGVuIHRleHQgaXMgcmVuZGVyZWQgdG8gdGhlIGZyYW1lYnVmZmVyLiBLQVNBTiBzaG91bGQgYmUgYWJsZSB0byBjYXRjaCB0aGlzIGVhc2lseS5cblxuSGVyZSdzIHRoZSBicmVha2Rvd24sIGFzIEkgc2VlIGl0OlxuXG4xLiAgVGhlIHBhdGNoIGlzIGludHJvZHVjaW5nIGNhbGxzIHRvIGByb3RhdGVfZm9udGAgd2l0aGluIGBmYmNvbl9kb19zZXRfZm9udGAgd2hlbiBgdmNfaGlfZm9udF9tYXNrYCBnZXRzIG1vZGlmaWVkLlxuMi4gIGB2Y19oaV9mb250X21hc2tgIGNoYW5nZXMgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGZvbnQncyBjaGFyYWN0ZXIgY291bnQgc3dpdGNoZXMgYmV0d2VlbiAyNTYgYW5kIDUxMiBjaGFyYWN0ZXJzLlxuMy4gIFRoZSBjcml0aWNhbCBvdmVyc2lnaHQgaXMgdGhhdCBpZiBgcm90YXRlX2ZvbnRgIGlzbid0IGNhbGxlZCwgYHBhci1cdTAwM2Vyb3RhdGVkLmJ1ZmAgZG9lc24ndCBnZXQgcmVhbGxvY2F0ZWQgdG8gdGhlIHNpemUgcmVxdWlyZWQgZm9yIHRoZSAqbmV3KiBmb250LCB3aGljaCBpcyA1MTIgY2hhcmFjdGVycy5cbjQuICBDb25zZXF1ZW50bHksIHdoZW4gYGZiY29uYCBnb2VzIHRvIHJlbmRlciB0ZXh0LCBpdCdzIHVzaW5nIHRoZSAqbmV3KiBjaGFyYWN0ZXIgY291bnQgKDUxMikgdG8gaW5kZXggaW50byBgcGFyLVx1MDAzZXJvdGF0ZWQuYnVmYCwgd2hpY2ggd2FzIGluaXRpYWxseSBhbGxvY2F0ZWQgZm9yIHRoZSAqb2xkKiBjb3VudCAoMjU2KS5cbjUuICBUaGlzIGlzIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb24gdGhlIGhlYXAuIFdlJ3JlIGFjY2Vzc2luZyBtZW1vcnkgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLlxuNi4gIFRoYXQncyBleGFjdGx5IHdoYXQgS0FTQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2gg4oCTIGhlYXAgb3V0LW9mLWJvdW5kcyByZWFkcy5cbjcuICBDcnVjaWFsbHksIHRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBhbnkgaW5mb3JtYXRpb24gbGVhayB0byB1c2VyIHNwYWNlIGludm9sdmVkIGluIHRoaXMuXG44LiAgU28sIEtNU0FOIGlzbid0IHJlbGV2YW50IGhlcmUuIFRoZSBwcm9ibGVtIGlzIGEgc2ltcGxlIE9PQiByZWFkIHRoYXQgS0FTQU4gc2hvdWxkIGhhbmRsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MjMsIk91dHB1dFRva2VucyI6MTc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjEwOjM0LjExOTkzMDYxOVoiLCJTZXEiOjYyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGZiY29uX2RvX3NldF9mb250YCB3aGVyZSBjaGFuZ2luZyB0aGUgZm9udCBjaGFyYWN0ZXIgY291bnQgKGUuZy4sIGZyb20gMjU2IHRvIDUxMikgd2l0aG91dCB1cGRhdGluZyB0aGUgcm90YXRlZCBmb250IGJ1ZmZlciAoYHBhci1cXHUwMDNlcm90YXRlZC5idWZgKSBsZWFkcyB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQuIFdoZW4gYGZiY29uYCByZW5kZXJzIHRleHQsIGl0IHVzZXMgdGhlIG5ldyBjaGFyYWN0ZXIgY291bnQgdG8gaW5kZXggaW50byB0aGUgb2xkLCBzbWFsbGVyIGJ1ZmZlciwgcmVzdWx0aW5nIGluIGEgaGVhcCBPT0IgcmVhZC4gVGhpcyBpcyBhIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBpc3N1ZSB0aGF0IGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWsgdG8gdXNlciBzcGFjZSBpbnZvbHZlZCwgYXMgdGhlIGJ1ZmZlciBpcyBmdWxseSBpbml0aWFsaXplZCB1cCB0byBpdHMgYWxsb2NhdGVkIHNpemUuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgZmJjb25fZG9fc2V0X2ZvbnRgIHdoZXJlIGNoYW5naW5nIHRoZSBmb250IGNoYXJhY3RlciBjb3VudCAoZS5nLiwgZnJvbSAyNTYgdG8gNTEyKSB3aXRob3V0IHVwZGF0aW5nIHRoZSByb3RhdGVkIGZvbnQgYnVmZmVyIChgcGFyLVxcdTAwM2Vyb3RhdGVkLmJ1ZmApIGxlYWRzIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gV2hlbiBgZmJjb25gIHJlbmRlcnMgdGV4dCwgaXQgdXNlcyB0aGUgbmV3IGNoYXJhY3RlciBjb3VudCB0byBpbmRleCBpbnRvIHRoZSBvbGQsIHNtYWxsZXIgYnVmZmVyLCByZXN1bHRpbmcgaW4gYSBoZWFwIE9PQiByZWFkLiBUaGlzIGlzIGEgY2xhc3NpYyBtZW1vcnkgc2FmZXR5IGlzc3VlIHRoYXQgaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhayB0byB1c2VyIHNwYWNlIGludm9sdmVkLCBhcyB0aGUgYnVmZmVyIGlzIGZ1bGx5IGluaXRpYWxpemVkIHVwIHRvIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowtzh77[1] Phase: Succeeded StartedAt: 2026-08-17 02:10:46 +0000 UTC FinishedAt: 2026-08-17 02:10:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzh77[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-17 02:10:46 +0000 UTC FinishedAt: 2026-08-17 02:10:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzh77[2] Phase: Succeeded StartedAt: 2026-08-17 02:10:46 +0000 UTC FinishedAt: 2026-08-17 05:52:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-17 02:10:46 +0000 UTC FinishedAt: 2026-08-17 05:52:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-17 02:10:46 +0000 UTC FinishedAt: 2026-08-17 02:10:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-17 02:10:46 +0000 UTC FinishedAt: 2026-08-17 02:10:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowtzh77/series-workflowtzh77-convert-artifact-2067181535/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-17 02:10:56 +0000 UTC FinishedAt: 2026-08-17 02:27:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-17 02:10:56 +0000 UTC FinishedAt: 2026-08-17 02:27:18 +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:*5cd46f8b-636b-415d-9b1a-2f785f25717f,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-workflowtzh77/series-workflowtzh77-convert-artifact-2067181535/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": "9357fc44-6be9-48fd-b86a-2686f1fa724f", "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-workflowtzh77/series-workflowtzh77-build-action-139039973/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-17 02:10:56 +0000 UTC FinishedAt: 2026-08-17 02:27:08 +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:*5cd46f8b-636b-415d-9b1a-2f785f25717f,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-workflowtzh77/series-workflowtzh77-convert-artifact-2067181535/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": "9357fc44-6be9-48fd-b86a-2686f1fa724f", "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-workflowtzh77/series-workflowtzh77-build-action-139039973/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-17 02:27:18 +0000 UTC FinishedAt: 2026-08-17 02:27:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-17 02:27:18 +0000 UTC FinishedAt: 2026-08-17 02:27:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-17 02:27:18 +0000 UTC FinishedAt: 2026-08-17 02:27:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-17 02:27:18 +0000 UTC FinishedAt: 2026-08-17 02:27:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowtzh77/series-workflowtzh77-convert-artifact-479929198/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-17 02:27:28 +0000 UTC FinishedAt: 2026-08-17 02:29:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-17 02:27:28 +0000 UTC FinishedAt: 2026-08-17 02:29:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9357fc44-6be9-48fd-b86a-2686f1fa724f,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-workflowtzh77/series-workflowtzh77-build-action-139039973/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-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-17 02:29:30 +0000 UTC FinishedAt: 2026-08-17 02:29:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-17 02:29:30 +0000 UTC FinishedAt: 2026-08-17 02:29:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-17 02:29:30 +0000 UTC FinishedAt: 2026-08-17 02:45:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-17 02:29:30 +0000 UTC FinishedAt: 2026-08-17 02:45:51 +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:*5cd46f8b-636b-415d-9b1a-2f785f25717f,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-workflowtzh77/series-workflowtzh77-convert-artifact-479929198/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": "7f1fc14d-6935-4e4d-8344-570f2c4a42d4", "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-workflowtzh77/series-workflowtzh77-build-action-314897538/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-17 02:29:30 +0000 UTC FinishedAt: 2026-08-17 02:45:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5cd46f8b-636b-415d-9b1a-2f785f25717f,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-workflowtzh77/series-workflowtzh77-convert-artifact-479929198/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": "7f1fc14d-6935-4e4d-8344-570f2c4a42d4", "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-workflowtzh77/series-workflowtzh77-build-action-314897538/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-17 02:45:51 +0000 UTC FinishedAt: 2026-08-17 02:45:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-17 02:45:51 +0000 UTC FinishedAt: 2026-08-17 02:45:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-17 02:45:51 +0000 UTC FinishedAt: 2026-08-17 02:47:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-17 02:45:51 +0000 UTC FinishedAt: 2026-08-17 02:47:44 +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:*7f1fc14d-6935-4e4d-8344-570f2c4a42d4,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-workflowtzh77/series-workflowtzh77-build-action-314897538/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-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-17 02:47:55 +0000 UTC FinishedAt: 2026-08-17 05:52:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-17 02:47:55 +0000 UTC FinishedAt: 2026-08-17 05:52:27 +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":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*9357fc44-6be9-48fd-b86a-2686f1fa724f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7f1fc14d-6935-4e4d-8344-570f2c4a42d4,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-workflowtzh77/series-workflowtzh77-build-action-139039973/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-workflowtzh77/series-workflowtzh77-build-action-314897538/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-17 02:47:55 +0000 UTC FinishedAt: 2026-08-17 02:48:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-17 02:47:55 +0000 UTC FinishedAt: 2026-08-17 02:47:59 +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":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtzh77/series-workflowtzh77-convert-artifact-1343627539/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-17 02:47:55 +0000 UTC FinishedAt: 2026-08-17 02:47:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-17 02:47:55 +0000 UTC FinishedAt: 2026-08-17 02:47:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-17 02:47:55 +0000 UTC FinishedAt: 2026-08-17 02:47:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-17 02:48:05 +0000 UTC FinishedAt: 2026-08-17 05:52:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzh77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fbcon_set_font","fbcon_set_def_font"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FB","FB_VIRTUAL","FRAMEBUFFER_CONSOLE","FRAMEBUFFER_CONSOLE_ROTATION"],"series_id":"02ee36b6-6ef1-47d7-9748-27945a69a3d3","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-17 02:48:05 +0000 UTC FinishedAt: 2026-08-17 05:52:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9357fc44-6be9-48fd-b86a-2686f1fa724f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7f1fc14d-6935-4e4d-8344-570f2c4a42d4,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-workflowtzh77/series-workflowtzh77-build-action-139039973/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-workflowtzh77/series-workflowtzh77-build-action-314897538/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-workflowtzh77/series-workflowtzh77-convert-artifact-1343627539/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,}