Name: series-workflow9rctk Phase: Succeeded StartedAt: 2026-09-07 20:24:18 +0000 UTC FinishedAt: 2026-09-08 00:38:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rctk[0] Phase: Succeeded StartedAt: 2026-09-07 20:24:18 +0000 UTC FinishedAt: 2026-09-07 20:55:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rctk[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 20:24:18 +0000 UTC FinishedAt: 2026-09-07 20:55:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_SYSFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_SYSFS" ], "series_id": "8b789686-03ce-45fa-8db3-bfe52d42ef7c" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damos_reset_invalid_charge_target_from", "damos_adjust_quota", "kdamond_apply_schemes", "damon_va_target_valid" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20mIzM0OywKICAgICYjMzQ7ZGFtb3NfYWRqdXN0X3F1b3RhJiMzNDssCiAgICAmIzM0O2tkYW1vbmRfYXBwbHlfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV90YXJnZXRfdmFsaWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKCkgaW4gbW0vZGFtb24vY29yZS5jIHRvIHJlc2V0IHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSB0byBOVUxMIGFuZCBxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIHRvIDAgd2hlbiBjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgaW5kaWNhdGVzIHRoZSB0YXJnZXQgaXMgbm8gbG9uZ2VyIHZhbGlkLlxuXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBpbnRlcm5hbCBEQU1PUyBxdW90YSB0cmFja2luZyBsb2dpYyB0byBoYW5kbGUgaW52YWxpZCB0YXJnZXQgcG9pbnRlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcyBvciBwYWRkaW5nLCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gZGFuZ2xpbmcvc3RhbGUgdGFyZ2V0IHBvaW50ZXIgZGVyZWZlcmVuY2VzIHdvdWxkIGJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOL1VBRiBkZXRlY3RvcnMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PTiBjb3JlIHN1YnN5c3RlbSBpbiBtbS9kYW1vbi9jb3JlLmMsIGFkZGluZyBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbSgpIGFuZCBjYWxsaW5nIGl0IGZyb20gZGFtb3NfYWRqdXN0X3F1b3RhKCkgdG8gaW52YWxpZGF0ZSBzdGFsZSBjaGFyZ2UgdGFyZ2V0IHBvaW50ZXJzIHdoZW4gdGFyZ2V0X3ZhbGlkKCkgcmV0dXJucyBmYWxzZS4gVGhpcyBpcyBleGVjdXRhYmxlLCByZWFjaGFibGUga2VybmVsIGNvZGUgYWNjZXNzaWJsZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDljY2RjZDc1NTMzOTcyN2U0NjA2ZDU5ZTkzMWMyOGIzZDg1OTEwYTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDIwOjU0OjAwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggY2U4YzZmOTkxMDZlZC4uMmM1OGJlOWVkYmRlNCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMzI4Myw2ICYjNDM7MzI4MywyMiBAQCBzdGF0aWMgdm9pZCBkYW1vc190cmFjZV9lc3ooc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzLFxuIFx0dHJhY2VfZGFtb3NfZXN6KGNpZHgsIHNpZHgsIHF1b3RhLVx1MDAzZWVzeik7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbShzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxuJiM0MztcdFx0c3RydWN0IGRhbW9uX2N0eCAqYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4mIzQzO1xuJiM0MztcdHQgPSBxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb207XG4mIzQzO1x0aWYgKCF0KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGlmICghYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGlmIChjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbiYjNDM7XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuIHtcbiBcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuQEAgLTMzMTgsNiAmIzQzOzMzMzQsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuIFx0XHRcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XG4gXHR9XG4gXG4mIzQzO1x0ZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20ocXVvdGEsIGMpO1xuJiM0MztcbiBcdGlmICghYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcbiBcdFx0cmV0dXJuO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20mIzM0OywKICAgICYjMzQ7ZGFtb3NfYWRqdXN0X3F1b3RhJiMzNDssCiAgICAmIzM0O2tkYW1vbmRfYXBwbHlfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV90YXJnZXRfdmFsaWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERBTU9OIGNvcmUgc3Vic3lzdGVtIGluIG1tL2RhbW9uL2NvcmUuYywgYWRkaW5nIGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKCkgYW5kIGNhbGxpbmcgaXQgZnJvbSBkYW1vc19hZGp1c3RfcXVvdGEoKSB0byBpbnZhbGlkYXRlIHN0YWxlIGNoYXJnZSB0YXJnZXQgcG9pbnRlcnMgd2hlbiB0YXJnZXRfdmFsaWQoKSByZXR1cm5zIGZhbHNlLiBUaGlzIGlzIGV4ZWN1dGFibGUsIHJlYWNoYWJsZSBrZXJuZWwgY29kZSBhY2Nlc3NpYmxlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWNjZGNkNzU1MzM5NzI3ZTQ2MDZkNTllOTMxYzI4YjNkODU5MTBhOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMjA6NTQ6MDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggY2U4YzZmOTkxMDZlZC4uMmM1OGJlOWVkYmRlNCAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtMzI4Myw2ICYjNDM7MzI4MywyMiBAQCBzdGF0aWMgdm9pZCBkYW1vc190cmFjZV9lc3ooc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzLAogCXRyYWNlX2RhbW9zX2VzeihjaWR4LCBzaWR4LCBxdW90YS0mZ3Q7ZXN6KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsCiYjNDM7CQlzdHJ1Y3QgZGFtb25fY3R4ICpjKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3RhcmdldCAqdDsKJiM0MzsKJiM0MzsJdCA9IHF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb207CiYjNDM7CWlmICghdCkKJiM0MzsJCXJldHVybjsKJiM0MzsJaWYgKCFjLSZndDtvcHMudGFyZ2V0X3ZhbGlkKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAoYy0mZ3Q7b3BzLnRhcmdldF92YWxpZCh0KSkKJiM0MzsJCXJldHVybjsKJiM0MzsJcXVvdGEtJmd0O2NoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7CiYjNDM7CXF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tID0gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKQogewogCXN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSAmYW1wO3MtJmd0O3F1b3RhOwpAQCAtMzMxOCw2ICYjNDM7MzMzNCw4IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpCiAJCQlkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpOwogCX0KIAomIzQzOwlkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbShxdW90YSwgYyk7CiYjNDM7CiAJaWYgKCFjLSZndDtvcHMuZ2V0X3NjaGVtZV9zY29yZSkKIAkJcmV0dXJuOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGlzIHBhdGNoLCBhcyBpdCB1bmZvbGRzIGluIG15IG1pbmQ6CgoqKkFuYWx5emluZyBhIERBTU9OIFBhdGNoOiBJbnZhbGlkIENoYXJnZSBUYXJnZXQgUmVzZXQqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIHNlZSB0aGUgbWFpbiBtb2RpZmljYXRpb24gaXMgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIFRoZSBrZXkgYWRkaXRpb24gc2VlbXMgdG8gYmUgdGhpcyBuZXcgZnVuY3Rpb24sIGBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbShzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLCBzdHJ1Y3QgZGFtb25fY3R4ICpjKWAuIFRoZSBuYW1pbmcgY29udmVudGlvbiBpcyBwcmV0dHkgY2xlYXIsIGl0IGluZGljYXRlcyBhbiBhZGp1c3RtZW50IHJlbGF0ZWQgdG8gcXVvdGEgY2hhcmdlcywgc3BlY2lmaWNhbGx5IHJlc2V0dGluZyBhbiAmIzM0O2ludmFsaWQmIzM0OyBjaGFyZ2UgdGFyZ2V0LiBBbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSB3aXRoaW4gYGRhbW9zX2FkanVzdF9xdW90YWAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZ2l2ZW4gdGhlIG5hbWluZy4KCk5vdywgSSBuZWVkIG1vcmUgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgcmVzZXQgaXMgbmVjZXNzYXJ5IGFuZCB3aGF0JiMzOTtzIGNvbnNpZGVyZWQgJiMzNDtpbnZhbGlkJiMzNDsgaW4gdGhpcyBzY2VuYXJpby4gVGltZSB0byBicmluZyBvdXQgdGhlIGJpZyBndW5zOiBJJiMzOTtsbCB1c2UgbXkgc3RhbmRhcmQgdG9vbHMsIHByb2JhYmx5IGByZWFkLWZpbGVgIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtbS9kYW1vbi9jb3JlLmNgIGFuZCBwb3RlbnRpYWxseSBvdGhlciByZWxldmFudCBmaWxlcywgb3IgaWYgdGhhdCBkb2VzbiYjMzk7dCB5aWVsZCByZXN1bHRzIHF1aWNrbHkgZW5vdWdoLCBJJiMzOTtsbCBzd2l0Y2ggdG8gYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgdXNhZ2VzIG9mIHRoZSB0ZXJtcyBvciBjb25jZXB0cyBhcm91bmQgdGhlIG5ldyBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgREFNT04mIzM5O3MgcXVvdGEgbWFuYWdlbWVudCBpcyBjcnVjaWFsLCBhcyBpcyBmaWd1cmluZyBvdXQgd2hhdCB0cmlnZ2VycyB0aGlzIGZ1bmN0aW9uLCBhbmQgd2hhdCAmIzM0O2ludmFsaWQmIzM0OyBwcmVjaXNlbHkgbWVhbnMgaW4gdGhpcyBEQU1PTiBjb250ZXh0LiBUaGlzIGlzIGFsbCBhYm91dCBnZXR0aW5nIHRoZSBicm9hZGVyIHBpY3R1cmUgdG8gZXZhbHVhdGUgdGhlIHNvdW5kbmVzcyBhbmQgdGhlIGRlc2lnbiBjaG9pY2Ugb2YgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzI4MDpcdFx0XHRcdGJyZWFrO1xuMzI4MTpcdFx0XHRzaWR4JiM0MzsmIzQzOztcbjMyODI6XHRcdH1cbjMyODM6XHRcdHRyYWNlX2RhbW9zX2VzeihjaWR4LCBzaWR4LCBxdW90YS1cdTAwM2Vlc3opO1xuMzI4NDpcdH1cbjMyODU6XHRcbjMyODY6XHRzdGF0aWMgdm9pZCBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbShzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxuMzI4NzpcdFx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuMzI4ODpcdHtcbjMyODk6XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4zMjkwOlx0XG4zMjkxOlx0XHR0ID0gcXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tO1xuMzI5MjpcdFx0aWYgKCF0KVxuMzI5MzpcdFx0XHRyZXR1cm47XG4zMjk0Olx0XHRpZiAoIWMtXHUwMDNlb3BzLnRhcmdldF92YWxpZClcbjMyOTU6XHRcdFx0cmV0dXJuO1xuMzI5NjpcdFx0aWYgKGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSlcbjMyOTc6XHRcdFx0cmV0dXJuO1xuMzI5ODpcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbjMyOTk6XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSAwO1xuMzMwMDpcdH1cbjMzMDE6XHRcbjMzMDI6XHRzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuMzMwMzpcdHtcbjMzMDQ6XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuMzMwNTpcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbjMzMDY6XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG4zMzA3Olx0XHR1bnNpZ25lZCBsb25nIGN1bXVsYXRlZF9zeiwgY2FjaGVkX2VzejtcbjMzMDg6XHRcdHVuc2lnbmVkIGludCBzY29yZSwgbWF4X3Njb3JlID0gMDtcbjMzMDk6XHRcbjMzMTA6XHRcdGlmICghcXVvdGEtXHUwMDNlbXMgXHUwMDI2XHUwMDI2ICFxdW90YS1cdTAwM2VzeiBcdTAwMjZcdTAwMjYgbGlzdF9lbXB0eShcdTAwMjZxdW90YS1cdTAwM2Vnb2FscykpXG4zMzExOlx0XHRcdHJldHVybjtcbjMzMTI6XHRcbjMzMTM6XHRcdC8qIEZpcnN0IGNoYXJnZSB3aW5kb3cgKi9cbjMzMTQ6XHRcdGlmICghcXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9zeiBcdTAwMjZcdTAwMjYgIXF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSkge1xuMzMxNTpcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VkX2Zyb20gPSBqaWZmaWVzO1xuMzMxNjpcdFx0XHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xuMzMxNzpcdFx0XHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSlcbjMzMTg6XHRcdFx0XHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xuMzMxOTpcdFx0fVxuMzMyMDpcdFxuMzMyMTpcdFx0LyogTmV3IGNoYXJnZSB3aW5kb3cgc3RhcnRzICovXG4zMzIyOlx0XHRpZiAoIXRpbWVfaW5fcmFuZ2Vfb3BlbihqaWZmaWVzLCBxdW90YS1cdTAwM2VjaGFyZ2VkX2Zyb20sXG4zMzIzOlx0XHRcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VkX2Zyb20gJiM0MztcbjMzMjQ6XHRcdFx0XHRcdG1zZWNzX3RvX2ppZmZpZXMocXVvdGEtXHUwMDNlcmVzZXRfaW50ZXJ2YWwpKSkge1xuMzMyNTpcdFx0XHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSlcbjMzMjY6XHRcdFx0XHRzLVx1MDAzZXN0YXQucXRfZXhjZWVkcyYjNDM7JiM0Mzs7XG4zMzI3Olx0XHRcdHF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogJiM0Mzs9IHF1b3RhLVx1MDAzZWNoYXJnZWRfc3o7XG4zMzI4Olx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XG4zMzI5Olx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogPSAwO1xuMzMzMDpcdFx0XHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSlcbjMzMzE6XHRcdFx0XHRjYWNoZWRfZXN6ID0gcXVvdGEtXHUwMDNlZXN6O1xuMzMzMjpcdFx0XHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xuMzMzMzpcdFx0XHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgcXVvdGEtXHUwMDNlZXN6ICE9IGNhY2hlZF9lc3opXG4zMzM0Olx0XHRcdFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcbjMzMzU6XHRcdH1cbjMzMzY6XHRcbjMzMzc6XHRcdGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKHF1b3RhLCBjKTtcbjMzMzg6XHRcbjMzMzk6XHRcdGlmICghYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcbjMzNDA6XHRcdFx0cmV0dXJuO1xuMzM0MTpcdFxuMzM0MjpcdFx0LyogRmlsbCB1cCB0aGUgc2NvcmUgaGlzdG9ncmFtICovXG4zMzQzOlx0XHRtZW1zZXQoYy1cdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSwgMCxcbjMzNDQ6XHRcdFx0XHRzaXplb2YoKmMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0pICpcbjMzNDU6XHRcdFx0XHQoREFNT1NfTUFYX1NDT1JFICYjNDM7IDEpKTtcbjMzNDY6XHRcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XG4zMzQ3Olx0XHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XG4zMzQ4Olx0XHRcdFx0aWYgKCFfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKSlcbjMzNDk6XHRcdFx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MTkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEQU1PTiBLY29uZmlnIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBncmFudWxhci4gQmVmb3JlIEkgZGl2ZSBpbnRvIGFueSBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZykgaW1wbGVtZW50YXRpb24gZGV0YWlscywgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIEtjb25maWcgZGVwZW5kZW5jaWVzLiBJIGhhdmUgdG8gdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCYjMzk7cyBjcnVjaWFsIEkgZG9uJiMzOTt0IG92ZXJsb29rIGFueSBwb3RlbnRpYWxseSBvYnNjdXJlLCBidXQgdml0YWwsIGNvbmZpZ3VyYXRpb25zLiBJdCYjMzk7cyBhIHF1aWNrIHNhbml0eSBjaGVjayBhdCB0aGlzIHN0YWdlIHRvIG1ha2Ugc3VyZSBhbGwgdGhlIGJ1aWxkaW5nIGJsb2NrcyBhcmUgaW4gcGxhY2UgYW5kIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHNldCBvZiBjb25maWd1cmFibGUgZmVhdHVyZXMuIFRoaXMgYWxzbyBoZWxwcyBwbGFuIHRoZSBuZXh0IHN0ZXBzLCB0byBlbnN1cmUgYSBjb21wbGV0ZSBhbmQgc3VjY2Vzc2Z1bCBpbXBsZW1lbnRhdGlvbi4gS25vd2luZyB0aGUgS2NvbmZpZyBvcHRpb25zIHdpbGwgaW5mb3JtIGhvdyBJIGNvbmZpZ3VyZSBEQU1PTiBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZSBnaXZlbiB0aGUgdGFyZ2V0IHdvcmtsb2FkLCBlc3BlY2lhbGx5IGZvciBwb3RlbnRpYWwgdHJhZGUtb2ZmcyBhbmQgcGVyZm9ybWFuY2UgdHVuaW5nIHBvc3NpYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy00LVxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMTUtXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbm1tL2RhbW9uL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU3NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zIGZvciBEYW1vbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IGdyYW51bGFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBEYW1vbiB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCB0aGUgYmVzdCBzdGFydGluZyBwb2ludCwgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgY2Fub25pY2FsIHNvdXJjZSBmb3IgdGhlc2UgdGhpbmdzLiBJIGtub3cgdGhhdCBmaWxlIHdpbGwgc3BlbGwgb3V0ICpleGFjdGx5KiB3aGF0JiMzOTtzIGF2YWlsYWJsZSwgd2hpY2ggb3RoZXIgZmVhdHVyZXMgb3Igc2V0dGluZ3MgaXQgcmVsaWVzIG9uLCBhbmQgd2hhdCB0aGUgZGVmYXVsdCBiZWhhdmlvcnMgYXJlLiBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSwgYW5kIHRoZSBLY29uZmlnIGZpbGUgZ2l2ZXMgbWUgdGhhdCwgZXNzZW50aWFsbHkgYWxsb3dpbmcgbWUgdG8gYnVpbGQgdGhlIGJpZyBwaWN0dXJlLiBUaGlzIGlzIHRoZSBzb2xpZCBmb3VuZGF0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBkYW1vbiBpcyBjb25maWd1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdG1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBEQU1PTlxuICAgNjpcdFx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbiAgIDc6XHRcdGhlbHBcbiAgIDg6XHRcdCAgVGhpcyBidWlsZHMgYSBmcmFtZXdvcmsgdGhhdCBhbGxvd3Mga2VybmVsIHN1YnN5c3RlbXMgdG8gbW9uaXRvclxuICAgOTpcdFx0ICBhY2Nlc3MgZnJlcXVlbmN5IG9mIGVhY2ggbWVtb3J5IHJlZ2lvbi4gVGhlIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWxcbiAgMTA6XHRcdCAgZm9yIHBlcmZvcm1hbmNlLWNlbnRyaWMgRFJBTSBsZXZlbCBtZW1vcnkgbWFuYWdlbWVudC5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgU2VlIGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWwvbGF0ZXN0L21tL2RhbW9uL2luZGV4Lmh0bWwgZm9yXG4gIDEzOlx0XHQgIG1vcmUgaW5mb3JtYXRpb24uXG4gIDE0Olx0XG4gIDE1Olx0Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxuICAxNjpcdFx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuICAxNzpcdFx0ZGVwZW5kcyBvbiBEQU1PTlxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBEQU1PTiBkZWJ1Z2dpbmctcHVycG9zZSBzYW5pdHkgY2hlY2tzIGluXG4gIDIwOlx0XHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxuICAyMTpcdFx0ICBhZGRpdGlvbmFsIG92ZXJoZWFkLiAgVGhpcyBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYmUgZW5hYmxlZCBvblxuICAyMjpcdFx0ICBvbmx5IGRldmVsb3BtZW50IGFuZCB0ZXN0IHNldHVwcy5cbiAgMjM6XHRcbiAgMjQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMjU6XHRcbiAgMjY6XHRjb25maWcgREFNT05fS1VOSVRfVEVTVFxuICAyNzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDI4Olx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDI5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICAzMDpcdFx0aGVscFxuICAzMTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cbiAgMzI6XHRcbiAgMzM6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXG4gIDM0Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxuICAzNTpcdFxuICAzNjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzNzpcdFxuICAzODpcdGNvbmZpZyBEQU1PTl9WQUREUlxuICAzOTpcdFx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbiAgNDA6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxuICA0MTpcdFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG4gIDQyOlx0XHRkZWZhdWx0IERBTU9OXG4gIDQzOlx0XHRoZWxwXG4gIDQ0Olx0XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbiAgNDU6XHRcdCAgdGhhdCB3b3JrIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLlxuICA0NjpcdFxuICA0NzpcdGNvbmZpZyBEQU1PTl9QQUREUlxuICA0ODpcdFx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4gIDQ5Olx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbiAgNTA6XHRcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuICA1MTpcdFx0ZGVmYXVsdCBEQU1PTlxuICA1MjpcdFx0aGVscFxuICA1MzpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG4gIDU0Olx0XHQgIHRoYXQgd29ya3MgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxuICA1NTpcdFxuICA1NjpcdGNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG4gIDU3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICA1ODpcdFx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuICA1OTpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgNjA6XHRcdGhlbHBcbiAgNjE6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cbiAgNjI6XHRcbiAgNjM6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXG4gIDY0Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxuICA2NTpcdFxuICA2NjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA2NzpcdFxuICA2ODpcdGNvbmZpZyBEQU1PTl9TWVNGU1xuICA2OTpcdFx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbiAgNzA6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IFNZU0ZTXG4gIDcxOlx0XHRkZWZhdWx0IERBTU9OXG4gIDcyOlx0XHRoZWxwXG4gIDczOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxuICA3NDpcdFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cbiAgNzU6XHRcbiAgNzY6XHRjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxuICA3NzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICA3ODpcdFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuICA3OTpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgODA6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODI3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBkYW1vc19hZGp1c3RfcXVvdGFgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGRhbW9zX2FkanVzdF9xdW90YWAgZnVuY3Rpb24gaXMgdXNlZCB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIERBTU9OIGNvcmUgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdHJpZ2dlcnMgdGhlIG5lZWQgdG8gYWRqdXN0IHRoZSBxdW90YSwgYW5kIHdoYXQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgbG9va3MgbGlrZSB3aGVuIHRoYXQgaGFwcGVucy4gQXJlIHRoZXJlIHNwZWNpZmljIHNjZW5hcmlvcyBvciBldmVudHMgdGhhdCBsZWFkIHRvIGl0cyBpbnZvY2F0aW9uPyBJIHNob3VsZCBhbHNvIHF1aWNrbHkgYXNzZXNzIGFueSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgcGFzc2VkIGludG8gdGhlIGZ1bmN0aW9uLCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBpbmZvcm1hdGlvbiBpdCYjMzk7cyB3b3JraW5nIHdpdGguIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgY29kZSBhbmQgc3RhcnQgbG9va2luZyBmb3IgdGhvc2UgZnVuY3Rpb24gY2FsbHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX2FkanVzdF9xdW90YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0zMjg2PXN0YXRpYyB2b2lkIGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG4tLVxubW0vZGFtb24vY29yZS5jLTMzMDEtXG5tbS9kYW1vbi9jb3JlLmM6MzMwMjpzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTMzMDMte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMzg1PXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDAwLVxubW0vZGFtb24vY29yZS5jOjM0MDE6XHRcdGRhbW9zX2FkanVzdF9xdW90YShjLCBzKTtcbm1tL2RhbW9uL2NvcmUuYy0zNDAyLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjY0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGFuZCBEQU1PTiYjMzk7cyBMYW5kc2NhcGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IG1pbmQgaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIERBTU9OIG9wZXJhdGlvbnMgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRob3NlIHN5c2ZzIGVudHJ5IHBvaW50cy4gSSBrbm93IERBTU9OIGlzIGEgcG93ZXJmdWwgbWVtb3J5IG1vbml0b3JpbmcgYW5kIG1hbmFnaW5nIHN1YnN5c3RlbSwgc28gSSBuZWVkIHRvIHBpZWNlIHRvZ2V0aGVyIGhvdyBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBmaXRzIGludG8gdGhlIHB1enpsZSwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgc3lzZnMgaW50ZXJmYWNlLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBmbG93IG9mIGluZm9ybWF0aW9uIOKAkyBob3cgYXJlIHNjaGVtZXMgZGVmaW5lZCwgaG93IGFyZSB0aGV5IGFwcGxpZWQsIGFuZCB3aGF0JiMzOTtzIHRoZSByb2xlIG9mIHRob3NlIHN5c2ZzIGVudHJpZXMgaW4gdGhpcyBwcm9jZXNzPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgaXQgbWFuYWdlcyBtZW1vcnkgcmVnaW9ucyBhbmQgb3B0aW1pemVzIHBlcmZvcm1hbmNlLiBUaGUgaW50ZXJhY3Rpb24gd2l0aCB0aG9zZSBlbnRyeSBwb2ludHMgaXMgY3JpdGljYWwgYmVjYXVzZSBJIHdhbnQgdG8gZ3Jhc3AgZXhhY3RseSBob3cgaXQmIzM5O3MgY29uZmlndXJlZCBhbmQgY29udHJvbGxlZC4gSSYjMzk7bSBjb25zaWRlcmluZyBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG9yIGNvbmZsaWN0cyB3aXRoIG90aGVyIHN5c3RlbSBjb21wb25lbnRzLCB0b28uIEkgd2FudCB0byBidWlsZCBhIGNvbXBsZXRlIG1lbnRhbCBtb2RlbCBvZiB0aGlzIHBhcnQgb2YgREFNT04mIzM5O3MgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzM4MDpcdFx0XHRzaWR4JiM0MzsmIzQzOztcbjMzODE6XHRcdH1cbjMzODI6XHRcdHRyYWNlX2NhbGxfX2RhbW9zX3N0YXRfYWZ0ZXJfYXBwbHlfaW50ZXJ2YWwoY2lkeCwgc2lkeCwgXHUwMDI2cy1cdTAwM2VzdGF0KTtcbjMzODM6XHR9XG4zMzg0Olx0XG4zMzg1Olx0c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4zMzg2Olx0e1xuMzM4NzpcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbjMzODg6XHRcdHN0cnVjdCBkYW1vcyAqcztcbjMzODk6XHRcdGJvb2wgaGFzX3NjaGVtZXNfdG9fYXBwbHkgPSBmYWxzZTtcbjMzOTA6XHRcdHVuc2lnbmVkIGxvbmcgbWF4X3JlZ2lvbl9zejtcbjMzOTE6XHRcbjMzOTI6XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XG4zMzkzOlx0XHRcdGlmICh0aW1lX2JlZm9yZShjLVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBzLVx1MDAzZW5leHRfYXBwbHlfc2lzKSlcbjMzOTQ6XHRcdFx0XHRjb250aW51ZTtcbjMzOTU6XHRcbjMzOTY6XHRcdFx0aWYgKCFzLVx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQpXG4zMzk3Olx0XHRcdFx0Y29udGludWU7XG4zMzk4Olx0XG4zMzk5Olx0XHRcdGhhc19zY2hlbWVzX3RvX2FwcGx5ID0gdHJ1ZTtcbjM0MDA6XHRcbjM0MDE6XHRcdFx0ZGFtb3NfYWRqdXN0X3F1b3RhKGMsIHMpO1xuMzQwMjpcdFx0fVxuMzQwMzpcdFxuMzQwNDpcdFx0aWYgKCFoYXNfc2NoZW1lc190b19hcHBseSlcbjM0MDU6XHRcdFx0cmV0dXJuO1xuMzQwNjpcdFxuMzQwNzpcdFx0bWF4X3JlZ2lvbl9zeiA9IGRhbW9uX3JlZ2lvbl9zel9saW1pdChjKTtcbjM0MDg6XHRcdG11dGV4X2xvY2soXHUwMDI2Yy1cdTAwM2V3YWxrX2NvbnRyb2xfbG9jayk7XG4zNDA5Olx0XHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xuMzQxMDpcdFx0XHRpZiAoYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIFx1MDAyNlx1MDAyNiBjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2UpXG4zNDExOlx0XHRcdFx0Y29udGludWU7XG4zNDEyOlx0XHRcdGRhbW9zX2FwcGx5X3RhcmdldChjLCB0LCBtYXhfcmVnaW9uX3N6KTtcbjM0MTM6XHRcdH1cbjM0MTQ6XHRcbjM0MTU6XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XG4zNDE2Olx0XHRcdGlmICh0aW1lX2JlZm9yZShjLVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBzLVx1MDAzZW5leHRfYXBwbHlfc2lzKSlcbjM0MTc6XHRcdFx0XHRjb250aW51ZTtcbjM0MTg6XHRcdFx0ZGFtb3Nfd2Fsa19jb21wbGV0ZShjLCBzKTtcbjM0MTk6XHRcdFx0ZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHMsIGMpO1xuMzQyMDpcdFx0XHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IE5VTEw7XG4zNDIxOlx0XHRcdGRhbW9zX3RyYWNlX3N0YXQoYywgcyk7XG4zNDIyOlx0XHR9XG4zNDIzOlx0XHRtdXRleF91bmxvY2soXHUwMDI2Yy1cdTAwM2V3YWxrX2NvbnRyb2xfbG9jayk7XG4zNDI0Olx0fVxuMzQyNTpcdFxuMzQyNjpcdCNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXG4zNDI3Olx0c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X21lcmdlX3R3b19yZWdpb25zKFxuMzQyODpcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpsLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuMzQyOTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMyMQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkFuYWx5emluZyB0aGUgQ2hhcmdlIFRhcmdldCYjMzk7cyBVc2FnZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBxdW90YS0mZ3Q7Y2hhcmdlX3RhcmdldF9mcm9tYC4gVGltZSB0byBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyB0aGluZyBpcyBhY3R1YWxseSAqdXNlZCouIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBpcyBnb2luZyB0byBiZSB0aGUgY3JpdGljYWwgcG9pbnQgd2hlcmUgdGhlIHF1b3RhIHN5c3RlbSBpbnRlcmZhY2VzIHdpdGggdGhlIGNoYXJnaW5nIG1lY2hhbmlzbS4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIGNhbGwgc2l0ZXMgdG8gZnVsbHkgZ3Jhc3AgaXRzIHJvbGUuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBwYXNzZWQsIHdoYXQgYXNzdW1wdGlvbnMgYXJlIG1hZGUgYWJvdXQgYHF1b3RhYCwgYW5kLCBtb3N0IGltcG9ydGFudGx5LCBob3cgdGhpcyBmdW5jdGlvbiBjb250cmlidXRlcyB0byByZXNvdXJjZSBhY2NvdW50aW5nLiBJcyBpdCBjYWxsZWQgc3luY2hyb25vdXNseSBvciBhc3luY2hyb25vdXNseT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiBpdCBmYWlscz8gSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUgdG8gYmUgY29uZmlkZW50IGluIGFueSByZWZhY3RvcmluZyBvciBtb2RpZmljYXRpb24gdG8gdGhpcyBzeXN0ZW0uIExldCYjMzk7cyBzdGFydCB3aXRoIGEgcXVpY2sgY29kZSBzZWFyY2ggYW5kIGdldCBhIHZpc3VhbCBvZiBpdHMgdXNhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoYXJnZV90YXJnZXRfZnJvbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz03MzI9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSAqZGFtb3NfcXVvdGFfaW5pdChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03MzgtXHRxdW90YS1cdTAwM2VjaGFyZ2VkX2Zyb20gPSAwO1xubW0vZGFtb24vY29yZS5jOjczOTpcdHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG5tbS9kYW1vbi9jb3JlLmMtNzQwLVx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4tLVxubW0vZGFtb24vY29yZS5jPTE2OTY9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0cyhcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTcyMi1cdFx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgZHN0KSB7XG5tbS9kYW1vbi9jb3JlLmM6MTcyMzpcdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9PSBkc3RfdGFyZ2V0KSB7XG5tbS9kYW1vbi9jb3JlLmM6MTcyNDpcdFx0XHRcdFx0cy1cdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xubW0vZGFtb24vY29yZS5jLTE3MjUtXHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4tLVxubW0vZGFtb24vY29yZS5jPTI0NDk9c3RhdGljIGJvb2wgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNDU2LVx0LyogU2tpcCBwcmV2aW91c2x5IGNoYXJnZWQgcmVnaW9ucyAqL1xubW0vZGFtb24vY29yZS5jOjI0NTc6XHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKSB7XG5tbS9kYW1vbi9jb3JlLmM6MjQ1ODpcdFx0aWYgKHQgIT0gcXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKVxubW0vZGFtb24vY29yZS5jLTI0NTktXHRcdFx0cmV0dXJuIHRydWU7XG5tbS9kYW1vbi9jb3JlLmMtMjQ2MC1cdFx0aWYgKHIgPT0gZGFtb25fbGFzdF9yZWdpb24odCkpIHtcbm1tL2RhbW9uL2NvcmUuYzoyNDYxOlx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG5tbS9kYW1vbi9jb3JlLmMtMjQ2Mi1cdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjQ4MC1cdFx0fVxubW0vZGFtb24vY29yZS5jOjI0ODE6XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG5tbS9kYW1vbi9jb3JlLmMtMjQ4Mi1cdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4tLVxubW0vZGFtb24vY29yZS5jPTI2ODI9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTI3NDEtXHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKSB7XG5tbS9kYW1vbi9jb3JlLmM6Mjc0MjpcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSB0O1xubW0vZGFtb24vY29yZS5jLTI3NDMtXHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IHItXHUwMDNlYXIuZW5kO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMjcyPXN0YXRpYyB2b2lkIGRhbW9zX3RyYWNlX2VzeihzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMyODUtXG5tbS9kYW1vbi9jb3JlLmM6MzI4NjpzdGF0aWMgdm9pZCBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbShzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxubW0vZGFtb24vY29yZS5jLTMyODctXHRcdHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMyOTAtXG5tbS9kYW1vbi9jb3JlLmM6MzI5MTpcdHQgPSBxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb207XG5tbS9kYW1vbi9jb3JlLmMtMzI5Mi1cdGlmICghdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzI5Ny1cdFx0cmV0dXJuO1xubW0vZGFtb24vY29yZS5jOjMyOTg6XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xubW0vZGFtb24vY29yZS5jLTMyOTktXHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzMwMj1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzM2LVxubW0vZGFtb24vY29yZS5jOjMzMzc6XHRkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbShxdW90YSwgYyk7XG5tbS9kYW1vbi9jb3JlLmMtMzMzOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYwNQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoJiMzOTtzIFJlYWNoIGFuZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL2RhbW9uL2NvcmUuY2AsIHdoaWNoLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGlzIHRoZSBoZWFydCBvZiBEQU1PTiDigJMgRGF0YSBBY2Nlc3MgTW9uaXRvcmluZy4gVGhhdCYjMzk7cyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50LiBUaGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgaXMgdGhpcyBzb21ldGhpbmcgSSBjYW4gZXZlbiBpbnRlcmFjdCB3aXRoIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VPwoKQWgsIHJpZ2h0LCB5ZXMhIERBTU9OIGlzIG1hbmFnZWFibGUgdGhyb3VnaCBzeXNmcywgd2hpY2ggaXMgZ3JlYXQuIEkgY2FuIGNvbnRyb2wgaXQgdXNpbmcgYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2AuICBJIHRoaW5rIHRoYXQgYWxzbyBkZXBlbmRzIG9uIHRob3NlIHN5c2ZzIGNvbmZpZyBvcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVxdWlyZWQuIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd291bGQgYmUgYENPTkZJR19EQU1PTmAsIGFuZCwgb2YgY291cnNlLCBgQ09ORklHX0RBTU9OX1NZU0ZTYCBmb3IgdGhlIHN5c2ZzIGludGVyZmFjZS4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IGlmIGBDT05GSUdfREFNT05fUEFERFJgIG9yIGBDT05GSUdfREFNT05fVkFERFJgIGFyZSBzZXQuIFRob3NlIGxvb2sgbGlrZSB0aGV5JiMzOTtyZSByZWxhdGVkIHRvIG1vbml0b3Jpbmcgb3BlcmF0aW9ucywgdGFyZ2V0cywgYW5kIHNwZWNpZmljYWxseSB0aGUgYG9wcy50YXJnZXRfdmFsaWRgIGZ1bmN0aW9uLgoKSSYjMzk7ZCBiZXR0ZXIgdHJhY2sgZG93biB3aGVyZSBgb3BzLnRhcmdldF92YWxpZGAgaXMgZGVmaW5lZCBhbmQgdXNlZC4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGF0IGZ1bmN0aW9uIGlzIGtleSB0byBhc3Nlc3NpbmcgdGhlIGltcGFjdCBvZiB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YXJnZXRfdmFsaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzI4Nj1zdGF0aWMgdm9pZCBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbShzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjkzLVx0XHRyZXR1cm47XG5tbS9kYW1vbi9jb3JlLmM6MzI5NDpcdGlmICghYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKVxubW0vZGFtb24vY29yZS5jLTMyOTUtXHRcdHJldHVybjtcbm1tL2RhbW9uL2NvcmUuYzozMjk2Olx0aWYgKGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSlcbm1tL2RhbW9uL2NvcmUuYy0zMjk3LVx0XHRyZXR1cm47XG4tLVxubW0vZGFtb24vY29yZS5jPTMzODU9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTM0MDktXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xubW0vZGFtb24vY29yZS5jOjM0MTA6XHRcdGlmIChjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQgXHUwMDI2XHUwMDI2IGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZSlcbm1tL2RhbW9uL2NvcmUuYy0zNDExLVx0XHRcdGNvbnRpbnVlO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zNzIwPXN0YXRpYyBib29sIGtkYW1vbmRfbmVlZF9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzcyNi1cbm1tL2RhbW9uL2NvcmUuYzozNzI3Olx0aWYgKCFjdHgtXHUwMDNlb3BzLnRhcmdldF92YWxpZClcbm1tL2RhbW9uL2NvcmUuYy0zNzI4LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vZGFtb24vY29yZS5jLTM3MzAtXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7XG5tbS9kYW1vbi9jb3JlLmM6MzczMTpcdFx0aWYgKGN0eC1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpKVxubW0vZGFtb24vY29yZS5jLTM3MzItXHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9NDc3PXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3BhX2luaXRjYWxsKHZvaWQpXG4tLVxubW0vZGFtb24vcGFkZHIuYy00ODYtXHRcdC5hcHBseV9wcm9iZXMgPSBkYW1vbl9wYV9hcHBseV9wcm9iZXMsXG5tbS9kYW1vbi9wYWRkci5jOjQ4NzpcdFx0LnRhcmdldF92YWxpZCA9IE5VTEwsXG5tbS9kYW1vbi9wYWRkci5jLTQ4OC1cdFx0LmFwcGx5X3NjaGVtZSA9IGRhbW9uX3BhX2FwcGx5X3NjaGVtZSxcbi0tXG5tbS9kYW1vbi92YWRkci5jPTYyNT1zdGF0aWMgaW50IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTY4Ni1cbm1tL2RhbW9uL3ZhZGRyLmM6Njg3OnN0YXRpYyBib29sIGRhbW9uX3ZhX3RhcmdldF92YWxpZChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vdmFkZHIuYy02ODgte1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9OTMzPXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXG4tLVxubW0vZGFtb24vdmFkZHIuYy05NDAtXHRcdC5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzLFxubW0vZGFtb24vdmFkZHIuYzo5NDE6XHRcdC50YXJnZXRfdmFsaWQgPSBkYW1vbl92YV90YXJnZXRfdmFsaWQsXG5tbS9kYW1vbi92YWRkci5jLTk0Mi1cdFx0LmNsZWFudXBfdGFyZ2V0ID0gZGFtb25fdmFfY2xlYW51cF90YXJnZXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTMwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFZpcnR1YWwgQWRkcmVzcyBNb25pdG9yaW5nOiBBIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIHNvIGBkYW1vbl92YV90YXJnZXRfdmFsaWRgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZTsgaXQmIzM5O3MgdGhlIGdhdGVrZWVwZXIgdGhhdCBkZXRlcm1pbmVzIGlmIGEgbW9uaXRvcmVkIHByb2Nlc3Mgb3IgbWVtb3J5IHJlZ2lvbiBpcyBzdGlsbCBsZWdpdGltYXRlIGluIHRoZSB2aXJ0dWFsIGFkZHJlc3MgbW9uaXRvcmluZyBzZXR1cC4gSWYgYSBwcm9jZXNzIGV4aXRzLCBuYXR1cmFsbHkgdGhlIHRhcmdldCBiZWNvbWVzIGludmFsaWQsIHJpZ2h0PyBUaGF0JiMzOTtzIHdoZW4gYHRhcmdldF92YWxpZCh0KWAgZmxpcHMgdG8gZmFsc2UuICBBbmQgdGhhdCYjMzk7cyB0aGUgdHJpZ2dlciBmb3IgYGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKClgIHRvIGNsZWFuIHVwIHRoZSBgcXVvdGEtJmd0O2NoYXJnZV90YXJnZXRfZnJvbWAgZmllbGQuIE1ha2VzIHNlbnNlLiBUaGlzIGNvZGUgaXMgaW4gYG1tL2RhbW9uL2NvcmUuY2AsIGFuZCB0aGUgJiMzNDtXb3J0aEZ1enppbmc6IHRydWUhJiMzNDsgZmxhZyBjZXJ0YWlubHkgY2F0Y2hlcyBteSBhdHRlbnRpb24uCgpMZXQmIzM5O3Mgc2VlIHdoYXQgZWxzZSBpcyBpbiBwbGF5LiBUaGUgZm9jdXMgc3ltYm9scyBsb29rIGxpa2U6CgotICAgYGRhbW9zX2FkanVzdF9xdW90YWAKLSAgIGBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbWAKLSAgIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgCi0gICBgZGFtb25fdmFfdGFyZ2V0X3ZhbGlkYAoKSSYjMzk7bSBjaGVja2luZyBpZiBgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb21gIGFuZCBgZGFtb3NfYWRqdXN0X3F1b3RhYCBhcmUgc3RhdGljLCBhbmQgeWVwLCB0aGV5IGFyZS4gSW1wb3J0YW50IGZvciBzY29waW5nLiBOb3csIGxldCYjMzk7cyB0cmFjZSBgZGFtb3NfYWRqdXN0X3F1b3RhYC4gTG9va3MgbGlrZSBpdCYjMzk7cyBjYWxsZWQgYnkgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AuIEFscmlnaHQsIGFuZCB0aGF0IG9uZSBpcyBjYWxsZWQgZnJvbSBga2RhbW9uZF9mbmAgLyBgZGFtb25fZm9yX2VhY2hfc2NoZW1lYCBpbiB0aGUgc2FtZSBjb3JlIGZpbGUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2RhbW9uZF9hcHBseV9zY2hlbWVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTMzNjk9c3RhdGljIHZvaWQgZGFtb3NfdHJhY2Vfc3RhdChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMzODQtXG5tbS9kYW1vbi9jb3JlLmM6MzM4NTpzdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcbm1tL2RhbW9uL2NvcmUuYy0zMzg2LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzkxMT1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzk4Ny1cdFx0Lypcbm1tL2RhbW9uL2NvcmUuYzozOTg4Olx0XHQgKiBkbyBrZGFtb25kX2NhbGwoKSBhbmQga2RhbW9uZF9hcHBseV9zY2hlbWVzKCkgYWZ0ZXJcbm1tL2RhbW9uL2NvcmUuYy0zOTg5LVx0XHQgKiBrZGFtb25kX21lcmdlX3JlZ2lvbnMoKSBpZiBwb3NzaWJsZSwgdG8gcmVkdWNlIG92ZXJoZWFkXG4tLVxubW0vZGFtb24vY29yZS5jLTQwMDItXHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZjdHgtXHUwMDNlc2NoZW1lcykpXG5tbS9kYW1vbi9jb3JlLmM6NDAwMzpcdFx0XHRrZGFtb25kX2FwcGx5X3NjaGVtZXMoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy00MDA0LVx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTAxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIERBTU9OIENvbnRleHQgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBEQU1PTiBjb250ZXh0cyBhcmUgaW5pdGlhdGVkIGFuZCBmaW5hbGl6ZWQuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gYGtkYW1vbmRfZm5gIGZpcnN0LCBhcyB0aGF0IHNlZW1zIGxpa2UgdGhlIHByaW1hcnkgZnVuY3Rpb24gZm9yIHRoZSBrZXJuZWwtbGV2ZWwgZGFlbW9uIG9wZXJhdGlvbnMuIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBob3cgaXQga2lja3MgdGhpbmdzIG9mZi4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzeXNmcyBpbnRlcmZhY2UuIEkga25vdyB0aGF0JiMzOTtzIHRoZSB1c2VyLXNwYWNlIGVudHJ5IHBvaW50LCBidXQgaG93IGRvZXMgaXQgbWFwIHRvIHRoZSBpbnRlcm5hbCBvcGVyYXRpb25zPyBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBzeW1ib2xzIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBzdGFydGluZyBhIG5ldyBjb250ZXh0IGFuZCBjb21taXR0aW5nIG9yIGZpbmFsaXppbmcgYW4gZXhpc3Rpbmcgb25lLiBJZGVudGlmeWluZyB0aG9zZSBob29rcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBmbG93IGFuZCBtYWtpbmcgYW55IG5lY2Vzc2FyeSBhZGp1c3RtZW50cyB0byBlbnN1cmUgcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX2NvbW1pdF90YXJnZXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTE2ODA9c3RhdGljIHZvaWQgZGFtb25fcmV2ZXJ0X3RhcmdldF9jb21taXRzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTY5NS1cbm1tL2RhbW9uL2NvcmUuYzoxNjk2OnN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldHMoXG5tbS9kYW1vbi9jb3JlLmMtMTY5Ny1cdFx0c3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jPTE4Nzk9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE5MDctXHRcdHJldHVybiBlcnI7XG5tbS9kYW1vbi9jb3JlLmM6MTkwODpcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXRzKGRzdCwgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xOTA5LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNjEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBEQU1PTiBTeXN0ZW0gRmlsZSBDb21taXQqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMuIEkmIzM5O20gdGhpbmtpbmcgdGhlIGxpa2VseSBhcmVhIGZvciB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eSBpcyBnb2luZyB0byBiZSBpbiBgbW0vZGFtb24vc3lzZnMuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBwcmV0dHkgY2VydGFpbiB0aGVyZSB3aWxsIGJlIGEgcm91dGluZSwgbGlrZWx5IG5hbWVkIHNvbWV0aGluZyBsaWtlIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgIG9yIGEgZnVuY3Rpb24gd2l0aCBhIHNpbWlsYXIgbmFtaW5nIGNvbnZlbnRpb24sIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBpbnB1dCBvciBjb21tYW5kcyB0aWVkIHRvIHRoZSBzeXNmcyBpbnRlcmZhY2UuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0xMDgzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTExMDgtICogSW4gZGV0YWlsLCBhbGwgREFNT04gQVBJIGNhbGxlcnMgZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBpbml0aWFsXG5tbS9kYW1vbi9jb3JlLmM6MTEwOTogKiBzZXR1cCBvZiBkYW1vbl9jdHggYmVmb3JlIGNhbGxpbmcgZGFtb25fc3RhcnQoKS4gIFNvbWUgb2YgdGhlIEFQSSBjYWxsZXJzXG5tbS9kYW1vbi9jb3JlLmMtMTExMC0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVx1MDAzZSBkYW1vbl9jb21taXQoKSBmb3Jcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjAzOT1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XG4tLVxubW0vZGFtb24vY29yZS5jLTIwNDEtLypcbm1tL2RhbW9uL2NvcmUuYzoyMDQyOiAqIF9fZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyBtb25pdG9yaW5nIHdpdGggZ2l2ZW4gY29udGV4dC5cbm1tL2RhbW9uL2NvcmUuYy0yMDQzLSAqIEBjdHg6XHRtb25pdG9yaW5nIGNvbnRleHRcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA0OC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMDQ5OnN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtMjA1MC17XG4tLVxubW0vZGFtb24vY29yZS5jLTIwNzEtLyoqXG5tbS9kYW1vbi9jb3JlLmM6MjA3MjogKiBkYW1vbl9zdGFydCgpIC0gU3RhcnRzIHRoZSBtb25pdG9yaW5ncyBmb3IgYSBnaXZlbiBncm91cCBvZiBjb250ZXh0cy5cbm1tL2RhbW9uL2NvcmUuYy0yMDczLSAqIEBjdHhzOlx0YW4gYXJyYXkgb2YgdGhlIHBvaW50ZXJzIGZvciBjb250ZXh0cyB0byBzdGFydCBtb25pdG9yaW5nXG4tLVxubW0vZGFtb24vY29yZS5jLTIwODAtICogQGV4Y2x1c2l2ZSBpcyB0cnVlIGFuZCBhIGdyb3VwIG9mIHRocmVhZHMgdGhhdCBjcmVhdGVkIGJ5IG90aGVyXG5tbS9kYW1vbi9jb3JlLmM6MjA4MTogKiAmIzM5O2RhbW9uX3N0YXJ0KCkmIzM5OyBjYWxsIGlzIGN1cnJlbnRseSBydW5uaW5nLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBidXRcbm1tL2RhbW9uL2NvcmUuYy0yMDgyLSAqIHJldHVybnMgLUVCVVNZLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDg1LSAqL1xubW0vZGFtb24vY29yZS5jOjIwODY6aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpXG5tbS9kYW1vbi9jb3JlLmMtMjA4Ny17XG4tLVxubW0vZGFtb24vY29yZS5jLTIxMTEtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9jdHhzOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vY29yZS5jOjIxMTI6XHRcdGVyciA9IF9fZGFtb25fc3RhcnQoY3R4c1tpXSk7XG5tbS9kYW1vbi9jb3JlLmMtMjExMy1cdFx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjIxND1pbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXG4tLVxubW0vZGFtb24vY29yZS5jLTIyNjItICpcbm1tL2RhbW9uL2NvcmUuYzoyMjYzOiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBkYW1vbl9zdGFydCgpIHdpdGggdGhlXG5tbS9kYW1vbi9jb3JlLmMtMjI2NC0gKiBAY3R4IGhhcyBzdWNjZWVkZWQuICBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gY291bGQgZmFsbCBpbnRvIGFuIGluZGVmaW5pdGVcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTQwMT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbilcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTQxMy1cbm1tL2RhbW9uL2xydV9zb3J0LmM6NDE0Olx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCB0cnVlKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDE1LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MzI0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTMzNi1cbm1tL2RhbW9uL3JlY2xhaW0uYzozMzc6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xubW0vZGFtb24vcmVjbGFpbS5jLTMzOC1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vc3RhdC5jPTIwMD1zdGF0aWMgaW50IGRhbW9uX3N0YXRfc3RhcnQodm9pZClcbi0tXG5tbS9kYW1vbi9zdGF0LmMtMjEyLVx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL3N0YXQuYzoyMTM6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZkYW1vbl9zdGF0X2NvbnRleHQsIDEsIHRydWUpO1xubW0vZGFtb24vc3RhdC5jLTIxNC1cdGlmIChlcnIpIHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTI1MTE9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjUzNS1cdH1cbm1tL2RhbW9uL3N5c2ZzLmM6MjUzNjpcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xubW0vZGFtb24vc3lzZnMuYy0yNTM3LVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzczMQoJCQkJCQkJb3V0cHV0OiAxNjcKCQkJCQkJCXRob3VnaHRzOiAyMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2xzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGFjZS4gSSBzZWUgYERBTU9OYCBhcyB0aGUgZm91bmRhdGlvbmFsIGNvbmZpZywgb2J2aW91c2x5IGVzc2VudGlhbC4gVGhlbiwgYERBTU9OX1ZBRERSYCwgd2hpY2ggaXMgZXhwbGljaXRseSB0aWVkIHRvIHZpcnR1YWwgYWRkcmVzcyBtb25pdG9yaW5nIHZpYSBgZGFtb25fdmFfdGFyZ2V0X3ZhbGlkYCDigJMgdGhhdCYjMzk7cyBjcml0aWNhbC4gQW5kIGZpbmFsbHksIGBEQU1PTl9TWVNGU2AgaW5kaWNhdGVzIGEgc3lzZnMgaW50ZXJmYWNlIGlzIGVuYWJsZWQsIHdoaWNoIGlzIGhlbHBmdWwgZm9yIGludGVyYWN0aW9ucy4gR29vZCwgdGhlIGZvdW5kYXRpb25hbCBlbGVtZW50cyBzZWVtIHRvIGJlIHByZXNlbnQuCgpOb3csIHRvIHRoZSBGb2N1c1N5bWJvbHMuIEkmIzM5O20gc2VlaW5nIGEgbGlzdCBoZXJlOiBgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb21gLCBgZGFtb3NfYWRqdXN0X3F1b3RhYCwgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AsIGFuZCB0aGF0IGBkYW1vbl92YV90YXJnZXRfdmFsaWRgIGFnYWluLiBUaGVzZSBhcmUgbGlrZWx5IHRoZSBrZXkgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcyB3ZSBuZWVkIHRvIHNjcnV0aW5pemUsIGFuZCBmcm9tIHRoZSBuYW1lcywgdGhleSBzdWdnZXN0IGFyZWFzIHJlbGF0ZWQgdG8gcXVvdGEgYWRqdXN0bWVudHMgYW5kIGludmFsaWQgY2hhcmdlIHRhcmdldCByZXNldHMgd2l0aGluIERBTU9OLCBhcyB3ZWxsIGFzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2NoZW1lcyB0aGF0IERBTU9OIHVzZXMsIGFuZCB0aGF0IGNyaXRpY2FsIHZhbGlkYXRpb24uCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgaW5mb3JtYXRpb24gd2l0aCB0aGUgaW5zdHJ1Y3Rpb25zLiBgV29ydGhGdXp6aW5nYCBiZWluZyB0cnVlIGlzIGEgZ3JlZW4gbGlnaHQsIGltcGx5aW5nIHRoYXQgdGhlIGNvZGUgd2l0aGluIG1tL2RhbW9uIGlzIHJlYWNoYWJsZSBmb3IgZnV6emluZyB3aGljaCBpcyBncmVhdC4gVGhlIGBFbmFibGVDb25maWdzYCBsaXN0LCBbJiMzNDtEQU1PTiYjMzQ7LCAmIzM0O0RBTU9OX1ZBRERSJiMzNDssICYjMzQ7REFNT05fU1lTRlMmIzM0O10sIGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudC4gVGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QsIFsmIzM0O2RhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tJiMzNDssICYjMzQ7ZGFtb3NfYWRqdXN0X3F1b3RhJiMzNDssICYjMzQ7a2RhbW9uZF9hcHBseV9zY2hlbWVzJiMzNDssICYjMzQ7ZGFtb25fdmFfdGFyZ2V0X3ZhbGlkJiMzNDtdLCBhZ2FpbiBhbGlnbnMgd2l0aCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXkgYXJlYXMgb2YgaW50ZXJlc3QuIFRoZSAmIzM0O0NvbmNpc2UgZXhwbGFuYXRpb24mIzM0OyByZWFzb25pbmcgaXMgc29saWQgYW5kIGNvbmZpcm1zIG15IGFzc3VtcHRpb25zLgoKT2theSwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBMZXQmIzM5O3MgbW92ZSBvbiB0byB0aGUgbmV4dCBzdGVwIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tJiMzNDssCiAgICAmIzM0O2RhbW9zX2FkanVzdF9xdW90YSYjMzQ7LAogICAgJiMzNDtrZGFtb25kX2FwcGx5X3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfdGFyZ2V0X3ZhbGlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PTiBjb3JlIHN1YnN5c3RlbSBpbiBtbS9kYW1vbi9jb3JlLmMsIGFkZGluZyBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbSgpIGFuZCBjYWxsaW5nIGl0IGZyb20gZGFtb3NfYWRqdXN0X3F1b3RhKCkgdG8gaW52YWxpZGF0ZSBzdGFsZSBjaGFyZ2UgdGFyZ2V0IHBvaW50ZXJzIHdoZW4gdGFyZ2V0X3ZhbGlkKCkgcmV0dXJucyBmYWxzZS4gVGhpcyBpcyBleGVjdXRhYmxlLCByZWFjaGFibGUga2VybmVsIGNvZGUgYWNjZXNzaWJsZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbSYjMzQ7LAogICAgJiMzNDtkYW1vc19hZGp1c3RfcXVvdGEmIzM0OywKICAgICYjMzQ7a2RhbW9uZF9hcHBseV9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX3RhcmdldF92YWxpZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT04gY29yZSBzdWJzeXN0ZW0gaW4gbW0vZGFtb24vY29yZS5jLCBhZGRpbmcgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oKSBhbmQgY2FsbGluZyBpdCBmcm9tIGRhbW9zX2FkanVzdF9xdW90YSgpIHRvIGludmFsaWRhdGUgc3RhbGUgY2hhcmdlIHRhcmdldCBwb2ludGVycyB3aGVuIHRhcmdldF92YWxpZCgpIHJldHVybnMgZmFsc2UuIFRoaXMgaXMgZXhlY3V0YWJsZSwgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIGFjY2Vzc2libGUgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6NTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKCkgaW4gbW0vZGFtb24vY29yZS5jIHRvIHJlc2V0IHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSB0byBOVUxMIGFuZCBxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIHRvIDAgd2hlbiBjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgaW5kaWNhdGVzIHRoZSB0YXJnZXQgaXMgbm8gbG9uZ2VyIHZhbGlkLlxuXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBpbnRlcm5hbCBEQU1PUyBxdW90YSB0cmFja2luZyBsb2dpYyB0byBoYW5kbGUgaW52YWxpZCB0YXJnZXQgcG9pbnRlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcyBvciBwYWRkaW5nLCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gZGFuZ2xpbmcvc3RhbGUgdGFyZ2V0IHBvaW50ZXIgZGVyZWZlcmVuY2VzIHdvdWxkIGJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOL1VBRiBkZXRlY3RvcnMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5Y2NkY2Q3NTUzMzk3MjdlNDYwNmQ1OWU5MzFjMjhiM2Q4NTkxMGE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAyMDo1NDowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCBjZThjNmY5OTEwNmVkLi4yYzU4YmU5ZWRiZGU0IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC0zMjgzLDYgJiM0MzszMjgzLDIyIEBAIHN0YXRpYyB2b2lkIGRhbW9zX3RyYWNlX2VzeihzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMsCiAJdHJhY2VfZGFtb3NfZXN6KGNpZHgsIHNpZHgsIHF1b3RhLSZndDtlc3opOwogfQogCiYjNDM7c3RhdGljIHZvaWQgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSwKJiM0MzsJCXN0cnVjdCBkYW1vbl9jdHggKmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0OwomIzQzOwomIzQzOwl0ID0gcXVvdGEtJmd0O2NoYXJnZV90YXJnZXRfZnJvbTsKJiM0MzsJaWYgKCF0KQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAoIWMtJmd0O29wcy50YXJnZXRfdmFsaWQpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmIChjLSZndDtvcHMudGFyZ2V0X3ZhbGlkKHQpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlxdW90YS0mZ3Q7Y2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDsKJiM0MzsJcXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20gPSAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpCiB7CiAJc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9ICZhbXA7cy0mZ3Q7cXVvdGE7CkBAIC0zMzE4LDYgJiM0MzszMzM0LDggQEAgc3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcykKIAkJCWRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7CiAJfQogCiYjNDM7CWRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKHF1b3RhLCBjKTsKJiM0MzsKIAlpZiAoIWMtJmd0O29wcy5nZXRfc2NoZW1lX3Njb3JlKQogCQlyZXR1cm47CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIENvcmUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIFRoaXMgcGF0Y2ggbG9va3MgaW50ZXJlc3Rpbmc7IGl0JiMzOTtzIHRvdWNoaW5nIGBtbS9kYW1vbi9jb3JlLmNgLCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBmdW5kYW1lbnRhbCBEQU1PTiBiZWhhdmlvci4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGdldCBhIHNlbnNlIG9mIHRoZSBjb250ZXh0IGFyb3VuZCB0aGUgY2hhbmdlLiBUaW1lIHRvIGVpdGhlciBsZXZlcmFnZSBgZ3JlcHBlcmAgdG8gc2VlIHdoYXQgZWxzZSBtaWdodCBiZSBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZSwgb3IgaWYgSSB3YW50IHRvIGJlIG1vcmUgZm9jdXNlZCwgSSYjMzk7bGwgZ28gd2l0aCBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIGFyb3VuZCBsaW5lIDMyODMgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEdldCB0aGUgZGV0YWlscyBmaXJzdCwgdGhlbiBkZWNpZGUgb24gdGhlIHJpZ2h0IGFwcHJvYWNoLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMyNzA6XHR9XG4zMjcxOlx0XG4zMjcyOlx0c3RhdGljIHZvaWQgZGFtb3NfdHJhY2VfZXN6KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcyxcbjMyNzM6XHRcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcbjMyNzQ6XHR7XG4zMjc1Olx0XHR1bnNpZ25lZCBpbnQgY2lkeCA9IDAsIHNpZHggPSAwO1xuMzI3NjpcdFx0c3RydWN0IGRhbW9zICpzaXRlcjtcbjMyNzc6XHRcbjMyNzg6XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzaXRlciwgYykge1xuMzI3OTpcdFx0XHRpZiAoc2l0ZXIgPT0gcylcbjMyODA6XHRcdFx0XHRicmVhaztcbjMyODE6XHRcdFx0c2lkeCYjNDM7JiM0Mzs7XG4zMjgyOlx0XHR9XG4zMjgzOlx0XHR0cmFjZV9kYW1vc19lc3ooY2lkeCwgc2lkeCwgcXVvdGEtXHUwMDNlZXN6KTtcbjMyODQ6XHR9XG4zMjg1Olx0XG4zMjg2Olx0c3RhdGljIHZvaWQgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbjMyODc6XHRcdFx0c3RydWN0IGRhbW9uX2N0eCAqYylcbjMyODg6XHR7XG4zMjg5Olx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuMzI5MDpcdFxuMzI5MTpcdFx0dCA9IHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbTtcbjMyOTI6XHRcdGlmICghdClcbjMyOTM6XHRcdFx0cmV0dXJuO1xuMzI5NDpcdFx0aWYgKCFjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQpXG4zMjk1Olx0XHRcdHJldHVybjtcbjMyOTY6XHRcdGlmIChjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkpXG4zMjk3Olx0XHRcdHJldHVybjtcbjMyOTg6XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG4zMjk5Olx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbjMzMDA6XHR9XG4zMzAxOlx0XG4zMzAyOlx0c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbjMzMDM6XHR7XG4zMzA0Olx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXHUwMDI2cy1cdTAwM2VxdW90YTtcbjMzMDU6XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4zMzA2Olx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuMzMwNzpcdFx0dW5zaWduZWQgbG9uZyBjdW11bGF0ZWRfc3osIGNhY2hlZF9lc3o7XG4zMzA4Olx0XHR1bnNpZ25lZCBpbnQgc2NvcmUsIG1heF9zY29yZSA9IDA7XG4zMzA5Olx0XG4zMzEwOlx0XHRpZiAoIXF1b3RhLVx1MDAzZW1zIFx1MDAyNlx1MDAyNiAhcXVvdGEtXHUwMDNlc3ogXHUwMDI2XHUwMDI2IGxpc3RfZW1wdHkoXHUwMDI2cXVvdGEtXHUwMDNlZ29hbHMpKVxuMzMxMTpcdFx0XHRyZXR1cm47XG4zMzEyOlx0XG4zMzEzOlx0XHQvKiBGaXJzdCBjaGFyZ2Ugd2luZG93ICovXG4zMzE0Olx0XHRpZiAoIXF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogXHUwMDI2XHUwMDI2ICFxdW90YS1cdTAwM2VjaGFyZ2VkX2Zyb20pIHtcbjMzMTU6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcbjMzMTY6XHRcdFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbjMzMTc6XHRcdFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkpXG4zMzE4Olx0XHRcdFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcbjMzMTk6XHRcdH1cbjMzMjA6XHRcbjMzMjE6XHRcdC8qIE5ldyBjaGFyZ2Ugd2luZG93IHN0YXJ0cyAqL1xuMzMyMjpcdFx0aWYgKCF0aW1lX2luX3JhbmdlX29wZW4oamlmZmllcywgcXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tLFxuMzMyMzpcdFx0XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tICYjNDM7XG4zMzI0Olx0XHRcdFx0XHRtc2Vjc190b19qaWZmaWVzKHF1b3RhLVx1MDAzZXJlc2V0X2ludGVydmFsKSkpIHtcbjMzMjU6XHRcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG4zMzI2Olx0XHRcdFx0cy1cdTAwM2VzdGF0LnF0X2V4Y2VlZHMmIzQzOyYjNDM7O1xuMzMyNzpcdFx0XHRxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX3N6ICYjNDM7PSBxdW90YS1cdTAwM2VjaGFyZ2VkX3N6O1xuMzMyODpcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VkX2Zyb20gPSBqaWZmaWVzO1xuMzMyOTpcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VkX3N6ID0gMDtcbjMzMzA6XHRcdFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkpXG4zMzMxOlx0XHRcdFx0Y2FjaGVkX2VzeiA9IHF1b3RhLVx1MDAzZWVzejtcbjMzMzI6XHRcdFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbjMzMzM6XHRcdFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkgXHUwMDI2XHUwMDI2IHF1b3RhLVx1MDAzZWVzeiAhPSBjYWNoZWRfZXN6KVxuMzMzNDpcdFx0XHRcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XG4zMzM1Olx0XHR9XG4zMzM2Olx0XG4zMzM3Olx0XHRkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbShxdW90YSwgYyk7XG4zMzM4Olx0XG4zMzM5Olx0XHRpZiAoIWMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUpXG4zMzQwOlx0XHRcdHJldHVybjtcbjMzNDE6XHRcbjMzNDI6XHRcdC8qIEZpbGwgdXAgdGhlIHNjb3JlIGhpc3RvZ3JhbSAqL1xuMzM0MzpcdFx0bWVtc2V0KGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0sIDAsXG4zMzQ0Olx0XHRcdFx0c2l6ZW9mKCpjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtKSAqXG4zMzQ1Olx0XHRcdFx0KERBTU9TX01BWF9TQ09SRSAmIzQzOyAxKSk7XG4zMzQ2Olx0XHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xuMzM0NzpcdFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuMzM0ODpcdFx0XHRcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYykpXG4zMzQ5Olx0XHRcdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc3NgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIERBTU9OJiMzOTtzIENoYXJnZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGNoYXJnZV90YXJnZXRfZnJvbWAgYW5kIGBjaGFyZ2VfYWRkcl9mcm9tYCB3aXRoaW4gREFNT04uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIGNvZGUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBncmVwIG9yIHVzZSBteSBJREUmIzM5O3MgJiMzNDtmaW5kIHVzYWdlcyYjMzQ7IGZ1bmN0aW9uYWxpdHkgdG8gcGlucG9pbnQgZXZlcnkgaW5zdGFuY2Ugd2hlcmUgdGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgY29udGV4dHMuIEFyZSB0aGV5IHVzZWQgdG9nZXRoZXI/IERvZXMgb25lIGNhbGwgdGhlIG90aGVyPyBXaGF0IGFyZSB0aGUgY2FsbGluZyBmdW5jdGlvbnMgZG9pbmcgd2l0aCB0aGUgZGF0YT8KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBjaGFyZ2luZyBtZWNoYW5pc20mIzM5O3MgZGVzaWduLiBUaGlzIHdpbGwgcmV2ZWFsIGhvdyBEQU1PTiBkZXRlcm1pbmVzIHdoYXQgbWVtb3J5IHJlZ2lvbnMgdG8gY2hhcmdlIGFuZCBmcm9tIHdoYXQgYWRkcmVzcyB3aXRoaW4gdGhvc2UgcmVnaW9ucy4gQXJlIHRoZXNlIGZ1bmN0aW9ucyBjb3JlIHRvIHRoZSBtb25pdG9yaW5nIGFuZCBzYW1wbGluZyBsb2dpYz8gQXJlIHRoZXkgcmVsYXRlZCB0byBhbnkgc3BlY2lmaWMgREFNT04gZmVhdHVyZXMsIGxpa2UgYWRhcHRpdmUgc2FtcGxpbmcgb3IgZHluYW1pYyB0aHJlc2hvbGRpbmc/CgpJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgd2l0aGluIHRoZSBjb3JlIG1vbml0b3JpbmcgbG9vcHMsIHBvdGVudGlhbGx5IGluc2lkZSB0aGUgZGF0YSBzYW1wbGluZyBvciBwcm9jZXNzaW5nIGZ1bmN0aW9ucy4gVGhlIGB0YXJnZXRgIGxpa2VseSByZWZlcnMgdG8gYSBtZW1vcnkgcmVnaW9uIHRoZSBEQU1PTiB3YW50cyB0byB0cmFjayAoYSAmIzM0O3RhcmdldCYjMzQ7IHRvIGJlIG1vbml0b3JlZCBvciBjaGFyZ2VkKS4gVGhlIGBhZGRyYCBwb3J0aW9uIHNlZW1zIHRvIGJlIHRoZSBsb2dpY2FsIGFkZHJlc3Mgd2l0aGluIHRoYXQgcmVnaW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRhdGEgaXMgcGFzc2VkIGFyb3VuZC4gSSYjMzk7bSBhbHNvIGludGVyZXN0ZWQgaW4gaG93IHRoZXNlIGFyZSBpbml0aWFsaXplZCBhbmQgc2V0IHVwLiBBbnkgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYGRhbW9uX2NvbnRleHRgIHdpbGwgYmUgaW1wb3J0YW50LiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBkYXRhLXJhY2UgY29uY2VybnMgYXJvdW5kIHRoYXQgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hhcmdlX3RhcmdldF9mcm9tJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaD0yNzY9c3RydWN0IGRhbW9zX3F1b3RhIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMzAwLVx0dW5zaWduZWQgbG9uZyBjaGFyZ2VkX2Zyb207XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MzAxOlx0c3RydWN0IGRhbW9uX3RhcmdldCAqY2hhcmdlX3RhcmdldF9mcm9tO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTMwMi1cdHVuc2lnbmVkIGxvbmcgY2hhcmdlX2FkZHJfZnJvbTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NzMyPXN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRhbW9zX3F1b3RhX2luaXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzM4LVx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tID0gMDtcbm1tL2RhbW9uL2NvcmUuYzo3Mzk6XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xubW0vZGFtb24vY29yZS5jLTc0MC1cdHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSAwO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNjk2PXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldHMoXG4tLVxubW0vZGFtb24vY29yZS5jLTE3MjItXHRcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGRzdCkge1xubW0vZGFtb24vY29yZS5jOjE3MjM6XHRcdFx0XHRpZiAocy1cdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPT0gZHN0X3RhcmdldCkge1xubW0vZGFtb24vY29yZS5jOjE3MjQ6XHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbm1tL2RhbW9uL2NvcmUuYy0xNzI1LVx0XHRcdFx0XHRzLVx1MDAzZXF1b3RhLmNoYXJnZV9hZGRyX2Zyb20gPSAwO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNDQ5PXN0YXRpYyBib29sIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjQ1Ni1cdC8qIFNraXAgcHJldmlvdXNseSBjaGFyZ2VkIHJlZ2lvbnMgKi9cbm1tL2RhbW9uL2NvcmUuYzoyNDU3Olx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSkge1xubW0vZGFtb24vY29yZS5jOjI0NTg6XHRcdGlmICh0ICE9IHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSlcbm1tL2RhbW9uL2NvcmUuYy0yNDU5LVx0XHRcdHJldHVybiB0cnVlO1xubW0vZGFtb24vY29yZS5jLTI0NjAtXHRcdGlmIChyID09IGRhbW9uX2xhc3RfcmVnaW9uKHQpKSB7XG5tbS9kYW1vbi9jb3JlLmM6MjQ2MTpcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xubW0vZGFtb24vY29yZS5jLTI0NjItXHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4tLVxubW0vZGFtb24vY29yZS5jLTI0ODAtXHRcdH1cbm1tL2RhbW9uL2NvcmUuYzoyNDgxOlx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xubW0vZGFtb24vY29yZS5jLTI0ODItXHRcdHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSAwO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNjgyPXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNzQxLVx0XHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSkge1xubW0vZGFtb24vY29yZS5jOjI3NDI6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gdDtcbm1tL2RhbW9uL2NvcmUuYy0yNzQzLVx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSByLVx1MDAzZWFyLmVuZDtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzI3Mj1zdGF0aWMgdm9pZCBkYW1vc190cmFjZV9lc3ooc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjg1LVxubW0vZGFtb24vY29yZS5jOjMyODY6c3RhdGljIHZvaWQgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbm1tL2RhbW9uL2NvcmUuYy0zMjg3LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjkwLVxubW0vZGFtb24vY29yZS5jOjMyOTE6XHR0ID0gcXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tO1xubW0vZGFtb24vY29yZS5jLTMyOTItXHRpZiAoIXQpXG4tLVxubW0vZGFtb24vY29yZS5jLTMyOTctXHRcdHJldHVybjtcbm1tL2RhbW9uL2NvcmUuYzozMjk4Olx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbm1tL2RhbW9uL2NvcmUuYy0zMjk5LVx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4tLVxubW0vZGFtb24vY29yZS5jPTMzMDI9c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzMzNi1cbm1tL2RhbW9uL2NvcmUuYzozMzM3Olx0ZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20ocXVvdGEsIGMpO1xubW0vZGFtb24vY29yZS5jLTMzMzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNzkKCQkJCQkJCW91dHB1dDogMTg3CgkJCQkJCQl0aG91Z2h0czogNDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQ6IEtNU0FOIEFwcGxpY2FiaWxpdHkgLSBEQU1PUyBRdW90YSBNYW5hZ2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXM6IGlzIHRoaXMgYGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tYCBmdW5jdGlvbiwgd2hpY2ggaXMgcmVzZXR0aW5nIGBxdW90YS0mZ3Q7Y2hhcmdlX3RhcmdldF9mcm9tYCB0byBOVUxMIGFuZCBgcXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb21gIHRvIDAgYmFzZWQgb24gdGhlIGBjLSZndDtvcHMudGFyZ2V0X3ZhbGlkKHQpYCBjaGVjaywgcG90ZW50aWFsbHkgaW50cm9kdWNpbmcgYSBLTVNBTiBpc3N1ZT8gSXQmIzM5O3MgaGFuZGxpbmcgaW52YWxpZCB0YXJnZXQgdHJhY2tpbmcgd2l0aGluIERBTU9TIHF1b3RhcywgY2xlYW5pbmcgdXAgYWZ0ZXIgYSB0YXJnZXQgYmVjb21lcyBpbnZhbGlkLCB3aGljaCBpcyBnb29kLiBXZSBkZWZpbml0ZWx5IHdhbnQgdG8gYXZvaWQgc3RhbGUgcG9pbnRlcnMgb3IgbG9naWMgZXJyb3JzIGhlcmUuCgpCdXQsIEkmIzM5O3ZlIGNoZWNrZWQgY2FyZWZ1bGx5OgoKKiAgIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbiBvciBtb2RpZmljYXRpb24gaXMgaGFwcGVuaW5nIGhlcmUuCiogICBXZSYjMzk7cmUgbm90IGludHJvZHVjaW5nIGFueSBgY29weV90b191c2VyYCBjYWxscyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UuCiogICBUaGVyZSYjMzk7cyBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIHN0YWNrL2hlYXAgdmFyaWFibGVzIGJlaW5nIGNyZWF0ZWQgb3IgdXNlZC4gRXZlcnl0aGluZyBiZWluZyBzZXQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYHF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMYCwgYHF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tID0gMGAuCiogICBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHN0YWxlIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIFVzZS1BZnRlci1GcmVlIHNjZW5hcmlvcyBoZXJlIHdvdWxkIGJlIHBpY2tlZCB1cCBieSBLQVNBTi4KCkxldCBtZSBnbyB0aHJvdWdoIHRoZSBjcml0ZXJpYSBhZ2FpbiB0byBiZSBhYnNvbHV0ZWx5IHN1cmU6CgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOb3BlLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuCjMuICBBbGxvY2F0aW9uIG9mIGNvbXBsZXggc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBtaWdodCBiZSByZWFkIGxhdGVyPyBOb3BlLgo0LiAgQm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGE/IE5vcGUuCgpTbywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgaXMgZmFsc2UuCgpIZXJlJiMzOTtzIG15IHJlYXNvbmluZyB3aGVuIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6CgoqICAgVGhpcyBwYXRjaCYjMzk7cyBgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oKWAgZm9jdXNlcyBvbiB2YWxpZGF0aW5nIGFuZCByZXNldHRpbmcgZXhpc3RpbmcgcG9pbnRlcnMgdG8gYHN0cnVjdCBkYW1vbl90YXJnZXRgIGFuZCBpdHMgYXNzb2NpYXRlZCB0cmFja2luZyBzdGF0ZS4KKiAgIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIHVzZXIgc3BhY2UgcGF0aHMsIG9yIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgaW50cm9kdWNlZCBvciBpbXBhY3RlZCBieSB0aGlzIGNoYW5nZS4KKiAgIEFueSBidWdzIGluIHRoaXMgc3BlY2lmaWMgc2VjdGlvbiB3b3VsZCBtb3N0IGxpa2VseSBiZSByZWxhdGVkIHRvIHN0YWxlIHBvaW50ZXIgYWNjZXNzIG9yIGlzc3VlcyBhcm91bmQgbGlmZXRpbWVzICh3aGljaCBLQVNBTiBhbHJlYWR5IGVmZmVjdGl2ZWx5IGNvdmVycyksIG5vdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuCiogICBUaGVyZWZvcmUsIHNwZWNpZmljIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkIGhlcmUuCgpJIHRoaW5rIHdlJiMzOTtyZSBnb29kIHRvIGdvLiBMZXQmIzM5O3MgaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oKSBpbiBtbS9kYW1vbi9jb3JlLmMgdG8gcmVzZXQgcXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tIHRvIE5VTEwgYW5kIHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gdG8gMCB3aGVuIGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSBpbmRpY2F0ZXMgdGhlIHRhcmdldCBpcyBubyBsb25nZXIgdmFsaWQuXG5cblRoaXMgY2hhbmdlIG1vZGlmaWVzIGludGVybmFsIERBTU9TIHF1b3RhIHRyYWNraW5nIGxvZ2ljIHRvIGhhbmRsZSBpbnZhbGlkIHRhcmdldCBwb2ludGVycy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzIG9yIHBhZGRpbmcsIGRvZXMgbm90IGNvcHkgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBkYW5nbGluZy9zdGFsZSB0YXJnZXQgcG9pbnRlciBkZXJlZmVyZW5jZXMgd291bGQgYmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4vVUFGIGRldGVjdG9ycyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oKSBpbiBtbS9kYW1vbi9jb3JlLmMgdG8gcmVzZXQgcXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tIHRvIE5VTEwgYW5kIHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gdG8gMCB3aGVuIGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSBpbmRpY2F0ZXMgdGhlIHRhcmdldCBpcyBubyBsb25nZXIgdmFsaWQuXG5cblRoaXMgY2hhbmdlIG1vZGlmaWVzIGludGVybmFsIERBTU9TIHF1b3RhIHRyYWNraW5nIGxvZ2ljIHRvIGhhbmRsZSBpbnZhbGlkIHRhcmdldCBwb2ludGVycy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzIG9yIHBhZGRpbmcsIGRvZXMgbm90IGNvcHkgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBkYW5nbGluZy9zdGFsZSB0YXJnZXQgcG9pbnRlciBkZXJlZmVyZW5jZXMgd291bGQgYmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4vVUFGIGRldGVjdG9ycyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6NTQ6MDEuNzMxODkwNTgzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEwNzgyNDU4ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tXCIsXG4gICAgXCJkYW1vc19hZGp1c3RfcXVvdGFcIixcbiAgICBcImtkYW1vbmRfYXBwbHlfc2NoZW1lc1wiLFxuICAgIFwiZGFtb25fdmFfdGFyZ2V0X3ZhbGlkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKCkgaW4gbW0vZGFtb24vY29yZS5jIHRvIHJlc2V0IHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gdG8gTlVMTCBhbmQgcXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gdG8gMCB3aGVuIGMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgaW5kaWNhdGVzIHRoZSB0YXJnZXQgaXMgbm8gbG9uZ2VyIHZhbGlkLlxcblxcblRoaXMgY2hhbmdlIG1vZGlmaWVzIGludGVybmFsIERBTU9TIHF1b3RhIHRyYWNraW5nIGxvZ2ljIHRvIGhhbmRsZSBpbnZhbGlkIHRhcmdldCBwb2ludGVycy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzIG9yIHBhZGRpbmcsIGRvZXMgbm90IGNvcHkgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBkYW5nbGluZy9zdGFsZSB0YXJnZXQgcG9pbnRlciBkZXJlZmVyZW5jZXMgd291bGQgYmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4vVUFGIGRldGVjdG9ycyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT04gY29yZSBzdWJzeXN0ZW0gaW4gbW0vZGFtb24vY29yZS5jLCBhZGRpbmcgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oKSBhbmQgY2FsbGluZyBpdCBmcm9tIGRhbW9zX2FkanVzdF9xdW90YSgpIHRvIGludmFsaWRhdGUgc3RhbGUgY2hhcmdlIHRhcmdldCBwb2ludGVycyB3aGVuIHRhcmdldF92YWxpZCgpIHJldHVybnMgZmFsc2UuIFRoaXMgaXMgZXhlY3V0YWJsZSwgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIGFjY2Vzc2libGUgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjU0OjAxLjczMTg5NTkzM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk5NzI4NjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWNjZGNkNzU1MzM5NzI3ZTQ2MDZkNTllOTMxYzI4YjNkODU5MTBhOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDIwOjU0OjAwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xcbmluZGV4IGNlOGM2Zjk5MTA2ZWQuLjJjNThiZTllZGJkZTQgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXFxuKysrIGIvbW0vZGFtb24vY29yZS5jXFxuQEAgLTMyODMsNiArMzI4MywyMiBAQCBzdGF0aWMgdm9pZCBkYW1vc190cmFjZV9lc3ooc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzLFxcbiBcXHR0cmFjZV9kYW1vc19lc3ooY2lkeCwgc2lkeCwgcXVvdGEtXFx1MDAzZWVzeik7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXFxuK1xcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcXG4rXFxuK1xcdHQgPSBxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tO1xcbitcXHRpZiAoIXQpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aWYgKCFjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGlmIChjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbitcXHRxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuIHtcXG4gXFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG5AQCAtMzMxOCw2ICszMzM0LDggQEAgc3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4gXFx0XFx0XFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcXG4gXFx0fVxcbiBcXG4rXFx0ZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20ocXVvdGEsIGMpO1xcbitcXG4gXFx0aWYgKCFjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6NTQ6MDIuMzMyMjAxNzYyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMzgxNDQ2MzMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb21cIixcbiAgICBcImRhbW9zX2FkanVzdF9xdW90YVwiLFxuICAgIFwia2RhbW9uZF9hcHBseV9zY2hlbWVzXCIsXG4gICAgXCJkYW1vbl92YV90YXJnZXRfdmFsaWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT04gY29yZSBzdWJzeXN0ZW0gaW4gbW0vZGFtb24vY29yZS5jLCBhZGRpbmcgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oKSBhbmQgY2FsbGluZyBpdCBmcm9tIGRhbW9zX2FkanVzdF9xdW90YSgpIHRvIGludmFsaWRhdGUgc3RhbGUgY2hhcmdlIHRhcmdldCBwb2ludGVycyB3aGVuIHRhcmdldF92YWxpZCgpIHJldHVybnMgZmFsc2UuIFRoaXMgaXMgZXhlY3V0YWJsZSwgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIGFjY2Vzc2libGUgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWNjZGNkNzU1MzM5NzI3ZTQ2MDZkNTllOTMxYzI4YjNkODU5MTBhOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMjA6NTQ6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IGNlOGM2Zjk5MTA2ZWQuLjJjNThiZTllZGJkZTQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTMyODMsNiArMzI4MywyMiBAQCBzdGF0aWMgdm9pZCBkYW1vc190cmFjZV9lc3ooc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzLFxuIFx0dHJhY2VfZGFtb3NfZXN6KGNpZHgsIHNpZHgsIHF1b3RhLVx1MDAzZWVzeik7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG4rXHRcdHN0cnVjdCBkYW1vbl9jdHggKmMpXG4re1xuK1x0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbitcbitcdHQgPSBxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb207XG4rXHRpZiAoIXQpXG4rXHRcdHJldHVybjtcbitcdGlmICghYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAoYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpKVxuK1x0XHRyZXR1cm47XG4rXHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xuK1x0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4ge1xuIFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG5AQCAtMzMxOCw2ICszMzM0LDggQEAgc3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbiBcdFx0XHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xuIFx0fVxuIFxuK1x0ZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20ocXVvdGEsIGMpO1xuK1xuIFx0aWYgKCFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxuIFx0XHRyZXR1cm47XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDowMi4zMzIyMDMwOTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NjE3MzUwMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBwYXRjaCwgYXMgaXQgdW5mb2xkcyBpbiBteSBtaW5kOlxuXG4qKkFuYWx5emluZyBhIERBTU9OIFBhdGNoOiBJbnZhbGlkIENoYXJnZSBUYXJnZXQgUmVzZXQqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgdGhlIG1haW4gbW9kaWZpY2F0aW9uIGlzIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBUaGUga2V5IGFkZGl0aW9uIHNlZW1zIHRvIGJlIHRoaXMgbmV3IGZ1bmN0aW9uLCBgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSwgc3RydWN0IGRhbW9uX2N0eCAqYylgLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gaXMgcHJldHR5IGNsZWFyLCBpdCBpbmRpY2F0ZXMgYW4gYWRqdXN0bWVudCByZWxhdGVkIHRvIHF1b3RhIGNoYXJnZXMsIHNwZWNpZmljYWxseSByZXNldHRpbmcgYW4gXCJpbnZhbGlkXCIgY2hhcmdlIHRhcmdldC4gQW5kIGl0IGxvb2tzIGxpa2UgaXQncyBjYWxsZWQgZnJvbSB3aXRoaW4gYGRhbW9zX2FkanVzdF9xdW90YWAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZ2l2ZW4gdGhlIG5hbWluZy5cblxuTm93LCBJIG5lZWQgbW9yZSBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIHJlc2V0IGlzIG5lY2Vzc2FyeSBhbmQgd2hhdCdzIGNvbnNpZGVyZWQgXCJpbnZhbGlkXCIgaW4gdGhpcyBzY2VuYXJpby4gVGltZSB0byBicmluZyBvdXQgdGhlIGJpZyBndW5zOiBJJ2xsIHVzZSBteSBzdGFuZGFyZCB0b29scywgcHJvYmFibHkgYHJlYWQtZmlsZWAgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIHBvdGVudGlhbGx5IG90aGVyIHJlbGV2YW50IGZpbGVzLCBvciBpZiB0aGF0IGRvZXNuJ3QgeWllbGQgcmVzdWx0cyBxdWlja2x5IGVub3VnaCwgSSdsbCBzd2l0Y2ggdG8gYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgdXNhZ2VzIG9mIHRoZSB0ZXJtcyBvciBjb25jZXB0cyBhcm91bmQgdGhlIG5ldyBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgREFNT04ncyBxdW90YSBtYW5hZ2VtZW50IGlzIGNydWNpYWwsIGFzIGlzIGZpZ3VyaW5nIG91dCB3aGF0IHRyaWdnZXJzIHRoaXMgZnVuY3Rpb24sIGFuZCB3aGF0IFwiaW52YWxpZFwiIHByZWNpc2VseSBtZWFucyBpbiB0aGlzIERBTU9OIGNvbnRleHQuIFRoaXMgaXMgYWxsIGFib3V0IGdldHRpbmcgdGhlIGJyb2FkZXIgcGljdHVyZSB0byBldmFsdWF0ZSB0aGUgc291bmRuZXNzIGFuZCB0aGUgZGVzaWduIGNob2ljZSBvZiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDkwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDowOS45NDk1NTYyMTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyODAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMyODA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzI4MTpcXHRcXHRcXHRzaWR4Kys7XFxuMzI4MjpcXHRcXHR9XFxuMzI4MzpcXHRcXHR0cmFjZV9kYW1vc19lc3ooY2lkeCwgc2lkeCwgcXVvdGEtXFx1MDAzZWVzeik7XFxuMzI4NDpcXHR9XFxuMzI4NTpcXHRcXG4zMjg2OlxcdHN0YXRpYyB2b2lkIGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXFxuMzI4NzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbjMyODg6XFx0e1xcbjMyODk6XFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcXG4zMjkwOlxcdFxcbjMyOTE6XFx0XFx0dCA9IHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb207XFxuMzI5MjpcXHRcXHRpZiAoIXQpXFxuMzI5MzpcXHRcXHRcXHRyZXR1cm47XFxuMzI5NDpcXHRcXHRpZiAoIWMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQpXFxuMzI5NTpcXHRcXHRcXHRyZXR1cm47XFxuMzI5NjpcXHRcXHRpZiAoYy1cXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSlcXG4zMjk3OlxcdFxcdFxcdHJldHVybjtcXG4zMjk4OlxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbjMyOTk6XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSAwO1xcbjMzMDA6XFx0fVxcbjMzMDE6XFx0XFxuMzMwMjpcXHRzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbjMzMDM6XFx0e1xcbjMzMDQ6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG4zMzA1OlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuMzMwNjpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xcbjMzMDc6XFx0XFx0dW5zaWduZWQgbG9uZyBjdW11bGF0ZWRfc3osIGNhY2hlZF9lc3o7XFxuMzMwODpcXHRcXHR1bnNpZ25lZCBpbnQgc2NvcmUsIG1heF9zY29yZSA9IDA7XFxuMzMwOTpcXHRcXG4zMzEwOlxcdFxcdGlmICghcXVvdGEtXFx1MDAzZW1zIFxcdTAwMjZcXHUwMDI2ICFxdW90YS1cXHUwMDNlc3ogXFx1MDAyNlxcdTAwMjYgbGlzdF9lbXB0eShcXHUwMDI2cXVvdGEtXFx1MDAzZWdvYWxzKSlcXG4zMzExOlxcdFxcdFxcdHJldHVybjtcXG4zMzEyOlxcdFxcbjMzMTM6XFx0XFx0LyogRmlyc3QgY2hhcmdlIHdpbmRvdyAqL1xcbjMzMTQ6XFx0XFx0aWYgKCFxdW90YS1cXHUwMDNldG90YWxfY2hhcmdlZF9zeiBcXHUwMDI2XFx1MDAyNiAhcXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSkge1xcbjMzMTU6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XFxuMzMxNjpcXHRcXHRcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbjMzMTc6XFx0XFx0XFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkpXFxuMzMxODpcXHRcXHRcXHRcXHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xcbjMzMTk6XFx0XFx0fVxcbjMzMjA6XFx0XFxuMzMyMTpcXHRcXHQvKiBOZXcgY2hhcmdlIHdpbmRvdyBzdGFydHMgKi9cXG4zMzIyOlxcdFxcdGlmICghdGltZV9pbl9yYW5nZV9vcGVuKGppZmZpZXMsIHF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20sXFxuMzMyMzpcXHRcXHRcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tICtcXG4zMzI0OlxcdFxcdFxcdFxcdFxcdG1zZWNzX3RvX2ppZmZpZXMocXVvdGEtXFx1MDAzZXJlc2V0X2ludGVydmFsKSkpIHtcXG4zMzI1OlxcdFxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG4zMzI2OlxcdFxcdFxcdFxcdHMtXFx1MDAzZXN0YXQucXRfZXhjZWVkcysrO1xcbjMzMjc6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogKz0gcXVvdGEtXFx1MDAzZWNoYXJnZWRfc3o7XFxuMzMyODpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcXG4zMzI5OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6ID0gMDtcXG4zMzMwOlxcdFxcdFxcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxcbjMzMzE6XFx0XFx0XFx0XFx0Y2FjaGVkX2VzeiA9IHF1b3RhLVxcdTAwM2Vlc3o7XFxuMzMzMjpcXHRcXHRcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbjMzMzM6XFx0XFx0XFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgcXVvdGEtXFx1MDAzZWVzeiAhPSBjYWNoZWRfZXN6KVxcbjMzMzQ6XFx0XFx0XFx0XFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcXG4zMzM1OlxcdFxcdH1cXG4zMzM2OlxcdFxcbjMzMzc6XFx0XFx0ZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20ocXVvdGEsIGMpO1xcbjMzMzg6XFx0XFxuMzMzOTpcXHRcXHRpZiAoIWMtXFx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxcbjMzNDA6XFx0XFx0XFx0cmV0dXJuO1xcbjMzNDE6XFx0XFxuMzM0MjpcXHRcXHQvKiBGaWxsIHVwIHRoZSBzY29yZSBoaXN0b2dyYW0gKi9cXG4zMzQzOlxcdFxcdG1lbXNldChjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSwgMCxcXG4zMzQ0OlxcdFxcdFxcdFxcdHNpemVvZigqYy1cXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0pICpcXG4zMzQ1OlxcdFxcdFxcdFxcdChEQU1PU19NQVhfU0NPUkUgKyAxKSk7XFxuMzM0NjpcXHRcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xcbjMzNDc6XFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcXG4zMzQ4OlxcdFxcdFxcdFxcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYykpXFxuMzM0OTpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6NTQ6MDkuOTQ5NzIxMzYyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA2MTI5NzM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqREFNT04gS2NvbmZpZyBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBncmFudWxhci4gQmVmb3JlIEkgZGl2ZSBpbnRvIGFueSBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZykgaW1wbGVtZW50YXRpb24gZGV0YWlscywgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIEtjb25maWcgZGVwZW5kZW5jaWVzLiBJIGhhdmUgdG8gdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCdzIGNydWNpYWwgSSBkb24ndCBvdmVybG9vayBhbnkgcG90ZW50aWFsbHkgb2JzY3VyZSwgYnV0IHZpdGFsLCBjb25maWd1cmF0aW9ucy4gSXQncyBhIHF1aWNrIHNhbml0eSBjaGVjayBhdCB0aGlzIHN0YWdlIHRvIG1ha2Ugc3VyZSBhbGwgdGhlIGJ1aWxkaW5nIGJsb2NrcyBhcmUgaW4gcGxhY2UgYW5kIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHNldCBvZiBjb25maWd1cmFibGUgZmVhdHVyZXMuIFRoaXMgYWxzbyBoZWxwcyBwbGFuIHRoZSBuZXh0IHN0ZXBzLCB0byBlbnN1cmUgYSBjb21wbGV0ZSBhbmQgc3VjY2Vzc2Z1bCBpbXBsZW1lbnRhdGlvbi4gS25vd2luZyB0aGUgS2NvbmZpZyBvcHRpb25zIHdpbGwgaW5mb3JtIGhvdyBJIGNvbmZpZ3VyZSBEQU1PTiBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZSBnaXZlbiB0aGUgdGFyZ2V0IHdvcmtsb2FkLCBlc3BlY2lhbGx5IGZvciBwb3RlbnRpYWwgdHJhZGUtb2ZmcyBhbmQgcGVyZm9ybWFuY2UgdHVuaW5nIHBvc3NpYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MTksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjU0OjEyLjAxMTAyMzE5MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDUzODE5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxubW0vZGFtb24vS2NvbmZpZy00LVxcbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWctNjktXFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWctODktXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTA5LVxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDoxMi4wOTU1Njc4NTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTAzNDIyNDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyBmb3IgRGFtb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IGdyYW51bGFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBEYW1vbiB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCB0aGUgYmVzdCBzdGFydGluZyBwb2ludCwgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBjYW5vbmljYWwgc291cmNlIGZvciB0aGVzZSB0aGluZ3MuIEkga25vdyB0aGF0IGZpbGUgd2lsbCBzcGVsbCBvdXQgKmV4YWN0bHkqIHdoYXQncyBhdmFpbGFibGUsIHdoaWNoIG90aGVyIGZlYXR1cmVzIG9yIHNldHRpbmdzIGl0IHJlbGllcyBvbiwgYW5kIHdoYXQgdGhlIGRlZmF1bHQgYmVoYXZpb3JzIGFyZS4gSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUsIGFuZCB0aGUgS2NvbmZpZyBmaWxlIGdpdmVzIG1lIHRoYXQsIGVzc2VudGlhbGx5IGFsbG93aW5nIG1lIHRvIGJ1aWxkIHRoZSBiaWcgcGljdHVyZS4gVGhpcyBpcyB0aGUgc29saWQgZm91bmRhdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZGFtb24gaXMgY29uZmlndXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU3NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjU0OjEzLjk5ODk5MzI1OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdG1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBEQU1PTlxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXFxuICAgOTpcXHRcXHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxcbiAgMTA6XFx0XFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxcbiAgMTM6XFx0XFx0ICBtb3JlIGluZm9ybWF0aW9uLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxuICAxNjpcXHRcXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gREFNT05cXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxcbiAgMjA6XFx0XFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcXG4gIDIxOlxcdFxcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cXG4gIDIyOlxcdFxcdCAgb25seSBkZXZlbG9wbWVudCBhbmQgdGVzdCBzZXR1cHMuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDI1OlxcdFxcbiAgMjY6XFx0Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG4gIDI3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDI5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICAzMDpcXHRcXHRoZWxwXFxuICAzMTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgMzQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgREFNT05fVkFERFJcXG4gIDM5OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxuICA0MTpcXHRcXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4gIDQyOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDQzOlxcdFxcdGhlbHBcXG4gIDQ0OlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbiAgNDU6XFx0XFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXFxuICA0NjpcXHRcXG4gIDQ3OlxcdGNvbmZpZyBEQU1PTl9QQUREUlxcbiAgNDg6XFx0XFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxuICA1MDpcXHRcXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4gIDUxOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDUyOlxcdFxcdGhlbHBcXG4gIDUzOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbiAgNTQ6XFx0XFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG4gIDU3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDU4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgNTk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDYwOlxcdFxcdGhlbHBcXG4gIDYxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDYyOlxcdFxcbiAgNjM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDY0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICA2NTpcXHRcXG4gIDY2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDY3OlxcdFxcbiAgNjg6XFx0Y29uZmlnIERBTU9OX1NZU0ZTXFxuICA2OTpcXHRcXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuICA3MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxuICA3MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA3MjpcXHRcXHRoZWxwXFxuICA3MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxcbiAgNzQ6XFx0XFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cXG4gIDc1OlxcdFxcbiAgNzY6XFx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG4gIDc3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNzg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICA3OTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgODA6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDoxMy45OTkxNTEwMTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjYyNjg1MTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGRhbW9zX2FkanVzdF9xdW90YWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uIGlzIHVzZWQgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBEQU1PTiBjb3JlIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRyaWdnZXJzIHRoZSBuZWVkIHRvIGFkanVzdCB0aGUgcXVvdGEsIGFuZCB3aGF0IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGxvb2tzIGxpa2Ugd2hlbiB0aGF0IGhhcHBlbnMuIEFyZSB0aGVyZSBzcGVjaWZpYyBzY2VuYXJpb3Mgb3IgZXZlbnRzIHRoYXQgbGVhZCB0byBpdHMgaW52b2NhdGlvbj8gSSBzaG91bGQgYWxzbyBxdWlja2x5IGFzc2VzcyBhbnkgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHBhc3NlZCBpbnRvIHRoZSBmdW5jdGlvbiwgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgaW5mb3JtYXRpb24gaXQncyB3b3JraW5nIHdpdGguIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgY29kZSBhbmQgc3RhcnQgbG9va2luZyBmb3IgdGhvc2UgZnVuY3Rpb24gY2FsbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MjcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjU0OjE2LjI2MTgzOTgyMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkxMTk0NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfYWRqdXN0X3F1b3RhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zMjg2PXN0YXRpYyB2b2lkIGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzMwMS1cXG5tbS9kYW1vbi9jb3JlLmM6MzMwMjpzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy0zMzAzLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzg1PXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0MDAtXFxubW0vZGFtb24vY29yZS5jOjM0MDE6XFx0XFx0ZGFtb3NfYWRqdXN0X3F1b3RhKGMsIHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNDAyLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6NTQ6MTYuMzQwOTYzODM4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNTU3MDE0MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBhbmQgREFNT04ncyBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBtaW5kIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBEQU1PTiBvcGVyYXRpb25zIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aG9zZSBzeXNmcyBlbnRyeSBwb2ludHMuIEkga25vdyBEQU1PTiBpcyBhIHBvd2VyZnVsIG1lbW9yeSBtb25pdG9yaW5nIGFuZCBtYW5hZ2luZyBzdWJzeXN0ZW0sIHNvIEkgbmVlZCB0byBwaWVjZSB0b2dldGhlciBob3cgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgZml0cyBpbnRvIHRoZSBwdXp6bGUsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdGhlIHN5c2ZzIGludGVyZmFjZS4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBmbG93IG9mIGluZm9ybWF0aW9uIOKAkyBob3cgYXJlIHNjaGVtZXMgZGVmaW5lZCwgaG93IGFyZSB0aGV5IGFwcGxpZWQsIGFuZCB3aGF0J3MgdGhlIHJvbGUgb2YgdGhvc2Ugc3lzZnMgZW50cmllcyBpbiB0aGlzIHByb2Nlc3M/IEkgbmVlZCB0byBhbmFseXplIGhvdyBpdCBtYW5hZ2VzIG1lbW9yeSByZWdpb25zIGFuZCBvcHRpbWl6ZXMgcGVyZm9ybWFuY2UuIFRoZSBpbnRlcmFjdGlvbiB3aXRoIHRob3NlIGVudHJ5IHBvaW50cyBpcyBjcml0aWNhbCBiZWNhdXNlIEkgd2FudCB0byBncmFzcCBleGFjdGx5IGhvdyBpdCdzIGNvbmZpZ3VyZWQgYW5kIGNvbnRyb2xsZWQuIEknbSBjb25zaWRlcmluZyBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG9yIGNvbmZsaWN0cyB3aXRoIG90aGVyIHN5c3RlbSBjb21wb25lbnRzLCB0b28uIEkgd2FudCB0byBidWlsZCBhIGNvbXBsZXRlIG1lbnRhbCBtb2RlbCBvZiB0aGlzIHBhcnQgb2YgREFNT04ncyBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDoxOC41OTY2NjkwOTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzgwOlxcdFxcdFxcdHNpZHgrKztcXG4zMzgxOlxcdFxcdH1cXG4zMzgyOlxcdFxcdHRyYWNlX2NhbGxfX2RhbW9zX3N0YXRfYWZ0ZXJfYXBwbHlfaW50ZXJ2YWwoY2lkeCwgc2lkeCwgXFx1MDAyNnMtXFx1MDAzZXN0YXQpO1xcbjMzODM6XFx0fVxcbjMzODQ6XFx0XFxuMzM4NTpcXHRzdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4zMzg2OlxcdHtcXG4zMzg3OlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuMzM4ODpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnM7XFxuMzM4OTpcXHRcXHRib29sIGhhc19zY2hlbWVzX3RvX2FwcGx5ID0gZmFsc2U7XFxuMzM5MDpcXHRcXHR1bnNpZ25lZCBsb25nIG1heF9yZWdpb25fc3o7XFxuMzM5MTpcXHRcXG4zMzkyOlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XFxuMzM5MzpcXHRcXHRcXHRpZiAodGltZV9iZWZvcmUoYy1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsIHMtXFx1MDAzZW5leHRfYXBwbHlfc2lzKSlcXG4zMzk0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjMzOTU6XFx0XFxuMzM5NjpcXHRcXHRcXHRpZiAoIXMtXFx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQpXFxuMzM5NzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zMzk4OlxcdFxcbjMzOTk6XFx0XFx0XFx0aGFzX3NjaGVtZXNfdG9fYXBwbHkgPSB0cnVlO1xcbjM0MDA6XFx0XFxuMzQwMTpcXHRcXHRcXHRkYW1vc19hZGp1c3RfcXVvdGEoYywgcyk7XFxuMzQwMjpcXHRcXHR9XFxuMzQwMzpcXHRcXG4zNDA0OlxcdFxcdGlmICghaGFzX3NjaGVtZXNfdG9fYXBwbHkpXFxuMzQwNTpcXHRcXHRcXHRyZXR1cm47XFxuMzQwNjpcXHRcXG4zNDA3OlxcdFxcdG1heF9yZWdpb25fc3ogPSBkYW1vbl9yZWdpb25fc3pfbGltaXQoYyk7XFxuMzQwODpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZjLVxcdTAwM2V3YWxrX2NvbnRyb2xfbG9jayk7XFxuMzQwOTpcXHRcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xcbjM0MTA6XFx0XFx0XFx0aWYgKGMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQgXFx1MDAyNlxcdTAwMjYgYy1cXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZSlcXG4zNDExOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjM0MTI6XFx0XFx0XFx0ZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opO1xcbjM0MTM6XFx0XFx0fVxcbjM0MTQ6XFx0XFxuMzQxNTpcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xcbjM0MTY6XFx0XFx0XFx0aWYgKHRpbWVfYmVmb3JlKGMtXFx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBzLVxcdTAwM2VuZXh0X2FwcGx5X3NpcykpXFxuMzQxNzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zNDE4OlxcdFxcdFxcdGRhbW9zX3dhbGtfY29tcGxldGUoYywgcyk7XFxuMzQxOTpcXHRcXHRcXHRkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMocywgYyk7XFxuMzQyMDpcXHRcXHRcXHRzLVxcdTAwM2VsYXN0X2FwcGxpZWQgPSBOVUxMO1xcbjM0MjE6XFx0XFx0XFx0ZGFtb3NfdHJhY2Vfc3RhdChjLCBzKTtcXG4zNDIyOlxcdFxcdH1cXG4zNDIzOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Yy1cXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xcbjM0MjQ6XFx0fVxcbjM0MjU6XFx0XFxuMzQyNjpcXHQjaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxcbjM0Mjc6XFx0c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X21lcmdlX3R3b19yZWdpb25zKFxcbjM0Mjg6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqbCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcXG4zNDI5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6NTQ6MTguNTk2OTM0MzQ1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxOTMwMjY1MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgQ2hhcmdlIFRhcmdldCdzIFVzYWdlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgcXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tYC4gVGltZSB0byBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyB0aGluZyBpcyBhY3R1YWxseSAqdXNlZCouIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBpcyBnb2luZyB0byBiZSB0aGUgY3JpdGljYWwgcG9pbnQgd2hlcmUgdGhlIHF1b3RhIHN5c3RlbSBpbnRlcmZhY2VzIHdpdGggdGhlIGNoYXJnaW5nIG1lY2hhbmlzbS4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IGFsbCB0aGUgY2FsbCBzaXRlcyB0byBmdWxseSBncmFzcCBpdHMgcm9sZS4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgcGFzc2VkLCB3aGF0IGFzc3VtcHRpb25zIGFyZSBtYWRlIGFib3V0IGBxdW90YWAsIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgaG93IHRoaXMgZnVuY3Rpb24gY29udHJpYnV0ZXMgdG8gcmVzb3VyY2UgYWNjb3VudGluZy4gSXMgaXQgY2FsbGVkIHN5bmNocm9ub3VzbHkgb3IgYXN5bmNocm9ub3VzbHk/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgaWYgaXQgZmFpbHM/IEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlIHRvIGJlIGNvbmZpZGVudCBpbiBhbnkgcmVmYWN0b3Jpbmcgb3IgbW9kaWZpY2F0aW9uIHRvIHRoaXMgc3lzdGVtLiBMZXQncyBzdGFydCB3aXRoIGEgcXVpY2sgY29kZSBzZWFyY2ggYW5kIGdldCBhIHZpc3VhbCBvZiBpdHMgdXNhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMjEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjU0OjIwLjc4OTk2NDM4MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE1ODA2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hhcmdlX3RhcmdldF9mcm9tXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz03MzI9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSAqZGFtb3NfcXVvdGFfaW5pdChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTczOC1cXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tID0gMDtcXG5tbS9kYW1vbi9jb3JlLmM6NzM5OlxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbm1tL2RhbW9uL2NvcmUuYy03NDAtXFx0cXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSAwO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE2OTY9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0cyhcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzIyLVxcdFxcdFxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBkc3QpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTcyMzpcXHRcXHRcXHRcXHRpZiAocy1cXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID09IGRzdF90YXJnZXQpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTcyNDpcXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbm1tL2RhbW9uL2NvcmUuYy0xNzI1LVxcdFxcdFxcdFxcdFxcdHMtXFx1MDAzZXF1b3RhLmNoYXJnZV9hZGRyX2Zyb20gPSAwO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTI0NDk9c3RhdGljIGJvb2wgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0NTYtXFx0LyogU2tpcCBwcmV2aW91c2x5IGNoYXJnZWQgcmVnaW9ucyAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyNDU3OlxcdGlmIChxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKSB7XFxubW0vZGFtb24vY29yZS5jOjI0NTg6XFx0XFx0aWYgKHQgIT0gcXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSlcXG5tbS9kYW1vbi9jb3JlLmMtMjQ1OS1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5tbS9kYW1vbi9jb3JlLmMtMjQ2MC1cXHRcXHRpZiAociA9PSBkYW1vbl9sYXN0X3JlZ2lvbih0KSkge1xcbm1tL2RhbW9uL2NvcmUuYzoyNDYxOlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbm1tL2RhbW9uL2NvcmUuYy0yNDYyLVxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNDgwLVxcdFxcdH1cXG5tbS9kYW1vbi9jb3JlLmM6MjQ4MTpcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcXG5tbS9kYW1vbi9jb3JlLmMtMjQ4Mi1cXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjY4Mj1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNzQxLVxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSkge1xcbm1tL2RhbW9uL2NvcmUuYzoyNzQyOlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSB0O1xcbm1tL2RhbW9uL2NvcmUuYy0yNzQzLVxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gci1cXHUwMDNlYXIuZW5kO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMyNzI9c3RhdGljIHZvaWQgZGFtb3NfdHJhY2VfZXN6KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjg1LVxcbm1tL2RhbW9uL2NvcmUuYzozMjg2OnN0YXRpYyB2b2lkIGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXFxubW0vZGFtb24vY29yZS5jLTMyODctXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjkwLVxcbm1tL2RhbW9uL2NvcmUuYzozMjkxOlxcdHQgPSBxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjkyLVxcdGlmICghdClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjk3LVxcdFxcdHJldHVybjtcXG5tbS9kYW1vbi9jb3JlLmM6MzI5ODpcXHRxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcXG5tbS9kYW1vbi9jb3JlLmMtMzI5OS1cXHRxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzMwMj1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzMzYtXFxubW0vZGFtb24vY29yZS5jOjMzMzc6XFx0ZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20ocXVvdGEsIGMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMzM4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDoyMC44NTE1NDkyODFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk2ODE1MDA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoJ3MgUmVhY2ggYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9kYW1vbi9jb3JlLmNgLCB3aGljaCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpcyB0aGUgaGVhcnQgb2YgREFNT04g4oCTIERhdGEgQWNjZXNzIE1vbml0b3JpbmcuIFRoYXQncyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50LiBUaGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgaXMgdGhpcyBzb21ldGhpbmcgSSBjYW4gZXZlbiBpbnRlcmFjdCB3aXRoIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VP1xuXG5BaCwgcmlnaHQsIHllcyEgREFNT04gaXMgbWFuYWdlYWJsZSB0aHJvdWdoIHN5c2ZzLCB3aGljaCBpcyBncmVhdC4gSSBjYW4gY29udHJvbCBpdCB1c2luZyBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4vYC4gIEkgdGhpbmsgdGhhdCBhbHNvIGRlcGVuZHMgb24gdGhvc2Ugc3lzZnMgY29uZmlnIG9wdGlvbnMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlcXVpcmVkLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHdvdWxkIGJlIGBDT05GSUdfREFNT05gLCBhbmQsIG9mIGNvdXJzZSwgYENPTkZJR19EQU1PTl9TWVNGU2AgZm9yIHRoZSBzeXNmcyBpbnRlcmZhY2UuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSBpZiBgQ09ORklHX0RBTU9OX1BBRERSYCBvciBgQ09ORklHX0RBTU9OX1ZBRERSYCBhcmUgc2V0LiBUaG9zZSBsb29rIGxpa2UgdGhleSdyZSByZWxhdGVkIHRvIG1vbml0b3Jpbmcgb3BlcmF0aW9ucywgdGFyZ2V0cywgYW5kIHNwZWNpZmljYWxseSB0aGUgYG9wcy50YXJnZXRfdmFsaWRgIGZ1bmN0aW9uLlxuXG5JJ2QgYmV0dGVyIHRyYWNrIGRvd24gd2hlcmUgYG9wcy50YXJnZXRfdmFsaWRgIGlzIGRlZmluZWQgYW5kIHVzZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhhdCBmdW5jdGlvbiBpcyBrZXkgdG8gYXNzZXNzaW5nIHRoZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYwNSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDoyMy44MTk3MDIwMDVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzg4MDEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0YXJnZXRfdmFsaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTMyODY9c3RhdGljIHZvaWQgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjkzLVxcdFxcdHJldHVybjtcXG5tbS9kYW1vbi9jb3JlLmM6MzI5NDpcXHRpZiAoIWMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQpXFxubW0vZGFtb24vY29yZS5jLTMyOTUtXFx0XFx0cmV0dXJuO1xcbm1tL2RhbW9uL2NvcmUuYzozMjk2OlxcdGlmIChjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpKVxcbm1tL2RhbW9uL2NvcmUuYy0zMjk3LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzg1PXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0MDktXFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MzQxMDpcXHRcXHRpZiAoYy1cXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcXHUwMDI2XFx1MDAyNiBjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKVxcbm1tL2RhbW9uL2NvcmUuYy0zNDExLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTM3MjA9c3RhdGljIGJvb2wga2RhbW9uZF9uZWVkX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3MjYtXFxubW0vZGFtb24vY29yZS5jOjM3Mjc6XFx0aWYgKCFjdHgtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQpXFxubW0vZGFtb24vY29yZS5jLTM3MjgtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3MzAtXFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkge1xcbm1tL2RhbW9uL2NvcmUuYzozNzMxOlxcdFxcdGlmIChjdHgtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkpXFxubW0vZGFtb24vY29yZS5jLTM3MzItXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz00Nzc9c3RhdGljIGludCBfX2luaXQgZGFtb25fcGFfaW5pdGNhbGwodm9pZClcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtNDg2LVxcdFxcdC5hcHBseV9wcm9iZXMgPSBkYW1vbl9wYV9hcHBseV9wcm9iZXMsXFxubW0vZGFtb24vcGFkZHIuYzo0ODc6XFx0XFx0LnRhcmdldF92YWxpZCA9IE5VTEwsXFxubW0vZGFtb24vcGFkZHIuYy00ODgtXFx0XFx0LmFwcGx5X3NjaGVtZSA9IGRhbW9uX3BhX2FwcGx5X3NjaGVtZSxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9NjI1PXN0YXRpYyBpbnQgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy02ODYtXFxubW0vZGFtb24vdmFkZHIuYzo2ODc6c3RhdGljIGJvb2wgZGFtb25fdmFfdGFyZ2V0X3ZhbGlkKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxubW0vZGFtb24vdmFkZHIuYy02ODgte1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYz05MzM9c3RhdGljIGludCBfX2luaXQgZGFtb25fdmFfaW5pdGNhbGwodm9pZClcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtOTQwLVxcdFxcdC5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzLFxcbm1tL2RhbW9uL3ZhZGRyLmM6OTQxOlxcdFxcdC50YXJnZXRfdmFsaWQgPSBkYW1vbl92YV90YXJnZXRfdmFsaWQsXFxubW0vZGFtb24vdmFkZHIuYy05NDItXFx0XFx0LmNsZWFudXBfdGFyZ2V0ID0gZGFtb25fdmFfY2xlYW51cF90YXJnZXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjU0OjIzLjkzMzU4NzE2NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjk5NzQ0NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIFZpcnR1YWwgQWRkcmVzcyBNb25pdG9yaW5nOiBBIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgc28gYGRhbW9uX3ZhX3RhcmdldF92YWxpZGAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlOyBpdCdzIHRoZSBnYXRla2VlcGVyIHRoYXQgZGV0ZXJtaW5lcyBpZiBhIG1vbml0b3JlZCBwcm9jZXNzIG9yIG1lbW9yeSByZWdpb24gaXMgc3RpbGwgbGVnaXRpbWF0ZSBpbiB0aGUgdmlydHVhbCBhZGRyZXNzIG1vbml0b3Jpbmcgc2V0dXAuIElmIGEgcHJvY2VzcyBleGl0cywgbmF0dXJhbGx5IHRoZSB0YXJnZXQgYmVjb21lcyBpbnZhbGlkLCByaWdodD8gVGhhdCdzIHdoZW4gYHRhcmdldF92YWxpZCh0KWAgZmxpcHMgdG8gZmFsc2UuICBBbmQgdGhhdCdzIHRoZSB0cmlnZ2VyIGZvciBgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oKWAgdG8gY2xlYW4gdXAgdGhlIGBxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb21gIGZpZWxkLiBNYWtlcyBzZW5zZS4gVGhpcyBjb2RlIGlzIGluIGBtbS9kYW1vbi9jb3JlLmNgLCBhbmQgdGhlIFwiV29ydGhGdXp6aW5nOiB0cnVlIVwiIGZsYWcgY2VydGFpbmx5IGNhdGNoZXMgbXkgYXR0ZW50aW9uLlxuXG5MZXQncyBzZWUgd2hhdCBlbHNlIGlzIGluIHBsYXkuIFRoZSBmb2N1cyBzeW1ib2xzIGxvb2sgbGlrZTpcblxuLSAgIGBkYW1vc19hZGp1c3RfcXVvdGFgXG4tICAgYGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tYFxuLSAgIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgXG4tICAgYGRhbW9uX3ZhX3RhcmdldF92YWxpZGBcblxuSSdtIGNoZWNraW5nIGlmIGBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbWAgYW5kIGBkYW1vc19hZGp1c3RfcXVvdGFgIGFyZSBzdGF0aWMsIGFuZCB5ZXAsIHRoZXkgYXJlLiBJbXBvcnRhbnQgZm9yIHNjb3BpbmcuIE5vdywgbGV0J3MgdHJhY2UgYGRhbW9zX2FkanVzdF9xdW90YWAuIExvb2tzIGxpa2UgaXQncyBjYWxsZWQgYnkgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AuIEFscmlnaHQsIGFuZCB0aGF0IG9uZSBpcyBjYWxsZWQgZnJvbSBga2RhbW9uZF9mbmAgLyBgZGFtb25fZm9yX2VhY2hfc2NoZW1lYCBpbiB0aGUgc2FtZSBjb3JlIGZpbGUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkzMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDoyNy42MzMzMzM4ODRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NTgwMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtkYW1vbmRfYXBwbHlfc2NoZW1lc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MzM2OT1zdGF0aWMgdm9pZCBkYW1vc190cmFjZV9zdGF0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzg0LVxcbm1tL2RhbW9uL2NvcmUuYzozMzg1OnN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbm1tL2RhbW9uL2NvcmUuYy0zMzg2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zOTExPXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5ODctXFx0XFx0LypcXG5tbS9kYW1vbi9jb3JlLmM6Mzk4ODpcXHRcXHQgKiBkbyBrZGFtb25kX2NhbGwoKSBhbmQga2RhbW9uZF9hcHBseV9zY2hlbWVzKCkgYWZ0ZXJcXG5tbS9kYW1vbi9jb3JlLmMtMzk4OS1cXHRcXHQgKiBrZGFtb25kX21lcmdlX3JlZ2lvbnMoKSBpZiBwb3NzaWJsZSwgdG8gcmVkdWNlIG92ZXJoZWFkXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDAwMi1cXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmN0eC1cXHUwMDNlc2NoZW1lcykpXFxubW0vZGFtb24vY29yZS5jOjQwMDM6XFx0XFx0XFx0a2RhbW9uZF9hcHBseV9zY2hlbWVzKGN0eCk7XFxubW0vZGFtb24vY29yZS5jLTQwMDQtXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDoyNy42OTI5MjA3ODJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA5NTAzODA2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gREFNT04gQ29udGV4dCBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgREFNT04gY29udGV4dHMgYXJlIGluaXRpYXRlZCBhbmQgZmluYWxpemVkLiBJJ20gZ29pbmcgdG8gZGlnIGludG8gYGtkYW1vbmRfZm5gIGZpcnN0LCBhcyB0aGF0IHNlZW1zIGxpa2UgdGhlIHByaW1hcnkgZnVuY3Rpb24gZm9yIHRoZSBrZXJuZWwtbGV2ZWwgZGFlbW9uIG9wZXJhdGlvbnMuIEknbSBpbnRlcmVzdGVkIGluIGhvdyBpdCBraWNrcyB0aGluZ3Mgb2ZmLiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc3lzZnMgaW50ZXJmYWNlLiBJIGtub3cgdGhhdCdzIHRoZSB1c2VyLXNwYWNlIGVudHJ5IHBvaW50LCBidXQgaG93IGRvZXMgaXQgbWFwIHRvIHRoZSBpbnRlcm5hbCBvcGVyYXRpb25zPyBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIHN5bWJvbHMgcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IHN0YXJ0aW5nIGEgbmV3IGNvbnRleHQgYW5kIGNvbW1pdHRpbmcgb3IgZmluYWxpemluZyBhbiBleGlzdGluZyBvbmUuIElkZW50aWZ5aW5nIHRob3NlIGhvb2tzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYW5kIG1ha2luZyBhbnkgbmVjZXNzYXJ5IGFkanVzdG1lbnRzIHRvIGVuc3VyZSBwZXJmb3JtYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MDEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDoyOS43ODc5NjE3MDNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MTM4NTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX2NvbW1pdF90YXJnZXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xNjgwPXN0YXRpYyB2b2lkIGRhbW9uX3JldmVydF90YXJnZXRfY29tbWl0cyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTY5NS1cXG5tbS9kYW1vbi9jb3JlLmM6MTY5NjpzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRzKFxcbm1tL2RhbW9uL2NvcmUuYy0xNjk3LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTE4Nzk9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTkwNy1cXHRcXHRyZXR1cm4gZXJyO1xcbm1tL2RhbW9uL2NvcmUuYzoxOTA4OlxcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXRzKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTkwOS1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDoyOS44NTMxMDYwMjZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk3MDUxNDQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgREFNT04gU3lzdGVtIEZpbGUgQ29tbWl0KipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMuIEknbSB0aGlua2luZyB0aGUgbGlrZWx5IGFyZWEgZm9yIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5IGlzIGdvaW5nIHRvIGJlIGluIGBtbS9kYW1vbi9zeXNmcy5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gcHJldHR5IGNlcnRhaW4gdGhlcmUgd2lsbCBiZSBhIHJvdXRpbmUsIGxpa2VseSBuYW1lZCBzb21ldGhpbmcgbGlrZSBgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0YCBvciBhIGZ1bmN0aW9uIHdpdGggYSBzaW1pbGFyIG5hbWluZyBjb252ZW50aW9uLCByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgaW5wdXQgb3IgY29tbWFuZHMgdGllZCB0byB0aGUgc3lzZnMgaW50ZXJmYWNlLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIExldCdzIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM2MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjU0OjMxLjgyMzYzMjE3N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEzMDM4NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTEwODM9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTA4LSAqIEluIGRldGFpbCwgYWxsIERBTU9OIEFQSSBjYWxsZXJzIGRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiBmb3IgaW5pdGlhbFxcbm1tL2RhbW9uL2NvcmUuYzoxMTA5OiAqIHNldHVwIG9mIGRhbW9uX2N0eCBiZWZvcmUgY2FsbGluZyBkYW1vbl9zdGFydCgpLiAgU29tZSBvZiB0aGUgQVBJIGNhbGxlcnNcXG5tbS9kYW1vbi9jb3JlLmMtMTExMC0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVxcdTAwM2UgZGFtb25fY29tbWl0KCkgZm9yXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjAzOT1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA0MS0vKlxcbm1tL2RhbW9uL2NvcmUuYzoyMDQyOiAqIF9fZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyBtb25pdG9yaW5nIHdpdGggZ2l2ZW4gY29udGV4dC5cXG5tbS9kYW1vbi9jb3JlLmMtMjA0My0gKiBAY3R4OlxcdG1vbml0b3JpbmcgY29udGV4dFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwNDgtICovXFxubW0vZGFtb24vY29yZS5jOjIwNDk6c3RhdGljIGludCBfX2RhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtMjA1MC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA3MS0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MjA3MjogKiBkYW1vbl9zdGFydCgpIC0gU3RhcnRzIHRoZSBtb25pdG9yaW5ncyBmb3IgYSBnaXZlbiBncm91cCBvZiBjb250ZXh0cy5cXG5tbS9kYW1vbi9jb3JlLmMtMjA3My0gKiBAY3R4czpcXHRhbiBhcnJheSBvZiB0aGUgcG9pbnRlcnMgZm9yIGNvbnRleHRzIHRvIHN0YXJ0IG1vbml0b3JpbmdcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDgwLSAqIEBleGNsdXNpdmUgaXMgdHJ1ZSBhbmQgYSBncm91cCBvZiB0aHJlYWRzIHRoYXQgY3JlYXRlZCBieSBvdGhlclxcbm1tL2RhbW9uL2NvcmUuYzoyMDgxOiAqICdkYW1vbl9zdGFydCgpJyBjYWxsIGlzIGN1cnJlbnRseSBydW5uaW5nLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBidXRcXG5tbS9kYW1vbi9jb3JlLmMtMjA4Mi0gKiByZXR1cm5zIC1FQlVTWS5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDg1LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMDg2OmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxcbm1tL2RhbW9uL2NvcmUuYy0yMDg3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTExLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9jdHhzOyBpKyspIHtcXG5tbS9kYW1vbi9jb3JlLmM6MjExMjpcXHRcXHRlcnIgPSBfX2RhbW9uX3N0YXJ0KGN0eHNbaV0pO1xcbm1tL2RhbW9uL2NvcmUuYy0yMTEzLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjIxND1pbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjI2Mi0gKlxcbm1tL2RhbW9uL2NvcmUuYzoyMjYzOiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBkYW1vbl9zdGFydCgpIHdpdGggdGhlXFxubW0vZGFtb24vY29yZS5jLTIyNjQtICogQGN0eCBoYXMgc3VjY2VlZGVkLiAgT3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIGNvdWxkIGZhbGwgaW50byBhbiBpbmRlZmluaXRlXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTQwMT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbilcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDEzLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDE0OlxcdGVyciA9IGRhbW9uX3N0YXJ0KFxcdTAwMjZjdHgsIDEsIHRydWUpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDE1LVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MzI0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMzM2LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzozMzc6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTMzOC1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jPTIwMD1zdGF0aWMgaW50IGRhbW9uX3N0YXRfc3RhcnQodm9pZClcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYy0yMTItXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vc3RhdC5jOjIxMzpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2ZGFtb25fc3RhdF9jb250ZXh0LCAxLCB0cnVlKTtcXG5tbS9kYW1vbi9zdGF0LmMtMjE0LVxcdGlmIChlcnIpIHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjUxMT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI1MzUtXFx0fVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjUzNjpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCBmYWxzZSk7XFxubW0vZGFtb24vc3lzZnMuYy0yNTM3LVxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6NTQ6MzEuOTA0OTQ1NTc1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxMDQzOTc4NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2xzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGUgY29yZSBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UuIEkgc2VlIGBEQU1PTmAgYXMgdGhlIGZvdW5kYXRpb25hbCBjb25maWcsIG9idmlvdXNseSBlc3NlbnRpYWwuIFRoZW4sIGBEQU1PTl9WQUREUmAsIHdoaWNoIGlzIGV4cGxpY2l0bHkgdGllZCB0byB2aXJ0dWFsIGFkZHJlc3MgbW9uaXRvcmluZyB2aWEgYGRhbW9uX3ZhX3RhcmdldF92YWxpZGAg4oCTIHRoYXQncyBjcml0aWNhbC4gQW5kIGZpbmFsbHksIGBEQU1PTl9TWVNGU2AgaW5kaWNhdGVzIGEgc3lzZnMgaW50ZXJmYWNlIGlzIGVuYWJsZWQsIHdoaWNoIGlzIGhlbHBmdWwgZm9yIGludGVyYWN0aW9ucy4gR29vZCwgdGhlIGZvdW5kYXRpb25hbCBlbGVtZW50cyBzZWVtIHRvIGJlIHByZXNlbnQuXG5cbk5vdywgdG8gdGhlIEZvY3VzU3ltYm9scy4gSSdtIHNlZWluZyBhIGxpc3QgaGVyZTogYGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tYCwgYGRhbW9zX2FkanVzdF9xdW90YWAsIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLCBhbmQgdGhhdCBgZGFtb25fdmFfdGFyZ2V0X3ZhbGlkYCBhZ2Fpbi4gVGhlc2UgYXJlIGxpa2VseSB0aGUga2V5IGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgd2UgbmVlZCB0byBzY3J1dGluaXplLCBhbmQgZnJvbSB0aGUgbmFtZXMsIHRoZXkgc3VnZ2VzdCBhcmVhcyByZWxhdGVkIHRvIHF1b3RhIGFkanVzdG1lbnRzIGFuZCBpbnZhbGlkIGNoYXJnZSB0YXJnZXQgcmVzZXRzIHdpdGhpbiBEQU1PTiwgYXMgd2VsbCBhcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHNjaGVtZXMgdGhhdCBEQU1PTiB1c2VzLCBhbmQgdGhhdCBjcml0aWNhbCB2YWxpZGF0aW9uLlxuXG5BbHJpZ2h0LCBsZXQncyBjcm9zcy1yZWZlcmVuY2UgdGhpcyBpbmZvcm1hdGlvbiB3aXRoIHRoZSBpbnN0cnVjdGlvbnMuIGBXb3J0aEZ1enppbmdgIGJlaW5nIHRydWUgaXMgYSBncmVlbiBsaWdodCwgaW1wbHlpbmcgdGhhdCB0aGUgY29kZSB3aXRoaW4gbW0vZGFtb24gaXMgcmVhY2hhYmxlIGZvciBmdXp6aW5nIHdoaWNoIGlzIGdyZWF0LiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QsIFtcIkRBTU9OXCIsIFwiREFNT05fVkFERFJcIiwgXCJEQU1PTl9TWVNGU1wiXSwgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LiBUaGUgYEZvY3VzU3ltYm9sc2AgbGlzdCwgW1wiZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb21cIiwgXCJkYW1vc19hZGp1c3RfcXVvdGFcIiwgXCJrZGFtb25kX2FwcGx5X3NjaGVtZXNcIiwgXCJkYW1vbl92YV90YXJnZXRfdmFsaWRcIl0sIGFnYWluIGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtleSBhcmVhcyBvZiBpbnRlcmVzdC4gVGhlIFwiQ29uY2lzZSBleHBsYW5hdGlvblwiIHJlYXNvbmluZyBpcyBzb2xpZCBhbmQgY29uZmlybXMgbXkgYXNzdW1wdGlvbnMuXG5cbk9rYXksIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gTGV0J3MgbW92ZSBvbiB0byB0aGUgbmV4dCBzdGVwIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzMxLCJPdXRwdXRUb2tlbnMiOjE2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDozNi4wMDkzNDY1NjZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzczMTUyODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fU1lTRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbVwiLFxuICAgIFwiZGFtb3NfYWRqdXN0X3F1b3RhXCIsXG4gICAgXCJrZGFtb25kX2FwcGx5X3NjaGVtZXNcIixcbiAgICBcImRhbW9uX3ZhX3RhcmdldF92YWxpZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PTiBjb3JlIHN1YnN5c3RlbSBpbiBtbS9kYW1vbi9jb3JlLmMsIGFkZGluZyBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbSgpIGFuZCBjYWxsaW5nIGl0IGZyb20gZGFtb3NfYWRqdXN0X3F1b3RhKCkgdG8gaW52YWxpZGF0ZSBzdGFsZSBjaGFyZ2UgdGFyZ2V0IHBvaW50ZXJzIHdoZW4gdGFyZ2V0X3ZhbGlkKCkgcmV0dXJucyBmYWxzZS4gVGhpcyBpcyBleGVjdXRhYmxlLCByZWFjaGFibGUga2VybmVsIGNvZGUgYWNjZXNzaWJsZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb21cIixcbiAgICBcImRhbW9zX2FkanVzdF9xdW90YVwiLFxuICAgIFwia2RhbW9uZF9hcHBseV9zY2hlbWVzXCIsXG4gICAgXCJkYW1vbl92YV90YXJnZXRfdmFsaWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT04gY29yZSBzdWJzeXN0ZW0gaW4gbW0vZGFtb24vY29yZS5jLCBhZGRpbmcgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oKSBhbmQgY2FsbGluZyBpdCBmcm9tIGRhbW9zX2FkanVzdF9xdW90YSgpIHRvIGludmFsaWRhdGUgc3RhbGUgY2hhcmdlIHRhcmdldCBwb2ludGVycyB3aGVuIHRhcmdldF92YWxpZCgpIHJldHVybnMgZmFsc2UuIFRoaXMgaXMgZXhlY3V0YWJsZSwgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIGFjY2Vzc2libGUgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjU0OjM2LjE0NjY2OTIxOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2NjM0NDQzODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDozNi4xNDcyMDk1NDlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNjY2Mjg5NzIzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbSgpIGluIG1tL2RhbW9uL2NvcmUuYyB0byByZXNldCBxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tIHRvIE5VTEwgYW5kIHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIHRvIDAgd2hlbiBjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpIGluZGljYXRlcyB0aGUgdGFyZ2V0IGlzIG5vIGxvbmdlciB2YWxpZC5cXG5cXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBpbnRlcm5hbCBEQU1PUyBxdW90YSB0cmFja2luZyBsb2dpYyB0byBoYW5kbGUgaW52YWxpZCB0YXJnZXQgcG9pbnRlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcyBvciBwYWRkaW5nLCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gZGFuZ2xpbmcvc3RhbGUgdGFyZ2V0IHBvaW50ZXIgZGVyZWZlcmVuY2VzIHdvdWxkIGJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOL1VBRiBkZXRlY3RvcnMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWNjZGNkNzU1MzM5NzI3ZTQ2MDZkNTllOTMxYzI4YjNkODU5MTBhOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMjA6NTQ6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IGNlOGM2Zjk5MTA2ZWQuLjJjNThiZTllZGJkZTQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTMyODMsNiArMzI4MywyMiBAQCBzdGF0aWMgdm9pZCBkYW1vc190cmFjZV9lc3ooc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzLFxuIFx0dHJhY2VfZGFtb3NfZXN6KGNpZHgsIHNpZHgsIHF1b3RhLVx1MDAzZWVzeik7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG4rXHRcdHN0cnVjdCBkYW1vbl9jdHggKmMpXG4re1xuK1x0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbitcbitcdHQgPSBxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb207XG4rXHRpZiAoIXQpXG4rXHRcdHJldHVybjtcbitcdGlmICghYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAoYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpKVxuK1x0XHRyZXR1cm47XG4rXHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xuK1x0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4ge1xuIFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG5AQCAtMzMxOCw2ICszMzM0LDggQEAgc3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbiBcdFx0XHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xuIFx0fVxuIFxuK1x0ZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20ocXVvdGEsIGMpO1xuK1xuIFx0aWYgKCFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxuIFx0XHRyZXR1cm47XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDozNi4xNDcyMTA0NzlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc5Mjc3MDQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIENvcmUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBUaGlzIHBhdGNoIGxvb2tzIGludGVyZXN0aW5nOyBpdCdzIHRvdWNoaW5nIGBtbS9kYW1vbi9jb3JlLmNgLCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGZ1bmRhbWVudGFsIERBTU9OIGJlaGF2aW9yLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBnZXQgYSBzZW5zZSBvZiB0aGUgY29udGV4dCBhcm91bmQgdGhlIGNoYW5nZS4gVGltZSB0byBlaXRoZXIgbGV2ZXJhZ2UgYGdyZXBwZXJgIHRvIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UsIG9yIGlmIEkgd2FudCB0byBiZSBtb3JlIGZvY3VzZWQsIEknbGwgZ28gd2l0aCBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIGFyb3VuZCBsaW5lIDMyODMgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEdldCB0aGUgZGV0YWlscyBmaXJzdCwgdGhlbiBkZWNpZGUgb24gdGhlIHJpZ2h0IGFwcHJvYWNoLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjU0OjQxLjkzOTk4MzA4OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjIyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyNzAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMyNzA6XFx0fVxcbjMyNzE6XFx0XFxuMzI3MjpcXHRzdGF0aWMgdm9pZCBkYW1vc190cmFjZV9lc3ooc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzLFxcbjMyNzM6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG4zMjc0OlxcdHtcXG4zMjc1OlxcdFxcdHVuc2lnbmVkIGludCBjaWR4ID0gMCwgc2lkeCA9IDA7XFxuMzI3NjpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnNpdGVyO1xcbjMyNzc6XFx0XFxuMzI3ODpcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2l0ZXIsIGMpIHtcXG4zMjc5OlxcdFxcdFxcdGlmIChzaXRlciA9PSBzKVxcbjMyODA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzI4MTpcXHRcXHRcXHRzaWR4Kys7XFxuMzI4MjpcXHRcXHR9XFxuMzI4MzpcXHRcXHR0cmFjZV9kYW1vc19lc3ooY2lkeCwgc2lkeCwgcXVvdGEtXFx1MDAzZWVzeik7XFxuMzI4NDpcXHR9XFxuMzI4NTpcXHRcXG4zMjg2OlxcdHN0YXRpYyB2b2lkIGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXFxuMzI4NzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbjMyODg6XFx0e1xcbjMyODk6XFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcXG4zMjkwOlxcdFxcbjMyOTE6XFx0XFx0dCA9IHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb207XFxuMzI5MjpcXHRcXHRpZiAoIXQpXFxuMzI5MzpcXHRcXHRcXHRyZXR1cm47XFxuMzI5NDpcXHRcXHRpZiAoIWMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQpXFxuMzI5NTpcXHRcXHRcXHRyZXR1cm47XFxuMzI5NjpcXHRcXHRpZiAoYy1cXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSlcXG4zMjk3OlxcdFxcdFxcdHJldHVybjtcXG4zMjk4OlxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbjMyOTk6XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSAwO1xcbjMzMDA6XFx0fVxcbjMzMDE6XFx0XFxuMzMwMjpcXHRzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbjMzMDM6XFx0e1xcbjMzMDQ6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG4zMzA1OlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuMzMwNjpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xcbjMzMDc6XFx0XFx0dW5zaWduZWQgbG9uZyBjdW11bGF0ZWRfc3osIGNhY2hlZF9lc3o7XFxuMzMwODpcXHRcXHR1bnNpZ25lZCBpbnQgc2NvcmUsIG1heF9zY29yZSA9IDA7XFxuMzMwOTpcXHRcXG4zMzEwOlxcdFxcdGlmICghcXVvdGEtXFx1MDAzZW1zIFxcdTAwMjZcXHUwMDI2ICFxdW90YS1cXHUwMDNlc3ogXFx1MDAyNlxcdTAwMjYgbGlzdF9lbXB0eShcXHUwMDI2cXVvdGEtXFx1MDAzZWdvYWxzKSlcXG4zMzExOlxcdFxcdFxcdHJldHVybjtcXG4zMzEyOlxcdFxcbjMzMTM6XFx0XFx0LyogRmlyc3QgY2hhcmdlIHdpbmRvdyAqL1xcbjMzMTQ6XFx0XFx0aWYgKCFxdW90YS1cXHUwMDNldG90YWxfY2hhcmdlZF9zeiBcXHUwMDI2XFx1MDAyNiAhcXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSkge1xcbjMzMTU6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XFxuMzMxNjpcXHRcXHRcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbjMzMTc6XFx0XFx0XFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkpXFxuMzMxODpcXHRcXHRcXHRcXHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xcbjMzMTk6XFx0XFx0fVxcbjMzMjA6XFx0XFxuMzMyMTpcXHRcXHQvKiBOZXcgY2hhcmdlIHdpbmRvdyBzdGFydHMgKi9cXG4zMzIyOlxcdFxcdGlmICghdGltZV9pbl9yYW5nZV9vcGVuKGppZmZpZXMsIHF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20sXFxuMzMyMzpcXHRcXHRcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tICtcXG4zMzI0OlxcdFxcdFxcdFxcdFxcdG1zZWNzX3RvX2ppZmZpZXMocXVvdGEtXFx1MDAzZXJlc2V0X2ludGVydmFsKSkpIHtcXG4zMzI1OlxcdFxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG4zMzI2OlxcdFxcdFxcdFxcdHMtXFx1MDAzZXN0YXQucXRfZXhjZWVkcysrO1xcbjMzMjc6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogKz0gcXVvdGEtXFx1MDAzZWNoYXJnZWRfc3o7XFxuMzMyODpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcXG4zMzI5OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6ID0gMDtcXG4zMzMwOlxcdFxcdFxcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxcbjMzMzE6XFx0XFx0XFx0XFx0Y2FjaGVkX2VzeiA9IHF1b3RhLVxcdTAwM2Vlc3o7XFxuMzMzMjpcXHRcXHRcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbjMzMzM6XFx0XFx0XFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgcXVvdGEtXFx1MDAzZWVzeiAhPSBjYWNoZWRfZXN6KVxcbjMzMzQ6XFx0XFx0XFx0XFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcXG4zMzM1OlxcdFxcdH1cXG4zMzM2OlxcdFxcbjMzMzc6XFx0XFx0ZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20ocXVvdGEsIGMpO1xcbjMzMzg6XFx0XFxuMzMzOTpcXHRcXHRpZiAoIWMtXFx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxcbjMzNDA6XFx0XFx0XFx0cmV0dXJuO1xcbjMzNDE6XFx0XFxuMzM0MjpcXHRcXHQvKiBGaWxsIHVwIHRoZSBzY29yZSBoaXN0b2dyYW0gKi9cXG4zMzQzOlxcdFxcdG1lbXNldChjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSwgMCxcXG4zMzQ0OlxcdFxcdFxcdFxcdHNpemVvZigqYy1cXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0pICpcXG4zMzQ1OlxcdFxcdFxcdFxcdChEQU1PU19NQVhfU0NPUkUgKyAxKSk7XFxuMzM0NjpcXHRcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xcbjMzNDc6XFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcXG4zMzQ4OlxcdFxcdFxcdFxcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYykpXFxuMzM0OTpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6NTQ6NDEuOTQwMjQ3MzA4WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3ODU1NjU1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIERBTU9OJ3MgQ2hhcmdlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBjaGFyZ2VfdGFyZ2V0X2Zyb21gIGFuZCBgY2hhcmdlX2FkZHJfZnJvbWAgd2l0aGluIERBTU9OLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBjb2RlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBncmVwIG9yIHVzZSBteSBJREUncyBcImZpbmQgdXNhZ2VzXCIgZnVuY3Rpb25hbGl0eSB0byBwaW5wb2ludCBldmVyeSBpbnN0YW5jZSB3aGVyZSB0aGVzZSB0d28gZnVuY3Rpb25zIGFyZSBjYWxsZWQuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGNvbnRleHRzLiBBcmUgdGhleSB1c2VkIHRvZ2V0aGVyPyBEb2VzIG9uZSBjYWxsIHRoZSBvdGhlcj8gV2hhdCBhcmUgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIGRvaW5nIHdpdGggdGhlIGRhdGE/XG5cbkknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGNoYXJnaW5nIG1lY2hhbmlzbSdzIGRlc2lnbi4gVGhpcyB3aWxsIHJldmVhbCBob3cgREFNT04gZGV0ZXJtaW5lcyB3aGF0IG1lbW9yeSByZWdpb25zIHRvIGNoYXJnZSBhbmQgZnJvbSB3aGF0IGFkZHJlc3Mgd2l0aGluIHRob3NlIHJlZ2lvbnMuIEFyZSB0aGVzZSBmdW5jdGlvbnMgY29yZSB0byB0aGUgbW9uaXRvcmluZyBhbmQgc2FtcGxpbmcgbG9naWM/IEFyZSB0aGV5IHJlbGF0ZWQgdG8gYW55IHNwZWNpZmljIERBTU9OIGZlYXR1cmVzLCBsaWtlIGFkYXB0aXZlIHNhbXBsaW5nIG9yIGR5bmFtaWMgdGhyZXNob2xkaW5nP1xuXG5JJ20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB3aXRoaW4gdGhlIGNvcmUgbW9uaXRvcmluZyBsb29wcywgcG90ZW50aWFsbHkgaW5zaWRlIHRoZSBkYXRhIHNhbXBsaW5nIG9yIHByb2Nlc3NpbmcgZnVuY3Rpb25zLiBUaGUgYHRhcmdldGAgbGlrZWx5IHJlZmVycyB0byBhIG1lbW9yeSByZWdpb24gdGhlIERBTU9OIHdhbnRzIHRvIHRyYWNrIChhIFwidGFyZ2V0XCIgdG8gYmUgbW9uaXRvcmVkIG9yIGNoYXJnZWQpLiBUaGUgYGFkZHJgIHBvcnRpb24gc2VlbXMgdG8gYmUgdGhlIGxvZ2ljYWwgYWRkcmVzcyB3aXRoaW4gdGhhdCByZWdpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBpcyBwYXNzZWQgYXJvdW5kLiBJJ20gYWxzbyBpbnRlcmVzdGVkIGluIGhvdyB0aGVzZSBhcmUgaW5pdGlhbGl6ZWQgYW5kIHNldCB1cC4gQW55IGludGVyYWN0aW9uIHdpdGggdGhlIGBkYW1vbl9jb250ZXh0YCB3aWxsIGJlIGltcG9ydGFudC4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBkYXRhLXJhY2UgY29uY2VybnMgYXJvdW5kIHRoYXQgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc3NiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6NTQ6NDQuNzI1ODE3NTM2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDExMDkyMjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoYXJnZV90YXJnZXRfZnJvbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9Mjc2PXN0cnVjdCBkYW1vc19xdW90YSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMzAwLVxcdHVuc2lnbmVkIGxvbmcgY2hhcmdlZF9mcm9tO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDozMDE6XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqY2hhcmdlX3RhcmdldF9mcm9tO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0zMDItXFx0dW5zaWduZWQgbG9uZyBjaGFyZ2VfYWRkcl9mcm9tO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTczMj1zdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhICpkYW1vc19xdW90YV9pbml0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzM4LVxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20gPSAwO1xcbm1tL2RhbW9uL2NvcmUuYzo3Mzk6XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XFxubW0vZGFtb24vY29yZS5jLTc0MC1cXHRxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTY5Nj1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRzKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE3MjItXFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGRzdCkge1xcbm1tL2RhbW9uL2NvcmUuYzoxNzIzOlxcdFxcdFxcdFxcdGlmIChzLVxcdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPT0gZHN0X3RhcmdldCkge1xcbm1tL2RhbW9uL2NvcmUuYzoxNzI0OlxcdFxcdFxcdFxcdFxcdHMtXFx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XFxubW0vZGFtb24vY29yZS5jLTE3MjUtXFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjQ0OT1zdGF0aWMgYm9vbCBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjQ1Ni1cXHQvKiBTa2lwIHByZXZpb3VzbHkgY2hhcmdlZCByZWdpb25zICovXFxubW0vZGFtb24vY29yZS5jOjI0NTc6XFx0aWYgKHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20pIHtcXG5tbS9kYW1vbi9jb3JlLmM6MjQ1ODpcXHRcXHRpZiAodCAhPSBxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKVxcbm1tL2RhbW9uL2NvcmUuYy0yNDU5LVxcdFxcdFxcdHJldHVybiB0cnVlO1xcbm1tL2RhbW9uL2NvcmUuYy0yNDYwLVxcdFxcdGlmIChyID09IGRhbW9uX2xhc3RfcmVnaW9uKHQpKSB7XFxubW0vZGFtb24vY29yZS5jOjI0NjE6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XFxubW0vZGFtb24vY29yZS5jLTI0NjItXFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSAwO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0ODAtXFx0XFx0fVxcbm1tL2RhbW9uL2NvcmUuYzoyNDgxOlxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbm1tL2RhbW9uL2NvcmUuYy0yNDgyLVxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNjgyPXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3NDEtXFx0XFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXFx1MDAzZW1pbl9yZWdpb25fc3opKSB7XFxubW0vZGFtb24vY29yZS5jOjI3NDI6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IHQ7XFxubW0vZGFtb24vY29yZS5jLTI3NDMtXFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSByLVxcdTAwM2Vhci5lbmQ7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzI3Mj1zdGF0aWMgdm9pZCBkYW1vc190cmFjZV9lc3ooc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyODUtXFxubW0vZGFtb24vY29yZS5jOjMyODY6c3RhdGljIHZvaWQgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG5tbS9kYW1vbi9jb3JlLmMtMzI4Ny1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyOTAtXFxubW0vZGFtb24vY29yZS5jOjMyOTE6XFx0dCA9IHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb207XFxubW0vZGFtb24vY29yZS5jLTMyOTItXFx0aWYgKCF0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyOTctXFx0XFx0cmV0dXJuO1xcbm1tL2RhbW9uL2NvcmUuYzozMjk4OlxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjk5LVxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzAyPXN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzMzNi1cXG5tbS9kYW1vbi9jb3JlLmM6MzMzNzpcXHRkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbShxdW90YSwgYyk7XFxubW0vZGFtb24vY29yZS5jLTMzMzgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjU0OjQ3LjEzNjkxNTMxMloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjczMTYxMjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IEtNU0FOIEFwcGxpY2FiaWxpdHkgLSBEQU1PUyBRdW90YSBNYW5hZ2VtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiBpcyB0aGlzIGBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbWAgZnVuY3Rpb24sIHdoaWNoIGlzIHJlc2V0dGluZyBgcXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tYCB0byBOVUxMIGFuZCBgcXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbWAgdG8gMCBiYXNlZCBvbiB0aGUgYGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KWAgY2hlY2ssIHBvdGVudGlhbGx5IGludHJvZHVjaW5nIGEgS01TQU4gaXNzdWU/IEl0J3MgaGFuZGxpbmcgaW52YWxpZCB0YXJnZXQgdHJhY2tpbmcgd2l0aGluIERBTU9TIHF1b3RhcywgY2xlYW5pbmcgdXAgYWZ0ZXIgYSB0YXJnZXQgYmVjb21lcyBpbnZhbGlkLCB3aGljaCBpcyBnb29kLiBXZSBkZWZpbml0ZWx5IHdhbnQgdG8gYXZvaWQgc3RhbGUgcG9pbnRlcnMgb3IgbG9naWMgZXJyb3JzIGhlcmUuXG5cbkJ1dCwgSSd2ZSBjaGVja2VkIGNhcmVmdWxseTpcblxuKiAgIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbiBvciBtb2RpZmljYXRpb24gaXMgaGFwcGVuaW5nIGhlcmUuXG4qICAgV2UncmUgbm90IGludHJvZHVjaW5nIGFueSBgY29weV90b191c2VyYCBjYWxscyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UuXG4qICAgVGhlcmUncyBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIHN0YWNrL2hlYXAgdmFyaWFibGVzIGJlaW5nIGNyZWF0ZWQgb3IgdXNlZC4gRXZlcnl0aGluZyBiZWluZyBzZXQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTExgLCBgcXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDBgLlxuKiAgIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggc3RhbGUgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgVXNlLUFmdGVyLUZyZWUgc2NlbmFyaW9zIGhlcmUgd291bGQgYmUgcGlja2VkIHVwIGJ5IEtBU0FOLlxuXG5MZXQgbWUgZ28gdGhyb3VnaCB0aGUgY3JpdGVyaWEgYWdhaW4gdG8gYmUgYWJzb2x1dGVseSBzdXJlOlxuXG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOb3BlLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLlxuMy4gIEFsbG9jYXRpb24gb2YgY29tcGxleCBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG1pZ2h0IGJlIHJlYWQgbGF0ZXI/IE5vcGUuXG40LiAgQm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGE/IE5vcGUuXG5cblNvLCBJJ20gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIGlzIGZhbHNlLlxuXG5IZXJlJ3MgbXkgcmVhc29uaW5nIHdoZW4gY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTpcblxuKiAgIFRoaXMgcGF0Y2gncyBgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oKWAgZm9jdXNlcyBvbiB2YWxpZGF0aW5nIGFuZCByZXNldHRpbmcgZXhpc3RpbmcgcG9pbnRlcnMgdG8gYHN0cnVjdCBkYW1vbl90YXJnZXRgIGFuZCBpdHMgYXNzb2NpYXRlZCB0cmFja2luZyBzdGF0ZS5cbiogICBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCB1c2VyIHNwYWNlIHBhdGhzLCBvciB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzIGludHJvZHVjZWQgb3IgaW1wYWN0ZWQgYnkgdGhpcyBjaGFuZ2UuXG4qICAgQW55IGJ1Z3MgaW4gdGhpcyBzcGVjaWZpYyBzZWN0aW9uIHdvdWxkIG1vc3QgbGlrZWx5IGJlIHJlbGF0ZWQgdG8gc3RhbGUgcG9pbnRlciBhY2Nlc3Mgb3IgaXNzdWVzIGFyb3VuZCBsaWZldGltZXMgKHdoaWNoIEtBU0FOIGFscmVhZHkgZWZmZWN0aXZlbHkgY292ZXJzKSwgbm90IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS5cbiogICBUaGVyZWZvcmUsIHNwZWNpZmljIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkIGhlcmUuXG5cbkkgdGhpbmsgd2UncmUgZ29vZCB0byBnby4gTGV0J3MgaW52b2tlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNzksIk91dHB1dFRva2VucyI6MTg3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjU0OjUyLjgxMDA3OTUyNloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbSgpIGluIG1tL2RhbW9uL2NvcmUuYyB0byByZXNldCBxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tIHRvIE5VTEwgYW5kIHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIHRvIDAgd2hlbiBjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpIGluZGljYXRlcyB0aGUgdGFyZ2V0IGlzIG5vIGxvbmdlciB2YWxpZC5cXG5cXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBpbnRlcm5hbCBEQU1PUyBxdW90YSB0cmFja2luZyBsb2dpYyB0byBoYW5kbGUgaW52YWxpZCB0YXJnZXQgcG9pbnRlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcyBvciBwYWRkaW5nLCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gZGFuZ2xpbmcvc3RhbGUgdGFyZ2V0IHBvaW50ZXIgZGVyZWZlcmVuY2VzIHdvdWxkIGJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOL1VBRiBkZXRlY3RvcnMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbSgpIGluIG1tL2RhbW9uL2NvcmUuYyB0byByZXNldCBxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tIHRvIE5VTEwgYW5kIHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIHRvIDAgd2hlbiBjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpIGluZGljYXRlcyB0aGUgdGFyZ2V0IGlzIG5vIGxvbmdlciB2YWxpZC5cXG5cXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBpbnRlcm5hbCBEQU1PUyBxdW90YSB0cmFja2luZyBsb2dpYyB0byBoYW5kbGUgaW52YWxpZCB0YXJnZXQgcG9pbnRlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcyBvciBwYWRkaW5nLCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gZGFuZ2xpbmcvc3RhbGUgdGFyZ2V0IHBvaW50ZXIgZGVyZWZlcmVuY2VzIHdvdWxkIGJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOL1VBRiBkZXRlY3RvcnMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9rctk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 20:24:18 +0000 UTC FinishedAt: 2026-09-07 20:54:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_SYSFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_SYSFS" ], "series_id": "8b789686-03ce-45fa-8db3-bfe52d42ef7c" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damos_reset_invalid_charge_target_from", "damos_adjust_quota", "kdamond_apply_schemes", "damon_va_target_valid" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20mIzM0OywKICAgICYjMzQ7ZGFtb3NfYWRqdXN0X3F1b3RhJiMzNDssCiAgICAmIzM0O2tkYW1vbmRfYXBwbHlfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV90YXJnZXRfdmFsaWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKCkgaW4gbW0vZGFtb24vY29yZS5jIHRvIHJlc2V0IHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSB0byBOVUxMIGFuZCBxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIHRvIDAgd2hlbiBjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgaW5kaWNhdGVzIHRoZSB0YXJnZXQgaXMgbm8gbG9uZ2VyIHZhbGlkLlxuXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBpbnRlcm5hbCBEQU1PUyBxdW90YSB0cmFja2luZyBsb2dpYyB0byBoYW5kbGUgaW52YWxpZCB0YXJnZXQgcG9pbnRlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcyBvciBwYWRkaW5nLCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gZGFuZ2xpbmcvc3RhbGUgdGFyZ2V0IHBvaW50ZXIgZGVyZWZlcmVuY2VzIHdvdWxkIGJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOL1VBRiBkZXRlY3RvcnMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PTiBjb3JlIHN1YnN5c3RlbSBpbiBtbS9kYW1vbi9jb3JlLmMsIGFkZGluZyBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbSgpIGFuZCBjYWxsaW5nIGl0IGZyb20gZGFtb3NfYWRqdXN0X3F1b3RhKCkgdG8gaW52YWxpZGF0ZSBzdGFsZSBjaGFyZ2UgdGFyZ2V0IHBvaW50ZXJzIHdoZW4gdGFyZ2V0X3ZhbGlkKCkgcmV0dXJucyBmYWxzZS4gVGhpcyBpcyBleGVjdXRhYmxlLCByZWFjaGFibGUga2VybmVsIGNvZGUgYWNjZXNzaWJsZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDljY2RjZDc1NTMzOTcyN2U0NjA2ZDU5ZTkzMWMyOGIzZDg1OTEwYTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDIwOjU0OjAwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggY2U4YzZmOTkxMDZlZC4uMmM1OGJlOWVkYmRlNCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMzI4Myw2ICYjNDM7MzI4MywyMiBAQCBzdGF0aWMgdm9pZCBkYW1vc190cmFjZV9lc3ooc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzLFxuIFx0dHJhY2VfZGFtb3NfZXN6KGNpZHgsIHNpZHgsIHF1b3RhLVx1MDAzZWVzeik7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbShzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxuJiM0MztcdFx0c3RydWN0IGRhbW9uX2N0eCAqYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4mIzQzO1xuJiM0MztcdHQgPSBxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb207XG4mIzQzO1x0aWYgKCF0KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGlmICghYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGlmIChjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbiYjNDM7XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuIHtcbiBcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuQEAgLTMzMTgsNiAmIzQzOzMzMzQsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuIFx0XHRcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XG4gXHR9XG4gXG4mIzQzO1x0ZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20ocXVvdGEsIGMpO1xuJiM0MztcbiBcdGlmICghYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcbiBcdFx0cmV0dXJuO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20mIzM0OywKICAgICYjMzQ7ZGFtb3NfYWRqdXN0X3F1b3RhJiMzNDssCiAgICAmIzM0O2tkYW1vbmRfYXBwbHlfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vbl92YV90YXJnZXRfdmFsaWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERBTU9OIGNvcmUgc3Vic3lzdGVtIGluIG1tL2RhbW9uL2NvcmUuYywgYWRkaW5nIGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKCkgYW5kIGNhbGxpbmcgaXQgZnJvbSBkYW1vc19hZGp1c3RfcXVvdGEoKSB0byBpbnZhbGlkYXRlIHN0YWxlIGNoYXJnZSB0YXJnZXQgcG9pbnRlcnMgd2hlbiB0YXJnZXRfdmFsaWQoKSByZXR1cm5zIGZhbHNlLiBUaGlzIGlzIGV4ZWN1dGFibGUsIHJlYWNoYWJsZSBrZXJuZWwgY29kZSBhY2Nlc3NpYmxlIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWNjZGNkNzU1MzM5NzI3ZTQ2MDZkNTllOTMxYzI4YjNkODU5MTBhOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMjA6NTQ6MDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggY2U4YzZmOTkxMDZlZC4uMmM1OGJlOWVkYmRlNCAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtMzI4Myw2ICYjNDM7MzI4MywyMiBAQCBzdGF0aWMgdm9pZCBkYW1vc190cmFjZV9lc3ooc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzLAogCXRyYWNlX2RhbW9zX2VzeihjaWR4LCBzaWR4LCBxdW90YS0mZ3Q7ZXN6KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsCiYjNDM7CQlzdHJ1Y3QgZGFtb25fY3R4ICpjKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3RhcmdldCAqdDsKJiM0MzsKJiM0MzsJdCA9IHF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb207CiYjNDM7CWlmICghdCkKJiM0MzsJCXJldHVybjsKJiM0MzsJaWYgKCFjLSZndDtvcHMudGFyZ2V0X3ZhbGlkKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAoYy0mZ3Q7b3BzLnRhcmdldF92YWxpZCh0KSkKJiM0MzsJCXJldHVybjsKJiM0MzsJcXVvdGEtJmd0O2NoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7CiYjNDM7CXF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tID0gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKQogewogCXN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSAmYW1wO3MtJmd0O3F1b3RhOwpAQCAtMzMxOCw2ICYjNDM7MzMzNCw4IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpCiAJCQlkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpOwogCX0KIAomIzQzOwlkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbShxdW90YSwgYyk7CiYjNDM7CiAJaWYgKCFjLSZndDtvcHMuZ2V0X3NjaGVtZV9zY29yZSkKIAkJcmV0dXJuOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGlzIHBhdGNoLCBhcyBpdCB1bmZvbGRzIGluIG15IG1pbmQ6CgoqKkFuYWx5emluZyBhIERBTU9OIFBhdGNoOiBJbnZhbGlkIENoYXJnZSBUYXJnZXQgUmVzZXQqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIHNlZSB0aGUgbWFpbiBtb2RpZmljYXRpb24gaXMgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIFRoZSBrZXkgYWRkaXRpb24gc2VlbXMgdG8gYmUgdGhpcyBuZXcgZnVuY3Rpb24sIGBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbShzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLCBzdHJ1Y3QgZGFtb25fY3R4ICpjKWAuIFRoZSBuYW1pbmcgY29udmVudGlvbiBpcyBwcmV0dHkgY2xlYXIsIGl0IGluZGljYXRlcyBhbiBhZGp1c3RtZW50IHJlbGF0ZWQgdG8gcXVvdGEgY2hhcmdlcywgc3BlY2lmaWNhbGx5IHJlc2V0dGluZyBhbiAmIzM0O2ludmFsaWQmIzM0OyBjaGFyZ2UgdGFyZ2V0LiBBbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSB3aXRoaW4gYGRhbW9zX2FkanVzdF9xdW90YWAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZ2l2ZW4gdGhlIG5hbWluZy4KCk5vdywgSSBuZWVkIG1vcmUgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgcmVzZXQgaXMgbmVjZXNzYXJ5IGFuZCB3aGF0JiMzOTtzIGNvbnNpZGVyZWQgJiMzNDtpbnZhbGlkJiMzNDsgaW4gdGhpcyBzY2VuYXJpby4gVGltZSB0byBicmluZyBvdXQgdGhlIGJpZyBndW5zOiBJJiMzOTtsbCB1c2UgbXkgc3RhbmRhcmQgdG9vbHMsIHByb2JhYmx5IGByZWFkLWZpbGVgIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtbS9kYW1vbi9jb3JlLmNgIGFuZCBwb3RlbnRpYWxseSBvdGhlciByZWxldmFudCBmaWxlcywgb3IgaWYgdGhhdCBkb2VzbiYjMzk7dCB5aWVsZCByZXN1bHRzIHF1aWNrbHkgZW5vdWdoLCBJJiMzOTtsbCBzd2l0Y2ggdG8gYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgdXNhZ2VzIG9mIHRoZSB0ZXJtcyBvciBjb25jZXB0cyBhcm91bmQgdGhlIG5ldyBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgREFNT04mIzM5O3MgcXVvdGEgbWFuYWdlbWVudCBpcyBjcnVjaWFsLCBhcyBpcyBmaWd1cmluZyBvdXQgd2hhdCB0cmlnZ2VycyB0aGlzIGZ1bmN0aW9uLCBhbmQgd2hhdCAmIzM0O2ludmFsaWQmIzM0OyBwcmVjaXNlbHkgbWVhbnMgaW4gdGhpcyBEQU1PTiBjb250ZXh0LiBUaGlzIGlzIGFsbCBhYm91dCBnZXR0aW5nIHRoZSBicm9hZGVyIHBpY3R1cmUgdG8gZXZhbHVhdGUgdGhlIHNvdW5kbmVzcyBhbmQgdGhlIGRlc2lnbiBjaG9pY2Ugb2YgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzI4MDpcdFx0XHRcdGJyZWFrO1xuMzI4MTpcdFx0XHRzaWR4JiM0MzsmIzQzOztcbjMyODI6XHRcdH1cbjMyODM6XHRcdHRyYWNlX2RhbW9zX2VzeihjaWR4LCBzaWR4LCBxdW90YS1cdTAwM2Vlc3opO1xuMzI4NDpcdH1cbjMyODU6XHRcbjMyODY6XHRzdGF0aWMgdm9pZCBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbShzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxuMzI4NzpcdFx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuMzI4ODpcdHtcbjMyODk6XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4zMjkwOlx0XG4zMjkxOlx0XHR0ID0gcXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tO1xuMzI5MjpcdFx0aWYgKCF0KVxuMzI5MzpcdFx0XHRyZXR1cm47XG4zMjk0Olx0XHRpZiAoIWMtXHUwMDNlb3BzLnRhcmdldF92YWxpZClcbjMyOTU6XHRcdFx0cmV0dXJuO1xuMzI5NjpcdFx0aWYgKGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSlcbjMyOTc6XHRcdFx0cmV0dXJuO1xuMzI5ODpcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbjMyOTk6XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSAwO1xuMzMwMDpcdH1cbjMzMDE6XHRcbjMzMDI6XHRzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuMzMwMzpcdHtcbjMzMDQ6XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuMzMwNTpcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbjMzMDY6XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG4zMzA3Olx0XHR1bnNpZ25lZCBsb25nIGN1bXVsYXRlZF9zeiwgY2FjaGVkX2VzejtcbjMzMDg6XHRcdHVuc2lnbmVkIGludCBzY29yZSwgbWF4X3Njb3JlID0gMDtcbjMzMDk6XHRcbjMzMTA6XHRcdGlmICghcXVvdGEtXHUwMDNlbXMgXHUwMDI2XHUwMDI2ICFxdW90YS1cdTAwM2VzeiBcdTAwMjZcdTAwMjYgbGlzdF9lbXB0eShcdTAwMjZxdW90YS1cdTAwM2Vnb2FscykpXG4zMzExOlx0XHRcdHJldHVybjtcbjMzMTI6XHRcbjMzMTM6XHRcdC8qIEZpcnN0IGNoYXJnZSB3aW5kb3cgKi9cbjMzMTQ6XHRcdGlmICghcXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9zeiBcdTAwMjZcdTAwMjYgIXF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSkge1xuMzMxNTpcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VkX2Zyb20gPSBqaWZmaWVzO1xuMzMxNjpcdFx0XHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xuMzMxNzpcdFx0XHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSlcbjMzMTg6XHRcdFx0XHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xuMzMxOTpcdFx0fVxuMzMyMDpcdFxuMzMyMTpcdFx0LyogTmV3IGNoYXJnZSB3aW5kb3cgc3RhcnRzICovXG4zMzIyOlx0XHRpZiAoIXRpbWVfaW5fcmFuZ2Vfb3BlbihqaWZmaWVzLCBxdW90YS1cdTAwM2VjaGFyZ2VkX2Zyb20sXG4zMzIzOlx0XHRcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VkX2Zyb20gJiM0MztcbjMzMjQ6XHRcdFx0XHRcdG1zZWNzX3RvX2ppZmZpZXMocXVvdGEtXHUwMDNlcmVzZXRfaW50ZXJ2YWwpKSkge1xuMzMyNTpcdFx0XHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSlcbjMzMjY6XHRcdFx0XHRzLVx1MDAzZXN0YXQucXRfZXhjZWVkcyYjNDM7JiM0Mzs7XG4zMzI3Olx0XHRcdHF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogJiM0Mzs9IHF1b3RhLVx1MDAzZWNoYXJnZWRfc3o7XG4zMzI4Olx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XG4zMzI5Olx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogPSAwO1xuMzMzMDpcdFx0XHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSlcbjMzMzE6XHRcdFx0XHRjYWNoZWRfZXN6ID0gcXVvdGEtXHUwMDNlZXN6O1xuMzMzMjpcdFx0XHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xuMzMzMzpcdFx0XHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgcXVvdGEtXHUwMDNlZXN6ICE9IGNhY2hlZF9lc3opXG4zMzM0Olx0XHRcdFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcbjMzMzU6XHRcdH1cbjMzMzY6XHRcbjMzMzc6XHRcdGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKHF1b3RhLCBjKTtcbjMzMzg6XHRcbjMzMzk6XHRcdGlmICghYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcbjMzNDA6XHRcdFx0cmV0dXJuO1xuMzM0MTpcdFxuMzM0MjpcdFx0LyogRmlsbCB1cCB0aGUgc2NvcmUgaGlzdG9ncmFtICovXG4zMzQzOlx0XHRtZW1zZXQoYy1cdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSwgMCxcbjMzNDQ6XHRcdFx0XHRzaXplb2YoKmMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0pICpcbjMzNDU6XHRcdFx0XHQoREFNT1NfTUFYX1NDT1JFICYjNDM7IDEpKTtcbjMzNDY6XHRcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XG4zMzQ3Olx0XHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XG4zMzQ4Olx0XHRcdFx0aWYgKCFfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKSlcbjMzNDk6XHRcdFx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MTkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEQU1PTiBLY29uZmlnIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBncmFudWxhci4gQmVmb3JlIEkgZGl2ZSBpbnRvIGFueSBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZykgaW1wbGVtZW50YXRpb24gZGV0YWlscywgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIEtjb25maWcgZGVwZW5kZW5jaWVzLiBJIGhhdmUgdG8gdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCYjMzk7cyBjcnVjaWFsIEkgZG9uJiMzOTt0IG92ZXJsb29rIGFueSBwb3RlbnRpYWxseSBvYnNjdXJlLCBidXQgdml0YWwsIGNvbmZpZ3VyYXRpb25zLiBJdCYjMzk7cyBhIHF1aWNrIHNhbml0eSBjaGVjayBhdCB0aGlzIHN0YWdlIHRvIG1ha2Ugc3VyZSBhbGwgdGhlIGJ1aWxkaW5nIGJsb2NrcyBhcmUgaW4gcGxhY2UgYW5kIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHNldCBvZiBjb25maWd1cmFibGUgZmVhdHVyZXMuIFRoaXMgYWxzbyBoZWxwcyBwbGFuIHRoZSBuZXh0IHN0ZXBzLCB0byBlbnN1cmUgYSBjb21wbGV0ZSBhbmQgc3VjY2Vzc2Z1bCBpbXBsZW1lbnRhdGlvbi4gS25vd2luZyB0aGUgS2NvbmZpZyBvcHRpb25zIHdpbGwgaW5mb3JtIGhvdyBJIGNvbmZpZ3VyZSBEQU1PTiBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZSBnaXZlbiB0aGUgdGFyZ2V0IHdvcmtsb2FkLCBlc3BlY2lhbGx5IGZvciBwb3RlbnRpYWwgdHJhZGUtb2ZmcyBhbmQgcGVyZm9ybWFuY2UgdHVuaW5nIHBvc3NpYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy00LVxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMTUtXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbm1tL2RhbW9uL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU3NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zIGZvciBEYW1vbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IGdyYW51bGFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBEYW1vbiB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCB0aGUgYmVzdCBzdGFydGluZyBwb2ludCwgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgY2Fub25pY2FsIHNvdXJjZSBmb3IgdGhlc2UgdGhpbmdzLiBJIGtub3cgdGhhdCBmaWxlIHdpbGwgc3BlbGwgb3V0ICpleGFjdGx5KiB3aGF0JiMzOTtzIGF2YWlsYWJsZSwgd2hpY2ggb3RoZXIgZmVhdHVyZXMgb3Igc2V0dGluZ3MgaXQgcmVsaWVzIG9uLCBhbmQgd2hhdCB0aGUgZGVmYXVsdCBiZWhhdmlvcnMgYXJlLiBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSwgYW5kIHRoZSBLY29uZmlnIGZpbGUgZ2l2ZXMgbWUgdGhhdCwgZXNzZW50aWFsbHkgYWxsb3dpbmcgbWUgdG8gYnVpbGQgdGhlIGJpZyBwaWN0dXJlLiBUaGlzIGlzIHRoZSBzb2xpZCBmb3VuZGF0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBkYW1vbiBpcyBjb25maWd1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdG1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBEQU1PTlxuICAgNjpcdFx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbiAgIDc6XHRcdGhlbHBcbiAgIDg6XHRcdCAgVGhpcyBidWlsZHMgYSBmcmFtZXdvcmsgdGhhdCBhbGxvd3Mga2VybmVsIHN1YnN5c3RlbXMgdG8gbW9uaXRvclxuICAgOTpcdFx0ICBhY2Nlc3MgZnJlcXVlbmN5IG9mIGVhY2ggbWVtb3J5IHJlZ2lvbi4gVGhlIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWxcbiAgMTA6XHRcdCAgZm9yIHBlcmZvcm1hbmNlLWNlbnRyaWMgRFJBTSBsZXZlbCBtZW1vcnkgbWFuYWdlbWVudC5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgU2VlIGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWwvbGF0ZXN0L21tL2RhbW9uL2luZGV4Lmh0bWwgZm9yXG4gIDEzOlx0XHQgIG1vcmUgaW5mb3JtYXRpb24uXG4gIDE0Olx0XG4gIDE1Olx0Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxuICAxNjpcdFx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuICAxNzpcdFx0ZGVwZW5kcyBvbiBEQU1PTlxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBEQU1PTiBkZWJ1Z2dpbmctcHVycG9zZSBzYW5pdHkgY2hlY2tzIGluXG4gIDIwOlx0XHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxuICAyMTpcdFx0ICBhZGRpdGlvbmFsIG92ZXJoZWFkLiAgVGhpcyBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYmUgZW5hYmxlZCBvblxuICAyMjpcdFx0ICBvbmx5IGRldmVsb3BtZW50IGFuZCB0ZXN0IHNldHVwcy5cbiAgMjM6XHRcbiAgMjQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMjU6XHRcbiAgMjY6XHRjb25maWcgREFNT05fS1VOSVRfVEVTVFxuICAyNzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDI4Olx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDI5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICAzMDpcdFx0aGVscFxuICAzMTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cbiAgMzI6XHRcbiAgMzM6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXG4gIDM0Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxuICAzNTpcdFxuICAzNjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzNzpcdFxuICAzODpcdGNvbmZpZyBEQU1PTl9WQUREUlxuICAzOTpcdFx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbiAgNDA6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxuICA0MTpcdFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG4gIDQyOlx0XHRkZWZhdWx0IERBTU9OXG4gIDQzOlx0XHRoZWxwXG4gIDQ0Olx0XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbiAgNDU6XHRcdCAgdGhhdCB3b3JrIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLlxuICA0NjpcdFxuICA0NzpcdGNvbmZpZyBEQU1PTl9QQUREUlxuICA0ODpcdFx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4gIDQ5Olx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbiAgNTA6XHRcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuICA1MTpcdFx0ZGVmYXVsdCBEQU1PTlxuICA1MjpcdFx0aGVscFxuICA1MzpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG4gIDU0Olx0XHQgIHRoYXQgd29ya3MgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxuICA1NTpcdFxuICA1NjpcdGNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG4gIDU3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICA1ODpcdFx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuICA1OTpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgNjA6XHRcdGhlbHBcbiAgNjE6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cbiAgNjI6XHRcbiAgNjM6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXG4gIDY0Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxuICA2NTpcdFxuICA2NjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA2NzpcdFxuICA2ODpcdGNvbmZpZyBEQU1PTl9TWVNGU1xuICA2OTpcdFx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbiAgNzA6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IFNZU0ZTXG4gIDcxOlx0XHRkZWZhdWx0IERBTU9OXG4gIDcyOlx0XHRoZWxwXG4gIDczOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxuICA3NDpcdFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cbiAgNzU6XHRcbiAgNzY6XHRjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxuICA3NzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICA3ODpcdFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuICA3OTpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgODA6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODI3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBkYW1vc19hZGp1c3RfcXVvdGFgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGRhbW9zX2FkanVzdF9xdW90YWAgZnVuY3Rpb24gaXMgdXNlZCB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIERBTU9OIGNvcmUgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIHJvbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdHJpZ2dlcnMgdGhlIG5lZWQgdG8gYWRqdXN0IHRoZSBxdW90YSwgYW5kIHdoYXQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgbG9va3MgbGlrZSB3aGVuIHRoYXQgaGFwcGVucy4gQXJlIHRoZXJlIHNwZWNpZmljIHNjZW5hcmlvcyBvciBldmVudHMgdGhhdCBsZWFkIHRvIGl0cyBpbnZvY2F0aW9uPyBJIHNob3VsZCBhbHNvIHF1aWNrbHkgYXNzZXNzIGFueSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgcGFzc2VkIGludG8gdGhlIGZ1bmN0aW9uLCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBpbmZvcm1hdGlvbiBpdCYjMzk7cyB3b3JraW5nIHdpdGguIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgY29kZSBhbmQgc3RhcnQgbG9va2luZyBmb3IgdGhvc2UgZnVuY3Rpb24gY2FsbHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX2FkanVzdF9xdW90YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0zMjg2PXN0YXRpYyB2b2lkIGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG4tLVxubW0vZGFtb24vY29yZS5jLTMzMDEtXG5tbS9kYW1vbi9jb3JlLmM6MzMwMjpzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTMzMDMte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMzg1PXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNDAwLVxubW0vZGFtb24vY29yZS5jOjM0MDE6XHRcdGRhbW9zX2FkanVzdF9xdW90YShjLCBzKTtcbm1tL2RhbW9uL2NvcmUuYy0zNDAyLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjY0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgIGFuZCBEQU1PTiYjMzk7cyBMYW5kc2NhcGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IG1pbmQgaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIERBTU9OIG9wZXJhdGlvbnMgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRob3NlIHN5c2ZzIGVudHJ5IHBvaW50cy4gSSBrbm93IERBTU9OIGlzIGEgcG93ZXJmdWwgbWVtb3J5IG1vbml0b3JpbmcgYW5kIG1hbmFnaW5nIHN1YnN5c3RlbSwgc28gSSBuZWVkIHRvIHBpZWNlIHRvZ2V0aGVyIGhvdyBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBmaXRzIGludG8gdGhlIHB1enpsZSwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgc3lzZnMgaW50ZXJmYWNlLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBmbG93IG9mIGluZm9ybWF0aW9uIOKAkyBob3cgYXJlIHNjaGVtZXMgZGVmaW5lZCwgaG93IGFyZSB0aGV5IGFwcGxpZWQsIGFuZCB3aGF0JiMzOTtzIHRoZSByb2xlIG9mIHRob3NlIHN5c2ZzIGVudHJpZXMgaW4gdGhpcyBwcm9jZXNzPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgaXQgbWFuYWdlcyBtZW1vcnkgcmVnaW9ucyBhbmQgb3B0aW1pemVzIHBlcmZvcm1hbmNlLiBUaGUgaW50ZXJhY3Rpb24gd2l0aCB0aG9zZSBlbnRyeSBwb2ludHMgaXMgY3JpdGljYWwgYmVjYXVzZSBJIHdhbnQgdG8gZ3Jhc3AgZXhhY3RseSBob3cgaXQmIzM5O3MgY29uZmlndXJlZCBhbmQgY29udHJvbGxlZC4gSSYjMzk7bSBjb25zaWRlcmluZyBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG9yIGNvbmZsaWN0cyB3aXRoIG90aGVyIHN5c3RlbSBjb21wb25lbnRzLCB0b28uIEkgd2FudCB0byBidWlsZCBhIGNvbXBsZXRlIG1lbnRhbCBtb2RlbCBvZiB0aGlzIHBhcnQgb2YgREFNT04mIzM5O3MgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzM4MDpcdFx0XHRzaWR4JiM0MzsmIzQzOztcbjMzODE6XHRcdH1cbjMzODI6XHRcdHRyYWNlX2NhbGxfX2RhbW9zX3N0YXRfYWZ0ZXJfYXBwbHlfaW50ZXJ2YWwoY2lkeCwgc2lkeCwgXHUwMDI2cy1cdTAwM2VzdGF0KTtcbjMzODM6XHR9XG4zMzg0Olx0XG4zMzg1Olx0c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4zMzg2Olx0e1xuMzM4NzpcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbjMzODg6XHRcdHN0cnVjdCBkYW1vcyAqcztcbjMzODk6XHRcdGJvb2wgaGFzX3NjaGVtZXNfdG9fYXBwbHkgPSBmYWxzZTtcbjMzOTA6XHRcdHVuc2lnbmVkIGxvbmcgbWF4X3JlZ2lvbl9zejtcbjMzOTE6XHRcbjMzOTI6XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XG4zMzkzOlx0XHRcdGlmICh0aW1lX2JlZm9yZShjLVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBzLVx1MDAzZW5leHRfYXBwbHlfc2lzKSlcbjMzOTQ6XHRcdFx0XHRjb250aW51ZTtcbjMzOTU6XHRcbjMzOTY6XHRcdFx0aWYgKCFzLVx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQpXG4zMzk3Olx0XHRcdFx0Y29udGludWU7XG4zMzk4Olx0XG4zMzk5Olx0XHRcdGhhc19zY2hlbWVzX3RvX2FwcGx5ID0gdHJ1ZTtcbjM0MDA6XHRcbjM0MDE6XHRcdFx0ZGFtb3NfYWRqdXN0X3F1b3RhKGMsIHMpO1xuMzQwMjpcdFx0fVxuMzQwMzpcdFxuMzQwNDpcdFx0aWYgKCFoYXNfc2NoZW1lc190b19hcHBseSlcbjM0MDU6XHRcdFx0cmV0dXJuO1xuMzQwNjpcdFxuMzQwNzpcdFx0bWF4X3JlZ2lvbl9zeiA9IGRhbW9uX3JlZ2lvbl9zel9saW1pdChjKTtcbjM0MDg6XHRcdG11dGV4X2xvY2soXHUwMDI2Yy1cdTAwM2V3YWxrX2NvbnRyb2xfbG9jayk7XG4zNDA5Olx0XHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xuMzQxMDpcdFx0XHRpZiAoYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIFx1MDAyNlx1MDAyNiBjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2UpXG4zNDExOlx0XHRcdFx0Y29udGludWU7XG4zNDEyOlx0XHRcdGRhbW9zX2FwcGx5X3RhcmdldChjLCB0LCBtYXhfcmVnaW9uX3N6KTtcbjM0MTM6XHRcdH1cbjM0MTQ6XHRcbjM0MTU6XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XG4zNDE2Olx0XHRcdGlmICh0aW1lX2JlZm9yZShjLVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBzLVx1MDAzZW5leHRfYXBwbHlfc2lzKSlcbjM0MTc6XHRcdFx0XHRjb250aW51ZTtcbjM0MTg6XHRcdFx0ZGFtb3Nfd2Fsa19jb21wbGV0ZShjLCBzKTtcbjM0MTk6XHRcdFx0ZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHMsIGMpO1xuMzQyMDpcdFx0XHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IE5VTEw7XG4zNDIxOlx0XHRcdGRhbW9zX3RyYWNlX3N0YXQoYywgcyk7XG4zNDIyOlx0XHR9XG4zNDIzOlx0XHRtdXRleF91bmxvY2soXHUwMDI2Yy1cdTAwM2V3YWxrX2NvbnRyb2xfbG9jayk7XG4zNDI0Olx0fVxuMzQyNTpcdFxuMzQyNjpcdCNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXG4zNDI3Olx0c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X21lcmdlX3R3b19yZWdpb25zKFxuMzQyODpcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpsLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuMzQyOTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMyMQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkFuYWx5emluZyB0aGUgQ2hhcmdlIFRhcmdldCYjMzk7cyBVc2FnZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGBxdW90YS0mZ3Q7Y2hhcmdlX3RhcmdldF9mcm9tYC4gVGltZSB0byBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyB0aGluZyBpcyBhY3R1YWxseSAqdXNlZCouIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBpcyBnb2luZyB0byBiZSB0aGUgY3JpdGljYWwgcG9pbnQgd2hlcmUgdGhlIHF1b3RhIHN5c3RlbSBpbnRlcmZhY2VzIHdpdGggdGhlIGNoYXJnaW5nIG1lY2hhbmlzbS4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIGNhbGwgc2l0ZXMgdG8gZnVsbHkgZ3Jhc3AgaXRzIHJvbGUuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBwYXNzZWQsIHdoYXQgYXNzdW1wdGlvbnMgYXJlIG1hZGUgYWJvdXQgYHF1b3RhYCwgYW5kLCBtb3N0IGltcG9ydGFudGx5LCBob3cgdGhpcyBmdW5jdGlvbiBjb250cmlidXRlcyB0byByZXNvdXJjZSBhY2NvdW50aW5nLiBJcyBpdCBjYWxsZWQgc3luY2hyb25vdXNseSBvciBhc3luY2hyb25vdXNseT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiBpdCBmYWlscz8gSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUgdG8gYmUgY29uZmlkZW50IGluIGFueSByZWZhY3RvcmluZyBvciBtb2RpZmljYXRpb24gdG8gdGhpcyBzeXN0ZW0uIExldCYjMzk7cyBzdGFydCB3aXRoIGEgcXVpY2sgY29kZSBzZWFyY2ggYW5kIGdldCBhIHZpc3VhbCBvZiBpdHMgdXNhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoYXJnZV90YXJnZXRfZnJvbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz03MzI9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSAqZGFtb3NfcXVvdGFfaW5pdChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03MzgtXHRxdW90YS1cdTAwM2VjaGFyZ2VkX2Zyb20gPSAwO1xubW0vZGFtb24vY29yZS5jOjczOTpcdHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG5tbS9kYW1vbi9jb3JlLmMtNzQwLVx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4tLVxubW0vZGFtb24vY29yZS5jPTE2OTY9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0cyhcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTcyMi1cdFx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgZHN0KSB7XG5tbS9kYW1vbi9jb3JlLmM6MTcyMzpcdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9PSBkc3RfdGFyZ2V0KSB7XG5tbS9kYW1vbi9jb3JlLmM6MTcyNDpcdFx0XHRcdFx0cy1cdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xubW0vZGFtb24vY29yZS5jLTE3MjUtXHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4tLVxubW0vZGFtb24vY29yZS5jPTI0NDk9c3RhdGljIGJvb2wgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNDU2LVx0LyogU2tpcCBwcmV2aW91c2x5IGNoYXJnZWQgcmVnaW9ucyAqL1xubW0vZGFtb24vY29yZS5jOjI0NTc6XHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKSB7XG5tbS9kYW1vbi9jb3JlLmM6MjQ1ODpcdFx0aWYgKHQgIT0gcXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKVxubW0vZGFtb24vY29yZS5jLTI0NTktXHRcdFx0cmV0dXJuIHRydWU7XG5tbS9kYW1vbi9jb3JlLmMtMjQ2MC1cdFx0aWYgKHIgPT0gZGFtb25fbGFzdF9yZWdpb24odCkpIHtcbm1tL2RhbW9uL2NvcmUuYzoyNDYxOlx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG5tbS9kYW1vbi9jb3JlLmMtMjQ2Mi1cdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjQ4MC1cdFx0fVxubW0vZGFtb24vY29yZS5jOjI0ODE6XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG5tbS9kYW1vbi9jb3JlLmMtMjQ4Mi1cdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4tLVxubW0vZGFtb24vY29yZS5jPTI2ODI9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTI3NDEtXHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKSB7XG5tbS9kYW1vbi9jb3JlLmM6Mjc0MjpcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSB0O1xubW0vZGFtb24vY29yZS5jLTI3NDMtXHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IHItXHUwMDNlYXIuZW5kO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMjcyPXN0YXRpYyB2b2lkIGRhbW9zX3RyYWNlX2VzeihzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMyODUtXG5tbS9kYW1vbi9jb3JlLmM6MzI4NjpzdGF0aWMgdm9pZCBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbShzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxubW0vZGFtb24vY29yZS5jLTMyODctXHRcdHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMyOTAtXG5tbS9kYW1vbi9jb3JlLmM6MzI5MTpcdHQgPSBxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb207XG5tbS9kYW1vbi9jb3JlLmMtMzI5Mi1cdGlmICghdClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzI5Ny1cdFx0cmV0dXJuO1xubW0vZGFtb24vY29yZS5jOjMyOTg6XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xubW0vZGFtb24vY29yZS5jLTMyOTktXHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzMwMj1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzM2LVxubW0vZGFtb24vY29yZS5jOjMzMzc6XHRkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbShxdW90YSwgYyk7XG5tbS9kYW1vbi9jb3JlLmMtMzMzOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYwNQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoJiMzOTtzIFJlYWNoIGFuZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL2RhbW9uL2NvcmUuY2AsIHdoaWNoLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGlzIHRoZSBoZWFydCBvZiBEQU1PTiDigJMgRGF0YSBBY2Nlc3MgTW9uaXRvcmluZy4gVGhhdCYjMzk7cyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50LiBUaGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgaXMgdGhpcyBzb21ldGhpbmcgSSBjYW4gZXZlbiBpbnRlcmFjdCB3aXRoIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VPwoKQWgsIHJpZ2h0LCB5ZXMhIERBTU9OIGlzIG1hbmFnZWFibGUgdGhyb3VnaCBzeXNmcywgd2hpY2ggaXMgZ3JlYXQuIEkgY2FuIGNvbnRyb2wgaXQgdXNpbmcgYC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2AuICBJIHRoaW5rIHRoYXQgYWxzbyBkZXBlbmRzIG9uIHRob3NlIHN5c2ZzIGNvbmZpZyBvcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVxdWlyZWQuIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd291bGQgYmUgYENPTkZJR19EQU1PTmAsIGFuZCwgb2YgY291cnNlLCBgQ09ORklHX0RBTU9OX1NZU0ZTYCBmb3IgdGhlIHN5c2ZzIGludGVyZmFjZS4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IGlmIGBDT05GSUdfREFNT05fUEFERFJgIG9yIGBDT05GSUdfREFNT05fVkFERFJgIGFyZSBzZXQuIFRob3NlIGxvb2sgbGlrZSB0aGV5JiMzOTtyZSByZWxhdGVkIHRvIG1vbml0b3Jpbmcgb3BlcmF0aW9ucywgdGFyZ2V0cywgYW5kIHNwZWNpZmljYWxseSB0aGUgYG9wcy50YXJnZXRfdmFsaWRgIGZ1bmN0aW9uLgoKSSYjMzk7ZCBiZXR0ZXIgdHJhY2sgZG93biB3aGVyZSBgb3BzLnRhcmdldF92YWxpZGAgaXMgZGVmaW5lZCBhbmQgdXNlZC4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGF0IGZ1bmN0aW9uIGlzIGtleSB0byBhc3Nlc3NpbmcgdGhlIGltcGFjdCBvZiB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YXJnZXRfdmFsaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzI4Nj1zdGF0aWMgdm9pZCBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbShzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjkzLVx0XHRyZXR1cm47XG5tbS9kYW1vbi9jb3JlLmM6MzI5NDpcdGlmICghYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKVxubW0vZGFtb24vY29yZS5jLTMyOTUtXHRcdHJldHVybjtcbm1tL2RhbW9uL2NvcmUuYzozMjk2Olx0aWYgKGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSlcbm1tL2RhbW9uL2NvcmUuYy0zMjk3LVx0XHRyZXR1cm47XG4tLVxubW0vZGFtb24vY29yZS5jPTMzODU9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTM0MDktXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xubW0vZGFtb24vY29yZS5jOjM0MTA6XHRcdGlmIChjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQgXHUwMDI2XHUwMDI2IGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZSlcbm1tL2RhbW9uL2NvcmUuYy0zNDExLVx0XHRcdGNvbnRpbnVlO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zNzIwPXN0YXRpYyBib29sIGtkYW1vbmRfbmVlZF9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzcyNi1cbm1tL2RhbW9uL2NvcmUuYzozNzI3Olx0aWYgKCFjdHgtXHUwMDNlb3BzLnRhcmdldF92YWxpZClcbm1tL2RhbW9uL2NvcmUuYy0zNzI4LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vZGFtb24vY29yZS5jLTM3MzAtXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7XG5tbS9kYW1vbi9jb3JlLmM6MzczMTpcdFx0aWYgKGN0eC1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpKVxubW0vZGFtb24vY29yZS5jLTM3MzItXHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9NDc3PXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3BhX2luaXRjYWxsKHZvaWQpXG4tLVxubW0vZGFtb24vcGFkZHIuYy00ODYtXHRcdC5hcHBseV9wcm9iZXMgPSBkYW1vbl9wYV9hcHBseV9wcm9iZXMsXG5tbS9kYW1vbi9wYWRkci5jOjQ4NzpcdFx0LnRhcmdldF92YWxpZCA9IE5VTEwsXG5tbS9kYW1vbi9wYWRkci5jLTQ4OC1cdFx0LmFwcGx5X3NjaGVtZSA9IGRhbW9uX3BhX2FwcGx5X3NjaGVtZSxcbi0tXG5tbS9kYW1vbi92YWRkci5jPTYyNT1zdGF0aWMgaW50IGRhbW9zX3ZhX21pZ3JhdGVfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTY4Ni1cbm1tL2RhbW9uL3ZhZGRyLmM6Njg3OnN0YXRpYyBib29sIGRhbW9uX3ZhX3RhcmdldF92YWxpZChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxubW0vZGFtb24vdmFkZHIuYy02ODgte1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9OTMzPXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3ZhX2luaXRjYWxsKHZvaWQpXG4tLVxubW0vZGFtb24vdmFkZHIuYy05NDAtXHRcdC5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzLFxubW0vZGFtb24vdmFkZHIuYzo5NDE6XHRcdC50YXJnZXRfdmFsaWQgPSBkYW1vbl92YV90YXJnZXRfdmFsaWQsXG5tbS9kYW1vbi92YWRkci5jLTk0Mi1cdFx0LmNsZWFudXBfdGFyZ2V0ID0gZGFtb25fdmFfY2xlYW51cF90YXJnZXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTMwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFZpcnR1YWwgQWRkcmVzcyBNb25pdG9yaW5nOiBBIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIHNvIGBkYW1vbl92YV90YXJnZXRfdmFsaWRgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZTsgaXQmIzM5O3MgdGhlIGdhdGVrZWVwZXIgdGhhdCBkZXRlcm1pbmVzIGlmIGEgbW9uaXRvcmVkIHByb2Nlc3Mgb3IgbWVtb3J5IHJlZ2lvbiBpcyBzdGlsbCBsZWdpdGltYXRlIGluIHRoZSB2aXJ0dWFsIGFkZHJlc3MgbW9uaXRvcmluZyBzZXR1cC4gSWYgYSBwcm9jZXNzIGV4aXRzLCBuYXR1cmFsbHkgdGhlIHRhcmdldCBiZWNvbWVzIGludmFsaWQsIHJpZ2h0PyBUaGF0JiMzOTtzIHdoZW4gYHRhcmdldF92YWxpZCh0KWAgZmxpcHMgdG8gZmFsc2UuICBBbmQgdGhhdCYjMzk7cyB0aGUgdHJpZ2dlciBmb3IgYGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKClgIHRvIGNsZWFuIHVwIHRoZSBgcXVvdGEtJmd0O2NoYXJnZV90YXJnZXRfZnJvbWAgZmllbGQuIE1ha2VzIHNlbnNlLiBUaGlzIGNvZGUgaXMgaW4gYG1tL2RhbW9uL2NvcmUuY2AsIGFuZCB0aGUgJiMzNDtXb3J0aEZ1enppbmc6IHRydWUhJiMzNDsgZmxhZyBjZXJ0YWlubHkgY2F0Y2hlcyBteSBhdHRlbnRpb24uCgpMZXQmIzM5O3Mgc2VlIHdoYXQgZWxzZSBpcyBpbiBwbGF5LiBUaGUgZm9jdXMgc3ltYm9scyBsb29rIGxpa2U6CgotICAgYGRhbW9zX2FkanVzdF9xdW90YWAKLSAgIGBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbWAKLSAgIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgCi0gICBgZGFtb25fdmFfdGFyZ2V0X3ZhbGlkYAoKSSYjMzk7bSBjaGVja2luZyBpZiBgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb21gIGFuZCBgZGFtb3NfYWRqdXN0X3F1b3RhYCBhcmUgc3RhdGljLCBhbmQgeWVwLCB0aGV5IGFyZS4gSW1wb3J0YW50IGZvciBzY29waW5nLiBOb3csIGxldCYjMzk7cyB0cmFjZSBgZGFtb3NfYWRqdXN0X3F1b3RhYC4gTG9va3MgbGlrZSBpdCYjMzk7cyBjYWxsZWQgYnkgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AuIEFscmlnaHQsIGFuZCB0aGF0IG9uZSBpcyBjYWxsZWQgZnJvbSBga2RhbW9uZF9mbmAgLyBgZGFtb25fZm9yX2VhY2hfc2NoZW1lYCBpbiB0aGUgc2FtZSBjb3JlIGZpbGUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2RhbW9uZF9hcHBseV9zY2hlbWVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTMzNjk9c3RhdGljIHZvaWQgZGFtb3NfdHJhY2Vfc3RhdChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMzODQtXG5tbS9kYW1vbi9jb3JlLmM6MzM4NTpzdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcbm1tL2RhbW9uL2NvcmUuYy0zMzg2LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzkxMT1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzk4Ny1cdFx0Lypcbm1tL2RhbW9uL2NvcmUuYzozOTg4Olx0XHQgKiBkbyBrZGFtb25kX2NhbGwoKSBhbmQga2RhbW9uZF9hcHBseV9zY2hlbWVzKCkgYWZ0ZXJcbm1tL2RhbW9uL2NvcmUuYy0zOTg5LVx0XHQgKiBrZGFtb25kX21lcmdlX3JlZ2lvbnMoKSBpZiBwb3NzaWJsZSwgdG8gcmVkdWNlIG92ZXJoZWFkXG4tLVxubW0vZGFtb24vY29yZS5jLTQwMDItXHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZjdHgtXHUwMDNlc2NoZW1lcykpXG5tbS9kYW1vbi9jb3JlLmM6NDAwMzpcdFx0XHRrZGFtb25kX2FwcGx5X3NjaGVtZXMoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy00MDA0LVx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTAxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIERBTU9OIENvbnRleHQgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBEQU1PTiBjb250ZXh0cyBhcmUgaW5pdGlhdGVkIGFuZCBmaW5hbGl6ZWQuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gYGtkYW1vbmRfZm5gIGZpcnN0LCBhcyB0aGF0IHNlZW1zIGxpa2UgdGhlIHByaW1hcnkgZnVuY3Rpb24gZm9yIHRoZSBrZXJuZWwtbGV2ZWwgZGFlbW9uIG9wZXJhdGlvbnMuIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBob3cgaXQga2lja3MgdGhpbmdzIG9mZi4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzeXNmcyBpbnRlcmZhY2UuIEkga25vdyB0aGF0JiMzOTtzIHRoZSB1c2VyLXNwYWNlIGVudHJ5IHBvaW50LCBidXQgaG93IGRvZXMgaXQgbWFwIHRvIHRoZSBpbnRlcm5hbCBvcGVyYXRpb25zPyBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBzeW1ib2xzIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBzdGFydGluZyBhIG5ldyBjb250ZXh0IGFuZCBjb21taXR0aW5nIG9yIGZpbmFsaXppbmcgYW4gZXhpc3Rpbmcgb25lLiBJZGVudGlmeWluZyB0aG9zZSBob29rcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBmbG93IGFuZCBtYWtpbmcgYW55IG5lY2Vzc2FyeSBhZGp1c3RtZW50cyB0byBlbnN1cmUgcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX2NvbW1pdF90YXJnZXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTE2ODA9c3RhdGljIHZvaWQgZGFtb25fcmV2ZXJ0X3RhcmdldF9jb21taXRzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTY5NS1cbm1tL2RhbW9uL2NvcmUuYzoxNjk2OnN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldHMoXG5tbS9kYW1vbi9jb3JlLmMtMTY5Ny1cdFx0c3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jPTE4Nzk9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE5MDctXHRcdHJldHVybiBlcnI7XG5tbS9kYW1vbi9jb3JlLmM6MTkwODpcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXRzKGRzdCwgc3JjKTtcbm1tL2RhbW9uL2NvcmUuYy0xOTA5LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNjEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBEQU1PTiBTeXN0ZW0gRmlsZSBDb21taXQqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMuIEkmIzM5O20gdGhpbmtpbmcgdGhlIGxpa2VseSBhcmVhIGZvciB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eSBpcyBnb2luZyB0byBiZSBpbiBgbW0vZGFtb24vc3lzZnMuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBwcmV0dHkgY2VydGFpbiB0aGVyZSB3aWxsIGJlIGEgcm91dGluZSwgbGlrZWx5IG5hbWVkIHNvbWV0aGluZyBsaWtlIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgIG9yIGEgZnVuY3Rpb24gd2l0aCBhIHNpbWlsYXIgbmFtaW5nIGNvbnZlbnRpb24sIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBpbnB1dCBvciBjb21tYW5kcyB0aWVkIHRvIHRoZSBzeXNmcyBpbnRlcmZhY2UuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0xMDgzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTExMDgtICogSW4gZGV0YWlsLCBhbGwgREFNT04gQVBJIGNhbGxlcnMgZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBpbml0aWFsXG5tbS9kYW1vbi9jb3JlLmM6MTEwOTogKiBzZXR1cCBvZiBkYW1vbl9jdHggYmVmb3JlIGNhbGxpbmcgZGFtb25fc3RhcnQoKS4gIFNvbWUgb2YgdGhlIEFQSSBjYWxsZXJzXG5tbS9kYW1vbi9jb3JlLmMtMTExMC0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVx1MDAzZSBkYW1vbl9jb21taXQoKSBmb3Jcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjAzOT1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XG4tLVxubW0vZGFtb24vY29yZS5jLTIwNDEtLypcbm1tL2RhbW9uL2NvcmUuYzoyMDQyOiAqIF9fZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyBtb25pdG9yaW5nIHdpdGggZ2l2ZW4gY29udGV4dC5cbm1tL2RhbW9uL2NvcmUuYy0yMDQzLSAqIEBjdHg6XHRtb25pdG9yaW5nIGNvbnRleHRcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA0OC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMDQ5OnN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtMjA1MC17XG4tLVxubW0vZGFtb24vY29yZS5jLTIwNzEtLyoqXG5tbS9kYW1vbi9jb3JlLmM6MjA3MjogKiBkYW1vbl9zdGFydCgpIC0gU3RhcnRzIHRoZSBtb25pdG9yaW5ncyBmb3IgYSBnaXZlbiBncm91cCBvZiBjb250ZXh0cy5cbm1tL2RhbW9uL2NvcmUuYy0yMDczLSAqIEBjdHhzOlx0YW4gYXJyYXkgb2YgdGhlIHBvaW50ZXJzIGZvciBjb250ZXh0cyB0byBzdGFydCBtb25pdG9yaW5nXG4tLVxubW0vZGFtb24vY29yZS5jLTIwODAtICogQGV4Y2x1c2l2ZSBpcyB0cnVlIGFuZCBhIGdyb3VwIG9mIHRocmVhZHMgdGhhdCBjcmVhdGVkIGJ5IG90aGVyXG5tbS9kYW1vbi9jb3JlLmM6MjA4MTogKiAmIzM5O2RhbW9uX3N0YXJ0KCkmIzM5OyBjYWxsIGlzIGN1cnJlbnRseSBydW5uaW5nLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBidXRcbm1tL2RhbW9uL2NvcmUuYy0yMDgyLSAqIHJldHVybnMgLUVCVVNZLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDg1LSAqL1xubW0vZGFtb24vY29yZS5jOjIwODY6aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpXG5tbS9kYW1vbi9jb3JlLmMtMjA4Ny17XG4tLVxubW0vZGFtb24vY29yZS5jLTIxMTEtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9jdHhzOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vY29yZS5jOjIxMTI6XHRcdGVyciA9IF9fZGFtb25fc3RhcnQoY3R4c1tpXSk7XG5tbS9kYW1vbi9jb3JlLmMtMjExMy1cdFx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjIxND1pbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXG4tLVxubW0vZGFtb24vY29yZS5jLTIyNjItICpcbm1tL2RhbW9uL2NvcmUuYzoyMjYzOiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBkYW1vbl9zdGFydCgpIHdpdGggdGhlXG5tbS9kYW1vbi9jb3JlLmMtMjI2NC0gKiBAY3R4IGhhcyBzdWNjZWVkZWQuICBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gY291bGQgZmFsbCBpbnRvIGFuIGluZGVmaW5pdGVcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTQwMT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbilcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTQxMy1cbm1tL2RhbW9uL2xydV9zb3J0LmM6NDE0Olx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCB0cnVlKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDE1LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MzI0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTMzNi1cbm1tL2RhbW9uL3JlY2xhaW0uYzozMzc6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xubW0vZGFtb24vcmVjbGFpbS5jLTMzOC1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vc3RhdC5jPTIwMD1zdGF0aWMgaW50IGRhbW9uX3N0YXRfc3RhcnQodm9pZClcbi0tXG5tbS9kYW1vbi9zdGF0LmMtMjEyLVx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL3N0YXQuYzoyMTM6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZkYW1vbl9zdGF0X2NvbnRleHQsIDEsIHRydWUpO1xubW0vZGFtb24vc3RhdC5jLTIxNC1cdGlmIChlcnIpIHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTI1MTE9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjUzNS1cdH1cbm1tL2RhbW9uL3N5c2ZzLmM6MjUzNjpcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xubW0vZGFtb24vc3lzZnMuYy0yNTM3LVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAyMDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzczMQoJCQkJCQkJb3V0cHV0OiAxNjcKCQkJCQkJCXRob3VnaHRzOiAyMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2xzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGFjZS4gSSBzZWUgYERBTU9OYCBhcyB0aGUgZm91bmRhdGlvbmFsIGNvbmZpZywgb2J2aW91c2x5IGVzc2VudGlhbC4gVGhlbiwgYERBTU9OX1ZBRERSYCwgd2hpY2ggaXMgZXhwbGljaXRseSB0aWVkIHRvIHZpcnR1YWwgYWRkcmVzcyBtb25pdG9yaW5nIHZpYSBgZGFtb25fdmFfdGFyZ2V0X3ZhbGlkYCDigJMgdGhhdCYjMzk7cyBjcml0aWNhbC4gQW5kIGZpbmFsbHksIGBEQU1PTl9TWVNGU2AgaW5kaWNhdGVzIGEgc3lzZnMgaW50ZXJmYWNlIGlzIGVuYWJsZWQsIHdoaWNoIGlzIGhlbHBmdWwgZm9yIGludGVyYWN0aW9ucy4gR29vZCwgdGhlIGZvdW5kYXRpb25hbCBlbGVtZW50cyBzZWVtIHRvIGJlIHByZXNlbnQuCgpOb3csIHRvIHRoZSBGb2N1c1N5bWJvbHMuIEkmIzM5O20gc2VlaW5nIGEgbGlzdCBoZXJlOiBgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb21gLCBgZGFtb3NfYWRqdXN0X3F1b3RhYCwgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AsIGFuZCB0aGF0IGBkYW1vbl92YV90YXJnZXRfdmFsaWRgIGFnYWluLiBUaGVzZSBhcmUgbGlrZWx5IHRoZSBrZXkgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcyB3ZSBuZWVkIHRvIHNjcnV0aW5pemUsIGFuZCBmcm9tIHRoZSBuYW1lcywgdGhleSBzdWdnZXN0IGFyZWFzIHJlbGF0ZWQgdG8gcXVvdGEgYWRqdXN0bWVudHMgYW5kIGludmFsaWQgY2hhcmdlIHRhcmdldCByZXNldHMgd2l0aGluIERBTU9OLCBhcyB3ZWxsIGFzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2NoZW1lcyB0aGF0IERBTU9OIHVzZXMsIGFuZCB0aGF0IGNyaXRpY2FsIHZhbGlkYXRpb24uCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgaW5mb3JtYXRpb24gd2l0aCB0aGUgaW5zdHJ1Y3Rpb25zLiBgV29ydGhGdXp6aW5nYCBiZWluZyB0cnVlIGlzIGEgZ3JlZW4gbGlnaHQsIGltcGx5aW5nIHRoYXQgdGhlIGNvZGUgd2l0aGluIG1tL2RhbW9uIGlzIHJlYWNoYWJsZSBmb3IgZnV6emluZyB3aGljaCBpcyBncmVhdC4gVGhlIGBFbmFibGVDb25maWdzYCBsaXN0LCBbJiMzNDtEQU1PTiYjMzQ7LCAmIzM0O0RBTU9OX1ZBRERSJiMzNDssICYjMzQ7REFNT05fU1lTRlMmIzM0O10sIGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudC4gVGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QsIFsmIzM0O2RhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tJiMzNDssICYjMzQ7ZGFtb3NfYWRqdXN0X3F1b3RhJiMzNDssICYjMzQ7a2RhbW9uZF9hcHBseV9zY2hlbWVzJiMzNDssICYjMzQ7ZGFtb25fdmFfdGFyZ2V0X3ZhbGlkJiMzNDtdLCBhZ2FpbiBhbGlnbnMgd2l0aCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXkgYXJlYXMgb2YgaW50ZXJlc3QuIFRoZSAmIzM0O0NvbmNpc2UgZXhwbGFuYXRpb24mIzM0OyByZWFzb25pbmcgaXMgc29saWQgYW5kIGNvbmZpcm1zIG15IGFzc3VtcHRpb25zLgoKT2theSwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBMZXQmIzM5O3MgbW92ZSBvbiB0byB0aGUgbmV4dCBzdGVwIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tJiMzNDssCiAgICAmIzM0O2RhbW9zX2FkanVzdF9xdW90YSYjMzQ7LAogICAgJiMzNDtrZGFtb25kX2FwcGx5X3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFfdGFyZ2V0X3ZhbGlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PTiBjb3JlIHN1YnN5c3RlbSBpbiBtbS9kYW1vbi9jb3JlLmMsIGFkZGluZyBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbSgpIGFuZCBjYWxsaW5nIGl0IGZyb20gZGFtb3NfYWRqdXN0X3F1b3RhKCkgdG8gaW52YWxpZGF0ZSBzdGFsZSBjaGFyZ2UgdGFyZ2V0IHBvaW50ZXJzIHdoZW4gdGFyZ2V0X3ZhbGlkKCkgcmV0dXJucyBmYWxzZS4gVGhpcyBpcyBleGVjdXRhYmxlLCByZWFjaGFibGUga2VybmVsIGNvZGUgYWNjZXNzaWJsZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbSYjMzQ7LAogICAgJiMzNDtkYW1vc19hZGp1c3RfcXVvdGEmIzM0OywKICAgICYjMzQ7a2RhbW9uZF9hcHBseV9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhX3RhcmdldF92YWxpZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT04gY29yZSBzdWJzeXN0ZW0gaW4gbW0vZGFtb24vY29yZS5jLCBhZGRpbmcgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oKSBhbmQgY2FsbGluZyBpdCBmcm9tIGRhbW9zX2FkanVzdF9xdW90YSgpIHRvIGludmFsaWRhdGUgc3RhbGUgY2hhcmdlIHRhcmdldCBwb2ludGVycyB3aGVuIHRhcmdldF92YWxpZCgpIHJldHVybnMgZmFsc2UuIFRoaXMgaXMgZXhlY3V0YWJsZSwgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIGFjY2Vzc2libGUgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6NTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKCkgaW4gbW0vZGFtb24vY29yZS5jIHRvIHJlc2V0IHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSB0byBOVUxMIGFuZCBxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIHRvIDAgd2hlbiBjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgaW5kaWNhdGVzIHRoZSB0YXJnZXQgaXMgbm8gbG9uZ2VyIHZhbGlkLlxuXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBpbnRlcm5hbCBEQU1PUyBxdW90YSB0cmFja2luZyBsb2dpYyB0byBoYW5kbGUgaW52YWxpZCB0YXJnZXQgcG9pbnRlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcyBvciBwYWRkaW5nLCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gZGFuZ2xpbmcvc3RhbGUgdGFyZ2V0IHBvaW50ZXIgZGVyZWZlcmVuY2VzIHdvdWxkIGJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOL1VBRiBkZXRlY3RvcnMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5Y2NkY2Q3NTUzMzk3MjdlNDYwNmQ1OWU5MzFjMjhiM2Q4NTkxMGE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAyMDo1NDowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCBjZThjNmY5OTEwNmVkLi4yYzU4YmU5ZWRiZGU0IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC0zMjgzLDYgJiM0MzszMjgzLDIyIEBAIHN0YXRpYyB2b2lkIGRhbW9zX3RyYWNlX2VzeihzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMsCiAJdHJhY2VfZGFtb3NfZXN6KGNpZHgsIHNpZHgsIHF1b3RhLSZndDtlc3opOwogfQogCiYjNDM7c3RhdGljIHZvaWQgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSwKJiM0MzsJCXN0cnVjdCBkYW1vbl9jdHggKmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0OwomIzQzOwomIzQzOwl0ID0gcXVvdGEtJmd0O2NoYXJnZV90YXJnZXRfZnJvbTsKJiM0MzsJaWYgKCF0KQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAoIWMtJmd0O29wcy50YXJnZXRfdmFsaWQpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmIChjLSZndDtvcHMudGFyZ2V0X3ZhbGlkKHQpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlxdW90YS0mZ3Q7Y2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDsKJiM0MzsJcXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20gPSAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpCiB7CiAJc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9ICZhbXA7cy0mZ3Q7cXVvdGE7CkBAIC0zMzE4LDYgJiM0MzszMzM0LDggQEAgc3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcykKIAkJCWRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7CiAJfQogCiYjNDM7CWRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKHF1b3RhLCBjKTsKJiM0MzsKIAlpZiAoIWMtJmd0O29wcy5nZXRfc2NoZW1lX3Njb3JlKQogCQlyZXR1cm47CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIENvcmUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIFRoaXMgcGF0Y2ggbG9va3MgaW50ZXJlc3Rpbmc7IGl0JiMzOTtzIHRvdWNoaW5nIGBtbS9kYW1vbi9jb3JlLmNgLCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBmdW5kYW1lbnRhbCBEQU1PTiBiZWhhdmlvci4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGdldCBhIHNlbnNlIG9mIHRoZSBjb250ZXh0IGFyb3VuZCB0aGUgY2hhbmdlLiBUaW1lIHRvIGVpdGhlciBsZXZlcmFnZSBgZ3JlcHBlcmAgdG8gc2VlIHdoYXQgZWxzZSBtaWdodCBiZSBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZSwgb3IgaWYgSSB3YW50IHRvIGJlIG1vcmUgZm9jdXNlZCwgSSYjMzk7bGwgZ28gd2l0aCBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIGFyb3VuZCBsaW5lIDMyODMgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEdldCB0aGUgZGV0YWlscyBmaXJzdCwgdGhlbiBkZWNpZGUgb24gdGhlIHJpZ2h0IGFwcHJvYWNoLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMyNzA6XHR9XG4zMjcxOlx0XG4zMjcyOlx0c3RhdGljIHZvaWQgZGFtb3NfdHJhY2VfZXN6KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcyxcbjMyNzM6XHRcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcbjMyNzQ6XHR7XG4zMjc1Olx0XHR1bnNpZ25lZCBpbnQgY2lkeCA9IDAsIHNpZHggPSAwO1xuMzI3NjpcdFx0c3RydWN0IGRhbW9zICpzaXRlcjtcbjMyNzc6XHRcbjMyNzg6XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzaXRlciwgYykge1xuMzI3OTpcdFx0XHRpZiAoc2l0ZXIgPT0gcylcbjMyODA6XHRcdFx0XHRicmVhaztcbjMyODE6XHRcdFx0c2lkeCYjNDM7JiM0Mzs7XG4zMjgyOlx0XHR9XG4zMjgzOlx0XHR0cmFjZV9kYW1vc19lc3ooY2lkeCwgc2lkeCwgcXVvdGEtXHUwMDNlZXN6KTtcbjMyODQ6XHR9XG4zMjg1Olx0XG4zMjg2Olx0c3RhdGljIHZvaWQgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbjMyODc6XHRcdFx0c3RydWN0IGRhbW9uX2N0eCAqYylcbjMyODg6XHR7XG4zMjg5Olx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuMzI5MDpcdFxuMzI5MTpcdFx0dCA9IHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbTtcbjMyOTI6XHRcdGlmICghdClcbjMyOTM6XHRcdFx0cmV0dXJuO1xuMzI5NDpcdFx0aWYgKCFjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQpXG4zMjk1Olx0XHRcdHJldHVybjtcbjMyOTY6XHRcdGlmIChjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkpXG4zMjk3Olx0XHRcdHJldHVybjtcbjMyOTg6XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG4zMjk5Olx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbjMzMDA6XHR9XG4zMzAxOlx0XG4zMzAyOlx0c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbjMzMDM6XHR7XG4zMzA0Olx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXHUwMDI2cy1cdTAwM2VxdW90YTtcbjMzMDU6XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4zMzA2Olx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuMzMwNzpcdFx0dW5zaWduZWQgbG9uZyBjdW11bGF0ZWRfc3osIGNhY2hlZF9lc3o7XG4zMzA4Olx0XHR1bnNpZ25lZCBpbnQgc2NvcmUsIG1heF9zY29yZSA9IDA7XG4zMzA5Olx0XG4zMzEwOlx0XHRpZiAoIXF1b3RhLVx1MDAzZW1zIFx1MDAyNlx1MDAyNiAhcXVvdGEtXHUwMDNlc3ogXHUwMDI2XHUwMDI2IGxpc3RfZW1wdHkoXHUwMDI2cXVvdGEtXHUwMDNlZ29hbHMpKVxuMzMxMTpcdFx0XHRyZXR1cm47XG4zMzEyOlx0XG4zMzEzOlx0XHQvKiBGaXJzdCBjaGFyZ2Ugd2luZG93ICovXG4zMzE0Olx0XHRpZiAoIXF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogXHUwMDI2XHUwMDI2ICFxdW90YS1cdTAwM2VjaGFyZ2VkX2Zyb20pIHtcbjMzMTU6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcbjMzMTY6XHRcdFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbjMzMTc6XHRcdFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkpXG4zMzE4Olx0XHRcdFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcbjMzMTk6XHRcdH1cbjMzMjA6XHRcbjMzMjE6XHRcdC8qIE5ldyBjaGFyZ2Ugd2luZG93IHN0YXJ0cyAqL1xuMzMyMjpcdFx0aWYgKCF0aW1lX2luX3JhbmdlX29wZW4oamlmZmllcywgcXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tLFxuMzMyMzpcdFx0XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tICYjNDM7XG4zMzI0Olx0XHRcdFx0XHRtc2Vjc190b19qaWZmaWVzKHF1b3RhLVx1MDAzZXJlc2V0X2ludGVydmFsKSkpIHtcbjMzMjU6XHRcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG4zMzI2Olx0XHRcdFx0cy1cdTAwM2VzdGF0LnF0X2V4Y2VlZHMmIzQzOyYjNDM7O1xuMzMyNzpcdFx0XHRxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX3N6ICYjNDM7PSBxdW90YS1cdTAwM2VjaGFyZ2VkX3N6O1xuMzMyODpcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VkX2Zyb20gPSBqaWZmaWVzO1xuMzMyOTpcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VkX3N6ID0gMDtcbjMzMzA6XHRcdFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkpXG4zMzMxOlx0XHRcdFx0Y2FjaGVkX2VzeiA9IHF1b3RhLVx1MDAzZWVzejtcbjMzMzI6XHRcdFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbjMzMzM6XHRcdFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkgXHUwMDI2XHUwMDI2IHF1b3RhLVx1MDAzZWVzeiAhPSBjYWNoZWRfZXN6KVxuMzMzNDpcdFx0XHRcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XG4zMzM1Olx0XHR9XG4zMzM2Olx0XG4zMzM3Olx0XHRkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbShxdW90YSwgYyk7XG4zMzM4Olx0XG4zMzM5Olx0XHRpZiAoIWMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUpXG4zMzQwOlx0XHRcdHJldHVybjtcbjMzNDE6XHRcbjMzNDI6XHRcdC8qIEZpbGwgdXAgdGhlIHNjb3JlIGhpc3RvZ3JhbSAqL1xuMzM0MzpcdFx0bWVtc2V0KGMtXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0sIDAsXG4zMzQ0Olx0XHRcdFx0c2l6ZW9mKCpjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtKSAqXG4zMzQ1Olx0XHRcdFx0KERBTU9TX01BWF9TQ09SRSAmIzQzOyAxKSk7XG4zMzQ2Olx0XHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xuMzM0NzpcdFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuMzM0ODpcdFx0XHRcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYykpXG4zMzQ5Olx0XHRcdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc3NgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIERBTU9OJiMzOTtzIENoYXJnZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGNoYXJnZV90YXJnZXRfZnJvbWAgYW5kIGBjaGFyZ2VfYWRkcl9mcm9tYCB3aXRoaW4gREFNT04uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIGNvZGUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBncmVwIG9yIHVzZSBteSBJREUmIzM5O3MgJiMzNDtmaW5kIHVzYWdlcyYjMzQ7IGZ1bmN0aW9uYWxpdHkgdG8gcGlucG9pbnQgZXZlcnkgaW5zdGFuY2Ugd2hlcmUgdGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgY29udGV4dHMuIEFyZSB0aGV5IHVzZWQgdG9nZXRoZXI/IERvZXMgb25lIGNhbGwgdGhlIG90aGVyPyBXaGF0IGFyZSB0aGUgY2FsbGluZyBmdW5jdGlvbnMgZG9pbmcgd2l0aCB0aGUgZGF0YT8KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBjaGFyZ2luZyBtZWNoYW5pc20mIzM5O3MgZGVzaWduLiBUaGlzIHdpbGwgcmV2ZWFsIGhvdyBEQU1PTiBkZXRlcm1pbmVzIHdoYXQgbWVtb3J5IHJlZ2lvbnMgdG8gY2hhcmdlIGFuZCBmcm9tIHdoYXQgYWRkcmVzcyB3aXRoaW4gdGhvc2UgcmVnaW9ucy4gQXJlIHRoZXNlIGZ1bmN0aW9ucyBjb3JlIHRvIHRoZSBtb25pdG9yaW5nIGFuZCBzYW1wbGluZyBsb2dpYz8gQXJlIHRoZXkgcmVsYXRlZCB0byBhbnkgc3BlY2lmaWMgREFNT04gZmVhdHVyZXMsIGxpa2UgYWRhcHRpdmUgc2FtcGxpbmcgb3IgZHluYW1pYyB0aHJlc2hvbGRpbmc/CgpJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgd2l0aGluIHRoZSBjb3JlIG1vbml0b3JpbmcgbG9vcHMsIHBvdGVudGlhbGx5IGluc2lkZSB0aGUgZGF0YSBzYW1wbGluZyBvciBwcm9jZXNzaW5nIGZ1bmN0aW9ucy4gVGhlIGB0YXJnZXRgIGxpa2VseSByZWZlcnMgdG8gYSBtZW1vcnkgcmVnaW9uIHRoZSBEQU1PTiB3YW50cyB0byB0cmFjayAoYSAmIzM0O3RhcmdldCYjMzQ7IHRvIGJlIG1vbml0b3JlZCBvciBjaGFyZ2VkKS4gVGhlIGBhZGRyYCBwb3J0aW9uIHNlZW1zIHRvIGJlIHRoZSBsb2dpY2FsIGFkZHJlc3Mgd2l0aGluIHRoYXQgcmVnaW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRhdGEgaXMgcGFzc2VkIGFyb3VuZC4gSSYjMzk7bSBhbHNvIGludGVyZXN0ZWQgaW4gaG93IHRoZXNlIGFyZSBpbml0aWFsaXplZCBhbmQgc2V0IHVwLiBBbnkgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYGRhbW9uX2NvbnRleHRgIHdpbGwgYmUgaW1wb3J0YW50LiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBkYXRhLXJhY2UgY29uY2VybnMgYXJvdW5kIHRoYXQgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMjA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hhcmdlX3RhcmdldF9mcm9tJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaD0yNzY9c3RydWN0IGRhbW9zX3F1b3RhIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMzAwLVx0dW5zaWduZWQgbG9uZyBjaGFyZ2VkX2Zyb207XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MzAxOlx0c3RydWN0IGRhbW9uX3RhcmdldCAqY2hhcmdlX3RhcmdldF9mcm9tO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTMwMi1cdHVuc2lnbmVkIGxvbmcgY2hhcmdlX2FkZHJfZnJvbTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NzMyPXN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRhbW9zX3F1b3RhX2luaXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzM4LVx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tID0gMDtcbm1tL2RhbW9uL2NvcmUuYzo3Mzk6XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xubW0vZGFtb24vY29yZS5jLTc0MC1cdHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSAwO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNjk2PXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldHMoXG4tLVxubW0vZGFtb24vY29yZS5jLTE3MjItXHRcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGRzdCkge1xubW0vZGFtb24vY29yZS5jOjE3MjM6XHRcdFx0XHRpZiAocy1cdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPT0gZHN0X3RhcmdldCkge1xubW0vZGFtb24vY29yZS5jOjE3MjQ6XHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbm1tL2RhbW9uL2NvcmUuYy0xNzI1LVx0XHRcdFx0XHRzLVx1MDAzZXF1b3RhLmNoYXJnZV9hZGRyX2Zyb20gPSAwO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNDQ5PXN0YXRpYyBib29sIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjQ1Ni1cdC8qIFNraXAgcHJldmlvdXNseSBjaGFyZ2VkIHJlZ2lvbnMgKi9cbm1tL2RhbW9uL2NvcmUuYzoyNDU3Olx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSkge1xubW0vZGFtb24vY29yZS5jOjI0NTg6XHRcdGlmICh0ICE9IHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSlcbm1tL2RhbW9uL2NvcmUuYy0yNDU5LVx0XHRcdHJldHVybiB0cnVlO1xubW0vZGFtb24vY29yZS5jLTI0NjAtXHRcdGlmIChyID09IGRhbW9uX2xhc3RfcmVnaW9uKHQpKSB7XG5tbS9kYW1vbi9jb3JlLmM6MjQ2MTpcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xubW0vZGFtb24vY29yZS5jLTI0NjItXHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4tLVxubW0vZGFtb24vY29yZS5jLTI0ODAtXHRcdH1cbm1tL2RhbW9uL2NvcmUuYzoyNDgxOlx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xubW0vZGFtb24vY29yZS5jLTI0ODItXHRcdHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSAwO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNjgyPXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNzQxLVx0XHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSkge1xubW0vZGFtb24vY29yZS5jOjI3NDI6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gdDtcbm1tL2RhbW9uL2NvcmUuYy0yNzQzLVx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSByLVx1MDAzZWFyLmVuZDtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzI3Mj1zdGF0aWMgdm9pZCBkYW1vc190cmFjZV9lc3ooc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjg1LVxubW0vZGFtb24vY29yZS5jOjMyODY6c3RhdGljIHZvaWQgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbm1tL2RhbW9uL2NvcmUuYy0zMjg3LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjkwLVxubW0vZGFtb24vY29yZS5jOjMyOTE6XHR0ID0gcXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tO1xubW0vZGFtb24vY29yZS5jLTMyOTItXHRpZiAoIXQpXG4tLVxubW0vZGFtb24vY29yZS5jLTMyOTctXHRcdHJldHVybjtcbm1tL2RhbW9uL2NvcmUuYzozMjk4Olx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbm1tL2RhbW9uL2NvcmUuYy0zMjk5LVx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4tLVxubW0vZGFtb24vY29yZS5jPTMzMDI9c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzMzNi1cbm1tL2RhbW9uL2NvcmUuYzozMzM3Olx0ZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20ocXVvdGEsIGMpO1xubW0vZGFtb24vY29yZS5jLTMzMzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNzkKCQkJCQkJCW91dHB1dDogMTg3CgkJCQkJCQl0aG91Z2h0czogNDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQ6IEtNU0FOIEFwcGxpY2FiaWxpdHkgLSBEQU1PUyBRdW90YSBNYW5hZ2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXM6IGlzIHRoaXMgYGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tYCBmdW5jdGlvbiwgd2hpY2ggaXMgcmVzZXR0aW5nIGBxdW90YS0mZ3Q7Y2hhcmdlX3RhcmdldF9mcm9tYCB0byBOVUxMIGFuZCBgcXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb21gIHRvIDAgYmFzZWQgb24gdGhlIGBjLSZndDtvcHMudGFyZ2V0X3ZhbGlkKHQpYCBjaGVjaywgcG90ZW50aWFsbHkgaW50cm9kdWNpbmcgYSBLTVNBTiBpc3N1ZT8gSXQmIzM5O3MgaGFuZGxpbmcgaW52YWxpZCB0YXJnZXQgdHJhY2tpbmcgd2l0aGluIERBTU9TIHF1b3RhcywgY2xlYW5pbmcgdXAgYWZ0ZXIgYSB0YXJnZXQgYmVjb21lcyBpbnZhbGlkLCB3aGljaCBpcyBnb29kLiBXZSBkZWZpbml0ZWx5IHdhbnQgdG8gYXZvaWQgc3RhbGUgcG9pbnRlcnMgb3IgbG9naWMgZXJyb3JzIGhlcmUuCgpCdXQsIEkmIzM5O3ZlIGNoZWNrZWQgY2FyZWZ1bGx5OgoKKiAgIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbiBvciBtb2RpZmljYXRpb24gaXMgaGFwcGVuaW5nIGhlcmUuCiogICBXZSYjMzk7cmUgbm90IGludHJvZHVjaW5nIGFueSBgY29weV90b191c2VyYCBjYWxscyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UuCiogICBUaGVyZSYjMzk7cyBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIHN0YWNrL2hlYXAgdmFyaWFibGVzIGJlaW5nIGNyZWF0ZWQgb3IgdXNlZC4gRXZlcnl0aGluZyBiZWluZyBzZXQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYHF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMYCwgYHF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tID0gMGAuCiogICBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHN0YWxlIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIFVzZS1BZnRlci1GcmVlIHNjZW5hcmlvcyBoZXJlIHdvdWxkIGJlIHBpY2tlZCB1cCBieSBLQVNBTi4KCkxldCBtZSBnbyB0aHJvdWdoIHRoZSBjcml0ZXJpYSBhZ2FpbiB0byBiZSBhYnNvbHV0ZWx5IHN1cmU6CgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOb3BlLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuCjMuICBBbGxvY2F0aW9uIG9mIGNvbXBsZXggc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBtaWdodCBiZSByZWFkIGxhdGVyPyBOb3BlLgo0LiAgQm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGE/IE5vcGUuCgpTbywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgaXMgZmFsc2UuCgpIZXJlJiMzOTtzIG15IHJlYXNvbmluZyB3aGVuIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6CgoqICAgVGhpcyBwYXRjaCYjMzk7cyBgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oKWAgZm9jdXNlcyBvbiB2YWxpZGF0aW5nIGFuZCByZXNldHRpbmcgZXhpc3RpbmcgcG9pbnRlcnMgdG8gYHN0cnVjdCBkYW1vbl90YXJnZXRgIGFuZCBpdHMgYXNzb2NpYXRlZCB0cmFja2luZyBzdGF0ZS4KKiAgIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIHVzZXIgc3BhY2UgcGF0aHMsIG9yIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMgaW50cm9kdWNlZCBvciBpbXBhY3RlZCBieSB0aGlzIGNoYW5nZS4KKiAgIEFueSBidWdzIGluIHRoaXMgc3BlY2lmaWMgc2VjdGlvbiB3b3VsZCBtb3N0IGxpa2VseSBiZSByZWxhdGVkIHRvIHN0YWxlIHBvaW50ZXIgYWNjZXNzIG9yIGlzc3VlcyBhcm91bmQgbGlmZXRpbWVzICh3aGljaCBLQVNBTiBhbHJlYWR5IGVmZmVjdGl2ZWx5IGNvdmVycyksIG5vdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuCiogICBUaGVyZWZvcmUsIHNwZWNpZmljIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkIGhlcmUuCgpJIHRoaW5rIHdlJiMzOTtyZSBnb29kIHRvIGdvLiBMZXQmIzM5O3MgaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDIwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oKSBpbiBtbS9kYW1vbi9jb3JlLmMgdG8gcmVzZXQgcXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tIHRvIE5VTEwgYW5kIHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gdG8gMCB3aGVuIGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSBpbmRpY2F0ZXMgdGhlIHRhcmdldCBpcyBubyBsb25nZXIgdmFsaWQuXG5cblRoaXMgY2hhbmdlIG1vZGlmaWVzIGludGVybmFsIERBTU9TIHF1b3RhIHRyYWNraW5nIGxvZ2ljIHRvIGhhbmRsZSBpbnZhbGlkIHRhcmdldCBwb2ludGVycy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzIG9yIHBhZGRpbmcsIGRvZXMgbm90IGNvcHkgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBkYW5nbGluZy9zdGFsZSB0YXJnZXQgcG9pbnRlciBkZXJlZmVyZW5jZXMgd291bGQgYmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4vVUFGIGRldGVjdG9ycyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oKSBpbiBtbS9kYW1vbi9jb3JlLmMgdG8gcmVzZXQgcXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tIHRvIE5VTEwgYW5kIHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gdG8gMCB3aGVuIGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSBpbmRpY2F0ZXMgdGhlIHRhcmdldCBpcyBubyBsb25nZXIgdmFsaWQuXG5cblRoaXMgY2hhbmdlIG1vZGlmaWVzIGludGVybmFsIERBTU9TIHF1b3RhIHRyYWNraW5nIGxvZ2ljIHRvIGhhbmRsZSBpbnZhbGlkIHRhcmdldCBwb2ludGVycy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzIG9yIHBhZGRpbmcsIGRvZXMgbm90IGNvcHkgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBkYW5nbGluZy9zdGFsZSB0YXJnZXQgcG9pbnRlciBkZXJlZmVyZW5jZXMgd291bGQgYmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4vVUFGIGRldGVjdG9ycyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6NTQ6MDEuNzMxODkwNTgzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEwNzgyNDU4ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tXCIsXG4gICAgXCJkYW1vc19hZGp1c3RfcXVvdGFcIixcbiAgICBcImtkYW1vbmRfYXBwbHlfc2NoZW1lc1wiLFxuICAgIFwiZGFtb25fdmFfdGFyZ2V0X3ZhbGlkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKCkgaW4gbW0vZGFtb24vY29yZS5jIHRvIHJlc2V0IHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gdG8gTlVMTCBhbmQgcXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gdG8gMCB3aGVuIGMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgaW5kaWNhdGVzIHRoZSB0YXJnZXQgaXMgbm8gbG9uZ2VyIHZhbGlkLlxcblxcblRoaXMgY2hhbmdlIG1vZGlmaWVzIGludGVybmFsIERBTU9TIHF1b3RhIHRyYWNraW5nIGxvZ2ljIHRvIGhhbmRsZSBpbnZhbGlkIHRhcmdldCBwb2ludGVycy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzIG9yIHBhZGRpbmcsIGRvZXMgbm90IGNvcHkgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBkYW5nbGluZy9zdGFsZSB0YXJnZXQgcG9pbnRlciBkZXJlZmVyZW5jZXMgd291bGQgYmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4vVUFGIGRldGVjdG9ycyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT04gY29yZSBzdWJzeXN0ZW0gaW4gbW0vZGFtb24vY29yZS5jLCBhZGRpbmcgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oKSBhbmQgY2FsbGluZyBpdCBmcm9tIGRhbW9zX2FkanVzdF9xdW90YSgpIHRvIGludmFsaWRhdGUgc3RhbGUgY2hhcmdlIHRhcmdldCBwb2ludGVycyB3aGVuIHRhcmdldF92YWxpZCgpIHJldHVybnMgZmFsc2UuIFRoaXMgaXMgZXhlY3V0YWJsZSwgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIGFjY2Vzc2libGUgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjU0OjAxLjczMTg5NTkzM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk5NzI4NjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWNjZGNkNzU1MzM5NzI3ZTQ2MDZkNTllOTMxYzI4YjNkODU5MTBhOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDIwOjU0OjAwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xcbmluZGV4IGNlOGM2Zjk5MTA2ZWQuLjJjNThiZTllZGJkZTQgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXFxuKysrIGIvbW0vZGFtb24vY29yZS5jXFxuQEAgLTMyODMsNiArMzI4MywyMiBAQCBzdGF0aWMgdm9pZCBkYW1vc190cmFjZV9lc3ooc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzLFxcbiBcXHR0cmFjZV9kYW1vc19lc3ooY2lkeCwgc2lkeCwgcXVvdGEtXFx1MDAzZWVzeik7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXFxuK1xcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcXG4rXFxuK1xcdHQgPSBxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tO1xcbitcXHRpZiAoIXQpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aWYgKCFjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGlmIChjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbitcXHRxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuIHtcXG4gXFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG5AQCAtMzMxOCw2ICszMzM0LDggQEAgc3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4gXFx0XFx0XFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcXG4gXFx0fVxcbiBcXG4rXFx0ZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20ocXVvdGEsIGMpO1xcbitcXG4gXFx0aWYgKCFjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6NTQ6MDIuMzMyMjAxNzYyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMzgxNDQ2MzMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb21cIixcbiAgICBcImRhbW9zX2FkanVzdF9xdW90YVwiLFxuICAgIFwia2RhbW9uZF9hcHBseV9zY2hlbWVzXCIsXG4gICAgXCJkYW1vbl92YV90YXJnZXRfdmFsaWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT04gY29yZSBzdWJzeXN0ZW0gaW4gbW0vZGFtb24vY29yZS5jLCBhZGRpbmcgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oKSBhbmQgY2FsbGluZyBpdCBmcm9tIGRhbW9zX2FkanVzdF9xdW90YSgpIHRvIGludmFsaWRhdGUgc3RhbGUgY2hhcmdlIHRhcmdldCBwb2ludGVycyB3aGVuIHRhcmdldF92YWxpZCgpIHJldHVybnMgZmFsc2UuIFRoaXMgaXMgZXhlY3V0YWJsZSwgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIGFjY2Vzc2libGUgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWNjZGNkNzU1MzM5NzI3ZTQ2MDZkNTllOTMxYzI4YjNkODU5MTBhOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMjA6NTQ6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IGNlOGM2Zjk5MTA2ZWQuLjJjNThiZTllZGJkZTQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTMyODMsNiArMzI4MywyMiBAQCBzdGF0aWMgdm9pZCBkYW1vc190cmFjZV9lc3ooc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzLFxuIFx0dHJhY2VfZGFtb3NfZXN6KGNpZHgsIHNpZHgsIHF1b3RhLVx1MDAzZWVzeik7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG4rXHRcdHN0cnVjdCBkYW1vbl9jdHggKmMpXG4re1xuK1x0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbitcbitcdHQgPSBxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb207XG4rXHRpZiAoIXQpXG4rXHRcdHJldHVybjtcbitcdGlmICghYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAoYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpKVxuK1x0XHRyZXR1cm47XG4rXHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xuK1x0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4ge1xuIFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG5AQCAtMzMxOCw2ICszMzM0LDggQEAgc3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbiBcdFx0XHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xuIFx0fVxuIFxuK1x0ZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20ocXVvdGEsIGMpO1xuK1xuIFx0aWYgKCFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxuIFx0XHRyZXR1cm47XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDowMi4zMzIyMDMwOTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NjE3MzUwMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBwYXRjaCwgYXMgaXQgdW5mb2xkcyBpbiBteSBtaW5kOlxuXG4qKkFuYWx5emluZyBhIERBTU9OIFBhdGNoOiBJbnZhbGlkIENoYXJnZSBUYXJnZXQgUmVzZXQqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgdGhlIG1haW4gbW9kaWZpY2F0aW9uIGlzIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBUaGUga2V5IGFkZGl0aW9uIHNlZW1zIHRvIGJlIHRoaXMgbmV3IGZ1bmN0aW9uLCBgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSwgc3RydWN0IGRhbW9uX2N0eCAqYylgLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gaXMgcHJldHR5IGNsZWFyLCBpdCBpbmRpY2F0ZXMgYW4gYWRqdXN0bWVudCByZWxhdGVkIHRvIHF1b3RhIGNoYXJnZXMsIHNwZWNpZmljYWxseSByZXNldHRpbmcgYW4gXCJpbnZhbGlkXCIgY2hhcmdlIHRhcmdldC4gQW5kIGl0IGxvb2tzIGxpa2UgaXQncyBjYWxsZWQgZnJvbSB3aXRoaW4gYGRhbW9zX2FkanVzdF9xdW90YWAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZ2l2ZW4gdGhlIG5hbWluZy5cblxuTm93LCBJIG5lZWQgbW9yZSBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIHJlc2V0IGlzIG5lY2Vzc2FyeSBhbmQgd2hhdCdzIGNvbnNpZGVyZWQgXCJpbnZhbGlkXCIgaW4gdGhpcyBzY2VuYXJpby4gVGltZSB0byBicmluZyBvdXQgdGhlIGJpZyBndW5zOiBJJ2xsIHVzZSBteSBzdGFuZGFyZCB0b29scywgcHJvYmFibHkgYHJlYWQtZmlsZWAgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIHBvdGVudGlhbGx5IG90aGVyIHJlbGV2YW50IGZpbGVzLCBvciBpZiB0aGF0IGRvZXNuJ3QgeWllbGQgcmVzdWx0cyBxdWlja2x5IGVub3VnaCwgSSdsbCBzd2l0Y2ggdG8gYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgdXNhZ2VzIG9mIHRoZSB0ZXJtcyBvciBjb25jZXB0cyBhcm91bmQgdGhlIG5ldyBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgREFNT04ncyBxdW90YSBtYW5hZ2VtZW50IGlzIGNydWNpYWwsIGFzIGlzIGZpZ3VyaW5nIG91dCB3aGF0IHRyaWdnZXJzIHRoaXMgZnVuY3Rpb24sIGFuZCB3aGF0IFwiaW52YWxpZFwiIHByZWNpc2VseSBtZWFucyBpbiB0aGlzIERBTU9OIGNvbnRleHQuIFRoaXMgaXMgYWxsIGFib3V0IGdldHRpbmcgdGhlIGJyb2FkZXIgcGljdHVyZSB0byBldmFsdWF0ZSB0aGUgc291bmRuZXNzIGFuZCB0aGUgZGVzaWduIGNob2ljZSBvZiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDkwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDowOS45NDk1NTYyMTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyODAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMyODA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzI4MTpcXHRcXHRcXHRzaWR4Kys7XFxuMzI4MjpcXHRcXHR9XFxuMzI4MzpcXHRcXHR0cmFjZV9kYW1vc19lc3ooY2lkeCwgc2lkeCwgcXVvdGEtXFx1MDAzZWVzeik7XFxuMzI4NDpcXHR9XFxuMzI4NTpcXHRcXG4zMjg2OlxcdHN0YXRpYyB2b2lkIGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXFxuMzI4NzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbjMyODg6XFx0e1xcbjMyODk6XFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcXG4zMjkwOlxcdFxcbjMyOTE6XFx0XFx0dCA9IHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb207XFxuMzI5MjpcXHRcXHRpZiAoIXQpXFxuMzI5MzpcXHRcXHRcXHRyZXR1cm47XFxuMzI5NDpcXHRcXHRpZiAoIWMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQpXFxuMzI5NTpcXHRcXHRcXHRyZXR1cm47XFxuMzI5NjpcXHRcXHRpZiAoYy1cXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSlcXG4zMjk3OlxcdFxcdFxcdHJldHVybjtcXG4zMjk4OlxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbjMyOTk6XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSAwO1xcbjMzMDA6XFx0fVxcbjMzMDE6XFx0XFxuMzMwMjpcXHRzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbjMzMDM6XFx0e1xcbjMzMDQ6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG4zMzA1OlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuMzMwNjpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xcbjMzMDc6XFx0XFx0dW5zaWduZWQgbG9uZyBjdW11bGF0ZWRfc3osIGNhY2hlZF9lc3o7XFxuMzMwODpcXHRcXHR1bnNpZ25lZCBpbnQgc2NvcmUsIG1heF9zY29yZSA9IDA7XFxuMzMwOTpcXHRcXG4zMzEwOlxcdFxcdGlmICghcXVvdGEtXFx1MDAzZW1zIFxcdTAwMjZcXHUwMDI2ICFxdW90YS1cXHUwMDNlc3ogXFx1MDAyNlxcdTAwMjYgbGlzdF9lbXB0eShcXHUwMDI2cXVvdGEtXFx1MDAzZWdvYWxzKSlcXG4zMzExOlxcdFxcdFxcdHJldHVybjtcXG4zMzEyOlxcdFxcbjMzMTM6XFx0XFx0LyogRmlyc3QgY2hhcmdlIHdpbmRvdyAqL1xcbjMzMTQ6XFx0XFx0aWYgKCFxdW90YS1cXHUwMDNldG90YWxfY2hhcmdlZF9zeiBcXHUwMDI2XFx1MDAyNiAhcXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSkge1xcbjMzMTU6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XFxuMzMxNjpcXHRcXHRcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbjMzMTc6XFx0XFx0XFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkpXFxuMzMxODpcXHRcXHRcXHRcXHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xcbjMzMTk6XFx0XFx0fVxcbjMzMjA6XFx0XFxuMzMyMTpcXHRcXHQvKiBOZXcgY2hhcmdlIHdpbmRvdyBzdGFydHMgKi9cXG4zMzIyOlxcdFxcdGlmICghdGltZV9pbl9yYW5nZV9vcGVuKGppZmZpZXMsIHF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20sXFxuMzMyMzpcXHRcXHRcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tICtcXG4zMzI0OlxcdFxcdFxcdFxcdFxcdG1zZWNzX3RvX2ppZmZpZXMocXVvdGEtXFx1MDAzZXJlc2V0X2ludGVydmFsKSkpIHtcXG4zMzI1OlxcdFxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG4zMzI2OlxcdFxcdFxcdFxcdHMtXFx1MDAzZXN0YXQucXRfZXhjZWVkcysrO1xcbjMzMjc6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogKz0gcXVvdGEtXFx1MDAzZWNoYXJnZWRfc3o7XFxuMzMyODpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcXG4zMzI5OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6ID0gMDtcXG4zMzMwOlxcdFxcdFxcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxcbjMzMzE6XFx0XFx0XFx0XFx0Y2FjaGVkX2VzeiA9IHF1b3RhLVxcdTAwM2Vlc3o7XFxuMzMzMjpcXHRcXHRcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbjMzMzM6XFx0XFx0XFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgcXVvdGEtXFx1MDAzZWVzeiAhPSBjYWNoZWRfZXN6KVxcbjMzMzQ6XFx0XFx0XFx0XFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcXG4zMzM1OlxcdFxcdH1cXG4zMzM2OlxcdFxcbjMzMzc6XFx0XFx0ZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20ocXVvdGEsIGMpO1xcbjMzMzg6XFx0XFxuMzMzOTpcXHRcXHRpZiAoIWMtXFx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxcbjMzNDA6XFx0XFx0XFx0cmV0dXJuO1xcbjMzNDE6XFx0XFxuMzM0MjpcXHRcXHQvKiBGaWxsIHVwIHRoZSBzY29yZSBoaXN0b2dyYW0gKi9cXG4zMzQzOlxcdFxcdG1lbXNldChjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSwgMCxcXG4zMzQ0OlxcdFxcdFxcdFxcdHNpemVvZigqYy1cXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0pICpcXG4zMzQ1OlxcdFxcdFxcdFxcdChEQU1PU19NQVhfU0NPUkUgKyAxKSk7XFxuMzM0NjpcXHRcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xcbjMzNDc6XFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcXG4zMzQ4OlxcdFxcdFxcdFxcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYykpXFxuMzM0OTpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6NTQ6MDkuOTQ5NzIxMzYyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA2MTI5NzM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqREFNT04gS2NvbmZpZyBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBncmFudWxhci4gQmVmb3JlIEkgZGl2ZSBpbnRvIGFueSBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZykgaW1wbGVtZW50YXRpb24gZGV0YWlscywgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIEtjb25maWcgZGVwZW5kZW5jaWVzLiBJIGhhdmUgdG8gdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCdzIGNydWNpYWwgSSBkb24ndCBvdmVybG9vayBhbnkgcG90ZW50aWFsbHkgb2JzY3VyZSwgYnV0IHZpdGFsLCBjb25maWd1cmF0aW9ucy4gSXQncyBhIHF1aWNrIHNhbml0eSBjaGVjayBhdCB0aGlzIHN0YWdlIHRvIG1ha2Ugc3VyZSBhbGwgdGhlIGJ1aWxkaW5nIGJsb2NrcyBhcmUgaW4gcGxhY2UgYW5kIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHNldCBvZiBjb25maWd1cmFibGUgZmVhdHVyZXMuIFRoaXMgYWxzbyBoZWxwcyBwbGFuIHRoZSBuZXh0IHN0ZXBzLCB0byBlbnN1cmUgYSBjb21wbGV0ZSBhbmQgc3VjY2Vzc2Z1bCBpbXBsZW1lbnRhdGlvbi4gS25vd2luZyB0aGUgS2NvbmZpZyBvcHRpb25zIHdpbGwgaW5mb3JtIGhvdyBJIGNvbmZpZ3VyZSBEQU1PTiBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZSBnaXZlbiB0aGUgdGFyZ2V0IHdvcmtsb2FkLCBlc3BlY2lhbGx5IGZvciBwb3RlbnRpYWwgdHJhZGUtb2ZmcyBhbmQgcGVyZm9ybWFuY2UgdHVuaW5nIHBvc3NpYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MTksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjU0OjEyLjAxMTAyMzE5MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDUzODE5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxubW0vZGFtb24vS2NvbmZpZy00LVxcbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWctNjktXFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWctODktXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTA5LVxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDoxMi4wOTU1Njc4NTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTAzNDIyNDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucyBmb3IgRGFtb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IGdyYW51bGFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBEYW1vbiB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCB0aGUgYmVzdCBzdGFydGluZyBwb2ludCwgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBjYW5vbmljYWwgc291cmNlIGZvciB0aGVzZSB0aGluZ3MuIEkga25vdyB0aGF0IGZpbGUgd2lsbCBzcGVsbCBvdXQgKmV4YWN0bHkqIHdoYXQncyBhdmFpbGFibGUsIHdoaWNoIG90aGVyIGZlYXR1cmVzIG9yIHNldHRpbmdzIGl0IHJlbGllcyBvbiwgYW5kIHdoYXQgdGhlIGRlZmF1bHQgYmVoYXZpb3JzIGFyZS4gSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUsIGFuZCB0aGUgS2NvbmZpZyBmaWxlIGdpdmVzIG1lIHRoYXQsIGVzc2VudGlhbGx5IGFsbG93aW5nIG1lIHRvIGJ1aWxkIHRoZSBiaWcgcGljdHVyZS4gVGhpcyBpcyB0aGUgc29saWQgZm91bmRhdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZGFtb24gaXMgY29uZmlndXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU3NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjU0OjEzLjk5ODk5MzI1OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdG1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBEQU1PTlxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXFxuICAgOTpcXHRcXHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxcbiAgMTA6XFx0XFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxcbiAgMTM6XFx0XFx0ICBtb3JlIGluZm9ybWF0aW9uLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxuICAxNjpcXHRcXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gREFNT05cXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxcbiAgMjA6XFx0XFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcXG4gIDIxOlxcdFxcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cXG4gIDIyOlxcdFxcdCAgb25seSBkZXZlbG9wbWVudCBhbmQgdGVzdCBzZXR1cHMuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDI1OlxcdFxcbiAgMjY6XFx0Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG4gIDI3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDI5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICAzMDpcXHRcXHRoZWxwXFxuICAzMTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgMzQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgREFNT05fVkFERFJcXG4gIDM5OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxuICA0MTpcXHRcXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4gIDQyOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDQzOlxcdFxcdGhlbHBcXG4gIDQ0OlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbiAgNDU6XFx0XFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXFxuICA0NjpcXHRcXG4gIDQ3OlxcdGNvbmZpZyBEQU1PTl9QQUREUlxcbiAgNDg6XFx0XFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxuICA1MDpcXHRcXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4gIDUxOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDUyOlxcdFxcdGhlbHBcXG4gIDUzOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbiAgNTQ6XFx0XFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG4gIDU3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDU4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgNTk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDYwOlxcdFxcdGhlbHBcXG4gIDYxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDYyOlxcdFxcbiAgNjM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDY0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICA2NTpcXHRcXG4gIDY2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDY3OlxcdFxcbiAgNjg6XFx0Y29uZmlnIERBTU9OX1NZU0ZTXFxuICA2OTpcXHRcXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuICA3MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxuICA3MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA3MjpcXHRcXHRoZWxwXFxuICA3MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxcbiAgNzQ6XFx0XFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cXG4gIDc1OlxcdFxcbiAgNzY6XFx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG4gIDc3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNzg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICA3OTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgODA6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDoxMy45OTkxNTEwMTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjYyNjg1MTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGRhbW9zX2FkanVzdF9xdW90YWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uIGlzIHVzZWQgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBEQU1PTiBjb3JlIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRyaWdnZXJzIHRoZSBuZWVkIHRvIGFkanVzdCB0aGUgcXVvdGEsIGFuZCB3aGF0IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGxvb2tzIGxpa2Ugd2hlbiB0aGF0IGhhcHBlbnMuIEFyZSB0aGVyZSBzcGVjaWZpYyBzY2VuYXJpb3Mgb3IgZXZlbnRzIHRoYXQgbGVhZCB0byBpdHMgaW52b2NhdGlvbj8gSSBzaG91bGQgYWxzbyBxdWlja2x5IGFzc2VzcyBhbnkgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHBhc3NlZCBpbnRvIHRoZSBmdW5jdGlvbiwgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgaW5mb3JtYXRpb24gaXQncyB3b3JraW5nIHdpdGguIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgY29kZSBhbmQgc3RhcnQgbG9va2luZyBmb3IgdGhvc2UgZnVuY3Rpb24gY2FsbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MjcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjU0OjE2LjI2MTgzOTgyMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkxMTk0NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfYWRqdXN0X3F1b3RhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zMjg2PXN0YXRpYyB2b2lkIGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzMwMS1cXG5tbS9kYW1vbi9jb3JlLmM6MzMwMjpzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy0zMzAzLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzg1PXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0MDAtXFxubW0vZGFtb24vY29yZS5jOjM0MDE6XFx0XFx0ZGFtb3NfYWRqdXN0X3F1b3RhKGMsIHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zNDAyLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6NTQ6MTYuMzQwOTYzODM4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNTU3MDE0MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBhbmQgREFNT04ncyBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBtaW5kIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBEQU1PTiBvcGVyYXRpb25zIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aG9zZSBzeXNmcyBlbnRyeSBwb2ludHMuIEkga25vdyBEQU1PTiBpcyBhIHBvd2VyZnVsIG1lbW9yeSBtb25pdG9yaW5nIGFuZCBtYW5hZ2luZyBzdWJzeXN0ZW0sIHNvIEkgbmVlZCB0byBwaWVjZSB0b2dldGhlciBob3cgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgZml0cyBpbnRvIHRoZSBwdXp6bGUsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdGhlIHN5c2ZzIGludGVyZmFjZS4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBmbG93IG9mIGluZm9ybWF0aW9uIOKAkyBob3cgYXJlIHNjaGVtZXMgZGVmaW5lZCwgaG93IGFyZSB0aGV5IGFwcGxpZWQsIGFuZCB3aGF0J3MgdGhlIHJvbGUgb2YgdGhvc2Ugc3lzZnMgZW50cmllcyBpbiB0aGlzIHByb2Nlc3M/IEkgbmVlZCB0byBhbmFseXplIGhvdyBpdCBtYW5hZ2VzIG1lbW9yeSByZWdpb25zIGFuZCBvcHRpbWl6ZXMgcGVyZm9ybWFuY2UuIFRoZSBpbnRlcmFjdGlvbiB3aXRoIHRob3NlIGVudHJ5IHBvaW50cyBpcyBjcml0aWNhbCBiZWNhdXNlIEkgd2FudCB0byBncmFzcCBleGFjdGx5IGhvdyBpdCdzIGNvbmZpZ3VyZWQgYW5kIGNvbnRyb2xsZWQuIEknbSBjb25zaWRlcmluZyBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG9yIGNvbmZsaWN0cyB3aXRoIG90aGVyIHN5c3RlbSBjb21wb25lbnRzLCB0b28uIEkgd2FudCB0byBidWlsZCBhIGNvbXBsZXRlIG1lbnRhbCBtb2RlbCBvZiB0aGlzIHBhcnQgb2YgREFNT04ncyBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDoxOC41OTY2NjkwOTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzgwOlxcdFxcdFxcdHNpZHgrKztcXG4zMzgxOlxcdFxcdH1cXG4zMzgyOlxcdFxcdHRyYWNlX2NhbGxfX2RhbW9zX3N0YXRfYWZ0ZXJfYXBwbHlfaW50ZXJ2YWwoY2lkeCwgc2lkeCwgXFx1MDAyNnMtXFx1MDAzZXN0YXQpO1xcbjMzODM6XFx0fVxcbjMzODQ6XFx0XFxuMzM4NTpcXHRzdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4zMzg2OlxcdHtcXG4zMzg3OlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuMzM4ODpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnM7XFxuMzM4OTpcXHRcXHRib29sIGhhc19zY2hlbWVzX3RvX2FwcGx5ID0gZmFsc2U7XFxuMzM5MDpcXHRcXHR1bnNpZ25lZCBsb25nIG1heF9yZWdpb25fc3o7XFxuMzM5MTpcXHRcXG4zMzkyOlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjKSB7XFxuMzM5MzpcXHRcXHRcXHRpZiAodGltZV9iZWZvcmUoYy1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsIHMtXFx1MDAzZW5leHRfYXBwbHlfc2lzKSlcXG4zMzk0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjMzOTU6XFx0XFxuMzM5NjpcXHRcXHRcXHRpZiAoIXMtXFx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQpXFxuMzM5NzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zMzk4OlxcdFxcbjMzOTk6XFx0XFx0XFx0aGFzX3NjaGVtZXNfdG9fYXBwbHkgPSB0cnVlO1xcbjM0MDA6XFx0XFxuMzQwMTpcXHRcXHRcXHRkYW1vc19hZGp1c3RfcXVvdGEoYywgcyk7XFxuMzQwMjpcXHRcXHR9XFxuMzQwMzpcXHRcXG4zNDA0OlxcdFxcdGlmICghaGFzX3NjaGVtZXNfdG9fYXBwbHkpXFxuMzQwNTpcXHRcXHRcXHRyZXR1cm47XFxuMzQwNjpcXHRcXG4zNDA3OlxcdFxcdG1heF9yZWdpb25fc3ogPSBkYW1vbl9yZWdpb25fc3pfbGltaXQoYyk7XFxuMzQwODpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZjLVxcdTAwM2V3YWxrX2NvbnRyb2xfbG9jayk7XFxuMzQwOTpcXHRcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xcbjM0MTA6XFx0XFx0XFx0aWYgKGMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQgXFx1MDAyNlxcdTAwMjYgYy1cXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZSlcXG4zNDExOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjM0MTI6XFx0XFx0XFx0ZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opO1xcbjM0MTM6XFx0XFx0fVxcbjM0MTQ6XFx0XFxuMzQxNTpcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xcbjM0MTY6XFx0XFx0XFx0aWYgKHRpbWVfYmVmb3JlKGMtXFx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBzLVxcdTAwM2VuZXh0X2FwcGx5X3NpcykpXFxuMzQxNzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zNDE4OlxcdFxcdFxcdGRhbW9zX3dhbGtfY29tcGxldGUoYywgcyk7XFxuMzQxOTpcXHRcXHRcXHRkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMocywgYyk7XFxuMzQyMDpcXHRcXHRcXHRzLVxcdTAwM2VsYXN0X2FwcGxpZWQgPSBOVUxMO1xcbjM0MjE6XFx0XFx0XFx0ZGFtb3NfdHJhY2Vfc3RhdChjLCBzKTtcXG4zNDIyOlxcdFxcdH1cXG4zNDIzOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Yy1cXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xcbjM0MjQ6XFx0fVxcbjM0MjU6XFx0XFxuMzQyNjpcXHQjaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxcbjM0Mjc6XFx0c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X21lcmdlX3R3b19yZWdpb25zKFxcbjM0Mjg6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqbCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcXG4zNDI5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6NTQ6MTguNTk2OTM0MzQ1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxOTMwMjY1MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgQ2hhcmdlIFRhcmdldCdzIFVzYWdlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgcXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tYC4gVGltZSB0byBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyB0aGluZyBpcyBhY3R1YWxseSAqdXNlZCouIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBpcyBnb2luZyB0byBiZSB0aGUgY3JpdGljYWwgcG9pbnQgd2hlcmUgdGhlIHF1b3RhIHN5c3RlbSBpbnRlcmZhY2VzIHdpdGggdGhlIGNoYXJnaW5nIG1lY2hhbmlzbS4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IGFsbCB0aGUgY2FsbCBzaXRlcyB0byBmdWxseSBncmFzcCBpdHMgcm9sZS4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgcGFzc2VkLCB3aGF0IGFzc3VtcHRpb25zIGFyZSBtYWRlIGFib3V0IGBxdW90YWAsIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgaG93IHRoaXMgZnVuY3Rpb24gY29udHJpYnV0ZXMgdG8gcmVzb3VyY2UgYWNjb3VudGluZy4gSXMgaXQgY2FsbGVkIHN5bmNocm9ub3VzbHkgb3IgYXN5bmNocm9ub3VzbHk/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgaWYgaXQgZmFpbHM/IEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlIHRvIGJlIGNvbmZpZGVudCBpbiBhbnkgcmVmYWN0b3Jpbmcgb3IgbW9kaWZpY2F0aW9uIHRvIHRoaXMgc3lzdGVtLiBMZXQncyBzdGFydCB3aXRoIGEgcXVpY2sgY29kZSBzZWFyY2ggYW5kIGdldCBhIHZpc3VhbCBvZiBpdHMgdXNhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMjEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjU0OjIwLjc4OTk2NDM4MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE1ODA2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hhcmdlX3RhcmdldF9mcm9tXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz03MzI9c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSAqZGFtb3NfcXVvdGFfaW5pdChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTczOC1cXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tID0gMDtcXG5tbS9kYW1vbi9jb3JlLmM6NzM5OlxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbm1tL2RhbW9uL2NvcmUuYy03NDAtXFx0cXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSAwO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE2OTY9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0cyhcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzIyLVxcdFxcdFxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBkc3QpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTcyMzpcXHRcXHRcXHRcXHRpZiAocy1cXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID09IGRzdF90YXJnZXQpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTcyNDpcXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbm1tL2RhbW9uL2NvcmUuYy0xNzI1LVxcdFxcdFxcdFxcdFxcdHMtXFx1MDAzZXF1b3RhLmNoYXJnZV9hZGRyX2Zyb20gPSAwO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTI0NDk9c3RhdGljIGJvb2wgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0NTYtXFx0LyogU2tpcCBwcmV2aW91c2x5IGNoYXJnZWQgcmVnaW9ucyAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyNDU3OlxcdGlmIChxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKSB7XFxubW0vZGFtb24vY29yZS5jOjI0NTg6XFx0XFx0aWYgKHQgIT0gcXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSlcXG5tbS9kYW1vbi9jb3JlLmMtMjQ1OS1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5tbS9kYW1vbi9jb3JlLmMtMjQ2MC1cXHRcXHRpZiAociA9PSBkYW1vbl9sYXN0X3JlZ2lvbih0KSkge1xcbm1tL2RhbW9uL2NvcmUuYzoyNDYxOlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbm1tL2RhbW9uL2NvcmUuYy0yNDYyLVxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNDgwLVxcdFxcdH1cXG5tbS9kYW1vbi9jb3JlLmM6MjQ4MTpcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcXG5tbS9kYW1vbi9jb3JlLmMtMjQ4Mi1cXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjY4Mj1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNzQxLVxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSkge1xcbm1tL2RhbW9uL2NvcmUuYzoyNzQyOlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSB0O1xcbm1tL2RhbW9uL2NvcmUuYy0yNzQzLVxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gci1cXHUwMDNlYXIuZW5kO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMyNzI9c3RhdGljIHZvaWQgZGFtb3NfdHJhY2VfZXN6KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjg1LVxcbm1tL2RhbW9uL2NvcmUuYzozMjg2OnN0YXRpYyB2b2lkIGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXFxubW0vZGFtb24vY29yZS5jLTMyODctXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjkwLVxcbm1tL2RhbW9uL2NvcmUuYzozMjkxOlxcdHQgPSBxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjkyLVxcdGlmICghdClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjk3LVxcdFxcdHJldHVybjtcXG5tbS9kYW1vbi9jb3JlLmM6MzI5ODpcXHRxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcXG5tbS9kYW1vbi9jb3JlLmMtMzI5OS1cXHRxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzMwMj1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzMzYtXFxubW0vZGFtb24vY29yZS5jOjMzMzc6XFx0ZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20ocXVvdGEsIGMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMzM4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDoyMC44NTE1NDkyODFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk2ODE1MDA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoJ3MgUmVhY2ggYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9kYW1vbi9jb3JlLmNgLCB3aGljaCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpcyB0aGUgaGVhcnQgb2YgREFNT04g4oCTIERhdGEgQWNjZXNzIE1vbml0b3JpbmcuIFRoYXQncyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50LiBUaGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgaXMgdGhpcyBzb21ldGhpbmcgSSBjYW4gZXZlbiBpbnRlcmFjdCB3aXRoIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VP1xuXG5BaCwgcmlnaHQsIHllcyEgREFNT04gaXMgbWFuYWdlYWJsZSB0aHJvdWdoIHN5c2ZzLCB3aGljaCBpcyBncmVhdC4gSSBjYW4gY29udHJvbCBpdCB1c2luZyBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4vYC4gIEkgdGhpbmsgdGhhdCBhbHNvIGRlcGVuZHMgb24gdGhvc2Ugc3lzZnMgY29uZmlnIG9wdGlvbnMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlcXVpcmVkLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHdvdWxkIGJlIGBDT05GSUdfREFNT05gLCBhbmQsIG9mIGNvdXJzZSwgYENPTkZJR19EQU1PTl9TWVNGU2AgZm9yIHRoZSBzeXNmcyBpbnRlcmZhY2UuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSBpZiBgQ09ORklHX0RBTU9OX1BBRERSYCBvciBgQ09ORklHX0RBTU9OX1ZBRERSYCBhcmUgc2V0LiBUaG9zZSBsb29rIGxpa2UgdGhleSdyZSByZWxhdGVkIHRvIG1vbml0b3Jpbmcgb3BlcmF0aW9ucywgdGFyZ2V0cywgYW5kIHNwZWNpZmljYWxseSB0aGUgYG9wcy50YXJnZXRfdmFsaWRgIGZ1bmN0aW9uLlxuXG5JJ2QgYmV0dGVyIHRyYWNrIGRvd24gd2hlcmUgYG9wcy50YXJnZXRfdmFsaWRgIGlzIGRlZmluZWQgYW5kIHVzZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhhdCBmdW5jdGlvbiBpcyBrZXkgdG8gYXNzZXNzaW5nIHRoZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYwNSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDoyMy44MTk3MDIwMDVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzg4MDEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0YXJnZXRfdmFsaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTMyODY9c3RhdGljIHZvaWQgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjkzLVxcdFxcdHJldHVybjtcXG5tbS9kYW1vbi9jb3JlLmM6MzI5NDpcXHRpZiAoIWMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQpXFxubW0vZGFtb24vY29yZS5jLTMyOTUtXFx0XFx0cmV0dXJuO1xcbm1tL2RhbW9uL2NvcmUuYzozMjk2OlxcdGlmIChjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpKVxcbm1tL2RhbW9uL2NvcmUuYy0zMjk3LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzg1PXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM0MDktXFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MzQxMDpcXHRcXHRpZiAoYy1cXHUwMDNlb3BzLnRhcmdldF92YWxpZCBcXHUwMDI2XFx1MDAyNiBjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpID09IGZhbHNlKVxcbm1tL2RhbW9uL2NvcmUuYy0zNDExLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTM3MjA9c3RhdGljIGJvb2wga2RhbW9uZF9uZWVkX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3MjYtXFxubW0vZGFtb24vY29yZS5jOjM3Mjc6XFx0aWYgKCFjdHgtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQpXFxubW0vZGFtb24vY29yZS5jLTM3MjgtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3MzAtXFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkge1xcbm1tL2RhbW9uL2NvcmUuYzozNzMxOlxcdFxcdGlmIChjdHgtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkpXFxubW0vZGFtb24vY29yZS5jLTM3MzItXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz00Nzc9c3RhdGljIGludCBfX2luaXQgZGFtb25fcGFfaW5pdGNhbGwodm9pZClcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtNDg2LVxcdFxcdC5hcHBseV9wcm9iZXMgPSBkYW1vbl9wYV9hcHBseV9wcm9iZXMsXFxubW0vZGFtb24vcGFkZHIuYzo0ODc6XFx0XFx0LnRhcmdldF92YWxpZCA9IE5VTEwsXFxubW0vZGFtb24vcGFkZHIuYy00ODgtXFx0XFx0LmFwcGx5X3NjaGVtZSA9IGRhbW9uX3BhX2FwcGx5X3NjaGVtZSxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9NjI1PXN0YXRpYyBpbnQgZGFtb3NfdmFfbWlncmF0ZV9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy02ODYtXFxubW0vZGFtb24vdmFkZHIuYzo2ODc6c3RhdGljIGJvb2wgZGFtb25fdmFfdGFyZ2V0X3ZhbGlkKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxubW0vZGFtb24vdmFkZHIuYy02ODgte1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYz05MzM9c3RhdGljIGludCBfX2luaXQgZGFtb25fdmFfaW5pdGNhbGwodm9pZClcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtOTQwLVxcdFxcdC5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzLFxcbm1tL2RhbW9uL3ZhZGRyLmM6OTQxOlxcdFxcdC50YXJnZXRfdmFsaWQgPSBkYW1vbl92YV90YXJnZXRfdmFsaWQsXFxubW0vZGFtb24vdmFkZHIuYy05NDItXFx0XFx0LmNsZWFudXBfdGFyZ2V0ID0gZGFtb25fdmFfY2xlYW51cF90YXJnZXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjU0OjIzLjkzMzU4NzE2NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjk5NzQ0NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIFZpcnR1YWwgQWRkcmVzcyBNb25pdG9yaW5nOiBBIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgc28gYGRhbW9uX3ZhX3RhcmdldF92YWxpZGAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlOyBpdCdzIHRoZSBnYXRla2VlcGVyIHRoYXQgZGV0ZXJtaW5lcyBpZiBhIG1vbml0b3JlZCBwcm9jZXNzIG9yIG1lbW9yeSByZWdpb24gaXMgc3RpbGwgbGVnaXRpbWF0ZSBpbiB0aGUgdmlydHVhbCBhZGRyZXNzIG1vbml0b3Jpbmcgc2V0dXAuIElmIGEgcHJvY2VzcyBleGl0cywgbmF0dXJhbGx5IHRoZSB0YXJnZXQgYmVjb21lcyBpbnZhbGlkLCByaWdodD8gVGhhdCdzIHdoZW4gYHRhcmdldF92YWxpZCh0KWAgZmxpcHMgdG8gZmFsc2UuICBBbmQgdGhhdCdzIHRoZSB0cmlnZ2VyIGZvciBgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oKWAgdG8gY2xlYW4gdXAgdGhlIGBxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb21gIGZpZWxkLiBNYWtlcyBzZW5zZS4gVGhpcyBjb2RlIGlzIGluIGBtbS9kYW1vbi9jb3JlLmNgLCBhbmQgdGhlIFwiV29ydGhGdXp6aW5nOiB0cnVlIVwiIGZsYWcgY2VydGFpbmx5IGNhdGNoZXMgbXkgYXR0ZW50aW9uLlxuXG5MZXQncyBzZWUgd2hhdCBlbHNlIGlzIGluIHBsYXkuIFRoZSBmb2N1cyBzeW1ib2xzIGxvb2sgbGlrZTpcblxuLSAgIGBkYW1vc19hZGp1c3RfcXVvdGFgXG4tICAgYGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tYFxuLSAgIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgXG4tICAgYGRhbW9uX3ZhX3RhcmdldF92YWxpZGBcblxuSSdtIGNoZWNraW5nIGlmIGBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbWAgYW5kIGBkYW1vc19hZGp1c3RfcXVvdGFgIGFyZSBzdGF0aWMsIGFuZCB5ZXAsIHRoZXkgYXJlLiBJbXBvcnRhbnQgZm9yIHNjb3BpbmcuIE5vdywgbGV0J3MgdHJhY2UgYGRhbW9zX2FkanVzdF9xdW90YWAuIExvb2tzIGxpa2UgaXQncyBjYWxsZWQgYnkgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AuIEFscmlnaHQsIGFuZCB0aGF0IG9uZSBpcyBjYWxsZWQgZnJvbSBga2RhbW9uZF9mbmAgLyBgZGFtb25fZm9yX2VhY2hfc2NoZW1lYCBpbiB0aGUgc2FtZSBjb3JlIGZpbGUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkzMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDoyNy42MzMzMzM4ODRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NTgwMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtkYW1vbmRfYXBwbHlfc2NoZW1lc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MzM2OT1zdGF0aWMgdm9pZCBkYW1vc190cmFjZV9zdGF0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzg0LVxcbm1tL2RhbW9uL2NvcmUuYzozMzg1OnN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbm1tL2RhbW9uL2NvcmUuYy0zMzg2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zOTExPXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5ODctXFx0XFx0LypcXG5tbS9kYW1vbi9jb3JlLmM6Mzk4ODpcXHRcXHQgKiBkbyBrZGFtb25kX2NhbGwoKSBhbmQga2RhbW9uZF9hcHBseV9zY2hlbWVzKCkgYWZ0ZXJcXG5tbS9kYW1vbi9jb3JlLmMtMzk4OS1cXHRcXHQgKiBrZGFtb25kX21lcmdlX3JlZ2lvbnMoKSBpZiBwb3NzaWJsZSwgdG8gcmVkdWNlIG92ZXJoZWFkXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDAwMi1cXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmN0eC1cXHUwMDNlc2NoZW1lcykpXFxubW0vZGFtb24vY29yZS5jOjQwMDM6XFx0XFx0XFx0a2RhbW9uZF9hcHBseV9zY2hlbWVzKGN0eCk7XFxubW0vZGFtb24vY29yZS5jLTQwMDQtXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDoyNy42OTI5MjA3ODJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA5NTAzODA2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gREFNT04gQ29udGV4dCBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgREFNT04gY29udGV4dHMgYXJlIGluaXRpYXRlZCBhbmQgZmluYWxpemVkLiBJJ20gZ29pbmcgdG8gZGlnIGludG8gYGtkYW1vbmRfZm5gIGZpcnN0LCBhcyB0aGF0IHNlZW1zIGxpa2UgdGhlIHByaW1hcnkgZnVuY3Rpb24gZm9yIHRoZSBrZXJuZWwtbGV2ZWwgZGFlbW9uIG9wZXJhdGlvbnMuIEknbSBpbnRlcmVzdGVkIGluIGhvdyBpdCBraWNrcyB0aGluZ3Mgb2ZmLiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc3lzZnMgaW50ZXJmYWNlLiBJIGtub3cgdGhhdCdzIHRoZSB1c2VyLXNwYWNlIGVudHJ5IHBvaW50LCBidXQgaG93IGRvZXMgaXQgbWFwIHRvIHRoZSBpbnRlcm5hbCBvcGVyYXRpb25zPyBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIHN5bWJvbHMgcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IHN0YXJ0aW5nIGEgbmV3IGNvbnRleHQgYW5kIGNvbW1pdHRpbmcgb3IgZmluYWxpemluZyBhbiBleGlzdGluZyBvbmUuIElkZW50aWZ5aW5nIHRob3NlIGhvb2tzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYW5kIG1ha2luZyBhbnkgbmVjZXNzYXJ5IGFkanVzdG1lbnRzIHRvIGVuc3VyZSBwZXJmb3JtYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MDEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDoyOS43ODc5NjE3MDNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MTM4NTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX2NvbW1pdF90YXJnZXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xNjgwPXN0YXRpYyB2b2lkIGRhbW9uX3JldmVydF90YXJnZXRfY29tbWl0cyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTY5NS1cXG5tbS9kYW1vbi9jb3JlLmM6MTY5NjpzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRzKFxcbm1tL2RhbW9uL2NvcmUuYy0xNjk3LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTE4Nzk9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTkwNy1cXHRcXHRyZXR1cm4gZXJyO1xcbm1tL2RhbW9uL2NvcmUuYzoxOTA4OlxcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXRzKGRzdCwgc3JjKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTkwOS1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDoyOS44NTMxMDYwMjZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk3MDUxNDQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgREFNT04gU3lzdGVtIEZpbGUgQ29tbWl0KipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMuIEknbSB0aGlua2luZyB0aGUgbGlrZWx5IGFyZWEgZm9yIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5IGlzIGdvaW5nIHRvIGJlIGluIGBtbS9kYW1vbi9zeXNmcy5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gcHJldHR5IGNlcnRhaW4gdGhlcmUgd2lsbCBiZSBhIHJvdXRpbmUsIGxpa2VseSBuYW1lZCBzb21ldGhpbmcgbGlrZSBgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0YCBvciBhIGZ1bmN0aW9uIHdpdGggYSBzaW1pbGFyIG5hbWluZyBjb252ZW50aW9uLCByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgaW5wdXQgb3IgY29tbWFuZHMgdGllZCB0byB0aGUgc3lzZnMgaW50ZXJmYWNlLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIExldCdzIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM2MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjU0OjMxLjgyMzYzMjE3N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEzMDM4NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTEwODM9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTA4LSAqIEluIGRldGFpbCwgYWxsIERBTU9OIEFQSSBjYWxsZXJzIGRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiBmb3IgaW5pdGlhbFxcbm1tL2RhbW9uL2NvcmUuYzoxMTA5OiAqIHNldHVwIG9mIGRhbW9uX2N0eCBiZWZvcmUgY2FsbGluZyBkYW1vbl9zdGFydCgpLiAgU29tZSBvZiB0aGUgQVBJIGNhbGxlcnNcXG5tbS9kYW1vbi9jb3JlLmMtMTExMC0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVxcdTAwM2UgZGFtb25fY29tbWl0KCkgZm9yXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjAzOT1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA0MS0vKlxcbm1tL2RhbW9uL2NvcmUuYzoyMDQyOiAqIF9fZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyBtb25pdG9yaW5nIHdpdGggZ2l2ZW4gY29udGV4dC5cXG5tbS9kYW1vbi9jb3JlLmMtMjA0My0gKiBAY3R4OlxcdG1vbml0b3JpbmcgY29udGV4dFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwNDgtICovXFxubW0vZGFtb24vY29yZS5jOjIwNDk6c3RhdGljIGludCBfX2RhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtMjA1MC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA3MS0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MjA3MjogKiBkYW1vbl9zdGFydCgpIC0gU3RhcnRzIHRoZSBtb25pdG9yaW5ncyBmb3IgYSBnaXZlbiBncm91cCBvZiBjb250ZXh0cy5cXG5tbS9kYW1vbi9jb3JlLmMtMjA3My0gKiBAY3R4czpcXHRhbiBhcnJheSBvZiB0aGUgcG9pbnRlcnMgZm9yIGNvbnRleHRzIHRvIHN0YXJ0IG1vbml0b3JpbmdcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDgwLSAqIEBleGNsdXNpdmUgaXMgdHJ1ZSBhbmQgYSBncm91cCBvZiB0aHJlYWRzIHRoYXQgY3JlYXRlZCBieSBvdGhlclxcbm1tL2RhbW9uL2NvcmUuYzoyMDgxOiAqICdkYW1vbl9zdGFydCgpJyBjYWxsIGlzIGN1cnJlbnRseSBydW5uaW5nLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBidXRcXG5tbS9kYW1vbi9jb3JlLmMtMjA4Mi0gKiByZXR1cm5zIC1FQlVTWS5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDg1LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMDg2OmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxcbm1tL2RhbW9uL2NvcmUuYy0yMDg3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTExLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9jdHhzOyBpKyspIHtcXG5tbS9kYW1vbi9jb3JlLmM6MjExMjpcXHRcXHRlcnIgPSBfX2RhbW9uX3N0YXJ0KGN0eHNbaV0pO1xcbm1tL2RhbW9uL2NvcmUuYy0yMTEzLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjIxND1pbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjI2Mi0gKlxcbm1tL2RhbW9uL2NvcmUuYzoyMjYzOiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBkYW1vbl9zdGFydCgpIHdpdGggdGhlXFxubW0vZGFtb24vY29yZS5jLTIyNjQtICogQGN0eCBoYXMgc3VjY2VlZGVkLiAgT3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIGNvdWxkIGZhbGwgaW50byBhbiBpbmRlZmluaXRlXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTQwMT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbilcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDEzLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDE0OlxcdGVyciA9IGRhbW9uX3N0YXJ0KFxcdTAwMjZjdHgsIDEsIHRydWUpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDE1LVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MzI0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMzM2LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzozMzc6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTMzOC1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jPTIwMD1zdGF0aWMgaW50IGRhbW9uX3N0YXRfc3RhcnQodm9pZClcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYy0yMTItXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vc3RhdC5jOjIxMzpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2ZGFtb25fc3RhdF9jb250ZXh0LCAxLCB0cnVlKTtcXG5tbS9kYW1vbi9zdGF0LmMtMjE0LVxcdGlmIChlcnIpIHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjUxMT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI1MzUtXFx0fVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjUzNjpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCBmYWxzZSk7XFxubW0vZGFtb24vc3lzZnMuYy0yNTM3LVxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6NTQ6MzEuOTA0OTQ1NTc1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxMDQzOTc4NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2xzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGUgY29yZSBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UuIEkgc2VlIGBEQU1PTmAgYXMgdGhlIGZvdW5kYXRpb25hbCBjb25maWcsIG9idmlvdXNseSBlc3NlbnRpYWwuIFRoZW4sIGBEQU1PTl9WQUREUmAsIHdoaWNoIGlzIGV4cGxpY2l0bHkgdGllZCB0byB2aXJ0dWFsIGFkZHJlc3MgbW9uaXRvcmluZyB2aWEgYGRhbW9uX3ZhX3RhcmdldF92YWxpZGAg4oCTIHRoYXQncyBjcml0aWNhbC4gQW5kIGZpbmFsbHksIGBEQU1PTl9TWVNGU2AgaW5kaWNhdGVzIGEgc3lzZnMgaW50ZXJmYWNlIGlzIGVuYWJsZWQsIHdoaWNoIGlzIGhlbHBmdWwgZm9yIGludGVyYWN0aW9ucy4gR29vZCwgdGhlIGZvdW5kYXRpb25hbCBlbGVtZW50cyBzZWVtIHRvIGJlIHByZXNlbnQuXG5cbk5vdywgdG8gdGhlIEZvY3VzU3ltYm9scy4gSSdtIHNlZWluZyBhIGxpc3QgaGVyZTogYGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tYCwgYGRhbW9zX2FkanVzdF9xdW90YWAsIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLCBhbmQgdGhhdCBgZGFtb25fdmFfdGFyZ2V0X3ZhbGlkYCBhZ2Fpbi4gVGhlc2UgYXJlIGxpa2VseSB0aGUga2V5IGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgd2UgbmVlZCB0byBzY3J1dGluaXplLCBhbmQgZnJvbSB0aGUgbmFtZXMsIHRoZXkgc3VnZ2VzdCBhcmVhcyByZWxhdGVkIHRvIHF1b3RhIGFkanVzdG1lbnRzIGFuZCBpbnZhbGlkIGNoYXJnZSB0YXJnZXQgcmVzZXRzIHdpdGhpbiBEQU1PTiwgYXMgd2VsbCBhcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHNjaGVtZXMgdGhhdCBEQU1PTiB1c2VzLCBhbmQgdGhhdCBjcml0aWNhbCB2YWxpZGF0aW9uLlxuXG5BbHJpZ2h0LCBsZXQncyBjcm9zcy1yZWZlcmVuY2UgdGhpcyBpbmZvcm1hdGlvbiB3aXRoIHRoZSBpbnN0cnVjdGlvbnMuIGBXb3J0aEZ1enppbmdgIGJlaW5nIHRydWUgaXMgYSBncmVlbiBsaWdodCwgaW1wbHlpbmcgdGhhdCB0aGUgY29kZSB3aXRoaW4gbW0vZGFtb24gaXMgcmVhY2hhYmxlIGZvciBmdXp6aW5nIHdoaWNoIGlzIGdyZWF0LiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QsIFtcIkRBTU9OXCIsIFwiREFNT05fVkFERFJcIiwgXCJEQU1PTl9TWVNGU1wiXSwgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LiBUaGUgYEZvY3VzU3ltYm9sc2AgbGlzdCwgW1wiZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb21cIiwgXCJkYW1vc19hZGp1c3RfcXVvdGFcIiwgXCJrZGFtb25kX2FwcGx5X3NjaGVtZXNcIiwgXCJkYW1vbl92YV90YXJnZXRfdmFsaWRcIl0sIGFnYWluIGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtleSBhcmVhcyBvZiBpbnRlcmVzdC4gVGhlIFwiQ29uY2lzZSBleHBsYW5hdGlvblwiIHJlYXNvbmluZyBpcyBzb2xpZCBhbmQgY29uZmlybXMgbXkgYXNzdW1wdGlvbnMuXG5cbk9rYXksIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gTGV0J3MgbW92ZSBvbiB0byB0aGUgbmV4dCBzdGVwIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzMxLCJPdXRwdXRUb2tlbnMiOjE2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDozNi4wMDkzNDY1NjZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzczMTUyODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fU1lTRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbVwiLFxuICAgIFwiZGFtb3NfYWRqdXN0X3F1b3RhXCIsXG4gICAgXCJrZGFtb25kX2FwcGx5X3NjaGVtZXNcIixcbiAgICBcImRhbW9uX3ZhX3RhcmdldF92YWxpZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PTiBjb3JlIHN1YnN5c3RlbSBpbiBtbS9kYW1vbi9jb3JlLmMsIGFkZGluZyBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbSgpIGFuZCBjYWxsaW5nIGl0IGZyb20gZGFtb3NfYWRqdXN0X3F1b3RhKCkgdG8gaW52YWxpZGF0ZSBzdGFsZSBjaGFyZ2UgdGFyZ2V0IHBvaW50ZXJzIHdoZW4gdGFyZ2V0X3ZhbGlkKCkgcmV0dXJucyBmYWxzZS4gVGhpcyBpcyBleGVjdXRhYmxlLCByZWFjaGFibGUga2VybmVsIGNvZGUgYWNjZXNzaWJsZSB2aWEgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb21cIixcbiAgICBcImRhbW9zX2FkanVzdF9xdW90YVwiLFxuICAgIFwia2RhbW9uZF9hcHBseV9zY2hlbWVzXCIsXG4gICAgXCJkYW1vbl92YV90YXJnZXRfdmFsaWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT04gY29yZSBzdWJzeXN0ZW0gaW4gbW0vZGFtb24vY29yZS5jLCBhZGRpbmcgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oKSBhbmQgY2FsbGluZyBpdCBmcm9tIGRhbW9zX2FkanVzdF9xdW90YSgpIHRvIGludmFsaWRhdGUgc3RhbGUgY2hhcmdlIHRhcmdldCBwb2ludGVycyB3aGVuIHRhcmdldF92YWxpZCgpIHJldHVybnMgZmFsc2UuIFRoaXMgaXMgZXhlY3V0YWJsZSwgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIGFjY2Vzc2libGUgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjU0OjM2LjE0NjY2OTIxOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2NjM0NDQzODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDozNi4xNDcyMDk1NDlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNjY2Mjg5NzIzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbSgpIGluIG1tL2RhbW9uL2NvcmUuYyB0byByZXNldCBxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tIHRvIE5VTEwgYW5kIHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIHRvIDAgd2hlbiBjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpIGluZGljYXRlcyB0aGUgdGFyZ2V0IGlzIG5vIGxvbmdlciB2YWxpZC5cXG5cXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBpbnRlcm5hbCBEQU1PUyBxdW90YSB0cmFja2luZyBsb2dpYyB0byBoYW5kbGUgaW52YWxpZCB0YXJnZXQgcG9pbnRlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcyBvciBwYWRkaW5nLCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gZGFuZ2xpbmcvc3RhbGUgdGFyZ2V0IHBvaW50ZXIgZGVyZWZlcmVuY2VzIHdvdWxkIGJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOL1VBRiBkZXRlY3RvcnMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWNjZGNkNzU1MzM5NzI3ZTQ2MDZkNTllOTMxYzI4YjNkODU5MTBhOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMjA6NTQ6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IGNlOGM2Zjk5MTA2ZWQuLjJjNThiZTllZGJkZTQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTMyODMsNiArMzI4MywyMiBAQCBzdGF0aWMgdm9pZCBkYW1vc190cmFjZV9lc3ooc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzLFxuIFx0dHJhY2VfZGFtb3NfZXN6KGNpZHgsIHNpZHgsIHF1b3RhLVx1MDAzZWVzeik7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG4rXHRcdHN0cnVjdCBkYW1vbl9jdHggKmMpXG4re1xuK1x0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbitcbitcdHQgPSBxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb207XG4rXHRpZiAoIXQpXG4rXHRcdHJldHVybjtcbitcdGlmICghYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAoYy1cdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpKVxuK1x0XHRyZXR1cm47XG4rXHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xuK1x0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4ge1xuIFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG5AQCAtMzMxOCw2ICszMzM0LDggQEAgc3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbiBcdFx0XHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xuIFx0fVxuIFxuK1x0ZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20ocXVvdGEsIGMpO1xuK1xuIFx0aWYgKCFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxuIFx0XHRyZXR1cm47XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QyMDo1NDozNi4xNDcyMTA0NzlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc5Mjc3MDQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIENvcmUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBUaGlzIHBhdGNoIGxvb2tzIGludGVyZXN0aW5nOyBpdCdzIHRvdWNoaW5nIGBtbS9kYW1vbi9jb3JlLmNgLCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGZ1bmRhbWVudGFsIERBTU9OIGJlaGF2aW9yLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBnZXQgYSBzZW5zZSBvZiB0aGUgY29udGV4dCBhcm91bmQgdGhlIGNoYW5nZS4gVGltZSB0byBlaXRoZXIgbGV2ZXJhZ2UgYGdyZXBwZXJgIHRvIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UsIG9yIGlmIEkgd2FudCB0byBiZSBtb3JlIGZvY3VzZWQsIEknbGwgZ28gd2l0aCBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIGFyb3VuZCBsaW5lIDMyODMgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEdldCB0aGUgZGV0YWlscyBmaXJzdCwgdGhlbiBkZWNpZGUgb24gdGhlIHJpZ2h0IGFwcHJvYWNoLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjU0OjQxLjkzOTk4MzA4OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjIyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyNzAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMyNzA6XFx0fVxcbjMyNzE6XFx0XFxuMzI3MjpcXHRzdGF0aWMgdm9pZCBkYW1vc190cmFjZV9lc3ooc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzLFxcbjMyNzM6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG4zMjc0OlxcdHtcXG4zMjc1OlxcdFxcdHVuc2lnbmVkIGludCBjaWR4ID0gMCwgc2lkeCA9IDA7XFxuMzI3NjpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnNpdGVyO1xcbjMyNzc6XFx0XFxuMzI3ODpcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2l0ZXIsIGMpIHtcXG4zMjc5OlxcdFxcdFxcdGlmIChzaXRlciA9PSBzKVxcbjMyODA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzI4MTpcXHRcXHRcXHRzaWR4Kys7XFxuMzI4MjpcXHRcXHR9XFxuMzI4MzpcXHRcXHR0cmFjZV9kYW1vc19lc3ooY2lkeCwgc2lkeCwgcXVvdGEtXFx1MDAzZWVzeik7XFxuMzI4NDpcXHR9XFxuMzI4NTpcXHRcXG4zMjg2OlxcdHN0YXRpYyB2b2lkIGRhbW9zX3Jlc2V0X2ludmFsaWRfY2hhcmdlX3RhcmdldF9mcm9tKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXFxuMzI4NzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbjMyODg6XFx0e1xcbjMyODk6XFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcXG4zMjkwOlxcdFxcbjMyOTE6XFx0XFx0dCA9IHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb207XFxuMzI5MjpcXHRcXHRpZiAoIXQpXFxuMzI5MzpcXHRcXHRcXHRyZXR1cm47XFxuMzI5NDpcXHRcXHRpZiAoIWMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQpXFxuMzI5NTpcXHRcXHRcXHRyZXR1cm47XFxuMzI5NjpcXHRcXHRpZiAoYy1cXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSlcXG4zMjk3OlxcdFxcdFxcdHJldHVybjtcXG4zMjk4OlxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbjMyOTk6XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSAwO1xcbjMzMDA6XFx0fVxcbjMzMDE6XFx0XFxuMzMwMjpcXHRzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbjMzMDM6XFx0e1xcbjMzMDQ6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG4zMzA1OlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuMzMwNjpcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xcbjMzMDc6XFx0XFx0dW5zaWduZWQgbG9uZyBjdW11bGF0ZWRfc3osIGNhY2hlZF9lc3o7XFxuMzMwODpcXHRcXHR1bnNpZ25lZCBpbnQgc2NvcmUsIG1heF9zY29yZSA9IDA7XFxuMzMwOTpcXHRcXG4zMzEwOlxcdFxcdGlmICghcXVvdGEtXFx1MDAzZW1zIFxcdTAwMjZcXHUwMDI2ICFxdW90YS1cXHUwMDNlc3ogXFx1MDAyNlxcdTAwMjYgbGlzdF9lbXB0eShcXHUwMDI2cXVvdGEtXFx1MDAzZWdvYWxzKSlcXG4zMzExOlxcdFxcdFxcdHJldHVybjtcXG4zMzEyOlxcdFxcbjMzMTM6XFx0XFx0LyogRmlyc3QgY2hhcmdlIHdpbmRvdyAqL1xcbjMzMTQ6XFx0XFx0aWYgKCFxdW90YS1cXHUwMDNldG90YWxfY2hhcmdlZF9zeiBcXHUwMDI2XFx1MDAyNiAhcXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSkge1xcbjMzMTU6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XFxuMzMxNjpcXHRcXHRcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbjMzMTc6XFx0XFx0XFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkpXFxuMzMxODpcXHRcXHRcXHRcXHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xcbjMzMTk6XFx0XFx0fVxcbjMzMjA6XFx0XFxuMzMyMTpcXHRcXHQvKiBOZXcgY2hhcmdlIHdpbmRvdyBzdGFydHMgKi9cXG4zMzIyOlxcdFxcdGlmICghdGltZV9pbl9yYW5nZV9vcGVuKGppZmZpZXMsIHF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20sXFxuMzMyMzpcXHRcXHRcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tICtcXG4zMzI0OlxcdFxcdFxcdFxcdFxcdG1zZWNzX3RvX2ppZmZpZXMocXVvdGEtXFx1MDAzZXJlc2V0X2ludGVydmFsKSkpIHtcXG4zMzI1OlxcdFxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG4zMzI2OlxcdFxcdFxcdFxcdHMtXFx1MDAzZXN0YXQucXRfZXhjZWVkcysrO1xcbjMzMjc6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogKz0gcXVvdGEtXFx1MDAzZWNoYXJnZWRfc3o7XFxuMzMyODpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcXG4zMzI5OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6ID0gMDtcXG4zMzMwOlxcdFxcdFxcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxcbjMzMzE6XFx0XFx0XFx0XFx0Y2FjaGVkX2VzeiA9IHF1b3RhLVxcdTAwM2Vlc3o7XFxuMzMzMjpcXHRcXHRcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbjMzMzM6XFx0XFx0XFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgcXVvdGEtXFx1MDAzZWVzeiAhPSBjYWNoZWRfZXN6KVxcbjMzMzQ6XFx0XFx0XFx0XFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcXG4zMzM1OlxcdFxcdH1cXG4zMzM2OlxcdFxcbjMzMzc6XFx0XFx0ZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20ocXVvdGEsIGMpO1xcbjMzMzg6XFx0XFxuMzMzOTpcXHRcXHRpZiAoIWMtXFx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxcbjMzNDA6XFx0XFx0XFx0cmV0dXJuO1xcbjMzNDE6XFx0XFxuMzM0MjpcXHRcXHQvKiBGaWxsIHVwIHRoZSBzY29yZSBoaXN0b2dyYW0gKi9cXG4zMzQzOlxcdFxcdG1lbXNldChjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSwgMCxcXG4zMzQ0OlxcdFxcdFxcdFxcdHNpemVvZigqYy1cXHUwMDNlcmVnaW9uc19zY29yZV9oaXN0b2dyYW0pICpcXG4zMzQ1OlxcdFxcdFxcdFxcdChEQU1PU19NQVhfU0NPUkUgKyAxKSk7XFxuMzM0NjpcXHRcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xcbjMzNDc6XFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcXG4zMzQ4OlxcdFxcdFxcdFxcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYykpXFxuMzM0OTpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6NTQ6NDEuOTQwMjQ3MzA4WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3ODU1NjU1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIERBTU9OJ3MgQ2hhcmdlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBjaGFyZ2VfdGFyZ2V0X2Zyb21gIGFuZCBgY2hhcmdlX2FkZHJfZnJvbWAgd2l0aGluIERBTU9OLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBjb2RlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBncmVwIG9yIHVzZSBteSBJREUncyBcImZpbmQgdXNhZ2VzXCIgZnVuY3Rpb25hbGl0eSB0byBwaW5wb2ludCBldmVyeSBpbnN0YW5jZSB3aGVyZSB0aGVzZSB0d28gZnVuY3Rpb25zIGFyZSBjYWxsZWQuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGNvbnRleHRzLiBBcmUgdGhleSB1c2VkIHRvZ2V0aGVyPyBEb2VzIG9uZSBjYWxsIHRoZSBvdGhlcj8gV2hhdCBhcmUgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIGRvaW5nIHdpdGggdGhlIGRhdGE/XG5cbkknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGNoYXJnaW5nIG1lY2hhbmlzbSdzIGRlc2lnbi4gVGhpcyB3aWxsIHJldmVhbCBob3cgREFNT04gZGV0ZXJtaW5lcyB3aGF0IG1lbW9yeSByZWdpb25zIHRvIGNoYXJnZSBhbmQgZnJvbSB3aGF0IGFkZHJlc3Mgd2l0aGluIHRob3NlIHJlZ2lvbnMuIEFyZSB0aGVzZSBmdW5jdGlvbnMgY29yZSB0byB0aGUgbW9uaXRvcmluZyBhbmQgc2FtcGxpbmcgbG9naWM/IEFyZSB0aGV5IHJlbGF0ZWQgdG8gYW55IHNwZWNpZmljIERBTU9OIGZlYXR1cmVzLCBsaWtlIGFkYXB0aXZlIHNhbXBsaW5nIG9yIGR5bmFtaWMgdGhyZXNob2xkaW5nP1xuXG5JJ20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB3aXRoaW4gdGhlIGNvcmUgbW9uaXRvcmluZyBsb29wcywgcG90ZW50aWFsbHkgaW5zaWRlIHRoZSBkYXRhIHNhbXBsaW5nIG9yIHByb2Nlc3NpbmcgZnVuY3Rpb25zLiBUaGUgYHRhcmdldGAgbGlrZWx5IHJlZmVycyB0byBhIG1lbW9yeSByZWdpb24gdGhlIERBTU9OIHdhbnRzIHRvIHRyYWNrIChhIFwidGFyZ2V0XCIgdG8gYmUgbW9uaXRvcmVkIG9yIGNoYXJnZWQpLiBUaGUgYGFkZHJgIHBvcnRpb24gc2VlbXMgdG8gYmUgdGhlIGxvZ2ljYWwgYWRkcmVzcyB3aXRoaW4gdGhhdCByZWdpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBpcyBwYXNzZWQgYXJvdW5kLiBJJ20gYWxzbyBpbnRlcmVzdGVkIGluIGhvdyB0aGVzZSBhcmUgaW5pdGlhbGl6ZWQgYW5kIHNldCB1cC4gQW55IGludGVyYWN0aW9uIHdpdGggdGhlIGBkYW1vbl9jb250ZXh0YCB3aWxsIGJlIGltcG9ydGFudC4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBkYXRhLXJhY2UgY29uY2VybnMgYXJvdW5kIHRoYXQgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc3NiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMjA6NTQ6NDQuNzI1ODE3NTM2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDExMDkyMjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoYXJnZV90YXJnZXRfZnJvbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9Mjc2PXN0cnVjdCBkYW1vc19xdW90YSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMzAwLVxcdHVuc2lnbmVkIGxvbmcgY2hhcmdlZF9mcm9tO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDozMDE6XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqY2hhcmdlX3RhcmdldF9mcm9tO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0zMDItXFx0dW5zaWduZWQgbG9uZyBjaGFyZ2VfYWRkcl9mcm9tO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTczMj1zdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhICpkYW1vc19xdW90YV9pbml0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNzM4LVxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20gPSAwO1xcbm1tL2RhbW9uL2NvcmUuYzo3Mzk6XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XFxubW0vZGFtb24vY29yZS5jLTc0MC1cXHRxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTY5Nj1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF90YXJnZXRzKFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE3MjItXFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGRzdCkge1xcbm1tL2RhbW9uL2NvcmUuYzoxNzIzOlxcdFxcdFxcdFxcdGlmIChzLVxcdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPT0gZHN0X3RhcmdldCkge1xcbm1tL2RhbW9uL2NvcmUuYzoxNzI0OlxcdFxcdFxcdFxcdFxcdHMtXFx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XFxubW0vZGFtb24vY29yZS5jLTE3MjUtXFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjQ0OT1zdGF0aWMgYm9vbCBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjQ1Ni1cXHQvKiBTa2lwIHByZXZpb3VzbHkgY2hhcmdlZCByZWdpb25zICovXFxubW0vZGFtb24vY29yZS5jOjI0NTc6XFx0aWYgKHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20pIHtcXG5tbS9kYW1vbi9jb3JlLmM6MjQ1ODpcXHRcXHRpZiAodCAhPSBxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKVxcbm1tL2RhbW9uL2NvcmUuYy0yNDU5LVxcdFxcdFxcdHJldHVybiB0cnVlO1xcbm1tL2RhbW9uL2NvcmUuYy0yNDYwLVxcdFxcdGlmIChyID09IGRhbW9uX2xhc3RfcmVnaW9uKHQpKSB7XFxubW0vZGFtb24vY29yZS5jOjI0NjE6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XFxubW0vZGFtb24vY29yZS5jLTI0NjItXFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSAwO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0ODAtXFx0XFx0fVxcbm1tL2RhbW9uL2NvcmUuYzoyNDgxOlxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbm1tL2RhbW9uL2NvcmUuYy0yNDgyLVxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNjgyPXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3NDEtXFx0XFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXFx1MDAzZW1pbl9yZWdpb25fc3opKSB7XFxubW0vZGFtb24vY29yZS5jOjI3NDI6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IHQ7XFxubW0vZGFtb24vY29yZS5jLTI3NDMtXFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSByLVxcdTAwM2Vhci5lbmQ7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzI3Mj1zdGF0aWMgdm9pZCBkYW1vc190cmFjZV9lc3ooc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyODUtXFxubW0vZGFtb24vY29yZS5jOjMyODY6c3RhdGljIHZvaWQgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG5tbS9kYW1vbi9jb3JlLmMtMzI4Ny1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyOTAtXFxubW0vZGFtb24vY29yZS5jOjMyOTE6XFx0dCA9IHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb207XFxubW0vZGFtb24vY29yZS5jLTMyOTItXFx0aWYgKCF0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyOTctXFx0XFx0cmV0dXJuO1xcbm1tL2RhbW9uL2NvcmUuYzozMjk4OlxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjk5LVxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzAyPXN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzMzNi1cXG5tbS9kYW1vbi9jb3JlLmM6MzMzNzpcXHRkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbShxdW90YSwgYyk7XFxubW0vZGFtb24vY29yZS5jLTMzMzgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjU0OjQ3LjEzNjkxNTMxMloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjczMTYxMjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IEtNU0FOIEFwcGxpY2FiaWxpdHkgLSBEQU1PUyBRdW90YSBNYW5hZ2VtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiBpcyB0aGlzIGBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbWAgZnVuY3Rpb24sIHdoaWNoIGlzIHJlc2V0dGluZyBgcXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tYCB0byBOVUxMIGFuZCBgcXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbWAgdG8gMCBiYXNlZCBvbiB0aGUgYGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KWAgY2hlY2ssIHBvdGVudGlhbGx5IGludHJvZHVjaW5nIGEgS01TQU4gaXNzdWU/IEl0J3MgaGFuZGxpbmcgaW52YWxpZCB0YXJnZXQgdHJhY2tpbmcgd2l0aGluIERBTU9TIHF1b3RhcywgY2xlYW5pbmcgdXAgYWZ0ZXIgYSB0YXJnZXQgYmVjb21lcyBpbnZhbGlkLCB3aGljaCBpcyBnb29kLiBXZSBkZWZpbml0ZWx5IHdhbnQgdG8gYXZvaWQgc3RhbGUgcG9pbnRlcnMgb3IgbG9naWMgZXJyb3JzIGhlcmUuXG5cbkJ1dCwgSSd2ZSBjaGVja2VkIGNhcmVmdWxseTpcblxuKiAgIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbiBvciBtb2RpZmljYXRpb24gaXMgaGFwcGVuaW5nIGhlcmUuXG4qICAgV2UncmUgbm90IGludHJvZHVjaW5nIGFueSBgY29weV90b191c2VyYCBjYWxscyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UuXG4qICAgVGhlcmUncyBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIHN0YWNrL2hlYXAgdmFyaWFibGVzIGJlaW5nIGNyZWF0ZWQgb3IgdXNlZC4gRXZlcnl0aGluZyBiZWluZyBzZXQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTExgLCBgcXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDBgLlxuKiAgIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggc3RhbGUgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgVXNlLUFmdGVyLUZyZWUgc2NlbmFyaW9zIGhlcmUgd291bGQgYmUgcGlja2VkIHVwIGJ5IEtBU0FOLlxuXG5MZXQgbWUgZ28gdGhyb3VnaCB0aGUgY3JpdGVyaWEgYWdhaW4gdG8gYmUgYWJzb2x1dGVseSBzdXJlOlxuXG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOb3BlLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLlxuMy4gIEFsbG9jYXRpb24gb2YgY29tcGxleCBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG1pZ2h0IGJlIHJlYWQgbGF0ZXI/IE5vcGUuXG40LiAgQm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGE/IE5vcGUuXG5cblNvLCBJJ20gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIGlzIGZhbHNlLlxuXG5IZXJlJ3MgbXkgcmVhc29uaW5nIHdoZW4gY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTpcblxuKiAgIFRoaXMgcGF0Y2gncyBgZGFtb3NfcmVzZXRfaW52YWxpZF9jaGFyZ2VfdGFyZ2V0X2Zyb20oKWAgZm9jdXNlcyBvbiB2YWxpZGF0aW5nIGFuZCByZXNldHRpbmcgZXhpc3RpbmcgcG9pbnRlcnMgdG8gYHN0cnVjdCBkYW1vbl90YXJnZXRgIGFuZCBpdHMgYXNzb2NpYXRlZCB0cmFja2luZyBzdGF0ZS5cbiogICBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCB1c2VyIHNwYWNlIHBhdGhzLCBvciB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzIGludHJvZHVjZWQgb3IgaW1wYWN0ZWQgYnkgdGhpcyBjaGFuZ2UuXG4qICAgQW55IGJ1Z3MgaW4gdGhpcyBzcGVjaWZpYyBzZWN0aW9uIHdvdWxkIG1vc3QgbGlrZWx5IGJlIHJlbGF0ZWQgdG8gc3RhbGUgcG9pbnRlciBhY2Nlc3Mgb3IgaXNzdWVzIGFyb3VuZCBsaWZldGltZXMgKHdoaWNoIEtBU0FOIGFscmVhZHkgZWZmZWN0aXZlbHkgY292ZXJzKSwgbm90IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS5cbiogICBUaGVyZWZvcmUsIHNwZWNpZmljIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkIGhlcmUuXG5cbkkgdGhpbmsgd2UncmUgZ29vZCB0byBnby4gTGV0J3MgaW52b2tlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNzksIk91dHB1dFRva2VucyI6MTg3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDIwOjU0OjUyLjgxMDA3OTUyNloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbSgpIGluIG1tL2RhbW9uL2NvcmUuYyB0byByZXNldCBxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tIHRvIE5VTEwgYW5kIHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIHRvIDAgd2hlbiBjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpIGluZGljYXRlcyB0aGUgdGFyZ2V0IGlzIG5vIGxvbmdlciB2YWxpZC5cXG5cXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBpbnRlcm5hbCBEQU1PUyBxdW90YSB0cmFja2luZyBsb2dpYyB0byBoYW5kbGUgaW52YWxpZCB0YXJnZXQgcG9pbnRlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcyBvciBwYWRkaW5nLCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gZGFuZ2xpbmcvc3RhbGUgdGFyZ2V0IHBvaW50ZXIgZGVyZWZlcmVuY2VzIHdvdWxkIGJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOL1VBRiBkZXRlY3RvcnMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBkYW1vc19yZXNldF9pbnZhbGlkX2NoYXJnZV90YXJnZXRfZnJvbSgpIGluIG1tL2RhbW9uL2NvcmUuYyB0byByZXNldCBxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tIHRvIE5VTEwgYW5kIHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIHRvIDAgd2hlbiBjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkKHQpIGluZGljYXRlcyB0aGUgdGFyZ2V0IGlzIG5vIGxvbmdlciB2YWxpZC5cXG5cXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBpbnRlcm5hbCBEQU1PUyBxdW90YSB0cmFja2luZyBsb2dpYyB0byBoYW5kbGUgaW52YWxpZCB0YXJnZXQgcG9pbnRlcnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcyBvciBwYWRkaW5nLCBkb2VzIG5vdCBjb3B5IGFueSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gZGFuZ2xpbmcvc3RhbGUgdGFyZ2V0IHBvaW50ZXIgZGVyZWZlcmVuY2VzIHdvdWxkIGJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOL1VBRiBkZXRlY3RvcnMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9rctk[1] Phase: Succeeded StartedAt: 2026-09-07 20:55:04 +0000 UTC FinishedAt: 2026-09-07 20:55:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rctk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 20:55:04 +0000 UTC FinishedAt: 2026-09-07 20:55:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rctk[2] Phase: Succeeded StartedAt: 2026-09-07 20:55:04 +0000 UTC FinishedAt: 2026-09-08 00:38:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 20:55:04 +0000 UTC FinishedAt: 2026-09-08 00:38:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 20:55:04 +0000 UTC FinishedAt: 2026-09-07 20:55:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 20:55:04 +0000 UTC FinishedAt: 2026-09-07 20:55:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9rctk/series-workflow9rctk-convert-artifact-4046313736/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 20:55:14 +0000 UTC FinishedAt: 2026-09-07 21:14:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 20:55:14 +0000 UTC FinishedAt: 2026-09-07 21:14:07 +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:*d1cfbcdf-7f7e-414c-833e-a9749213cc6a,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-workflow9rctk/series-workflow9rctk-convert-artifact-4046313736/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": "ab56f398-a790-4165-9f48-14d5660ea214", "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-workflow9rctk/series-workflow9rctk-build-action-2509747070/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 20:55:14 +0000 UTC FinishedAt: 2026-09-07 21:13:57 +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:*d1cfbcdf-7f7e-414c-833e-a9749213cc6a,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-workflow9rctk/series-workflow9rctk-convert-artifact-4046313736/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": "ab56f398-a790-4165-9f48-14d5660ea214", "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-workflow9rctk/series-workflow9rctk-build-action-2509747070/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 21:14:07 +0000 UTC FinishedAt: 2026-09-07 21:14:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 21:14:07 +0000 UTC FinishedAt: 2026-09-07 21:14:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 21:14:07 +0000 UTC FinishedAt: 2026-09-07 21:14:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 21:14:07 +0000 UTC FinishedAt: 2026-09-07 21:14:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9rctk/series-workflow9rctk-convert-artifact-2291976175/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 21:14:18 +0000 UTC FinishedAt: 2026-09-07 21:16:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 21:14:18 +0000 UTC FinishedAt: 2026-09-07 21:16:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ab56f398-a790-4165-9f48-14d5660ea214,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-workflow9rctk/series-workflow9rctk-build-action-2509747070/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-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 21:16:11 +0000 UTC FinishedAt: 2026-09-07 21:16:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 21:16:11 +0000 UTC FinishedAt: 2026-09-07 21:16:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 21:16:11 +0000 UTC FinishedAt: 2026-09-07 21:32:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 21:16:11 +0000 UTC FinishedAt: 2026-09-07 21:32:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d1cfbcdf-7f7e-414c-833e-a9749213cc6a,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-workflow9rctk/series-workflow9rctk-convert-artifact-2291976175/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": "b655bcac-91c0-4884-9f9e-4c9bb17fd82f", "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-workflow9rctk/series-workflow9rctk-build-action-3585883011/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 21:16:11 +0000 UTC FinishedAt: 2026-09-07 21:32:06 +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:*d1cfbcdf-7f7e-414c-833e-a9749213cc6a,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-workflow9rctk/series-workflow9rctk-convert-artifact-2291976175/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": "b655bcac-91c0-4884-9f9e-4c9bb17fd82f", "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-workflow9rctk/series-workflow9rctk-build-action-3585883011/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 21:32:16 +0000 UTC FinishedAt: 2026-09-07 21:32:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 21:32:16 +0000 UTC FinishedAt: 2026-09-07 21:32:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 21:32:16 +0000 UTC FinishedAt: 2026-09-07 21:34:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 21:32:16 +0000 UTC FinishedAt: 2026-09-07 21:33:59 +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:*b655bcac-91c0-4884-9f9e-4c9bb17fd82f,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-workflow9rctk/series-workflow9rctk-build-action-3585883011/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-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 21:34:09 +0000 UTC FinishedAt: 2026-09-08 00:38:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 21:34:09 +0000 UTC FinishedAt: 2026-09-08 00:38: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":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*ab56f398-a790-4165-9f48-14d5660ea214,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b655bcac-91c0-4884-9f9e-4c9bb17fd82f,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-workflow9rctk/series-workflow9rctk-build-action-2509747070/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-workflow9rctk/series-workflow9rctk-build-action-3585883011/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 21:34:09 +0000 UTC FinishedAt: 2026-09-07 21:34:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 21:34:09 +0000 UTC FinishedAt: 2026-09-07 21:34:16 +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":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9rctk/series-workflow9rctk-convert-artifact-3487146920/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 21:34:09 +0000 UTC FinishedAt: 2026-09-07 21:34:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 21:34:09 +0000 UTC FinishedAt: 2026-09-07 21:34:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 21:34:09 +0000 UTC FinishedAt: 2026-09-07 21:34:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 21:34:19 +0000 UTC FinishedAt: 2026-09-08 00:38:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rctk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_reset_invalid_charge_target_from","damos_adjust_quota","kdamond_apply_schemes","damon_va_target_valid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_SYSFS"],"series_id":"8b789686-03ce-45fa-8db3-bfe52d42ef7c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 21:34:19 +0000 UTC FinishedAt: 2026-09-08 00:38:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ab56f398-a790-4165-9f48-14d5660ea214,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b655bcac-91c0-4884-9f9e-4c9bb17fd82f,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-workflow9rctk/series-workflow9rctk-build-action-2509747070/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-workflow9rctk/series-workflow9rctk-build-action-3585883011/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-workflow9rctk/series-workflow9rctk-convert-artifact-3487146920/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,}