Name: series-workflowsrlfm Phase: Succeeded StartedAt: 2026-08-04 04:07:32 +0000 UTC FinishedAt: 2026-08-04 08:50:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrlfm[0] Phase: Succeeded StartedAt: 2026-08-04 04:07:32 +0000 UTC FinishedAt: 2026-08-04 05:00:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrlfm[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 04:07:32 +0000 UTC FinishedAt: 2026-08-04 05:00:38 +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": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "MEMORY_FAILURE", "HWPOISON_INJECT" ], "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": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "MEMORY_FAILURE", "HWPOISON_INJECT" ], "series_id": "547277c9-1702-46ce-ba69-6f00fa4f2ac4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "min_order_for_split", "memory_failure", "soft_offline_in_use_page" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0hXUE9JU09OX0lOSkVDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21pbl9vcmRlcl9mb3Jfc3BsaXQmIzM0OywKICAgICYjMzQ7bWVtb3J5X2ZhaWx1cmUmIzM0OywKICAgICYjMzQ7c29mdF9vZmZsaW5lX2luX3VzZV9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIGFuZCBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCB3aGVuIGFjY2Vzc2luZyBgZm9saW8tXHUwMDNlbWFwcGluZ2AuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSBoYXJkd2FyZSBtZW1vcnkgZXJyb3IgaW5qZWN0aW9uIG1lY2hhbmlzbXMgKGxpa2UgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9yIGBNQURWX1NPRlRfT0ZGTElORWApLCB3aGljaCBhcmUgaGFuZGxlZCBieSBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gRnV6emluZyB0aGVzZSBlbnRyeSBwb2ludHMgd2l0aCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBlbmFibGVkIHdpbGwgZXhlcmNpc2UgdGhlIG1vZGlmaWVkIGNvZGUgYW5kIGVuc3VyZSB0aGUgY29uY3VycmVuY3kgaXNzdWUgaXMgcmVzb2x2ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3NWU1MjE2OWI0NDE0YjY3NTdmNWMyMjBiNDFjY2ZlZTFlOGY3NWMxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAwNDo1Nzo1OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggMmJjY2IwYTUzYTBhNi4uNTRkNDI2MWEyYTE1MCAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC00Mjg0LDE5ICYjNDM7NDI4NCwyMyBAQCBpbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbiAgKi9cbiB1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcbiYjNDM7XG4gXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4mIzQzO1x0bWFwcGluZyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VtYXBwaW5nKTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogSWYgdGhlIGZvbGlvIGdvdCB0cnVuY2F0ZWQsIHdlIGRvbiYjMzk7dCBrbm93IHRoZSBwcmV2aW91cyBtYXBwaW5nIGFuZFxuIFx0ICogY29uc2VxdWVudGx5IHRoZSBvbGQgbWluIG9yZGVyLiBCdXQgaXQgZG9lc24mIzM5O3QgbWF0dGVyLCBhcyBhbnkgc3BsaXRcbiBcdCAqIGF0dGVtcHQgd2lsbCBpbW1lZGlhdGVseSBmYWlsIHdpdGggLUVCVVNZIGFzIHRoZSBmb2xpbyBjYW5ub3QgZ2V0XG4gXHQgKiBzcGxpdCB1bnRpbCBmcmVlZC5cbiBcdCAqL1xuLVx0aWYgKCFmb2xpby1cdTAwM2VtYXBwaW5nKVxuJiM0MztcdGlmICghbWFwcGluZylcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXR1cm4gbWFwcGluZ19taW5fZm9saW9fb3JkZXIoZm9saW8tXHUwMDNlbWFwcGluZyk7XG4mIzQzO1x0cmV0dXJuIG1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKG1hcHBpbmcpO1xuIH1cbiBcbiBpbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtIV1BPSVNPTl9JTkpFQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttaW5fb3JkZXJfZm9yX3NwbGl0JiMzNDssCiAgICAmIzM0O21lbW9yeV9mYWlsdXJlJiMzNDssCiAgICAmIzM0O3NvZnRfb2ZmbGluZV9pbl91c2VfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRhdGEgcmFjZSBhbmQgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgbWluX29yZGVyX2Zvcl9zcGxpdGAgd2hlbiBhY2Nlc3NpbmcgYGZvbGlvLVx1MDAzZW1hcHBpbmdgLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgaGFyZHdhcmUgbWVtb3J5IGVycm9yIGluamVjdGlvbiBtZWNoYW5pc21zIChsaWtlIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBvciBgTUFEVl9TT0ZUX09GRkxJTkVgKSwgd2hpY2ggYXJlIGhhbmRsZWQgYnkgYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuIEZ1enppbmcgdGhlc2UgZW50cnkgcG9pbnRzIHdpdGggYENPTkZJR19NRU1PUllfRkFJTFVSRWAgZW5hYmxlZCB3aWxsIGV4ZXJjaXNlIHRoZSBtb2RpZmllZCBjb2RlIGFuZCBlbnN1cmUgdGhlIGNvbmN1cnJlbmN5IGlzc3VlIGlzIHJlc29sdmVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzVlNTIxNjliNDQxNGI2NzU3ZjVjMjIwYjQxY2NmZWUxZThmNzVjMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDQgMDQ6NTc6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCAyYmNjYjBhNTNhMGE2Li41NGQ0MjYxYTJhMTUwIDEwMDY0NAotLS0gYS9tbS9odWdlX21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmMKQEAgLTQyODQsMTkgJiM0Mzs0Mjg0LDIzIEBAIGludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLAogICovCiB1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewomIzQzOwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKJiM0MzsKIAlpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkKIAkJcmV0dXJuIDA7CiAKJiM0MzsJbWFwcGluZyA9IFJFQURfT05DRShmb2xpby0mZ3Q7bWFwcGluZyk7CiYjNDM7CiAJLyoKIAkgKiBJZiB0aGUgZm9saW8gZ290IHRydW5jYXRlZCwgd2UgZG9uJiMzOTt0IGtub3cgdGhlIHByZXZpb3VzIG1hcHBpbmcgYW5kCiAJICogY29uc2VxdWVudGx5IHRoZSBvbGQgbWluIG9yZGVyLiBCdXQgaXQgZG9lc24mIzM5O3QgbWF0dGVyLCBhcyBhbnkgc3BsaXQKIAkgKiBhdHRlbXB0IHdpbGwgaW1tZWRpYXRlbHkgZmFpbCB3aXRoIC1FQlVTWSBhcyB0aGUgZm9saW8gY2Fubm90IGdldAogCSAqIHNwbGl0IHVudGlsIGZyZWVkLgogCSAqLwotCWlmICghZm9saW8tJmd0O21hcHBpbmcpCiYjNDM7CWlmICghbWFwcGluZykKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gbWFwcGluZ19taW5fZm9saW9fb3JkZXIoZm9saW8tJmd0O21hcHBpbmcpOwomIzQzOwlyZXR1cm4gbWFwcGluZ19taW5fZm9saW9fb3JkZXIobWFwcGluZyk7CiB9CiAKIGludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEh1Z2UgTWVtb3J5IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgYG1tL2h1Z2VfbWVtb3J5LmNgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGhvbmVkIGluIG9uIHRoZSBgbWluX29yZGVyX2Zvcl9zcGxpdGAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGhlcmUsIGFzIGZhciBhcyBJIGNhbiBzZWUsIGlzIHRoYXQgaXQmIzM5O3MgcmVwbGFjaW5nIGRpcmVjdCBhY2Nlc3NlcyB0byBgZm9saW8tJmd0O21hcHBpbmdgIHdpdGggYFJFQURfT05DRShmb2xpby0mZ3Q7bWFwcGluZylgLiBJIG5lZWQgdG8gZGlnIGludG8gYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIHdpdGhpbiBgbW0vaHVnZV9tZW1vcnkuY2AgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG5lY2Vzc2FyeS4gSXMgaXQgYSBtZW1vcnkgb3JkZXJpbmcgaXNzdWU/IEEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uPyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoZXJlJiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgYSBzdWJ0bGUgY29uY3VycmVuY3kgY29uY2VybiB0aGF0JiMzOTtzIGJlaW5nIGFkZHJlc3NlZCBoZXJlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHN1Y2ggZnVuZGFtZW50YWwgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB1c2luZyBgUkVBRF9PTkNFYCBvbiB0aGF0IHNwZWNpZmljIGZpZWxkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBXaGF0IGlzIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyYWwgcmVhc29uIGZvciB0aGlzIGNoYW5nZT8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaW5fb3JkZXJfZm9yX3NwbGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTQyNjg9aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00Mjc1LS8qKlxubW0vaHVnZV9tZW1vcnkuYzo0Mjc2OiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSAtIGdldCB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvXG5tbS9odWdlX21lbW9yeS5jLTQyNzctICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxubW0vaHVnZV9tZW1vcnkuYy00Mjc4LSAqXG5tbS9odWdlX21lbW9yeS5jOjQyNzk6ICogbWluX29yZGVyX2Zvcl9zcGxpdCgpIHRlbGxzIHRoZSBtaW5pbXVtIG9yZGVyIEBmb2xpbyBjYW4gYmUgc3BsaXQgdG8uXG5tbS9odWdlX21lbW9yeS5jLTQyODAtICogSWYgYSBmaWxlLWJhY2tlZCBmb2xpbyBpcyB0cnVuY2F0ZWQsIDAgd2lsbCBiZSByZXR1cm5lZC4gQW55IHN1YnNlcXVlbnRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyODQtICovXG5tbS9odWdlX21lbW9yeS5jOjQyODU6dW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc1MAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb25jdXJyZW5jeSBCdWcgaW4gdGhlIEZvbGlvIFNwbGl0dGluZyBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBwb3RlbnRpYWwgZm9yIGEgcmFjZSBjb25kaXRpb24ganVtcHMgb3V0IGF0IG1lLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBmb2xpby0mZ3Q7bWFwcGluZ2AgaW4gYG1pbl9vcmRlcl9mb3Jfc3BsaXRgLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGVyZSYjMzk7cyBhIHdpbmRvdyB3aGVyZSBpdCBjb3VsZCBiZSByZWFkIHR3aWNlLiBUaGUgZmlyc3QgcmVhZCBtaWdodCBmaW5kIGEgdmFsaWQgcG9pbnRlciwgYnV0IGEgY29uY3VycmVudCB0cnVuY2F0aW9uIGNvdWxkIHNldCBpdCB0byBOVUxMIGJlZm9yZSB0aGUgc2Vjb25kIHJlYWQuIFRoYXQgc2NlbmFyaW8sIG9mIGNvdXJzZSwgd291bGQgcmVzdWx0IGluIGEgbmFzdHkgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gd2UgaGl0IGBtYXBwaW5nX21pbl9mb2xpb19vcmRlcmAuCgpUaGlzIGlzIGEgY2xlYXItY3V0IGZ1bmN0aW9uYWwgY2hhbmdlLCBjb3JyZWN0aW5nIGEgY29uY3VycmVuY3kgYnVn4oCUcHJlY2lzZWx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY2FuIGJpdGUgeW91IGluIGEgbG93LWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHQgaWYgeW91IGFyZW4mIzM5O3QgY2FyZWZ1bC4gSXQmIzM5O3MgZ29vZCB0aGF0IHRoaXMgd2FzIGlkZW50aWZpZWQuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBjYWxsIHNpdGVzIG9mIGBtaW5fb3JkZXJfZm9yX3NwbGl0YC4gVW5kZXJzdGFuZGluZyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgaXMgY3J1Y2lhbCB0byBhc3Nlc3MgdGhlIHRydWUgc2NvcGUgYW5kIGltcGFjdCBvZiB0aGlzIGZpeC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgdmFyaW91cyBleGVjdXRpb24gcGF0aHMgdGhhdCBjb3VsZCBiZSBhZmZlY3RlZCBieSB0aGlzIHBvdGVudGlhbCByYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pbl9vcmRlcl9mb3Jfc3BsaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9NDA0PWludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQwNTp1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQwNi1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD02NDE9c3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTY0Ni1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjY0NzpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NDgte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDI2OD1pbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNzUtLyoqXG5tbS9odWdlX21lbW9yeS5jOjQyNzY6ICogbWluX29yZGVyX2Zvcl9zcGxpdCgpIC0gZ2V0IHRoZSBtaW5pbXVtIG9yZGVyIEBmb2xpbyBjYW4gYmUgc3BsaXQgdG9cbm1tL2h1Z2VfbWVtb3J5LmMtNDI3Ny0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XG5tbS9odWdlX21lbW9yeS5jLTQyNzgtICpcbm1tL2h1Z2VfbWVtb3J5LmM6NDI3OTogKiBtaW5fb3JkZXJfZm9yX3NwbGl0KCkgdGVsbHMgdGhlIG1pbmltdW0gb3JkZXIgQGZvbGlvIGNhbiBiZSBzcGxpdCB0by5cbm1tL2h1Z2VfbWVtb3J5LmMtNDI4MC0gKiBJZiBhIGZpbGUtYmFja2VkIGZvbGlvIGlzIHRydW5jYXRlZCwgMCB3aWxsIGJlIHJldHVybmVkLiBBbnkgc3Vic2VxdWVudFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDI4NC0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NTp1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaHVnZV9tZW1vcnkuYy00Mjg2LXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIzMzA9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDQyLVx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI0NDM6XHRcdGNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ0NC1cdFx0aW50IGVycjtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI3ODA9c3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzk1LVx0aWYgKCFodWdlIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzk2Olx0XHRjb25zdCBpbnQgbmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3OTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc4MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOgoKKipBbmFseXppbmcgUG90ZW50aWFsIEh1Z2UgUGFnZSBBbGxvY2F0aW9uIElzc3VlcyoqCgpSaWdodCwgc28gSSYjMzk7dmUgc2VlbiB0aGVzZSBlcnJvciByZXBvcnRzIGNyb3BwaW5nIHVwLCBhbmQgSSYjMzk7bSB0cnlpbmcgdG8gcGlucG9pbnQgd2hlcmUgYSBodWdlIHBhZ2UgYWxsb2NhdGlvbiBpcyBnb2luZyBzaWRld2F5cy4gVGhlIGtleSBpbmRpY2F0b3JzIGFyZSBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gV2hlcmUgYXJlIHRoZXNlIGZ1bmN0aW9ucyBnZXR0aW5nIGNhbGxlZCBmcm9tPyBJIG5lZWQgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUgdG8gdW5kZXJzdGFuZCB0aGlzIGlzc3VlLgoKT2theSwgbm93LCBpcyBgbWluX29yZGVyX2Zvcl9zcGxpdGAgZXhwb3J0ZWQgYW55d2hlcmU/IEhvbGQgb24uLi4gaXQmIzM5O3Mgbm90IGEgZGlyZWN0IGV4cG9ydCwgSSBuZWVkIHRvIGxvb2sgaW4gYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYC4gVGhhdCYjMzk7cyB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBSaWdodCwgdGhhdCYjMzk7cyB1c2VmdWwuIE5vdywgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGNoZWNrIGlmIHRoYXQgZnVuY3Rpb24gaXMgdXNlZCB3aXRoaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGl0c2VsZi4gSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIGl0cyBsb2NhbCB1c2VzIGJlZm9yZSBleHBhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pbl9vcmRlcl9mb3Jfc3BsaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9NDI2OD1pbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNzUtLyoqXG5tbS9odWdlX21lbW9yeS5jOjQyNzY6ICogbWluX29yZGVyX2Zvcl9zcGxpdCgpIC0gZ2V0IHRoZSBtaW5pbXVtIG9yZGVyIEBmb2xpbyBjYW4gYmUgc3BsaXQgdG9cbm1tL2h1Z2VfbWVtb3J5LmMtNDI3Ny0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XG5tbS9odWdlX21lbW9yeS5jLTQyNzgtICpcbm1tL2h1Z2VfbWVtb3J5LmM6NDI3OTogKiBtaW5fb3JkZXJfZm9yX3NwbGl0KCkgdGVsbHMgdGhlIG1pbmltdW0gb3JkZXIgQGZvbGlvIGNhbiBiZSBzcGxpdCB0by5cbm1tL2h1Z2VfbWVtb3J5LmMtNDI4MC0gKiBJZiBhIGZpbGUtYmFja2VkIGZvbGlvIGlzIHRydW5jYXRlZCwgMCB3aWxsIGJlIHJldHVybmVkLiBBbnkgc3Vic2VxdWVudFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDI4NC0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NTp1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaHVnZV9tZW1vcnkuYy00Mjg2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzU4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgYHNwbGl0X2ZvbGlvX3RvX2xpc3RgIEZ1bmN0aW9uJiMzOTtzIFBvdGVudGlhbCBDYWxscyoqCgpPa2F5LCBzbyBJIHdhcyBsb29raW5nIGZvciB3aGVyZSB0aGlzIGZ1bmN0aW9uLCB3aGljaCBJIHdhcyBzdXJlIHdhcyBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHdhcyBjYWxsZWQuIEJ1dCBpdCYjMzk7cyBub3QgYWN0dWFsbHkgbmFtZWQgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgPyBUaGF0JiMzOTtzIG9kZC4gTGV0IG1lIHNlZSwgY291bGQgYHNwbGl0X2ZvbGlvX3RvX2xpc3RgIGJlIGNhbGxpbmcgaXQ/IE5vLCBub3RoaW5nIGluIHRoZSBncmVwIG91dHB1dCBzdWdnZXN0cyB0aGF0LiBBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUgZm9yIGBzcGxpdF9mb2xpb190b19saXN0YCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AgZGlyZWN0bHkuIExldCYjMzk7cyBzZWUgaWYgdGhhdCBwcm92aWRlcyBhbnkgY2x1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NwbGl0X2ZvbGlvX3RvX2xpc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9NDI4NT11bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDMwNS1cbm1tL2h1Z2VfbWVtb3J5LmM6NDMwNjppbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxubW0vaHVnZV9tZW1vcnkuYy00MzA3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcwOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczoKCioqRGlnZ2luZyBpbnRvIGEgTWVtb3J5IEZhaWx1cmUgU2NlbmFyaW8qKgoKT2theSwgdGhlIHRyYWlsIHN0YXJ0cyB3aXRoIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCDigJMgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgYWN0aW9uIGlzIGxpa2VseSBoYXBwZW5pbmcuIE15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGRpdmUgaW50byBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgaXRzZWxmLiBUaW1lIHRvIHNlZSB3aGF0IHRoYXQgZmlsZSBpcyByZWFsbHkgZG9pbmcsIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFyb3VuZCB0aGlzIGZ1bmN0aW9uIGNhbGwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBgbWluX29yZGVyX2Zvcl9zcGxpdGAgaXMgYmVpbmcgY2FsbGVkIHRoZXJlLCBhbmQgd2hhdCBjbHVlcyBpdCBnaXZlcyBtZSByZWdhcmRpbmcgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIG1lbW9yeSBmYWlsdXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB3ZSBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaW5fb3JkZXJfZm9yX3NwbGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jPTIzMzA9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDQyLVx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI0NDM6XHRcdGNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ0NC1cdFx0aW50IGVycjtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI3ODA9c3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzk1LVx0aWYgKCFodWdlIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzk2Olx0XHRjb25zdCBpbnQgbmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3OTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNTEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgVGVybWlub2xvZ3kgTGFuZHNjYXBlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gcHJlc2VudGVkIHdpdGggdGhpcyBjb25jZXB0LCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXM6IGlzIHRoaXMgdGhpbmcgdW5pcXVlIHRvICp0aGlzKiBjb250ZXh0PyBPciwgbW9yZSBwcmVjaXNlbHksIGlzIHRoaXMgdGVybWlub2xvZ3kgc3RhbmRhcmQgYWNyb3NzIG15IGZpZWxkLCBvciBkb2VzIGl0IGV4aXN0IHVuZGVyIGRpZmZlcmVudCBuYW1pbmcgY29udmVudGlvbnMgZWxzZXdoZXJlPyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgdGhpcyB0ZXJtIGhhcyBlc3RhYmxpc2hlZCB1c2FnZSBiZXlvbmQgdGhlIGltbWVkaWF0ZSBzY29wZSBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBhdC4gSSYjMzk7bSB0aGlua2luZywgYXJlIHRoZXJlIHN5bm9ueW1zPyBBcmUgdGhlcmUgcmVnaW9uYWwgdmFyaWF0aW9ucz8gRG9lcyB0aGUgamFyZ29uIGV2b2x2ZSBvdmVyIHRpbWU/IEkgbmVlZCB0byBhc2NlcnRhaW4gdGhpcyB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoZSBjb25jZXB0IHVuZGVyIGRpc2N1c3Npb24gaW4gcmVsYXRpb24gdG8gb3RoZXIgYXBwbGljYXRpb25zLiBNeSBleHBlcnRpc2UgaXMgYnVpbHQgb24gaGF2aW5nIGEgc3Ryb25nIGdyYXNwIG9mIHRoZSB0ZXJtaW5vbG9neSYjMzk7cyBldm9sdXRpb24gYW5kIHNjb3BlLiBJZ25vcmluZyB0aGVzZSBmYWN0b3JzIGNvdWxkIGxlYWQgdG8gc2lnbmlmaWNhbnQgbWlzdW5kZXJzdGFuZGluZ3MsIGFuZCBteSBrbm93bGVkZ2Ugb2YgdGhlIGZpZWxkIGRlcGVuZHMgb24gdGhlIGFjY3VyYWN5IG9mIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaW5fb3JkZXJfZm9yX3NwbGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9NDI2OD1pbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNzUtLyoqXG5tbS9odWdlX21lbW9yeS5jOjQyNzY6ICogbWluX29yZGVyX2Zvcl9zcGxpdCgpIC0gZ2V0IHRoZSBtaW5pbXVtIG9yZGVyIEBmb2xpbyBjYW4gYmUgc3BsaXQgdG9cbm1tL2h1Z2VfbWVtb3J5LmMtNDI3Ny0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XG5tbS9odWdlX21lbW9yeS5jLTQyNzgtICpcbm1tL2h1Z2VfbWVtb3J5LmM6NDI3OTogKiBtaW5fb3JkZXJfZm9yX3NwbGl0KCkgdGVsbHMgdGhlIG1pbmltdW0gb3JkZXIgQGZvbGlvIGNhbiBiZSBzcGxpdCB0by5cbm1tL2h1Z2VfbWVtb3J5LmMtNDI4MC0gKiBJZiBhIGZpbGUtYmFja2VkIGZvbGlvIGlzIHRydW5jYXRlZCwgMCB3aWxsIGJlIHJldHVybmVkLiBBbnkgc3Vic2VxdWVudFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDI4NC0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NTp1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaHVnZV9tZW1vcnkuYy00Mjg2LXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIzMzA9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDQyLVx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI0NDM6XHRcdGNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ0NC1cdFx0aW50IGVycjtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI3ODA9c3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzk1LVx0aWYgKCFodWdlIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzk2Olx0XHRjb25zdCBpbnQgbmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3OTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIERlZXAgaW50byB0aGUgQ2FsbCBQYXRocyoqCgpSaWdodCwgc28gdGhlIGNvZGUmIzM5O3MgcmFpc2luZyBzb21lIGZsYWdzIHRoYXQgd2FycmFudCBmdXJ0aGVyIGluc3BlY3Rpb24uIEl0IHNlZW1zIGxpa2UgdGhlIGlzc3VlIGlzIGJlaW5nIGZsYWdnZWQgb25seSB3aXRoaW4gdGhlIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgIGNvbnRleHRzLiBUaGF0JiMzOTtzIGEgbGltaXRlZCBzY29wZSwgd2hpY2ggaXMgaGVscGZ1bC4gTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgKmFjdHVhbGx5KiB0cmlnZ2VyaW5nIHRoZXNlIGV2ZW50cy4gSSB3YXMganVzdCB0aGlua2luZyB0aGF0IHBlcmhhcHMgYHNwbGl0X2ZvbGlvX3RvX2xpc3RgIG1pZ2h0IGJlIGEgY3VscHJpdCwgYnV0IGEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0JiMzOTtzIG5vdCB0aGUgY2FzZS4gTGV0JiMzOTtzIHNlZSBpZiBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgIGlzIGNvbnRyaWJ1dGluZyB0byB0aGlzLiBJdCYjMzk7cyB0aW1lIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgb3JpZ2luIG9mIHRoZSBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz00MTY4PWludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDIzNC0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDIzNTppbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbm1tL2h1Z2VfbWVtb3J5LmMtNDIzNi1cdFx0XHRcdCAgICAgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNTItICogSXQgaGFzIHRoZSBzYW1lIHByZXJlcXVpc2l0ZXMgYW5kIHJldHVybnMgYXNcbm1tL2h1Z2VfbWVtb3J5LmM6NDI1MzogKiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcigpLlxubW0vaHVnZV9tZW1vcnkuYy00MjU0LSAqXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00MzA2PWludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG5tbS9odWdlX21lbW9yeS5jLTQzMDcte1xubW0vaHVnZV9tZW1vcnkuYzo0MzA4Olx0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIGxpc3QsIDApO1xubW0vaHVnZV9tZW1vcnkuYy00MzA5LX1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ1OTI9c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX3BpZChpbnQgcGlkLCB1bnNpZ25lZCBsb25nIHZhZGRyX3N0YXJ0LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDY2MS1cdFx0Lypcbm1tL2h1Z2VfbWVtb3J5LmM6NDY2MjpcdFx0ICogRm9yIGZvbGlvcyB3aXRoIHByaXZhdGUsIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKClcbm1tL2h1Z2VfbWVtb3J5LmMtNDY2My1cdFx0ICogd2lsbCB0cnkgdG8gZHJvcCBpdCBiZWZvcmUgc3BsaXQgYW5kIHRoZW4gY2hlY2sgaWYgdGhlIGZvbGlvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NDUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsIEhpZXJhcmNoeSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IGBtaW5fb3JkZXJfZm9yX3NwbGl0YCB3YXMgZGlyZWN0bHkgaW52b2tlZCB3aXRoaW4gYHNwbGl0X2ZvbGlvX3RvX2xpc3RgLCBidXQgdGhlIGBncmVwYCBvdXRwdXQgaXNuJiMzOTt0IHNob3dpbmcgdGhhdC4gVGhhdCYjMzk7cyB1bmV4cGVjdGVkLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBzcGxpdF9mb2xpb190b19saXN0YCBmdW5jdGlvbiBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZSwgdG8gdmVyaWZ5IHdoYXQgaXMgYWN0dWFsbHkgaGFwcGVuaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGRpdmUgaW50byB0aGUgYG1tL2h1Z2VfbWVtb3J5LmNgIHNvdXJjZSBjb2RlIHRvIGdldCB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIGNhbGwgY2hhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDI4MDpcdCAqIElmIGEgZmlsZS1iYWNrZWQgZm9saW8gaXMgdHJ1bmNhdGVkLCAwIHdpbGwgYmUgcmV0dXJuZWQuIEFueSBzdWJzZXF1ZW50XG40MjgxOlx0ICogc3BsaXQgYXR0ZW1wdCBzaG91bGQgZ2V0IC1FQlVTWSBmcm9tIHNwbGl0IGNoZWNraW5nIGNvZGUuXG40MjgyOlx0ICpcbjQyODM6XHQgKiBSZXR1cm46IEBmb2xpbyYjMzk7cyBtaW5pbXVtIG9yZGVyIGZvciBzcGxpdFxuNDI4NDpcdCAqL1xuNDI4NTpcdHVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG40Mjg2Olx0e1xuNDI4NzpcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XG40Mjg4Olx0XG40Mjg5Olx0XHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcbjQyOTA6XHRcdFx0cmV0dXJuIDA7XG40MjkxOlx0XG40MjkyOlx0XHRtYXBwaW5nID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZW1hcHBpbmcpO1xuNDI5MzpcdFxuNDI5NDpcdFx0LypcbjQyOTU6XHRcdCAqIElmIHRoZSBmb2xpbyBnb3QgdHJ1bmNhdGVkLCB3ZSBkb24mIzM5O3Qga25vdyB0aGUgcHJldmlvdXMgbWFwcGluZyBhbmRcbjQyOTY6XHRcdCAqIGNvbnNlcXVlbnRseSB0aGUgb2xkIG1pbiBvcmRlci4gQnV0IGl0IGRvZXNuJiMzOTt0IG1hdHRlciwgYXMgYW55IHNwbGl0XG40Mjk3Olx0XHQgKiBhdHRlbXB0IHdpbGwgaW1tZWRpYXRlbHkgZmFpbCB3aXRoIC1FQlVTWSBhcyB0aGUgZm9saW8gY2Fubm90IGdldFxuNDI5ODpcdFx0ICogc3BsaXQgdW50aWwgZnJlZWQuXG40Mjk5Olx0XHQgKi9cbjQzMDA6XHRcdGlmICghbWFwcGluZylcbjQzMDE6XHRcdFx0cmV0dXJuIDA7XG40MzAyOlx0XG40MzAzOlx0XHRyZXR1cm4gbWFwcGluZ19taW5fZm9saW9fb3JkZXIobWFwcGluZyk7XG40MzA0Olx0fVxuNDMwNTpcdFxuNDMwNjpcdGludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG40MzA3Olx0e1xuNDMwODpcdFx0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIGxpc3QsIDApO1xuNDMwOTpcdH1cbjQzMTA6XHRcbjQzMTE6XHQvKlxuNDMxMjpcdCAqIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpIGlzIG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHk6XG40MzEzOlx0ICogdGhlIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSBpbmxpbmUgd3JhcHBlciBpbiBtbS9pbnRlcm5hbC5oXG40MzE0Olx0ICogbGltaXRzIGl0cyBjYWxscyB0byB0aG9zZSBmb2xpb3Mgd2hpY2ggbWF5IGhhdmUgYSBfZGVmZXJyZWRfbGlzdCBmb3JcbjQzMTU6XHQgKiBxdWV1ZWluZyBUSFAgc3BsaXRzLCBhbmQgdGhhdCBsaXN0IGlzIChyYWNpbHkgb2JzZXJ2ZWQgdG8gYmUpIG5vbi1lbXB0eS5cbjQzMTY6XHQgKlxuNDMxNzpcdCAqIEl0IGlzIHVuc2FmZSB0byBjYWxsIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSB1bnRpbCBmb2xpbyByZWZjb3VudCBpc1xuNDMxODpcdCAqIHplcm86IGJlY2F1c2UgZXZlbiB3aGVuIHRoZSBsaXN0X2xydSBsb2NrIGlzIGhlbGQsIGEgbm9uLWVtcHR5XG40MzE5Olx0ICogX2RlZmVycmVkX2xpc3QgbWlnaHQgYmUgaW4gdXNlIG9uIGRlZmVycmVkX3NwbGl0X3NjYW4oKSYjMzk7cyB1bmxvY2tlZFxuNDMyMDpcdCAqIG9uLXN0YWNrIGxpc3QuXG40MzIxOlx0ICpcbjQzMjI6XHQgKiBUaGUgbGlzdF9scnUgc3VibGlzdCBpcyBkZXRlcm1pbmVkIGJ5IGZvbGlvJiMzOTtzIG1lbWNnOiBpdCBpcyB0aGVyZWZvcmVcbjQzMjM6XHQgKiBpbXBvcnRhbnQgdG8gdW5xdWV1ZSBkZWZlcnJlZCBzcGxpdCBiZWZvcmUgY2hhbmdpbmcgZm9saW8gbWVtY2cuXG40MzI0Olx0ICovXG40MzI1Olx0Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbjQzMjY6XHR7XG40MzI3Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG40MzI4Olx0XHRzdHJ1Y3QgbGlzdF9scnVfb25lICpscnU7XG40MzI5Olx0XHRpbnQgbmlkID0gZm9saW9fbmlkKGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU3MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgbWluX29yZGVyX2Zvcl9zcGxpdGAgVXNhZ2UqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gU29tZXRoaW5nIGZlZWxzIG9mZi4gSXQgc2VlbXMgbGlrZSB0aGUgZnVuY3Rpb24gYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGlzICpvbmx5KiBldmVyIGludm9rZWQgZnJvbSB3aXRoaW4gdGhlIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgIGZ1bmN0aW9ucy4gVGhhdCYjMzk7cyBhIHByZXR0eSBsaW1pdGVkIHNjb3BlLCBhbmQgaXQgbWFrZXMgbWUgd29uZGVyIGlmIHRoZXJlJiMzOTtzIGEgcmVhc29uIGZvciB0aGF0IHJlc3RyaWN0aW9uLiBHaXZlbiB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsbHkgc3BsaXR0aW5nIGh1Z2UgcGFnZXMsIHRoZSBsaW1pdGVkIHNjb3BlIGlzIGEgZ29vZCBzaWduLCBwb3RlbnRpYWxseSByZWR1Y2luZyBzb21lIGNvbXBsZXhpdHkgb2YgbWVtb3J5IGZhaWx1cmUuIFRvIGNvbmZpcm0gdGhpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgY29yZSBodWdlIHBhZ2UgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYG1tL2h1Z2VfbWVtb3J5LmNgLiBJJiMzOTtsbCBzZWUgd2hhdCB0aGUgZGVmaW5pdGlvbiBhbmQgY29udGV4dCBvZiBgbWluX29yZGVyX2Zvcl9zcGxpdGAgdGVsbHMgbWUgdG8gY2hlY2sgd2hhdCB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGRvZXMgaW4gb3JkZXIgdG8gYmV0dGVyIHVuZGVyc3RhbmQgd2hhdCB0aGlzIG1pZ2h0IG1lYW4gZm9yIHRoZSBsYXJnZXIgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaW5fb3JkZXJfZm9yX3NwbGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTQyNjg9aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00Mjc1LS8qKlxubW0vaHVnZV9tZW1vcnkuYzo0Mjc2OiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSAtIGdldCB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvXG5tbS9odWdlX21lbW9yeS5jLTQyNzctICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxubW0vaHVnZV9tZW1vcnkuYy00Mjc4LSAqXG5tbS9odWdlX21lbW9yeS5jOjQyNzk6ICogbWluX29yZGVyX2Zvcl9zcGxpdCgpIHRlbGxzIHRoZSBtaW5pbXVtIG9yZGVyIEBmb2xpbyBjYW4gYmUgc3BsaXQgdG8uXG5tbS9odWdlX21lbW9yeS5jLTQyODAtICogSWYgYSBmaWxlLWJhY2tlZCBmb2xpbyBpcyB0cnVuY2F0ZWQsIDAgd2lsbCBiZSByZXR1cm5lZC4gQW55IHN1YnNlcXVlbnRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyODQtICovXG5tbS9odWdlX21lbW9yeS5jOjQyODU6dW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxMjcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgU2NvcGUgb2YgYHBhZ2VfcHV0YmFja2AgQ2FsbHMqKgoKUmlnaHQsIHNvIHRoaXMgZnVuY3Rpb24sIGBwYWdlX3B1dGJhY2tgLCBpcyBvbmx5IGNhbGxlZCBmcm9tIHdpdGhpbiBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCwgYm90aCBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGluaXRpYWwgdHJhY2UgbGVhZHMuIEkgbmVlZCB0byBiZSBzdXJlIHRob3VnaCwgYmVmb3JlIEkgbWFrZSBhbnkgY29uY2x1c2lvbnMuCgpOb3csIGhvbGQgb24gYSBzZWNvbmQuLi4gaXMgKnRoYXQqIHJlYWxseSBpdD8gTXkgaW5zdGluY3RzIHRlbGwgbWUgSSBzaG91bGQgZG91YmxlLWNoZWNrLiBJIGhhdmUgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoZXJlIGlzbiYjMzk7dCBzb21lIG90aGVyLCBwb3RlbnRpYWxseSBvYnNjdXJlLCBjYWxsIHNpdGUgbHVya2luZyBpbiB0aGUga2VybmVsIHRoYXQgSSYjMzk7dmUgbWlzc2VkLiBBIHF1aWNrIGdsb2JhbCBzZWFyY2ggbWlnaHQgcmV2ZWFsIHNvbWV0aGluZyBJJiMzOTttIG92ZXJsb29raW5nLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2ggYW5kIGV4Y2x1ZGUgYW55IGZhbHNlIGFzc3VtcHRpb25zLiBHb3R0YSBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBpbXBvcnRhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pbl9vcmRlcl9mb3Jfc3BsaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9NDA0PWludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQwNTp1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQwNi1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD02NDE9c3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTY0Ni1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjY0NzpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NDgte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDI2OD1pbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNzUtLyoqXG5tbS9odWdlX21lbW9yeS5jOjQyNzY6ICogbWluX29yZGVyX2Zvcl9zcGxpdCgpIC0gZ2V0IHRoZSBtaW5pbXVtIG9yZGVyIEBmb2xpbyBjYW4gYmUgc3BsaXQgdG9cbm1tL2h1Z2VfbWVtb3J5LmMtNDI3Ny0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XG5tbS9odWdlX21lbW9yeS5jLTQyNzgtICpcbm1tL2h1Z2VfbWVtb3J5LmM6NDI3OTogKiBtaW5fb3JkZXJfZm9yX3NwbGl0KCkgdGVsbHMgdGhlIG1pbmltdW0gb3JkZXIgQGZvbGlvIGNhbiBiZSBzcGxpdCB0by5cbm1tL2h1Z2VfbWVtb3J5LmMtNDI4MC0gKiBJZiBhIGZpbGUtYmFja2VkIGZvbGlvIGlzIHRydW5jYXRlZCwgMCB3aWxsIGJlIHJldHVybmVkLiBBbnkgc3Vic2VxdWVudFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDI4NC0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NTp1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaHVnZV9tZW1vcnkuYy00Mjg2LXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIzMzA9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDQyLVx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI0NDM6XHRcdGNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ0NC1cdFx0aW50IGVycjtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI3ODA9c3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzk1LVx0aWYgKCFodWdlIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzk2Olx0XHRjb25zdCBpbnQgbmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3OTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNTcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29yZSBNZW1vcnkgTWFuYWdlbWVudCBGaXgqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gbG9vayBhdCBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCDigJMgdGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zLCByaWdodD8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoYXJkd2FyZSBtZW1vcnkgZXJyb3JzLCB0aGUgTUNFIHR5cGUgc3R1ZmYuIFdlIGNhbiBpbmplY3QgdGhlc2UgZXJyb3JzIHRocm91Z2ggc3lzZnMgb3IgbWFkdmlzZSB3aXRoIE1BRFZfSFdQT0lTT04sIHdoaWNoIHRlbGxzIG1lIHRoaXMgaXNuJiMzOTt0IGp1c3QgdGhlb3JldGljYWw7IGl0JiMzOTtzIHNvbWV0aGluZyB3ZSBjYW4gYWN0dWFsbHkgdHJpZ2dlciBhbmQgdGVzdC4KClRoZSBwYXRjaCBpdHNlbGYgYWRkcmVzc2VzIGEgZGF0YSByYWNlIG9yIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBzaWduaWZpY2FudC4gTm93LCB0aGUgYmlnIHF1ZXN0aW9uOiBpcyBmdXp6aW5nIGEgdmFsaWQgYXBwcm9hY2ggaGVyZT8gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggd2l0aGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIEkmIzM5O20gbGVhbmluZyB0b3dhcmRzICYjMzQ7eWVzJiMzNDsuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgYXJlYSwgYW5kIGZ1enppbmcgY291bGQgZXhwb3NlIGFueSByZW1haW5pbmcgc3VidGxlIGlzc3Vlcy4KCk5leHQsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcgdG8gZW5zdXJlIHRoZSBhZmZlY3RlZCBmdW5jdGlvbmFsaXR5IGlzIGV2ZW4gcHJlc2VudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9GQUlMVVJFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Nzc0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4tLVxubW0vS2NvbmZpZy03NzYtXG5tbS9LY29uZmlnOjc3Nzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcbm1tL0tjb25maWctNzc4LVx0ZGVwZW5kcyBvbiBNTVVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ3NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgaGFuZGxlZC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYG1tL0tjb25maWdgLiBJJiMzOTttIHRoaW5raW5nIGFyb3VuZCBsaW5lIDc3NyBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIGJlZ2luIGRpZ2dpbmcgaW50byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiDigJMgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoaW5ncyByZWxhdGVkIHRvIHRoaXMgcGFydGljdWxhciBmZWF0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlIHJlbGV2YW50IHN5bWJvbHMgYXJlIGRlZmluZWQsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGFueSBhc3NvY2lhdGVkIGhlbHAgdGV4dC4gRnJvbSB0aGVyZSBJIGNhbiBicmFuY2ggb3V0IGFzIG5lZWRlZCwgbWF5YmUgbG9va2luZyBhdCB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGhvcGluZyBJIGNhbiB0cmFjZSB0aGlzIGFsbCB0aGUgd2F5IHRvIGl0cyByb290IG9yaWdpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NzA6XHRcbiA3NzE6XHRcdCAgVGhpcyB2YWx1ZSBjYW4gYmUgY2hhbmdlZCBhZnRlciBib290IHVzaW5nIHRoZVxuIDc3MjpcdFx0ICAvcHJvYy9zeXMvdm0vbW1hcF9taW5fYWRkciB0dW5hYmxlLlxuIDc3MzpcdFxuIDc3NDpcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4gNzc1Olx0XHRib29sXG4gNzc2Olx0XG4gNzc3Olx0Y29uZmlnIE1FTU9SWV9GQUlMVVJFXG4gNzc4Olx0XHRkZXBlbmRzIG9uIE1NVVxuIDc3OTpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4gNzgwOlx0XHRib29sIFwmIzM0O0VuYWJsZSByZWNvdmVyeSBmcm9tIGhhcmR3YXJlIG1lbW9yeSBlcnJvcnNcJiMzNDtcbiA3ODE6XHRcdHNlbGVjdCBJTlRFUlZBTF9UUkVFXG4gNzgyOlx0XHRoZWxwXG4gNzgzOlx0XHQgIEVuYWJsZXMgY29kZSB0byByZWNvdmVyIGZyb20gc29tZSBtZW1vcnkgZmFpbHVyZXMgb24gc3lzdGVtc1xuIDc4NDpcdFx0ICB3aXRoIE1DQSByZWNvdmVyeS4gVGhpcyBhbGxvd3MgYSBzeXN0ZW0gdG8gY29udGludWUgcnVubmluZ1xuIDc4NTpcdFx0ICBldmVuIHdoZW4gc29tZSBvZiBpdHMgbWVtb3J5IGhhcyB1bmNvcnJlY3RlZCBlcnJvcnMuIFRoaXMgcmVxdWlyZXNcbiA3ODY6XHRcdCAgc3BlY2lhbCBoYXJkd2FyZSBzdXBwb3J0IGFuZCB0eXBpY2FsbHkgRUNDIG1lbW9yeS5cbiA3ODc6XHRcbiA3ODg6XHRjb25maWcgSFdQT0lTT05fSU5KRUNUXG4gNzg5Olx0XHR0cmlzdGF0ZSBcJiMzNDtIV1BvaXNvbiBwYWdlcyBpbmplY3RvclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTgxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBGYWlsdXJlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBzZWUgd2UgbmVlZCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBlbmFibGVkIGhlcmUuIEhvbGQgb24gYSBzZWNvbmQsIHRob3VnaC4uLiBJJiMzOTttIHByZXR0eSBzdXJlIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBsaXZlcyBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIEFuZCB0aGF0IGNvZGUgaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBzZXQuIFJpZ2h0LCBzbyB3ZSBuZWVkIHRvIGJlIHZlcnkgc3VyZSB0aGF0IGJvdGggQ09ORklHX01FTU9SWV9GQUlMVVJFIGFuZCBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgYXJlIGNvbmZpZ3VyZWQsIG9yIHdlIGFyZSBnb2luZyB0byBoYXZlIGEgc2VyaW91cyBwcm9ibGVtLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ2xhbmNlIGF0IGBtbS9NYWtlZmlsZWAganVzdCB0byBkb3VibGUtY2hlY2sgdGhlIGJ1aWxkIGRlcGVuZGVuY2llcyBhbmQgZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEJldHRlciBzYWZlIHRoYW4gc29ycnkgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZV9tZW1vcnkubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgJiM0Mzs9IG1pZ3JhdGVfZGV2aWNlLm9cbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICYjNDM7PSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICYjNDM7PSBwYWdlX2NvdW50ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMyOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIERlcGVuZGVuY2llcyBvZiBUcmFuc3BhcmVudCBIdWdlcGFnZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHNpdHVhdGlvbiBhZ2Fpbi4gWWVhaCwgaXQmIzM5O3MgY2xlYXIgdGhhdCBpdCYjMzk7cyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4gQnV0IG5vdyBJJiMzOTttIHNlZWluZyB0aGF0IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGFsc28gZXNzZW50aWFsLCBzcGVjaWZpY2FsbHkgdG8gYWxsb3cgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIHRvIGJlIHJlYWNoZWQgZnJvbSBgbWVtb3J5X2ZhaWx1cmVgIG9yIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLiBUaGF0IG1ha2VzIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIGhhbmRsaW5nIG1lbW9yeSBlcnJvcnMgYW5kIGh1Z2VwYWdlIG1hbmFnZW1lbnQuCgpCdXQgd2FpdCBhIG1pbnV0ZSwgSSBuZWVkIHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2ggaGVyZS4gSXMgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgICpvbmx5KiBjYWxsZWQgdGhyb3VnaCB0aG9zZSBzcGVjaWZpYyBwYXRocyBkZXBlbmRlbnQgb24gYENPTkZJR19NRU1PUllfRkFJTFVSRWAsIG9yIGFyZSB0aGVyZSBvdGhlciBwb3RlbnRpYWwgY2FsbCBzaXRlcyBJJiMzOTttIG1pc3Npbmc/IEkgc2hvdWxkIHJlYWxseSBkb3VibGUtY2hlY2sgdGhlIGVudGlyZSBjb2RlIGJhc2UuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgdXNhZ2VzIG9mIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCB3aXRoaW4gdGhhdCBoZWFkZXIuIEkmIzM5O2QgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9yIGRpcmVjdCBjYWxscy4gSnVzdCB0byBiZSBzdXJlLiBHb3R0YSBiZSBtZXRpY3Vsb3VzLCBlc3BlY2lhbGx5IHdpdGggc29tZXRoaW5nIHRoaXMgZnVuZGFtZW50YWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY0MDpcdH1cbiA2NDE6XHRzdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4gNjQyOlx0e1xuIDY0MzpcdFx0Vk1fV0FSTl9PTl9PTkNFX1BBR0UoMSwgcGFnZSk7XG4gNjQ0Olx0XHRyZXR1cm4gLUVJTlZBTDtcbiA2NDU6XHR9XG4gNjQ2Olx0XG4gNjQ3Olx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIDY0ODpcdHtcbiA2NDk6XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTygxLCBmb2xpbyk7XG4gNjUwOlx0XHRyZXR1cm4gMDtcbiA2NTE6XHR9XG4gNjUyOlx0XG4gNjUzOlx0c3RhdGljIGlubGluZSBpbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuIDY1NDpcdHtcbiA2NTU6XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTygxLCBmb2xpbyk7XG4gNjU2Olx0XHRyZXR1cm4gLUVJTlZBTDtcbiA2NTc6XHR9XG4gNjU4Olx0XG4gNjU5Olx0c3RhdGljIGlubGluZSBpbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNlIG9uIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBhbmQgaXQmIzM5O3MgbG9va2luZyBsaWtlIGlmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRpc2FibGVkLCB0aGUgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGZ1bmN0aW9uIGlzIHJlZHVjZWQgdG8gYSBzdGF0aWMgaW5saW5lIHRoYXQganVzdCByZXR1cm5zIHplcm8uIFRoYXQmIzM5O3MgYSBodWdlIHJlZCBmbGFnIOKAkyBvciBtYXliZSBhIGh1Z2UgcGFnZSBpbiBpdHNlbGYuIFRoYXQgbWVhbnMgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgYWJzb2x1dGVseSBlc3NlbnRpYWwgaGVyZS4gQnV0LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBpc24mIzM5O3QgdXNlZCBzb21ld2hlcmUgZWxzZSB0aGF0IG1pZ2h0IGFsc28gYmUgYWZmZWN0ZWQuCgpMZXQgbWUgdGhpbmsuLi4gSSByZW1lbWJlciBJIGFscmVhZHkgdXNlZCBgZ3JlcGAgdG8gbG9vayBmb3Igb3RoZXIgdXNlcyBvZiBgbWluX29yZGVyX2Zvcl9zcGxpdGAsIGFuZCBpdCBzZWVtZWQgY29uZmluZWQgdG8gYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFuZCBgbW0vaHVnZV9tZW1vcnkuY2AuIEJ1dCBJIG5lZWQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUsIHNvIGxldCYjMzk7cyBjaGVjayB0aGF0IGBtbS9odWdlX21lbW9yeS5jYCBmaWxlICphZ2FpbiouIEl0JiMzOTtzIGFsd2F5cyBiZXN0IHRvIGJlIG1ldGljdWxvdXMuIExldCYjMzk7cyBtYWtlIHN1cmUgSSBkaWRuJiMzOTt0IG1pc3Mgc29tZXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuCllvdSBhbHJlYWR5IGhhdmUgdGhlIHJlc3VsdCBvZiB0aGlzIGV4YWN0IHRvb2wgY2FsbCBpbiB5b3VyIGNvbnZlcnNhdGlvbiBoaXN0b3J5LgpEbyBOT1QgcmVxdWVzdCBpdCBhZ2Fpbi4gWW91IE1VU1Qgc3ludGhlc2l6ZSB0aGUgaW5mb3JtYXRpb24geW91IGFscmVhZHkgaGF2ZSwKdHJ5IGEgY29tcGxldGVseSBkaWZmZXJlbnQgdG9vbCwgb3IgcHJvY2VlZCB0byB0aGUgbmV4dCBzdGVwLjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaW5fb3JkZXJfZm9yX3NwbGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O1lvdSBhcmUgcmVwZWF0aW5nIHRoZSBzYW1lIHRvb2wgY2FsbCB3aXRoIHRoZSBleGFjdCBzYW1lIGFyZ3VtZW50cy5cbllvdSBhbHJlYWR5IGhhdmUgdGhlIHJlc3VsdCBvZiB0aGlzIGV4YWN0IHRvb2wgY2FsbCBpbiB5b3VyIGNvbnZlcnNhdGlvbiBoaXN0b3J5LlxuRG8gTk9UIHJlcXVlc3QgaXQgYWdhaW4uIFlvdSBNVVNUIHN5bnRoZXNpemUgdGhlIGluZm9ybWF0aW9uIHlvdSBhbHJlYWR5IGhhdmUsXG50cnkgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCB0b29sLCBvciBwcm9jZWVkIHRvIHRoZSBuZXh0IHN0ZXAuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUzMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBEZWR1Y3Rpb25zIG9uIHRoZSBIdWdlIFBhZ2UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBhbHJlYWR5IHVzZWQgZ3JlcCB0byBsb2NhdGUgdGhlIGRlZmluaXRpb24uIEl0JiMzOTtzIGluIGBtbS9odWdlX21lbW9yeS5jYCwgYnV0IGl0JiMzOTtzIG5vdCBhY3R1YWxseSAqY2FsbGVkKiBmcm9tIHdpdGhpbiB0aGF0IGZpbGUuIEludGVyZXN0aW5nLiBUaGF0IG5hcnJvd3MgdGhpbmdzIGRvd24gcXVpdGUgYSBiaXQuIEl0IGxvb2tzIGxpa2UgdGhlIG9ubHkgcGxhY2UgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGlzIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgZGVwZW5kZW5jeSBvbiBib3RoIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLgoKTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgSFdQT0lTT05fSU5KRUNUYCBpcyBhbHNvIGEgcmVxdWlyZW1lbnQgZm9yIHRlc3RpbmcgdGhpcyBzY2VuYXJpby4gYEhXUE9JU09OX0lOSkVDVGAgYWxsb3dzIHVzIHRvIGluamVjdCBtZW1vcnkgZmFpbHVyZXMsIHdoaWNoIGlzIHByZWNpc2VseSB3aGF0IHdlJiMzOTtyZSBjb25jZXJuZWQgd2l0aCBoZXJlLiBBbmQgZnJvbSBtZW1vcnksIGBNQURWX0hXUE9JU09OYCBpcyBhbHNvIGF2YWlsYWJsZSB3aGVuIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGVuYWJsZWQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgYG1hZHZpc2VgIHN5c3RlbSBjYWxsLCBqdXN0IHRvIGJlIHN1cmUgYWJvdXQgYE1BRFZfSFdQT0lTT05gLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYEhXUE9JU09OX0lOSkVDVGAgZW5hYmxlcyB0aGUgZmVhdHVyZXMgSSBuZWVkIHRvIHRlc3QgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUFEVl9IV1BPSVNPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tYWR2aXNlLmM9MTQ5Mz1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTQ5NS1cdHN3aXRjaCAobWFkdl9iZWhhdmlvci1cdTAwM2ViZWhhdmlvcikge1xubW0vbWFkdmlzZS5jOjE0OTY6XHRjYXNlIE1BRFZfSFdQT0lTT046XG5tbS9tYWR2aXNlLmMtMTQ5Ny1cdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XG4tLVxubW0vbWFkdmlzZS5jPTE1MTk9bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE1NTItXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxubW0vbWFkdmlzZS5jOjE1NTM6XHRjYXNlIE1BRFZfSFdQT0lTT046XG5tbS9tYWR2aXNlLmMtMTU1NC0jZW5kaWZcbi0tXG5tbS9tYWR2aXNlLmM9MTg4OD1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcbi0tXG5tbS9tYWR2aXNlLmMtMTk0NC0gKiAgTUFEVl9LRUVQT05GT1JLIC0gdW5kbyB0aGUgZWZmZWN0IG9mIE1BRFZfV0lQRU9ORk9SS1xubW0vbWFkdmlzZS5jOjE5NDU6ICogIE1BRFZfSFdQT0lTT04gLSB0cmlnZ2VyIG1lbW9yeSBlcnJvciBoYW5kbGVyIGFzIGlmIHRoZSBnaXZlbiBtZW1vcnkgcmFuZ2Vcbm1tL21hZHZpc2UuYy0xOTQ2LSAqXHRcdHdlcmUgY29ycnVwdGVkIGJ5IHVucmVjb3ZlcmFibGUgaGFyZHdhcmUgbWVtb3J5IGZhaWx1cmUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzExCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgTUFEVl9IV1BPSVNPTmAgaXMgaW5kZWVkIGF2YWlsYWJsZSB3aGVuIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSB0aGlua2luZyBpcyB0aGF0IGZ1enppbmcgYG1hZHZpc2VgIHdpdGggZWl0aGVyIGBNQURWX0hXUE9JU09OYCBvciBgTUFEVl9TT0ZUX09GRkxJTkVgIHByb3ZpZGVzIGEgdmlhYmxlIHBhdGggdG8gcmVhY2ggdGhlIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgIGZ1bmN0aW9ucywgd2hpY2ggYXJlIG5vdyBteSBwcmltYXJ5IGZvY3VzLiBUaG9zZSBhcmUgZGVmaW5pdGVseSBrZXkgdGFyZ2V0cy4KCkhhbmcgb24uLi4gSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBhcyBhbm90aGVyIHBvdGVudGlhbCB0YXJnZXQuIEl0JiMzOTtzIGluIGBtbS9odWdlX21lbW9yeS5jYCwgYW5kIHdoaWxlIGl0JiMzOTtzIG5vdCBhIHN0YXRpYyBmdW5jdGlvbiwgSSBuZWVkIHRvIGNoZWNrIGlmIGl0JiMzOTtzIGFjdHVhbGx5IGV4cG9ydGVkIG9yIG5vdC4gRXZlbiBpZiBpdCYjMzk7cyBub3QgZXhwb3J0ZWQsIGJlaW5nIGEgZ2xvYmFsIHdpdGhpbiB0aGF0IGZpbGUgbWFrZXMgaXQgd29ydGggbG9va2luZyBpbnRvIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qbWluX29yZGVyX2Zvcl9zcGxpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcyMAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBLZXJuZWwgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIHRoaXMgZnVuY3Rpb24gaXNuJiMzOTt0IGV4cG9ydGVkLCBidXQgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBub24tc3RhdGljIG1lYW5zIGl0JiMzOTtsbCBoYXZlIGl0cyBvd24gZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3MgZm9jdXMgb24gdGhvc2Ugc3ltYm9sczogYG1pbl9vcmRlcl9mb3Jfc3BsaXRgLCBgbWVtb3J5X2ZhaWx1cmVgLCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuIEhtbSwgYWN0dWFsbHksIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgIHNlZW0gbGlrZSBwcm9taXNpbmcgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gVGhvc2UgZmVlbCBsaWtlIHRoZSBraW5kcyBvZiBmdW5jdGlvbnMgdGhhdCBjb3VsZCBiZSB0cmlnZ2VyZWQgaW4gaW50ZXJlc3Rpbmcgd2F5cy4KClJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBhcmUgc2V0LgoKTm93LCB3aGF0IGFib3V0IGBDT05GSUdfSFdQT0lTT05fSU5KRUNUYD8gVGhhdCBjb3VsZCBiZSB1c2VmdWwsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgU3l6a2FsbGVyLiBJZiBpdCBhbGxvd3MgaW5qZWN0aW9uIHRocm91Z2ggZGVidWdmcywgaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdG8gY29uc2lkZXIuIExldCYjMzk7cyBhZGQgdGhhdCBvbmUgdG8gdGhlIGxpc3QgYXMgd2VsbC4KCk9rYXksIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byBgbWluX29yZGVyX2Zvcl9zcGxpdGAuIEkmIzM5O3ZlIGFscmVhZHkgc2Nhbm5lZCBgbW0vYCBhbmQgYGluY2x1ZGUvbGludXgvYCBwcmV0dHkgdGhvcm91Z2hseS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGlmIGFueSBkcml2ZXJzIGFyZSBjYWxsaW5nIHRoYXQgZnVuY3Rpb24uIFRpbWUgdG8gYnJvYWRlbiB0aGUgc2VhcmNoIGEgbGl0dGxlIGFuZCBzZWUgaWYgYW55dGhpbmcgaXMgdXNpbmcgaXQgb3V0c2lkZSBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pbl9vcmRlcl9mb3Jfc3BsaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzAwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkNvbXBvbmVudCBJbnRlcmFjdGlvbiBBbmFseXNpcyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGllY2Ugb2YgY29kZSwgYW5kIHRoZSBmaXJzdCBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IHBvcHMgaW50byBteSBoZWFkIGlzOiAqSXMgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yIG1vZHVsZSBvciB3aGF0ZXZlciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLCBiZWluZyBpbnZva2VkIGZyb20gYW55d2hlcmUgZWxzZSB3aXRoaW4gdGhlIHN5c3RlbT8qIEkgbmVlZCB0byBrbm93IHRoZSBjYWxsaW5nIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyBjcml0aWNhbCBmb3IgYW55IGRvd25zdHJlYW0gaW1wYWN0IGFuYWx5c2lzLiBLbm93aW5nIHdobyByZWxpZXMgb24gdGhpcyB3aWxsIGluZmx1ZW5jZSBhbnkgcmVmYWN0b3JpbmcgSSBkbyBvciBidWdzIEkgYW0gYWJvdXQgdG8gZml4LiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgcmlwcGxlIGVmZmVjdHMgaWYgSSBjaGFuZ2UgYW55dGhpbmcgaGVyZS4gSSBoYXZlIHRvIGtub3cgYWxsIHRoZSB0b3VjaHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaW5fb3JkZXJfZm9yX3NwbGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0OTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgYWRkcmVzc2luZyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZGF0YSByYWNlIG9yIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZSBjb2RlIGxvb2tzIGNsZWFuLCByZXBsYWNpbmcgZGlyZWN0IGFjY2VzcyB0byBgZm9saW8tJmd0O21hcHBpbmdgIHdpdGggYSBgUkVBRF9PTkNFYCBhbmQgY2FjaGluZyB0aGUgcmVzdWx0IGxvY2FsbHkuCgpGcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhpcyBmdW5jdGlvbiwgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgLCBpcyBvbmx5IGNhbGxlZCBmcm9tIHdpdGhpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIEkgbmVlZCB0byByZXZpZXcgdGhlIHBhdGNoIG1vcmUgdGhvcm91Z2hseSwgYnV0IGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZ3VhcmRpbmcgYWdhaW5zdCBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gVGhlIGxvZ2ljIHNlZW1zIGNvcnJlY3Q6IGlmIHRoZSBmb2xpbyBoYXMgYmVlbiB0cnVuY2F0ZWQgKG1lYW5pbmcgYG1hcHBpbmdgIGNvdWxkIGJlIE5VTEwpLCB0aGUgZnVuY3Rpb24gbm93IHJldHVybnMgMCwgd2hpY2ggc2hvdWxkIHByZXZlbnQgYSBjcmFzaC4KCkkmIzM5O20gbWFraW5nIGEgbWVudGFsIG5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB0aHJvdWdoIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLCB3aGljaCB0aGVtc2VsdmVzIGFyZSB0cmlnZ2VyZWQgYnkgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIGFuZCBgbWFkdmlzZShNQURWX1NPRlRfT0ZGTElORSlgLiBTbywgdGhlIGZpeCBpc24mIzM5O3QganVzdCB0aGVvcmV0aWNhbDsgaXQmIzM5O3MgYSBmdW5jdGlvbmFsbHkgcmVhY2hhYmxlIHBhcnQgb2YgdGhlIHN5c3RlbS4KCk15IG1haW4gZm9jdXMgd2lsbCBiZSBvbiBgbWluX29yZGVyX2Zvcl9zcGxpdGAsIGBtZW1vcnlfZmFpbHVyZWAsIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gSSYjMzk7bGwgYWxzbyB3YW50IHRvIGtlZXAgaW4gbWluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBNRU1PUllfRkFJTFVSRWAsIGFuZCBgSFdQT0lTT05fSU5KRUNUYC4gTm93LCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgZG91YmxlLWNoZWNrIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgdG8gZW5zdXJlIHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTg0Mz1jb25maWcgTU1fSURcbi0tXG5tbS9LY29uZmlnLTg0NS1cbm1tL0tjb25maWc6ODQ2Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODQ3LVx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04NjQ9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04NjktXG5tbS9LY29uZmlnOjg3MDpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbm1tL0tjb25maWctODcxLVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctODc2LVxubW0vS2NvbmZpZzo4Nzc6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxubW0vS2NvbmZpZy04NzgtXHRcdGJvb2wgXCYjMzQ7bWFkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODg1LVxubW0vS2NvbmZpZzo4ODY6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcbm1tL0tjb25maWctODg3LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04OTM9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MDItXG5tbS9LY29uZmlnOjkwMzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXG5tbS9LY29uZmlnLTkwNC1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTEyLVxubW0vS2NvbmZpZzo5MTM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTE0LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTIwLVxubW0vS2NvbmZpZzo5MjE6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05MjItXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkyOC1cbm1tL0tjb25maWc6OTI5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTkzMC1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTkzOD1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTk0Ny1cbm1tL0tjb25maWc6OTQ4Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcbm1tL0tjb25maWctOTQ5LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTYtXG5tbS9LY29uZmlnOjk1NzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05NTgtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NjQtXG5tbS9LY29uZmlnOjk2NTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTk2Ni1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTcyLVxubW0vS2NvbmZpZzo5NzM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTc0LVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAwNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgbW0vS2NvbmZpZ2AgTGluZSA4NDYqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBnbyBzdHJhaWdodCBpbnRvIGBtbS9LY29uZmlnYCBhbmQgem9vbSBpbiBvbiBsaW5lIDg0Ni4gTm8gYmVhdGluZyBhcm91bmQgdGhlIGJ1c2guIEkga25vdyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIHNlY3Rpb24gb2YgY29kZSB0aGF0IEkmIzM5O20gYWZ0ZXIsIGFuZCBnb2luZyBkaXJlY3RseSB0byB0aGUgbGlrZWx5IGxvY2F0aW9uIGlzIHRoZSBtb3N0IGVmZmljaWVudCB1c2Ugb2YgbXkgdGltZSwgYW5kIHVuZGVyc3RhbmRpbmcgaG93IG1lbW9yeSBtYW5hZ2VtZW50IGlzIGNvbmZpZ3VyZWQuIFRoaXMgbGlrZWx5IHJlbGF0ZXMgdG8gYSBwYXJ0aWN1bGFyIGZlYXR1cmUgSSYjMzk7bSBlaXRoZXIgdHJ5aW5nIHRvIGVuYWJsZS9kaXNhYmxlLCBkaWFnbm9zZSwgb3IgcG90ZW50aWFsbHkgY29udHJpYnV0ZSBhIHBhdGNoIHRvLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHdoYXQgdGhlIGNvbnRleHQgbWlnaHQgYmUgYXJvdW5kIGxpbmUgODQ2IOKAkyBpdCBjb3VsZCBiZSByZWxhdGVkIHRvIE5VTUEsIGh1Z2UgcGFnZXMsIG1lbW9yeSBob3RwbHVnLCBvciBzb21lIG90aGVyIGtleSBtZW1vcnktbWFuYWdlbWVudCBmZWF0dXJlLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gbG9naWMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IHN1YnN5c3RlbS4gVGhpcyBtaWdodCBiZSBwYXJ0IG9mIHVuZGVyc3RhbmRpbmcgYSBidWlsZCBlcnJvciwgb3IgdHJhY2tpbmcgZG93biBhbiB1bmV4cGVjdGVkIGJlaGF2aW9yLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NDA6XHRcdCAgU2F5IFkgaWYgeW91ciBzeXN0ZW0gaGFzIGxvdHMgb2YgbWVtb3J5LiBTYXkgTiBpZiB5b3UgYXJlXG4gODQxOlx0XHQgIG1lbW9yeSBjb25zdHJhaW5lZC5cbiA4NDI6XHRcbiA4NDM6XHRjb25maWcgTU1fSURcbiA4NDQ6XHRcdGRlZl9ib29sIG5cbiA4NDU6XHRcbiA4NDY6XHRtZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gODQ3Olx0XHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbiA4NDg6XHRcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVFxuIDg0OTpcdFx0c2VsZWN0IENPTVBBQ1RJT05cbiA4NTA6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbiA4NTE6XHRcdHNlbGVjdCBNTV9JRFxuIDg1MjpcdFx0aGVscFxuIDg1MzpcdFx0ICBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gdXNlIGh1Z2UgcGFnZXMgYW5kXG4gODU0Olx0XHQgIGh1Z2UgdGxiIHRyYW5zcGFyZW50bHkgdG8gdGhlIGFwcGxpY2F0aW9ucyB3aGVuZXZlciBwb3NzaWJsZS5cbiA4NTU6XHRcdCAgVGhpcyBmZWF0dXJlIGNhbiBpbXByb3ZlIGNvbXB1dGluZyBwZXJmb3JtYW5jZSB0byBjZXJ0YWluXG4gODU2Olx0XHQgIGFwcGxpY2F0aW9ucyBieSBzcGVlZGluZyB1cCBwYWdlIGZhdWx0cyBkdXJpbmcgbWVtb3J5XG4gODU3Olx0XHQgIGFsbG9jYXRpb24sIGJ5IHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgdGxiIG1pc3NlcyBhbmQgYnkgc3BlZWRpbmdcbiA4NTg6XHRcdCAgdXAgdGhlIHBhZ2V0YWJsZSB3YWxraW5nLlxuIDg1OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU4NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgaXQmIzM5O3MgcmVsaWFudCBvbiBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBiZWluZyBlbmFibGVkLCB3aGljaCBpcyB0eXBpY2FsbHkgc3RhbmRhcmQgYWNyb3NzIGFyY2hpdGVjdHVyZXMsIGFuZCBjcnVjaWFsbHkgKm5vdCogYmVpbmcgcHJlZW1wdF9ydC4gRmFpciBlbm91Z2guIEEgcHJldHR5IGNvbW1vbiBjb25maWcgb3B0aW9uLCBub3RoaW5nIHRvbyBzdXJwcmlzaW5nIHRoZXJlLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggYE1FTU9SWV9GQUlMVVJFYC4gVGltZSB0byBkaXZlIGludG8gdGhlIGRlcGVuZGVuY2llcyBhbmQgc2VlIGhvdyB0aGVzZSB0d28gcGllY2VzIG9mIHRoZSBwdXp6bGUgaW50ZXJhY3QuIFdoZXJlIGRvIHRoZXNlIGludGVyc2VjdCBhbmQgaW50ZXJhY3Q/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgdGhhdCBuZWVkIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbj8gTGV0JiMzOTtzIGNoZWNrIHRob3NlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NzA6XHRcbiA3NzE6XHRcdCAgVGhpcyB2YWx1ZSBjYW4gYmUgY2hhbmdlZCBhZnRlciBib290IHVzaW5nIHRoZVxuIDc3MjpcdFx0ICAvcHJvYy9zeXMvdm0vbW1hcF9taW5fYWRkciB0dW5hYmxlLlxuIDc3MzpcdFxuIDc3NDpcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4gNzc1Olx0XHRib29sXG4gNzc2Olx0XG4gNzc3Olx0Y29uZmlnIE1FTU9SWV9GQUlMVVJFXG4gNzc4Olx0XHRkZXBlbmRzIG9uIE1NVVxuIDc3OTpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4gNzgwOlx0XHRib29sIFwmIzM0O0VuYWJsZSByZWNvdmVyeSBmcm9tIGhhcmR3YXJlIG1lbW9yeSBlcnJvcnNcJiMzNDtcbiA3ODE6XHRcdHNlbGVjdCBJTlRFUlZBTF9UUkVFXG4gNzgyOlx0XHRoZWxwXG4gNzgzOlx0XHQgIEVuYWJsZXMgY29kZSB0byByZWNvdmVyIGZyb20gc29tZSBtZW1vcnkgZmFpbHVyZXMgb24gc3lzdGVtc1xuIDc4NDpcdFx0ICB3aXRoIE1DQSByZWNvdmVyeS4gVGhpcyBhbGxvd3MgYSBzeXN0ZW0gdG8gY29udGludWUgcnVubmluZ1xuIDc4NTpcdFx0ICBldmVuIHdoZW4gc29tZSBvZiBpdHMgbWVtb3J5IGhhcyB1bmNvcnJlY3RlZCBlcnJvcnMuIFRoaXMgcmVxdWlyZXNcbiA3ODY6XHRcdCAgc3BlY2lhbCBoYXJkd2FyZSBzdXBwb3J0IGFuZCB0eXBpY2FsbHkgRUNDIG1lbW9yeS5cbiA3ODc6XHRcbiA3ODg6XHRjb25maWcgSFdQT0lTT05fSU5KRUNUXG4gNzg5Olx0XHR0cmlzdGF0ZSBcJiMzNDtIV1BvaXNvbiBwYWdlcyBpbmplY3RvclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjEyMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOgoKKipBbmFseXppbmcgTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGBNRU1PUllfRkFJTFVSRWAuIFRoYXQmIzM5O3MgYSBrZXkgZmVhdHVyZSwgb2J2aW91c2x5LCBidXQgaXQgaGluZ2VzIG9uIHdoZXRoZXIgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgY2FuIGV2ZW4gc3VwcG9ydCBpdCwgcmlnaHQ/IFNvLCBgTUVNT1JZX0ZBSUxVUkVg4oCZcyBleGlzdGVuY2UgaXMgZGlyZWN0bHkgY29uZGl0aW9uZWQgYnkgYEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVgLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBubyBoYXJkd2FyZSBzdXBwb3J0LCBubyBmZWF0dXJlLgoKQW5kLCBvZiBjb3Vyc2UsIHRoYXQmIzM5O3MgYWxtb3N0IGEgZ2l2ZW4gb24gbW9kZXJuIGFyY2hpdGVjdHVyZXMgbGlrZSB4ODYgYW5kIGFybTY0LiBUaG9zZSBwbGF0Zm9ybXMgYXJlIHByZXR0eSB3ZWxsLWVzdGFibGlzaGVkIGluIHRoZWlyIHN1cHBvcnQgZm9yIHRoZXNlIGtpbmRzIG9mIG1lbW9yeSBlcnJvciBub3RpZmljYXRpb25zLCBlc3BlY2lhbGx5IGF0IHRoZSBoYXJkd2FyZSBsZXZlbC4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHdlIGNoZWNrIGBIV1BPSVNPTl9JTkpFQ1RgLiBXZSBuZWVkIHRvIHNlZSBpZiBpdCBwbGF5cyBhbnkgcm9sZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3ODgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc4ODpcdGNvbmZpZyBIV1BPSVNPTl9JTkpFQ1RcbiA3ODk6XHRcdHRyaXN0YXRlIFwmIzM0O0hXUG9pc29uIHBhZ2VzIGluamVjdG9yXCYjMzQ7XG4gNzkwOlx0XHRkZXBlbmRzIG9uIE1FTU9SWV9GQUlMVVJFIFx1MDAyNlx1MDAyNiBERUJVR19LRVJORUwgXHUwMDI2XHUwMDI2IFBST0NfRlNcbiA3OTE6XHRcdHNlbGVjdCBQUk9DX1BBR0VfTU9OSVRPUlxuIDc5MjpcdFxuIDc5MzpcdGNvbmZpZyBOT01NVV9JTklUSUFMX1RSSU1fRVhDRVNTXG4gNzk0Olx0XHRpbnQgXCYjMzQ7VHVybiBvbiBtbWFwKCkgZXhjZXNzIHNwYWNlIHRyaW1taW5nIGJlZm9yZSBib290aW5nXCYjMzQ7XG4gNzk1Olx0XHRkZXBlbmRzIG9uICFNTVVcbiA3OTY6XHRcdGRlZmF1bHQgMVxuIDc5NzpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjUyOAoJCQkJCQkJb3V0cHV0OiAxOTUKCQkJCQkJCXRob3VnaHRzOiAyODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgZm9yIGBIV1BPSVNPTl9JTkpFQ1RgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIGRlcGVuZGVuY2llcyBqdW1wIG91dCBhdCBtZS4gYEhXUE9JU09OX0lOSkVDVGAgcmVsaWVzIG9uIGBNRU1PUllfRkFJTFVSRWAsIGBERUJVR19LRVJORUxgLCBhbmQgYFBST0NfRlNgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gRm9yIHRoaXMgc3BlY2lmaWMgZml4LCB3ZSYjMzk7cmUgcmVhbGx5IGZvY3VzaW5nIG9uIGBNRU1PUllfRkFJTFVSRWAgYmVpbmcgdGhlIGNyaXRpY2FsIG9uZSB0byBoYXZlIGVuYWJsZWQuIEFuZCBzaW5jZSBgSFdQT0lTT05fSU5KRUNUYCBpcyB0aGUgZmVhdHVyZSBpbiBxdWVzdGlvbiwgbGV0JiMzOTtzIGtlZXAgdGhhdCBpbiBtaW5kIGFzIHdlbGwuIFdlJiMzOTtsbCBhbHNvIG5lZWQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgaXQgc2VlbXMsIG9yIHRoZSByYWNlIG1heSBub3QgYmUgZXhlcmNpc2VkLgoKVGhlIGNvcmUgb2YgdGhpcyBpcyBhcm91bmQgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggbWVtb3J5IGZhaWx1cmUgbWVjaGFuaXNtcy4gV2UmIzM5O3JlIHRhbGtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGBmb2xpby0mZ3Q7bWFwcGluZ2AgYWNjZXNzIGFuZCBwb3RlbnRpYWwgcmFjZXMgb3IgbnVsbCBkZXJlZmVyZW5jZXMuIFRoZSByZWFsIGVudHJ5IHBvaW50cyB0byB0ZXN0IGFyZSB0aGUgb25lcyBleHBvc2VkIGJ5IGhhcmR3YXJlIG1lbW9yeSBlcnJvciBpbmplY3Rpb24sIHRoZSBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgYW5kIGBNQURWX1NPRlRfT0ZGTElORWAgc2NlbmFyaW9zIHRoYXQgYXJlIG1hbmFnZWQgYnkgYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuIFRoYXQmIzM5O3Mgd2hlcmUgd2UmIzM5O2xsIHNlZSB0aGlzIGNvbmN1cnJlbmN5IGlzc3VlLgoKVGhlIHJlYXNvbmluZyBoZXJlIGlzIHNvbGlkLCB3ZSYjMzk7cmUgZnV6emluZyB0aG9zZSBlbnRyeSBwb2ludHMgd2l0aCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBlbmFibGVkLiBUaGF0IHdpbGwgZXhlcmNpc2UgdGhlIG1vZGlmaWVkIGNvZGUgYW5kLCBob3BlZnVsbHksIHJldmVhbCB0aGUgcmFjZSBhbmQgZGVtb25zdHJhdGUgdGhhdCBpdCYjMzk7cyByZXNvbHZlZC4KCk5vdywgYSBxdWljayBjaGVjay4uLmlzIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBzdGF0aWMgaW5saW5lIHdoZW4gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBkaXNhYmxlZD8gWXVwLCBxdWlja2x5IGxvb2tlZCBhdCBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgIGFuZCBjb25maXJtZWQgaXQuIFNvLCB0byBiZSBjbGVhciwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyAqcmVxdWlyZWQqIHRvIGV4ZXJjaXNlIHRoaXMgYnVnIGluIHNvbWUgY29kZSBwYXRocy4KCkFscmlnaHQsIHRoYXQmIzM5O3MgZW5vdWdoIGFuYWx5c2lzLCB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0hXUE9JU09OX0lOSkVDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21pbl9vcmRlcl9mb3Jfc3BsaXQmIzM0OywKICAgICYjMzQ7bWVtb3J5X2ZhaWx1cmUmIzM0OywKICAgICYjMzQ7c29mdF9vZmZsaW5lX2luX3VzZV9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIGFuZCBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCB3aGVuIGFjY2Vzc2luZyBgZm9saW8tXHUwMDNlbWFwcGluZ2AuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSBoYXJkd2FyZSBtZW1vcnkgZXJyb3IgaW5qZWN0aW9uIG1lY2hhbmlzbXMgKGxpa2UgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9yIGBNQURWX1NPRlRfT0ZGTElORWApLCB3aGljaCBhcmUgaGFuZGxlZCBieSBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gRnV6emluZyB0aGVzZSBlbnRyeSBwb2ludHMgd2l0aCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBlbmFibGVkIHdpbGwgZXhlcmNpc2UgdGhlIG1vZGlmaWVkIGNvZGUgYW5kIGVuc3VyZSB0aGUgY29uY3VycmVuY3kgaXNzdWUgaXMgcmVzb2x2ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0hXUE9JU09OX0lOSkVDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21pbl9vcmRlcl9mb3Jfc3BsaXQmIzM0OywKICAgICYjMzQ7bWVtb3J5X2ZhaWx1cmUmIzM0OywKICAgICYjMzQ7c29mdF9vZmZsaW5lX2luX3VzZV9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIGFuZCBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCB3aGVuIGFjY2Vzc2luZyBgZm9saW8tXHUwMDNlbWFwcGluZ2AuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSBoYXJkd2FyZSBtZW1vcnkgZXJyb3IgaW5qZWN0aW9uIG1lY2hhbmlzbXMgKGxpa2UgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9yIGBNQURWX1NPRlRfT0ZGTElORWApLCB3aGljaCBhcmUgaGFuZGxlZCBieSBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gRnV6emluZyB0aGVzZSBlbnRyeSBwb2ludHMgd2l0aCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBlbmFibGVkIHdpbGwgZXhlcmNpc2UgdGhlIG1vZGlmaWVkIGNvZGUgYW5kIGVuc3VyZSB0aGUgY29uY3VycmVuY3kgaXNzdWUgaXMgcmVzb2x2ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1ODowMC42NzgzMjA3ODlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY0NTA5NTQwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJIV1BPSVNPTl9JTkpFQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtaW5fb3JkZXJfZm9yX3NwbGl0XCIsXG4gICAgXCJtZW1vcnlfZmFpbHVyZVwiLFxuICAgIFwic29mdF9vZmZsaW5lX2luX3VzZV9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkYXRhIHJhY2UgYW5kIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIHdoZW4gYWNjZXNzaW5nIGBmb2xpby1cXHUwMDNlbWFwcGluZ2AuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSBoYXJkd2FyZSBtZW1vcnkgZXJyb3IgaW5qZWN0aW9uIG1lY2hhbmlzbXMgKGxpa2UgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9yIGBNQURWX1NPRlRfT0ZGTElORWApLCB3aGljaCBhcmUgaGFuZGxlZCBieSBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gRnV6emluZyB0aGVzZSBlbnRyeSBwb2ludHMgd2l0aCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBlbmFibGVkIHdpbGwgZXhlcmNpc2UgdGhlIG1vZGlmaWVkIGNvZGUgYW5kIGVuc3VyZSB0aGUgY29uY3VycmVuY3kgaXNzdWUgaXMgcmVzb2x2ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjU4OjAwLjY3ODMyNjIzOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MTgyNjkzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc1ZTUyMTY5YjQ0MTRiNjc1N2Y1YzIyMGI0MWNjZmVlMWU4Zjc1YzFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgNCAwNDo1Nzo1OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IDJiY2NiMGE1M2EwYTYuLjU0ZDQyNjFhMmExNTAgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtNDI4NCwxOSArNDI4NCwyMyBAQCBpbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4gICovXFxuIHVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4rXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XFxuK1xcbiBcXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbitcXHRtYXBwaW5nID0gUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VtYXBwaW5nKTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIElmIHRoZSBmb2xpbyBnb3QgdHJ1bmNhdGVkLCB3ZSBkb24ndCBrbm93IHRoZSBwcmV2aW91cyBtYXBwaW5nIGFuZFxcbiBcXHQgKiBjb25zZXF1ZW50bHkgdGhlIG9sZCBtaW4gb3JkZXIuIEJ1dCBpdCBkb2Vzbid0IG1hdHRlciwgYXMgYW55IHNwbGl0XFxuIFxcdCAqIGF0dGVtcHQgd2lsbCBpbW1lZGlhdGVseSBmYWlsIHdpdGggLUVCVVNZIGFzIHRoZSBmb2xpbyBjYW5ub3QgZ2V0XFxuIFxcdCAqIHNwbGl0IHVudGlsIGZyZWVkLlxcbiBcXHQgKi9cXG4tXFx0aWYgKCFmb2xpby1cXHUwMDNlbWFwcGluZylcXG4rXFx0aWYgKCFtYXBwaW5nKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHJldHVybiBtYXBwaW5nX21pbl9mb2xpb19vcmRlcihmb2xpby1cXHUwMDNlbWFwcGluZyk7XFxuK1xcdHJldHVybiBtYXBwaW5nX21pbl9mb2xpb19vcmRlcihtYXBwaW5nKTtcXG4gfVxcbiBcXG4gaW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTg6MDIuMDMxMDYxOTUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQ1MDk4MjAwMjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiSFdQT0lTT05fSU5KRUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWluX29yZGVyX2Zvcl9zcGxpdFwiLFxuICAgIFwibWVtb3J5X2ZhaWx1cmVcIixcbiAgICBcInNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIGFuZCBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCB3aGVuIGFjY2Vzc2luZyBgZm9saW8tXFx1MDAzZW1hcHBpbmdgLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgaGFyZHdhcmUgbWVtb3J5IGVycm9yIGluamVjdGlvbiBtZWNoYW5pc21zIChsaWtlIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBvciBgTUFEVl9TT0ZUX09GRkxJTkVgKSwgd2hpY2ggYXJlIGhhbmRsZWQgYnkgYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuIEZ1enppbmcgdGhlc2UgZW50cnkgcG9pbnRzIHdpdGggYENPTkZJR19NRU1PUllfRkFJTFVSRWAgZW5hYmxlZCB3aWxsIGV4ZXJjaXNlIHRoZSBtb2RpZmllZCBjb2RlIGFuZCBlbnN1cmUgdGhlIGNvbmN1cnJlbmN5IGlzc3VlIGlzIHJlc29sdmVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3NWU1MjE2OWI0NDE0YjY3NTdmNWMyMjBiNDFjY2ZlZTFlOGY3NWMxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAwNDo1Nzo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAyYmNjYjBhNTNhMGE2Li41NGQ0MjYxYTJhMTUwIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTQyODQsMTkgKzQyODQsMjMgQEAgaW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4gICovXG4gdW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4rXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcbitcbiBcdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pKVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdG1hcHBpbmcgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlbWFwcGluZyk7XG4rXG4gXHQvKlxuIFx0ICogSWYgdGhlIGZvbGlvIGdvdCB0cnVuY2F0ZWQsIHdlIGRvbid0IGtub3cgdGhlIHByZXZpb3VzIG1hcHBpbmcgYW5kXG4gXHQgKiBjb25zZXF1ZW50bHkgdGhlIG9sZCBtaW4gb3JkZXIuIEJ1dCBpdCBkb2Vzbid0IG1hdHRlciwgYXMgYW55IHNwbGl0XG4gXHQgKiBhdHRlbXB0IHdpbGwgaW1tZWRpYXRlbHkgZmFpbCB3aXRoIC1FQlVTWSBhcyB0aGUgZm9saW8gY2Fubm90IGdldFxuIFx0ICogc3BsaXQgdW50aWwgZnJlZWQuXG4gXHQgKi9cbi1cdGlmICghZm9saW8tXHUwMDNlbWFwcGluZylcbitcdGlmICghbWFwcGluZylcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXR1cm4gbWFwcGluZ19taW5fZm9saW9fb3JkZXIoZm9saW8tXHUwMDNlbWFwcGluZyk7XG4rXHRyZXR1cm4gbWFwcGluZ19taW5fZm9saW9fb3JkZXIobWFwcGluZyk7XG4gfVxuIFxuIGludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1ODowMi4wMzEwNjUwNDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTczOTM4NDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZSBNZW1vcnkgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgYG1tL2h1Z2VfbWVtb3J5LmNgLiBTcGVjaWZpY2FsbHksIGl0J3MgaG9uZWQgaW4gb24gdGhlIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaGVyZSwgYXMgZmFyIGFzIEkgY2FuIHNlZSwgaXMgdGhhdCBpdCdzIHJlcGxhY2luZyBkaXJlY3QgYWNjZXNzZXMgdG8gYGZvbGlvLVx1MDAzZW1hcHBpbmdgIHdpdGggYFJFQURfT05DRShmb2xpby1cdTAwM2VtYXBwaW5nKWAuIEkgbmVlZCB0byBkaWcgaW50byBgbWluX29yZGVyX2Zvcl9zcGxpdGAgd2l0aGluIGBtbS9odWdlX21lbW9yeS5jYCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNoYW5nZSB3YXMgbmVjZXNzYXJ5LiBJcyBpdCBhIG1lbW9yeSBvcmRlcmluZyBpc3N1ZT8gQSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24/IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhlcmUncyBhbG1vc3QgY2VydGFpbmx5IGEgc3VidGxlIGNvbmN1cnJlbmN5IGNvbmNlcm4gdGhhdCdzIGJlaW5nIGFkZHJlc3NlZCBoZXJlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHN1Y2ggZnVuZGFtZW50YWwgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB1c2luZyBgUkVBRF9PTkNFYCBvbiB0aGF0IHNwZWNpZmljIGZpZWxkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBXaGF0IGlzIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyYWwgcmVhc29uIGZvciB0aGlzIGNoYW5nZT9cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTg6MDYuMDA1MDA1Mzk0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNDI4MjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTQyNjg9aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyNzUtLyoqXFxubW0vaHVnZV9tZW1vcnkuYzo0Mjc2OiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSAtIGdldCB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvXFxubW0vaHVnZV9tZW1vcnkuYy00Mjc3LSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcXG5tbS9odWdlX21lbW9yeS5jLTQyNzgtICpcXG5tbS9odWdlX21lbW9yeS5jOjQyNzk6ICogbWluX29yZGVyX2Zvcl9zcGxpdCgpIHRlbGxzIHRoZSBtaW5pbXVtIG9yZGVyIEBmb2xpbyBjYW4gYmUgc3BsaXQgdG8uXFxubW0vaHVnZV9tZW1vcnkuYy00MjgwLSAqIElmIGEgZmlsZS1iYWNrZWQgZm9saW8gaXMgdHJ1bmNhdGVkLCAwIHdpbGwgYmUgcmV0dXJuZWQuIEFueSBzdWJzZXF1ZW50XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyODQtICovXFxubW0vaHVnZV9tZW1vcnkuYzo0Mjg1OnVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vaHVnZV9tZW1vcnkuYy00Mjg2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTg6MDYuMDk1NDM3Njg3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE5ODY0NDY0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb25jdXJyZW5jeSBCdWcgaW4gdGhlIEZvbGlvIFNwbGl0dGluZyBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgcG90ZW50aWFsIGZvciBhIHJhY2UgY29uZGl0aW9uIGp1bXBzIG91dCBhdCBtZS4gV2UncmUgZGVhbGluZyB3aXRoIGBmb2xpby1cdTAwM2VtYXBwaW5nYCBpbiBgbWluX29yZGVyX2Zvcl9zcGxpdGAsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZXJlJ3MgYSB3aW5kb3cgd2hlcmUgaXQgY291bGQgYmUgcmVhZCB0d2ljZS4gVGhlIGZpcnN0IHJlYWQgbWlnaHQgZmluZCBhIHZhbGlkIHBvaW50ZXIsIGJ1dCBhIGNvbmN1cnJlbnQgdHJ1bmNhdGlvbiBjb3VsZCBzZXQgaXQgdG8gTlVMTCBiZWZvcmUgdGhlIHNlY29uZCByZWFkLiBUaGF0IHNjZW5hcmlvLCBvZiBjb3Vyc2UsIHdvdWxkIHJlc3VsdCBpbiBhIG5hc3R5IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIHdlIGhpdCBgbWFwcGluZ19taW5fZm9saW9fb3JkZXJgLlxuXG5UaGlzIGlzIGEgY2xlYXItY3V0IGZ1bmN0aW9uYWwgY2hhbmdlLCBjb3JyZWN0aW5nIGEgY29uY3VycmVuY3kgYnVn4oCUcHJlY2lzZWx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY2FuIGJpdGUgeW91IGluIGEgbG93LWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHQgaWYgeW91IGFyZW4ndCBjYXJlZnVsLiBJdCdzIGdvb2QgdGhhdCB0aGlzIHdhcyBpZGVudGlmaWVkLlxuXG5NeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBjYWxsIHNpdGVzIG9mIGBtaW5fb3JkZXJfZm9yX3NwbGl0YC4gVW5kZXJzdGFuZGluZyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgaXMgY3J1Y2lhbCB0byBhc3Nlc3MgdGhlIHRydWUgc2NvcGUgYW5kIGltcGFjdCBvZiB0aGlzIGZpeC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgdmFyaW91cyBleGVjdXRpb24gcGF0aHMgdGhhdCBjb3VsZCBiZSBhZmZlY3RlZCBieSB0aGlzIHBvdGVudGlhbCByYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzUwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjU4OjExLjI5NDA4NDMyMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkyMDIyNTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQwND1pbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcik7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDA1OnVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQwNi1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTY0MT1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NDYtXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NjQ3OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NDgte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00MjY4PWludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00Mjc1LS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDI3NjogKiBtaW5fb3JkZXJfZm9yX3NwbGl0KCkgLSBnZXQgdGhlIG1pbmltdW0gb3JkZXIgQGZvbGlvIGNhbiBiZSBzcGxpdCB0b1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDI3Ny0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxubW0vaHVnZV9tZW1vcnkuYy00Mjc4LSAqXFxubW0vaHVnZV9tZW1vcnkuYzo0Mjc5OiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSB0ZWxscyB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvLlxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4MC0gKiBJZiBhIGZpbGUtYmFja2VkIGZvbGlvIGlzIHRydW5jYXRlZCwgMCB3aWxsIGJlIHJldHVybmVkLiBBbnkgc3Vic2VxdWVudFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00Mjg0LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NTp1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIzMzA9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0NDItXFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDQzOlxcdFxcdGNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0NDQtXFx0XFx0aW50IGVycjtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjc4MD1zdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc5NS1cXHRpZiAoIWh1Z2UgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3OTY6XFx0XFx0Y29uc3QgaW50IG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc5Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTg6MTMuNjg2MTExMjc1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyNzU3MjgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgSHVnZSBQYWdlIEFsbG9jYXRpb24gSXNzdWVzKipcblxuUmlnaHQsIHNvIEkndmUgc2VlbiB0aGVzZSBlcnJvciByZXBvcnRzIGNyb3BwaW5nIHVwLCBhbmQgSSdtIHRyeWluZyB0byBwaW5wb2ludCB3aGVyZSBhIGh1Z2UgcGFnZSBhbGxvY2F0aW9uIGlzIGdvaW5nIHNpZGV3YXlzLiBUaGUga2V5IGluZGljYXRvcnMgYXJlIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLiBXaGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zIGdldHRpbmcgY2FsbGVkIGZyb20/IEkgbmVlZCB0byBidWlsZCBhIGNvbXByZWhlbnNpdmUgcGljdHVyZSB0byB1bmRlcnN0YW5kIHRoaXMgaXNzdWUuXG5cbk9rYXksIG5vdywgaXMgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGV4cG9ydGVkIGFueXdoZXJlPyBIb2xkIG9uLi4uIGl0J3Mgbm90IGEgZGlyZWN0IGV4cG9ydCwgSSBuZWVkIHRvIGxvb2sgaW4gYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYC4gVGhhdCdzIHdoZXJlIGl0J3MgZGVmaW5lZC4gUmlnaHQsIHRoYXQncyB1c2VmdWwuIE5vdywgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGNoZWNrIGlmIHRoYXQgZnVuY3Rpb24gaXMgdXNlZCB3aXRoaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGl0c2VsZi4gSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIGl0cyBsb2NhbCB1c2VzIGJlZm9yZSBleHBhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzgzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTg6MTguNDEzNjg3MDk3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3Mzg0MzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTQyNjg9aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyNzUtLyoqXFxubW0vaHVnZV9tZW1vcnkuYzo0Mjc2OiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSAtIGdldCB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvXFxubW0vaHVnZV9tZW1vcnkuYy00Mjc3LSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcXG5tbS9odWdlX21lbW9yeS5jLTQyNzgtICpcXG5tbS9odWdlX21lbW9yeS5jOjQyNzk6ICogbWluX29yZGVyX2Zvcl9zcGxpdCgpIHRlbGxzIHRoZSBtaW5pbXVtIG9yZGVyIEBmb2xpbyBjYW4gYmUgc3BsaXQgdG8uXFxubW0vaHVnZV9tZW1vcnkuYy00MjgwLSAqIElmIGEgZmlsZS1iYWNrZWQgZm9saW8gaXMgdHJ1bmNhdGVkLCAwIHdpbGwgYmUgcmV0dXJuZWQuIEFueSBzdWJzZXF1ZW50XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyODQtICovXFxubW0vaHVnZV9tZW1vcnkuYzo0Mjg1OnVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vaHVnZV9tZW1vcnkuYy00Mjg2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTg6MTguNDgxMDc1MjkyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyNTIyNTc2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUcmFjaW5nIHRoZSBgc3BsaXRfZm9saW9fdG9fbGlzdGAgRnVuY3Rpb24ncyBQb3RlbnRpYWwgQ2FsbHMqKlxuXG5Pa2F5LCBzbyBJIHdhcyBsb29raW5nIGZvciB3aGVyZSB0aGlzIGZ1bmN0aW9uLCB3aGljaCBJIHdhcyBzdXJlIHdhcyBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHdhcyBjYWxsZWQuIEJ1dCBpdCdzIG5vdCBhY3R1YWxseSBuYW1lZCBpbiBgbW0vaHVnZV9tZW1vcnkuY2A/IFRoYXQncyBvZGQuIExldCBtZSBzZWUsIGNvdWxkIGBzcGxpdF9mb2xpb190b19saXN0YCBiZSBjYWxsaW5nIGl0PyBObywgbm90aGluZyBpbiB0aGUgZ3JlcCBvdXRwdXQgc3VnZ2VzdHMgdGhhdC4gQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlIGZvciBgc3BsaXRfZm9saW9fdG9fbGlzdGAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGRpcmVjdGx5LiBMZXQncyBzZWUgaWYgdGhhdCBwcm92aWRlcyBhbnkgY2x1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1ODoyMi41MDYzMDMwOThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMjYyNjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNwbGl0X2ZvbGlvX3RvX2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTQyODU9dW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDMwNS1cXG5tbS9odWdlX21lbW9yeS5jOjQzMDY6aW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG5tbS9odWdlX21lbW9yeS5jLTQzMDcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1ODoyMi41OTY1NzI3OTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1NjA4OTc0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczpcblxuKipEaWdnaW5nIGludG8gYSBNZW1vcnkgRmFpbHVyZSBTY2VuYXJpbyoqXG5cbk9rYXksIHRoZSB0cmFpbCBzdGFydHMgd2l0aCBgbWluX29yZGVyX2Zvcl9zcGxpdGAg4oCTIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGhpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFRoYXQncyB3aGVyZSB0aGUgYWN0aW9uIGlzIGxpa2VseSBoYXBwZW5pbmcuIE15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGRpdmUgaW50byBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgaXRzZWxmLiBUaW1lIHRvIHNlZSB3aGF0IHRoYXQgZmlsZSBpcyByZWFsbHkgZG9pbmcsIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFyb3VuZCB0aGlzIGZ1bmN0aW9uIGNhbGwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBgbWluX29yZGVyX2Zvcl9zcGxpdGAgaXMgYmVpbmcgY2FsbGVkIHRoZXJlLCBhbmQgd2hhdCBjbHVlcyBpdCBnaXZlcyBtZSByZWdhcmRpbmcgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIG1lbW9yeSBmYWlsdXJlLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGZpbmQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1ODoyNS43NTI2NjUyNTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MTEyOTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jPTIzMzA9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0NDItXFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDQzOlxcdFxcdGNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0NDQtXFx0XFx0aW50IGVycjtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjc4MD1zdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc5NS1cXHRpZiAoIWh1Z2UgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3OTY6XFx0XFx0Y29uc3QgaW50IG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc5Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTg6MjUuODA2NzgyNjQxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDQzNzk5MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgVGVybWlub2xvZ3kgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgc28gSSdtIHByZXNlbnRlZCB3aXRoIHRoaXMgY29uY2VwdCwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzOiBpcyB0aGlzIHRoaW5nIHVuaXF1ZSB0byAqdGhpcyogY29udGV4dD8gT3IsIG1vcmUgcHJlY2lzZWx5LCBpcyB0aGlzIHRlcm1pbm9sb2d5IHN0YW5kYXJkIGFjcm9zcyBteSBmaWVsZCwgb3IgZG9lcyBpdCBleGlzdCB1bmRlciBkaWZmZXJlbnQgbmFtaW5nIGNvbnZlbnRpb25zIGVsc2V3aGVyZT8gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIHRoaXMgdGVybSBoYXMgZXN0YWJsaXNoZWQgdXNhZ2UgYmV5b25kIHRoZSBpbW1lZGlhdGUgc2NvcGUgb2Ygd2hhdCBJJ20gbG9va2luZyBhdC4gSSdtIHRoaW5raW5nLCBhcmUgdGhlcmUgc3lub255bXM/IEFyZSB0aGVyZSByZWdpb25hbCB2YXJpYXRpb25zPyBEb2VzIHRoZSBqYXJnb24gZXZvbHZlIG92ZXIgdGltZT8gSSBuZWVkIHRvIGFzY2VydGFpbiB0aGlzIHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlIGNvbmNlcHQgdW5kZXIgZGlzY3Vzc2lvbiBpbiByZWxhdGlvbiB0byBvdGhlciBhcHBsaWNhdGlvbnMuIE15IGV4cGVydGlzZSBpcyBidWlsdCBvbiBoYXZpbmcgYSBzdHJvbmcgZ3Jhc3Agb2YgdGhlIHRlcm1pbm9sb2d5J3MgZXZvbHV0aW9uIGFuZCBzY29wZS4gSWdub3JpbmcgdGhlc2UgZmFjdG9ycyBjb3VsZCBsZWFkIHRvIHNpZ25pZmljYW50IG1pc3VuZGVyc3RhbmRpbmdzLCBhbmQgbXkga25vd2xlZGdlIG9mIHRoZSBmaWVsZCBkZXBlbmRzIG9uIHRoZSBhY2N1cmFjeSBvZiBteSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE1MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTg6MjguOTUxMTY1ODA2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDYyODM3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaW5fb3JkZXJfZm9yX3NwbGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTQyNjg9aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyNzUtLyoqXFxubW0vaHVnZV9tZW1vcnkuYzo0Mjc2OiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSAtIGdldCB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvXFxubW0vaHVnZV9tZW1vcnkuYy00Mjc3LSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcXG5tbS9odWdlX21lbW9yeS5jLTQyNzgtICpcXG5tbS9odWdlX21lbW9yeS5jOjQyNzk6ICogbWluX29yZGVyX2Zvcl9zcGxpdCgpIHRlbGxzIHRoZSBtaW5pbXVtIG9yZGVyIEBmb2xpbyBjYW4gYmUgc3BsaXQgdG8uXFxubW0vaHVnZV9tZW1vcnkuYy00MjgwLSAqIElmIGEgZmlsZS1iYWNrZWQgZm9saW8gaXMgdHJ1bmNhdGVkLCAwIHdpbGwgYmUgcmV0dXJuZWQuIEFueSBzdWJzZXF1ZW50XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyODQtICovXFxubW0vaHVnZV9tZW1vcnkuYzo0Mjg1OnVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vaHVnZV9tZW1vcnkuYy00Mjg2LXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjMzMD1pbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ0Mi1cXHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI0NDM6XFx0XFx0Y29uc3QgaW50IG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ0NC1cXHRcXHRpbnQgZXJyO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNzgwPXN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzk1LVxcdGlmICghaHVnZSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjc5NjpcXHRcXHRjb25zdCBpbnQgbmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzk3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1ODoyOS4wMjE4MDAwMTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2OTQxNzU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBEZWVwIGludG8gdGhlIENhbGwgUGF0aHMqKlxuXG5SaWdodCwgc28gdGhlIGNvZGUncyByYWlzaW5nIHNvbWUgZmxhZ3MgdGhhdCB3YXJyYW50IGZ1cnRoZXIgaW5zcGVjdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGUgaXNzdWUgaXMgYmVpbmcgZmxhZ2dlZCBvbmx5IHdpdGhpbiB0aGUgYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgY29udGV4dHMuIFRoYXQncyBhIGxpbWl0ZWQgc2NvcGUsIHdoaWNoIGlzIGhlbHBmdWwuIE5vdywgSSBuZWVkIHRvIHZlcmlmeSB3aGljaCBmdW5jdGlvbnMgYXJlICphY3R1YWxseSogdHJpZ2dlcmluZyB0aGVzZSBldmVudHMuIEkgd2FzIGp1c3QgdGhpbmtpbmcgdGhhdCBwZXJoYXBzIGBzcGxpdF9mb2xpb190b19saXN0YCBtaWdodCBiZSBhIGN1bHByaXQsIGJ1dCBhIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCdzIG5vdCB0aGUgY2FzZS4gTGV0J3Mgc2VlIGlmIGBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAgaXMgY29udHJpYnV0aW5nIHRvIHRoaXMuIEl0J3MgdGltZSB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIG9yaWdpbiBvZiB0aGUgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NTUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1ODozMy4zOTEyMjAzNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NDc2NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTQxNjg9aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyMzQtICovXFxubW0vaHVnZV9tZW1vcnkuYzo0MjM1OmludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDIzNi1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyNTItICogSXQgaGFzIHRoZSBzYW1lIHByZXJlcXVpc2l0ZXMgYW5kIHJldHVybnMgYXNcXG5tbS9odWdlX21lbW9yeS5jOjQyNTM6ICogc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoKS5cXG5tbS9odWdlX21lbW9yeS5jLTQyNTQtICpcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDMwNj1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDMwNy17XFxubW0vaHVnZV9tZW1vcnkuYzo0MzA4OlxcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIGxpc3QsIDApO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDMwOS19XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ1OTI9c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX3BpZChpbnQgcGlkLCB1bnNpZ25lZCBsb25nIHZhZGRyX3N0YXJ0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NjYxLVxcdFxcdC8qXFxubW0vaHVnZV9tZW1vcnkuYzo0NjYyOlxcdFxcdCAqIEZvciBmb2xpb3Mgd2l0aCBwcml2YXRlLCBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcigpXFxubW0vaHVnZV9tZW1vcnkuYy00NjYzLVxcdFxcdCAqIHdpbGwgdHJ5IHRvIGRyb3AgaXQgYmVmb3JlIHNwbGl0IGFuZCB0aGVuIGNoZWNrIGlmIHRoZSBmb2xpb1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1ODozMy41MDU3MDU4OTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg2NjU3OTcxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsIEhpZXJhcmNoeSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIHdhcyBkaXJlY3RseSBpbnZva2VkIHdpdGhpbiBgc3BsaXRfZm9saW9fdG9fbGlzdGAsIGJ1dCB0aGUgYGdyZXBgIG91dHB1dCBpc24ndCBzaG93aW5nIHRoYXQuIFRoYXQncyB1bmV4cGVjdGVkLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBzcGxpdF9mb2xpb190b19saXN0YCBmdW5jdGlvbiBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZSwgdG8gdmVyaWZ5IHdoYXQgaXMgYWN0dWFsbHkgaGFwcGVuaW5nLiBJJ2xsIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgbW0vaHVnZV9tZW1vcnkuY2Agc291cmNlIGNvZGUgdG8gZ2V0IHRoZSBkZWZpbml0aXZlIGFuc3dlci4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgY2FsbCBjaGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU0NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjU4OjM3LjM3MjI4OTE1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNDAxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MjgwOlxcdCAqIElmIGEgZmlsZS1iYWNrZWQgZm9saW8gaXMgdHJ1bmNhdGVkLCAwIHdpbGwgYmUgcmV0dXJuZWQuIEFueSBzdWJzZXF1ZW50XFxuNDI4MTpcXHQgKiBzcGxpdCBhdHRlbXB0IHNob3VsZCBnZXQgLUVCVVNZIGZyb20gc3BsaXQgY2hlY2tpbmcgY29kZS5cXG40MjgyOlxcdCAqXFxuNDI4MzpcXHQgKiBSZXR1cm46IEBmb2xpbydzIG1pbmltdW0gb3JkZXIgZm9yIHNwbGl0XFxuNDI4NDpcXHQgKi9cXG40Mjg1OlxcdHVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuNDI4NjpcXHR7XFxuNDI4NzpcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcXG40Mjg4OlxcdFxcbjQyODk6XFx0XFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpXFxuNDI5MDpcXHRcXHRcXHRyZXR1cm4gMDtcXG40MjkxOlxcdFxcbjQyOTI6XFx0XFx0bWFwcGluZyA9IFJFQURfT05DRShmb2xpby1cXHUwMDNlbWFwcGluZyk7XFxuNDI5MzpcXHRcXG40Mjk0OlxcdFxcdC8qXFxuNDI5NTpcXHRcXHQgKiBJZiB0aGUgZm9saW8gZ290IHRydW5jYXRlZCwgd2UgZG9uJ3Qga25vdyB0aGUgcHJldmlvdXMgbWFwcGluZyBhbmRcXG40Mjk2OlxcdFxcdCAqIGNvbnNlcXVlbnRseSB0aGUgb2xkIG1pbiBvcmRlci4gQnV0IGl0IGRvZXNuJ3QgbWF0dGVyLCBhcyBhbnkgc3BsaXRcXG40Mjk3OlxcdFxcdCAqIGF0dGVtcHQgd2lsbCBpbW1lZGlhdGVseSBmYWlsIHdpdGggLUVCVVNZIGFzIHRoZSBmb2xpbyBjYW5ub3QgZ2V0XFxuNDI5ODpcXHRcXHQgKiBzcGxpdCB1bnRpbCBmcmVlZC5cXG40Mjk5OlxcdFxcdCAqL1xcbjQzMDA6XFx0XFx0aWYgKCFtYXBwaW5nKVxcbjQzMDE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNDMwMjpcXHRcXG40MzAzOlxcdFxcdHJldHVybiBtYXBwaW5nX21pbl9mb2xpb19vcmRlcihtYXBwaW5nKTtcXG40MzA0OlxcdH1cXG40MzA1OlxcdFxcbjQzMDY6XFx0aW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG40MzA3OlxcdHtcXG40MzA4OlxcdFxcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIGxpc3QsIDApO1xcbjQzMDk6XFx0fVxcbjQzMTA6XFx0XFxuNDMxMTpcXHQvKlxcbjQzMTI6XFx0ICogX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaXMgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseTpcXG40MzEzOlxcdCAqIHRoZSBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaW5saW5lIHdyYXBwZXIgaW4gbW0vaW50ZXJuYWwuaFxcbjQzMTQ6XFx0ICogbGltaXRzIGl0cyBjYWxscyB0byB0aG9zZSBmb2xpb3Mgd2hpY2ggbWF5IGhhdmUgYSBfZGVmZXJyZWRfbGlzdCBmb3JcXG40MzE1OlxcdCAqIHF1ZXVlaW5nIFRIUCBzcGxpdHMsIGFuZCB0aGF0IGxpc3QgaXMgKHJhY2lseSBvYnNlcnZlZCB0byBiZSkgbm9uLWVtcHR5LlxcbjQzMTY6XFx0ICpcXG40MzE3OlxcdCAqIEl0IGlzIHVuc2FmZSB0byBjYWxsIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSB1bnRpbCBmb2xpbyByZWZjb3VudCBpc1xcbjQzMTg6XFx0ICogemVybzogYmVjYXVzZSBldmVuIHdoZW4gdGhlIGxpc3RfbHJ1IGxvY2sgaXMgaGVsZCwgYSBub24tZW1wdHlcXG40MzE5OlxcdCAqIF9kZWZlcnJlZF9saXN0IG1pZ2h0IGJlIGluIHVzZSBvbiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkncyB1bmxvY2tlZFxcbjQzMjA6XFx0ICogb24tc3RhY2sgbGlzdC5cXG40MzIxOlxcdCAqXFxuNDMyMjpcXHQgKiBUaGUgbGlzdF9scnUgc3VibGlzdCBpcyBkZXRlcm1pbmVkIGJ5IGZvbGlvJ3MgbWVtY2c6IGl0IGlzIHRoZXJlZm9yZVxcbjQzMjM6XFx0ICogaW1wb3J0YW50IHRvIHVucXVldWUgZGVmZXJyZWQgc3BsaXQgYmVmb3JlIGNoYW5naW5nIGZvbGlvIG1lbWNnLlxcbjQzMjQ6XFx0ICovXFxuNDMyNTpcXHRib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbjQzMjY6XFx0e1xcbjQzMjc6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjQzMjg6XFx0XFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1O1xcbjQzMjk6XFx0XFx0aW50IG5pZCA9IGZvbGlvX25pZChmb2xpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjU4OjM3LjM3NTYzNDc4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NDg1NjkyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgbWluX29yZGVyX2Zvcl9zcGxpdGAgVXNhZ2UqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBTb21ldGhpbmcgZmVlbHMgb2ZmLiBJdCBzZWVtcyBsaWtlIHRoZSBmdW5jdGlvbiBgbWluX29yZGVyX2Zvcl9zcGxpdGAgaXMgKm9ubHkqIGV2ZXIgaW52b2tlZCBmcm9tIHdpdGhpbiB0aGUgYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgZnVuY3Rpb25zLiBUaGF0J3MgYSBwcmV0dHkgbGltaXRlZCBzY29wZSwgYW5kIGl0IG1ha2VzIG1lIHdvbmRlciBpZiB0aGVyZSdzIGEgcmVhc29uIGZvciB0aGF0IHJlc3RyaWN0aW9uLiBHaXZlbiB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsbHkgc3BsaXR0aW5nIGh1Z2UgcGFnZXMsIHRoZSBsaW1pdGVkIHNjb3BlIGlzIGEgZ29vZCBzaWduLCBwb3RlbnRpYWxseSByZWR1Y2luZyBzb21lIGNvbXBsZXhpdHkgb2YgbWVtb3J5IGZhaWx1cmUuIFRvIGNvbmZpcm0gdGhpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgY29yZSBodWdlIHBhZ2UgZnVuY3Rpb25hbGl0eS4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgbW0vaHVnZV9tZW1vcnkuY2AuIEknbGwgc2VlIHdoYXQgdGhlIGRlZmluaXRpb24gYW5kIGNvbnRleHQgb2YgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIHRlbGxzIG1lIHRvIGNoZWNrIHdoYXQgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBkb2VzIGluIG9yZGVyIHRvIGJldHRlciB1bmRlcnN0YW5kIHdoYXQgdGhpcyBtaWdodCBtZWFuIGZvciB0aGUgbGFyZ2VyIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU3MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTg6NDEuOTI0MjA4MDQ1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTE0MDYyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaW5fb3JkZXJfZm9yX3NwbGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz00MjY4PWludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00Mjc1LS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDI3NjogKiBtaW5fb3JkZXJfZm9yX3NwbGl0KCkgLSBnZXQgdGhlIG1pbmltdW0gb3JkZXIgQGZvbGlvIGNhbiBiZSBzcGxpdCB0b1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDI3Ny0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxubW0vaHVnZV9tZW1vcnkuYy00Mjc4LSAqXFxubW0vaHVnZV9tZW1vcnkuYzo0Mjc5OiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSB0ZWxscyB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvLlxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4MC0gKiBJZiBhIGZpbGUtYmFja2VkIGZvbGlvIGlzIHRydW5jYXRlZCwgMCB3aWxsIGJlIHJldHVybmVkLiBBbnkgc3Vic2VxdWVudFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00Mjg0LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NTp1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjU4OjQyLjAyMzM1NzIyOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTU1MjI0ODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgcGFnZV9wdXRiYWNrYCBDYWxscyoqXG5cblJpZ2h0LCBzbyB0aGlzIGZ1bmN0aW9uLCBgcGFnZV9wdXRiYWNrYCwgaXMgb25seSBjYWxsZWQgZnJvbSB3aXRoaW4gYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAsIGJvdGggaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGluaXRpYWwgdHJhY2UgbGVhZHMuIEkgbmVlZCB0byBiZSBzdXJlIHRob3VnaCwgYmVmb3JlIEkgbWFrZSBhbnkgY29uY2x1c2lvbnMuXG5cbk5vdywgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyAqdGhhdCogcmVhbGx5IGl0PyBNeSBpbnN0aW5jdHMgdGVsbCBtZSBJIHNob3VsZCBkb3VibGUtY2hlY2suIEkgaGF2ZSB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlcmUgaXNuJ3Qgc29tZSBvdGhlciwgcG90ZW50aWFsbHkgb2JzY3VyZSwgY2FsbCBzaXRlIGx1cmtpbmcgaW4gdGhlIGtlcm5lbCB0aGF0IEkndmUgbWlzc2VkLiBBIHF1aWNrIGdsb2JhbCBzZWFyY2ggbWlnaHQgcmV2ZWFsIHNvbWV0aGluZyBJJ20gb3Zlcmxvb2tpbmcuIEkgbmVlZCB0byBiZSB0aG9yb3VnaCBhbmQgZXhjbHVkZSBhbnkgZmFsc2UgYXNzdW1wdGlvbnMuIEdvdHRhIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTI3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTg6NDYuMTc4NTg1MzM0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzQ2MzkzNzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQwND1pbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcik7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDA1OnVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQwNi1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTY0MT1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NDYtXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NjQ3OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NDgte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00MjY4PWludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00Mjc1LS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDI3NjogKiBtaW5fb3JkZXJfZm9yX3NwbGl0KCkgLSBnZXQgdGhlIG1pbmltdW0gb3JkZXIgQGZvbGlvIGNhbiBiZSBzcGxpdCB0b1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDI3Ny0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxubW0vaHVnZV9tZW1vcnkuYy00Mjc4LSAqXFxubW0vaHVnZV9tZW1vcnkuYzo0Mjc5OiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSB0ZWxscyB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvLlxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4MC0gKiBJZiBhIGZpbGUtYmFja2VkIGZvbGlvIGlzIHRydW5jYXRlZCwgMCB3aWxsIGJlIHJldHVybmVkLiBBbnkgc3Vic2VxdWVudFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00Mjg0LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NTp1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIzMzA9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0NDItXFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDQzOlxcdFxcdGNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0NDQtXFx0XFx0aW50IGVycjtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjc4MD1zdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc5NS1cXHRpZiAoIWh1Z2UgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3OTY6XFx0XFx0Y29uc3QgaW50IG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc5Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTg6NDkuOTI0OTg4MTcyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2MzMzOTY4NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ29yZSBNZW1vcnkgTWFuYWdlbWVudCBGaXgqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGxvb2sgYXQgYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAg4oCTIHRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucywgcmlnaHQ/IE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBoYXJkd2FyZSBtZW1vcnkgZXJyb3JzLCB0aGUgTUNFIHR5cGUgc3R1ZmYuIFdlIGNhbiBpbmplY3QgdGhlc2UgZXJyb3JzIHRocm91Z2ggc3lzZnMgb3IgbWFkdmlzZSB3aXRoIE1BRFZfSFdQT0lTT04sIHdoaWNoIHRlbGxzIG1lIHRoaXMgaXNuJ3QganVzdCB0aGVvcmV0aWNhbDsgaXQncyBzb21ldGhpbmcgd2UgY2FuIGFjdHVhbGx5IHRyaWdnZXIgYW5kIHRlc3QuXG5cblRoZSBwYXRjaCBpdHNlbGYgYWRkcmVzc2VzIGEgZGF0YSByYWNlIG9yIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBzaWduaWZpY2FudC4gTm93LCB0aGUgYmlnIHF1ZXN0aW9uOiBpcyBmdXp6aW5nIGEgdmFsaWQgYXBwcm9hY2ggaGVyZT8gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggd2l0aGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIEknbSBsZWFuaW5nIHRvd2FyZHMgXCJ5ZXNcIi4gSXQncyBhIGZ1bmRhbWVudGFsIGFyZWEsIGFuZCBmdXp6aW5nIGNvdWxkIGV4cG9zZSBhbnkgcmVtYWluaW5nIHN1YnRsZSBpc3N1ZXMuXG5cbk5leHQsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcgdG8gZW5zdXJlIHRoZSBhZmZlY3RlZCBmdW5jdGlvbmFsaXR5IGlzIGV2ZW4gcHJlc2VudC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA1NywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1ODo1Ni41NTgzODk0ODVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MDQ2MTAwNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTU9SWV9GQUlMVVJFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTc3ND1jb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbi0tXFxubW0vS2NvbmZpZy03NzYtXFxubW0vS2NvbmZpZzo3Nzc6Y29uZmlnIE1FTU9SWV9GQUlMVVJFXFxubW0vS2NvbmZpZy03NzgtXFx0ZGVwZW5kcyBvbiBNTVVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTk6MDAuMjYzMDA2MjQ3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzIwMDM4NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBoYW5kbGVkLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBtbS9LY29uZmlnYC4gSSdtIHRoaW5raW5nIGFyb3VuZCBsaW5lIDc3NyBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIGJlZ2luIGRpZ2dpbmcgaW50byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiDigJMgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGluZ3MgcmVsYXRlZCB0byB0aGlzIHBhcnRpY3VsYXIgZmVhdHVyZS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIHJlbGV2YW50IHN5bWJvbHMgYXJlIGRlZmluZWQsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGFueSBhc3NvY2lhdGVkIGhlbHAgdGV4dC4gRnJvbSB0aGVyZSBJIGNhbiBicmFuY2ggb3V0IGFzIG5lZWRlZCwgbWF5YmUgbG9va2luZyBhdCB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzLiBJJ20gaG9waW5nIEkgY2FuIHRyYWNlIHRoaXMgYWxsIHRoZSB3YXkgdG8gaXRzIHJvb3Qgb3JpZ2luLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDc3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTk6MDQuMDk1MDEzMDg4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc3MDpcXHRcXG4gNzcxOlxcdFxcdCAgVGhpcyB2YWx1ZSBjYW4gYmUgY2hhbmdlZCBhZnRlciBib290IHVzaW5nIHRoZVxcbiA3NzI6XFx0XFx0ICAvcHJvYy9zeXMvdm0vbW1hcF9taW5fYWRkciB0dW5hYmxlLlxcbiA3NzM6XFx0XFxuIDc3NDpcXHRjb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbiA3NzU6XFx0XFx0Ym9vbFxcbiA3NzY6XFx0XFxuIDc3NzpcXHRjb25maWcgTUVNT1JZX0ZBSUxVUkVcXG4gNzc4OlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuIDc3OTpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG4gNzgwOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSByZWNvdmVyeSBmcm9tIGhhcmR3YXJlIG1lbW9yeSBlcnJvcnNcXFwiXFxuIDc4MTpcXHRcXHRzZWxlY3QgSU5URVJWQUxfVFJFRVxcbiA3ODI6XFx0XFx0aGVscFxcbiA3ODM6XFx0XFx0ICBFbmFibGVzIGNvZGUgdG8gcmVjb3ZlciBmcm9tIHNvbWUgbWVtb3J5IGZhaWx1cmVzIG9uIHN5c3RlbXNcXG4gNzg0OlxcdFxcdCAgd2l0aCBNQ0EgcmVjb3ZlcnkuIFRoaXMgYWxsb3dzIGEgc3lzdGVtIHRvIGNvbnRpbnVlIHJ1bm5pbmdcXG4gNzg1OlxcdFxcdCAgZXZlbiB3aGVuIHNvbWUgb2YgaXRzIG1lbW9yeSBoYXMgdW5jb3JyZWN0ZWQgZXJyb3JzLiBUaGlzIHJlcXVpcmVzXFxuIDc4NjpcXHRcXHQgIHNwZWNpYWwgaGFyZHdhcmUgc3VwcG9ydCBhbmQgdHlwaWNhbGx5IEVDQyBtZW1vcnkuXFxuIDc4NzpcXHRcXG4gNzg4OlxcdGNvbmZpZyBIV1BPSVNPTl9JTkpFQ1RcXG4gNzg5OlxcdFxcdHRyaXN0YXRlIFxcXCJIV1BvaXNvbiBwYWdlcyBpbmplY3RvclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTk6MDQuMDk1MTU3NzU4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjk1NTE0ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBGYWlsdXJlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB3ZSBuZWVkIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGVuYWJsZWQgaGVyZS4gSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLi4uIEknbSBwcmV0dHkgc3VyZSBgbWluX29yZGVyX2Zvcl9zcGxpdGAgbGl2ZXMgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBBbmQgdGhhdCBjb2RlIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgc2V0LiBSaWdodCwgc28gd2UgbmVlZCB0byBiZSB2ZXJ5IHN1cmUgdGhhdCBib3RoIENPTkZJR19NRU1PUllfRkFJTFVSRSBhbmQgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFIGFyZSBjb25maWd1cmVkLCBvciB3ZSBhcmUgZ29pbmcgdG8gaGF2ZSBhIHNlcmlvdXMgcHJvYmxlbS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgZ2xhbmNlIGF0IGBtbS9NYWtlZmlsZWAganVzdCB0byBkb3VibGUtY2hlY2sgdGhlIGJ1aWxkIGRlcGVuZGVuY2llcyBhbmQgZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeSB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTgxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1OTowOC4xMjQ3MTI2NzVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzMwOTg5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdlX21lbW9yeS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xcbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXFxubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICs9IHBhZ2VfY291bnRlci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjU5OjA4LjIzODAyOTI1NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTg3NDQ3OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHNpdHVhdGlvbiBhZ2Fpbi4gWWVhaCwgaXQncyBjbGVhciB0aGF0IGl0J3MgYWJzb2x1dGVseSBuZWNlc3NhcnkuIEJ1dCBub3cgSSdtIHNlZWluZyB0aGF0IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGFsc28gZXNzZW50aWFsLCBzcGVjaWZpY2FsbHkgdG8gYWxsb3cgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIHRvIGJlIHJlYWNoZWQgZnJvbSBgbWVtb3J5X2ZhaWx1cmVgIG9yIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLiBUaGF0IG1ha2VzIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIGhhbmRsaW5nIG1lbW9yeSBlcnJvcnMgYW5kIGh1Z2VwYWdlIG1hbmFnZW1lbnQuXG5cbkJ1dCB3YWl0IGEgbWludXRlLCBJIG5lZWQgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaCBoZXJlLiBJcyBgbWluX29yZGVyX2Zvcl9zcGxpdGAgKm9ubHkqIGNhbGxlZCB0aHJvdWdoIHRob3NlIHNwZWNpZmljIHBhdGhzIGRlcGVuZGVudCBvbiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCwgb3IgYXJlIHRoZXJlIG90aGVyIHBvdGVudGlhbCBjYWxsIHNpdGVzIEknbSBtaXNzaW5nPyBJIHNob3VsZCByZWFsbHkgZG91YmxlLWNoZWNrIHRoZSBlbnRpcmUgY29kZSBiYXNlLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIGBpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaGAgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciB1c2FnZXMgb2YgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIHdpdGhpbiB0aGF0IGhlYWRlci4gSSdkIGJlIGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9ucyBvciBkaXJlY3QgY2FsbHMuIEp1c3QgdG8gYmUgc3VyZS4gR290dGEgYmUgbWV0aWN1bG91cywgZXNwZWNpYWxseSB3aXRoIHNvbWV0aGluZyB0aGlzIGZ1bmRhbWVudGFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMyOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1OToxNC4yMjU0Nzk5ODlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvaHVnZV9tbS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY0MDpcXHR9XFxuIDY0MTpcXHRzdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIDY0MjpcXHR7XFxuIDY0MzpcXHRcXHRWTV9XQVJOX09OX09OQ0VfUEFHRSgxLCBwYWdlKTtcXG4gNjQ0OlxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA2NDU6XFx0fVxcbiA2NDY6XFx0XFxuIDY0NzpcXHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIDY0ODpcXHR7XFxuIDY0OTpcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oMSwgZm9saW8pO1xcbiA2NTA6XFx0XFx0cmV0dXJuIDA7XFxuIDY1MTpcXHR9XFxuIDY1MjpcXHRcXG4gNjUzOlxcdHN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4gNjU0OlxcdHtcXG4gNjU1OlxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTygxLCBmb2xpbyk7XFxuIDY1NjpcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjU3OlxcdH1cXG4gNjU4OlxcdFxcbiA2NTk6XFx0c3RhdGljIGlubGluZSBpbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTk6MTQuMjI1NTk5MzQ5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1ODY2MjIzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNlIG9uIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgYW5kIGl0J3MgbG9va2luZyBsaWtlIGlmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRpc2FibGVkLCB0aGUgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGZ1bmN0aW9uIGlzIHJlZHVjZWQgdG8gYSBzdGF0aWMgaW5saW5lIHRoYXQganVzdCByZXR1cm5zIHplcm8uIFRoYXQncyBhIGh1Z2UgcmVkIGZsYWcg4oCTIG9yIG1heWJlIGEgaHVnZSBwYWdlIGluIGl0c2VsZi4gVGhhdCBtZWFucyBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbCBoZXJlLiBCdXQsIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGlzbid0IHVzZWQgc29tZXdoZXJlIGVsc2UgdGhhdCBtaWdodCBhbHNvIGJlIGFmZmVjdGVkLlxuXG5MZXQgbWUgdGhpbmsuLi4gSSByZW1lbWJlciBJIGFscmVhZHkgdXNlZCBgZ3JlcGAgdG8gbG9vayBmb3Igb3RoZXIgdXNlcyBvZiBgbWluX29yZGVyX2Zvcl9zcGxpdGAsIGFuZCBpdCBzZWVtZWQgY29uZmluZWQgdG8gYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFuZCBgbW0vaHVnZV9tZW1vcnkuY2AuIEJ1dCBJIG5lZWQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUsIHNvIGxldCdzIGNoZWNrIHRoYXQgYG1tL2h1Z2VfbWVtb3J5LmNgIGZpbGUgKmFnYWluKi4gSXQncyBhbHdheXMgYmVzdCB0byBiZSBtZXRpY3Vsb3VzLiBMZXQncyBtYWtlIHN1cmUgSSBkaWRuJ3QgbWlzcyBzb21ldGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDAzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTk6MjMuODEyMjI1MTUzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjg1MSwiRXJyb3IiOiJZb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuXG5Zb3UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgb2YgdGhpcyBleGFjdCB0b29sIGNhbGwgaW4geW91ciBjb252ZXJzYXRpb24gaGlzdG9yeS5cbkRvIE5PVCByZXF1ZXN0IGl0IGFnYWluLiBZb3UgTVVTVCBzeW50aGVzaXplIHRoZSBpbmZvcm1hdGlvbiB5b3UgYWxyZWFkeSBoYXZlLFxudHJ5IGEgY29tcGxldGVseSBkaWZmZXJlbnQgdG9vbCwgb3IgcHJvY2VlZCB0byB0aGUgbmV4dCBzdGVwLiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIllvdSBhcmUgcmVwZWF0aW5nIHRoZSBzYW1lIHRvb2wgY2FsbCB3aXRoIHRoZSBleGFjdCBzYW1lIGFyZ3VtZW50cy5cXG5Zb3UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgb2YgdGhpcyBleGFjdCB0b29sIGNhbGwgaW4geW91ciBjb252ZXJzYXRpb24gaGlzdG9yeS5cXG5EbyBOT1QgcmVxdWVzdCBpdCBhZ2Fpbi4gWW91IE1VU1Qgc3ludGhlc2l6ZSB0aGUgaW5mb3JtYXRpb24geW91IGFscmVhZHkgaGF2ZSxcXG50cnkgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCB0b29sLCBvciBwcm9jZWVkIHRvIHRoZSBuZXh0IHN0ZXAuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjU5OjIzLjgxMjI5NDczM1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTM0NDkzMzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IERlZHVjdGlvbnMgb24gdGhlIEh1Z2UgUGFnZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSd2ZSBhbHJlYWR5IHVzZWQgZ3JlcCB0byBsb2NhdGUgdGhlIGRlZmluaXRpb24uIEl0J3MgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBidXQgaXQncyBub3QgYWN0dWFsbHkgKmNhbGxlZCogZnJvbSB3aXRoaW4gdGhhdCBmaWxlLiBJbnRlcmVzdGluZy4gVGhhdCBuYXJyb3dzIHRoaW5ncyBkb3duIHF1aXRlIGEgYml0LiBJdCBsb29rcyBsaWtlIHRoZSBvbmx5IHBsYWNlIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBpcyBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFRoaXMgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIGEgZGVwZW5kZW5jeSBvbiBib3RoIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLlxuXG5Ob3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBIV1BPSVNPTl9JTkpFQ1RgIGlzIGFsc28gYSByZXF1aXJlbWVudCBmb3IgdGVzdGluZyB0aGlzIHNjZW5hcmlvLiBgSFdQT0lTT05fSU5KRUNUYCBhbGxvd3MgdXMgdG8gaW5qZWN0IG1lbW9yeSBmYWlsdXJlcywgd2hpY2ggaXMgcHJlY2lzZWx5IHdoYXQgd2UncmUgY29uY2VybmVkIHdpdGggaGVyZS4gQW5kIGZyb20gbWVtb3J5LCBgTUFEVl9IV1BPSVNPTmAgaXMgYWxzbyBhdmFpbGFibGUgd2hlbiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyBlbmFibGVkLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIGBtYWR2aXNlYCBzeXN0ZW0gY2FsbCwganVzdCB0byBiZSBzdXJlIGFib3V0IGBNQURWX0hXUE9JU09OYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBIV1BPSVNPTl9JTkpFQ1RgIGVuYWJsZXMgdGhlIGZlYXR1cmVzIEkgbmVlZCB0byB0ZXN0IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTMxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjU5OjI5Ljk0Njc5MTE0NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MzA5NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1BRFZfSFdQT0lTT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0xNDkzPXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE0OTUtXFx0c3dpdGNoIChtYWR2X2JlaGF2aW9yLVxcdTAwM2ViZWhhdmlvcikge1xcbm1tL21hZHZpc2UuYzoxNDk2OlxcdGNhc2UgTUFEVl9IV1BPSVNPTjpcXG5tbS9tYWR2aXNlLmMtMTQ5Ny1cXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxcbi0tXFxubW0vbWFkdmlzZS5jPTE1MTk9bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTU1Mi1cXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxcbm1tL21hZHZpc2UuYzoxNTUzOlxcdGNhc2UgTUFEVl9IV1BPSVNPTjpcXG5tbS9tYWR2aXNlLmMtMTU1NC0jZW5kaWZcXG4tLVxcbm1tL21hZHZpc2UuYz0xODg4PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxcbi0tXFxubW0vbWFkdmlzZS5jLTE5NDQtICogIE1BRFZfS0VFUE9ORk9SSyAtIHVuZG8gdGhlIGVmZmVjdCBvZiBNQURWX1dJUEVPTkZPUktcXG5tbS9tYWR2aXNlLmM6MTk0NTogKiAgTUFEVl9IV1BPSVNPTiAtIHRyaWdnZXIgbWVtb3J5IGVycm9yIGhhbmRsZXIgYXMgaWYgdGhlIGdpdmVuIG1lbW9yeSByYW5nZVxcbm1tL21hZHZpc2UuYy0xOTQ2LSAqXFx0XFx0d2VyZSBjb3JydXB0ZWQgYnkgdW5yZWNvdmVyYWJsZSBoYXJkd2FyZSBtZW1vcnkgZmFpbHVyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTk6MzAuMDkyMTA4OTgzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3OTg0MzQzNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgTUFEVl9IV1BPSVNPTmAgaXMgaW5kZWVkIGF2YWlsYWJsZSB3aGVuIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGVuYWJsZWQuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IHRoaW5raW5nIGlzIHRoYXQgZnV6emluZyBgbWFkdmlzZWAgd2l0aCBlaXRoZXIgYE1BRFZfSFdQT0lTT05gIG9yIGBNQURWX1NPRlRfT0ZGTElORWAgcHJvdmlkZXMgYSB2aWFibGUgcGF0aCB0byByZWFjaCB0aGUgYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgZnVuY3Rpb25zLCB3aGljaCBhcmUgbm93IG15IHByaW1hcnkgZm9jdXMuIFRob3NlIGFyZSBkZWZpbml0ZWx5IGtleSB0YXJnZXRzLlxuXG5IYW5nIG9uLi4uIEknbSBhbHNvIGNvbnNpZGVyaW5nIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBhcyBhbm90aGVyIHBvdGVudGlhbCB0YXJnZXQuIEl0J3MgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBhbmQgd2hpbGUgaXQncyBub3QgYSBzdGF0aWMgZnVuY3Rpb24sIEkgbmVlZCB0byBjaGVjayBpZiBpdCdzIGFjdHVhbGx5IGV4cG9ydGVkIG9yIG5vdC4gRXZlbiBpZiBpdCdzIG5vdCBleHBvcnRlZCwgYmVpbmcgYSBnbG9iYWwgd2l0aGluIHRoYXQgZmlsZSBtYWtlcyBpdCB3b3J0aCBsb29raW5nIGludG8gZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMTEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTk6MzQuODkwNTQ3Mjk5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzU0ODM3MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qbWluX29yZGVyX2Zvcl9zcGxpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdlX21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1OTozNC45ODQxMDYyMzJaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ5NzI4ODk3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgS2VybmVsIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIHRoaXMgZnVuY3Rpb24gaXNuJ3QgZXhwb3J0ZWQsIGJ1dCB0aGUgZmFjdCB0aGF0IGl0J3Mgbm9uLXN0YXRpYyBtZWFucyBpdCdsbCBoYXZlIGl0cyBvd24gZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCdzIGZvY3VzIG9uIHRob3NlIHN5bWJvbHM6IGBtaW5fb3JkZXJfZm9yX3NwbGl0YCwgYG1lbW9yeV9mYWlsdXJlYCwgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLiBIbW0sIGFjdHVhbGx5LCBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCBzZWVtIGxpa2UgcHJvbWlzaW5nIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuIFRob3NlIGZlZWwgbGlrZSB0aGUga2luZHMgb2YgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgdHJpZ2dlcmVkIGluIGludGVyZXN0aW5nIHdheXMuXG5cblJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBsZXQncyBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBhcmUgc2V0LlxuXG5Ob3csIHdoYXQgYWJvdXQgYENPTkZJR19IV1BPSVNPTl9JTkpFQ1RgPyBUaGF0IGNvdWxkIGJlIHVzZWZ1bCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyBTeXprYWxsZXIuIElmIGl0IGFsbG93cyBpbmplY3Rpb24gdGhyb3VnaCBkZWJ1Z2ZzLCBpdCdzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGNvbnNpZGVyLiBMZXQncyBhZGQgdGhhdCBvbmUgdG8gdGhlIGxpc3QgYXMgd2VsbC5cblxuT2theSwgbGV0J3MgY2lyY2xlIGJhY2sgdG8gYG1pbl9vcmRlcl9mb3Jfc3BsaXRgLiBJJ3ZlIGFscmVhZHkgc2Nhbm5lZCBgbW0vYCBhbmQgYGluY2x1ZGUvbGludXgvYCBwcmV0dHkgdGhvcm91Z2hseS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGlmIGFueSBkcml2ZXJzIGFyZSBjYWxsaW5nIHRoYXQgZnVuY3Rpb24uIFRpbWUgdG8gYnJvYWRlbiB0aGUgc2VhcmNoIGEgbGl0dGxlIGFuZCBzZWUgaWYgYW55dGhpbmcgaXMgdXNpbmcgaXQgb3V0c2lkZSBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcyMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1OTo0MS40ODEzOTkzNDZaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzY4OTA5NDYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjU5OjQzLjQ1ODMwMDEyMloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTUwNDM2NTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkNvbXBvbmVudCBJbnRlcmFjdGlvbiBBbmFseXNpcyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUsIGFuZCB0aGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBwb3BzIGludG8gbXkgaGVhZCBpczogKklzIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBvciBtb2R1bGUgb3Igd2hhdGV2ZXIgd2UncmUgZGVhbGluZyB3aXRoLCBiZWluZyBpbnZva2VkIGZyb20gYW55d2hlcmUgZWxzZSB3aXRoaW4gdGhlIHN5c3RlbT8qIEkgbmVlZCB0byBrbm93IHRoZSBjYWxsaW5nIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyBjcml0aWNhbCBmb3IgYW55IGRvd25zdHJlYW0gaW1wYWN0IGFuYWx5c2lzLiBLbm93aW5nIHdobyByZWxpZXMgb24gdGhpcyB3aWxsIGluZmx1ZW5jZSBhbnkgcmVmYWN0b3JpbmcgSSBkbyBvciBidWdzIEkgYW0gYWJvdXQgdG8gZml4LiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCByaXBwbGUgZWZmZWN0cyBpZiBJIGNoYW5nZSBhbnl0aGluZyBoZXJlLiBJIGhhdmUgdG8ga25vdyBhbGwgdGhlIHRvdWNocG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzMwMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTk6NDcuNjA4NzQwMjA4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODgwNDc5OTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1OTo0Ny43OTY3OTY4NzRaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU1NTQzOTIwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBhZGRyZXNzaW5nIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBkYXRhIHJhY2Ugb3IgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlIGNvZGUgbG9va3MgY2xlYW4sIHJlcGxhY2luZyBkaXJlY3QgYWNjZXNzIHRvIGBmb2xpby1cdTAwM2VtYXBwaW5nYCB3aXRoIGEgYFJFQURfT05DRWAgYW5kIGNhY2hpbmcgdGhlIHJlc3VsdCBsb2NhbGx5LlxuXG5Gcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhpcyBmdW5jdGlvbiwgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgLCBpcyBvbmx5IGNhbGxlZCBmcm9tIHdpdGhpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIEkgbmVlZCB0byByZXZpZXcgdGhlIHBhdGNoIG1vcmUgdGhvcm91Z2hseSwgYnV0IGl0IGxvb2tzIGxpa2UgaXQncyBndWFyZGluZyBhZ2FpbnN0IGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGUgbG9naWMgc2VlbXMgY29ycmVjdDogaWYgdGhlIGZvbGlvIGhhcyBiZWVuIHRydW5jYXRlZCAobWVhbmluZyBgbWFwcGluZ2AgY291bGQgYmUgTlVMTCksIHRoZSBmdW5jdGlvbiBub3cgcmV0dXJucyAwLCB3aGljaCBzaG91bGQgcHJldmVudCBhIGNyYXNoLlxuXG5JJ20gbWFraW5nIGEgbWVudGFsIG5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB0aHJvdWdoIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLCB3aGljaCB0aGVtc2VsdmVzIGFyZSB0cmlnZ2VyZWQgYnkgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIGFuZCBgbWFkdmlzZShNQURWX1NPRlRfT0ZGTElORSlgLiBTbywgdGhlIGZpeCBpc24ndCBqdXN0IHRoZW9yZXRpY2FsOyBpdCdzIGEgZnVuY3Rpb25hbGx5IHJlYWNoYWJsZSBwYXJ0IG9mIHRoZSBzeXN0ZW0uXG5cbk15IG1haW4gZm9jdXMgd2lsbCBiZSBvbiBgbWluX29yZGVyX2Zvcl9zcGxpdGAsIGBtZW1vcnlfZmFpbHVyZWAsIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gSSdsbCBhbHNvIHdhbnQgdG8ga2VlcCBpbiBtaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczogYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYE1FTU9SWV9GQUlMVVJFYCwgYW5kIGBIV1BPSVNPTl9JTkpFQ1RgLiBOb3csIHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCB0byBlbnN1cmUgdGhpcyBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDk4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjU5OjU2LjM1MjIzOTM5OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0ODQ1MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9ODQzPWNvbmZpZyBNTV9JRFxcbi0tXFxubW0vS2NvbmZpZy04NDUtXFxubW0vS2NvbmZpZzo4NDY6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL0tjb25maWctODQ3LVxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg2ND1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODY5LVxcbm1tL0tjb25maWc6ODcwOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTg3MS1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg3Ni1cXG5tbS9LY29uZmlnOjg3NzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxcbm1tL0tjb25maWctODc4LVxcdFxcdGJvb2wgXFxcIm1hZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg4NS1cXG5tbS9LY29uZmlnOjg4NjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg4Ny1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODkzPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05MDItXFxubW0vS2NvbmZpZzo5MDM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTkwNC1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTEyLVxcbm1tL0tjb25maWc6OTEzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTE0LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTIwLVxcbm1tL0tjb25maWc6OTIxOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05MjItXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkyOC1cXG5tbS9LY29uZmlnOjkyOTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTkzMC1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTkzOD1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctOTQ3LVxcbm1tL0tjb25maWc6OTQ4OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXFxubW0vS2NvbmZpZy05NDktXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk1Ni1cXG5tbS9LY29uZmlnOjk1NzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTk1OC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk2NC1cXG5tbS9LY29uZmlnOjk2NTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTY2LVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NzItXFxubW0vS2NvbmZpZzo5NzM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05NzQtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1OTo1Ni40ODcwOTA3NzdaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg3Njc2ODUzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBtbS9LY29uZmlnYCBMaW5lIDg0NioqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcsIGxldCdzIGdvIHN0cmFpZ2h0IGludG8gYG1tL0tjb25maWdgIGFuZCB6b29tIGluIG9uIGxpbmUgODQ2LiBObyBiZWF0aW5nIGFyb3VuZCB0aGUgYnVzaC4gSSBrbm93IHRoZXJlJ3MgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiBvciBzZWN0aW9uIG9mIGNvZGUgdGhhdCBJJ20gYWZ0ZXIsIGFuZCBnb2luZyBkaXJlY3RseSB0byB0aGUgbGlrZWx5IGxvY2F0aW9uIGlzIHRoZSBtb3N0IGVmZmljaWVudCB1c2Ugb2YgbXkgdGltZSwgYW5kIHVuZGVyc3RhbmRpbmcgaG93IG1lbW9yeSBtYW5hZ2VtZW50IGlzIGNvbmZpZ3VyZWQuIFRoaXMgbGlrZWx5IHJlbGF0ZXMgdG8gYSBwYXJ0aWN1bGFyIGZlYXR1cmUgSSdtIGVpdGhlciB0cnlpbmcgdG8gZW5hYmxlL2Rpc2FibGUsIGRpYWdub3NlLCBvciBwb3RlbnRpYWxseSBjb250cmlidXRlIGEgcGF0Y2ggdG8uIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB3aGF0IHRoZSBjb250ZXh0IG1pZ2h0IGJlIGFyb3VuZCBsaW5lIDg0NiDigJMgaXQgY291bGQgYmUgcmVsYXRlZCB0byBOVU1BLCBodWdlIHBhZ2VzLCBtZW1vcnkgaG90cGx1Zywgb3Igc29tZSBvdGhlciBrZXkgbWVtb3J5LW1hbmFnZW1lbnQgZmVhdHVyZS4gTXkgZ29hbCBpcyB0byBxdWlja2x5IGdyYXNwIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGxvZ2ljIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1lbW9yeSBzdWJzeXN0ZW0uIFRoaXMgbWlnaHQgYmUgcGFydCBvZiB1bmRlcnN0YW5kaW5nIGEgYnVpbGQgZXJyb3IsIG9yIHRyYWNraW5nIGRvd24gYW4gdW5leHBlY3RlZCBiZWhhdmlvci4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTAwNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA1OjAwOjA2LjM2Mzg2MjgyOFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NDA6XFx0XFx0ICBTYXkgWSBpZiB5b3VyIHN5c3RlbSBoYXMgbG90cyBvZiBtZW1vcnkuIFNheSBOIGlmIHlvdSBhcmVcXG4gODQxOlxcdFxcdCAgbWVtb3J5IGNvbnN0cmFpbmVkLlxcbiA4NDI6XFx0XFxuIDg0MzpcXHRjb25maWcgTU1fSURcXG4gODQ0OlxcdFxcdGRlZl9ib29sIG5cXG4gODQ1OlxcdFxcbiA4NDY6XFx0bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiA4NDc6XFx0XFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4gODQ4OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFxcdTAwMjZcXHUwMDI2ICFQUkVFTVBUX1JUXFxuIDg0OTpcXHRcXHRzZWxlY3QgQ09NUEFDVElPTlxcbiA4NTA6XFx0XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbiA4NTE6XFx0XFx0c2VsZWN0IE1NX0lEXFxuIDg1MjpcXHRcXHRoZWxwXFxuIDg1MzpcXHRcXHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcXG4gODU0OlxcdFxcdCAgaHVnZSB0bGIgdHJhbnNwYXJlbnRseSB0byB0aGUgYXBwbGljYXRpb25zIHdoZW5ldmVyIHBvc3NpYmxlLlxcbiA4NTU6XFx0XFx0ICBUaGlzIGZlYXR1cmUgY2FuIGltcHJvdmUgY29tcHV0aW5nIHBlcmZvcm1hbmNlIHRvIGNlcnRhaW5cXG4gODU2OlxcdFxcdCAgYXBwbGljYXRpb25zIGJ5IHNwZWVkaW5nIHVwIHBhZ2UgZmF1bHRzIGR1cmluZyBtZW1vcnlcXG4gODU3OlxcdFxcdCAgYWxsb2NhdGlvbiwgYnkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiB0bGIgbWlzc2VzIGFuZCBieSBzcGVlZGluZ1xcbiA4NTg6XFx0XFx0ICB1cCB0aGUgcGFnZXRhYmxlIHdhbGtpbmcuXFxuIDg1OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDU6MDA6MDYuMzY0MDA5NTg4WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2NDY4MDU1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQsIGl0J3MgcmVsaWFudCBvbiBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBiZWluZyBlbmFibGVkLCB3aGljaCBpcyB0eXBpY2FsbHkgc3RhbmRhcmQgYWNyb3NzIGFyY2hpdGVjdHVyZXMsIGFuZCBjcnVjaWFsbHkgKm5vdCogYmVpbmcgcHJlZW1wdF9ydC4gRmFpciBlbm91Z2guIEEgcHJldHR5IGNvbW1vbiBjb25maWcgb3B0aW9uLCBub3RoaW5nIHRvbyBzdXJwcmlzaW5nIHRoZXJlLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBgTUVNT1JZX0ZBSUxVUkVgLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIGFuZCBzZWUgaG93IHRoZXNlIHR3byBwaWVjZXMgb2YgdGhlIHB1enpsZSBpbnRlcmFjdC4gV2hlcmUgZG8gdGhlc2UgaW50ZXJzZWN0IGFuZCBpbnRlcmFjdD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGludGVyZXN0aW5nIGludGVyYWN0aW9ucyB0aGF0IG5lZWQgZnVydGhlciBpbnZlc3RpZ2F0aW9uPyBMZXQncyBjaGVjayB0aG9zZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTg3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNTowMDoxNC4wMTA4MTgwMjJaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMjg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc3MDpcXHRcXG4gNzcxOlxcdFxcdCAgVGhpcyB2YWx1ZSBjYW4gYmUgY2hhbmdlZCBhZnRlciBib290IHVzaW5nIHRoZVxcbiA3NzI6XFx0XFx0ICAvcHJvYy9zeXMvdm0vbW1hcF9taW5fYWRkciB0dW5hYmxlLlxcbiA3NzM6XFx0XFxuIDc3NDpcXHRjb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbiA3NzU6XFx0XFx0Ym9vbFxcbiA3NzY6XFx0XFxuIDc3NzpcXHRjb25maWcgTUVNT1JZX0ZBSUxVUkVcXG4gNzc4OlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuIDc3OTpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG4gNzgwOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSByZWNvdmVyeSBmcm9tIGhhcmR3YXJlIG1lbW9yeSBlcnJvcnNcXFwiXFxuIDc4MTpcXHRcXHRzZWxlY3QgSU5URVJWQUxfVFJFRVxcbiA3ODI6XFx0XFx0aGVscFxcbiA3ODM6XFx0XFx0ICBFbmFibGVzIGNvZGUgdG8gcmVjb3ZlciBmcm9tIHNvbWUgbWVtb3J5IGZhaWx1cmVzIG9uIHN5c3RlbXNcXG4gNzg0OlxcdFxcdCAgd2l0aCBNQ0EgcmVjb3ZlcnkuIFRoaXMgYWxsb3dzIGEgc3lzdGVtIHRvIGNvbnRpbnVlIHJ1bm5pbmdcXG4gNzg1OlxcdFxcdCAgZXZlbiB3aGVuIHNvbWUgb2YgaXRzIG1lbW9yeSBoYXMgdW5jb3JyZWN0ZWQgZXJyb3JzLiBUaGlzIHJlcXVpcmVzXFxuIDc4NjpcXHRcXHQgIHNwZWNpYWwgaGFyZHdhcmUgc3VwcG9ydCBhbmQgdHlwaWNhbGx5IEVDQyBtZW1vcnkuXFxuIDc4NzpcXHRcXG4gNzg4OlxcdGNvbmZpZyBIV1BPSVNPTl9JTkpFQ1RcXG4gNzg5OlxcdFxcdHRyaXN0YXRlIFxcXCJIV1BvaXNvbiBwYWdlcyBpbmplY3RvclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDU6MDA6MTQuMDEyMDIzNjcyWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2OTU2Nzg2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzpcblxuKipBbmFseXppbmcgTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcqKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBgTUVNT1JZX0ZBSUxVUkVgLiBUaGF0J3MgYSBrZXkgZmVhdHVyZSwgb2J2aW91c2x5LCBidXQgaXQgaGluZ2VzIG9uIHdoZXRoZXIgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgY2FuIGV2ZW4gc3VwcG9ydCBpdCwgcmlnaHQ/IFNvLCBgTUVNT1JZX0ZBSUxVUkVg4oCZcyBleGlzdGVuY2UgaXMgZGlyZWN0bHkgY29uZGl0aW9uZWQgYnkgYEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVgLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIG5vIGhhcmR3YXJlIHN1cHBvcnQsIG5vIGZlYXR1cmUuXG5cbkFuZCwgb2YgY291cnNlLCB0aGF0J3MgYWxtb3N0IGEgZ2l2ZW4gb24gbW9kZXJuIGFyY2hpdGVjdHVyZXMgbGlrZSB4ODYgYW5kIGFybTY0LiBUaG9zZSBwbGF0Zm9ybXMgYXJlIHByZXR0eSB3ZWxsLWVzdGFibGlzaGVkIGluIHRoZWlyIHN1cHBvcnQgZm9yIHRoZXNlIGtpbmRzIG9mIG1lbW9yeSBlcnJvciBub3RpZmljYXRpb25zLCBlc3BlY2lhbGx5IGF0IHRoZSBoYXJkd2FyZSBsZXZlbC5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB3ZSBjaGVjayBgSFdQT0lTT05fSU5KRUNUYC4gV2UgbmVlZCB0byBzZWUgaWYgaXQgcGxheXMgYW55IHJvbGUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxMjAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA1OjAwOjE4LjcwNzcwNTMyNloiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQxMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzg4LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzg4OlxcdGNvbmZpZyBIV1BPSVNPTl9JTkpFQ1RcXG4gNzg5OlxcdFxcdHRyaXN0YXRlIFxcXCJIV1BvaXNvbiBwYWdlcyBpbmplY3RvclxcXCJcXG4gNzkwOlxcdFxcdGRlcGVuZHMgb24gTUVNT1JZX0ZBSUxVUkUgXFx1MDAyNlxcdTAwMjYgREVCVUdfS0VSTkVMIFxcdTAwMjZcXHUwMDI2IFBST0NfRlNcXG4gNzkxOlxcdFxcdHNlbGVjdCBQUk9DX1BBR0VfTU9OSVRPUlxcbiA3OTI6XFx0XFxuIDc5MzpcXHRjb25maWcgTk9NTVVfSU5JVElBTF9UUklNX0VYQ0VTU1xcbiA3OTQ6XFx0XFx0aW50IFxcXCJUdXJuIG9uIG1tYXAoKSBleGNlc3Mgc3BhY2UgdHJpbW1pbmcgYmVmb3JlIGJvb3RpbmdcXFwiXFxuIDc5NTpcXHRcXHRkZXBlbmRzIG9uICFNTVVcXG4gNzk2OlxcdFxcdGRlZmF1bHQgMVxcbiA3OTc6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNTowMDoxOC43MDkyNDk0OTZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI0MzM4NDkyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBmb3IgYEhXUE9JU09OX0lOSkVDVGAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIGRlcGVuZGVuY2llcyBqdW1wIG91dCBhdCBtZS4gYEhXUE9JU09OX0lOSkVDVGAgcmVsaWVzIG9uIGBNRU1PUllfRkFJTFVSRWAsIGBERUJVR19LRVJORUxgLCBhbmQgYFBST0NfRlNgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBGb3IgdGhpcyBzcGVjaWZpYyBmaXgsIHdlJ3JlIHJlYWxseSBmb2N1c2luZyBvbiBgTUVNT1JZX0ZBSUxVUkVgIGJlaW5nIHRoZSBjcml0aWNhbCBvbmUgdG8gaGF2ZSBlbmFibGVkLiBBbmQgc2luY2UgYEhXUE9JU09OX0lOSkVDVGAgaXMgdGhlIGZlYXR1cmUgaW4gcXVlc3Rpb24sIGxldCdzIGtlZXAgdGhhdCBpbiBtaW5kIGFzIHdlbGwuIFdlJ2xsIGFsc28gbmVlZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBpdCBzZWVtcywgb3IgdGhlIHJhY2UgbWF5IG5vdCBiZSBleGVyY2lzZWQuXG5cblRoZSBjb3JlIG9mIHRoaXMgaXMgYXJvdW5kIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG1lbW9yeSBmYWlsdXJlIG1lY2hhbmlzbXMuIFdlJ3JlIHRhbGtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGBmb2xpby1cdTAwM2VtYXBwaW5nYCBhY2Nlc3MgYW5kIHBvdGVudGlhbCByYWNlcyBvciBudWxsIGRlcmVmZXJlbmNlcy4gVGhlIHJlYWwgZW50cnkgcG9pbnRzIHRvIHRlc3QgYXJlIHRoZSBvbmVzIGV4cG9zZWQgYnkgaGFyZHdhcmUgbWVtb3J5IGVycm9yIGluamVjdGlvbiwgdGhlIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBhbmQgYE1BRFZfU09GVF9PRkZMSU5FYCBzY2VuYXJpb3MgdGhhdCBhcmUgbWFuYWdlZCBieSBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gVGhhdCdzIHdoZXJlIHdlJ2xsIHNlZSB0aGlzIGNvbmN1cnJlbmN5IGlzc3VlLlxuXG5UaGUgcmVhc29uaW5nIGhlcmUgaXMgc29saWQsIHdlJ3JlIGZ1enppbmcgdGhvc2UgZW50cnkgcG9pbnRzIHdpdGggYENPTkZJR19NRU1PUllfRkFJTFVSRWAgZW5hYmxlZC4gVGhhdCB3aWxsIGV4ZXJjaXNlIHRoZSBtb2RpZmllZCBjb2RlIGFuZCwgaG9wZWZ1bGx5LCByZXZlYWwgdGhlIHJhY2UgYW5kIGRlbW9uc3RyYXRlIHRoYXQgaXQncyByZXNvbHZlZC5cblxuTm93LCBhIHF1aWNrIGNoZWNrLi4uaXMgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIHN0YXRpYyBpbmxpbmUgd2hlbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRpc2FibGVkPyBZdXAsIHF1aWNrbHkgbG9va2VkIGF0IGBpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaGAgYW5kIGNvbmZpcm1lZCBpdC4gU28sIHRvIGJlIGNsZWFyLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzICpyZXF1aXJlZCogdG8gZXhlcmNpc2UgdGhpcyBidWcgaW4gc29tZSBjb2RlIHBhdGhzLlxuXG5BbHJpZ2h0LCB0aGF0J3MgZW5vdWdoIGFuYWx5c2lzLCB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MjgsIk91dHB1dFRva2VucyI6MTk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDU6MDA6MjYuOTUyNjM4NzQ0WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2NjE4MTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIkhXUE9JU09OX0lOSkVDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgICBcIm1lbW9yeV9mYWlsdXJlXCIsXG4gICAgXCJzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRhdGEgcmFjZSBhbmQgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgbWluX29yZGVyX2Zvcl9zcGxpdGAgd2hlbiBhY2Nlc3NpbmcgYGZvbGlvLVxcdTAwM2VtYXBwaW5nYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIGhhcmR3YXJlIG1lbW9yeSBlcnJvciBpbmplY3Rpb24gbWVjaGFuaXNtcyAobGlrZSBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgb3IgYE1BRFZfU09GVF9PRkZMSU5FYCksIHdoaWNoIGFyZSBoYW5kbGVkIGJ5IGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLiBGdXp6aW5nIHRoZXNlIGVudHJ5IHBvaW50cyB3aXRoIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGVuYWJsZWQgd2lsbCBleGVyY2lzZSB0aGUgbW9kaWZpZWQgY29kZSBhbmQgZW5zdXJlIHRoZSBjb25jdXJyZW5jeSBpc3N1ZSBpcyByZXNvbHZlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIkhXUE9JU09OX0lOSkVDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgICBcIm1lbW9yeV9mYWlsdXJlXCIsXG4gICAgXCJzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRhdGEgcmFjZSBhbmQgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgbWluX29yZGVyX2Zvcl9zcGxpdGAgd2hlbiBhY2Nlc3NpbmcgYGZvbGlvLVxcdTAwM2VtYXBwaW5nYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIGhhcmR3YXJlIG1lbW9yeSBlcnJvciBpbmplY3Rpb24gbWVjaGFuaXNtcyAobGlrZSBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgb3IgYE1BRFZfU09GVF9PRkZMSU5FYCksIHdoaWNoIGFyZSBoYW5kbGVkIGJ5IGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLiBGdXp6aW5nIHRoZXNlIGVudHJ5IHBvaW50cyB3aXRoIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGVuYWJsZWQgd2lsbCBleGVyY2lzZSB0aGUgbW9kaWZpZWQgY29kZSBhbmQgZW5zdXJlIHRoZSBjb25jdXJyZW5jeSBpc3N1ZSBpcyByZXNvbHZlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowsrlfm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 04:07:32 +0000 UTC FinishedAt: 2026-08-04 05:00:28 +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": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "MEMORY_FAILURE", "HWPOISON_INJECT" ], "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": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "MEMORY_FAILURE", "HWPOISON_INJECT" ], "series_id": "547277c9-1702-46ce-ba69-6f00fa4f2ac4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "min_order_for_split", "memory_failure", "soft_offline_in_use_page" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0hXUE9JU09OX0lOSkVDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21pbl9vcmRlcl9mb3Jfc3BsaXQmIzM0OywKICAgICYjMzQ7bWVtb3J5X2ZhaWx1cmUmIzM0OywKICAgICYjMzQ7c29mdF9vZmZsaW5lX2luX3VzZV9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIGFuZCBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCB3aGVuIGFjY2Vzc2luZyBgZm9saW8tXHUwMDNlbWFwcGluZ2AuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSBoYXJkd2FyZSBtZW1vcnkgZXJyb3IgaW5qZWN0aW9uIG1lY2hhbmlzbXMgKGxpa2UgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9yIGBNQURWX1NPRlRfT0ZGTElORWApLCB3aGljaCBhcmUgaGFuZGxlZCBieSBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gRnV6emluZyB0aGVzZSBlbnRyeSBwb2ludHMgd2l0aCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBlbmFibGVkIHdpbGwgZXhlcmNpc2UgdGhlIG1vZGlmaWVkIGNvZGUgYW5kIGVuc3VyZSB0aGUgY29uY3VycmVuY3kgaXNzdWUgaXMgcmVzb2x2ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3NWU1MjE2OWI0NDE0YjY3NTdmNWMyMjBiNDFjY2ZlZTFlOGY3NWMxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAwNDo1Nzo1OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggMmJjY2IwYTUzYTBhNi4uNTRkNDI2MWEyYTE1MCAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC00Mjg0LDE5ICYjNDM7NDI4NCwyMyBAQCBpbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbiAgKi9cbiB1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcbiYjNDM7XG4gXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4mIzQzO1x0bWFwcGluZyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VtYXBwaW5nKTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogSWYgdGhlIGZvbGlvIGdvdCB0cnVuY2F0ZWQsIHdlIGRvbiYjMzk7dCBrbm93IHRoZSBwcmV2aW91cyBtYXBwaW5nIGFuZFxuIFx0ICogY29uc2VxdWVudGx5IHRoZSBvbGQgbWluIG9yZGVyLiBCdXQgaXQgZG9lc24mIzM5O3QgbWF0dGVyLCBhcyBhbnkgc3BsaXRcbiBcdCAqIGF0dGVtcHQgd2lsbCBpbW1lZGlhdGVseSBmYWlsIHdpdGggLUVCVVNZIGFzIHRoZSBmb2xpbyBjYW5ub3QgZ2V0XG4gXHQgKiBzcGxpdCB1bnRpbCBmcmVlZC5cbiBcdCAqL1xuLVx0aWYgKCFmb2xpby1cdTAwM2VtYXBwaW5nKVxuJiM0MztcdGlmICghbWFwcGluZylcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXR1cm4gbWFwcGluZ19taW5fZm9saW9fb3JkZXIoZm9saW8tXHUwMDNlbWFwcGluZyk7XG4mIzQzO1x0cmV0dXJuIG1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKG1hcHBpbmcpO1xuIH1cbiBcbiBpbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtIV1BPSVNPTl9JTkpFQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttaW5fb3JkZXJfZm9yX3NwbGl0JiMzNDssCiAgICAmIzM0O21lbW9yeV9mYWlsdXJlJiMzNDssCiAgICAmIzM0O3NvZnRfb2ZmbGluZV9pbl91c2VfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRhdGEgcmFjZSBhbmQgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgbWluX29yZGVyX2Zvcl9zcGxpdGAgd2hlbiBhY2Nlc3NpbmcgYGZvbGlvLVx1MDAzZW1hcHBpbmdgLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgaGFyZHdhcmUgbWVtb3J5IGVycm9yIGluamVjdGlvbiBtZWNoYW5pc21zIChsaWtlIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBvciBgTUFEVl9TT0ZUX09GRkxJTkVgKSwgd2hpY2ggYXJlIGhhbmRsZWQgYnkgYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuIEZ1enppbmcgdGhlc2UgZW50cnkgcG9pbnRzIHdpdGggYENPTkZJR19NRU1PUllfRkFJTFVSRWAgZW5hYmxlZCB3aWxsIGV4ZXJjaXNlIHRoZSBtb2RpZmllZCBjb2RlIGFuZCBlbnN1cmUgdGhlIGNvbmN1cnJlbmN5IGlzc3VlIGlzIHJlc29sdmVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzVlNTIxNjliNDQxNGI2NzU3ZjVjMjIwYjQxY2NmZWUxZThmNzVjMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDQgMDQ6NTc6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCAyYmNjYjBhNTNhMGE2Li41NGQ0MjYxYTJhMTUwIDEwMDY0NAotLS0gYS9tbS9odWdlX21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmMKQEAgLTQyODQsMTkgJiM0Mzs0Mjg0LDIzIEBAIGludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLAogICovCiB1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewomIzQzOwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKJiM0MzsKIAlpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkKIAkJcmV0dXJuIDA7CiAKJiM0MzsJbWFwcGluZyA9IFJFQURfT05DRShmb2xpby0mZ3Q7bWFwcGluZyk7CiYjNDM7CiAJLyoKIAkgKiBJZiB0aGUgZm9saW8gZ290IHRydW5jYXRlZCwgd2UgZG9uJiMzOTt0IGtub3cgdGhlIHByZXZpb3VzIG1hcHBpbmcgYW5kCiAJICogY29uc2VxdWVudGx5IHRoZSBvbGQgbWluIG9yZGVyLiBCdXQgaXQgZG9lc24mIzM5O3QgbWF0dGVyLCBhcyBhbnkgc3BsaXQKIAkgKiBhdHRlbXB0IHdpbGwgaW1tZWRpYXRlbHkgZmFpbCB3aXRoIC1FQlVTWSBhcyB0aGUgZm9saW8gY2Fubm90IGdldAogCSAqIHNwbGl0IHVudGlsIGZyZWVkLgogCSAqLwotCWlmICghZm9saW8tJmd0O21hcHBpbmcpCiYjNDM7CWlmICghbWFwcGluZykKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gbWFwcGluZ19taW5fZm9saW9fb3JkZXIoZm9saW8tJmd0O21hcHBpbmcpOwomIzQzOwlyZXR1cm4gbWFwcGluZ19taW5fZm9saW9fb3JkZXIobWFwcGluZyk7CiB9CiAKIGludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEh1Z2UgTWVtb3J5IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgYG1tL2h1Z2VfbWVtb3J5LmNgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGhvbmVkIGluIG9uIHRoZSBgbWluX29yZGVyX2Zvcl9zcGxpdGAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGhlcmUsIGFzIGZhciBhcyBJIGNhbiBzZWUsIGlzIHRoYXQgaXQmIzM5O3MgcmVwbGFjaW5nIGRpcmVjdCBhY2Nlc3NlcyB0byBgZm9saW8tJmd0O21hcHBpbmdgIHdpdGggYFJFQURfT05DRShmb2xpby0mZ3Q7bWFwcGluZylgLiBJIG5lZWQgdG8gZGlnIGludG8gYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIHdpdGhpbiBgbW0vaHVnZV9tZW1vcnkuY2AgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG5lY2Vzc2FyeS4gSXMgaXQgYSBtZW1vcnkgb3JkZXJpbmcgaXNzdWU/IEEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uPyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoZXJlJiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgYSBzdWJ0bGUgY29uY3VycmVuY3kgY29uY2VybiB0aGF0JiMzOTtzIGJlaW5nIGFkZHJlc3NlZCBoZXJlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHN1Y2ggZnVuZGFtZW50YWwgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB1c2luZyBgUkVBRF9PTkNFYCBvbiB0aGF0IHNwZWNpZmljIGZpZWxkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBXaGF0IGlzIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyYWwgcmVhc29uIGZvciB0aGlzIGNoYW5nZT8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaW5fb3JkZXJfZm9yX3NwbGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTQyNjg9aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00Mjc1LS8qKlxubW0vaHVnZV9tZW1vcnkuYzo0Mjc2OiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSAtIGdldCB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvXG5tbS9odWdlX21lbW9yeS5jLTQyNzctICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxubW0vaHVnZV9tZW1vcnkuYy00Mjc4LSAqXG5tbS9odWdlX21lbW9yeS5jOjQyNzk6ICogbWluX29yZGVyX2Zvcl9zcGxpdCgpIHRlbGxzIHRoZSBtaW5pbXVtIG9yZGVyIEBmb2xpbyBjYW4gYmUgc3BsaXQgdG8uXG5tbS9odWdlX21lbW9yeS5jLTQyODAtICogSWYgYSBmaWxlLWJhY2tlZCBmb2xpbyBpcyB0cnVuY2F0ZWQsIDAgd2lsbCBiZSByZXR1cm5lZC4gQW55IHN1YnNlcXVlbnRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyODQtICovXG5tbS9odWdlX21lbW9yeS5jOjQyODU6dW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc1MAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb25jdXJyZW5jeSBCdWcgaW4gdGhlIEZvbGlvIFNwbGl0dGluZyBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBwb3RlbnRpYWwgZm9yIGEgcmFjZSBjb25kaXRpb24ganVtcHMgb3V0IGF0IG1lLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBmb2xpby0mZ3Q7bWFwcGluZ2AgaW4gYG1pbl9vcmRlcl9mb3Jfc3BsaXRgLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGVyZSYjMzk7cyBhIHdpbmRvdyB3aGVyZSBpdCBjb3VsZCBiZSByZWFkIHR3aWNlLiBUaGUgZmlyc3QgcmVhZCBtaWdodCBmaW5kIGEgdmFsaWQgcG9pbnRlciwgYnV0IGEgY29uY3VycmVudCB0cnVuY2F0aW9uIGNvdWxkIHNldCBpdCB0byBOVUxMIGJlZm9yZSB0aGUgc2Vjb25kIHJlYWQuIFRoYXQgc2NlbmFyaW8sIG9mIGNvdXJzZSwgd291bGQgcmVzdWx0IGluIGEgbmFzdHkgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gd2UgaGl0IGBtYXBwaW5nX21pbl9mb2xpb19vcmRlcmAuCgpUaGlzIGlzIGEgY2xlYXItY3V0IGZ1bmN0aW9uYWwgY2hhbmdlLCBjb3JyZWN0aW5nIGEgY29uY3VycmVuY3kgYnVn4oCUcHJlY2lzZWx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY2FuIGJpdGUgeW91IGluIGEgbG93LWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHQgaWYgeW91IGFyZW4mIzM5O3QgY2FyZWZ1bC4gSXQmIzM5O3MgZ29vZCB0aGF0IHRoaXMgd2FzIGlkZW50aWZpZWQuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBjYWxsIHNpdGVzIG9mIGBtaW5fb3JkZXJfZm9yX3NwbGl0YC4gVW5kZXJzdGFuZGluZyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgaXMgY3J1Y2lhbCB0byBhc3Nlc3MgdGhlIHRydWUgc2NvcGUgYW5kIGltcGFjdCBvZiB0aGlzIGZpeC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgdmFyaW91cyBleGVjdXRpb24gcGF0aHMgdGhhdCBjb3VsZCBiZSBhZmZlY3RlZCBieSB0aGlzIHBvdGVudGlhbCByYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pbl9vcmRlcl9mb3Jfc3BsaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9NDA0PWludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQwNTp1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQwNi1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD02NDE9c3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTY0Ni1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjY0NzpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NDgte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDI2OD1pbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNzUtLyoqXG5tbS9odWdlX21lbW9yeS5jOjQyNzY6ICogbWluX29yZGVyX2Zvcl9zcGxpdCgpIC0gZ2V0IHRoZSBtaW5pbXVtIG9yZGVyIEBmb2xpbyBjYW4gYmUgc3BsaXQgdG9cbm1tL2h1Z2VfbWVtb3J5LmMtNDI3Ny0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XG5tbS9odWdlX21lbW9yeS5jLTQyNzgtICpcbm1tL2h1Z2VfbWVtb3J5LmM6NDI3OTogKiBtaW5fb3JkZXJfZm9yX3NwbGl0KCkgdGVsbHMgdGhlIG1pbmltdW0gb3JkZXIgQGZvbGlvIGNhbiBiZSBzcGxpdCB0by5cbm1tL2h1Z2VfbWVtb3J5LmMtNDI4MC0gKiBJZiBhIGZpbGUtYmFja2VkIGZvbGlvIGlzIHRydW5jYXRlZCwgMCB3aWxsIGJlIHJldHVybmVkLiBBbnkgc3Vic2VxdWVudFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDI4NC0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NTp1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaHVnZV9tZW1vcnkuYy00Mjg2LXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIzMzA9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDQyLVx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI0NDM6XHRcdGNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ0NC1cdFx0aW50IGVycjtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI3ODA9c3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzk1LVx0aWYgKCFodWdlIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzk2Olx0XHRjb25zdCBpbnQgbmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3OTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc4MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOgoKKipBbmFseXppbmcgUG90ZW50aWFsIEh1Z2UgUGFnZSBBbGxvY2F0aW9uIElzc3VlcyoqCgpSaWdodCwgc28gSSYjMzk7dmUgc2VlbiB0aGVzZSBlcnJvciByZXBvcnRzIGNyb3BwaW5nIHVwLCBhbmQgSSYjMzk7bSB0cnlpbmcgdG8gcGlucG9pbnQgd2hlcmUgYSBodWdlIHBhZ2UgYWxsb2NhdGlvbiBpcyBnb2luZyBzaWRld2F5cy4gVGhlIGtleSBpbmRpY2F0b3JzIGFyZSBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gV2hlcmUgYXJlIHRoZXNlIGZ1bmN0aW9ucyBnZXR0aW5nIGNhbGxlZCBmcm9tPyBJIG5lZWQgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUgdG8gdW5kZXJzdGFuZCB0aGlzIGlzc3VlLgoKT2theSwgbm93LCBpcyBgbWluX29yZGVyX2Zvcl9zcGxpdGAgZXhwb3J0ZWQgYW55d2hlcmU/IEhvbGQgb24uLi4gaXQmIzM5O3Mgbm90IGEgZGlyZWN0IGV4cG9ydCwgSSBuZWVkIHRvIGxvb2sgaW4gYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYC4gVGhhdCYjMzk7cyB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBSaWdodCwgdGhhdCYjMzk7cyB1c2VmdWwuIE5vdywgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGNoZWNrIGlmIHRoYXQgZnVuY3Rpb24gaXMgdXNlZCB3aXRoaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGl0c2VsZi4gSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIGl0cyBsb2NhbCB1c2VzIGJlZm9yZSBleHBhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pbl9vcmRlcl9mb3Jfc3BsaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9NDI2OD1pbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNzUtLyoqXG5tbS9odWdlX21lbW9yeS5jOjQyNzY6ICogbWluX29yZGVyX2Zvcl9zcGxpdCgpIC0gZ2V0IHRoZSBtaW5pbXVtIG9yZGVyIEBmb2xpbyBjYW4gYmUgc3BsaXQgdG9cbm1tL2h1Z2VfbWVtb3J5LmMtNDI3Ny0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XG5tbS9odWdlX21lbW9yeS5jLTQyNzgtICpcbm1tL2h1Z2VfbWVtb3J5LmM6NDI3OTogKiBtaW5fb3JkZXJfZm9yX3NwbGl0KCkgdGVsbHMgdGhlIG1pbmltdW0gb3JkZXIgQGZvbGlvIGNhbiBiZSBzcGxpdCB0by5cbm1tL2h1Z2VfbWVtb3J5LmMtNDI4MC0gKiBJZiBhIGZpbGUtYmFja2VkIGZvbGlvIGlzIHRydW5jYXRlZCwgMCB3aWxsIGJlIHJldHVybmVkLiBBbnkgc3Vic2VxdWVudFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDI4NC0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NTp1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaHVnZV9tZW1vcnkuYy00Mjg2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzU4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgYHNwbGl0X2ZvbGlvX3RvX2xpc3RgIEZ1bmN0aW9uJiMzOTtzIFBvdGVudGlhbCBDYWxscyoqCgpPa2F5LCBzbyBJIHdhcyBsb29raW5nIGZvciB3aGVyZSB0aGlzIGZ1bmN0aW9uLCB3aGljaCBJIHdhcyBzdXJlIHdhcyBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHdhcyBjYWxsZWQuIEJ1dCBpdCYjMzk7cyBub3QgYWN0dWFsbHkgbmFtZWQgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgPyBUaGF0JiMzOTtzIG9kZC4gTGV0IG1lIHNlZSwgY291bGQgYHNwbGl0X2ZvbGlvX3RvX2xpc3RgIGJlIGNhbGxpbmcgaXQ/IE5vLCBub3RoaW5nIGluIHRoZSBncmVwIG91dHB1dCBzdWdnZXN0cyB0aGF0LiBBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUgZm9yIGBzcGxpdF9mb2xpb190b19saXN0YCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AgZGlyZWN0bHkuIExldCYjMzk7cyBzZWUgaWYgdGhhdCBwcm92aWRlcyBhbnkgY2x1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NwbGl0X2ZvbGlvX3RvX2xpc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9NDI4NT11bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDMwNS1cbm1tL2h1Z2VfbWVtb3J5LmM6NDMwNjppbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxubW0vaHVnZV9tZW1vcnkuYy00MzA3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcwOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczoKCioqRGlnZ2luZyBpbnRvIGEgTWVtb3J5IEZhaWx1cmUgU2NlbmFyaW8qKgoKT2theSwgdGhlIHRyYWlsIHN0YXJ0cyB3aXRoIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCDigJMgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgYWN0aW9uIGlzIGxpa2VseSBoYXBwZW5pbmcuIE15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGRpdmUgaW50byBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgaXRzZWxmLiBUaW1lIHRvIHNlZSB3aGF0IHRoYXQgZmlsZSBpcyByZWFsbHkgZG9pbmcsIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFyb3VuZCB0aGlzIGZ1bmN0aW9uIGNhbGwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBgbWluX29yZGVyX2Zvcl9zcGxpdGAgaXMgYmVpbmcgY2FsbGVkIHRoZXJlLCBhbmQgd2hhdCBjbHVlcyBpdCBnaXZlcyBtZSByZWdhcmRpbmcgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIG1lbW9yeSBmYWlsdXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB3ZSBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaW5fb3JkZXJfZm9yX3NwbGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jPTIzMzA9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDQyLVx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI0NDM6XHRcdGNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ0NC1cdFx0aW50IGVycjtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI3ODA9c3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzk1LVx0aWYgKCFodWdlIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzk2Olx0XHRjb25zdCBpbnQgbmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3OTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNTEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgVGVybWlub2xvZ3kgTGFuZHNjYXBlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gcHJlc2VudGVkIHdpdGggdGhpcyBjb25jZXB0LCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXM6IGlzIHRoaXMgdGhpbmcgdW5pcXVlIHRvICp0aGlzKiBjb250ZXh0PyBPciwgbW9yZSBwcmVjaXNlbHksIGlzIHRoaXMgdGVybWlub2xvZ3kgc3RhbmRhcmQgYWNyb3NzIG15IGZpZWxkLCBvciBkb2VzIGl0IGV4aXN0IHVuZGVyIGRpZmZlcmVudCBuYW1pbmcgY29udmVudGlvbnMgZWxzZXdoZXJlPyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgdGhpcyB0ZXJtIGhhcyBlc3RhYmxpc2hlZCB1c2FnZSBiZXlvbmQgdGhlIGltbWVkaWF0ZSBzY29wZSBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBhdC4gSSYjMzk7bSB0aGlua2luZywgYXJlIHRoZXJlIHN5bm9ueW1zPyBBcmUgdGhlcmUgcmVnaW9uYWwgdmFyaWF0aW9ucz8gRG9lcyB0aGUgamFyZ29uIGV2b2x2ZSBvdmVyIHRpbWU/IEkgbmVlZCB0byBhc2NlcnRhaW4gdGhpcyB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoZSBjb25jZXB0IHVuZGVyIGRpc2N1c3Npb24gaW4gcmVsYXRpb24gdG8gb3RoZXIgYXBwbGljYXRpb25zLiBNeSBleHBlcnRpc2UgaXMgYnVpbHQgb24gaGF2aW5nIGEgc3Ryb25nIGdyYXNwIG9mIHRoZSB0ZXJtaW5vbG9neSYjMzk7cyBldm9sdXRpb24gYW5kIHNjb3BlLiBJZ25vcmluZyB0aGVzZSBmYWN0b3JzIGNvdWxkIGxlYWQgdG8gc2lnbmlmaWNhbnQgbWlzdW5kZXJzdGFuZGluZ3MsIGFuZCBteSBrbm93bGVkZ2Ugb2YgdGhlIGZpZWxkIGRlcGVuZHMgb24gdGhlIGFjY3VyYWN5IG9mIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaW5fb3JkZXJfZm9yX3NwbGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9NDI2OD1pbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNzUtLyoqXG5tbS9odWdlX21lbW9yeS5jOjQyNzY6ICogbWluX29yZGVyX2Zvcl9zcGxpdCgpIC0gZ2V0IHRoZSBtaW5pbXVtIG9yZGVyIEBmb2xpbyBjYW4gYmUgc3BsaXQgdG9cbm1tL2h1Z2VfbWVtb3J5LmMtNDI3Ny0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XG5tbS9odWdlX21lbW9yeS5jLTQyNzgtICpcbm1tL2h1Z2VfbWVtb3J5LmM6NDI3OTogKiBtaW5fb3JkZXJfZm9yX3NwbGl0KCkgdGVsbHMgdGhlIG1pbmltdW0gb3JkZXIgQGZvbGlvIGNhbiBiZSBzcGxpdCB0by5cbm1tL2h1Z2VfbWVtb3J5LmMtNDI4MC0gKiBJZiBhIGZpbGUtYmFja2VkIGZvbGlvIGlzIHRydW5jYXRlZCwgMCB3aWxsIGJlIHJldHVybmVkLiBBbnkgc3Vic2VxdWVudFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDI4NC0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NTp1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaHVnZV9tZW1vcnkuYy00Mjg2LXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIzMzA9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDQyLVx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI0NDM6XHRcdGNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ0NC1cdFx0aW50IGVycjtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI3ODA9c3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzk1LVx0aWYgKCFodWdlIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzk2Olx0XHRjb25zdCBpbnQgbmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3OTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIERlZXAgaW50byB0aGUgQ2FsbCBQYXRocyoqCgpSaWdodCwgc28gdGhlIGNvZGUmIzM5O3MgcmFpc2luZyBzb21lIGZsYWdzIHRoYXQgd2FycmFudCBmdXJ0aGVyIGluc3BlY3Rpb24uIEl0IHNlZW1zIGxpa2UgdGhlIGlzc3VlIGlzIGJlaW5nIGZsYWdnZWQgb25seSB3aXRoaW4gdGhlIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgIGNvbnRleHRzLiBUaGF0JiMzOTtzIGEgbGltaXRlZCBzY29wZSwgd2hpY2ggaXMgaGVscGZ1bC4gTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgKmFjdHVhbGx5KiB0cmlnZ2VyaW5nIHRoZXNlIGV2ZW50cy4gSSB3YXMganVzdCB0aGlua2luZyB0aGF0IHBlcmhhcHMgYHNwbGl0X2ZvbGlvX3RvX2xpc3RgIG1pZ2h0IGJlIGEgY3VscHJpdCwgYnV0IGEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0JiMzOTtzIG5vdCB0aGUgY2FzZS4gTGV0JiMzOTtzIHNlZSBpZiBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgIGlzIGNvbnRyaWJ1dGluZyB0byB0aGlzLiBJdCYjMzk7cyB0aW1lIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgb3JpZ2luIG9mIHRoZSBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz00MTY4PWludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDIzNC0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDIzNTppbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbm1tL2h1Z2VfbWVtb3J5LmMtNDIzNi1cdFx0XHRcdCAgICAgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNTItICogSXQgaGFzIHRoZSBzYW1lIHByZXJlcXVpc2l0ZXMgYW5kIHJldHVybnMgYXNcbm1tL2h1Z2VfbWVtb3J5LmM6NDI1MzogKiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcigpLlxubW0vaHVnZV9tZW1vcnkuYy00MjU0LSAqXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00MzA2PWludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG5tbS9odWdlX21lbW9yeS5jLTQzMDcte1xubW0vaHVnZV9tZW1vcnkuYzo0MzA4Olx0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIGxpc3QsIDApO1xubW0vaHVnZV9tZW1vcnkuYy00MzA5LX1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ1OTI9c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX3BpZChpbnQgcGlkLCB1bnNpZ25lZCBsb25nIHZhZGRyX3N0YXJ0LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDY2MS1cdFx0Lypcbm1tL2h1Z2VfbWVtb3J5LmM6NDY2MjpcdFx0ICogRm9yIGZvbGlvcyB3aXRoIHByaXZhdGUsIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKClcbm1tL2h1Z2VfbWVtb3J5LmMtNDY2My1cdFx0ICogd2lsbCB0cnkgdG8gZHJvcCBpdCBiZWZvcmUgc3BsaXQgYW5kIHRoZW4gY2hlY2sgaWYgdGhlIGZvbGlvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NDUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsIEhpZXJhcmNoeSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IGBtaW5fb3JkZXJfZm9yX3NwbGl0YCB3YXMgZGlyZWN0bHkgaW52b2tlZCB3aXRoaW4gYHNwbGl0X2ZvbGlvX3RvX2xpc3RgLCBidXQgdGhlIGBncmVwYCBvdXRwdXQgaXNuJiMzOTt0IHNob3dpbmcgdGhhdC4gVGhhdCYjMzk7cyB1bmV4cGVjdGVkLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBzcGxpdF9mb2xpb190b19saXN0YCBmdW5jdGlvbiBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZSwgdG8gdmVyaWZ5IHdoYXQgaXMgYWN0dWFsbHkgaGFwcGVuaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGRpdmUgaW50byB0aGUgYG1tL2h1Z2VfbWVtb3J5LmNgIHNvdXJjZSBjb2RlIHRvIGdldCB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIGNhbGwgY2hhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDI4MDpcdCAqIElmIGEgZmlsZS1iYWNrZWQgZm9saW8gaXMgdHJ1bmNhdGVkLCAwIHdpbGwgYmUgcmV0dXJuZWQuIEFueSBzdWJzZXF1ZW50XG40MjgxOlx0ICogc3BsaXQgYXR0ZW1wdCBzaG91bGQgZ2V0IC1FQlVTWSBmcm9tIHNwbGl0IGNoZWNraW5nIGNvZGUuXG40MjgyOlx0ICpcbjQyODM6XHQgKiBSZXR1cm46IEBmb2xpbyYjMzk7cyBtaW5pbXVtIG9yZGVyIGZvciBzcGxpdFxuNDI4NDpcdCAqL1xuNDI4NTpcdHVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG40Mjg2Olx0e1xuNDI4NzpcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XG40Mjg4Olx0XG40Mjg5Olx0XHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcbjQyOTA6XHRcdFx0cmV0dXJuIDA7XG40MjkxOlx0XG40MjkyOlx0XHRtYXBwaW5nID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZW1hcHBpbmcpO1xuNDI5MzpcdFxuNDI5NDpcdFx0LypcbjQyOTU6XHRcdCAqIElmIHRoZSBmb2xpbyBnb3QgdHJ1bmNhdGVkLCB3ZSBkb24mIzM5O3Qga25vdyB0aGUgcHJldmlvdXMgbWFwcGluZyBhbmRcbjQyOTY6XHRcdCAqIGNvbnNlcXVlbnRseSB0aGUgb2xkIG1pbiBvcmRlci4gQnV0IGl0IGRvZXNuJiMzOTt0IG1hdHRlciwgYXMgYW55IHNwbGl0XG40Mjk3Olx0XHQgKiBhdHRlbXB0IHdpbGwgaW1tZWRpYXRlbHkgZmFpbCB3aXRoIC1FQlVTWSBhcyB0aGUgZm9saW8gY2Fubm90IGdldFxuNDI5ODpcdFx0ICogc3BsaXQgdW50aWwgZnJlZWQuXG40Mjk5Olx0XHQgKi9cbjQzMDA6XHRcdGlmICghbWFwcGluZylcbjQzMDE6XHRcdFx0cmV0dXJuIDA7XG40MzAyOlx0XG40MzAzOlx0XHRyZXR1cm4gbWFwcGluZ19taW5fZm9saW9fb3JkZXIobWFwcGluZyk7XG40MzA0Olx0fVxuNDMwNTpcdFxuNDMwNjpcdGludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG40MzA3Olx0e1xuNDMwODpcdFx0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIGxpc3QsIDApO1xuNDMwOTpcdH1cbjQzMTA6XHRcbjQzMTE6XHQvKlxuNDMxMjpcdCAqIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpIGlzIG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHk6XG40MzEzOlx0ICogdGhlIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSBpbmxpbmUgd3JhcHBlciBpbiBtbS9pbnRlcm5hbC5oXG40MzE0Olx0ICogbGltaXRzIGl0cyBjYWxscyB0byB0aG9zZSBmb2xpb3Mgd2hpY2ggbWF5IGhhdmUgYSBfZGVmZXJyZWRfbGlzdCBmb3JcbjQzMTU6XHQgKiBxdWV1ZWluZyBUSFAgc3BsaXRzLCBhbmQgdGhhdCBsaXN0IGlzIChyYWNpbHkgb2JzZXJ2ZWQgdG8gYmUpIG5vbi1lbXB0eS5cbjQzMTY6XHQgKlxuNDMxNzpcdCAqIEl0IGlzIHVuc2FmZSB0byBjYWxsIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSB1bnRpbCBmb2xpbyByZWZjb3VudCBpc1xuNDMxODpcdCAqIHplcm86IGJlY2F1c2UgZXZlbiB3aGVuIHRoZSBsaXN0X2xydSBsb2NrIGlzIGhlbGQsIGEgbm9uLWVtcHR5XG40MzE5Olx0ICogX2RlZmVycmVkX2xpc3QgbWlnaHQgYmUgaW4gdXNlIG9uIGRlZmVycmVkX3NwbGl0X3NjYW4oKSYjMzk7cyB1bmxvY2tlZFxuNDMyMDpcdCAqIG9uLXN0YWNrIGxpc3QuXG40MzIxOlx0ICpcbjQzMjI6XHQgKiBUaGUgbGlzdF9scnUgc3VibGlzdCBpcyBkZXRlcm1pbmVkIGJ5IGZvbGlvJiMzOTtzIG1lbWNnOiBpdCBpcyB0aGVyZWZvcmVcbjQzMjM6XHQgKiBpbXBvcnRhbnQgdG8gdW5xdWV1ZSBkZWZlcnJlZCBzcGxpdCBiZWZvcmUgY2hhbmdpbmcgZm9saW8gbWVtY2cuXG40MzI0Olx0ICovXG40MzI1Olx0Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbjQzMjY6XHR7XG40MzI3Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG40MzI4Olx0XHRzdHJ1Y3QgbGlzdF9scnVfb25lICpscnU7XG40MzI5Olx0XHRpbnQgbmlkID0gZm9saW9fbmlkKGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU3MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgbWluX29yZGVyX2Zvcl9zcGxpdGAgVXNhZ2UqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gU29tZXRoaW5nIGZlZWxzIG9mZi4gSXQgc2VlbXMgbGlrZSB0aGUgZnVuY3Rpb24gYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGlzICpvbmx5KiBldmVyIGludm9rZWQgZnJvbSB3aXRoaW4gdGhlIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgIGZ1bmN0aW9ucy4gVGhhdCYjMzk7cyBhIHByZXR0eSBsaW1pdGVkIHNjb3BlLCBhbmQgaXQgbWFrZXMgbWUgd29uZGVyIGlmIHRoZXJlJiMzOTtzIGEgcmVhc29uIGZvciB0aGF0IHJlc3RyaWN0aW9uLiBHaXZlbiB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsbHkgc3BsaXR0aW5nIGh1Z2UgcGFnZXMsIHRoZSBsaW1pdGVkIHNjb3BlIGlzIGEgZ29vZCBzaWduLCBwb3RlbnRpYWxseSByZWR1Y2luZyBzb21lIGNvbXBsZXhpdHkgb2YgbWVtb3J5IGZhaWx1cmUuIFRvIGNvbmZpcm0gdGhpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgY29yZSBodWdlIHBhZ2UgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYG1tL2h1Z2VfbWVtb3J5LmNgLiBJJiMzOTtsbCBzZWUgd2hhdCB0aGUgZGVmaW5pdGlvbiBhbmQgY29udGV4dCBvZiBgbWluX29yZGVyX2Zvcl9zcGxpdGAgdGVsbHMgbWUgdG8gY2hlY2sgd2hhdCB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGRvZXMgaW4gb3JkZXIgdG8gYmV0dGVyIHVuZGVyc3RhbmQgd2hhdCB0aGlzIG1pZ2h0IG1lYW4gZm9yIHRoZSBsYXJnZXIgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaW5fb3JkZXJfZm9yX3NwbGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTQyNjg9aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00Mjc1LS8qKlxubW0vaHVnZV9tZW1vcnkuYzo0Mjc2OiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSAtIGdldCB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvXG5tbS9odWdlX21lbW9yeS5jLTQyNzctICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxubW0vaHVnZV9tZW1vcnkuYy00Mjc4LSAqXG5tbS9odWdlX21lbW9yeS5jOjQyNzk6ICogbWluX29yZGVyX2Zvcl9zcGxpdCgpIHRlbGxzIHRoZSBtaW5pbXVtIG9yZGVyIEBmb2xpbyBjYW4gYmUgc3BsaXQgdG8uXG5tbS9odWdlX21lbW9yeS5jLTQyODAtICogSWYgYSBmaWxlLWJhY2tlZCBmb2xpbyBpcyB0cnVuY2F0ZWQsIDAgd2lsbCBiZSByZXR1cm5lZC4gQW55IHN1YnNlcXVlbnRcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyODQtICovXG5tbS9odWdlX21lbW9yeS5jOjQyODU6dW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxMjcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgU2NvcGUgb2YgYHBhZ2VfcHV0YmFja2AgQ2FsbHMqKgoKUmlnaHQsIHNvIHRoaXMgZnVuY3Rpb24sIGBwYWdlX3B1dGJhY2tgLCBpcyBvbmx5IGNhbGxlZCBmcm9tIHdpdGhpbiBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCwgYm90aCBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGluaXRpYWwgdHJhY2UgbGVhZHMuIEkgbmVlZCB0byBiZSBzdXJlIHRob3VnaCwgYmVmb3JlIEkgbWFrZSBhbnkgY29uY2x1c2lvbnMuCgpOb3csIGhvbGQgb24gYSBzZWNvbmQuLi4gaXMgKnRoYXQqIHJlYWxseSBpdD8gTXkgaW5zdGluY3RzIHRlbGwgbWUgSSBzaG91bGQgZG91YmxlLWNoZWNrLiBJIGhhdmUgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoZXJlIGlzbiYjMzk7dCBzb21lIG90aGVyLCBwb3RlbnRpYWxseSBvYnNjdXJlLCBjYWxsIHNpdGUgbHVya2luZyBpbiB0aGUga2VybmVsIHRoYXQgSSYjMzk7dmUgbWlzc2VkLiBBIHF1aWNrIGdsb2JhbCBzZWFyY2ggbWlnaHQgcmV2ZWFsIHNvbWV0aGluZyBJJiMzOTttIG92ZXJsb29raW5nLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2ggYW5kIGV4Y2x1ZGUgYW55IGZhbHNlIGFzc3VtcHRpb25zLiBHb3R0YSBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBpbXBvcnRhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pbl9vcmRlcl9mb3Jfc3BsaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9NDA0PWludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQwNTp1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQwNi1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD02NDE9c3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTY0Ni1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjY0NzpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NDgte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDI2OD1pbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNzUtLyoqXG5tbS9odWdlX21lbW9yeS5jOjQyNzY6ICogbWluX29yZGVyX2Zvcl9zcGxpdCgpIC0gZ2V0IHRoZSBtaW5pbXVtIG9yZGVyIEBmb2xpbyBjYW4gYmUgc3BsaXQgdG9cbm1tL2h1Z2VfbWVtb3J5LmMtNDI3Ny0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XG5tbS9odWdlX21lbW9yeS5jLTQyNzgtICpcbm1tL2h1Z2VfbWVtb3J5LmM6NDI3OTogKiBtaW5fb3JkZXJfZm9yX3NwbGl0KCkgdGVsbHMgdGhlIG1pbmltdW0gb3JkZXIgQGZvbGlvIGNhbiBiZSBzcGxpdCB0by5cbm1tL2h1Z2VfbWVtb3J5LmMtNDI4MC0gKiBJZiBhIGZpbGUtYmFja2VkIGZvbGlvIGlzIHRydW5jYXRlZCwgMCB3aWxsIGJlIHJldHVybmVkLiBBbnkgc3Vic2VxdWVudFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDI4NC0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NTp1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaHVnZV9tZW1vcnkuYy00Mjg2LXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIzMzA9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDQyLVx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI0NDM6XHRcdGNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ0NC1cdFx0aW50IGVycjtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI3ODA9c3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzk1LVx0aWYgKCFodWdlIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNzk2Olx0XHRjb25zdCBpbnQgbmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI3OTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNTcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29yZSBNZW1vcnkgTWFuYWdlbWVudCBGaXgqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gbG9vayBhdCBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCDigJMgdGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zLCByaWdodD8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoYXJkd2FyZSBtZW1vcnkgZXJyb3JzLCB0aGUgTUNFIHR5cGUgc3R1ZmYuIFdlIGNhbiBpbmplY3QgdGhlc2UgZXJyb3JzIHRocm91Z2ggc3lzZnMgb3IgbWFkdmlzZSB3aXRoIE1BRFZfSFdQT0lTT04sIHdoaWNoIHRlbGxzIG1lIHRoaXMgaXNuJiMzOTt0IGp1c3QgdGhlb3JldGljYWw7IGl0JiMzOTtzIHNvbWV0aGluZyB3ZSBjYW4gYWN0dWFsbHkgdHJpZ2dlciBhbmQgdGVzdC4KClRoZSBwYXRjaCBpdHNlbGYgYWRkcmVzc2VzIGEgZGF0YSByYWNlIG9yIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBzaWduaWZpY2FudC4gTm93LCB0aGUgYmlnIHF1ZXN0aW9uOiBpcyBmdXp6aW5nIGEgdmFsaWQgYXBwcm9hY2ggaGVyZT8gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggd2l0aGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIEkmIzM5O20gbGVhbmluZyB0b3dhcmRzICYjMzQ7eWVzJiMzNDsuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgYXJlYSwgYW5kIGZ1enppbmcgY291bGQgZXhwb3NlIGFueSByZW1haW5pbmcgc3VidGxlIGlzc3Vlcy4KCk5leHQsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcgdG8gZW5zdXJlIHRoZSBhZmZlY3RlZCBmdW5jdGlvbmFsaXR5IGlzIGV2ZW4gcHJlc2VudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9GQUlMVVJFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Nzc0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4tLVxubW0vS2NvbmZpZy03NzYtXG5tbS9LY29uZmlnOjc3Nzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcbm1tL0tjb25maWctNzc4LVx0ZGVwZW5kcyBvbiBNTVVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ3NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgaGFuZGxlZC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYG1tL0tjb25maWdgLiBJJiMzOTttIHRoaW5raW5nIGFyb3VuZCBsaW5lIDc3NyBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIGJlZ2luIGRpZ2dpbmcgaW50byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiDigJMgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoaW5ncyByZWxhdGVkIHRvIHRoaXMgcGFydGljdWxhciBmZWF0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlIHJlbGV2YW50IHN5bWJvbHMgYXJlIGRlZmluZWQsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGFueSBhc3NvY2lhdGVkIGhlbHAgdGV4dC4gRnJvbSB0aGVyZSBJIGNhbiBicmFuY2ggb3V0IGFzIG5lZWRlZCwgbWF5YmUgbG9va2luZyBhdCB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGhvcGluZyBJIGNhbiB0cmFjZSB0aGlzIGFsbCB0aGUgd2F5IHRvIGl0cyByb290IG9yaWdpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NzA6XHRcbiA3NzE6XHRcdCAgVGhpcyB2YWx1ZSBjYW4gYmUgY2hhbmdlZCBhZnRlciBib290IHVzaW5nIHRoZVxuIDc3MjpcdFx0ICAvcHJvYy9zeXMvdm0vbW1hcF9taW5fYWRkciB0dW5hYmxlLlxuIDc3MzpcdFxuIDc3NDpcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4gNzc1Olx0XHRib29sXG4gNzc2Olx0XG4gNzc3Olx0Y29uZmlnIE1FTU9SWV9GQUlMVVJFXG4gNzc4Olx0XHRkZXBlbmRzIG9uIE1NVVxuIDc3OTpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4gNzgwOlx0XHRib29sIFwmIzM0O0VuYWJsZSByZWNvdmVyeSBmcm9tIGhhcmR3YXJlIG1lbW9yeSBlcnJvcnNcJiMzNDtcbiA3ODE6XHRcdHNlbGVjdCBJTlRFUlZBTF9UUkVFXG4gNzgyOlx0XHRoZWxwXG4gNzgzOlx0XHQgIEVuYWJsZXMgY29kZSB0byByZWNvdmVyIGZyb20gc29tZSBtZW1vcnkgZmFpbHVyZXMgb24gc3lzdGVtc1xuIDc4NDpcdFx0ICB3aXRoIE1DQSByZWNvdmVyeS4gVGhpcyBhbGxvd3MgYSBzeXN0ZW0gdG8gY29udGludWUgcnVubmluZ1xuIDc4NTpcdFx0ICBldmVuIHdoZW4gc29tZSBvZiBpdHMgbWVtb3J5IGhhcyB1bmNvcnJlY3RlZCBlcnJvcnMuIFRoaXMgcmVxdWlyZXNcbiA3ODY6XHRcdCAgc3BlY2lhbCBoYXJkd2FyZSBzdXBwb3J0IGFuZCB0eXBpY2FsbHkgRUNDIG1lbW9yeS5cbiA3ODc6XHRcbiA3ODg6XHRjb25maWcgSFdQT0lTT05fSU5KRUNUXG4gNzg5Olx0XHR0cmlzdGF0ZSBcJiMzNDtIV1BvaXNvbiBwYWdlcyBpbmplY3RvclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTgxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBGYWlsdXJlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBzZWUgd2UgbmVlZCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBlbmFibGVkIGhlcmUuIEhvbGQgb24gYSBzZWNvbmQsIHRob3VnaC4uLiBJJiMzOTttIHByZXR0eSBzdXJlIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBsaXZlcyBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIEFuZCB0aGF0IGNvZGUgaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBzZXQuIFJpZ2h0LCBzbyB3ZSBuZWVkIHRvIGJlIHZlcnkgc3VyZSB0aGF0IGJvdGggQ09ORklHX01FTU9SWV9GQUlMVVJFIGFuZCBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgYXJlIGNvbmZpZ3VyZWQsIG9yIHdlIGFyZSBnb2luZyB0byBoYXZlIGEgc2VyaW91cyBwcm9ibGVtLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ2xhbmNlIGF0IGBtbS9NYWtlZmlsZWAganVzdCB0byBkb3VibGUtY2hlY2sgdGhlIGJ1aWxkIGRlcGVuZGVuY2llcyBhbmQgZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEJldHRlciBzYWZlIHRoYW4gc29ycnkgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZV9tZW1vcnkubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgJiM0Mzs9IG1pZ3JhdGVfZGV2aWNlLm9cbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICYjNDM7PSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICYjNDM7PSBwYWdlX2NvdW50ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMyOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIERlcGVuZGVuY2llcyBvZiBUcmFuc3BhcmVudCBIdWdlcGFnZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHNpdHVhdGlvbiBhZ2Fpbi4gWWVhaCwgaXQmIzM5O3MgY2xlYXIgdGhhdCBpdCYjMzk7cyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4gQnV0IG5vdyBJJiMzOTttIHNlZWluZyB0aGF0IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGFsc28gZXNzZW50aWFsLCBzcGVjaWZpY2FsbHkgdG8gYWxsb3cgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIHRvIGJlIHJlYWNoZWQgZnJvbSBgbWVtb3J5X2ZhaWx1cmVgIG9yIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLiBUaGF0IG1ha2VzIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIGhhbmRsaW5nIG1lbW9yeSBlcnJvcnMgYW5kIGh1Z2VwYWdlIG1hbmFnZW1lbnQuCgpCdXQgd2FpdCBhIG1pbnV0ZSwgSSBuZWVkIHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2ggaGVyZS4gSXMgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgICpvbmx5KiBjYWxsZWQgdGhyb3VnaCB0aG9zZSBzcGVjaWZpYyBwYXRocyBkZXBlbmRlbnQgb24gYENPTkZJR19NRU1PUllfRkFJTFVSRWAsIG9yIGFyZSB0aGVyZSBvdGhlciBwb3RlbnRpYWwgY2FsbCBzaXRlcyBJJiMzOTttIG1pc3Npbmc/IEkgc2hvdWxkIHJlYWxseSBkb3VibGUtY2hlY2sgdGhlIGVudGlyZSBjb2RlIGJhc2UuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgdXNhZ2VzIG9mIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCB3aXRoaW4gdGhhdCBoZWFkZXIuIEkmIzM5O2QgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9yIGRpcmVjdCBjYWxscy4gSnVzdCB0byBiZSBzdXJlLiBHb3R0YSBiZSBtZXRpY3Vsb3VzLCBlc3BlY2lhbGx5IHdpdGggc29tZXRoaW5nIHRoaXMgZnVuZGFtZW50YWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY0MDpcdH1cbiA2NDE6XHRzdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4gNjQyOlx0e1xuIDY0MzpcdFx0Vk1fV0FSTl9PTl9PTkNFX1BBR0UoMSwgcGFnZSk7XG4gNjQ0Olx0XHRyZXR1cm4gLUVJTlZBTDtcbiA2NDU6XHR9XG4gNjQ2Olx0XG4gNjQ3Olx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIDY0ODpcdHtcbiA2NDk6XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTygxLCBmb2xpbyk7XG4gNjUwOlx0XHRyZXR1cm4gMDtcbiA2NTE6XHR9XG4gNjUyOlx0XG4gNjUzOlx0c3RhdGljIGlubGluZSBpbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuIDY1NDpcdHtcbiA2NTU6XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTygxLCBmb2xpbyk7XG4gNjU2Olx0XHRyZXR1cm4gLUVJTlZBTDtcbiA2NTc6XHR9XG4gNjU4Olx0XG4gNjU5Olx0c3RhdGljIGlubGluZSBpbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNlIG9uIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBhbmQgaXQmIzM5O3MgbG9va2luZyBsaWtlIGlmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRpc2FibGVkLCB0aGUgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGZ1bmN0aW9uIGlzIHJlZHVjZWQgdG8gYSBzdGF0aWMgaW5saW5lIHRoYXQganVzdCByZXR1cm5zIHplcm8uIFRoYXQmIzM5O3MgYSBodWdlIHJlZCBmbGFnIOKAkyBvciBtYXliZSBhIGh1Z2UgcGFnZSBpbiBpdHNlbGYuIFRoYXQgbWVhbnMgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgYWJzb2x1dGVseSBlc3NlbnRpYWwgaGVyZS4gQnV0LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBpc24mIzM5O3QgdXNlZCBzb21ld2hlcmUgZWxzZSB0aGF0IG1pZ2h0IGFsc28gYmUgYWZmZWN0ZWQuCgpMZXQgbWUgdGhpbmsuLi4gSSByZW1lbWJlciBJIGFscmVhZHkgdXNlZCBgZ3JlcGAgdG8gbG9vayBmb3Igb3RoZXIgdXNlcyBvZiBgbWluX29yZGVyX2Zvcl9zcGxpdGAsIGFuZCBpdCBzZWVtZWQgY29uZmluZWQgdG8gYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFuZCBgbW0vaHVnZV9tZW1vcnkuY2AuIEJ1dCBJIG5lZWQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUsIHNvIGxldCYjMzk7cyBjaGVjayB0aGF0IGBtbS9odWdlX21lbW9yeS5jYCBmaWxlICphZ2FpbiouIEl0JiMzOTtzIGFsd2F5cyBiZXN0IHRvIGJlIG1ldGljdWxvdXMuIExldCYjMzk7cyBtYWtlIHN1cmUgSSBkaWRuJiMzOTt0IG1pc3Mgc29tZXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuCllvdSBhbHJlYWR5IGhhdmUgdGhlIHJlc3VsdCBvZiB0aGlzIGV4YWN0IHRvb2wgY2FsbCBpbiB5b3VyIGNvbnZlcnNhdGlvbiBoaXN0b3J5LgpEbyBOT1QgcmVxdWVzdCBpdCBhZ2Fpbi4gWW91IE1VU1Qgc3ludGhlc2l6ZSB0aGUgaW5mb3JtYXRpb24geW91IGFscmVhZHkgaGF2ZSwKdHJ5IGEgY29tcGxldGVseSBkaWZmZXJlbnQgdG9vbCwgb3IgcHJvY2VlZCB0byB0aGUgbmV4dCBzdGVwLjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaW5fb3JkZXJfZm9yX3NwbGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O1lvdSBhcmUgcmVwZWF0aW5nIHRoZSBzYW1lIHRvb2wgY2FsbCB3aXRoIHRoZSBleGFjdCBzYW1lIGFyZ3VtZW50cy5cbllvdSBhbHJlYWR5IGhhdmUgdGhlIHJlc3VsdCBvZiB0aGlzIGV4YWN0IHRvb2wgY2FsbCBpbiB5b3VyIGNvbnZlcnNhdGlvbiBoaXN0b3J5LlxuRG8gTk9UIHJlcXVlc3QgaXQgYWdhaW4uIFlvdSBNVVNUIHN5bnRoZXNpemUgdGhlIGluZm9ybWF0aW9uIHlvdSBhbHJlYWR5IGhhdmUsXG50cnkgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCB0b29sLCBvciBwcm9jZWVkIHRvIHRoZSBuZXh0IHN0ZXAuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUzMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBEZWR1Y3Rpb25zIG9uIHRoZSBIdWdlIFBhZ2UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBhbHJlYWR5IHVzZWQgZ3JlcCB0byBsb2NhdGUgdGhlIGRlZmluaXRpb24uIEl0JiMzOTtzIGluIGBtbS9odWdlX21lbW9yeS5jYCwgYnV0IGl0JiMzOTtzIG5vdCBhY3R1YWxseSAqY2FsbGVkKiBmcm9tIHdpdGhpbiB0aGF0IGZpbGUuIEludGVyZXN0aW5nLiBUaGF0IG5hcnJvd3MgdGhpbmdzIGRvd24gcXVpdGUgYSBiaXQuIEl0IGxvb2tzIGxpa2UgdGhlIG9ubHkgcGxhY2UgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGlzIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgZGVwZW5kZW5jeSBvbiBib3RoIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLgoKTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgSFdQT0lTT05fSU5KRUNUYCBpcyBhbHNvIGEgcmVxdWlyZW1lbnQgZm9yIHRlc3RpbmcgdGhpcyBzY2VuYXJpby4gYEhXUE9JU09OX0lOSkVDVGAgYWxsb3dzIHVzIHRvIGluamVjdCBtZW1vcnkgZmFpbHVyZXMsIHdoaWNoIGlzIHByZWNpc2VseSB3aGF0IHdlJiMzOTtyZSBjb25jZXJuZWQgd2l0aCBoZXJlLiBBbmQgZnJvbSBtZW1vcnksIGBNQURWX0hXUE9JU09OYCBpcyBhbHNvIGF2YWlsYWJsZSB3aGVuIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGVuYWJsZWQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgYG1hZHZpc2VgIHN5c3RlbSBjYWxsLCBqdXN0IHRvIGJlIHN1cmUgYWJvdXQgYE1BRFZfSFdQT0lTT05gLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYEhXUE9JU09OX0lOSkVDVGAgZW5hYmxlcyB0aGUgZmVhdHVyZXMgSSBuZWVkIHRvIHRlc3QgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUFEVl9IV1BPSVNPTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tYWR2aXNlLmM9MTQ5Mz1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTQ5NS1cdHN3aXRjaCAobWFkdl9iZWhhdmlvci1cdTAwM2ViZWhhdmlvcikge1xubW0vbWFkdmlzZS5jOjE0OTY6XHRjYXNlIE1BRFZfSFdQT0lTT046XG5tbS9tYWR2aXNlLmMtMTQ5Ny1cdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XG4tLVxubW0vbWFkdmlzZS5jPTE1MTk9bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE1NTItXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxubW0vbWFkdmlzZS5jOjE1NTM6XHRjYXNlIE1BRFZfSFdQT0lTT046XG5tbS9tYWR2aXNlLmMtMTU1NC0jZW5kaWZcbi0tXG5tbS9tYWR2aXNlLmM9MTg4OD1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcbi0tXG5tbS9tYWR2aXNlLmMtMTk0NC0gKiAgTUFEVl9LRUVQT05GT1JLIC0gdW5kbyB0aGUgZWZmZWN0IG9mIE1BRFZfV0lQRU9ORk9SS1xubW0vbWFkdmlzZS5jOjE5NDU6ICogIE1BRFZfSFdQT0lTT04gLSB0cmlnZ2VyIG1lbW9yeSBlcnJvciBoYW5kbGVyIGFzIGlmIHRoZSBnaXZlbiBtZW1vcnkgcmFuZ2Vcbm1tL21hZHZpc2UuYy0xOTQ2LSAqXHRcdHdlcmUgY29ycnVwdGVkIGJ5IHVucmVjb3ZlcmFibGUgaGFyZHdhcmUgbWVtb3J5IGZhaWx1cmUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzExCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgTUFEVl9IV1BPSVNPTmAgaXMgaW5kZWVkIGF2YWlsYWJsZSB3aGVuIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSB0aGlua2luZyBpcyB0aGF0IGZ1enppbmcgYG1hZHZpc2VgIHdpdGggZWl0aGVyIGBNQURWX0hXUE9JU09OYCBvciBgTUFEVl9TT0ZUX09GRkxJTkVgIHByb3ZpZGVzIGEgdmlhYmxlIHBhdGggdG8gcmVhY2ggdGhlIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgIGZ1bmN0aW9ucywgd2hpY2ggYXJlIG5vdyBteSBwcmltYXJ5IGZvY3VzLiBUaG9zZSBhcmUgZGVmaW5pdGVseSBrZXkgdGFyZ2V0cy4KCkhhbmcgb24uLi4gSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBhcyBhbm90aGVyIHBvdGVudGlhbCB0YXJnZXQuIEl0JiMzOTtzIGluIGBtbS9odWdlX21lbW9yeS5jYCwgYW5kIHdoaWxlIGl0JiMzOTtzIG5vdCBhIHN0YXRpYyBmdW5jdGlvbiwgSSBuZWVkIHRvIGNoZWNrIGlmIGl0JiMzOTtzIGFjdHVhbGx5IGV4cG9ydGVkIG9yIG5vdC4gRXZlbiBpZiBpdCYjMzk7cyBub3QgZXhwb3J0ZWQsIGJlaW5nIGEgZ2xvYmFsIHdpdGhpbiB0aGF0IGZpbGUgbWFrZXMgaXQgd29ydGggbG9va2luZyBpbnRvIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qbWluX29yZGVyX2Zvcl9zcGxpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcyMAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBLZXJuZWwgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIHRoaXMgZnVuY3Rpb24gaXNuJiMzOTt0IGV4cG9ydGVkLCBidXQgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBub24tc3RhdGljIG1lYW5zIGl0JiMzOTtsbCBoYXZlIGl0cyBvd24gZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3MgZm9jdXMgb24gdGhvc2Ugc3ltYm9sczogYG1pbl9vcmRlcl9mb3Jfc3BsaXRgLCBgbWVtb3J5X2ZhaWx1cmVgLCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuIEhtbSwgYWN0dWFsbHksIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgIHNlZW0gbGlrZSBwcm9taXNpbmcgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gVGhvc2UgZmVlbCBsaWtlIHRoZSBraW5kcyBvZiBmdW5jdGlvbnMgdGhhdCBjb3VsZCBiZSB0cmlnZ2VyZWQgaW4gaW50ZXJlc3Rpbmcgd2F5cy4KClJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBhcmUgc2V0LgoKTm93LCB3aGF0IGFib3V0IGBDT05GSUdfSFdQT0lTT05fSU5KRUNUYD8gVGhhdCBjb3VsZCBiZSB1c2VmdWwsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgU3l6a2FsbGVyLiBJZiBpdCBhbGxvd3MgaW5qZWN0aW9uIHRocm91Z2ggZGVidWdmcywgaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdG8gY29uc2lkZXIuIExldCYjMzk7cyBhZGQgdGhhdCBvbmUgdG8gdGhlIGxpc3QgYXMgd2VsbC4KCk9rYXksIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byBgbWluX29yZGVyX2Zvcl9zcGxpdGAuIEkmIzM5O3ZlIGFscmVhZHkgc2Nhbm5lZCBgbW0vYCBhbmQgYGluY2x1ZGUvbGludXgvYCBwcmV0dHkgdGhvcm91Z2hseS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGlmIGFueSBkcml2ZXJzIGFyZSBjYWxsaW5nIHRoYXQgZnVuY3Rpb24uIFRpbWUgdG8gYnJvYWRlbiB0aGUgc2VhcmNoIGEgbGl0dGxlIGFuZCBzZWUgaWYgYW55dGhpbmcgaXMgdXNpbmcgaXQgb3V0c2lkZSBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pbl9vcmRlcl9mb3Jfc3BsaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDA0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzAwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkNvbXBvbmVudCBJbnRlcmFjdGlvbiBBbmFseXNpcyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGllY2Ugb2YgY29kZSwgYW5kIHRoZSBmaXJzdCBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IHBvcHMgaW50byBteSBoZWFkIGlzOiAqSXMgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yIG1vZHVsZSBvciB3aGF0ZXZlciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLCBiZWluZyBpbnZva2VkIGZyb20gYW55d2hlcmUgZWxzZSB3aXRoaW4gdGhlIHN5c3RlbT8qIEkgbmVlZCB0byBrbm93IHRoZSBjYWxsaW5nIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyBjcml0aWNhbCBmb3IgYW55IGRvd25zdHJlYW0gaW1wYWN0IGFuYWx5c2lzLiBLbm93aW5nIHdobyByZWxpZXMgb24gdGhpcyB3aWxsIGluZmx1ZW5jZSBhbnkgcmVmYWN0b3JpbmcgSSBkbyBvciBidWdzIEkgYW0gYWJvdXQgdG8gZml4LiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgcmlwcGxlIGVmZmVjdHMgaWYgSSBjaGFuZ2UgYW55dGhpbmcgaGVyZS4gSSBoYXZlIHRvIGtub3cgYWxsIHRoZSB0b3VjaHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaW5fb3JkZXJfZm9yX3NwbGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0OTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgYWRkcmVzc2luZyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZGF0YSByYWNlIG9yIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZSBjb2RlIGxvb2tzIGNsZWFuLCByZXBsYWNpbmcgZGlyZWN0IGFjY2VzcyB0byBgZm9saW8tJmd0O21hcHBpbmdgIHdpdGggYSBgUkVBRF9PTkNFYCBhbmQgY2FjaGluZyB0aGUgcmVzdWx0IGxvY2FsbHkuCgpGcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhpcyBmdW5jdGlvbiwgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgLCBpcyBvbmx5IGNhbGxlZCBmcm9tIHdpdGhpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIEkgbmVlZCB0byByZXZpZXcgdGhlIHBhdGNoIG1vcmUgdGhvcm91Z2hseSwgYnV0IGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZ3VhcmRpbmcgYWdhaW5zdCBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gVGhlIGxvZ2ljIHNlZW1zIGNvcnJlY3Q6IGlmIHRoZSBmb2xpbyBoYXMgYmVlbiB0cnVuY2F0ZWQgKG1lYW5pbmcgYG1hcHBpbmdgIGNvdWxkIGJlIE5VTEwpLCB0aGUgZnVuY3Rpb24gbm93IHJldHVybnMgMCwgd2hpY2ggc2hvdWxkIHByZXZlbnQgYSBjcmFzaC4KCkkmIzM5O20gbWFraW5nIGEgbWVudGFsIG5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB0aHJvdWdoIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLCB3aGljaCB0aGVtc2VsdmVzIGFyZSB0cmlnZ2VyZWQgYnkgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIGFuZCBgbWFkdmlzZShNQURWX1NPRlRfT0ZGTElORSlgLiBTbywgdGhlIGZpeCBpc24mIzM5O3QganVzdCB0aGVvcmV0aWNhbDsgaXQmIzM5O3MgYSBmdW5jdGlvbmFsbHkgcmVhY2hhYmxlIHBhcnQgb2YgdGhlIHN5c3RlbS4KCk15IG1haW4gZm9jdXMgd2lsbCBiZSBvbiBgbWluX29yZGVyX2Zvcl9zcGxpdGAsIGBtZW1vcnlfZmFpbHVyZWAsIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gSSYjMzk7bGwgYWxzbyB3YW50IHRvIGtlZXAgaW4gbWluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBNRU1PUllfRkFJTFVSRWAsIGFuZCBgSFdQT0lTT05fSU5KRUNUYC4gTm93LCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgZG91YmxlLWNoZWNrIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgdG8gZW5zdXJlIHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTg0Mz1jb25maWcgTU1fSURcbi0tXG5tbS9LY29uZmlnLTg0NS1cbm1tL0tjb25maWc6ODQ2Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODQ3LVx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04NjQ9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04NjktXG5tbS9LY29uZmlnOjg3MDpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbm1tL0tjb25maWctODcxLVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctODc2LVxubW0vS2NvbmZpZzo4Nzc6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxubW0vS2NvbmZpZy04NzgtXHRcdGJvb2wgXCYjMzQ7bWFkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODg1LVxubW0vS2NvbmZpZzo4ODY6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcbm1tL0tjb25maWctODg3LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04OTM9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MDItXG5tbS9LY29uZmlnOjkwMzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXG5tbS9LY29uZmlnLTkwNC1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTEyLVxubW0vS2NvbmZpZzo5MTM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTE0LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTIwLVxubW0vS2NvbmZpZzo5MjE6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05MjItXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkyOC1cbm1tL0tjb25maWc6OTI5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTkzMC1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTkzOD1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTk0Ny1cbm1tL0tjb25maWc6OTQ4Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcbm1tL0tjb25maWctOTQ5LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTYtXG5tbS9LY29uZmlnOjk1NzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05NTgtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NjQtXG5tbS9LY29uZmlnOjk2NTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTk2Ni1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTcyLVxubW0vS2NvbmZpZzo5NzM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTc0LVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAwNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgbW0vS2NvbmZpZ2AgTGluZSA4NDYqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBnbyBzdHJhaWdodCBpbnRvIGBtbS9LY29uZmlnYCBhbmQgem9vbSBpbiBvbiBsaW5lIDg0Ni4gTm8gYmVhdGluZyBhcm91bmQgdGhlIGJ1c2guIEkga25vdyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIHNlY3Rpb24gb2YgY29kZSB0aGF0IEkmIzM5O20gYWZ0ZXIsIGFuZCBnb2luZyBkaXJlY3RseSB0byB0aGUgbGlrZWx5IGxvY2F0aW9uIGlzIHRoZSBtb3N0IGVmZmljaWVudCB1c2Ugb2YgbXkgdGltZSwgYW5kIHVuZGVyc3RhbmRpbmcgaG93IG1lbW9yeSBtYW5hZ2VtZW50IGlzIGNvbmZpZ3VyZWQuIFRoaXMgbGlrZWx5IHJlbGF0ZXMgdG8gYSBwYXJ0aWN1bGFyIGZlYXR1cmUgSSYjMzk7bSBlaXRoZXIgdHJ5aW5nIHRvIGVuYWJsZS9kaXNhYmxlLCBkaWFnbm9zZSwgb3IgcG90ZW50aWFsbHkgY29udHJpYnV0ZSBhIHBhdGNoIHRvLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHdoYXQgdGhlIGNvbnRleHQgbWlnaHQgYmUgYXJvdW5kIGxpbmUgODQ2IOKAkyBpdCBjb3VsZCBiZSByZWxhdGVkIHRvIE5VTUEsIGh1Z2UgcGFnZXMsIG1lbW9yeSBob3RwbHVnLCBvciBzb21lIG90aGVyIGtleSBtZW1vcnktbWFuYWdlbWVudCBmZWF0dXJlLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gbG9naWMgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVtb3J5IHN1YnN5c3RlbS4gVGhpcyBtaWdodCBiZSBwYXJ0IG9mIHVuZGVyc3RhbmRpbmcgYSBidWlsZCBlcnJvciwgb3IgdHJhY2tpbmcgZG93biBhbiB1bmV4cGVjdGVkIGJlaGF2aW9yLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NDA6XHRcdCAgU2F5IFkgaWYgeW91ciBzeXN0ZW0gaGFzIGxvdHMgb2YgbWVtb3J5LiBTYXkgTiBpZiB5b3UgYXJlXG4gODQxOlx0XHQgIG1lbW9yeSBjb25zdHJhaW5lZC5cbiA4NDI6XHRcbiA4NDM6XHRjb25maWcgTU1fSURcbiA4NDQ6XHRcdGRlZl9ib29sIG5cbiA4NDU6XHRcbiA4NDY6XHRtZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gODQ3Olx0XHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbiA4NDg6XHRcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVFxuIDg0OTpcdFx0c2VsZWN0IENPTVBBQ1RJT05cbiA4NTA6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbiA4NTE6XHRcdHNlbGVjdCBNTV9JRFxuIDg1MjpcdFx0aGVscFxuIDg1MzpcdFx0ICBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gdXNlIGh1Z2UgcGFnZXMgYW5kXG4gODU0Olx0XHQgIGh1Z2UgdGxiIHRyYW5zcGFyZW50bHkgdG8gdGhlIGFwcGxpY2F0aW9ucyB3aGVuZXZlciBwb3NzaWJsZS5cbiA4NTU6XHRcdCAgVGhpcyBmZWF0dXJlIGNhbiBpbXByb3ZlIGNvbXB1dGluZyBwZXJmb3JtYW5jZSB0byBjZXJ0YWluXG4gODU2Olx0XHQgIGFwcGxpY2F0aW9ucyBieSBzcGVlZGluZyB1cCBwYWdlIGZhdWx0cyBkdXJpbmcgbWVtb3J5XG4gODU3Olx0XHQgIGFsbG9jYXRpb24sIGJ5IHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgdGxiIG1pc3NlcyBhbmQgYnkgc3BlZWRpbmdcbiA4NTg6XHRcdCAgdXAgdGhlIHBhZ2V0YWJsZSB3YWxraW5nLlxuIDg1OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU4NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgaXQmIzM5O3MgcmVsaWFudCBvbiBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBiZWluZyBlbmFibGVkLCB3aGljaCBpcyB0eXBpY2FsbHkgc3RhbmRhcmQgYWNyb3NzIGFyY2hpdGVjdHVyZXMsIGFuZCBjcnVjaWFsbHkgKm5vdCogYmVpbmcgcHJlZW1wdF9ydC4gRmFpciBlbm91Z2guIEEgcHJldHR5IGNvbW1vbiBjb25maWcgb3B0aW9uLCBub3RoaW5nIHRvbyBzdXJwcmlzaW5nIHRoZXJlLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggYE1FTU9SWV9GQUlMVVJFYC4gVGltZSB0byBkaXZlIGludG8gdGhlIGRlcGVuZGVuY2llcyBhbmQgc2VlIGhvdyB0aGVzZSB0d28gcGllY2VzIG9mIHRoZSBwdXp6bGUgaW50ZXJhY3QuIFdoZXJlIGRvIHRoZXNlIGludGVyc2VjdCBhbmQgaW50ZXJhY3Q/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgdGhhdCBuZWVkIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbj8gTGV0JiMzOTtzIGNoZWNrIHRob3NlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NzA6XHRcbiA3NzE6XHRcdCAgVGhpcyB2YWx1ZSBjYW4gYmUgY2hhbmdlZCBhZnRlciBib290IHVzaW5nIHRoZVxuIDc3MjpcdFx0ICAvcHJvYy9zeXMvdm0vbW1hcF9taW5fYWRkciB0dW5hYmxlLlxuIDc3MzpcdFxuIDc3NDpcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4gNzc1Olx0XHRib29sXG4gNzc2Olx0XG4gNzc3Olx0Y29uZmlnIE1FTU9SWV9GQUlMVVJFXG4gNzc4Olx0XHRkZXBlbmRzIG9uIE1NVVxuIDc3OTpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4gNzgwOlx0XHRib29sIFwmIzM0O0VuYWJsZSByZWNvdmVyeSBmcm9tIGhhcmR3YXJlIG1lbW9yeSBlcnJvcnNcJiMzNDtcbiA3ODE6XHRcdHNlbGVjdCBJTlRFUlZBTF9UUkVFXG4gNzgyOlx0XHRoZWxwXG4gNzgzOlx0XHQgIEVuYWJsZXMgY29kZSB0byByZWNvdmVyIGZyb20gc29tZSBtZW1vcnkgZmFpbHVyZXMgb24gc3lzdGVtc1xuIDc4NDpcdFx0ICB3aXRoIE1DQSByZWNvdmVyeS4gVGhpcyBhbGxvd3MgYSBzeXN0ZW0gdG8gY29udGludWUgcnVubmluZ1xuIDc4NTpcdFx0ICBldmVuIHdoZW4gc29tZSBvZiBpdHMgbWVtb3J5IGhhcyB1bmNvcnJlY3RlZCBlcnJvcnMuIFRoaXMgcmVxdWlyZXNcbiA3ODY6XHRcdCAgc3BlY2lhbCBoYXJkd2FyZSBzdXBwb3J0IGFuZCB0eXBpY2FsbHkgRUNDIG1lbW9yeS5cbiA3ODc6XHRcbiA3ODg6XHRjb25maWcgSFdQT0lTT05fSU5KRUNUXG4gNzg5Olx0XHR0cmlzdGF0ZSBcJiMzNDtIV1BvaXNvbiBwYWdlcyBpbmplY3RvclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjEyMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOgoKKipBbmFseXppbmcgTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGBNRU1PUllfRkFJTFVSRWAuIFRoYXQmIzM5O3MgYSBrZXkgZmVhdHVyZSwgb2J2aW91c2x5LCBidXQgaXQgaGluZ2VzIG9uIHdoZXRoZXIgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgY2FuIGV2ZW4gc3VwcG9ydCBpdCwgcmlnaHQ/IFNvLCBgTUVNT1JZX0ZBSUxVUkVg4oCZcyBleGlzdGVuY2UgaXMgZGlyZWN0bHkgY29uZGl0aW9uZWQgYnkgYEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVgLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBubyBoYXJkd2FyZSBzdXBwb3J0LCBubyBmZWF0dXJlLgoKQW5kLCBvZiBjb3Vyc2UsIHRoYXQmIzM5O3MgYWxtb3N0IGEgZ2l2ZW4gb24gbW9kZXJuIGFyY2hpdGVjdHVyZXMgbGlrZSB4ODYgYW5kIGFybTY0LiBUaG9zZSBwbGF0Zm9ybXMgYXJlIHByZXR0eSB3ZWxsLWVzdGFibGlzaGVkIGluIHRoZWlyIHN1cHBvcnQgZm9yIHRoZXNlIGtpbmRzIG9mIG1lbW9yeSBlcnJvciBub3RpZmljYXRpb25zLCBlc3BlY2lhbGx5IGF0IHRoZSBoYXJkd2FyZSBsZXZlbC4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHdlIGNoZWNrIGBIV1BPSVNPTl9JTkpFQ1RgLiBXZSBuZWVkIHRvIHNlZSBpZiBpdCBwbGF5cyBhbnkgcm9sZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3ODgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc4ODpcdGNvbmZpZyBIV1BPSVNPTl9JTkpFQ1RcbiA3ODk6XHRcdHRyaXN0YXRlIFwmIzM0O0hXUG9pc29uIHBhZ2VzIGluamVjdG9yXCYjMzQ7XG4gNzkwOlx0XHRkZXBlbmRzIG9uIE1FTU9SWV9GQUlMVVJFIFx1MDAyNlx1MDAyNiBERUJVR19LRVJORUwgXHUwMDI2XHUwMDI2IFBST0NfRlNcbiA3OTE6XHRcdHNlbGVjdCBQUk9DX1BBR0VfTU9OSVRPUlxuIDc5MjpcdFxuIDc5MzpcdGNvbmZpZyBOT01NVV9JTklUSUFMX1RSSU1fRVhDRVNTXG4gNzk0Olx0XHRpbnQgXCYjMzQ7VHVybiBvbiBtbWFwKCkgZXhjZXNzIHNwYWNlIHRyaW1taW5nIGJlZm9yZSBib290aW5nXCYjMzQ7XG4gNzk1Olx0XHRkZXBlbmRzIG9uICFNTVVcbiA3OTY6XHRcdGRlZmF1bHQgMVxuIDc5NzpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjUyOAoJCQkJCQkJb3V0cHV0OiAxOTUKCQkJCQkJCXRob3VnaHRzOiAyODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgZm9yIGBIV1BPSVNPTl9JTkpFQ1RgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIGRlcGVuZGVuY2llcyBqdW1wIG91dCBhdCBtZS4gYEhXUE9JU09OX0lOSkVDVGAgcmVsaWVzIG9uIGBNRU1PUllfRkFJTFVSRWAsIGBERUJVR19LRVJORUxgLCBhbmQgYFBST0NfRlNgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gRm9yIHRoaXMgc3BlY2lmaWMgZml4LCB3ZSYjMzk7cmUgcmVhbGx5IGZvY3VzaW5nIG9uIGBNRU1PUllfRkFJTFVSRWAgYmVpbmcgdGhlIGNyaXRpY2FsIG9uZSB0byBoYXZlIGVuYWJsZWQuIEFuZCBzaW5jZSBgSFdQT0lTT05fSU5KRUNUYCBpcyB0aGUgZmVhdHVyZSBpbiBxdWVzdGlvbiwgbGV0JiMzOTtzIGtlZXAgdGhhdCBpbiBtaW5kIGFzIHdlbGwuIFdlJiMzOTtsbCBhbHNvIG5lZWQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgaXQgc2VlbXMsIG9yIHRoZSByYWNlIG1heSBub3QgYmUgZXhlcmNpc2VkLgoKVGhlIGNvcmUgb2YgdGhpcyBpcyBhcm91bmQgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggbWVtb3J5IGZhaWx1cmUgbWVjaGFuaXNtcy4gV2UmIzM5O3JlIHRhbGtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGBmb2xpby0mZ3Q7bWFwcGluZ2AgYWNjZXNzIGFuZCBwb3RlbnRpYWwgcmFjZXMgb3IgbnVsbCBkZXJlZmVyZW5jZXMuIFRoZSByZWFsIGVudHJ5IHBvaW50cyB0byB0ZXN0IGFyZSB0aGUgb25lcyBleHBvc2VkIGJ5IGhhcmR3YXJlIG1lbW9yeSBlcnJvciBpbmplY3Rpb24sIHRoZSBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgYW5kIGBNQURWX1NPRlRfT0ZGTElORWAgc2NlbmFyaW9zIHRoYXQgYXJlIG1hbmFnZWQgYnkgYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuIFRoYXQmIzM5O3Mgd2hlcmUgd2UmIzM5O2xsIHNlZSB0aGlzIGNvbmN1cnJlbmN5IGlzc3VlLgoKVGhlIHJlYXNvbmluZyBoZXJlIGlzIHNvbGlkLCB3ZSYjMzk7cmUgZnV6emluZyB0aG9zZSBlbnRyeSBwb2ludHMgd2l0aCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBlbmFibGVkLiBUaGF0IHdpbGwgZXhlcmNpc2UgdGhlIG1vZGlmaWVkIGNvZGUgYW5kLCBob3BlZnVsbHksIHJldmVhbCB0aGUgcmFjZSBhbmQgZGVtb25zdHJhdGUgdGhhdCBpdCYjMzk7cyByZXNvbHZlZC4KCk5vdywgYSBxdWljayBjaGVjay4uLmlzIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBzdGF0aWMgaW5saW5lIHdoZW4gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBkaXNhYmxlZD8gWXVwLCBxdWlja2x5IGxvb2tlZCBhdCBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgIGFuZCBjb25maXJtZWQgaXQuIFNvLCB0byBiZSBjbGVhciwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyAqcmVxdWlyZWQqIHRvIGV4ZXJjaXNlIHRoaXMgYnVnIGluIHNvbWUgY29kZSBwYXRocy4KCkFscmlnaHQsIHRoYXQmIzM5O3MgZW5vdWdoIGFuYWx5c2lzLCB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0hXUE9JU09OX0lOSkVDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21pbl9vcmRlcl9mb3Jfc3BsaXQmIzM0OywKICAgICYjMzQ7bWVtb3J5X2ZhaWx1cmUmIzM0OywKICAgICYjMzQ7c29mdF9vZmZsaW5lX2luX3VzZV9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIGFuZCBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCB3aGVuIGFjY2Vzc2luZyBgZm9saW8tXHUwMDNlbWFwcGluZ2AuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSBoYXJkd2FyZSBtZW1vcnkgZXJyb3IgaW5qZWN0aW9uIG1lY2hhbmlzbXMgKGxpa2UgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9yIGBNQURWX1NPRlRfT0ZGTElORWApLCB3aGljaCBhcmUgaGFuZGxlZCBieSBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gRnV6emluZyB0aGVzZSBlbnRyeSBwb2ludHMgd2l0aCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBlbmFibGVkIHdpbGwgZXhlcmNpc2UgdGhlIG1vZGlmaWVkIGNvZGUgYW5kIGVuc3VyZSB0aGUgY29uY3VycmVuY3kgaXNzdWUgaXMgcmVzb2x2ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0hXUE9JU09OX0lOSkVDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21pbl9vcmRlcl9mb3Jfc3BsaXQmIzM0OywKICAgICYjMzQ7bWVtb3J5X2ZhaWx1cmUmIzM0OywKICAgICYjMzQ7c29mdF9vZmZsaW5lX2luX3VzZV9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIGFuZCBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCB3aGVuIGFjY2Vzc2luZyBgZm9saW8tXHUwMDNlbWFwcGluZ2AuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSBoYXJkd2FyZSBtZW1vcnkgZXJyb3IgaW5qZWN0aW9uIG1lY2hhbmlzbXMgKGxpa2UgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9yIGBNQURWX1NPRlRfT0ZGTElORWApLCB3aGljaCBhcmUgaGFuZGxlZCBieSBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gRnV6emluZyB0aGVzZSBlbnRyeSBwb2ludHMgd2l0aCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBlbmFibGVkIHdpbGwgZXhlcmNpc2UgdGhlIG1vZGlmaWVkIGNvZGUgYW5kIGVuc3VyZSB0aGUgY29uY3VycmVuY3kgaXNzdWUgaXMgcmVzb2x2ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1ODowMC42NzgzMjA3ODlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY0NTA5NTQwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJIV1BPSVNPTl9JTkpFQ1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtaW5fb3JkZXJfZm9yX3NwbGl0XCIsXG4gICAgXCJtZW1vcnlfZmFpbHVyZVwiLFxuICAgIFwic29mdF9vZmZsaW5lX2luX3VzZV9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkYXRhIHJhY2UgYW5kIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIHdoZW4gYWNjZXNzaW5nIGBmb2xpby1cXHUwMDNlbWFwcGluZ2AuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSBoYXJkd2FyZSBtZW1vcnkgZXJyb3IgaW5qZWN0aW9uIG1lY2hhbmlzbXMgKGxpa2UgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9yIGBNQURWX1NPRlRfT0ZGTElORWApLCB3aGljaCBhcmUgaGFuZGxlZCBieSBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gRnV6emluZyB0aGVzZSBlbnRyeSBwb2ludHMgd2l0aCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBlbmFibGVkIHdpbGwgZXhlcmNpc2UgdGhlIG1vZGlmaWVkIGNvZGUgYW5kIGVuc3VyZSB0aGUgY29uY3VycmVuY3kgaXNzdWUgaXMgcmVzb2x2ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjU4OjAwLjY3ODMyNjIzOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MTgyNjkzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc1ZTUyMTY5YjQ0MTRiNjc1N2Y1YzIyMGI0MWNjZmVlMWU4Zjc1YzFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgNCAwNDo1Nzo1OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IDJiY2NiMGE1M2EwYTYuLjU0ZDQyNjFhMmExNTAgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtNDI4NCwxOSArNDI4NCwyMyBAQCBpbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4gICovXFxuIHVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4rXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XFxuK1xcbiBcXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbitcXHRtYXBwaW5nID0gUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VtYXBwaW5nKTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIElmIHRoZSBmb2xpbyBnb3QgdHJ1bmNhdGVkLCB3ZSBkb24ndCBrbm93IHRoZSBwcmV2aW91cyBtYXBwaW5nIGFuZFxcbiBcXHQgKiBjb25zZXF1ZW50bHkgdGhlIG9sZCBtaW4gb3JkZXIuIEJ1dCBpdCBkb2Vzbid0IG1hdHRlciwgYXMgYW55IHNwbGl0XFxuIFxcdCAqIGF0dGVtcHQgd2lsbCBpbW1lZGlhdGVseSBmYWlsIHdpdGggLUVCVVNZIGFzIHRoZSBmb2xpbyBjYW5ub3QgZ2V0XFxuIFxcdCAqIHNwbGl0IHVudGlsIGZyZWVkLlxcbiBcXHQgKi9cXG4tXFx0aWYgKCFmb2xpby1cXHUwMDNlbWFwcGluZylcXG4rXFx0aWYgKCFtYXBwaW5nKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHJldHVybiBtYXBwaW5nX21pbl9mb2xpb19vcmRlcihmb2xpby1cXHUwMDNlbWFwcGluZyk7XFxuK1xcdHJldHVybiBtYXBwaW5nX21pbl9mb2xpb19vcmRlcihtYXBwaW5nKTtcXG4gfVxcbiBcXG4gaW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTg6MDIuMDMxMDYxOTUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQ1MDk4MjAwMjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiSFdQT0lTT05fSU5KRUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWluX29yZGVyX2Zvcl9zcGxpdFwiLFxuICAgIFwibWVtb3J5X2ZhaWx1cmVcIixcbiAgICBcInNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZGF0YSByYWNlIGFuZCBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCB3aGVuIGFjY2Vzc2luZyBgZm9saW8tXFx1MDAzZW1hcHBpbmdgLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgaGFyZHdhcmUgbWVtb3J5IGVycm9yIGluamVjdGlvbiBtZWNoYW5pc21zIChsaWtlIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBvciBgTUFEVl9TT0ZUX09GRkxJTkVgKSwgd2hpY2ggYXJlIGhhbmRsZWQgYnkgYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuIEZ1enppbmcgdGhlc2UgZW50cnkgcG9pbnRzIHdpdGggYENPTkZJR19NRU1PUllfRkFJTFVSRWAgZW5hYmxlZCB3aWxsIGV4ZXJjaXNlIHRoZSBtb2RpZmllZCBjb2RlIGFuZCBlbnN1cmUgdGhlIGNvbmN1cnJlbmN5IGlzc3VlIGlzIHJlc29sdmVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3NWU1MjE2OWI0NDE0YjY3NTdmNWMyMjBiNDFjY2ZlZTFlOGY3NWMxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAwNDo1Nzo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAyYmNjYjBhNTNhMGE2Li41NGQ0MjYxYTJhMTUwIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTQyODQsMTkgKzQyODQsMjMgQEAgaW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4gICovXG4gdW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4rXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcbitcbiBcdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pKVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdG1hcHBpbmcgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlbWFwcGluZyk7XG4rXG4gXHQvKlxuIFx0ICogSWYgdGhlIGZvbGlvIGdvdCB0cnVuY2F0ZWQsIHdlIGRvbid0IGtub3cgdGhlIHByZXZpb3VzIG1hcHBpbmcgYW5kXG4gXHQgKiBjb25zZXF1ZW50bHkgdGhlIG9sZCBtaW4gb3JkZXIuIEJ1dCBpdCBkb2Vzbid0IG1hdHRlciwgYXMgYW55IHNwbGl0XG4gXHQgKiBhdHRlbXB0IHdpbGwgaW1tZWRpYXRlbHkgZmFpbCB3aXRoIC1FQlVTWSBhcyB0aGUgZm9saW8gY2Fubm90IGdldFxuIFx0ICogc3BsaXQgdW50aWwgZnJlZWQuXG4gXHQgKi9cbi1cdGlmICghZm9saW8tXHUwMDNlbWFwcGluZylcbitcdGlmICghbWFwcGluZylcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXR1cm4gbWFwcGluZ19taW5fZm9saW9fb3JkZXIoZm9saW8tXHUwMDNlbWFwcGluZyk7XG4rXHRyZXR1cm4gbWFwcGluZ19taW5fZm9saW9fb3JkZXIobWFwcGluZyk7XG4gfVxuIFxuIGludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1ODowMi4wMzEwNjUwNDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTczOTM4NDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZSBNZW1vcnkgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgYG1tL2h1Z2VfbWVtb3J5LmNgLiBTcGVjaWZpY2FsbHksIGl0J3MgaG9uZWQgaW4gb24gdGhlIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaGVyZSwgYXMgZmFyIGFzIEkgY2FuIHNlZSwgaXMgdGhhdCBpdCdzIHJlcGxhY2luZyBkaXJlY3QgYWNjZXNzZXMgdG8gYGZvbGlvLVx1MDAzZW1hcHBpbmdgIHdpdGggYFJFQURfT05DRShmb2xpby1cdTAwM2VtYXBwaW5nKWAuIEkgbmVlZCB0byBkaWcgaW50byBgbWluX29yZGVyX2Zvcl9zcGxpdGAgd2l0aGluIGBtbS9odWdlX21lbW9yeS5jYCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNoYW5nZSB3YXMgbmVjZXNzYXJ5LiBJcyBpdCBhIG1lbW9yeSBvcmRlcmluZyBpc3N1ZT8gQSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24/IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhlcmUncyBhbG1vc3QgY2VydGFpbmx5IGEgc3VidGxlIGNvbmN1cnJlbmN5IGNvbmNlcm4gdGhhdCdzIGJlaW5nIGFkZHJlc3NlZCBoZXJlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHN1Y2ggZnVuZGFtZW50YWwgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB1c2luZyBgUkVBRF9PTkNFYCBvbiB0aGF0IHNwZWNpZmljIGZpZWxkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBXaGF0IGlzIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyYWwgcmVhc29uIGZvciB0aGlzIGNoYW5nZT9cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTg6MDYuMDA1MDA1Mzk0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNDI4MjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTQyNjg9aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyNzUtLyoqXFxubW0vaHVnZV9tZW1vcnkuYzo0Mjc2OiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSAtIGdldCB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvXFxubW0vaHVnZV9tZW1vcnkuYy00Mjc3LSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcXG5tbS9odWdlX21lbW9yeS5jLTQyNzgtICpcXG5tbS9odWdlX21lbW9yeS5jOjQyNzk6ICogbWluX29yZGVyX2Zvcl9zcGxpdCgpIHRlbGxzIHRoZSBtaW5pbXVtIG9yZGVyIEBmb2xpbyBjYW4gYmUgc3BsaXQgdG8uXFxubW0vaHVnZV9tZW1vcnkuYy00MjgwLSAqIElmIGEgZmlsZS1iYWNrZWQgZm9saW8gaXMgdHJ1bmNhdGVkLCAwIHdpbGwgYmUgcmV0dXJuZWQuIEFueSBzdWJzZXF1ZW50XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyODQtICovXFxubW0vaHVnZV9tZW1vcnkuYzo0Mjg1OnVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vaHVnZV9tZW1vcnkuYy00Mjg2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTg6MDYuMDk1NDM3Njg3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE5ODY0NDY0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb25jdXJyZW5jeSBCdWcgaW4gdGhlIEZvbGlvIFNwbGl0dGluZyBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgcG90ZW50aWFsIGZvciBhIHJhY2UgY29uZGl0aW9uIGp1bXBzIG91dCBhdCBtZS4gV2UncmUgZGVhbGluZyB3aXRoIGBmb2xpby1cdTAwM2VtYXBwaW5nYCBpbiBgbWluX29yZGVyX2Zvcl9zcGxpdGAsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZXJlJ3MgYSB3aW5kb3cgd2hlcmUgaXQgY291bGQgYmUgcmVhZCB0d2ljZS4gVGhlIGZpcnN0IHJlYWQgbWlnaHQgZmluZCBhIHZhbGlkIHBvaW50ZXIsIGJ1dCBhIGNvbmN1cnJlbnQgdHJ1bmNhdGlvbiBjb3VsZCBzZXQgaXQgdG8gTlVMTCBiZWZvcmUgdGhlIHNlY29uZCByZWFkLiBUaGF0IHNjZW5hcmlvLCBvZiBjb3Vyc2UsIHdvdWxkIHJlc3VsdCBpbiBhIG5hc3R5IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIHdlIGhpdCBgbWFwcGluZ19taW5fZm9saW9fb3JkZXJgLlxuXG5UaGlzIGlzIGEgY2xlYXItY3V0IGZ1bmN0aW9uYWwgY2hhbmdlLCBjb3JyZWN0aW5nIGEgY29uY3VycmVuY3kgYnVn4oCUcHJlY2lzZWx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY2FuIGJpdGUgeW91IGluIGEgbG93LWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHQgaWYgeW91IGFyZW4ndCBjYXJlZnVsLiBJdCdzIGdvb2QgdGhhdCB0aGlzIHdhcyBpZGVudGlmaWVkLlxuXG5NeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBjYWxsIHNpdGVzIG9mIGBtaW5fb3JkZXJfZm9yX3NwbGl0YC4gVW5kZXJzdGFuZGluZyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgaXMgY3J1Y2lhbCB0byBhc3Nlc3MgdGhlIHRydWUgc2NvcGUgYW5kIGltcGFjdCBvZiB0aGlzIGZpeC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgdmFyaW91cyBleGVjdXRpb24gcGF0aHMgdGhhdCBjb3VsZCBiZSBhZmZlY3RlZCBieSB0aGlzIHBvdGVudGlhbCByYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzUwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjU4OjExLjI5NDA4NDMyMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkyMDIyNTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQwND1pbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcik7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDA1OnVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQwNi1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTY0MT1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NDYtXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NjQ3OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NDgte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00MjY4PWludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00Mjc1LS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDI3NjogKiBtaW5fb3JkZXJfZm9yX3NwbGl0KCkgLSBnZXQgdGhlIG1pbmltdW0gb3JkZXIgQGZvbGlvIGNhbiBiZSBzcGxpdCB0b1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDI3Ny0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxubW0vaHVnZV9tZW1vcnkuYy00Mjc4LSAqXFxubW0vaHVnZV9tZW1vcnkuYzo0Mjc5OiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSB0ZWxscyB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvLlxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4MC0gKiBJZiBhIGZpbGUtYmFja2VkIGZvbGlvIGlzIHRydW5jYXRlZCwgMCB3aWxsIGJlIHJldHVybmVkLiBBbnkgc3Vic2VxdWVudFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00Mjg0LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NTp1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIzMzA9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0NDItXFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDQzOlxcdFxcdGNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0NDQtXFx0XFx0aW50IGVycjtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjc4MD1zdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc5NS1cXHRpZiAoIWh1Z2UgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3OTY6XFx0XFx0Y29uc3QgaW50IG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc5Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTg6MTMuNjg2MTExMjc1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyNzU3MjgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgSHVnZSBQYWdlIEFsbG9jYXRpb24gSXNzdWVzKipcblxuUmlnaHQsIHNvIEkndmUgc2VlbiB0aGVzZSBlcnJvciByZXBvcnRzIGNyb3BwaW5nIHVwLCBhbmQgSSdtIHRyeWluZyB0byBwaW5wb2ludCB3aGVyZSBhIGh1Z2UgcGFnZSBhbGxvY2F0aW9uIGlzIGdvaW5nIHNpZGV3YXlzLiBUaGUga2V5IGluZGljYXRvcnMgYXJlIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLiBXaGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zIGdldHRpbmcgY2FsbGVkIGZyb20/IEkgbmVlZCB0byBidWlsZCBhIGNvbXByZWhlbnNpdmUgcGljdHVyZSB0byB1bmRlcnN0YW5kIHRoaXMgaXNzdWUuXG5cbk9rYXksIG5vdywgaXMgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGV4cG9ydGVkIGFueXdoZXJlPyBIb2xkIG9uLi4uIGl0J3Mgbm90IGEgZGlyZWN0IGV4cG9ydCwgSSBuZWVkIHRvIGxvb2sgaW4gYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYC4gVGhhdCdzIHdoZXJlIGl0J3MgZGVmaW5lZC4gUmlnaHQsIHRoYXQncyB1c2VmdWwuIE5vdywgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGNoZWNrIGlmIHRoYXQgZnVuY3Rpb24gaXMgdXNlZCB3aXRoaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGl0c2VsZi4gSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIGl0cyBsb2NhbCB1c2VzIGJlZm9yZSBleHBhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzgzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTg6MTguNDEzNjg3MDk3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3Mzg0MzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTQyNjg9aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyNzUtLyoqXFxubW0vaHVnZV9tZW1vcnkuYzo0Mjc2OiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSAtIGdldCB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvXFxubW0vaHVnZV9tZW1vcnkuYy00Mjc3LSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcXG5tbS9odWdlX21lbW9yeS5jLTQyNzgtICpcXG5tbS9odWdlX21lbW9yeS5jOjQyNzk6ICogbWluX29yZGVyX2Zvcl9zcGxpdCgpIHRlbGxzIHRoZSBtaW5pbXVtIG9yZGVyIEBmb2xpbyBjYW4gYmUgc3BsaXQgdG8uXFxubW0vaHVnZV9tZW1vcnkuYy00MjgwLSAqIElmIGEgZmlsZS1iYWNrZWQgZm9saW8gaXMgdHJ1bmNhdGVkLCAwIHdpbGwgYmUgcmV0dXJuZWQuIEFueSBzdWJzZXF1ZW50XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyODQtICovXFxubW0vaHVnZV9tZW1vcnkuYzo0Mjg1OnVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vaHVnZV9tZW1vcnkuYy00Mjg2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTg6MTguNDgxMDc1MjkyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyNTIyNTc2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUcmFjaW5nIHRoZSBgc3BsaXRfZm9saW9fdG9fbGlzdGAgRnVuY3Rpb24ncyBQb3RlbnRpYWwgQ2FsbHMqKlxuXG5Pa2F5LCBzbyBJIHdhcyBsb29raW5nIGZvciB3aGVyZSB0aGlzIGZ1bmN0aW9uLCB3aGljaCBJIHdhcyBzdXJlIHdhcyBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHdhcyBjYWxsZWQuIEJ1dCBpdCdzIG5vdCBhY3R1YWxseSBuYW1lZCBpbiBgbW0vaHVnZV9tZW1vcnkuY2A/IFRoYXQncyBvZGQuIExldCBtZSBzZWUsIGNvdWxkIGBzcGxpdF9mb2xpb190b19saXN0YCBiZSBjYWxsaW5nIGl0PyBObywgbm90aGluZyBpbiB0aGUgZ3JlcCBvdXRwdXQgc3VnZ2VzdHMgdGhhdC4gQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlIGZvciBgc3BsaXRfZm9saW9fdG9fbGlzdGAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGRpcmVjdGx5LiBMZXQncyBzZWUgaWYgdGhhdCBwcm92aWRlcyBhbnkgY2x1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1ODoyMi41MDYzMDMwOThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMjYyNjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNwbGl0X2ZvbGlvX3RvX2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTQyODU9dW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDMwNS1cXG5tbS9odWdlX21lbW9yeS5jOjQzMDY6aW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG5tbS9odWdlX21lbW9yeS5jLTQzMDcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1ODoyMi41OTY1NzI3OTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1NjA4OTc0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczpcblxuKipEaWdnaW5nIGludG8gYSBNZW1vcnkgRmFpbHVyZSBTY2VuYXJpbyoqXG5cbk9rYXksIHRoZSB0cmFpbCBzdGFydHMgd2l0aCBgbWluX29yZGVyX2Zvcl9zcGxpdGAg4oCTIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGhpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFRoYXQncyB3aGVyZSB0aGUgYWN0aW9uIGlzIGxpa2VseSBoYXBwZW5pbmcuIE15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGRpdmUgaW50byBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgaXRzZWxmLiBUaW1lIHRvIHNlZSB3aGF0IHRoYXQgZmlsZSBpcyByZWFsbHkgZG9pbmcsIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFyb3VuZCB0aGlzIGZ1bmN0aW9uIGNhbGwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBgbWluX29yZGVyX2Zvcl9zcGxpdGAgaXMgYmVpbmcgY2FsbGVkIHRoZXJlLCBhbmQgd2hhdCBjbHVlcyBpdCBnaXZlcyBtZSByZWdhcmRpbmcgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIG1lbW9yeSBmYWlsdXJlLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGZpbmQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1ODoyNS43NTI2NjUyNTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MTEyOTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jPTIzMzA9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0NDItXFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDQzOlxcdFxcdGNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0NDQtXFx0XFx0aW50IGVycjtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjc4MD1zdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc5NS1cXHRpZiAoIWh1Z2UgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3OTY6XFx0XFx0Y29uc3QgaW50IG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc5Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTg6MjUuODA2NzgyNjQxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDQzNzk5MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgVGVybWlub2xvZ3kgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgc28gSSdtIHByZXNlbnRlZCB3aXRoIHRoaXMgY29uY2VwdCwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzOiBpcyB0aGlzIHRoaW5nIHVuaXF1ZSB0byAqdGhpcyogY29udGV4dD8gT3IsIG1vcmUgcHJlY2lzZWx5LCBpcyB0aGlzIHRlcm1pbm9sb2d5IHN0YW5kYXJkIGFjcm9zcyBteSBmaWVsZCwgb3IgZG9lcyBpdCBleGlzdCB1bmRlciBkaWZmZXJlbnQgbmFtaW5nIGNvbnZlbnRpb25zIGVsc2V3aGVyZT8gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIHRoaXMgdGVybSBoYXMgZXN0YWJsaXNoZWQgdXNhZ2UgYmV5b25kIHRoZSBpbW1lZGlhdGUgc2NvcGUgb2Ygd2hhdCBJJ20gbG9va2luZyBhdC4gSSdtIHRoaW5raW5nLCBhcmUgdGhlcmUgc3lub255bXM/IEFyZSB0aGVyZSByZWdpb25hbCB2YXJpYXRpb25zPyBEb2VzIHRoZSBqYXJnb24gZXZvbHZlIG92ZXIgdGltZT8gSSBuZWVkIHRvIGFzY2VydGFpbiB0aGlzIHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlIGNvbmNlcHQgdW5kZXIgZGlzY3Vzc2lvbiBpbiByZWxhdGlvbiB0byBvdGhlciBhcHBsaWNhdGlvbnMuIE15IGV4cGVydGlzZSBpcyBidWlsdCBvbiBoYXZpbmcgYSBzdHJvbmcgZ3Jhc3Agb2YgdGhlIHRlcm1pbm9sb2d5J3MgZXZvbHV0aW9uIGFuZCBzY29wZS4gSWdub3JpbmcgdGhlc2UgZmFjdG9ycyBjb3VsZCBsZWFkIHRvIHNpZ25pZmljYW50IG1pc3VuZGVyc3RhbmRpbmdzLCBhbmQgbXkga25vd2xlZGdlIG9mIHRoZSBmaWVsZCBkZXBlbmRzIG9uIHRoZSBhY2N1cmFjeSBvZiBteSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE1MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTg6MjguOTUxMTY1ODA2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDYyODM3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaW5fb3JkZXJfZm9yX3NwbGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTQyNjg9aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyNzUtLyoqXFxubW0vaHVnZV9tZW1vcnkuYzo0Mjc2OiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSAtIGdldCB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvXFxubW0vaHVnZV9tZW1vcnkuYy00Mjc3LSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcXG5tbS9odWdlX21lbW9yeS5jLTQyNzgtICpcXG5tbS9odWdlX21lbW9yeS5jOjQyNzk6ICogbWluX29yZGVyX2Zvcl9zcGxpdCgpIHRlbGxzIHRoZSBtaW5pbXVtIG9yZGVyIEBmb2xpbyBjYW4gYmUgc3BsaXQgdG8uXFxubW0vaHVnZV9tZW1vcnkuYy00MjgwLSAqIElmIGEgZmlsZS1iYWNrZWQgZm9saW8gaXMgdHJ1bmNhdGVkLCAwIHdpbGwgYmUgcmV0dXJuZWQuIEFueSBzdWJzZXF1ZW50XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyODQtICovXFxubW0vaHVnZV9tZW1vcnkuYzo0Mjg1OnVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vaHVnZV9tZW1vcnkuYy00Mjg2LXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjMzMD1pbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ0Mi1cXHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI0NDM6XFx0XFx0Y29uc3QgaW50IG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ0NC1cXHRcXHRpbnQgZXJyO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNzgwPXN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzk1LVxcdGlmICghaHVnZSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjc5NjpcXHRcXHRjb25zdCBpbnQgbmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNzk3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1ODoyOS4wMjE4MDAwMTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2OTQxNzU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBEZWVwIGludG8gdGhlIENhbGwgUGF0aHMqKlxuXG5SaWdodCwgc28gdGhlIGNvZGUncyByYWlzaW5nIHNvbWUgZmxhZ3MgdGhhdCB3YXJyYW50IGZ1cnRoZXIgaW5zcGVjdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGUgaXNzdWUgaXMgYmVpbmcgZmxhZ2dlZCBvbmx5IHdpdGhpbiB0aGUgYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgY29udGV4dHMuIFRoYXQncyBhIGxpbWl0ZWQgc2NvcGUsIHdoaWNoIGlzIGhlbHBmdWwuIE5vdywgSSBuZWVkIHRvIHZlcmlmeSB3aGljaCBmdW5jdGlvbnMgYXJlICphY3R1YWxseSogdHJpZ2dlcmluZyB0aGVzZSBldmVudHMuIEkgd2FzIGp1c3QgdGhpbmtpbmcgdGhhdCBwZXJoYXBzIGBzcGxpdF9mb2xpb190b19saXN0YCBtaWdodCBiZSBhIGN1bHByaXQsIGJ1dCBhIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCdzIG5vdCB0aGUgY2FzZS4gTGV0J3Mgc2VlIGlmIGBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAgaXMgY29udHJpYnV0aW5nIHRvIHRoaXMuIEl0J3MgdGltZSB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIG9yaWdpbiBvZiB0aGUgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NTUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1ODozMy4zOTEyMjAzNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NDc2NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTQxNjg9aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyMzQtICovXFxubW0vaHVnZV9tZW1vcnkuYzo0MjM1OmludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDIzNi1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyNTItICogSXQgaGFzIHRoZSBzYW1lIHByZXJlcXVpc2l0ZXMgYW5kIHJldHVybnMgYXNcXG5tbS9odWdlX21lbW9yeS5jOjQyNTM6ICogc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoKS5cXG5tbS9odWdlX21lbW9yeS5jLTQyNTQtICpcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDMwNj1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDMwNy17XFxubW0vaHVnZV9tZW1vcnkuYzo0MzA4OlxcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIGxpc3QsIDApO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDMwOS19XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ1OTI9c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX3BpZChpbnQgcGlkLCB1bnNpZ25lZCBsb25nIHZhZGRyX3N0YXJ0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NjYxLVxcdFxcdC8qXFxubW0vaHVnZV9tZW1vcnkuYzo0NjYyOlxcdFxcdCAqIEZvciBmb2xpb3Mgd2l0aCBwcml2YXRlLCBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcigpXFxubW0vaHVnZV9tZW1vcnkuYy00NjYzLVxcdFxcdCAqIHdpbGwgdHJ5IHRvIGRyb3AgaXQgYmVmb3JlIHNwbGl0IGFuZCB0aGVuIGNoZWNrIGlmIHRoZSBmb2xpb1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1ODozMy41MDU3MDU4OTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg2NjU3OTcxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsIEhpZXJhcmNoeSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIHdhcyBkaXJlY3RseSBpbnZva2VkIHdpdGhpbiBgc3BsaXRfZm9saW9fdG9fbGlzdGAsIGJ1dCB0aGUgYGdyZXBgIG91dHB1dCBpc24ndCBzaG93aW5nIHRoYXQuIFRoYXQncyB1bmV4cGVjdGVkLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBzcGxpdF9mb2xpb190b19saXN0YCBmdW5jdGlvbiBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZSwgdG8gdmVyaWZ5IHdoYXQgaXMgYWN0dWFsbHkgaGFwcGVuaW5nLiBJJ2xsIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgbW0vaHVnZV9tZW1vcnkuY2Agc291cmNlIGNvZGUgdG8gZ2V0IHRoZSBkZWZpbml0aXZlIGFuc3dlci4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgY2FsbCBjaGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU0NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjU4OjM3LjM3MjI4OTE1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNDAxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MjgwOlxcdCAqIElmIGEgZmlsZS1iYWNrZWQgZm9saW8gaXMgdHJ1bmNhdGVkLCAwIHdpbGwgYmUgcmV0dXJuZWQuIEFueSBzdWJzZXF1ZW50XFxuNDI4MTpcXHQgKiBzcGxpdCBhdHRlbXB0IHNob3VsZCBnZXQgLUVCVVNZIGZyb20gc3BsaXQgY2hlY2tpbmcgY29kZS5cXG40MjgyOlxcdCAqXFxuNDI4MzpcXHQgKiBSZXR1cm46IEBmb2xpbydzIG1pbmltdW0gb3JkZXIgZm9yIHNwbGl0XFxuNDI4NDpcXHQgKi9cXG40Mjg1OlxcdHVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuNDI4NjpcXHR7XFxuNDI4NzpcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcXG40Mjg4OlxcdFxcbjQyODk6XFx0XFx0aWYgKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykpXFxuNDI5MDpcXHRcXHRcXHRyZXR1cm4gMDtcXG40MjkxOlxcdFxcbjQyOTI6XFx0XFx0bWFwcGluZyA9IFJFQURfT05DRShmb2xpby1cXHUwMDNlbWFwcGluZyk7XFxuNDI5MzpcXHRcXG40Mjk0OlxcdFxcdC8qXFxuNDI5NTpcXHRcXHQgKiBJZiB0aGUgZm9saW8gZ290IHRydW5jYXRlZCwgd2UgZG9uJ3Qga25vdyB0aGUgcHJldmlvdXMgbWFwcGluZyBhbmRcXG40Mjk2OlxcdFxcdCAqIGNvbnNlcXVlbnRseSB0aGUgb2xkIG1pbiBvcmRlci4gQnV0IGl0IGRvZXNuJ3QgbWF0dGVyLCBhcyBhbnkgc3BsaXRcXG40Mjk3OlxcdFxcdCAqIGF0dGVtcHQgd2lsbCBpbW1lZGlhdGVseSBmYWlsIHdpdGggLUVCVVNZIGFzIHRoZSBmb2xpbyBjYW5ub3QgZ2V0XFxuNDI5ODpcXHRcXHQgKiBzcGxpdCB1bnRpbCBmcmVlZC5cXG40Mjk5OlxcdFxcdCAqL1xcbjQzMDA6XFx0XFx0aWYgKCFtYXBwaW5nKVxcbjQzMDE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNDMwMjpcXHRcXG40MzAzOlxcdFxcdHJldHVybiBtYXBwaW5nX21pbl9mb2xpb19vcmRlcihtYXBwaW5nKTtcXG40MzA0OlxcdH1cXG40MzA1OlxcdFxcbjQzMDY6XFx0aW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG40MzA3OlxcdHtcXG40MzA4OlxcdFxcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIGxpc3QsIDApO1xcbjQzMDk6XFx0fVxcbjQzMTA6XFx0XFxuNDMxMTpcXHQvKlxcbjQzMTI6XFx0ICogX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaXMgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseTpcXG40MzEzOlxcdCAqIHRoZSBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaW5saW5lIHdyYXBwZXIgaW4gbW0vaW50ZXJuYWwuaFxcbjQzMTQ6XFx0ICogbGltaXRzIGl0cyBjYWxscyB0byB0aG9zZSBmb2xpb3Mgd2hpY2ggbWF5IGhhdmUgYSBfZGVmZXJyZWRfbGlzdCBmb3JcXG40MzE1OlxcdCAqIHF1ZXVlaW5nIFRIUCBzcGxpdHMsIGFuZCB0aGF0IGxpc3QgaXMgKHJhY2lseSBvYnNlcnZlZCB0byBiZSkgbm9uLWVtcHR5LlxcbjQzMTY6XFx0ICpcXG40MzE3OlxcdCAqIEl0IGlzIHVuc2FmZSB0byBjYWxsIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSB1bnRpbCBmb2xpbyByZWZjb3VudCBpc1xcbjQzMTg6XFx0ICogemVybzogYmVjYXVzZSBldmVuIHdoZW4gdGhlIGxpc3RfbHJ1IGxvY2sgaXMgaGVsZCwgYSBub24tZW1wdHlcXG40MzE5OlxcdCAqIF9kZWZlcnJlZF9saXN0IG1pZ2h0IGJlIGluIHVzZSBvbiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkncyB1bmxvY2tlZFxcbjQzMjA6XFx0ICogb24tc3RhY2sgbGlzdC5cXG40MzIxOlxcdCAqXFxuNDMyMjpcXHQgKiBUaGUgbGlzdF9scnUgc3VibGlzdCBpcyBkZXRlcm1pbmVkIGJ5IGZvbGlvJ3MgbWVtY2c6IGl0IGlzIHRoZXJlZm9yZVxcbjQzMjM6XFx0ICogaW1wb3J0YW50IHRvIHVucXVldWUgZGVmZXJyZWQgc3BsaXQgYmVmb3JlIGNoYW5naW5nIGZvbGlvIG1lbWNnLlxcbjQzMjQ6XFx0ICovXFxuNDMyNTpcXHRib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbjQzMjY6XFx0e1xcbjQzMjc6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjQzMjg6XFx0XFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1O1xcbjQzMjk6XFx0XFx0aW50IG5pZCA9IGZvbGlvX25pZChmb2xpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjU4OjM3LjM3NTYzNDc4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NDg1NjkyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgbWluX29yZGVyX2Zvcl9zcGxpdGAgVXNhZ2UqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBTb21ldGhpbmcgZmVlbHMgb2ZmLiBJdCBzZWVtcyBsaWtlIHRoZSBmdW5jdGlvbiBgbWluX29yZGVyX2Zvcl9zcGxpdGAgaXMgKm9ubHkqIGV2ZXIgaW52b2tlZCBmcm9tIHdpdGhpbiB0aGUgYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgZnVuY3Rpb25zLiBUaGF0J3MgYSBwcmV0dHkgbGltaXRlZCBzY29wZSwgYW5kIGl0IG1ha2VzIG1lIHdvbmRlciBpZiB0aGVyZSdzIGEgcmVhc29uIGZvciB0aGF0IHJlc3RyaWN0aW9uLiBHaXZlbiB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsbHkgc3BsaXR0aW5nIGh1Z2UgcGFnZXMsIHRoZSBsaW1pdGVkIHNjb3BlIGlzIGEgZ29vZCBzaWduLCBwb3RlbnRpYWxseSByZWR1Y2luZyBzb21lIGNvbXBsZXhpdHkgb2YgbWVtb3J5IGZhaWx1cmUuIFRvIGNvbmZpcm0gdGhpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgY29yZSBodWdlIHBhZ2UgZnVuY3Rpb25hbGl0eS4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBgbW0vaHVnZV9tZW1vcnkuY2AuIEknbGwgc2VlIHdoYXQgdGhlIGRlZmluaXRpb24gYW5kIGNvbnRleHQgb2YgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIHRlbGxzIG1lIHRvIGNoZWNrIHdoYXQgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBkb2VzIGluIG9yZGVyIHRvIGJldHRlciB1bmRlcnN0YW5kIHdoYXQgdGhpcyBtaWdodCBtZWFuIGZvciB0aGUgbGFyZ2VyIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU3MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTg6NDEuOTI0MjA4MDQ1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTE0MDYyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaW5fb3JkZXJfZm9yX3NwbGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz00MjY4PWludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00Mjc1LS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDI3NjogKiBtaW5fb3JkZXJfZm9yX3NwbGl0KCkgLSBnZXQgdGhlIG1pbmltdW0gb3JkZXIgQGZvbGlvIGNhbiBiZSBzcGxpdCB0b1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDI3Ny0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxubW0vaHVnZV9tZW1vcnkuYy00Mjc4LSAqXFxubW0vaHVnZV9tZW1vcnkuYzo0Mjc5OiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSB0ZWxscyB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvLlxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4MC0gKiBJZiBhIGZpbGUtYmFja2VkIGZvbGlvIGlzIHRydW5jYXRlZCwgMCB3aWxsIGJlIHJldHVybmVkLiBBbnkgc3Vic2VxdWVudFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00Mjg0LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NTp1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjU4OjQyLjAyMzM1NzIyOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTU1MjI0ODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgcGFnZV9wdXRiYWNrYCBDYWxscyoqXG5cblJpZ2h0LCBzbyB0aGlzIGZ1bmN0aW9uLCBgcGFnZV9wdXRiYWNrYCwgaXMgb25seSBjYWxsZWQgZnJvbSB3aXRoaW4gYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAsIGJvdGggaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGluaXRpYWwgdHJhY2UgbGVhZHMuIEkgbmVlZCB0byBiZSBzdXJlIHRob3VnaCwgYmVmb3JlIEkgbWFrZSBhbnkgY29uY2x1c2lvbnMuXG5cbk5vdywgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyAqdGhhdCogcmVhbGx5IGl0PyBNeSBpbnN0aW5jdHMgdGVsbCBtZSBJIHNob3VsZCBkb3VibGUtY2hlY2suIEkgaGF2ZSB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlcmUgaXNuJ3Qgc29tZSBvdGhlciwgcG90ZW50aWFsbHkgb2JzY3VyZSwgY2FsbCBzaXRlIGx1cmtpbmcgaW4gdGhlIGtlcm5lbCB0aGF0IEkndmUgbWlzc2VkLiBBIHF1aWNrIGdsb2JhbCBzZWFyY2ggbWlnaHQgcmV2ZWFsIHNvbWV0aGluZyBJJ20gb3Zlcmxvb2tpbmcuIEkgbmVlZCB0byBiZSB0aG9yb3VnaCBhbmQgZXhjbHVkZSBhbnkgZmFsc2UgYXNzdW1wdGlvbnMuIEdvdHRhIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTI3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTg6NDYuMTc4NTg1MzM0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzQ2MzkzNzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQwND1pbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcik7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDA1OnVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQwNi1pbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTY0MT1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NDYtXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NjQ3OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NDgte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00MjY4PWludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00Mjc1LS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDI3NjogKiBtaW5fb3JkZXJfZm9yX3NwbGl0KCkgLSBnZXQgdGhlIG1pbmltdW0gb3JkZXIgQGZvbGlvIGNhbiBiZSBzcGxpdCB0b1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDI3Ny0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XFxubW0vaHVnZV9tZW1vcnkuYy00Mjc4LSAqXFxubW0vaHVnZV9tZW1vcnkuYzo0Mjc5OiAqIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSB0ZWxscyB0aGUgbWluaW11bSBvcmRlciBAZm9saW8gY2FuIGJlIHNwbGl0IHRvLlxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4MC0gKiBJZiBhIGZpbGUtYmFja2VkIGZvbGlvIGlzIHRydW5jYXRlZCwgMCB3aWxsIGJlIHJldHVybmVkLiBBbnkgc3Vic2VxdWVudFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00Mjg0LSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDI4NTp1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4Ni17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIzMzA9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0NDItXFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDQzOlxcdFxcdGNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0NDQtXFx0XFx0aW50IGVycjtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjc4MD1zdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc5NS1cXHRpZiAoIWh1Z2UgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI3OTY6XFx0XFx0Y29uc3QgaW50IG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjc5Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTg6NDkuOTI0OTg4MTcyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2MzMzOTY4NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ29yZSBNZW1vcnkgTWFuYWdlbWVudCBGaXgqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGxvb2sgYXQgYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAg4oCTIHRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucywgcmlnaHQ/IE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBoYXJkd2FyZSBtZW1vcnkgZXJyb3JzLCB0aGUgTUNFIHR5cGUgc3R1ZmYuIFdlIGNhbiBpbmplY3QgdGhlc2UgZXJyb3JzIHRocm91Z2ggc3lzZnMgb3IgbWFkdmlzZSB3aXRoIE1BRFZfSFdQT0lTT04sIHdoaWNoIHRlbGxzIG1lIHRoaXMgaXNuJ3QganVzdCB0aGVvcmV0aWNhbDsgaXQncyBzb21ldGhpbmcgd2UgY2FuIGFjdHVhbGx5IHRyaWdnZXIgYW5kIHRlc3QuXG5cblRoZSBwYXRjaCBpdHNlbGYgYWRkcmVzc2VzIGEgZGF0YSByYWNlIG9yIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBzaWduaWZpY2FudC4gTm93LCB0aGUgYmlnIHF1ZXN0aW9uOiBpcyBmdXp6aW5nIGEgdmFsaWQgYXBwcm9hY2ggaGVyZT8gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggd2l0aGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIEknbSBsZWFuaW5nIHRvd2FyZHMgXCJ5ZXNcIi4gSXQncyBhIGZ1bmRhbWVudGFsIGFyZWEsIGFuZCBmdXp6aW5nIGNvdWxkIGV4cG9zZSBhbnkgcmVtYWluaW5nIHN1YnRsZSBpc3N1ZXMuXG5cbk5leHQsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcgdG8gZW5zdXJlIHRoZSBhZmZlY3RlZCBmdW5jdGlvbmFsaXR5IGlzIGV2ZW4gcHJlc2VudC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA1NywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1ODo1Ni41NTgzODk0ODVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MDQ2MTAwNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTU9SWV9GQUlMVVJFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTc3ND1jb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbi0tXFxubW0vS2NvbmZpZy03NzYtXFxubW0vS2NvbmZpZzo3Nzc6Y29uZmlnIE1FTU9SWV9GQUlMVVJFXFxubW0vS2NvbmZpZy03NzgtXFx0ZGVwZW5kcyBvbiBNTVVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTk6MDAuMjYzMDA2MjQ3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzIwMDM4NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBoYW5kbGVkLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBtbS9LY29uZmlnYC4gSSdtIHRoaW5raW5nIGFyb3VuZCBsaW5lIDc3NyBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIGJlZ2luIGRpZ2dpbmcgaW50byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiDigJMgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGluZ3MgcmVsYXRlZCB0byB0aGlzIHBhcnRpY3VsYXIgZmVhdHVyZS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIHJlbGV2YW50IHN5bWJvbHMgYXJlIGRlZmluZWQsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGFueSBhc3NvY2lhdGVkIGhlbHAgdGV4dC4gRnJvbSB0aGVyZSBJIGNhbiBicmFuY2ggb3V0IGFzIG5lZWRlZCwgbWF5YmUgbG9va2luZyBhdCB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzLiBJJ20gaG9waW5nIEkgY2FuIHRyYWNlIHRoaXMgYWxsIHRoZSB3YXkgdG8gaXRzIHJvb3Qgb3JpZ2luLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDc3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTk6MDQuMDk1MDEzMDg4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc3MDpcXHRcXG4gNzcxOlxcdFxcdCAgVGhpcyB2YWx1ZSBjYW4gYmUgY2hhbmdlZCBhZnRlciBib290IHVzaW5nIHRoZVxcbiA3NzI6XFx0XFx0ICAvcHJvYy9zeXMvdm0vbW1hcF9taW5fYWRkciB0dW5hYmxlLlxcbiA3NzM6XFx0XFxuIDc3NDpcXHRjb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbiA3NzU6XFx0XFx0Ym9vbFxcbiA3NzY6XFx0XFxuIDc3NzpcXHRjb25maWcgTUVNT1JZX0ZBSUxVUkVcXG4gNzc4OlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuIDc3OTpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG4gNzgwOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSByZWNvdmVyeSBmcm9tIGhhcmR3YXJlIG1lbW9yeSBlcnJvcnNcXFwiXFxuIDc4MTpcXHRcXHRzZWxlY3QgSU5URVJWQUxfVFJFRVxcbiA3ODI6XFx0XFx0aGVscFxcbiA3ODM6XFx0XFx0ICBFbmFibGVzIGNvZGUgdG8gcmVjb3ZlciBmcm9tIHNvbWUgbWVtb3J5IGZhaWx1cmVzIG9uIHN5c3RlbXNcXG4gNzg0OlxcdFxcdCAgd2l0aCBNQ0EgcmVjb3ZlcnkuIFRoaXMgYWxsb3dzIGEgc3lzdGVtIHRvIGNvbnRpbnVlIHJ1bm5pbmdcXG4gNzg1OlxcdFxcdCAgZXZlbiB3aGVuIHNvbWUgb2YgaXRzIG1lbW9yeSBoYXMgdW5jb3JyZWN0ZWQgZXJyb3JzLiBUaGlzIHJlcXVpcmVzXFxuIDc4NjpcXHRcXHQgIHNwZWNpYWwgaGFyZHdhcmUgc3VwcG9ydCBhbmQgdHlwaWNhbGx5IEVDQyBtZW1vcnkuXFxuIDc4NzpcXHRcXG4gNzg4OlxcdGNvbmZpZyBIV1BPSVNPTl9JTkpFQ1RcXG4gNzg5OlxcdFxcdHRyaXN0YXRlIFxcXCJIV1BvaXNvbiBwYWdlcyBpbmplY3RvclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTk6MDQuMDk1MTU3NzU4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjk1NTE0ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBGYWlsdXJlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB3ZSBuZWVkIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGVuYWJsZWQgaGVyZS4gSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLi4uIEknbSBwcmV0dHkgc3VyZSBgbWluX29yZGVyX2Zvcl9zcGxpdGAgbGl2ZXMgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBBbmQgdGhhdCBjb2RlIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgc2V0LiBSaWdodCwgc28gd2UgbmVlZCB0byBiZSB2ZXJ5IHN1cmUgdGhhdCBib3RoIENPTkZJR19NRU1PUllfRkFJTFVSRSBhbmQgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFIGFyZSBjb25maWd1cmVkLCBvciB3ZSBhcmUgZ29pbmcgdG8gaGF2ZSBhIHNlcmlvdXMgcHJvYmxlbS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgZ2xhbmNlIGF0IGBtbS9NYWtlZmlsZWAganVzdCB0byBkb3VibGUtY2hlY2sgdGhlIGJ1aWxkIGRlcGVuZGVuY2llcyBhbmQgZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeSB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTgxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1OTowOC4xMjQ3MTI2NzVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzMwOTg5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdlX21lbW9yeS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTEwMD1vYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xcbm1tL01ha2VmaWxlOjEwMTpvYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXFxubW0vTWFrZWZpbGUtMTAyLW9iai0kKENPTkZJR19QQUdFX0NPVU5URVIpICs9IHBhZ2VfY291bnRlci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjU5OjA4LjIzODAyOTI1NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTg3NDQ3OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHNpdHVhdGlvbiBhZ2Fpbi4gWWVhaCwgaXQncyBjbGVhciB0aGF0IGl0J3MgYWJzb2x1dGVseSBuZWNlc3NhcnkuIEJ1dCBub3cgSSdtIHNlZWluZyB0aGF0IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGFsc28gZXNzZW50aWFsLCBzcGVjaWZpY2FsbHkgdG8gYWxsb3cgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIHRvIGJlIHJlYWNoZWQgZnJvbSBgbWVtb3J5X2ZhaWx1cmVgIG9yIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLiBUaGF0IG1ha2VzIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIGhhbmRsaW5nIG1lbW9yeSBlcnJvcnMgYW5kIGh1Z2VwYWdlIG1hbmFnZW1lbnQuXG5cbkJ1dCB3YWl0IGEgbWludXRlLCBJIG5lZWQgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaCBoZXJlLiBJcyBgbWluX29yZGVyX2Zvcl9zcGxpdGAgKm9ubHkqIGNhbGxlZCB0aHJvdWdoIHRob3NlIHNwZWNpZmljIHBhdGhzIGRlcGVuZGVudCBvbiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCwgb3IgYXJlIHRoZXJlIG90aGVyIHBvdGVudGlhbCBjYWxsIHNpdGVzIEknbSBtaXNzaW5nPyBJIHNob3VsZCByZWFsbHkgZG91YmxlLWNoZWNrIHRoZSBlbnRpcmUgY29kZSBiYXNlLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIGBpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaGAgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciB1c2FnZXMgb2YgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIHdpdGhpbiB0aGF0IGhlYWRlci4gSSdkIGJlIGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9ucyBvciBkaXJlY3QgY2FsbHMuIEp1c3QgdG8gYmUgc3VyZS4gR290dGEgYmUgbWV0aWN1bG91cywgZXNwZWNpYWxseSB3aXRoIHNvbWV0aGluZyB0aGlzIGZ1bmRhbWVudGFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMyOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1OToxNC4yMjU0Nzk5ODlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvaHVnZV9tbS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY0MDpcXHR9XFxuIDY0MTpcXHRzdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIDY0MjpcXHR7XFxuIDY0MzpcXHRcXHRWTV9XQVJOX09OX09OQ0VfUEFHRSgxLCBwYWdlKTtcXG4gNjQ0OlxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA2NDU6XFx0fVxcbiA2NDY6XFx0XFxuIDY0NzpcXHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIDY0ODpcXHR7XFxuIDY0OTpcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oMSwgZm9saW8pO1xcbiA2NTA6XFx0XFx0cmV0dXJuIDA7XFxuIDY1MTpcXHR9XFxuIDY1MjpcXHRcXG4gNjUzOlxcdHN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4gNjU0OlxcdHtcXG4gNjU1OlxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTygxLCBmb2xpbyk7XFxuIDY1NjpcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjU3OlxcdH1cXG4gNjU4OlxcdFxcbiA2NTk6XFx0c3RhdGljIGlubGluZSBpbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTk6MTQuMjI1NTk5MzQ5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1ODY2MjIzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNlIG9uIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgYW5kIGl0J3MgbG9va2luZyBsaWtlIGlmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRpc2FibGVkLCB0aGUgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGZ1bmN0aW9uIGlzIHJlZHVjZWQgdG8gYSBzdGF0aWMgaW5saW5lIHRoYXQganVzdCByZXR1cm5zIHplcm8uIFRoYXQncyBhIGh1Z2UgcmVkIGZsYWcg4oCTIG9yIG1heWJlIGEgaHVnZSBwYWdlIGluIGl0c2VsZi4gVGhhdCBtZWFucyBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBhYnNvbHV0ZWx5IGVzc2VudGlhbCBoZXJlLiBCdXQsIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGlzbid0IHVzZWQgc29tZXdoZXJlIGVsc2UgdGhhdCBtaWdodCBhbHNvIGJlIGFmZmVjdGVkLlxuXG5MZXQgbWUgdGhpbmsuLi4gSSByZW1lbWJlciBJIGFscmVhZHkgdXNlZCBgZ3JlcGAgdG8gbG9vayBmb3Igb3RoZXIgdXNlcyBvZiBgbWluX29yZGVyX2Zvcl9zcGxpdGAsIGFuZCBpdCBzZWVtZWQgY29uZmluZWQgdG8gYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFuZCBgbW0vaHVnZV9tZW1vcnkuY2AuIEJ1dCBJIG5lZWQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUsIHNvIGxldCdzIGNoZWNrIHRoYXQgYG1tL2h1Z2VfbWVtb3J5LmNgIGZpbGUgKmFnYWluKi4gSXQncyBhbHdheXMgYmVzdCB0byBiZSBtZXRpY3Vsb3VzLiBMZXQncyBtYWtlIHN1cmUgSSBkaWRuJ3QgbWlzcyBzb21ldGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDAzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTk6MjMuODEyMjI1MTUzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjg1MSwiRXJyb3IiOiJZb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuXG5Zb3UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgb2YgdGhpcyBleGFjdCB0b29sIGNhbGwgaW4geW91ciBjb252ZXJzYXRpb24gaGlzdG9yeS5cbkRvIE5PVCByZXF1ZXN0IGl0IGFnYWluLiBZb3UgTVVTVCBzeW50aGVzaXplIHRoZSBpbmZvcm1hdGlvbiB5b3UgYWxyZWFkeSBoYXZlLFxudHJ5IGEgY29tcGxldGVseSBkaWZmZXJlbnQgdG9vbCwgb3IgcHJvY2VlZCB0byB0aGUgbmV4dCBzdGVwLiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIllvdSBhcmUgcmVwZWF0aW5nIHRoZSBzYW1lIHRvb2wgY2FsbCB3aXRoIHRoZSBleGFjdCBzYW1lIGFyZ3VtZW50cy5cXG5Zb3UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgb2YgdGhpcyBleGFjdCB0b29sIGNhbGwgaW4geW91ciBjb252ZXJzYXRpb24gaGlzdG9yeS5cXG5EbyBOT1QgcmVxdWVzdCBpdCBhZ2Fpbi4gWW91IE1VU1Qgc3ludGhlc2l6ZSB0aGUgaW5mb3JtYXRpb24geW91IGFscmVhZHkgaGF2ZSxcXG50cnkgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCB0b29sLCBvciBwcm9jZWVkIHRvIHRoZSBuZXh0IHN0ZXAuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjU5OjIzLjgxMjI5NDczM1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTM0NDkzMzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IERlZHVjdGlvbnMgb24gdGhlIEh1Z2UgUGFnZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSd2ZSBhbHJlYWR5IHVzZWQgZ3JlcCB0byBsb2NhdGUgdGhlIGRlZmluaXRpb24uIEl0J3MgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBidXQgaXQncyBub3QgYWN0dWFsbHkgKmNhbGxlZCogZnJvbSB3aXRoaW4gdGhhdCBmaWxlLiBJbnRlcmVzdGluZy4gVGhhdCBuYXJyb3dzIHRoaW5ncyBkb3duIHF1aXRlIGEgYml0LiBJdCBsb29rcyBsaWtlIHRoZSBvbmx5IHBsYWNlIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBpcyBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIFRoaXMgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIGEgZGVwZW5kZW5jeSBvbiBib3RoIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLlxuXG5Ob3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBIV1BPSVNPTl9JTkpFQ1RgIGlzIGFsc28gYSByZXF1aXJlbWVudCBmb3IgdGVzdGluZyB0aGlzIHNjZW5hcmlvLiBgSFdQT0lTT05fSU5KRUNUYCBhbGxvd3MgdXMgdG8gaW5qZWN0IG1lbW9yeSBmYWlsdXJlcywgd2hpY2ggaXMgcHJlY2lzZWx5IHdoYXQgd2UncmUgY29uY2VybmVkIHdpdGggaGVyZS4gQW5kIGZyb20gbWVtb3J5LCBgTUFEVl9IV1BPSVNPTmAgaXMgYWxzbyBhdmFpbGFibGUgd2hlbiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyBlbmFibGVkLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIGBtYWR2aXNlYCBzeXN0ZW0gY2FsbCwganVzdCB0byBiZSBzdXJlIGFib3V0IGBNQURWX0hXUE9JU09OYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBIV1BPSVNPTl9JTkpFQ1RgIGVuYWJsZXMgdGhlIGZlYXR1cmVzIEkgbmVlZCB0byB0ZXN0IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTMxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjU5OjI5Ljk0Njc5MTE0NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MzA5NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1BRFZfSFdQT0lTT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0xNDkzPXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE0OTUtXFx0c3dpdGNoIChtYWR2X2JlaGF2aW9yLVxcdTAwM2ViZWhhdmlvcikge1xcbm1tL21hZHZpc2UuYzoxNDk2OlxcdGNhc2UgTUFEVl9IV1BPSVNPTjpcXG5tbS9tYWR2aXNlLmMtMTQ5Ny1cXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxcbi0tXFxubW0vbWFkdmlzZS5jPTE1MTk9bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTU1Mi1cXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxcbm1tL21hZHZpc2UuYzoxNTUzOlxcdGNhc2UgTUFEVl9IV1BPSVNPTjpcXG5tbS9tYWR2aXNlLmMtMTU1NC0jZW5kaWZcXG4tLVxcbm1tL21hZHZpc2UuYz0xODg4PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxcbi0tXFxubW0vbWFkdmlzZS5jLTE5NDQtICogIE1BRFZfS0VFUE9ORk9SSyAtIHVuZG8gdGhlIGVmZmVjdCBvZiBNQURWX1dJUEVPTkZPUktcXG5tbS9tYWR2aXNlLmM6MTk0NTogKiAgTUFEVl9IV1BPSVNPTiAtIHRyaWdnZXIgbWVtb3J5IGVycm9yIGhhbmRsZXIgYXMgaWYgdGhlIGdpdmVuIG1lbW9yeSByYW5nZVxcbm1tL21hZHZpc2UuYy0xOTQ2LSAqXFx0XFx0d2VyZSBjb3JydXB0ZWQgYnkgdW5yZWNvdmVyYWJsZSBoYXJkd2FyZSBtZW1vcnkgZmFpbHVyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTk6MzAuMDkyMTA4OTgzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3OTg0MzQzNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgTUFEVl9IV1BPSVNPTmAgaXMgaW5kZWVkIGF2YWlsYWJsZSB3aGVuIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGVuYWJsZWQuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IHRoaW5raW5nIGlzIHRoYXQgZnV6emluZyBgbWFkdmlzZWAgd2l0aCBlaXRoZXIgYE1BRFZfSFdQT0lTT05gIG9yIGBNQURWX1NPRlRfT0ZGTElORWAgcHJvdmlkZXMgYSB2aWFibGUgcGF0aCB0byByZWFjaCB0aGUgYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgZnVuY3Rpb25zLCB3aGljaCBhcmUgbm93IG15IHByaW1hcnkgZm9jdXMuIFRob3NlIGFyZSBkZWZpbml0ZWx5IGtleSB0YXJnZXRzLlxuXG5IYW5nIG9uLi4uIEknbSBhbHNvIGNvbnNpZGVyaW5nIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBhcyBhbm90aGVyIHBvdGVudGlhbCB0YXJnZXQuIEl0J3MgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBhbmQgd2hpbGUgaXQncyBub3QgYSBzdGF0aWMgZnVuY3Rpb24sIEkgbmVlZCB0byBjaGVjayBpZiBpdCdzIGFjdHVhbGx5IGV4cG9ydGVkIG9yIG5vdC4gRXZlbiBpZiBpdCdzIG5vdCBleHBvcnRlZCwgYmVpbmcgYSBnbG9iYWwgd2l0aGluIHRoYXQgZmlsZSBtYWtlcyBpdCB3b3J0aCBsb29raW5nIGludG8gZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMTEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTk6MzQuODkwNTQ3Mjk5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzU0ODM3MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qbWluX29yZGVyX2Zvcl9zcGxpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdlX21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1OTozNC45ODQxMDYyMzJaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ5NzI4ODk3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgS2VybmVsIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIHRoaXMgZnVuY3Rpb24gaXNuJ3QgZXhwb3J0ZWQsIGJ1dCB0aGUgZmFjdCB0aGF0IGl0J3Mgbm9uLXN0YXRpYyBtZWFucyBpdCdsbCBoYXZlIGl0cyBvd24gZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCdzIGZvY3VzIG9uIHRob3NlIHN5bWJvbHM6IGBtaW5fb3JkZXJfZm9yX3NwbGl0YCwgYG1lbW9yeV9mYWlsdXJlYCwgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLiBIbW0sIGFjdHVhbGx5LCBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCBzZWVtIGxpa2UgcHJvbWlzaW5nIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuIFRob3NlIGZlZWwgbGlrZSB0aGUga2luZHMgb2YgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgdHJpZ2dlcmVkIGluIGludGVyZXN0aW5nIHdheXMuXG5cblJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBsZXQncyBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBhcmUgc2V0LlxuXG5Ob3csIHdoYXQgYWJvdXQgYENPTkZJR19IV1BPSVNPTl9JTkpFQ1RgPyBUaGF0IGNvdWxkIGJlIHVzZWZ1bCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyBTeXprYWxsZXIuIElmIGl0IGFsbG93cyBpbmplY3Rpb24gdGhyb3VnaCBkZWJ1Z2ZzLCBpdCdzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGNvbnNpZGVyLiBMZXQncyBhZGQgdGhhdCBvbmUgdG8gdGhlIGxpc3QgYXMgd2VsbC5cblxuT2theSwgbGV0J3MgY2lyY2xlIGJhY2sgdG8gYG1pbl9vcmRlcl9mb3Jfc3BsaXRgLiBJJ3ZlIGFscmVhZHkgc2Nhbm5lZCBgbW0vYCBhbmQgYGluY2x1ZGUvbGludXgvYCBwcmV0dHkgdGhvcm91Z2hseS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGlmIGFueSBkcml2ZXJzIGFyZSBjYWxsaW5nIHRoYXQgZnVuY3Rpb24uIFRpbWUgdG8gYnJvYWRlbiB0aGUgc2VhcmNoIGEgbGl0dGxlIGFuZCBzZWUgaWYgYW55dGhpbmcgaXMgdXNpbmcgaXQgb3V0c2lkZSBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcyMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1OTo0MS40ODEzOTkzNDZaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzY4OTA5NDYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjU5OjQzLjQ1ODMwMDEyMloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTUwNDM2NTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkNvbXBvbmVudCBJbnRlcmFjdGlvbiBBbmFseXNpcyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUsIGFuZCB0aGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBwb3BzIGludG8gbXkgaGVhZCBpczogKklzIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBvciBtb2R1bGUgb3Igd2hhdGV2ZXIgd2UncmUgZGVhbGluZyB3aXRoLCBiZWluZyBpbnZva2VkIGZyb20gYW55d2hlcmUgZWxzZSB3aXRoaW4gdGhlIHN5c3RlbT8qIEkgbmVlZCB0byBrbm93IHRoZSBjYWxsaW5nIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBpcyBjcml0aWNhbCBmb3IgYW55IGRvd25zdHJlYW0gaW1wYWN0IGFuYWx5c2lzLiBLbm93aW5nIHdobyByZWxpZXMgb24gdGhpcyB3aWxsIGluZmx1ZW5jZSBhbnkgcmVmYWN0b3JpbmcgSSBkbyBvciBidWdzIEkgYW0gYWJvdXQgdG8gZml4LiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCByaXBwbGUgZWZmZWN0cyBpZiBJIGNoYW5nZSBhbnl0aGluZyBoZXJlLiBJIGhhdmUgdG8ga25vdyBhbGwgdGhlIHRvdWNocG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzMwMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDQ6NTk6NDcuNjA4NzQwMjA4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODgwNDc5OTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1OTo0Ny43OTY3OTY4NzRaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU1NTQzOTIwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBhZGRyZXNzaW5nIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBkYXRhIHJhY2Ugb3IgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlIGNvZGUgbG9va3MgY2xlYW4sIHJlcGxhY2luZyBkaXJlY3QgYWNjZXNzIHRvIGBmb2xpby1cdTAwM2VtYXBwaW5nYCB3aXRoIGEgYFJFQURfT05DRWAgYW5kIGNhY2hpbmcgdGhlIHJlc3VsdCBsb2NhbGx5LlxuXG5Gcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhpcyBmdW5jdGlvbiwgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgLCBpcyBvbmx5IGNhbGxlZCBmcm9tIHdpdGhpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIEkgbmVlZCB0byByZXZpZXcgdGhlIHBhdGNoIG1vcmUgdGhvcm91Z2hseSwgYnV0IGl0IGxvb2tzIGxpa2UgaXQncyBndWFyZGluZyBhZ2FpbnN0IGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGUgbG9naWMgc2VlbXMgY29ycmVjdDogaWYgdGhlIGZvbGlvIGhhcyBiZWVuIHRydW5jYXRlZCAobWVhbmluZyBgbWFwcGluZ2AgY291bGQgYmUgTlVMTCksIHRoZSBmdW5jdGlvbiBub3cgcmV0dXJucyAwLCB3aGljaCBzaG91bGQgcHJldmVudCBhIGNyYXNoLlxuXG5JJ20gbWFraW5nIGEgbWVudGFsIG5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB0aHJvdWdoIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLCB3aGljaCB0aGVtc2VsdmVzIGFyZSB0cmlnZ2VyZWQgYnkgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIGFuZCBgbWFkdmlzZShNQURWX1NPRlRfT0ZGTElORSlgLiBTbywgdGhlIGZpeCBpc24ndCBqdXN0IHRoZW9yZXRpY2FsOyBpdCdzIGEgZnVuY3Rpb25hbGx5IHJlYWNoYWJsZSBwYXJ0IG9mIHRoZSBzeXN0ZW0uXG5cbk15IG1haW4gZm9jdXMgd2lsbCBiZSBvbiBgbWluX29yZGVyX2Zvcl9zcGxpdGAsIGBtZW1vcnlfZmFpbHVyZWAsIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gSSdsbCBhbHNvIHdhbnQgdG8ga2VlcCBpbiBtaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczogYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYE1FTU9SWV9GQUlMVVJFYCwgYW5kIGBIV1BPSVNPTl9JTkpFQ1RgLiBOb3csIHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCB0byBlbnN1cmUgdGhpcyBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDk4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA0OjU5OjU2LjM1MjIzOTM5OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0ODQ1MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9ODQzPWNvbmZpZyBNTV9JRFxcbi0tXFxubW0vS2NvbmZpZy04NDUtXFxubW0vS2NvbmZpZzo4NDY6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL0tjb25maWctODQ3LVxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg2ND1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODY5LVxcbm1tL0tjb25maWc6ODcwOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTg3MS1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg3Ni1cXG5tbS9LY29uZmlnOjg3NzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxcbm1tL0tjb25maWctODc4LVxcdFxcdGJvb2wgXFxcIm1hZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg4NS1cXG5tbS9LY29uZmlnOjg4NjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg4Ny1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODkzPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05MDItXFxubW0vS2NvbmZpZzo5MDM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTkwNC1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTEyLVxcbm1tL0tjb25maWc6OTEzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTE0LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTIwLVxcbm1tL0tjb25maWc6OTIxOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05MjItXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkyOC1cXG5tbS9LY29uZmlnOjkyOTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTkzMC1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTkzOD1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctOTQ3LVxcbm1tL0tjb25maWc6OTQ4OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXFxubW0vS2NvbmZpZy05NDktXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk1Ni1cXG5tbS9LY29uZmlnOjk1NzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTk1OC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk2NC1cXG5tbS9LY29uZmlnOjk2NTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTY2LVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NzItXFxubW0vS2NvbmZpZzo5NzM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05NzQtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNDo1OTo1Ni40ODcwOTA3NzdaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg3Njc2ODUzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBtbS9LY29uZmlnYCBMaW5lIDg0NioqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcsIGxldCdzIGdvIHN0cmFpZ2h0IGludG8gYG1tL0tjb25maWdgIGFuZCB6b29tIGluIG9uIGxpbmUgODQ2LiBObyBiZWF0aW5nIGFyb3VuZCB0aGUgYnVzaC4gSSBrbm93IHRoZXJlJ3MgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiBvciBzZWN0aW9uIG9mIGNvZGUgdGhhdCBJJ20gYWZ0ZXIsIGFuZCBnb2luZyBkaXJlY3RseSB0byB0aGUgbGlrZWx5IGxvY2F0aW9uIGlzIHRoZSBtb3N0IGVmZmljaWVudCB1c2Ugb2YgbXkgdGltZSwgYW5kIHVuZGVyc3RhbmRpbmcgaG93IG1lbW9yeSBtYW5hZ2VtZW50IGlzIGNvbmZpZ3VyZWQuIFRoaXMgbGlrZWx5IHJlbGF0ZXMgdG8gYSBwYXJ0aWN1bGFyIGZlYXR1cmUgSSdtIGVpdGhlciB0cnlpbmcgdG8gZW5hYmxlL2Rpc2FibGUsIGRpYWdub3NlLCBvciBwb3RlbnRpYWxseSBjb250cmlidXRlIGEgcGF0Y2ggdG8uIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB3aGF0IHRoZSBjb250ZXh0IG1pZ2h0IGJlIGFyb3VuZCBsaW5lIDg0NiDigJMgaXQgY291bGQgYmUgcmVsYXRlZCB0byBOVU1BLCBodWdlIHBhZ2VzLCBtZW1vcnkgaG90cGx1Zywgb3Igc29tZSBvdGhlciBrZXkgbWVtb3J5LW1hbmFnZW1lbnQgZmVhdHVyZS4gTXkgZ29hbCBpcyB0byBxdWlja2x5IGdyYXNwIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGxvZ2ljIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1lbW9yeSBzdWJzeXN0ZW0uIFRoaXMgbWlnaHQgYmUgcGFydCBvZiB1bmRlcnN0YW5kaW5nIGEgYnVpbGQgZXJyb3IsIG9yIHRyYWNraW5nIGRvd24gYW4gdW5leHBlY3RlZCBiZWhhdmlvci4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTAwNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA1OjAwOjA2LjM2Mzg2MjgyOFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NDA6XFx0XFx0ICBTYXkgWSBpZiB5b3VyIHN5c3RlbSBoYXMgbG90cyBvZiBtZW1vcnkuIFNheSBOIGlmIHlvdSBhcmVcXG4gODQxOlxcdFxcdCAgbWVtb3J5IGNvbnN0cmFpbmVkLlxcbiA4NDI6XFx0XFxuIDg0MzpcXHRjb25maWcgTU1fSURcXG4gODQ0OlxcdFxcdGRlZl9ib29sIG5cXG4gODQ1OlxcdFxcbiA4NDY6XFx0bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiA4NDc6XFx0XFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4gODQ4OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFxcdTAwMjZcXHUwMDI2ICFQUkVFTVBUX1JUXFxuIDg0OTpcXHRcXHRzZWxlY3QgQ09NUEFDVElPTlxcbiA4NTA6XFx0XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbiA4NTE6XFx0XFx0c2VsZWN0IE1NX0lEXFxuIDg1MjpcXHRcXHRoZWxwXFxuIDg1MzpcXHRcXHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcXG4gODU0OlxcdFxcdCAgaHVnZSB0bGIgdHJhbnNwYXJlbnRseSB0byB0aGUgYXBwbGljYXRpb25zIHdoZW5ldmVyIHBvc3NpYmxlLlxcbiA4NTU6XFx0XFx0ICBUaGlzIGZlYXR1cmUgY2FuIGltcHJvdmUgY29tcHV0aW5nIHBlcmZvcm1hbmNlIHRvIGNlcnRhaW5cXG4gODU2OlxcdFxcdCAgYXBwbGljYXRpb25zIGJ5IHNwZWVkaW5nIHVwIHBhZ2UgZmF1bHRzIGR1cmluZyBtZW1vcnlcXG4gODU3OlxcdFxcdCAgYWxsb2NhdGlvbiwgYnkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiB0bGIgbWlzc2VzIGFuZCBieSBzcGVlZGluZ1xcbiA4NTg6XFx0XFx0ICB1cCB0aGUgcGFnZXRhYmxlIHdhbGtpbmcuXFxuIDg1OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDU6MDA6MDYuMzY0MDA5NTg4WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2NDY4MDU1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQsIGl0J3MgcmVsaWFudCBvbiBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBiZWluZyBlbmFibGVkLCB3aGljaCBpcyB0eXBpY2FsbHkgc3RhbmRhcmQgYWNyb3NzIGFyY2hpdGVjdHVyZXMsIGFuZCBjcnVjaWFsbHkgKm5vdCogYmVpbmcgcHJlZW1wdF9ydC4gRmFpciBlbm91Z2guIEEgcHJldHR5IGNvbW1vbiBjb25maWcgb3B0aW9uLCBub3RoaW5nIHRvbyBzdXJwcmlzaW5nIHRoZXJlLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBgTUVNT1JZX0ZBSUxVUkVgLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIGFuZCBzZWUgaG93IHRoZXNlIHR3byBwaWVjZXMgb2YgdGhlIHB1enpsZSBpbnRlcmFjdC4gV2hlcmUgZG8gdGhlc2UgaW50ZXJzZWN0IGFuZCBpbnRlcmFjdD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGludGVyZXN0aW5nIGludGVyYWN0aW9ucyB0aGF0IG5lZWQgZnVydGhlciBpbnZlc3RpZ2F0aW9uPyBMZXQncyBjaGVjayB0aG9zZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTg3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNTowMDoxNC4wMTA4MTgwMjJaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMjg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc3MDpcXHRcXG4gNzcxOlxcdFxcdCAgVGhpcyB2YWx1ZSBjYW4gYmUgY2hhbmdlZCBhZnRlciBib290IHVzaW5nIHRoZVxcbiA3NzI6XFx0XFx0ICAvcHJvYy9zeXMvdm0vbW1hcF9taW5fYWRkciB0dW5hYmxlLlxcbiA3NzM6XFx0XFxuIDc3NDpcXHRjb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbiA3NzU6XFx0XFx0Ym9vbFxcbiA3NzY6XFx0XFxuIDc3NzpcXHRjb25maWcgTUVNT1JZX0ZBSUxVUkVcXG4gNzc4OlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuIDc3OTpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG4gNzgwOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSByZWNvdmVyeSBmcm9tIGhhcmR3YXJlIG1lbW9yeSBlcnJvcnNcXFwiXFxuIDc4MTpcXHRcXHRzZWxlY3QgSU5URVJWQUxfVFJFRVxcbiA3ODI6XFx0XFx0aGVscFxcbiA3ODM6XFx0XFx0ICBFbmFibGVzIGNvZGUgdG8gcmVjb3ZlciBmcm9tIHNvbWUgbWVtb3J5IGZhaWx1cmVzIG9uIHN5c3RlbXNcXG4gNzg0OlxcdFxcdCAgd2l0aCBNQ0EgcmVjb3ZlcnkuIFRoaXMgYWxsb3dzIGEgc3lzdGVtIHRvIGNvbnRpbnVlIHJ1bm5pbmdcXG4gNzg1OlxcdFxcdCAgZXZlbiB3aGVuIHNvbWUgb2YgaXRzIG1lbW9yeSBoYXMgdW5jb3JyZWN0ZWQgZXJyb3JzLiBUaGlzIHJlcXVpcmVzXFxuIDc4NjpcXHRcXHQgIHNwZWNpYWwgaGFyZHdhcmUgc3VwcG9ydCBhbmQgdHlwaWNhbGx5IEVDQyBtZW1vcnkuXFxuIDc4NzpcXHRcXG4gNzg4OlxcdGNvbmZpZyBIV1BPSVNPTl9JTkpFQ1RcXG4gNzg5OlxcdFxcdHRyaXN0YXRlIFxcXCJIV1BvaXNvbiBwYWdlcyBpbmplY3RvclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDU6MDA6MTQuMDEyMDIzNjcyWiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2OTU2Nzg2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzpcblxuKipBbmFseXppbmcgTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcqKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBgTUVNT1JZX0ZBSUxVUkVgLiBUaGF0J3MgYSBrZXkgZmVhdHVyZSwgb2J2aW91c2x5LCBidXQgaXQgaGluZ2VzIG9uIHdoZXRoZXIgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgY2FuIGV2ZW4gc3VwcG9ydCBpdCwgcmlnaHQ/IFNvLCBgTUVNT1JZX0ZBSUxVUkVg4oCZcyBleGlzdGVuY2UgaXMgZGlyZWN0bHkgY29uZGl0aW9uZWQgYnkgYEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVgLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIG5vIGhhcmR3YXJlIHN1cHBvcnQsIG5vIGZlYXR1cmUuXG5cbkFuZCwgb2YgY291cnNlLCB0aGF0J3MgYWxtb3N0IGEgZ2l2ZW4gb24gbW9kZXJuIGFyY2hpdGVjdHVyZXMgbGlrZSB4ODYgYW5kIGFybTY0LiBUaG9zZSBwbGF0Zm9ybXMgYXJlIHByZXR0eSB3ZWxsLWVzdGFibGlzaGVkIGluIHRoZWlyIHN1cHBvcnQgZm9yIHRoZXNlIGtpbmRzIG9mIG1lbW9yeSBlcnJvciBub3RpZmljYXRpb25zLCBlc3BlY2lhbGx5IGF0IHRoZSBoYXJkd2FyZSBsZXZlbC5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB3ZSBjaGVjayBgSFdQT0lTT05fSU5KRUNUYC4gV2UgbmVlZCB0byBzZWUgaWYgaXQgcGxheXMgYW55IHJvbGUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxMjAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDA1OjAwOjE4LjcwNzcwNTMyNloiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQxMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzg4LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzg4OlxcdGNvbmZpZyBIV1BPSVNPTl9JTkpFQ1RcXG4gNzg5OlxcdFxcdHRyaXN0YXRlIFxcXCJIV1BvaXNvbiBwYWdlcyBpbmplY3RvclxcXCJcXG4gNzkwOlxcdFxcdGRlcGVuZHMgb24gTUVNT1JZX0ZBSUxVUkUgXFx1MDAyNlxcdTAwMjYgREVCVUdfS0VSTkVMIFxcdTAwMjZcXHUwMDI2IFBST0NfRlNcXG4gNzkxOlxcdFxcdHNlbGVjdCBQUk9DX1BBR0VfTU9OSVRPUlxcbiA3OTI6XFx0XFxuIDc5MzpcXHRjb25maWcgTk9NTVVfSU5JVElBTF9UUklNX0VYQ0VTU1xcbiA3OTQ6XFx0XFx0aW50IFxcXCJUdXJuIG9uIG1tYXAoKSBleGNlc3Mgc3BhY2UgdHJpbW1pbmcgYmVmb3JlIGJvb3RpbmdcXFwiXFxuIDc5NTpcXHRcXHRkZXBlbmRzIG9uICFNTVVcXG4gNzk2OlxcdFxcdGRlZmF1bHQgMVxcbiA3OTc6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwNTowMDoxOC43MDkyNDk0OTZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI0MzM4NDkyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBmb3IgYEhXUE9JU09OX0lOSkVDVGAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIGRlcGVuZGVuY2llcyBqdW1wIG91dCBhdCBtZS4gYEhXUE9JU09OX0lOSkVDVGAgcmVsaWVzIG9uIGBNRU1PUllfRkFJTFVSRWAsIGBERUJVR19LRVJORUxgLCBhbmQgYFBST0NfRlNgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBGb3IgdGhpcyBzcGVjaWZpYyBmaXgsIHdlJ3JlIHJlYWxseSBmb2N1c2luZyBvbiBgTUVNT1JZX0ZBSUxVUkVgIGJlaW5nIHRoZSBjcml0aWNhbCBvbmUgdG8gaGF2ZSBlbmFibGVkLiBBbmQgc2luY2UgYEhXUE9JU09OX0lOSkVDVGAgaXMgdGhlIGZlYXR1cmUgaW4gcXVlc3Rpb24sIGxldCdzIGtlZXAgdGhhdCBpbiBtaW5kIGFzIHdlbGwuIFdlJ2xsIGFsc28gbmVlZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBpdCBzZWVtcywgb3IgdGhlIHJhY2UgbWF5IG5vdCBiZSBleGVyY2lzZWQuXG5cblRoZSBjb3JlIG9mIHRoaXMgaXMgYXJvdW5kIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG1lbW9yeSBmYWlsdXJlIG1lY2hhbmlzbXMuIFdlJ3JlIHRhbGtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGBmb2xpby1cdTAwM2VtYXBwaW5nYCBhY2Nlc3MgYW5kIHBvdGVudGlhbCByYWNlcyBvciBudWxsIGRlcmVmZXJlbmNlcy4gVGhlIHJlYWwgZW50cnkgcG9pbnRzIHRvIHRlc3QgYXJlIHRoZSBvbmVzIGV4cG9zZWQgYnkgaGFyZHdhcmUgbWVtb3J5IGVycm9yIGluamVjdGlvbiwgdGhlIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBhbmQgYE1BRFZfU09GVF9PRkZMSU5FYCBzY2VuYXJpb3MgdGhhdCBhcmUgbWFuYWdlZCBieSBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gVGhhdCdzIHdoZXJlIHdlJ2xsIHNlZSB0aGlzIGNvbmN1cnJlbmN5IGlzc3VlLlxuXG5UaGUgcmVhc29uaW5nIGhlcmUgaXMgc29saWQsIHdlJ3JlIGZ1enppbmcgdGhvc2UgZW50cnkgcG9pbnRzIHdpdGggYENPTkZJR19NRU1PUllfRkFJTFVSRWAgZW5hYmxlZC4gVGhhdCB3aWxsIGV4ZXJjaXNlIHRoZSBtb2RpZmllZCBjb2RlIGFuZCwgaG9wZWZ1bGx5LCByZXZlYWwgdGhlIHJhY2UgYW5kIGRlbW9uc3RyYXRlIHRoYXQgaXQncyByZXNvbHZlZC5cblxuTm93LCBhIHF1aWNrIGNoZWNrLi4uaXMgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIHN0YXRpYyBpbmxpbmUgd2hlbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRpc2FibGVkPyBZdXAsIHF1aWNrbHkgbG9va2VkIGF0IGBpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaGAgYW5kIGNvbmZpcm1lZCBpdC4gU28sIHRvIGJlIGNsZWFyLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzICpyZXF1aXJlZCogdG8gZXhlcmNpc2UgdGhpcyBidWcgaW4gc29tZSBjb2RlIHBhdGhzLlxuXG5BbHJpZ2h0LCB0aGF0J3MgZW5vdWdoIGFuYWx5c2lzLCB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MjgsIk91dHB1dFRva2VucyI6MTk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDU6MDA6MjYuOTUyNjM4NzQ0WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2NjE4MTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIkhXUE9JU09OX0lOSkVDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgICBcIm1lbW9yeV9mYWlsdXJlXCIsXG4gICAgXCJzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRhdGEgcmFjZSBhbmQgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgbWluX29yZGVyX2Zvcl9zcGxpdGAgd2hlbiBhY2Nlc3NpbmcgYGZvbGlvLVxcdTAwM2VtYXBwaW5nYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIGhhcmR3YXJlIG1lbW9yeSBlcnJvciBpbmplY3Rpb24gbWVjaGFuaXNtcyAobGlrZSBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgb3IgYE1BRFZfU09GVF9PRkZMSU5FYCksIHdoaWNoIGFyZSBoYW5kbGVkIGJ5IGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLiBGdXp6aW5nIHRoZXNlIGVudHJ5IHBvaW50cyB3aXRoIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGVuYWJsZWQgd2lsbCBleGVyY2lzZSB0aGUgbW9kaWZpZWQgY29kZSBhbmQgZW5zdXJlIHRoZSBjb25jdXJyZW5jeSBpc3N1ZSBpcyByZXNvbHZlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIkhXUE9JU09OX0lOSkVDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgICBcIm1lbW9yeV9mYWlsdXJlXCIsXG4gICAgXCJzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRhdGEgcmFjZSBhbmQgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgbWluX29yZGVyX2Zvcl9zcGxpdGAgd2hlbiBhY2Nlc3NpbmcgYGZvbGlvLVxcdTAwM2VtYXBwaW5nYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIGhhcmR3YXJlIG1lbW9yeSBlcnJvciBpbmplY3Rpb24gbWVjaGFuaXNtcyAobGlrZSBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgb3IgYE1BRFZfU09GVF9PRkZMSU5FYCksIHdoaWNoIGFyZSBoYW5kbGVkIGJ5IGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLiBGdXp6aW5nIHRoZXNlIGVudHJ5IHBvaW50cyB3aXRoIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGVuYWJsZWQgd2lsbCBleGVyY2lzZSB0aGUgbW9kaWZpZWQgY29kZSBhbmQgZW5zdXJlIHRoZSBjb25jdXJyZW5jeSBpc3N1ZSBpcyByZXNvbHZlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowsrlfm[1] Phase: Succeeded StartedAt: 2026-08-04 05:00:38 +0000 UTC FinishedAt: 2026-08-04 05:00:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrlfm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-04 05:00:38 +0000 UTC FinishedAt: 2026-08-04 05:00:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrlfm[2] Phase: Succeeded StartedAt: 2026-08-04 05:00:38 +0000 UTC FinishedAt: 2026-08-04 08:50:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:00:38 +0000 UTC FinishedAt: 2026-08-04 08:50:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:00:38 +0000 UTC FinishedAt: 2026-08-04 05:00:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:00:38 +0000 UTC FinishedAt: 2026-08-04 05:00:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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-workflowsrlfm/series-workflowsrlfm-convert-artifact-2930921928/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:00:48 +0000 UTC FinishedAt: 2026-08-04 05:19:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:00:48 +0000 UTC FinishedAt: 2026-08-04 05:19:38 +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:*d56ffe71-ab85-410d-ace0-8a1171085c57,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-workflowsrlfm/series-workflowsrlfm-convert-artifact-2930921928/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": "3091b5f4-3633-4bd7-8dc8-03da44e01ead", "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-workflowsrlfm/series-workflowsrlfm-build-action-59784766/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:00:48 +0000 UTC FinishedAt: 2026-08-04 05:19:28 +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:*d56ffe71-ab85-410d-ace0-8a1171085c57,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-workflowsrlfm/series-workflowsrlfm-convert-artifact-2930921928/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": "3091b5f4-3633-4bd7-8dc8-03da44e01ead", "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-workflowsrlfm/series-workflowsrlfm-build-action-59784766/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:19:38 +0000 UTC FinishedAt: 2026-08-04 05:19:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:19:38 +0000 UTC FinishedAt: 2026-08-04 05:19:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:19:38 +0000 UTC FinishedAt: 2026-08-04 05:19:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:19:38 +0000 UTC FinishedAt: 2026-08-04 05:19:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-workflowsrlfm/series-workflowsrlfm-convert-artifact-3014007471/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:19:48 +0000 UTC FinishedAt: 2026-08-04 05:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:19:48 +0000 UTC FinishedAt: 2026-08-04 05:21:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3091b5f4-3633-4bd7-8dc8-03da44e01ead,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-workflowsrlfm/series-workflowsrlfm-build-action-59784766/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-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:21:51 +0000 UTC FinishedAt: 2026-08-04 05:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:21:51 +0000 UTC FinishedAt: 2026-08-04 05:21:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:21:51 +0000 UTC FinishedAt: 2026-08-04 05:41:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:21:51 +0000 UTC FinishedAt: 2026-08-04 05:41:47 +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:*d56ffe71-ab85-410d-ace0-8a1171085c57,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-workflowsrlfm/series-workflowsrlfm-convert-artifact-3014007471/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": "cdca03a9-aca6-43e9-89f6-c7acdcc59317", "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-workflowsrlfm/series-workflowsrlfm-build-action-3451250243/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:21:51 +0000 UTC FinishedAt: 2026-08-04 05:41:37 +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:*d56ffe71-ab85-410d-ace0-8a1171085c57,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-workflowsrlfm/series-workflowsrlfm-convert-artifact-3014007471/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": "cdca03a9-aca6-43e9-89f6-c7acdcc59317", "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-workflowsrlfm/series-workflowsrlfm-build-action-3451250243/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:41:47 +0000 UTC FinishedAt: 2026-08-04 05:41:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:41:47 +0000 UTC FinishedAt: 2026-08-04 05:41:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:41:47 +0000 UTC FinishedAt: 2026-08-04 05:43:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:41:47 +0000 UTC FinishedAt: 2026-08-04 05:43:38 +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:*cdca03a9-aca6-43e9-89f6-c7acdcc59317,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-workflowsrlfm/series-workflowsrlfm-build-action-3451250243/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-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:43:48 +0000 UTC FinishedAt: 2026-08-04 08:50:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:43:48 +0000 UTC FinishedAt: 2026-08-04 08:50:54 +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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"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:*3091b5f4-3633-4bd7-8dc8-03da44e01ead,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cdca03a9-aca6-43e9-89f6-c7acdcc59317,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-workflowsrlfm/series-workflowsrlfm-build-action-59784766/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-workflowsrlfm/series-workflowsrlfm-build-action-3451250243/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:43:48 +0000 UTC FinishedAt: 2026-08-04 05:43:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:43:48 +0000 UTC FinishedAt: 2026-08-04 05:43:52 +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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"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-workflowsrlfm/series-workflowsrlfm-convert-artifact-102075752/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:43:48 +0000 UTC FinishedAt: 2026-08-04 05:43:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:43:48 +0000 UTC FinishedAt: 2026-08-04 05:43:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:43:48 +0000 UTC FinishedAt: 2026-08-04 05:43:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:43:58 +0000 UTC FinishedAt: 2026-08-04 08:50:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrlfm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"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":["min_order_for_split","memory_failure","soft_offline_in_use_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"547277c9-1702-46ce-ba69-6f00fa4f2ac4","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-08-04 05:43:58 +0000 UTC FinishedAt: 2026-08-04 08:50:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3091b5f4-3633-4bd7-8dc8-03da44e01ead,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cdca03a9-aca6-43e9-89f6-c7acdcc59317,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-workflowsrlfm/series-workflowsrlfm-build-action-59784766/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-workflowsrlfm/series-workflowsrlfm-build-action-3451250243/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-workflowsrlfm/series-workflowsrlfm-convert-artifact-102075752/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,}