Name: series-workflowbswqq Phase: Succeeded StartedAt: 2026-08-21 09:07:26 +0000 UTC FinishedAt: 2026-08-21 13:08:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbswqq[0] Phase: Succeeded StartedAt: 2026-08-21 09:07:26 +0000 UTC FinishedAt: 2026-08-21 09:24:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbswqq[0].run-triage Phase: Succeeded StartedAt: 2026-08-21 09:07:26 +0000 UTC FinishedAt: 2026-08-21 09:24:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "818bebeb63dd6bf5f4e07e145f6cdbace520a34c", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "818bebeb63dd6bf5f4e07e145f6cdbace520a34c", "config_name": "upstream-apparmor-kasan.config", "series_id": "bfd15270-92da-4216-9bc4-405cb4af74c6" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "thaw_super", "emergency_thaw_all" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGhhd19zdXBlciYjMzQ7LAogICAgJiMzNDtlbWVyZ2VuY3lfdGhhd19hbGwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgdGhhd19zdXBlcl9sb2NrZWRgIHdoZXJlIHRoZSBmdW5jdGlvbiBpbmNvcnJlY3RseSByZXR1cm5lZCBgLUVJTlZBTGAgaW5zdGVhZCBvZiBgMGAgd2hlbiBgZnJlZXplX2RlY2AgaW5kaWNhdGVkIHRoYXQgb3RoZXIgZnJlZXplcnMgd2VyZSBzdGlsbCBob2xkaW5nIHRoZSBmcmVlemUuIFRoZSBgZXJyb3JgIHZhcmlhYmxlIHdhcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGAtRUlOVkFMYCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uLCBzbyB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnZvbHZlZC4gVGhpcyBpcyBhIHB1cmUgbG9naWMvY29udHJvbC1mbG93IGJ1ZyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGNvcmUgVkZTIGxheWVyIHdoZXJlIGB0aGF3X3N1cGVyYCB3b3VsZCBpbmNvcnJlY3RseSByZXR1cm4gYC1FSU5WQUxgIGluc3RlYWQgb2YgYDBgIHdoZW4gdGhlcmUgYXJlIG90aGVyIGZyZWV6ZXJzIHJlbWFpbmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTFjNzQ1N2ZjOWJkMDA2ZDliYzkwNzBlZTIzNjQwZjhmODljODBhNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDA5OjIzOjExIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jXG5pbmRleCAwNWU0NDMxNzMwMzg3Li4wMWRiNjEyNGU0MDlkIDEwMDY0NFxuLS0tIGEvZnMvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3VwZXIuY1xuQEAgLTIzNjksMTEgJiM0MzsyMzY5LDE0IEBAIHN0YXRpYyBpbnQgdGhhd19zdXBlcl9sb2NrZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuIFx0Lypcbi1cdCAqIEFsbCBmcmVlemVycyBzaGFyZSBhIHNpbmdsZSBhY3RpdmUgcmVmZXJlbmNlLlxuLVx0ICogU28ganVzdCB1bmxvY2sgaW4gY2FzZSB0aGVyZSBhcmUgYW55IGxlZnQuXG4mIzQzO1x0ICogQWxsIGZyZWV6ZXJzIHNoYXJlIGEgc2luZ2xlIGFjdGl2ZSByZWZlcmVuY2UuIElmIG90aGVyIGZyZWV6ZXJzXG4mIzQzO1x0ICogcmVtYWluLCBkcm9wIG91ciBob2xkIGFuZCByZXBvcnQgc3VjY2VzczsgdGhlIHN1cGVyYmxvY2sgc3RheXNcbiYjNDM7XHQgKiBmcm96ZW4gdW50aWwgdGhlIGxhc3QgaG9sZGVyIHRoYXdzIGl0LlxuIFx0ICovXG4tXHRpZiAoZnJlZXplX2RlYyhzYiwgd2hvKSlcbiYjNDM7XHRpZiAoZnJlZXplX2RlYyhzYiwgd2hvKSkge1xuJiM0MztcdFx0ZXJyb3IgPSAwO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKHNiX3Jkb25seShzYikpIHtcbiBcdFx0c2ItXHUwMDNlc193cml0ZXJzLmZyb3plbiA9IFNCX1VORlJPWkVOO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RoYXdfc3VwZXImIzM0OywKICAgICYjMzQ7ZW1lcmdlbmN5X3RoYXdfYWxsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBjb3JlIFZGUyBsYXllciB3aGVyZSBgdGhhd19zdXBlcmAgd291bGQgaW5jb3JyZWN0bHkgcmV0dXJuIGAtRUlOVkFMYCBpbnN0ZWFkIG9mIGAwYCB3aGVuIHRoZXJlIGFyZSBvdGhlciBmcmVlemVycyByZW1haW5pbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGExYzc0NTdmYzliZDAwNmQ5YmM5MDcwZWUyMzY0MGY4Zjg5YzgwYTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAwOToyMzoxMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jCmluZGV4IDA1ZTQ0MzE3MzAzODcuLjAxZGI2MTI0ZTQwOWQgMTAwNjQ0Ci0tLSBhL2ZzL3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3VwZXIuYwpAQCAtMjM2OSwxMSAmIzQzOzIzNjksMTQgQEAgc3RhdGljIGludCB0aGF3X3N1cGVyX2xvY2tlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBlbnVtIGZyZWV6ZV9ob2xkZXIgd2hvLAogCQlnb3RvIG91dF91bmxvY2s7CiAKIAkvKgotCSAqIEFsbCBmcmVlemVycyBzaGFyZSBhIHNpbmdsZSBhY3RpdmUgcmVmZXJlbmNlLgotCSAqIFNvIGp1c3QgdW5sb2NrIGluIGNhc2UgdGhlcmUgYXJlIGFueSBsZWZ0LgomIzQzOwkgKiBBbGwgZnJlZXplcnMgc2hhcmUgYSBzaW5nbGUgYWN0aXZlIHJlZmVyZW5jZS4gSWYgb3RoZXIgZnJlZXplcnMKJiM0MzsJICogcmVtYWluLCBkcm9wIG91ciBob2xkIGFuZCByZXBvcnQgc3VjY2VzczsgdGhlIHN1cGVyYmxvY2sgc3RheXMKJiM0MzsJICogZnJvemVuIHVudGlsIHRoZSBsYXN0IGhvbGRlciB0aGF3cyBpdC4KIAkgKi8KLQlpZiAoZnJlZXplX2RlYyhzYiwgd2hvKSkKJiM0MzsJaWYgKGZyZWV6ZV9kZWMoc2IsIHdobykpIHsKJiM0MzsJCWVycm9yID0gMDsKIAkJZ290byBvdXRfdW5sb2NrOwomIzQzOwl9CiAKIAlpZiAoc2JfcmRvbmx5KHNiKSkgewogCQlzYi0mZ3Q7c193cml0ZXJzLmZyb3plbiA9IFNCX1VORlJPWkVOOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDYyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFZGUyBTdXBlcmJsb2NrIFRoYXdpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBmcy9zdXBlci5jYC4gSXQmIzM5O3MgZm9jdXNlZCBvbiBgdGhhd19zdXBlcl9sb2NrZWRgLCB3aGljaCBpcyByaWdodCB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBzZWUgY2hhbmdlcyByZWxhdGVkIHRvIGZyZWV6ZXIgaW50ZXJhY3Rpb25zLiBUaGUga2V5IGNoYW5nZSBpcyB0aGlzIHNuaXBwZXQ6CgpgYGBjCiAJLyoKLQkgKiBBbGwgZnJlZXplcnMgc2hhcmUgYSBzaW5nbGUgYWN0aXZlIHJlZmVyZW5jZS4KLQkgKiBTbyBqdXN0IHVubG9jayBpbiBjYXNlIHRoZXJlIGFyZSBhbnkgbGVmdC4KJiM0MzsJICogQWxsIGZyZWV6ZXJzIHNoYXJlIGEgc2luZ2xlIGFjdGl2ZSByZWZlcmVuY2UuIElmIG90aGVyIGZyZWV6ZXJzCiYjNDM7CSAqIHJlbWFpbiwgZHJvcCBvdXIgaG9sZCBhbmQgcmVwb3J0IHN1Y2Nlc3M7IHRoZSBzdXBlcmJsb2NrIHN0YXlzCiYjNDM7CSAqIGZyb3plbiB1bnRpbCB0aGUgbGFzdCBob2xkZXIgdGhhd3MgaXQuCiAJICovCi0JaWYgKGZyZWV6ZV9kZWMoc2IsIHdobykpCiYjNDM7CWlmIChmcmVlemVfZGVjKHNiLCB3aG8pKSB7CiYjNDM7CQllcnJvciA9IDA7CiAJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQpgYGAKCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIGFkZHJlc3NpbmcgYW4gZWRnZSBjYXNlIGluIHRoZSBmcmVlemVyIGxvZ2ljLiBQcmV2aW91c2x5LCBpdCBsb29rZWQgbGlrZSBpdCB3YXMgc2ltcGx5IHVubG9ja2luZyB0aGUgc3VwZXJibG9jayBpZiB0aGVyZSB3ZXJlIGFueSByZW1haW5pbmcgZnJlZXplcnMuIE5vdywgaXQgZXhwbGljaXRseSBjaGVja3MgaWYgYGZyZWV6ZV9kZWNgIHJldHVybnMgdHJ1ZSAobWVhbmluZyB0aGVyZSBhcmUgc3RpbGwgb3RoZXIgZnJlZXplcnMgYWN0aXZlKSwgYW5kIGlmIHNvLCBpdCAqZXhwbGljaXRseSogc2V0cyBgZXJyb3JgIHRvIDAgYmVmb3JlIGV4aXRpbmcuIFRoaXMgaXMgaW1wb3J0YW50OiBpdCYjMzk7cyBub3Qgc2ltcGx5IGxlYXZpbmcgYGVycm9yYCB1bmluaXRpYWxpemVkIG9yIHBvc3NpYmx5IHNldCB0byBhIHByZXZpb3VzIGluY29ycmVjdCB2YWx1ZSwgaXQmIzM5O3MgZW5zdXJpbmcgYSBzdWNjZXNzIHJldHVybiB3aGVuIGFub3RoZXIgZnJlZXplciBob2xkcyB0aGUgbG9jay4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBhIGJ1ZyBmaXggcmVsYXRlZCB0byBlcnJvciBoYW5kbGluZyBpbiB0aGlzIHNjZW5hcmlvLiBJdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGVycm9yIHJlcG9ydGluZyBvciBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBpZiBtdWx0aXBsZSBmcmVlemVycyB3ZXJlIGludm9sdmVkLiBUaGUgZml4IGVuc3VyZXMgYSBtb3JlIGNvbnNpc3RlbnQgYW5kIGNvcnJlY3Qgc3RhdGUgbWFuYWdlbWVudC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGB0aGF3X3N1cGVyX2xvY2tlZGAgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aGF3X3N1cGVyX2xvY2tlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc3VwZXIuYy00NC1cbmZzL3N1cGVyLmM6NDU6c3RhdGljIGludCB0aGF3X3N1cGVyX2xvY2tlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBlbnVtIGZyZWV6ZV9ob2xkZXIgd2hvLFxuZnMvc3VwZXIuYy00Ni1cdFx0XHQgICAgIGNvbnN0IHZvaWQgKmZyZWV6ZV9vd25lcik7XG4tLVxuZnMvc3VwZXIuYz0xMjE5PXN0YXRpYyB2b2lkIGRvX3RoYXdfYWxsX2NhbGxiYWNrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKnVudXNlZClcbi0tXG5mcy9zdXBlci5jLTEyMjktXHRpZiAoc3VwZXJfbG9ja19leGNsKHNiKSlcbmZzL3N1cGVyLmM6MTIzMDpcdFx0dGhhd19zdXBlcl9sb2NrZWQoc2IsIEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLCBOVUxMKTtcbmZzL3N1cGVyLmMtMTIzMS1cdGRlYWN0aXZhdGVfc3VwZXIoc2IpO1xuLS1cbmZzL3N1cGVyLmM9MjM1Mj1FWFBPUlRfU1lNQk9MKGZyZWV6ZV9zdXBlcik7XG4tLVxuZnMvc3VwZXIuYy0yMzU5LSAqL1xuZnMvc3VwZXIuYzoyMzYwOnN0YXRpYyBpbnQgdGhhd19zdXBlcl9sb2NrZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcbmZzL3N1cGVyLmMtMjM2MS1cdFx0XHQgICAgIGNvbnN0IHZvaWQgKmZyZWV6ZV9vd25lcilcbi0tXG5mcy9zdXBlci5jPTI0MzE9aW50IHRoYXdfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcbi0tXG5mcy9zdXBlci5jLTI0MzctXHR9XG5mcy9zdXBlci5jOjI0Mzg6XHRyZXR1cm4gdGhhd19zdXBlcl9sb2NrZWQoc2IsIHdobywgZnJlZXplX293bmVyKTtcbmZzL3N1cGVyLmMtMjQzOS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIGB0aGF3X3N1cGVyX2xvY2tlZGAgZnVuY3Rpb24gaW4gYGZzL3N1cGVyLmNgOgoKKipEZWVwIERpdmUgaW50byBgdGhhd19zdXBlcl9sb2NrZWRgKioKCk9rYXksIGxldCYjMzk7cyBnZXQgaW50byB0aGUgd2VlZHMgb2YgYHRoYXdfc3VwZXJfbG9ja2VkYC4gSSYjMzk7bSBndWVzc2luZyB0aGlzIGhhcyB0byBkbyB3aXRoIGJyaW5naW5nIGEgc3VwZXJibG9jayBiYWNrIHRvIGEgdXNhYmxlIHN0YXRlLCBwb3NzaWJseSBhZnRlciBzb21lIHNvcnQgb2YgcXVpZXNjaW5nIG9yIHN1c3BlbnNpb24uIFRoZSAmIzM0O2xvY2tlZCYjMzQ7IHBhcnQgaXMga2V5OyBpdCBpbXBsaWVzIHNvbWUgY3JpdGljYWwgc2VjdGlvbiBwcm90ZWN0aW9uIGlzIGludm9sdmVkLCB3aGljaCBtYWtlcyBtZSB0aGluayB0aGlzIGlzIHdoZXJlIHJhY2UgY29uZGl0aW9ucyBhcmUgbWFuYWdlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBiZWluZyB0aGF3ZWQgYW5kIHdoeS4gSXMgaXQgdGhlIGVudGlyZSBmaWxlc3lzdGVtLCBvciBqdXN0IHBhcnRzIG9mIGl0PyBJcyBpdCBhYm91dCBkYXRhIGNvbnNpc3RlbmN5LCBqb3VybmFsIHJlY292ZXJ5LCBvciByZXNvdXJjZSBhbGxvY2F0aW9uPyBJJiMzOTttIGFudGljaXBhdGluZyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgYmxvY2sgbGF5ZXIsIGlub2RlIG1hbmFnZW1lbnQsIGFuZCBtYXliZSBldmVuIHRoZSBWRlMgbGF5ZXIuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIG11dGV4ZXMsIHNwaW5sb2NrcywgYW5kIGF0b21pYyBvcGVyYXRpb25zLiBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcHJlcGFyaW5nIHRvIHRyYWNlIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIGZpbGVzeXN0ZW0gc3RhdGUgbWFjaGluZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGV4cGVjdGluZyB0byBsb29rIGZvciB0aGluZ3MgbGlrZTogaG93IHRoZSBzdXBlcmJsb2NrIGlzIGZsYWdnZWQsIGhvdyByZXNvdXJjZXMgYXJlIHJlbGVhc2VkLCBvciBob3cgZGF0YSBzdHJ1Y3R1cmVzIGFyZSB1cGRhdGVkLiBUaGlzIGNvdWxkIGJlIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgb24gaGFuZGxpbmcgcGVyc2lzdGVudCBkYXRhIGFmdGVyIGFuIHVwZGF0ZSBvciBzeXN0ZW0gcGF1c2UuIEkgbmVlZCB0byBiZSBwcmVwYXJlZCB0byBzZWUgc29tZSBpbnRyaWNhdGUgc3luY2hyb25pemF0aW9uIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzNTA6XHRcdHJldHVybiAwO1xuMjM1MTpcdH1cbjIzNTI6XHRFWFBPUlRfU1lNQk9MKGZyZWV6ZV9zdXBlcik7XG4yMzUzOlx0XG4yMzU0Olx0LypcbjIzNTU6XHQgKiBVbmRvZXMgdGhlIGVmZmVjdCBvZiBhIGZyZWV6ZV9zdXBlcl9sb2NrZWQgY2FsbC4gIElmIHRoZSBmaWxlc3lzdGVtIGlzXG4yMzU2Olx0ICogZnJvemVuIGJvdGggYnkgdXNlcnNwYWNlIGFuZCB0aGUga2VybmVsLCBhIHRoYXcgY2FsbCBmcm9tIGVpdGhlciBzb3VyY2VcbjIzNTc6XHQgKiByZW1vdmVzIHRoYXQgc3RhdGUgd2l0aG91dCByZWxlYXNpbmcgdGhlIG90aGVyIHN0YXRlIG9yIHVubG9ja2luZyB0aGVcbjIzNTg6XHQgKiBmaWxlc3lzdGVtLlxuMjM1OTpcdCAqL1xuMjM2MDpcdHN0YXRpYyBpbnQgdGhhd19zdXBlcl9sb2NrZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcbjIzNjE6XHRcdFx0XHQgICAgIGNvbnN0IHZvaWQgKmZyZWV6ZV9vd25lcilcbjIzNjI6XHR7XG4yMzYzOlx0XHRpbnQgZXJyb3IgPSAtRUlOVkFMO1xuMjM2NDpcdFxuMjM2NTpcdFx0aWYgKHNiLVx1MDAzZXNfd3JpdGVycy5mcm96ZW4gIT0gU0JfRlJFRVpFX0NPTVBMRVRFKVxuMjM2NjpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4yMzY3Olx0XG4yMzY4Olx0XHRpZiAoIW1heV91bmZyZWV6ZShzYiwgd2hvLCBmcmVlemVfb3duZXIpKVxuMjM2OTpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4yMzcwOlx0XG4yMzcxOlx0XHQvKlxuMjM3MjpcdFx0ICogQWxsIGZyZWV6ZXJzIHNoYXJlIGEgc2luZ2xlIGFjdGl2ZSByZWZlcmVuY2UuIElmIG90aGVyIGZyZWV6ZXJzXG4yMzczOlx0XHQgKiByZW1haW4sIGRyb3Agb3VyIGhvbGQgYW5kIHJlcG9ydCBzdWNjZXNzOyB0aGUgc3VwZXJibG9jayBzdGF5c1xuMjM3NDpcdFx0ICogZnJvemVuIHVudGlsIHRoZSBsYXN0IGhvbGRlciB0aGF3cyBpdC5cbjIzNzU6XHRcdCAqL1xuMjM3NjpcdFx0aWYgKGZyZWV6ZV9kZWMoc2IsIHdobykpIHtcbjIzNzc6XHRcdFx0ZXJyb3IgPSAwO1xuMjM3ODpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4yMzc5Olx0XHR9XG4yMzgwOlx0XG4yMzgxOlx0XHRpZiAoc2JfcmRvbmx5KHNiKSkge1xuMjM4MjpcdFx0XHRzYi1cdTAwM2VzX3dyaXRlcnMuZnJvemVuID0gU0JfVU5GUk9aRU47XG4yMzgzOlx0XHRcdHNiLVx1MDAzZXNfd3JpdGVycy5mcmVlemVfb3duZXIgPSBOVUxMO1xuMjM4NDpcdFx0XHR3YWtlX3VwX3ZhcihcdTAwMjZzYi1cdTAwM2VzX3dyaXRlcnMuZnJvemVuKTtcbjIzODU6XHRcdFx0Z290byBvdXRfZGVhY3RpdmF0ZTtcbjIzODY6XHRcdH1cbjIzODc6XHRcbjIzODg6XHRcdGxvY2tkZXBfc2JfZnJlZXplX2FjcXVpcmUoc2IpO1xuMjM4OTpcdFxuMjM5MDpcdFx0aWYgKHNiLVx1MDAzZXNfb3AtXHUwMDNldW5mcmVlemVfZnMpIHtcbjIzOTE6XHRcdFx0ZXJyb3IgPSBzYi1cdTAwM2VzX29wLVx1MDAzZXVuZnJlZXplX2ZzKHNiKTtcbjIzOTI6XHRcdFx0aWYgKGVycm9yKSB7XG4yMzkzOlx0XHRcdFx0cHJfZXJyKFwmIzM0O1ZGUzogRmlsZXN5c3RlbSB0aGF3IGZhaWxlZFxcblwmIzM0Oyk7XG4yMzk0Olx0XHRcdFx0ZnJlZXplX2luYyhzYiwgd2hvKTtcbjIzOTU6XHRcdFx0XHRsb2NrZGVwX3NiX2ZyZWV6ZV9yZWxlYXNlKHNiKTtcbjIzOTY6XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4yMzk3Olx0XHRcdH1cbjIzOTg6XHRcdH1cbjIzOTk6XHRcbjI0MDA6XHRcdHNiLVx1MDAzZXNfd3JpdGVycy5mcm96ZW4gPSBTQl9VTkZST1pFTjtcbjI0MDE6XHRcdHNiLVx1MDAzZXNfd3JpdGVycy5mcmVlemVfb3duZXIgPSBOVUxMO1xuMjQwMjpcdFx0d2FrZV91cF92YXIoXHUwMDI2c2ItXHUwMDNlc193cml0ZXJzLmZyb3plbik7XG4yNDAzOlx0XHRzYl9mcmVlemVfdW5sb2NrKHNiLCBTQl9GUkVFWkVfRlMpO1xuMjQwNDpcdG91dF9kZWFjdGl2YXRlOlxuMjQwNTpcdFx0ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpO1xuMjQwNjpcdFx0cmV0dXJuIDA7XG4yNDA3Olx0XG4yNDA4Olx0b3V0X3VubG9jazpcbjI0MDk6XHRcdHN1cGVyX3VubG9ja19leGNsKHNiKTtcbjI0MTA6XHRcdHJldHVybiBlcnJvcjtcbjI0MTE6XHR9XG4yNDEyOlx0XG4yNDEzOlx0LyoqXG4yNDE0Olx0ICogdGhhd19zdXBlciAtLSB1bmxvY2sgZmlsZXN5c3RlbVxuMjQxNTpcdCAqIEBzYjogdGhlIHN1cGVyIHRvIHRoYXdcbjI0MTY6XHQgKiBAd2hvOiBjb250ZXh0IHRoYXQgd2FudHMgdG8gZnJlZXplXG4yNDE3Olx0ICogQGZyZWV6ZV9vd25lcjogb3duZXIgb2YgdGhlIGZyZWV6ZVxuMjQxODpcdCAqXG4yNDE5Olx0ICogVW5sb2NrcyB0aGUgZmlsZXN5c3RlbSBhbmQgbWFya3MgaXQgd3JpdGVhYmxlIGFnYWluIGFmdGVyIGZyZWV6ZV9zdXBlcigpXG4yNDIwOlx0ICogaWYgdGhlcmUgYXJlIG5vIHJlbWFpbmluZyBmcmVlemVzIG9uIHRoZSBmaWxlc3lzdGVtLlxuMjQyMTpcdCAqXG4yNDIyOlx0ICogQHdobyBzaG91bGQgYmU6XG4yNDIzOlx0ICogKiAlRlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UgaWYgdXNlcnNwYWNlIHdhbnRzIHRvIHRoYXcgdGhlIGZzO1xuMjQyNDpcdCAqICogJUZSRUVaRV9IT0xERVJfS0VSTkVMIGlmIHRoZSBrZXJuZWwgd2FudHMgdG8gdGhhdyB0aGUgZnMuXG4yNDI1Olx0ICogKiAlRlJFRVpFX01BWV9ORVNUIHdoZXRoZXIgbmVzdGluZyBmcmVlemUgYW5kIHRoYXcgcmVxdWVzdHMgaXMgYWxsb3dlZFxuMjQyNjpcdCAqXG4yNDI3Olx0ICogQSBmaWxlc3lzdGVtIG1heSBob2xkIG11bHRpcGxlIGRldmljZXMgYW5kIHRodXMgYSBmaWxlc3lzdGVtcyBtYXlcbjI0Mjg6XHQgKiBoYXZlIGJlZW4gZnJvemVuIHRocm91Z2ggdGhlIGJsb2NrIGxheWVyIHZpYSBtdWx0aXBsZSBibG9jayBkZXZpY2VzLlxuMjQyOTpcdCAqIFRoZSBmaWxlc3lzdGVtIHJlbWFpbnMgZnJvemVuIHVudGlsIGFsbCBibG9jayBkZXZpY2VzIGFyZSB1bmZyb3plbi5cbjI0MzA6XHQgKi9cbjI0MzE6XHRpbnQgdGhhd19zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBlbnVtIGZyZWV6ZV9ob2xkZXIgd2hvLFxuMjQzMjpcdFx0ICAgICAgIGNvbnN0IHZvaWQgKmZyZWV6ZV9vd25lcilcbjI0MzM6XHR7XG4yNDM0Olx0XHRpZiAoIXN1cGVyX2xvY2tfZXhjbChzYikpIHtcbjI0MzU6XHRcdFx0V0FSTl9PTkNFKDEsIFwmIzM0O0R5aW5nIHN1cGVyYmxvY2sgd2hpbGUgdGhhd2luZyFcJiMzNDspO1xuMjQzNjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI0Mzc6XHRcdH1cbjI0Mzg6XHRcdHJldHVybiB0aGF3X3N1cGVyX2xvY2tlZChzYiwgd2hvLCBmcmVlemVfb3duZXIpO1xuMjQzOTpcdH1cbjI0NDA6XHRFWFBPUlRfU1lNQk9MKHRoYXdfc3VwZXIpO1xuMjQ0MTpcdFxuMjQ0MjpcdC8qXG4yNDQzOlx0ICogQ3JlYXRlIHdvcmtxdWV1ZSBmb3IgZGVmZXJyZWQgZGlyZWN0IElPIGNvbXBsZXRpb25zLiBXZSBhbGxvY2F0ZSB0aGVcbjI0NDQ6XHQgKiB3b3JrcXVldWUgd2hlbiBpdCYjMzk7cyBmaXJzdCBuZWVkZWQuIFRoaXMgYXZvaWRzIGNyZWF0aW5nIHdvcmtxdWV1ZSBmb3JcbjI0NDU6XHQgKiBmaWxlc3lzdGVtcyB0aGF0IGRvbiYjMzk7dCBuZWVkIGl0IGFuZCBhbHNvIGFsbG93cyB1cyB0byBjcmVhdGUgdGhlIHdvcmtxdWV1ZVxuMjQ0NjpcdCAqIGxhdGUgZW5vdWdoIHNvIHRoZSB3ZSBjYW4gaW5jbHVkZSBzX2lkIGluIHRoZSBuYW1lIG9mIHRoZSB3b3JrcXVldWUuXG4yNDQ3Olx0ICovXG4yNDQ4Olx0aW50IHNiX2luaXRfZGlvX2RvbmVfd3Eoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbjI0NDk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkwOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBWRlMgQnVnIEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBidWcgaW4gYHRoYXdfc3VwZXJfbG9ja2VkYC4gQXBwYXJlbnRseSwgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgaXNuJiMzOTt0IGNvcnJlY3Qgd2hlbiBgZnJlZXplX2RlY2AgcmV0dXJucyB0cnVlIOKAkyBpdCYjMzk7cyByZXR1cm5pbmcgYC1FSU5WQUxgIGluc3RlYWQgb2YgYDBgLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBjb3JlIFZGUyBsYXllci4gRGVmaW5pdGVseSB3b3J0aCBhIGZ1enppbmcgcnVuLiBNeSBpbW1lZGlhdGUgZm9jdXMgc3ltYm9scyB3aWxsIGJlIGB0aGF3X3N1cGVyX2xvY2tlZGAgYW5kIGB0aGF3X3N1cGVyYC4KCkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBObywgc2luY2UgdGhpcyBpcyBpbiBjb3JlIFZGUywgdGhlcmUgc2hvdWxkbiYjMzk7dCBiZSBhbnl0aGluZyBzcGVjaWZpYy4gCgpIbW0sIHdhaXQgYSBtaW51dGUuLi4gYHRoYXdfc3VwZXJfbG9ja2VkYCBpcyBzdGF0aWMuIFRoYXQgbWVhbnMgYHRoYXdfc3VwZXJgIGlzIHRoZSBleHBvcnRlZCBzeW1ib2wsIG5vdCB0aGUgbG9ja2VkIHZlcnNpb24uIFJpZ2h0LCBhZGRpbmcgYHRoYXdfc3VwZXJgIHRvIEZvY3VzU3ltYm9scywgYW5kIHJlbW92aW5nIGB0aGF3X3N1cGVyX2xvY2tlZGAgZnJvbSB0aGUgbGlzdC4KCk5vdywgSSBzaG91bGQgcXVpY2tseSBjaGVjayBmb3Igb3RoZXIgZXhwb3J0ZWQgc3ltYm9scyB0aGF0IG1pZ2h0IGNhbGwgYHRoYXdfc3VwZXJfbG9ja2VkYC4gTGV0JiMzOTtzIHNlZS4uLiBBaCwgYGRvX3RoYXdfYWxsX2NhbGxiYWNrYCBkb2VzLiBJIHNob3VsZCBjaGVjayB0aGF0IG9uZSBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fdGhhd19hbGxfY2FsbGJhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zdXBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3N1cGVyLmM9MTIwOD1zdGF0aWMgaW5saW5lIGJvb2wgZ2V0X2FjdGl2ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL3N1cGVyLmMtMTIxOC1cbmZzL3N1cGVyLmM6MTIxOTpzdGF0aWMgdm9pZCBkb190aGF3X2FsbF9jYWxsYmFjayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICp1bnVzZWQpXG5mcy9zdXBlci5jLTEyMjAte1xuLS1cbmZzL3N1cGVyLmM9MTIzND1zdGF0aWMgdm9pZCBkb190aGF3X2FsbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5mcy9zdXBlci5jLTEyMzUte1xuZnMvc3VwZXIuYzoxMjM2Olx0X19pdGVyYXRlX3N1cGVycyhkb190aGF3X2FsbF9jYWxsYmFjaywgTlVMTCwgU1VQRVJfSVRFUl9VTkxPQ0tFRCk7XG5mcy9zdXBlci5jLTEyMzctXHRrZnJlZSh3b3JrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTk2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGFpbWluZyBmb3IgYSBmdWxzb21lIHJlbmRlcmluZzoKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgRW1lcmdlbmN5IFRoYXcgQ2FsbCBQYXRocyoqCgpBbHJpZ2h0LCBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvZGViYXNlJiMzOTtzIHRoYXdpbmcgbWVjaGFuaXNtcywgc3BlY2lmaWNhbGx5IGhvdyB0aGV5IHJlbGF0ZSB0byBwb3RlbnRpYWwgZW1lcmdlbmN5IHNjZW5hcmlvcy4gVGhlIHRob3VnaHQgdGhhdCYjMzk7cyBjdXJyZW50bHkgbmFnZ2luZyBhdCBtZSBpcyB0aGlzOiBgZG9fdGhhd19hbGxgLiBXaGVyZSBleGFjdGx5IGlzIHRoYXQgY2FsbGVkIGZyb20/IEkmIzM5O20gcHJldHR5IHN1cmUgSSYjMzk7dmUgc2VlbiBpdCBtZW50aW9uZWQgaW4gdGhlIGNvbnRleHQgb2YgYW4gJiMzNDtlbWVyZ2VuY3kgdGhhdyYjMzQ7IHByb2NlZHVyZSwgcGVyaGFwcyB0cmlnZ2VyZWQgYnkgdGhlIGBlbWVyZ2VuY3lfdGhhd19iZGV2YCBmdW5jdGlvbiwgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIGxpbmsgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBjYWxsaW5nIGBkb190aGF3X2FsbGAgZnJvbSBhbnkgZW1lcmdlbmN5IGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlc2UgcmVsYXRpb25zaGlwcyBpcyBjcml0aWNhbCBmb3IgZW5zdXJpbmcgb3VyIHN5c3RlbXMgY2FuIHJlY292ZXIgZ3JhY2VmdWxseSBmcm9tIHVudXN1YWwgY29uZGl0aW9ucy4gQXJlIHRoZXJlIG90aGVyIGVudHJ5IHBvaW50cyB0aGF0IEkgYW0gbWlzc2luZz8gSXQgaXMgaW1wb3J0YW50IHRoYXQgSSBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX3RoYXdfYWxsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvc3VwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zdXBlci5jPTEyMDg9c3RhdGljIGlubGluZSBib29sIGdldF9hY3RpdmVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9zdXBlci5jLTEyMTgtXG5mcy9zdXBlci5jOjEyMTk6c3RhdGljIHZvaWQgZG9fdGhhd19hbGxfY2FsbGJhY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqdW51c2VkKVxuZnMvc3VwZXIuYy0xMjIwLXtcbi0tXG5mcy9zdXBlci5jLTEyMzMtXG5mcy9zdXBlci5jOjEyMzQ6c3RhdGljIHZvaWQgZG9fdGhhd19hbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZnMvc3VwZXIuYy0xMjM1LXtcbmZzL3N1cGVyLmM6MTIzNjpcdF9faXRlcmF0ZV9zdXBlcnMoZG9fdGhhd19hbGxfY2FsbGJhY2ssIE5VTEwsIFNVUEVSX0lURVJfVU5MT0NLRUQpO1xuZnMvc3VwZXIuYy0xMjM3LVx0a2ZyZWUod29yayk7XG4tLVxuZnMvc3VwZXIuYz0xMjQ2PXZvaWQgZW1lcmdlbmN5X3RoYXdfYWxsKHZvaWQpXG4tLVxuZnMvc3VwZXIuYy0xMjUxLVx0aWYgKHdvcmspIHtcbmZzL3N1cGVyLmM6MTI1MjpcdFx0SU5JVF9XT1JLKHdvcmssIGRvX3RoYXdfYWxsKTtcbmZzL3N1cGVyLmMtMTI1My1cdFx0c2NoZWR1bGVfd29yayh3b3JrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE1MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEltbWVkaWF0ZSBQbGFuKioKCk9rYXksIHNvIEkgc2VlIGB0aGF3X3N1cGVyYCBhbmQgYGVtZXJnZW5jeV90aGF3X2FsbGAgYXJlIHRoZSB0d28gbWFpbiBlbnRyeSBwb2ludHMgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4gVGhhdCBtYWtlcyB0aGluZ3Mgc3RyYWlnaHRmb3J3YXJkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYWRkIHRoZW0gdG8gYEZvY3VzU3ltYm9sc2AgaW1tZWRpYXRlbHk7IHRoYXQmIzM5O3MgdGhlIG5hdHVyYWwgcGxhY2UgZm9yIHRob3NlIGtpbmRzIG9mIGVudHJ5IHBvaW50cy4KCk5vdywgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gYW55dGhpbmcgZWxzZSwgaXQmIzM5O3Mgd29ydGggdGFraW5nIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgYW55dGhpbmcgZWxzZSBpcyBjYWxsaW5nIGB0aGF3X3N1cGVyX2xvY2tlZGAuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB0aGF0IGZ1bmN0aW9uLiBJdCYjMzk7cyBhIHF1aWNrIGNoZWNrIHRvIGVsaW1pbmF0ZSBhbnkgc3VycHJpc2VzIGRvd24gdGhlIGxpbmUsIGFuZCBtYWtlIHN1cmUgSSBkb24mIzM5O3QgY2F1c2UgYW55IHJlZ3Jlc3Npb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aGF3X3N1cGVyX2xvY2tlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc3VwZXIuYy00NC1cbmZzL3N1cGVyLmM6NDU6c3RhdGljIGludCB0aGF3X3N1cGVyX2xvY2tlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBlbnVtIGZyZWV6ZV9ob2xkZXIgd2hvLFxuZnMvc3VwZXIuYy00Ni1cdFx0XHQgICAgIGNvbnN0IHZvaWQgKmZyZWV6ZV9vd25lcik7XG4tLVxuZnMvc3VwZXIuYz0xMjE5PXN0YXRpYyB2b2lkIGRvX3RoYXdfYWxsX2NhbGxiYWNrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKnVudXNlZClcbi0tXG5mcy9zdXBlci5jLTEyMjktXHRpZiAoc3VwZXJfbG9ja19leGNsKHNiKSlcbmZzL3N1cGVyLmM6MTIzMDpcdFx0dGhhd19zdXBlcl9sb2NrZWQoc2IsIEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLCBOVUxMKTtcbmZzL3N1cGVyLmMtMTIzMS1cdGRlYWN0aXZhdGVfc3VwZXIoc2IpO1xuLS1cbmZzL3N1cGVyLmM9MjM1Mj1FWFBPUlRfU1lNQk9MKGZyZWV6ZV9zdXBlcik7XG4tLVxuZnMvc3VwZXIuYy0yMzU5LSAqL1xuZnMvc3VwZXIuYzoyMzYwOnN0YXRpYyBpbnQgdGhhd19zdXBlcl9sb2NrZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcbmZzL3N1cGVyLmMtMjM2MS1cdFx0XHQgICAgIGNvbnN0IHZvaWQgKmZyZWV6ZV9vd25lcilcbi0tXG5mcy9zdXBlci5jPTI0MzE9aW50IHRoYXdfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcbi0tXG5mcy9zdXBlci5jLTI0MzctXHR9XG5mcy9zdXBlci5jOjI0Mzg6XHRyZXR1cm4gdGhhd19zdXBlcl9sb2NrZWQoc2IsIHdobywgZnJlZXplX293bmVyKTtcbmZzL3N1cGVyLmMtMjQzOS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NjMKCQkJCQkJCW91dHB1dDogOTUKCQkJCQkJCXRob3VnaHRzOiAxNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGhlcmUgYXJlIGNsZWFybHkgYHRoYXdfc3VwZXJgIGFuZCBgZW1lcmdlbmN5X3RoYXdfYWxsYC4gVGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgZnVuY3Rpb25hbCBidWcgaW4gdGhlIGNvcmUgVkZTIGxheWVyOyBzcGVjaWZpY2FsbHksIGB0aGF3X3N1cGVyYCB3YXMgaW1wcm9wZXJseSByZXR1cm5pbmcgYC1FSU5WQUxgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucyDigJMgd2hlbiB0aGVyZSBhcmUgb3RoZXIgZnJlZXplcnMgcHJlc2VudCDigJMgd2hlbiBpdCBzaG91bGQgaGF2ZSByZXR1cm5lZCBgMGAuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQsIGZ1bmN0aW9uYWwgY29ycmVjdGlvbiwgbWVhbmluZyBpdCBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHJlYWNoYWJsZSBrZXJuZWwgY29kZS4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiB0aGUgcG90ZW50aWFsIGltcGFjdC4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGZvY3VzIG9uIGB0aGF3X3N1cGVyYCBhbmQgYGVtZXJnZW5jeV90aGF3X2FsbGAgZHVyaW5nIHRlc3RpbmcuIE5vIHNwZWNpZmljIGNvbmZpZyBjaGFuZ2VzIGFyZSBpbmRpY2F0ZWQsIHdoaWNoIGlzIGdvb2QuIFRoZSByZWFzb25pbmcgaXMgc291bmQsIGl0IHN1Y2NpbmN0bHkgaWRlbnRpZmllcyB0aGUgcHJvYmxlbSBhbmQgaXRzIGxvY2F0aW9uIGluIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGhhd19zdXBlciYjMzQ7LAogICAgJiMzNDtlbWVyZ2VuY3lfdGhhd19hbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGNvcmUgVkZTIGxheWVyIHdoZXJlIGB0aGF3X3N1cGVyYCB3b3VsZCBpbmNvcnJlY3RseSByZXR1cm4gYC1FSU5WQUxgIGluc3RlYWQgb2YgYDBgIHdoZW4gdGhlcmUgYXJlIG90aGVyIGZyZWV6ZXJzIHJlbWFpbmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RoYXdfc3VwZXImIzM0OywKICAgICYjMzQ7ZW1lcmdlbmN5X3RoYXdfYWxsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBjb3JlIFZGUyBsYXllciB3aGVyZSBgdGhhd19zdXBlcmAgd291bGQgaW5jb3JyZWN0bHkgcmV0dXJuIGAtRUlOVkFMYCBpbnN0ZWFkIG9mIGAwYCB3aGVuIHRoZXJlIGFyZSBvdGhlciBmcmVlemVycyByZW1haW5pbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOToyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgdGhhd19zdXBlcl9sb2NrZWRgIHdoZXJlIHRoZSBmdW5jdGlvbiBpbmNvcnJlY3RseSByZXR1cm5lZCBgLUVJTlZBTGAgaW5zdGVhZCBvZiBgMGAgd2hlbiBgZnJlZXplX2RlY2AgaW5kaWNhdGVkIHRoYXQgb3RoZXIgZnJlZXplcnMgd2VyZSBzdGlsbCBob2xkaW5nIHRoZSBmcmVlemUuIFRoZSBgZXJyb3JgIHZhcmlhYmxlIHdhcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGAtRUlOVkFMYCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uLCBzbyB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnZvbHZlZC4gVGhpcyBpcyBhIHB1cmUgbG9naWMvY29udHJvbC1mbG93IGJ1ZyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTFjNzQ1N2ZjOWJkMDA2ZDliYzkwNzBlZTIzNjQwZjhmODljODBhNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDA5OjIzOjExIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggMDVlNDQzMTczMDM4Ny4uMDFkYjYxMjRlNDA5ZCAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9zdXBlci5jCkBAIC0yMzY5LDExICYjNDM7MjM2OSwxNCBAQCBzdGF0aWMgaW50IHRoYXdfc3VwZXJfbG9ja2VkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGVudW0gZnJlZXplX2hvbGRlciB3aG8sCiAJCWdvdG8gb3V0X3VubG9jazsKIAogCS8qCi0JICogQWxsIGZyZWV6ZXJzIHNoYXJlIGEgc2luZ2xlIGFjdGl2ZSByZWZlcmVuY2UuCi0JICogU28ganVzdCB1bmxvY2sgaW4gY2FzZSB0aGVyZSBhcmUgYW55IGxlZnQuCiYjNDM7CSAqIEFsbCBmcmVlemVycyBzaGFyZSBhIHNpbmdsZSBhY3RpdmUgcmVmZXJlbmNlLiBJZiBvdGhlciBmcmVlemVycwomIzQzOwkgKiByZW1haW4sIGRyb3Agb3VyIGhvbGQgYW5kIHJlcG9ydCBzdWNjZXNzOyB0aGUgc3VwZXJibG9jayBzdGF5cwomIzQzOwkgKiBmcm96ZW4gdW50aWwgdGhlIGxhc3QgaG9sZGVyIHRoYXdzIGl0LgogCSAqLwotCWlmIChmcmVlemVfZGVjKHNiLCB3aG8pKQomIzQzOwlpZiAoZnJlZXplX2RlYyhzYiwgd2hvKSkgewomIzQzOwkJZXJyb3IgPSAwOwogCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CX0KIAogCWlmIChzYl9yZG9ubHkoc2IpKSB7CiAJCXNiLSZndDtzX3dyaXRlcnMuZnJvemVuID0gU0JfVU5GUk9aRU47CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3VwZXJibG9jayBUaGF3IExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBmcy9zdXBlci5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHRoYXdfc3VwZXJfbG9ja2VkYCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB3ZSBoYXZlIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgbG9naWMgYnVnIGZpeCByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgdGhlIGBmcmVlemVfZGVjYCBjYWxsLiBQcmV2aW91c2x5LCB0aGUgY29kZSBhc3N1bWVkIHRoYXQgaWYgYGZyZWV6ZV9kZWNgIHJldHVybmVkIHRydWUsIGl0IGF1dG9tYXRpY2FsbHkgbWVhbnQgdGhlIHRoYXcgd2FzIGZ1bGx5IHN1Y2Nlc3NmdWwuIEhvd2V2ZXIsIHRoYXQmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0LiBUcnVlIGZyb20gYGZyZWV6ZV9kZWNgIHNpbXBseSBtZWFucyAqdGhpcyogZnJlZXplciBoYXMgcmVsZWFzZWQgaXRzIGhvbGQsIGJ1dCBvdGhlciBmcmVlemVycyBtaWdodCAqc3RpbGwqIGJlIGFjdGl2ZWx5IGZyZWV6aW5nIHRoZSBzdXBlcmJsb2NrLgoKVGhlIG9yaWdpbmFsIGNvZGUgc25pcHBldCB3YXM6CgpgYGBjCiAJLyoKLQkgKiBBbGwgZnJlZXplcnMgc2hhcmUgYSBzaW5nbGUgYWN0aXZlIHJlZmVyZW5jZS4KLQkgKiBTbyBqdXN0IHVubG9jayBpbiBjYXNlIHRoZXJlIGFyZSBhbnkgbGVmdC4KJiM0MzsJICogQWxsIGZyZWV6ZXJzIHNoYXJlIGEgc2luZ2xlIGFjdGl2ZSByZWZlcmVuY2UuIElmIG90aGVyIGZyZWV6ZXJzCiYjNDM7CSAqIHJlbWFpbiwgZHJvcCBvdXIgaG9sZCBhbmQgcmVwb3J0IHN1Y2Nlc3M7IHRoZSBzdXBlcmJsb2NrIHN0YXlzCiYjNDM7CSAqIGZyb3plbiB1bnRpbCB0aGUgbGFzdCBob2xkZXIgdGhhd3MgaXQuCiAJICovCi0JaWYgKGZyZWV6ZV9kZWMoc2IsIHdobykpCiYjNDM7CWlmIChmcmVlemVfZGVjKHNiLCB3aG8pKSB7CiYjNDM7CQllcnJvciA9IDA7CiAJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQpgYGAKClRoZSBidWcgaGVyZSBpcyB0aGF0IGBlcnJvcmAgd2FzIG5vdCBiZWluZyBleHBsaWNpdGx5IHNldCB0byBgMGAgd2hlbiBgZnJlZXplX2RlY2AgcmV0dXJuZWQgYHRydWVgLiBUaGlzIGxpa2VseSBtZWFucyB0aGF0IGEgcHJpb3IgZXJyb3IgdmFsdWUgb3IgYW4gdW5pbml0aWFsaXplZCB2YWx1ZSBtaWdodCBiZSBjYXJyaWVkIGZvcndhcmQsIGluY29ycmVjdGx5IGluZGljYXRpbmcgYSBmYWlsdXJlIHdoZW4sIGluIGZhY3QsIHRoZSByZWxlYXNlIGZyb20gKnRoaXMqIGZyZWV6ZXIgd2FzIHN1Y2Nlc3NmdWwsIGFuZCB0aGUgc3VwZXJibG9jayB3aWxsIHJlbWFpbiBmcm96ZW4gdW50aWwgdGhlIGxhc3Qgb25lIHRoYXdzLiBUaGlzIGZpeCBlbnN1cmVzIHRoYXQgdGhlICYjMzQ7c3VjY2VzcyYjMzQ7IGlzIHJlcG9ydGVkIGNvcnJlY3RseSwgZXZlbiBpZiB0aGUgc3VwZXJibG9jayByZW1haW5zIGZyb3plbi4gVGhpcyBpcyBjcnVjaWFsIGZvciBhdm9pZGluZyBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciBkdXJpbmcgdGhlIHRoYXcgcHJvY2VzcyBhbmQgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IHN0YXRlIG9mIHRoZSBzdXBlcmJsb2NrIGlzIHJlcG9ydGVkIHRvIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgYSBnb29kIGNhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aGF3X3N1cGVyX2xvY2tlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc3VwZXIuYy00NC1cbmZzL3N1cGVyLmM6NDU6c3RhdGljIGludCB0aGF3X3N1cGVyX2xvY2tlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBlbnVtIGZyZWV6ZV9ob2xkZXIgd2hvLFxuZnMvc3VwZXIuYy00Ni1cdFx0XHQgICAgIGNvbnN0IHZvaWQgKmZyZWV6ZV9vd25lcik7XG4tLVxuZnMvc3VwZXIuYz0xMjE5PXN0YXRpYyB2b2lkIGRvX3RoYXdfYWxsX2NhbGxiYWNrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKnVudXNlZClcbi0tXG5mcy9zdXBlci5jLTEyMjktXHRpZiAoc3VwZXJfbG9ja19leGNsKHNiKSlcbmZzL3N1cGVyLmM6MTIzMDpcdFx0dGhhd19zdXBlcl9sb2NrZWQoc2IsIEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLCBOVUxMKTtcbmZzL3N1cGVyLmMtMTIzMS1cdGRlYWN0aXZhdGVfc3VwZXIoc2IpO1xuLS1cbmZzL3N1cGVyLmM9MjM1Mj1FWFBPUlRfU1lNQk9MKGZyZWV6ZV9zdXBlcik7XG4tLVxuZnMvc3VwZXIuYy0yMzU5LSAqL1xuZnMvc3VwZXIuYzoyMzYwOnN0YXRpYyBpbnQgdGhhd19zdXBlcl9sb2NrZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcbmZzL3N1cGVyLmMtMjM2MS1cdFx0XHQgICAgIGNvbnN0IHZvaWQgKmZyZWV6ZV9vd25lcilcbi0tXG5mcy9zdXBlci5jPTI0MzE9aW50IHRoYXdfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcbi0tXG5mcy9zdXBlci5jLTI0MzctXHR9XG5mcy9zdXBlci5jOjI0Mzg6XHRyZXR1cm4gdGhhd19zdXBlcl9sb2NrZWQoc2IsIHdobywgZnJlZXplX293bmVyKTtcbmZzL3N1cGVyLmMtMjQzOS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBJIHdlcmUgcHJvY2Vzc2luZyB0aG9zZSB0aG91Z2h0czoKCioqRGVlcCBEaXZlIGludG8gYHRoYXdfc3VwZXJfbG9ja2VkYCoqCgpPa2F5LCBzbyBJJiMzOTttIGFib3V0IHRvIGRpZyBpbnRvIHRoZSBgdGhhd19zdXBlcl9sb2NrZWRgIGZ1bmN0aW9uLCB3aGljaCByZXNpZGVzIGluIHRoZSBoZWFydCBvZiB0aGUgZmlsZXN5c3RlbSBvcGVyYXRpb25zIOKAkyBgZnMvc3VwZXIuY2AuIFRoaXMgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byBmaWxlc3lzdGVtIHVuZnJlZXppbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIHN1cGVyYmxvY2sgbG9jay4gVGhlICYjMzQ7bG9ja2VkJiMzNDsgcGFydCBpcyBjcnVjaWFsOyBpdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgbGlrZWx5IHdpdGhpbiBhIGNyaXRpY2FsIHNlY3Rpb24gdGhhdCBuZWVkcyBjYXJlZnVsIHN5bmNocm9uaXphdGlvbiB0byBhdm9pZCBjb3JydXB0aW9uIG9yIGRhdGEgcmFjZXMgZHVyaW5nIGEgZmlsZXN5c3RlbSB1bmZyZWV6ZS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBsb2NrIGFjcXVpc2l0aW9uIGFuZCByZWxlYXNlIHBhdHRlcm5zIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgbG9naWMgdGhhdCBkZWFscyB3aXRoIHN5bmNpbmcgbWV0YWRhdGEsIGVuc3VyaW5nIGNvbnNpc3RlbnQgc3RhdGUgYWNyb3NzIHRoZSBmaWxlc3lzdGVtIGFzIGl0IGNvbWVzIGJhY2sgb25saW5lLCBhbmQgcG9zc2libHkgaGFuZGxpbmcgYW55IHBlbmRpbmcgd3JpdGVzIG9yIG90aGVyIG9wZXJhdGlvbnMgdGhhdCB3ZXJlIGhlbGQgdXAgZHVyaW5nIHRoZSBmcm96ZW4gc3RhdGUuIEl04oCZcyBsaWtlbHkgdGhlcmUgd2lsbCBiZSBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIHRoaXMgcHJvY2VzcywgcG90ZW50aWFsbHkgaW52b2x2aW5nIHRoZSBkZXZpY2UgaXRzZWxmLCBpbm9kZSBvcGVyYXRpb25zLCBhbmQgdGhlIG92ZXJhbGwgc3VwZXIgYmxvY2sgc3RydWN0dXJlLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTt2ZSBoYW5kbGVkIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zIHdpdGhpbiB0aGlzLiBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgdmFyaW91cyBzdGF0ZXMgYSBzdXBlcmJsb2NrIGNhbiBiZSBpbiwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIHRoZSBnbG9iYWwgZmlsZXN5c3RlbSBmcmVlemUvdGhhdyBtZWNoYW5pc21zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgb24gaG93IHRoZXkmIzM5O3JlIG1hbmFnaW5nIGpvdXJuYWxpbmcgb3Igb3RoZXIgY3Jhc2gtcmVjb3ZlcnkgbWVjaGFuaXNtcyBkdXJpbmcgdGhlIHByb2Nlc3MsIGFuZCBtYWtpbmcgc3VyZSBhbGwgdGhlIGkvbyBpcyBwcm9wZXJseSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3N1cGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzUwOlx0XHRyZXR1cm4gMDtcbjIzNTE6XHR9XG4yMzUyOlx0RVhQT1JUX1NZTUJPTChmcmVlemVfc3VwZXIpO1xuMjM1MzpcdFxuMjM1NDpcdC8qXG4yMzU1Olx0ICogVW5kb2VzIHRoZSBlZmZlY3Qgb2YgYSBmcmVlemVfc3VwZXJfbG9ja2VkIGNhbGwuICBJZiB0aGUgZmlsZXN5c3RlbSBpc1xuMjM1NjpcdCAqIGZyb3plbiBib3RoIGJ5IHVzZXJzcGFjZSBhbmQgdGhlIGtlcm5lbCwgYSB0aGF3IGNhbGwgZnJvbSBlaXRoZXIgc291cmNlXG4yMzU3Olx0ICogcmVtb3ZlcyB0aGF0IHN0YXRlIHdpdGhvdXQgcmVsZWFzaW5nIHRoZSBvdGhlciBzdGF0ZSBvciB1bmxvY2tpbmcgdGhlXG4yMzU4Olx0ICogZmlsZXN5c3RlbS5cbjIzNTk6XHQgKi9cbjIzNjA6XHRzdGF0aWMgaW50IHRoYXdfc3VwZXJfbG9ja2VkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGVudW0gZnJlZXplX2hvbGRlciB3aG8sXG4yMzYxOlx0XHRcdFx0ICAgICBjb25zdCB2b2lkICpmcmVlemVfb3duZXIpXG4yMzYyOlx0e1xuMjM2MzpcdFx0aW50IGVycm9yID0gLUVJTlZBTDtcbjIzNjQ6XHRcbjIzNjU6XHRcdGlmIChzYi1cdTAwM2VzX3dyaXRlcnMuZnJvemVuICE9IFNCX0ZSRUVaRV9DT01QTEVURSlcbjIzNjY6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMjM2NzpcdFxuMjM2ODpcdFx0aWYgKCFtYXlfdW5mcmVlemUoc2IsIHdobywgZnJlZXplX293bmVyKSlcbjIzNjk6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMjM3MDpcdFxuMjM3MTpcdFx0LypcbjIzNzI6XHRcdCAqIEFsbCBmcmVlemVycyBzaGFyZSBhIHNpbmdsZSBhY3RpdmUgcmVmZXJlbmNlLiBJZiBvdGhlciBmcmVlemVyc1xuMjM3MzpcdFx0ICogcmVtYWluLCBkcm9wIG91ciBob2xkIGFuZCByZXBvcnQgc3VjY2VzczsgdGhlIHN1cGVyYmxvY2sgc3RheXNcbjIzNzQ6XHRcdCAqIGZyb3plbiB1bnRpbCB0aGUgbGFzdCBob2xkZXIgdGhhd3MgaXQuXG4yMzc1Olx0XHQgKi9cbjIzNzY6XHRcdGlmIChmcmVlemVfZGVjKHNiLCB3aG8pKSB7XG4yMzc3Olx0XHRcdGVycm9yID0gMDtcbjIzNzg6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMjM3OTpcdFx0fVxuMjM4MDpcdFxuMjM4MTpcdFx0aWYgKHNiX3Jkb25seShzYikpIHtcbjIzODI6XHRcdFx0c2ItXHUwMDNlc193cml0ZXJzLmZyb3plbiA9IFNCX1VORlJPWkVOO1xuMjM4MzpcdFx0XHRzYi1cdTAwM2VzX3dyaXRlcnMuZnJlZXplX293bmVyID0gTlVMTDtcbjIzODQ6XHRcdFx0d2FrZV91cF92YXIoXHUwMDI2c2ItXHUwMDNlc193cml0ZXJzLmZyb3plbik7XG4yMzg1Olx0XHRcdGdvdG8gb3V0X2RlYWN0aXZhdGU7XG4yMzg2Olx0XHR9XG4yMzg3Olx0XG4yMzg4Olx0XHRsb2NrZGVwX3NiX2ZyZWV6ZV9hY3F1aXJlKHNiKTtcbjIzODk6XHRcbjIzOTA6XHRcdGlmIChzYi1cdTAwM2VzX29wLVx1MDAzZXVuZnJlZXplX2ZzKSB7XG4yMzkxOlx0XHRcdGVycm9yID0gc2ItXHUwMDNlc19vcC1cdTAwM2V1bmZyZWV6ZV9mcyhzYik7XG4yMzkyOlx0XHRcdGlmIChlcnJvcikge1xuMjM5MzpcdFx0XHRcdHByX2VycihcJiMzNDtWRlM6IEZpbGVzeXN0ZW0gdGhhdyBmYWlsZWRcXG5cJiMzNDspO1xuMjM5NDpcdFx0XHRcdGZyZWV6ZV9pbmMoc2IsIHdobyk7XG4yMzk1Olx0XHRcdFx0bG9ja2RlcF9zYl9mcmVlemVfcmVsZWFzZShzYik7XG4yMzk2Olx0XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMjM5NzpcdFx0XHR9XG4yMzk4Olx0XHR9XG4yMzk5Olx0XG4yNDAwOlx0XHRzYi1cdTAwM2VzX3dyaXRlcnMuZnJvemVuID0gU0JfVU5GUk9aRU47XG4yNDAxOlx0XHRzYi1cdTAwM2VzX3dyaXRlcnMuZnJlZXplX293bmVyID0gTlVMTDtcbjI0MDI6XHRcdHdha2VfdXBfdmFyKFx1MDAyNnNiLVx1MDAzZXNfd3JpdGVycy5mcm96ZW4pO1xuMjQwMzpcdFx0c2JfZnJlZXplX3VubG9jayhzYiwgU0JfRlJFRVpFX0ZTKTtcbjI0MDQ6XHRvdXRfZGVhY3RpdmF0ZTpcbjI0MDU6XHRcdGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHNiKTtcbjI0MDY6XHRcdHJldHVybiAwO1xuMjQwNzpcdFxuMjQwODpcdG91dF91bmxvY2s6XG4yNDA5Olx0XHRzdXBlcl91bmxvY2tfZXhjbChzYik7XG4yNDEwOlx0XHRyZXR1cm4gZXJyb3I7XG4yNDExOlx0fVxuMjQxMjpcdFxuMjQxMzpcdC8qKlxuMjQxNDpcdCAqIHRoYXdfc3VwZXIgLS0gdW5sb2NrIGZpbGVzeXN0ZW1cbjI0MTU6XHQgKiBAc2I6IHRoZSBzdXBlciB0byB0aGF3XG4yNDE2Olx0ICogQHdobzogY29udGV4dCB0aGF0IHdhbnRzIHRvIGZyZWV6ZVxuMjQxNzpcdCAqIEBmcmVlemVfb3duZXI6IG93bmVyIG9mIHRoZSBmcmVlemVcbjI0MTg6XHQgKlxuMjQxOTpcdCAqIFVubG9ja3MgdGhlIGZpbGVzeXN0ZW0gYW5kIG1hcmtzIGl0IHdyaXRlYWJsZSBhZ2FpbiBhZnRlciBmcmVlemVfc3VwZXIoKVxuMjQyMDpcdCAqIGlmIHRoZXJlIGFyZSBubyByZW1haW5pbmcgZnJlZXplcyBvbiB0aGUgZmlsZXN5c3RlbS5cbjI0MjE6XHQgKlxuMjQyMjpcdCAqIEB3aG8gc2hvdWxkIGJlOlxuMjQyMzpcdCAqICogJUZSRUVaRV9IT0xERVJfVVNFUlNQQUNFIGlmIHVzZXJzcGFjZSB3YW50cyB0byB0aGF3IHRoZSBmcztcbjI0MjQ6XHQgKiAqICVGUkVFWkVfSE9MREVSX0tFUk5FTCBpZiB0aGUga2VybmVsIHdhbnRzIHRvIHRoYXcgdGhlIGZzLlxuMjQyNTpcdCAqICogJUZSRUVaRV9NQVlfTkVTVCB3aGV0aGVyIG5lc3RpbmcgZnJlZXplIGFuZCB0aGF3IHJlcXVlc3RzIGlzIGFsbG93ZWRcbjI0MjY6XHQgKlxuMjQyNzpcdCAqIEEgZmlsZXN5c3RlbSBtYXkgaG9sZCBtdWx0aXBsZSBkZXZpY2VzIGFuZCB0aHVzIGEgZmlsZXN5c3RlbXMgbWF5XG4yNDI4Olx0ICogaGF2ZSBiZWVuIGZyb3plbiB0aHJvdWdoIHRoZSBibG9jayBsYXllciB2aWEgbXVsdGlwbGUgYmxvY2sgZGV2aWNlcy5cbjI0Mjk6XHQgKiBUaGUgZmlsZXN5c3RlbSByZW1haW5zIGZyb3plbiB1bnRpbCBhbGwgYmxvY2sgZGV2aWNlcyBhcmUgdW5mcm96ZW4uXG4yNDMwOlx0ICovXG4yNDMxOlx0aW50IHRoYXdfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcbjI0MzI6XHRcdCAgICAgICBjb25zdCB2b2lkICpmcmVlemVfb3duZXIpXG4yNDMzOlx0e1xuMjQzNDpcdFx0aWYgKCFzdXBlcl9sb2NrX2V4Y2woc2IpKSB7XG4yNDM1Olx0XHRcdFdBUk5fT05DRSgxLCBcJiMzNDtEeWluZyBzdXBlcmJsb2NrIHdoaWxlIHRoYXdpbmchXCYjMzQ7KTtcbjI0MzY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yNDM3Olx0XHR9XG4yNDM4Olx0XHRyZXR1cm4gdGhhd19zdXBlcl9sb2NrZWQoc2IsIHdobywgZnJlZXplX293bmVyKTtcbjI0Mzk6XHR9XG4yNDQwOlx0RVhQT1JUX1NZTUJPTCh0aGF3X3N1cGVyKTtcbjI0NDE6XHRcbjI0NDI6XHQvKlxuMjQ0MzpcdCAqIENyZWF0ZSB3b3JrcXVldWUgZm9yIGRlZmVycmVkIGRpcmVjdCBJTyBjb21wbGV0aW9ucy4gV2UgYWxsb2NhdGUgdGhlXG4yNDQ0Olx0ICogd29ya3F1ZXVlIHdoZW4gaXQmIzM5O3MgZmlyc3QgbmVlZGVkLiBUaGlzIGF2b2lkcyBjcmVhdGluZyB3b3JrcXVldWUgZm9yXG4yNDQ1Olx0ICogZmlsZXN5c3RlbXMgdGhhdCBkb24mIzM5O3QgbmVlZCBpdCBhbmQgYWxzbyBhbGxvd3MgdXMgdG8gY3JlYXRlIHRoZSB3b3JrcXVldWVcbjI0NDY6XHQgKiBsYXRlIGVub3VnaCBzbyB0aGUgd2UgY2FuIGluY2x1ZGUgc19pZCBpbiB0aGUgbmFtZSBvZiB0aGUgd29ya3F1ZXVlLlxuMjQ0NzpcdCAqL1xuMjQ0ODpcdGludCBzYl9pbml0X2Rpb19kb25lX3dxKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4yNDQ5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTU5CgkJCQkJCQlvdXRwdXQ6IDEzNgoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJ1ZyBGaXgqKgoKT2theSwgc28gdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGxvZ2ljIGVycm9yLiBJdCBsb29rcyBsaWtlIGB0aGF3X3N1cGVyX2xvY2tlZGAgaXMgZXJyb25lb3VzbHkgcmV0dXJuaW5nIGAtRUlOVkFMYCB3aGVuIGl0IHNob3VsZCBiZSByZXR1cm5pbmcgYDBgIGluIGEgc3BlY2lmaWMgc2NlbmFyaW8uIFRoZSByb290IGNhdXNlIGFwcGVhcnMgdG8gYmUgdGhlIGhhbmRsaW5nIG9mIGBmcmVlemVfZGVjYCByZXR1cm5pbmcgdHJ1ZS4KCkkgc2VlIHRoYXQgYGVycm9yYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCB0byBgLUVJTlZBTGAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24sIHdoaWNoIGNvbmZpcm1zIG15IGluaXRpYWwgaW50dWl0aW9uIHRoYXQgdGhpcyBpc24mIzM5O3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbS4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gVGhlIHByb2JsZW0gaXNuJiMzOTt0IHJlbGF0ZWQgdG8gbWVtb3J5IGluaXRpYWxpemF0aW9uIG9yIGxhY2sgdGhlcmVvZi4gSXQgaXMgYSBzdHJhaWdodCB1cCBpbmNvcnJlY3QgcmV0dXJuIHZhbHVlIGJlaW5nIHRyaWdnZXJlZCBpbiB0aGUgY29kZSwgd2hpY2ggaXMgZWFzaWx5IGFkZHJlc3NhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgdGhhd19zdXBlcl9sb2NrZWRgIHdoZXJlIHRoZSBmdW5jdGlvbiBpbmNvcnJlY3RseSByZXR1cm5lZCBgLUVJTlZBTGAgaW5zdGVhZCBvZiBgMGAgd2hlbiBgZnJlZXplX2RlY2AgaW5kaWNhdGVkIHRoYXQgb3RoZXIgZnJlZXplcnMgd2VyZSBzdGlsbCBob2xkaW5nIHRoZSBmcmVlemUuIFRoZSBgZXJyb3JgIHZhcmlhYmxlIHdhcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGAtRUlOVkFMYCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uLCBzbyB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnZvbHZlZC4gVGhpcyBpcyBhIHB1cmUgbG9naWMvY29udHJvbC1mbG93IGJ1ZyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB0aGF3X3N1cGVyX2xvY2tlZGAgd2hlcmUgdGhlIGZ1bmN0aW9uIGluY29ycmVjdGx5IHJldHVybmVkIGAtRUlOVkFMYCBpbnN0ZWFkIG9mIGAwYCB3aGVuIGBmcmVlemVfZGVjYCBpbmRpY2F0ZWQgdGhhdCBvdGhlciBmcmVlemVycyB3ZXJlIHN0aWxsIGhvbGRpbmcgdGhlIGZyZWV6ZS4gVGhlIGBlcnJvcmAgdmFyaWFibGUgd2FzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYC1FSU5WQUxgIGF0IHRoZSBzdGFydCBvZiB0aGUgZnVuY3Rpb24sIHNvIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludm9sdmVkLiBUaGlzIGlzIGEgcHVyZSBsb2dpYy9jb250cm9sLWZsb3cgYnVnIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOToyMzoxMi42OTA4NDkwMDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTgxNjYxNDU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aGF3X3N1cGVyXCIsXG4gICAgXCJlbWVyZ2VuY3lfdGhhd19hbGxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB0aGF3X3N1cGVyX2xvY2tlZGAgd2hlcmUgdGhlIGZ1bmN0aW9uIGluY29ycmVjdGx5IHJldHVybmVkIGAtRUlOVkFMYCBpbnN0ZWFkIG9mIGAwYCB3aGVuIGBmcmVlemVfZGVjYCBpbmRpY2F0ZWQgdGhhdCBvdGhlciBmcmVlemVycyB3ZXJlIHN0aWxsIGhvbGRpbmcgdGhlIGZyZWV6ZS4gVGhlIGBlcnJvcmAgdmFyaWFibGUgd2FzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYC1FSU5WQUxgIGF0IHRoZSBzdGFydCBvZiB0aGUgZnVuY3Rpb24sIHNvIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludm9sdmVkLiBUaGlzIGlzIGEgcHVyZSBsb2dpYy9jb250cm9sLWZsb3cgYnVnIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBjb3JlIFZGUyBsYXllciB3aGVyZSBgdGhhd19zdXBlcmAgd291bGQgaW5jb3JyZWN0bHkgcmV0dXJuIGAtRUlOVkFMYCBpbnN0ZWFkIG9mIGAwYCB3aGVuIHRoZXJlIGFyZSBvdGhlciBmcmVlemVycyByZW1haW5pbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MjM6MTIuNjkwODU0OTg2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQyODM0MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhMWM3NDU3ZmM5YmQwMDZkOWJjOTA3MGVlMjM2NDBmOGY4OWM4MGE0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDIxIDA5OjIzOjExIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jXFxuaW5kZXggMDVlNDQzMTczMDM4Ny4uMDFkYjYxMjRlNDA5ZCAxMDA2NDRcXG4tLS0gYS9mcy9zdXBlci5jXFxuKysrIGIvZnMvc3VwZXIuY1xcbkBAIC0yMzY5LDExICsyMzY5LDE0IEBAIHN0YXRpYyBpbnQgdGhhd19zdXBlcl9sb2NrZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogQWxsIGZyZWV6ZXJzIHNoYXJlIGEgc2luZ2xlIGFjdGl2ZSByZWZlcmVuY2UuXFxuLVxcdCAqIFNvIGp1c3QgdW5sb2NrIGluIGNhc2UgdGhlcmUgYXJlIGFueSBsZWZ0LlxcbitcXHQgKiBBbGwgZnJlZXplcnMgc2hhcmUgYSBzaW5nbGUgYWN0aXZlIHJlZmVyZW5jZS4gSWYgb3RoZXIgZnJlZXplcnNcXG4rXFx0ICogcmVtYWluLCBkcm9wIG91ciBob2xkIGFuZCByZXBvcnQgc3VjY2VzczsgdGhlIHN1cGVyYmxvY2sgc3RheXNcXG4rXFx0ICogZnJvemVuIHVudGlsIHRoZSBsYXN0IGhvbGRlciB0aGF3cyBpdC5cXG4gXFx0ICovXFxuLVxcdGlmIChmcmVlemVfZGVjKHNiLCB3aG8pKVxcbitcXHRpZiAoZnJlZXplX2RlYyhzYiwgd2hvKSkge1xcbitcXHRcXHRlcnJvciA9IDA7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKHNiX3Jkb25seShzYikpIHtcXG4gXFx0XFx0c2ItXFx1MDAzZXNfd3JpdGVycy5mcm96ZW4gPSBTQl9VTkZST1pFTjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MjM6MTMuMTc2MTU3MjkxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjY5MzYzNjc5NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGhhd19zdXBlclwiLFxuICAgIFwiZW1lcmdlbmN5X3RoYXdfYWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGNvcmUgVkZTIGxheWVyIHdoZXJlIGB0aGF3X3N1cGVyYCB3b3VsZCBpbmNvcnJlY3RseSByZXR1cm4gYC1FSU5WQUxgIGluc3RlYWQgb2YgYDBgIHdoZW4gdGhlcmUgYXJlIG90aGVyIGZyZWV6ZXJzIHJlbWFpbmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMWM3NDU3ZmM5YmQwMDZkOWJjOTA3MGVlMjM2NDBmOGY4OWM4MGE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMDk6MjM6MTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xuaW5kZXggMDVlNDQzMTczMDM4Ny4uMDFkYjYxMjRlNDA5ZCAxMDA2NDRcbi0tLSBhL2ZzL3N1cGVyLmNcbisrKyBiL2ZzL3N1cGVyLmNcbkBAIC0yMzY5LDExICsyMzY5LDE0IEBAIHN0YXRpYyBpbnQgdGhhd19zdXBlcl9sb2NrZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuIFx0Lypcbi1cdCAqIEFsbCBmcmVlemVycyBzaGFyZSBhIHNpbmdsZSBhY3RpdmUgcmVmZXJlbmNlLlxuLVx0ICogU28ganVzdCB1bmxvY2sgaW4gY2FzZSB0aGVyZSBhcmUgYW55IGxlZnQuXG4rXHQgKiBBbGwgZnJlZXplcnMgc2hhcmUgYSBzaW5nbGUgYWN0aXZlIHJlZmVyZW5jZS4gSWYgb3RoZXIgZnJlZXplcnNcbitcdCAqIHJlbWFpbiwgZHJvcCBvdXIgaG9sZCBhbmQgcmVwb3J0IHN1Y2Nlc3M7IHRoZSBzdXBlcmJsb2NrIHN0YXlzXG4rXHQgKiBmcm96ZW4gdW50aWwgdGhlIGxhc3QgaG9sZGVyIHRoYXdzIGl0LlxuIFx0ICovXG4tXHRpZiAoZnJlZXplX2RlYyhzYiwgd2hvKSlcbitcdGlmIChmcmVlemVfZGVjKHNiLCB3aG8pKSB7XG4rXHRcdGVycm9yID0gMDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0fVxuIFxuIFx0aWYgKHNiX3Jkb25seShzYikpIHtcbiBcdFx0c2ItXHUwMDNlc193cml0ZXJzLmZyb3plbiA9IFNCX1VORlJPWkVOO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MjM6MTMuMTc2MTU5MTYxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM4OTQ5MzMyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBWRlMgU3VwZXJibG9jayBUaGF3aW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGZzL3N1cGVyLmNgLiBJdCdzIGZvY3VzZWQgb24gYHRoYXdfc3VwZXJfbG9ja2VkYCwgd2hpY2ggaXMgcmlnaHQgd2hlcmUgSSdkIGV4cGVjdCB0byBzZWUgY2hhbmdlcyByZWxhdGVkIHRvIGZyZWV6ZXIgaW50ZXJhY3Rpb25zLiBUaGUga2V5IGNoYW5nZSBpcyB0aGlzIHNuaXBwZXQ6XG5cbmBgYGNcbiBcdC8qXG4tXHQgKiBBbGwgZnJlZXplcnMgc2hhcmUgYSBzaW5nbGUgYWN0aXZlIHJlZmVyZW5jZS5cbi1cdCAqIFNvIGp1c3QgdW5sb2NrIGluIGNhc2UgdGhlcmUgYXJlIGFueSBsZWZ0LlxuK1x0ICogQWxsIGZyZWV6ZXJzIHNoYXJlIGEgc2luZ2xlIGFjdGl2ZSByZWZlcmVuY2UuIElmIG90aGVyIGZyZWV6ZXJzXG4rXHQgKiByZW1haW4sIGRyb3Agb3VyIGhvbGQgYW5kIHJlcG9ydCBzdWNjZXNzOyB0aGUgc3VwZXJibG9jayBzdGF5c1xuK1x0ICogZnJvemVuIHVudGlsIHRoZSBsYXN0IGhvbGRlciB0aGF3cyBpdC5cbiBcdCAqL1xuLVx0aWYgKGZyZWV6ZV9kZWMoc2IsIHdobykpXG4rXHRpZiAoZnJlZXplX2RlYyhzYiwgd2hvKSkge1xuK1x0XHRlcnJvciA9IDA7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbmBgYFxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBpcyBhZGRyZXNzaW5nIGFuIGVkZ2UgY2FzZSBpbiB0aGUgZnJlZXplciBsb2dpYy4gUHJldmlvdXNseSwgaXQgbG9va2VkIGxpa2UgaXQgd2FzIHNpbXBseSB1bmxvY2tpbmcgdGhlIHN1cGVyYmxvY2sgaWYgdGhlcmUgd2VyZSBhbnkgcmVtYWluaW5nIGZyZWV6ZXJzLiBOb3csIGl0IGV4cGxpY2l0bHkgY2hlY2tzIGlmIGBmcmVlemVfZGVjYCByZXR1cm5zIHRydWUgKG1lYW5pbmcgdGhlcmUgYXJlIHN0aWxsIG90aGVyIGZyZWV6ZXJzIGFjdGl2ZSksIGFuZCBpZiBzbywgaXQgKmV4cGxpY2l0bHkqIHNldHMgYGVycm9yYCB0byAwIGJlZm9yZSBleGl0aW5nLiBUaGlzIGlzIGltcG9ydGFudDogaXQncyBub3Qgc2ltcGx5IGxlYXZpbmcgYGVycm9yYCB1bmluaXRpYWxpemVkIG9yIHBvc3NpYmx5IHNldCB0byBhIHByZXZpb3VzIGluY29ycmVjdCB2YWx1ZSwgaXQncyBlbnN1cmluZyBhIHN1Y2Nlc3MgcmV0dXJuIHdoZW4gYW5vdGhlciBmcmVlemVyIGhvbGRzIHRoZSBsb2NrLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgYnVnIGZpeCByZWxhdGVkIHRvIGVycm9yIGhhbmRsaW5nIGluIHRoaXMgc2NlbmFyaW8uIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgZXJyb3IgcmVwb3J0aW5nIG9yIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGlmIG11bHRpcGxlIGZyZWV6ZXJzIHdlcmUgaW52b2x2ZWQuIFRoZSBmaXggZW5zdXJlcyBhIG1vcmUgY29uc2lzdGVudCBhbmQgY29ycmVjdCBzdGF0ZSBtYW5hZ2VtZW50LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYHRoYXdfc3VwZXJfbG9ja2VkYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDYyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MjM6MTguNTY1NjU1NDc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDQwMjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRoYXdfc3VwZXJfbG9ja2VkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3N1cGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvc3VwZXIuYy00NC1cXG5mcy9zdXBlci5jOjQ1OnN0YXRpYyBpbnQgdGhhd19zdXBlcl9sb2NrZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcXG5mcy9zdXBlci5jLTQ2LVxcdFxcdFxcdCAgICAgY29uc3Qgdm9pZCAqZnJlZXplX293bmVyKTtcXG4tLVxcbmZzL3N1cGVyLmM9MTIxOT1zdGF0aWMgdm9pZCBkb190aGF3X2FsbF9jYWxsYmFjayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICp1bnVzZWQpXFxuLS1cXG5mcy9zdXBlci5jLTEyMjktXFx0aWYgKHN1cGVyX2xvY2tfZXhjbChzYikpXFxuZnMvc3VwZXIuYzoxMjMwOlxcdFxcdHRoYXdfc3VwZXJfbG9ja2VkKHNiLCBGUkVFWkVfSE9MREVSX1VTRVJTUEFDRSwgTlVMTCk7XFxuZnMvc3VwZXIuYy0xMjMxLVxcdGRlYWN0aXZhdGVfc3VwZXIoc2IpO1xcbi0tXFxuZnMvc3VwZXIuYz0yMzUyPUVYUE9SVF9TWU1CT0woZnJlZXplX3N1cGVyKTtcXG4tLVxcbmZzL3N1cGVyLmMtMjM1OS0gKi9cXG5mcy9zdXBlci5jOjIzNjA6c3RhdGljIGludCB0aGF3X3N1cGVyX2xvY2tlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBlbnVtIGZyZWV6ZV9ob2xkZXIgd2hvLFxcbmZzL3N1cGVyLmMtMjM2MS1cXHRcXHRcXHQgICAgIGNvbnN0IHZvaWQgKmZyZWV6ZV9vd25lcilcXG4tLVxcbmZzL3N1cGVyLmM9MjQzMT1pbnQgdGhhd19zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBlbnVtIGZyZWV6ZV9ob2xkZXIgd2hvLFxcbi0tXFxuZnMvc3VwZXIuYy0yNDM3LVxcdH1cXG5mcy9zdXBlci5jOjI0Mzg6XFx0cmV0dXJuIHRoYXdfc3VwZXJfbG9ja2VkKHNiLCB3aG8sIGZyZWV6ZV9vd25lcik7XFxuZnMvc3VwZXIuYy0yNDM5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MjM6MTguNjE0NzAyMjI0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyMzI0ODM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgYHRoYXdfc3VwZXJfbG9ja2VkYCBmdW5jdGlvbiBpbiBgZnMvc3VwZXIuY2A6XG5cbioqRGVlcCBEaXZlIGludG8gYHRoYXdfc3VwZXJfbG9ja2VkYCoqXG5cbk9rYXksIGxldCdzIGdldCBpbnRvIHRoZSB3ZWVkcyBvZiBgdGhhd19zdXBlcl9sb2NrZWRgLiBJJ20gZ3Vlc3NpbmcgdGhpcyBoYXMgdG8gZG8gd2l0aCBicmluZ2luZyBhIHN1cGVyYmxvY2sgYmFjayB0byBhIHVzYWJsZSBzdGF0ZSwgcG9zc2libHkgYWZ0ZXIgc29tZSBzb3J0IG9mIHF1aWVzY2luZyBvciBzdXNwZW5zaW9uLiBUaGUgXCJsb2NrZWRcIiBwYXJ0IGlzIGtleTsgaXQgaW1wbGllcyBzb21lIGNyaXRpY2FsIHNlY3Rpb24gcHJvdGVjdGlvbiBpcyBpbnZvbHZlZCwgd2hpY2ggbWFrZXMgbWUgdGhpbmsgdGhpcyBpcyB3aGVyZSByYWNlIGNvbmRpdGlvbnMgYXJlIG1hbmFnZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBiZWluZyB0aGF3ZWQgYW5kIHdoeS4gSXMgaXQgdGhlIGVudGlyZSBmaWxlc3lzdGVtLCBvciBqdXN0IHBhcnRzIG9mIGl0PyBJcyBpdCBhYm91dCBkYXRhIGNvbnNpc3RlbmN5LCBqb3VybmFsIHJlY292ZXJ5LCBvciByZXNvdXJjZSBhbGxvY2F0aW9uPyBJJ20gYW50aWNpcGF0aW5nIGludGVyYWN0aW9ucyB3aXRoIHRoZSBibG9jayBsYXllciwgaW5vZGUgbWFuYWdlbWVudCwgYW5kIG1heWJlIGV2ZW4gdGhlIFZGUyBsYXllci4gSSdsbCBiZSBsb29raW5nIGZvciBtdXRleGVzLCBzcGlubG9ja3MsIGFuZCBhdG9taWMgb3BlcmF0aW9ucy4gSSdtIGFscmVhZHkgbWVudGFsbHkgcHJlcGFyaW5nIHRvIHRyYWNlIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIGZpbGVzeXN0ZW0gc3RhdGUgbWFjaGluZS4gU3BlY2lmaWNhbGx5LCBJJ20gZXhwZWN0aW5nIHRvIGxvb2sgZm9yIHRoaW5ncyBsaWtlOiBob3cgdGhlIHN1cGVyYmxvY2sgaXMgZmxhZ2dlZCwgaG93IHJlc291cmNlcyBhcmUgcmVsZWFzZWQsIG9yIGhvdyBkYXRhIHN0cnVjdHVyZXMgYXJlIHVwZGF0ZWQuIFRoaXMgY291bGQgYmUgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCBvbiBoYW5kbGluZyBwZXJzaXN0ZW50IGRhdGEgYWZ0ZXIgYW4gdXBkYXRlIG9yIHN5c3RlbSBwYXVzZS4gSSBuZWVkIHRvIGJlIHByZXBhcmVkIHRvIHNlZSBzb21lIGludHJpY2F0ZSBzeW5jaHJvbml6YXRpb24gbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwODMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOToyMzoyMi42Mzc5NTM2M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzNTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzUwOlxcdFxcdHJldHVybiAwO1xcbjIzNTE6XFx0fVxcbjIzNTI6XFx0RVhQT1JUX1NZTUJPTChmcmVlemVfc3VwZXIpO1xcbjIzNTM6XFx0XFxuMjM1NDpcXHQvKlxcbjIzNTU6XFx0ICogVW5kb2VzIHRoZSBlZmZlY3Qgb2YgYSBmcmVlemVfc3VwZXJfbG9ja2VkIGNhbGwuICBJZiB0aGUgZmlsZXN5c3RlbSBpc1xcbjIzNTY6XFx0ICogZnJvemVuIGJvdGggYnkgdXNlcnNwYWNlIGFuZCB0aGUga2VybmVsLCBhIHRoYXcgY2FsbCBmcm9tIGVpdGhlciBzb3VyY2VcXG4yMzU3OlxcdCAqIHJlbW92ZXMgdGhhdCBzdGF0ZSB3aXRob3V0IHJlbGVhc2luZyB0aGUgb3RoZXIgc3RhdGUgb3IgdW5sb2NraW5nIHRoZVxcbjIzNTg6XFx0ICogZmlsZXN5c3RlbS5cXG4yMzU5OlxcdCAqL1xcbjIzNjA6XFx0c3RhdGljIGludCB0aGF3X3N1cGVyX2xvY2tlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBlbnVtIGZyZWV6ZV9ob2xkZXIgd2hvLFxcbjIzNjE6XFx0XFx0XFx0XFx0ICAgICBjb25zdCB2b2lkICpmcmVlemVfb3duZXIpXFxuMjM2MjpcXHR7XFxuMjM2MzpcXHRcXHRpbnQgZXJyb3IgPSAtRUlOVkFMO1xcbjIzNjQ6XFx0XFxuMjM2NTpcXHRcXHRpZiAoc2ItXFx1MDAzZXNfd3JpdGVycy5mcm96ZW4gIT0gU0JfRlJFRVpFX0NPTVBMRVRFKVxcbjIzNjY6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjIzNjc6XFx0XFxuMjM2ODpcXHRcXHRpZiAoIW1heV91bmZyZWV6ZShzYiwgd2hvLCBmcmVlemVfb3duZXIpKVxcbjIzNjk6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjIzNzA6XFx0XFxuMjM3MTpcXHRcXHQvKlxcbjIzNzI6XFx0XFx0ICogQWxsIGZyZWV6ZXJzIHNoYXJlIGEgc2luZ2xlIGFjdGl2ZSByZWZlcmVuY2UuIElmIG90aGVyIGZyZWV6ZXJzXFxuMjM3MzpcXHRcXHQgKiByZW1haW4sIGRyb3Agb3VyIGhvbGQgYW5kIHJlcG9ydCBzdWNjZXNzOyB0aGUgc3VwZXJibG9jayBzdGF5c1xcbjIzNzQ6XFx0XFx0ICogZnJvemVuIHVudGlsIHRoZSBsYXN0IGhvbGRlciB0aGF3cyBpdC5cXG4yMzc1OlxcdFxcdCAqL1xcbjIzNzY6XFx0XFx0aWYgKGZyZWV6ZV9kZWMoc2IsIHdobykpIHtcXG4yMzc3OlxcdFxcdFxcdGVycm9yID0gMDtcXG4yMzc4OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4yMzc5OlxcdFxcdH1cXG4yMzgwOlxcdFxcbjIzODE6XFx0XFx0aWYgKHNiX3Jkb25seShzYikpIHtcXG4yMzgyOlxcdFxcdFxcdHNiLVxcdTAwM2VzX3dyaXRlcnMuZnJvemVuID0gU0JfVU5GUk9aRU47XFxuMjM4MzpcXHRcXHRcXHRzYi1cXHUwMDNlc193cml0ZXJzLmZyZWV6ZV9vd25lciA9IE5VTEw7XFxuMjM4NDpcXHRcXHRcXHR3YWtlX3VwX3ZhcihcXHUwMDI2c2ItXFx1MDAzZXNfd3JpdGVycy5mcm96ZW4pO1xcbjIzODU6XFx0XFx0XFx0Z290byBvdXRfZGVhY3RpdmF0ZTtcXG4yMzg2OlxcdFxcdH1cXG4yMzg3OlxcdFxcbjIzODg6XFx0XFx0bG9ja2RlcF9zYl9mcmVlemVfYWNxdWlyZShzYik7XFxuMjM4OTpcXHRcXG4yMzkwOlxcdFxcdGlmIChzYi1cXHUwMDNlc19vcC1cXHUwMDNldW5mcmVlemVfZnMpIHtcXG4yMzkxOlxcdFxcdFxcdGVycm9yID0gc2ItXFx1MDAzZXNfb3AtXFx1MDAzZXVuZnJlZXplX2ZzKHNiKTtcXG4yMzkyOlxcdFxcdFxcdGlmIChlcnJvcikge1xcbjIzOTM6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJWRlM6IEZpbGVzeXN0ZW0gdGhhdyBmYWlsZWRcXFxcblxcXCIpO1xcbjIzOTQ6XFx0XFx0XFx0XFx0ZnJlZXplX2luYyhzYiwgd2hvKTtcXG4yMzk1OlxcdFxcdFxcdFxcdGxvY2tkZXBfc2JfZnJlZXplX3JlbGVhc2Uoc2IpO1xcbjIzOTY6XFx0XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjIzOTc6XFx0XFx0XFx0fVxcbjIzOTg6XFx0XFx0fVxcbjIzOTk6XFx0XFxuMjQwMDpcXHRcXHRzYi1cXHUwMDNlc193cml0ZXJzLmZyb3plbiA9IFNCX1VORlJPWkVOO1xcbjI0MDE6XFx0XFx0c2ItXFx1MDAzZXNfd3JpdGVycy5mcmVlemVfb3duZXIgPSBOVUxMO1xcbjI0MDI6XFx0XFx0d2FrZV91cF92YXIoXFx1MDAyNnNiLVxcdTAwM2VzX3dyaXRlcnMuZnJvemVuKTtcXG4yNDAzOlxcdFxcdHNiX2ZyZWV6ZV91bmxvY2soc2IsIFNCX0ZSRUVaRV9GUyk7XFxuMjQwNDpcXHRvdXRfZGVhY3RpdmF0ZTpcXG4yNDA1OlxcdFxcdGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHNiKTtcXG4yNDA2OlxcdFxcdHJldHVybiAwO1xcbjI0MDc6XFx0XFxuMjQwODpcXHRvdXRfdW5sb2NrOlxcbjI0MDk6XFx0XFx0c3VwZXJfdW5sb2NrX2V4Y2woc2IpO1xcbjI0MTA6XFx0XFx0cmV0dXJuIGVycm9yO1xcbjI0MTE6XFx0fVxcbjI0MTI6XFx0XFxuMjQxMzpcXHQvKipcXG4yNDE0OlxcdCAqIHRoYXdfc3VwZXIgLS0gdW5sb2NrIGZpbGVzeXN0ZW1cXG4yNDE1OlxcdCAqIEBzYjogdGhlIHN1cGVyIHRvIHRoYXdcXG4yNDE2OlxcdCAqIEB3aG86IGNvbnRleHQgdGhhdCB3YW50cyB0byBmcmVlemVcXG4yNDE3OlxcdCAqIEBmcmVlemVfb3duZXI6IG93bmVyIG9mIHRoZSBmcmVlemVcXG4yNDE4OlxcdCAqXFxuMjQxOTpcXHQgKiBVbmxvY2tzIHRoZSBmaWxlc3lzdGVtIGFuZCBtYXJrcyBpdCB3cml0ZWFibGUgYWdhaW4gYWZ0ZXIgZnJlZXplX3N1cGVyKClcXG4yNDIwOlxcdCAqIGlmIHRoZXJlIGFyZSBubyByZW1haW5pbmcgZnJlZXplcyBvbiB0aGUgZmlsZXN5c3RlbS5cXG4yNDIxOlxcdCAqXFxuMjQyMjpcXHQgKiBAd2hvIHNob3VsZCBiZTpcXG4yNDIzOlxcdCAqICogJUZSRUVaRV9IT0xERVJfVVNFUlNQQUNFIGlmIHVzZXJzcGFjZSB3YW50cyB0byB0aGF3IHRoZSBmcztcXG4yNDI0OlxcdCAqICogJUZSRUVaRV9IT0xERVJfS0VSTkVMIGlmIHRoZSBrZXJuZWwgd2FudHMgdG8gdGhhdyB0aGUgZnMuXFxuMjQyNTpcXHQgKiAqICVGUkVFWkVfTUFZX05FU1Qgd2hldGhlciBuZXN0aW5nIGZyZWV6ZSBhbmQgdGhhdyByZXF1ZXN0cyBpcyBhbGxvd2VkXFxuMjQyNjpcXHQgKlxcbjI0Mjc6XFx0ICogQSBmaWxlc3lzdGVtIG1heSBob2xkIG11bHRpcGxlIGRldmljZXMgYW5kIHRodXMgYSBmaWxlc3lzdGVtcyBtYXlcXG4yNDI4OlxcdCAqIGhhdmUgYmVlbiBmcm96ZW4gdGhyb3VnaCB0aGUgYmxvY2sgbGF5ZXIgdmlhIG11bHRpcGxlIGJsb2NrIGRldmljZXMuXFxuMjQyOTpcXHQgKiBUaGUgZmlsZXN5c3RlbSByZW1haW5zIGZyb3plbiB1bnRpbCBhbGwgYmxvY2sgZGV2aWNlcyBhcmUgdW5mcm96ZW4uXFxuMjQzMDpcXHQgKi9cXG4yNDMxOlxcdGludCB0aGF3X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGVudW0gZnJlZXplX2hvbGRlciB3aG8sXFxuMjQzMjpcXHRcXHQgICAgICAgY29uc3Qgdm9pZCAqZnJlZXplX293bmVyKVxcbjI0MzM6XFx0e1xcbjI0MzQ6XFx0XFx0aWYgKCFzdXBlcl9sb2NrX2V4Y2woc2IpKSB7XFxuMjQzNTpcXHRcXHRcXHRXQVJOX09OQ0UoMSwgXFxcIkR5aW5nIHN1cGVyYmxvY2sgd2hpbGUgdGhhd2luZyFcXFwiKTtcXG4yNDM2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI0Mzc6XFx0XFx0fVxcbjI0Mzg6XFx0XFx0cmV0dXJuIHRoYXdfc3VwZXJfbG9ja2VkKHNiLCB3aG8sIGZyZWV6ZV9vd25lcik7XFxuMjQzOTpcXHR9XFxuMjQ0MDpcXHRFWFBPUlRfU1lNQk9MKHRoYXdfc3VwZXIpO1xcbjI0NDE6XFx0XFxuMjQ0MjpcXHQvKlxcbjI0NDM6XFx0ICogQ3JlYXRlIHdvcmtxdWV1ZSBmb3IgZGVmZXJyZWQgZGlyZWN0IElPIGNvbXBsZXRpb25zLiBXZSBhbGxvY2F0ZSB0aGVcXG4yNDQ0OlxcdCAqIHdvcmtxdWV1ZSB3aGVuIGl0J3MgZmlyc3QgbmVlZGVkLiBUaGlzIGF2b2lkcyBjcmVhdGluZyB3b3JrcXVldWUgZm9yXFxuMjQ0NTpcXHQgKiBmaWxlc3lzdGVtcyB0aGF0IGRvbid0IG5lZWQgaXQgYW5kIGFsc28gYWxsb3dzIHVzIHRvIGNyZWF0ZSB0aGUgd29ya3F1ZXVlXFxuMjQ0NjpcXHQgKiBsYXRlIGVub3VnaCBzbyB0aGUgd2UgY2FuIGluY2x1ZGUgc19pZCBpbiB0aGUgbmFtZSBvZiB0aGUgd29ya3F1ZXVlLlxcbjI0NDc6XFx0ICovXFxuMjQ0ODpcXHRpbnQgc2JfaW5pdF9kaW9fZG9uZV93cShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbjI0NDk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOToyMzoyMi42MzgxMDE4N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNDg5MTA2NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVkZTIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBidWcgaW4gYHRoYXdfc3VwZXJfbG9ja2VkYC4gQXBwYXJlbnRseSwgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgaXNuJ3QgY29ycmVjdCB3aGVuIGBmcmVlemVfZGVjYCByZXR1cm5zIHRydWUg4oCTIGl0J3MgcmV0dXJuaW5nIGAtRUlOVkFMYCBpbnN0ZWFkIG9mIGAwYC4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgY29yZSBWRlMgbGF5ZXIuIERlZmluaXRlbHkgd29ydGggYSBmdXp6aW5nIHJ1bi4gTXkgaW1tZWRpYXRlIGZvY3VzIHN5bWJvbHMgd2lsbCBiZSBgdGhhd19zdXBlcl9sb2NrZWRgIGFuZCBgdGhhd19zdXBlcmAuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBObywgc2luY2UgdGhpcyBpcyBpbiBjb3JlIFZGUywgdGhlcmUgc2hvdWxkbid0IGJlIGFueXRoaW5nIHNwZWNpZmljLiBcblxuSG1tLCB3YWl0IGEgbWludXRlLi4uIGB0aGF3X3N1cGVyX2xvY2tlZGAgaXMgc3RhdGljLiBUaGF0IG1lYW5zIGB0aGF3X3N1cGVyYCBpcyB0aGUgZXhwb3J0ZWQgc3ltYm9sLCBub3QgdGhlIGxvY2tlZCB2ZXJzaW9uLiBSaWdodCwgYWRkaW5nIGB0aGF3X3N1cGVyYCB0byBGb2N1c1N5bWJvbHMsIGFuZCByZW1vdmluZyBgdGhhd19zdXBlcl9sb2NrZWRgIGZyb20gdGhlIGxpc3QuXG5cbk5vdywgSSBzaG91bGQgcXVpY2tseSBjaGVjayBmb3Igb3RoZXIgZXhwb3J0ZWQgc3ltYm9scyB0aGF0IG1pZ2h0IGNhbGwgYHRoYXdfc3VwZXJfbG9ja2VkYC4gTGV0J3Mgc2VlLi4uIEFoLCBgZG9fdGhhd19hbGxfY2FsbGJhY2tgIGRvZXMuIEkgc2hvdWxkIGNoZWNrIHRoYXQgb25lIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkwOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA5OjIzOjI3Ljk4NzAxNDYxNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjcwNzQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb190aGF3X2FsbF9jYWxsYmFja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9zdXBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3N1cGVyLmM9MTIwOD1zdGF0aWMgaW5saW5lIGJvb2wgZ2V0X2FjdGl2ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvc3VwZXIuYy0xMjE4LVxcbmZzL3N1cGVyLmM6MTIxOTpzdGF0aWMgdm9pZCBkb190aGF3X2FsbF9jYWxsYmFjayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICp1bnVzZWQpXFxuZnMvc3VwZXIuYy0xMjIwLXtcXG4tLVxcbmZzL3N1cGVyLmM9MTIzND1zdGF0aWMgdm9pZCBkb190aGF3X2FsbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZnMvc3VwZXIuYy0xMjM1LXtcXG5mcy9zdXBlci5jOjEyMzY6XFx0X19pdGVyYXRlX3N1cGVycyhkb190aGF3X2FsbF9jYWxsYmFjaywgTlVMTCwgU1VQRVJfSVRFUl9VTkxPQ0tFRCk7XFxuZnMvc3VwZXIuYy0xMjM3LVxcdGtmcmVlKHdvcmspO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOToyMzoyOC4wMzM3MjcwNTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIwNDQxMTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGFpbWluZyBmb3IgYSBmdWxzb21lIHJlbmRlcmluZzpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBFbWVyZ2VuY3kgVGhhdyBDYWxsIFBhdGhzKipcblxuQWxyaWdodCwgSSdtIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvZGViYXNlJ3MgdGhhd2luZyBtZWNoYW5pc21zLCBzcGVjaWZpY2FsbHkgaG93IHRoZXkgcmVsYXRlIHRvIHBvdGVudGlhbCBlbWVyZ2VuY3kgc2NlbmFyaW9zLiBUaGUgdGhvdWdodCB0aGF0J3MgY3VycmVudGx5IG5hZ2dpbmcgYXQgbWUgaXMgdGhpczogYGRvX3RoYXdfYWxsYC4gV2hlcmUgZXhhY3RseSBpcyB0aGF0IGNhbGxlZCBmcm9tPyBJJ20gcHJldHR5IHN1cmUgSSd2ZSBzZWVuIGl0IG1lbnRpb25lZCBpbiB0aGUgY29udGV4dCBvZiBhbiBcImVtZXJnZW5jeSB0aGF3XCIgcHJvY2VkdXJlLCBwZXJoYXBzIHRyaWdnZXJlZCBieSB0aGUgYGVtZXJnZW5jeV90aGF3X2JkZXZgIGZ1bmN0aW9uLCBvciBzb21ldGhpbmcgc2ltaWxhci4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgbGluayBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGNhbGxpbmcgYGRvX3RoYXdfYWxsYCBmcm9tIGFueSBlbWVyZ2VuY3kgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGVzZSByZWxhdGlvbnNoaXBzIGlzIGNyaXRpY2FsIGZvciBlbnN1cmluZyBvdXIgc3lzdGVtcyBjYW4gcmVjb3ZlciBncmFjZWZ1bGx5IGZyb20gdW51c3VhbCBjb25kaXRpb25zLiBBcmUgdGhlcmUgb3RoZXIgZW50cnkgcG9pbnRzIHRoYXQgSSBhbSBtaXNzaW5nPyBJdCBpcyBpbXBvcnRhbnQgdGhhdCBJIGdldCB0aGUgY29tcGxldGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU5NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA5OjIzOjMxLjQ1NDE3MjIyOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzNDQ3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fdGhhd19hbGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zdXBlci5jPTEyMDg9c3RhdGljIGlubGluZSBib29sIGdldF9hY3RpdmVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL3N1cGVyLmMtMTIxOC1cXG5mcy9zdXBlci5jOjEyMTk6c3RhdGljIHZvaWQgZG9fdGhhd19hbGxfY2FsbGJhY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqdW51c2VkKVxcbmZzL3N1cGVyLmMtMTIyMC17XFxuLS1cXG5mcy9zdXBlci5jLTEyMzMtXFxuZnMvc3VwZXIuYzoxMjM0OnN0YXRpYyB2b2lkIGRvX3RoYXdfYWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5mcy9zdXBlci5jLTEyMzUte1xcbmZzL3N1cGVyLmM6MTIzNjpcXHRfX2l0ZXJhdGVfc3VwZXJzKGRvX3RoYXdfYWxsX2NhbGxiYWNrLCBOVUxMLCBTVVBFUl9JVEVSX1VOTE9DS0VEKTtcXG5mcy9zdXBlci5jLTEyMzctXFx0a2ZyZWUod29yayk7XFxuLS1cXG5mcy9zdXBlci5jPTEyNDY9dm9pZCBlbWVyZ2VuY3lfdGhhd19hbGwodm9pZClcXG4tLVxcbmZzL3N1cGVyLmMtMTI1MS1cXHRpZiAod29yaykge1xcbmZzL3N1cGVyLmM6MTI1MjpcXHRcXHRJTklUX1dPUksod29yaywgZG9fdGhhd19hbGwpO1xcbmZzL3N1cGVyLmMtMTI1My1cXHRcXHRzY2hlZHVsZV93b3JrKHdvcmspO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOToyMzozMS41MDI1MjI2ODhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk3MTQ0OTI2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbW1lZGlhdGUgUGxhbioqXG5cbk9rYXksIHNvIEkgc2VlIGB0aGF3X3N1cGVyYCBhbmQgYGVtZXJnZW5jeV90aGF3X2FsbGAgYXJlIHRoZSB0d28gbWFpbiBlbnRyeSBwb2ludHMgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4gVGhhdCBtYWtlcyB0aGluZ3Mgc3RyYWlnaHRmb3J3YXJkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYWRkIHRoZW0gdG8gYEZvY3VzU3ltYm9sc2AgaW1tZWRpYXRlbHk7IHRoYXQncyB0aGUgbmF0dXJhbCBwbGFjZSBmb3IgdGhvc2Uga2luZHMgb2YgZW50cnkgcG9pbnRzLlxuXG5Ob3csIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIGFueXRoaW5nIGVsc2UsIGl0J3Mgd29ydGggdGFraW5nIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgYW55dGhpbmcgZWxzZSBpcyBjYWxsaW5nIGB0aGF3X3N1cGVyX2xvY2tlZGAuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nIHRoYXQgbWlnaHQgZGVwZW5kIG9uIHRoYXQgZnVuY3Rpb24uIEl0J3MgYSBxdWljayBjaGVjayB0byBlbGltaW5hdGUgYW55IHN1cnByaXNlcyBkb3duIHRoZSBsaW5lLCBhbmQgbWFrZSBzdXJlIEkgZG9uJ3QgY2F1c2UgYW55IHJlZ3Jlc3Npb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTUyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MjM6MzUuNDczOTc1MDU2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTYwMTYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aGF3X3N1cGVyX2xvY2tlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9zdXBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3N1cGVyLmMtNDQtXFxuZnMvc3VwZXIuYzo0NTpzdGF0aWMgaW50IHRoYXdfc3VwZXJfbG9ja2VkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGVudW0gZnJlZXplX2hvbGRlciB3aG8sXFxuZnMvc3VwZXIuYy00Ni1cXHRcXHRcXHQgICAgIGNvbnN0IHZvaWQgKmZyZWV6ZV9vd25lcik7XFxuLS1cXG5mcy9zdXBlci5jPTEyMTk9c3RhdGljIHZvaWQgZG9fdGhhd19hbGxfY2FsbGJhY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqdW51c2VkKVxcbi0tXFxuZnMvc3VwZXIuYy0xMjI5LVxcdGlmIChzdXBlcl9sb2NrX2V4Y2woc2IpKVxcbmZzL3N1cGVyLmM6MTIzMDpcXHRcXHR0aGF3X3N1cGVyX2xvY2tlZChzYiwgRlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsIE5VTEwpO1xcbmZzL3N1cGVyLmMtMTIzMS1cXHRkZWFjdGl2YXRlX3N1cGVyKHNiKTtcXG4tLVxcbmZzL3N1cGVyLmM9MjM1Mj1FWFBPUlRfU1lNQk9MKGZyZWV6ZV9zdXBlcik7XFxuLS1cXG5mcy9zdXBlci5jLTIzNTktICovXFxuZnMvc3VwZXIuYzoyMzYwOnN0YXRpYyBpbnQgdGhhd19zdXBlcl9sb2NrZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcXG5mcy9zdXBlci5jLTIzNjEtXFx0XFx0XFx0ICAgICBjb25zdCB2b2lkICpmcmVlemVfb3duZXIpXFxuLS1cXG5mcy9zdXBlci5jPTI0MzE9aW50IHRoYXdfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcXG4tLVxcbmZzL3N1cGVyLmMtMjQzNy1cXHR9XFxuZnMvc3VwZXIuYzoyNDM4OlxcdHJldHVybiB0aGF3X3N1cGVyX2xvY2tlZChzYiwgd2hvLCBmcmVlemVfb3duZXIpO1xcbmZzL3N1cGVyLmMtMjQzOS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA5OjIzOjM1LjUxOTU4MzA1NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTkyOTA5ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGhlcmUgYXJlIGNsZWFybHkgYHRoYXdfc3VwZXJgIGFuZCBgZW1lcmdlbmN5X3RoYXdfYWxsYC4gVGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgZnVuY3Rpb25hbCBidWcgaW4gdGhlIGNvcmUgVkZTIGxheWVyOyBzcGVjaWZpY2FsbHksIGB0aGF3X3N1cGVyYCB3YXMgaW1wcm9wZXJseSByZXR1cm5pbmcgYC1FSU5WQUxgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucyDigJMgd2hlbiB0aGVyZSBhcmUgb3RoZXIgZnJlZXplcnMgcHJlc2VudCDigJMgd2hlbiBpdCBzaG91bGQgaGF2ZSByZXR1cm5lZCBgMGAuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQsIGZ1bmN0aW9uYWwgY29ycmVjdGlvbiwgbWVhbmluZyBpdCBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHJlYWNoYWJsZSBrZXJuZWwgY29kZS4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiB0aGUgcG90ZW50aWFsIGltcGFjdC4gSSdsbCBtYWtlIHN1cmUgdG8gZm9jdXMgb24gYHRoYXdfc3VwZXJgIGFuZCBgZW1lcmdlbmN5X3RoYXdfYWxsYCBkdXJpbmcgdGVzdGluZy4gTm8gc3BlY2lmaWMgY29uZmlnIGNoYW5nZXMgYXJlIGluZGljYXRlZCwgd2hpY2ggaXMgZ29vZC4gVGhlIHJlYXNvbmluZyBpcyBzb3VuZCwgaXQgc3VjY2luY3RseSBpZGVudGlmaWVzIHRoZSBwcm9ibGVtIGFuZCBpdHMgbG9jYXRpb24gaW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NjMsIk91dHB1dFRva2VucyI6OTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MjM6NDAuMTEyNDk1Mzc0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aGF3X3N1cGVyXCIsXG4gICAgXCJlbWVyZ2VuY3lfdGhhd19hbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgY29yZSBWRlMgbGF5ZXIgd2hlcmUgYHRoYXdfc3VwZXJgIHdvdWxkIGluY29ycmVjdGx5IHJldHVybiBgLUVJTlZBTGAgaW5zdGVhZCBvZiBgMGAgd2hlbiB0aGVyZSBhcmUgb3RoZXIgZnJlZXplcnMgcmVtYWluaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGhhd19zdXBlclwiLFxuICAgIFwiZW1lcmdlbmN5X3RoYXdfYWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGNvcmUgVkZTIGxheWVyIHdoZXJlIGB0aGF3X3N1cGVyYCB3b3VsZCBpbmNvcnJlY3RseSByZXR1cm4gYC1FSU5WQUxgIGluc3RlYWQgb2YgYDBgIHdoZW4gdGhlcmUgYXJlIG90aGVyIGZyZWV6ZXJzIHJlbWFpbmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOToyMzo0MC4xMTI1Mjc0NDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Mzk0OTI1MDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MjM6NDAuMTEyOTcyNTgzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0Mzk0NDc0MTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgdGhhd19zdXBlcl9sb2NrZWRgIHdoZXJlIHRoZSBmdW5jdGlvbiBpbmNvcnJlY3RseSByZXR1cm5lZCBgLUVJTlZBTGAgaW5zdGVhZCBvZiBgMGAgd2hlbiBgZnJlZXplX2RlY2AgaW5kaWNhdGVkIHRoYXQgb3RoZXIgZnJlZXplcnMgd2VyZSBzdGlsbCBob2xkaW5nIHRoZSBmcmVlemUuIFRoZSBgZXJyb3JgIHZhcmlhYmxlIHdhcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGAtRUlOVkFMYCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uLCBzbyB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnZvbHZlZC4gVGhpcyBpcyBhIHB1cmUgbG9naWMvY29udHJvbC1mbG93IGJ1ZyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMWM3NDU3ZmM5YmQwMDZkOWJjOTA3MGVlMjM2NDBmOGY4OWM4MGE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMDk6MjM6MTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xuaW5kZXggMDVlNDQzMTczMDM4Ny4uMDFkYjYxMjRlNDA5ZCAxMDA2NDRcbi0tLSBhL2ZzL3N1cGVyLmNcbisrKyBiL2ZzL3N1cGVyLmNcbkBAIC0yMzY5LDExICsyMzY5LDE0IEBAIHN0YXRpYyBpbnQgdGhhd19zdXBlcl9sb2NrZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuIFx0Lypcbi1cdCAqIEFsbCBmcmVlemVycyBzaGFyZSBhIHNpbmdsZSBhY3RpdmUgcmVmZXJlbmNlLlxuLVx0ICogU28ganVzdCB1bmxvY2sgaW4gY2FzZSB0aGVyZSBhcmUgYW55IGxlZnQuXG4rXHQgKiBBbGwgZnJlZXplcnMgc2hhcmUgYSBzaW5nbGUgYWN0aXZlIHJlZmVyZW5jZS4gSWYgb3RoZXIgZnJlZXplcnNcbitcdCAqIHJlbWFpbiwgZHJvcCBvdXIgaG9sZCBhbmQgcmVwb3J0IHN1Y2Nlc3M7IHRoZSBzdXBlcmJsb2NrIHN0YXlzXG4rXHQgKiBmcm96ZW4gdW50aWwgdGhlIGxhc3QgaG9sZGVyIHRoYXdzIGl0LlxuIFx0ICovXG4tXHRpZiAoZnJlZXplX2RlYyhzYiwgd2hvKSlcbitcdGlmIChmcmVlemVfZGVjKHNiLCB3aG8pKSB7XG4rXHRcdGVycm9yID0gMDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0fVxuIFxuIFx0aWYgKHNiX3Jkb25seShzYikpIHtcbiBcdFx0c2ItXHUwMDNlc193cml0ZXJzLmZyb3plbiA9IFNCX1VORlJPWkVOO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MjM6NDAuMTEyOTczNzU0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NTIzMzk2ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTdXBlcmJsb2NrIFRoYXcgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBmcy9zdXBlci5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHRoYXdfc3VwZXJfbG9ja2VkYCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB3ZSBoYXZlIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgbG9naWMgYnVnIGZpeCByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgdGhlIGBmcmVlemVfZGVjYCBjYWxsLiBQcmV2aW91c2x5LCB0aGUgY29kZSBhc3N1bWVkIHRoYXQgaWYgYGZyZWV6ZV9kZWNgIHJldHVybmVkIHRydWUsIGl0IGF1dG9tYXRpY2FsbHkgbWVhbnQgdGhlIHRoYXcgd2FzIGZ1bGx5IHN1Y2Nlc3NmdWwuIEhvd2V2ZXIsIHRoYXQncyBub3QgcXVpdGUgcmlnaHQuIFRydWUgZnJvbSBgZnJlZXplX2RlY2Agc2ltcGx5IG1lYW5zICp0aGlzKiBmcmVlemVyIGhhcyByZWxlYXNlZCBpdHMgaG9sZCwgYnV0IG90aGVyIGZyZWV6ZXJzIG1pZ2h0ICpzdGlsbCogYmUgYWN0aXZlbHkgZnJlZXppbmcgdGhlIHN1cGVyYmxvY2suXG5cblRoZSBvcmlnaW5hbCBjb2RlIHNuaXBwZXQgd2FzOlxuXG5gYGBjXG4gXHQvKlxuLVx0ICogQWxsIGZyZWV6ZXJzIHNoYXJlIGEgc2luZ2xlIGFjdGl2ZSByZWZlcmVuY2UuXG4tXHQgKiBTbyBqdXN0IHVubG9jayBpbiBjYXNlIHRoZXJlIGFyZSBhbnkgbGVmdC5cbitcdCAqIEFsbCBmcmVlemVycyBzaGFyZSBhIHNpbmdsZSBhY3RpdmUgcmVmZXJlbmNlLiBJZiBvdGhlciBmcmVlemVyc1xuK1x0ICogcmVtYWluLCBkcm9wIG91ciBob2xkIGFuZCByZXBvcnQgc3VjY2VzczsgdGhlIHN1cGVyYmxvY2sgc3RheXNcbitcdCAqIGZyb3plbiB1bnRpbCB0aGUgbGFzdCBob2xkZXIgdGhhd3MgaXQuXG4gXHQgKi9cbi1cdGlmIChmcmVlemVfZGVjKHNiLCB3aG8pKVxuK1x0aWYgKGZyZWV6ZV9kZWMoc2IsIHdobykpIHtcbitcdFx0ZXJyb3IgPSAwO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG5gYGBcblxuVGhlIGJ1ZyBoZXJlIGlzIHRoYXQgYGVycm9yYCB3YXMgbm90IGJlaW5nIGV4cGxpY2l0bHkgc2V0IHRvIGAwYCB3aGVuIGBmcmVlemVfZGVjYCByZXR1cm5lZCBgdHJ1ZWAuIFRoaXMgbGlrZWx5IG1lYW5zIHRoYXQgYSBwcmlvciBlcnJvciB2YWx1ZSBvciBhbiB1bmluaXRpYWxpemVkIHZhbHVlIG1pZ2h0IGJlIGNhcnJpZWQgZm9yd2FyZCwgaW5jb3JyZWN0bHkgaW5kaWNhdGluZyBhIGZhaWx1cmUgd2hlbiwgaW4gZmFjdCwgdGhlIHJlbGVhc2UgZnJvbSAqdGhpcyogZnJlZXplciB3YXMgc3VjY2Vzc2Z1bCwgYW5kIHRoZSBzdXBlcmJsb2NrIHdpbGwgcmVtYWluIGZyb3plbiB1bnRpbCB0aGUgbGFzdCBvbmUgdGhhd3MuIFRoaXMgZml4IGVuc3VyZXMgdGhhdCB0aGUgXCJzdWNjZXNzXCIgaXMgcmVwb3J0ZWQgY29ycmVjdGx5LCBldmVuIGlmIHRoZSBzdXBlcmJsb2NrIHJlbWFpbnMgZnJvemVuLiBUaGlzIGlzIGNydWNpYWwgZm9yIGF2b2lkaW5nIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yIGR1cmluZyB0aGUgdGhhdyBwcm9jZXNzIGFuZCB0byBlbnN1cmUgdGhlIGNvcnJlY3Qgc3RhdGUgb2YgdGhlIHN1cGVyYmxvY2sgaXMgcmVwb3J0ZWQgdG8gdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbC4gVGhpcyBpcyBhIGdvb2QgY2F0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOToyMzo0NS41NjUzMTY4MzZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NTY5NjM2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aGF3X3N1cGVyX2xvY2tlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9zdXBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3N1cGVyLmMtNDQtXFxuZnMvc3VwZXIuYzo0NTpzdGF0aWMgaW50IHRoYXdfc3VwZXJfbG9ja2VkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGVudW0gZnJlZXplX2hvbGRlciB3aG8sXFxuZnMvc3VwZXIuYy00Ni1cXHRcXHRcXHQgICAgIGNvbnN0IHZvaWQgKmZyZWV6ZV9vd25lcik7XFxuLS1cXG5mcy9zdXBlci5jPTEyMTk9c3RhdGljIHZvaWQgZG9fdGhhd19hbGxfY2FsbGJhY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqdW51c2VkKVxcbi0tXFxuZnMvc3VwZXIuYy0xMjI5LVxcdGlmIChzdXBlcl9sb2NrX2V4Y2woc2IpKVxcbmZzL3N1cGVyLmM6MTIzMDpcXHRcXHR0aGF3X3N1cGVyX2xvY2tlZChzYiwgRlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsIE5VTEwpO1xcbmZzL3N1cGVyLmMtMTIzMS1cXHRkZWFjdGl2YXRlX3N1cGVyKHNiKTtcXG4tLVxcbmZzL3N1cGVyLmM9MjM1Mj1FWFBPUlRfU1lNQk9MKGZyZWV6ZV9zdXBlcik7XFxuLS1cXG5mcy9zdXBlci5jLTIzNTktICovXFxuZnMvc3VwZXIuYzoyMzYwOnN0YXRpYyBpbnQgdGhhd19zdXBlcl9sb2NrZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcXG5mcy9zdXBlci5jLTIzNjEtXFx0XFx0XFx0ICAgICBjb25zdCB2b2lkICpmcmVlemVfb3duZXIpXFxuLS1cXG5mcy9zdXBlci5jPTI0MzE9aW50IHRoYXdfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcXG4tLVxcbmZzL3N1cGVyLmMtMjQzNy1cXHR9XFxuZnMvc3VwZXIuYzoyNDM4OlxcdHJldHVybiB0aGF3X3N1cGVyX2xvY2tlZChzYiwgd2hvLCBmcmVlemVfb3duZXIpO1xcbmZzL3N1cGVyLmMtMjQzOS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA5OjIzOjQ1LjgzMTAxODgxOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzU5ODEyNzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgSSB3ZXJlIHByb2Nlc3NpbmcgdGhvc2UgdGhvdWdodHM6XG5cbioqRGVlcCBEaXZlIGludG8gYHRoYXdfc3VwZXJfbG9ja2VkYCoqXG5cbk9rYXksIHNvIEknbSBhYm91dCB0byBkaWcgaW50byB0aGUgYHRoYXdfc3VwZXJfbG9ja2VkYCBmdW5jdGlvbiwgd2hpY2ggcmVzaWRlcyBpbiB0aGUgaGVhcnQgb2YgdGhlIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyDigJMgYGZzL3N1cGVyLmNgLiBUaGlzIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byBmaWxlc3lzdGVtIHVuZnJlZXppbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIHN1cGVyYmxvY2sgbG9jay4gVGhlIFwibG9ja2VkXCIgcGFydCBpcyBjcnVjaWFsOyBpdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBsaWtlbHkgd2l0aGluIGEgY3JpdGljYWwgc2VjdGlvbiB0aGF0IG5lZWRzIGNhcmVmdWwgc3luY2hyb25pemF0aW9uIHRvIGF2b2lkIGNvcnJ1cHRpb24gb3IgZGF0YSByYWNlcyBkdXJpbmcgYSBmaWxlc3lzdGVtIHVuZnJlZXplLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbG9jayBhY3F1aXNpdGlvbiBhbmQgcmVsZWFzZSBwYXR0ZXJucyB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gSSdtIGV4cGVjdGluZyB0byBzZWUgbG9naWMgdGhhdCBkZWFscyB3aXRoIHN5bmNpbmcgbWV0YWRhdGEsIGVuc3VyaW5nIGNvbnNpc3RlbnQgc3RhdGUgYWNyb3NzIHRoZSBmaWxlc3lzdGVtIGFzIGl0IGNvbWVzIGJhY2sgb25saW5lLCBhbmQgcG9zc2libHkgaGFuZGxpbmcgYW55IHBlbmRpbmcgd3JpdGVzIG9yIG90aGVyIG9wZXJhdGlvbnMgdGhhdCB3ZXJlIGhlbGQgdXAgZHVyaW5nIHRoZSBmcm96ZW4gc3RhdGUuIEl04oCZcyBsaWtlbHkgdGhlcmUgd2lsbCBiZSBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIHRoaXMgcHJvY2VzcywgcG90ZW50aWFsbHkgaW52b2x2aW5nIHRoZSBkZXZpY2UgaXRzZWxmLCBpbm9kZSBvcGVyYXRpb25zLCBhbmQgdGhlIG92ZXJhbGwgc3VwZXIgYmxvY2sgc3RydWN0dXJlLiBMZXQncyBzZWUgaG93IHRoZXkndmUgaGFuZGxlZCBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyB3aXRoaW4gdGhpcy4gSSBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIHZhcmlvdXMgc3RhdGVzIGEgc3VwZXJibG9jayBjYW4gYmUgaW4sIHBhcnRpY3VsYXJseSBpbiByZWxhdGlvbiB0byB0aGUgZ2xvYmFsIGZpbGVzeXN0ZW0gZnJlZXplL3RoYXcgbWVjaGFuaXNtcy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgb24gaG93IHRoZXkncmUgbWFuYWdpbmcgam91cm5hbGluZyBvciBvdGhlciBjcmFzaC1yZWNvdmVyeSBtZWNoYW5pc21zIGR1cmluZyB0aGUgcHJvY2VzcywgYW5kIG1ha2luZyBzdXJlIGFsbCB0aGUgaS9vIGlzIHByb3Blcmx5IGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwOTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOToyMzo1MC4xOTA4MzU2NzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3N1cGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM1MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIzNTA6XFx0XFx0cmV0dXJuIDA7XFxuMjM1MTpcXHR9XFxuMjM1MjpcXHRFWFBPUlRfU1lNQk9MKGZyZWV6ZV9zdXBlcik7XFxuMjM1MzpcXHRcXG4yMzU0OlxcdC8qXFxuMjM1NTpcXHQgKiBVbmRvZXMgdGhlIGVmZmVjdCBvZiBhIGZyZWV6ZV9zdXBlcl9sb2NrZWQgY2FsbC4gIElmIHRoZSBmaWxlc3lzdGVtIGlzXFxuMjM1NjpcXHQgKiBmcm96ZW4gYm90aCBieSB1c2Vyc3BhY2UgYW5kIHRoZSBrZXJuZWwsIGEgdGhhdyBjYWxsIGZyb20gZWl0aGVyIHNvdXJjZVxcbjIzNTc6XFx0ICogcmVtb3ZlcyB0aGF0IHN0YXRlIHdpdGhvdXQgcmVsZWFzaW5nIHRoZSBvdGhlciBzdGF0ZSBvciB1bmxvY2tpbmcgdGhlXFxuMjM1ODpcXHQgKiBmaWxlc3lzdGVtLlxcbjIzNTk6XFx0ICovXFxuMjM2MDpcXHRzdGF0aWMgaW50IHRoYXdfc3VwZXJfbG9ja2VkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGVudW0gZnJlZXplX2hvbGRlciB3aG8sXFxuMjM2MTpcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHZvaWQgKmZyZWV6ZV9vd25lcilcXG4yMzYyOlxcdHtcXG4yMzYzOlxcdFxcdGludCBlcnJvciA9IC1FSU5WQUw7XFxuMjM2NDpcXHRcXG4yMzY1OlxcdFxcdGlmIChzYi1cXHUwMDNlc193cml0ZXJzLmZyb3plbiAhPSBTQl9GUkVFWkVfQ09NUExFVEUpXFxuMjM2NjpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMjM2NzpcXHRcXG4yMzY4OlxcdFxcdGlmICghbWF5X3VuZnJlZXplKHNiLCB3aG8sIGZyZWV6ZV9vd25lcikpXFxuMjM2OTpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMjM3MDpcXHRcXG4yMzcxOlxcdFxcdC8qXFxuMjM3MjpcXHRcXHQgKiBBbGwgZnJlZXplcnMgc2hhcmUgYSBzaW5nbGUgYWN0aXZlIHJlZmVyZW5jZS4gSWYgb3RoZXIgZnJlZXplcnNcXG4yMzczOlxcdFxcdCAqIHJlbWFpbiwgZHJvcCBvdXIgaG9sZCBhbmQgcmVwb3J0IHN1Y2Nlc3M7IHRoZSBzdXBlcmJsb2NrIHN0YXlzXFxuMjM3NDpcXHRcXHQgKiBmcm96ZW4gdW50aWwgdGhlIGxhc3QgaG9sZGVyIHRoYXdzIGl0LlxcbjIzNzU6XFx0XFx0ICovXFxuMjM3NjpcXHRcXHRpZiAoZnJlZXplX2RlYyhzYiwgd2hvKSkge1xcbjIzNzc6XFx0XFx0XFx0ZXJyb3IgPSAwO1xcbjIzNzg6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjIzNzk6XFx0XFx0fVxcbjIzODA6XFx0XFxuMjM4MTpcXHRcXHRpZiAoc2JfcmRvbmx5KHNiKSkge1xcbjIzODI6XFx0XFx0XFx0c2ItXFx1MDAzZXNfd3JpdGVycy5mcm96ZW4gPSBTQl9VTkZST1pFTjtcXG4yMzgzOlxcdFxcdFxcdHNiLVxcdTAwM2VzX3dyaXRlcnMuZnJlZXplX293bmVyID0gTlVMTDtcXG4yMzg0OlxcdFxcdFxcdHdha2VfdXBfdmFyKFxcdTAwMjZzYi1cXHUwMDNlc193cml0ZXJzLmZyb3plbik7XFxuMjM4NTpcXHRcXHRcXHRnb3RvIG91dF9kZWFjdGl2YXRlO1xcbjIzODY6XFx0XFx0fVxcbjIzODc6XFx0XFxuMjM4ODpcXHRcXHRsb2NrZGVwX3NiX2ZyZWV6ZV9hY3F1aXJlKHNiKTtcXG4yMzg5OlxcdFxcbjIzOTA6XFx0XFx0aWYgKHNiLVxcdTAwM2VzX29wLVxcdTAwM2V1bmZyZWV6ZV9mcykge1xcbjIzOTE6XFx0XFx0XFx0ZXJyb3IgPSBzYi1cXHUwMDNlc19vcC1cXHUwMDNldW5mcmVlemVfZnMoc2IpO1xcbjIzOTI6XFx0XFx0XFx0aWYgKGVycm9yKSB7XFxuMjM5MzpcXHRcXHRcXHRcXHRwcl9lcnIoXFxcIlZGUzogRmlsZXN5c3RlbSB0aGF3IGZhaWxlZFxcXFxuXFxcIik7XFxuMjM5NDpcXHRcXHRcXHRcXHRmcmVlemVfaW5jKHNiLCB3aG8pO1xcbjIzOTU6XFx0XFx0XFx0XFx0bG9ja2RlcF9zYl9mcmVlemVfcmVsZWFzZShzYik7XFxuMjM5NjpcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMjM5NzpcXHRcXHRcXHR9XFxuMjM5ODpcXHRcXHR9XFxuMjM5OTpcXHRcXG4yNDAwOlxcdFxcdHNiLVxcdTAwM2VzX3dyaXRlcnMuZnJvemVuID0gU0JfVU5GUk9aRU47XFxuMjQwMTpcXHRcXHRzYi1cXHUwMDNlc193cml0ZXJzLmZyZWV6ZV9vd25lciA9IE5VTEw7XFxuMjQwMjpcXHRcXHR3YWtlX3VwX3ZhcihcXHUwMDI2c2ItXFx1MDAzZXNfd3JpdGVycy5mcm96ZW4pO1xcbjI0MDM6XFx0XFx0c2JfZnJlZXplX3VubG9jayhzYiwgU0JfRlJFRVpFX0ZTKTtcXG4yNDA0OlxcdG91dF9kZWFjdGl2YXRlOlxcbjI0MDU6XFx0XFx0ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpO1xcbjI0MDY6XFx0XFx0cmV0dXJuIDA7XFxuMjQwNzpcXHRcXG4yNDA4OlxcdG91dF91bmxvY2s6XFxuMjQwOTpcXHRcXHRzdXBlcl91bmxvY2tfZXhjbChzYik7XFxuMjQxMDpcXHRcXHRyZXR1cm4gZXJyb3I7XFxuMjQxMTpcXHR9XFxuMjQxMjpcXHRcXG4yNDEzOlxcdC8qKlxcbjI0MTQ6XFx0ICogdGhhd19zdXBlciAtLSB1bmxvY2sgZmlsZXN5c3RlbVxcbjI0MTU6XFx0ICogQHNiOiB0aGUgc3VwZXIgdG8gdGhhd1xcbjI0MTY6XFx0ICogQHdobzogY29udGV4dCB0aGF0IHdhbnRzIHRvIGZyZWV6ZVxcbjI0MTc6XFx0ICogQGZyZWV6ZV9vd25lcjogb3duZXIgb2YgdGhlIGZyZWV6ZVxcbjI0MTg6XFx0ICpcXG4yNDE5OlxcdCAqIFVubG9ja3MgdGhlIGZpbGVzeXN0ZW0gYW5kIG1hcmtzIGl0IHdyaXRlYWJsZSBhZ2FpbiBhZnRlciBmcmVlemVfc3VwZXIoKVxcbjI0MjA6XFx0ICogaWYgdGhlcmUgYXJlIG5vIHJlbWFpbmluZyBmcmVlemVzIG9uIHRoZSBmaWxlc3lzdGVtLlxcbjI0MjE6XFx0ICpcXG4yNDIyOlxcdCAqIEB3aG8gc2hvdWxkIGJlOlxcbjI0MjM6XFx0ICogKiAlRlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UgaWYgdXNlcnNwYWNlIHdhbnRzIHRvIHRoYXcgdGhlIGZzO1xcbjI0MjQ6XFx0ICogKiAlRlJFRVpFX0hPTERFUl9LRVJORUwgaWYgdGhlIGtlcm5lbCB3YW50cyB0byB0aGF3IHRoZSBmcy5cXG4yNDI1OlxcdCAqICogJUZSRUVaRV9NQVlfTkVTVCB3aGV0aGVyIG5lc3RpbmcgZnJlZXplIGFuZCB0aGF3IHJlcXVlc3RzIGlzIGFsbG93ZWRcXG4yNDI2OlxcdCAqXFxuMjQyNzpcXHQgKiBBIGZpbGVzeXN0ZW0gbWF5IGhvbGQgbXVsdGlwbGUgZGV2aWNlcyBhbmQgdGh1cyBhIGZpbGVzeXN0ZW1zIG1heVxcbjI0Mjg6XFx0ICogaGF2ZSBiZWVuIGZyb3plbiB0aHJvdWdoIHRoZSBibG9jayBsYXllciB2aWEgbXVsdGlwbGUgYmxvY2sgZGV2aWNlcy5cXG4yNDI5OlxcdCAqIFRoZSBmaWxlc3lzdGVtIHJlbWFpbnMgZnJvemVuIHVudGlsIGFsbCBibG9jayBkZXZpY2VzIGFyZSB1bmZyb3plbi5cXG4yNDMwOlxcdCAqL1xcbjI0MzE6XFx0aW50IHRoYXdfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcXG4yNDMyOlxcdFxcdCAgICAgICBjb25zdCB2b2lkICpmcmVlemVfb3duZXIpXFxuMjQzMzpcXHR7XFxuMjQzNDpcXHRcXHRpZiAoIXN1cGVyX2xvY2tfZXhjbChzYikpIHtcXG4yNDM1OlxcdFxcdFxcdFdBUk5fT05DRSgxLCBcXFwiRHlpbmcgc3VwZXJibG9jayB3aGlsZSB0aGF3aW5nIVxcXCIpO1xcbjI0MzY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjQzNzpcXHRcXHR9XFxuMjQzODpcXHRcXHRyZXR1cm4gdGhhd19zdXBlcl9sb2NrZWQoc2IsIHdobywgZnJlZXplX293bmVyKTtcXG4yNDM5OlxcdH1cXG4yNDQwOlxcdEVYUE9SVF9TWU1CT0wodGhhd19zdXBlcik7XFxuMjQ0MTpcXHRcXG4yNDQyOlxcdC8qXFxuMjQ0MzpcXHQgKiBDcmVhdGUgd29ya3F1ZXVlIGZvciBkZWZlcnJlZCBkaXJlY3QgSU8gY29tcGxldGlvbnMuIFdlIGFsbG9jYXRlIHRoZVxcbjI0NDQ6XFx0ICogd29ya3F1ZXVlIHdoZW4gaXQncyBmaXJzdCBuZWVkZWQuIFRoaXMgYXZvaWRzIGNyZWF0aW5nIHdvcmtxdWV1ZSBmb3JcXG4yNDQ1OlxcdCAqIGZpbGVzeXN0ZW1zIHRoYXQgZG9uJ3QgbmVlZCBpdCBhbmQgYWxzbyBhbGxvd3MgdXMgdG8gY3JlYXRlIHRoZSB3b3JrcXVldWVcXG4yNDQ2OlxcdCAqIGxhdGUgZW5vdWdoIHNvIHRoZSB3ZSBjYW4gaW5jbHVkZSBzX2lkIGluIHRoZSBuYW1lIG9mIHRoZSB3b3JrcXVldWUuXFxuMjQ0NzpcXHQgKi9cXG4yNDQ4OlxcdGludCBzYl9pbml0X2Rpb19kb25lX3dxKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuMjQ0OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA5OjIzOjUwLjE5MTAyNTYwNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE2Mzk1MjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgbG9naWMgZXJyb3IuIEl0IGxvb2tzIGxpa2UgYHRoYXdfc3VwZXJfbG9ja2VkYCBpcyBlcnJvbmVvdXNseSByZXR1cm5pbmcgYC1FSU5WQUxgIHdoZW4gaXQgc2hvdWxkIGJlIHJldHVybmluZyBgMGAgaW4gYSBzcGVjaWZpYyBzY2VuYXJpby4gVGhlIHJvb3QgY2F1c2UgYXBwZWFycyB0byBiZSB0aGUgaGFuZGxpbmcgb2YgYGZyZWV6ZV9kZWNgIHJldHVybmluZyB0cnVlLlxuXG5JIHNlZSB0aGF0IGBlcnJvcmAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdG8gYC1FSU5WQUxgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uLCB3aGljaCBjb25maXJtcyBteSBpbml0aWFsIGludHVpdGlvbiB0aGF0IHRoaXMgaXNuJ3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbS4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgcHJvYmxlbSBpc24ndCByZWxhdGVkIHRvIG1lbW9yeSBpbml0aWFsaXphdGlvbiBvciBsYWNrIHRoZXJlb2YuIEl0IGlzIGEgc3RyYWlnaHQgdXAgaW5jb3JyZWN0IHJldHVybiB2YWx1ZSBiZWluZyB0cmlnZ2VyZWQgaW4gdGhlIGNvZGUsIHdoaWNoIGlzIGVhc2lseSBhZGRyZXNzYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk1OSwiT3V0cHV0VG9rZW5zIjoxMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA5OjIzOjU0LjUwNzQyNTM0MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYHRoYXdfc3VwZXJfbG9ja2VkYCB3aGVyZSB0aGUgZnVuY3Rpb24gaW5jb3JyZWN0bHkgcmV0dXJuZWQgYC1FSU5WQUxgIGluc3RlYWQgb2YgYDBgIHdoZW4gYGZyZWV6ZV9kZWNgIGluZGljYXRlZCB0aGF0IG90aGVyIGZyZWV6ZXJzIHdlcmUgc3RpbGwgaG9sZGluZyB0aGUgZnJlZXplLiBUaGUgYGVycm9yYCB2YXJpYWJsZSB3YXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgLUVJTlZBTGAgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbiwgc28gdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW52b2x2ZWQuIFRoaXMgaXMgYSBwdXJlIGxvZ2ljL2NvbnRyb2wtZmxvdyBidWcgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYHRoYXdfc3VwZXJfbG9ja2VkYCB3aGVyZSB0aGUgZnVuY3Rpb24gaW5jb3JyZWN0bHkgcmV0dXJuZWQgYC1FSU5WQUxgIGluc3RlYWQgb2YgYDBgIHdoZW4gYGZyZWV6ZV9kZWNgIGluZGljYXRlZCB0aGF0IG90aGVyIGZyZWV6ZXJzIHdlcmUgc3RpbGwgaG9sZGluZyB0aGUgZnJlZXplLiBUaGUgYGVycm9yYCB2YXJpYWJsZSB3YXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgLUVJTlZBTGAgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbiwgc28gdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW52b2x2ZWQuIFRoaXMgaXMgYSBwdXJlIGxvZ2ljL2NvbnRyb2wtZmxvdyBidWcgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowbswqq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-21 09:07:26 +0000 UTC FinishedAt: 2026-08-21 09:23:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "818bebeb63dd6bf5f4e07e145f6cdbace520a34c", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "818bebeb63dd6bf5f4e07e145f6cdbace520a34c", "config_name": "upstream-apparmor-kasan.config", "series_id": "bfd15270-92da-4216-9bc4-405cb4af74c6" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "thaw_super", "emergency_thaw_all" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGhhd19zdXBlciYjMzQ7LAogICAgJiMzNDtlbWVyZ2VuY3lfdGhhd19hbGwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgdGhhd19zdXBlcl9sb2NrZWRgIHdoZXJlIHRoZSBmdW5jdGlvbiBpbmNvcnJlY3RseSByZXR1cm5lZCBgLUVJTlZBTGAgaW5zdGVhZCBvZiBgMGAgd2hlbiBgZnJlZXplX2RlY2AgaW5kaWNhdGVkIHRoYXQgb3RoZXIgZnJlZXplcnMgd2VyZSBzdGlsbCBob2xkaW5nIHRoZSBmcmVlemUuIFRoZSBgZXJyb3JgIHZhcmlhYmxlIHdhcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGAtRUlOVkFMYCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uLCBzbyB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnZvbHZlZC4gVGhpcyBpcyBhIHB1cmUgbG9naWMvY29udHJvbC1mbG93IGJ1ZyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGNvcmUgVkZTIGxheWVyIHdoZXJlIGB0aGF3X3N1cGVyYCB3b3VsZCBpbmNvcnJlY3RseSByZXR1cm4gYC1FSU5WQUxgIGluc3RlYWQgb2YgYDBgIHdoZW4gdGhlcmUgYXJlIG90aGVyIGZyZWV6ZXJzIHJlbWFpbmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTFjNzQ1N2ZjOWJkMDA2ZDliYzkwNzBlZTIzNjQwZjhmODljODBhNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDA5OjIzOjExIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jXG5pbmRleCAwNWU0NDMxNzMwMzg3Li4wMWRiNjEyNGU0MDlkIDEwMDY0NFxuLS0tIGEvZnMvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3VwZXIuY1xuQEAgLTIzNjksMTEgJiM0MzsyMzY5LDE0IEBAIHN0YXRpYyBpbnQgdGhhd19zdXBlcl9sb2NrZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuIFx0Lypcbi1cdCAqIEFsbCBmcmVlemVycyBzaGFyZSBhIHNpbmdsZSBhY3RpdmUgcmVmZXJlbmNlLlxuLVx0ICogU28ganVzdCB1bmxvY2sgaW4gY2FzZSB0aGVyZSBhcmUgYW55IGxlZnQuXG4mIzQzO1x0ICogQWxsIGZyZWV6ZXJzIHNoYXJlIGEgc2luZ2xlIGFjdGl2ZSByZWZlcmVuY2UuIElmIG90aGVyIGZyZWV6ZXJzXG4mIzQzO1x0ICogcmVtYWluLCBkcm9wIG91ciBob2xkIGFuZCByZXBvcnQgc3VjY2VzczsgdGhlIHN1cGVyYmxvY2sgc3RheXNcbiYjNDM7XHQgKiBmcm96ZW4gdW50aWwgdGhlIGxhc3QgaG9sZGVyIHRoYXdzIGl0LlxuIFx0ICovXG4tXHRpZiAoZnJlZXplX2RlYyhzYiwgd2hvKSlcbiYjNDM7XHRpZiAoZnJlZXplX2RlYyhzYiwgd2hvKSkge1xuJiM0MztcdFx0ZXJyb3IgPSAwO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKHNiX3Jkb25seShzYikpIHtcbiBcdFx0c2ItXHUwMDNlc193cml0ZXJzLmZyb3plbiA9IFNCX1VORlJPWkVOO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RoYXdfc3VwZXImIzM0OywKICAgICYjMzQ7ZW1lcmdlbmN5X3RoYXdfYWxsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBjb3JlIFZGUyBsYXllciB3aGVyZSBgdGhhd19zdXBlcmAgd291bGQgaW5jb3JyZWN0bHkgcmV0dXJuIGAtRUlOVkFMYCBpbnN0ZWFkIG9mIGAwYCB3aGVuIHRoZXJlIGFyZSBvdGhlciBmcmVlemVycyByZW1haW5pbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGExYzc0NTdmYzliZDAwNmQ5YmM5MDcwZWUyMzY0MGY4Zjg5YzgwYTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAwOToyMzoxMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jCmluZGV4IDA1ZTQ0MzE3MzAzODcuLjAxZGI2MTI0ZTQwOWQgMTAwNjQ0Ci0tLSBhL2ZzL3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3VwZXIuYwpAQCAtMjM2OSwxMSAmIzQzOzIzNjksMTQgQEAgc3RhdGljIGludCB0aGF3X3N1cGVyX2xvY2tlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBlbnVtIGZyZWV6ZV9ob2xkZXIgd2hvLAogCQlnb3RvIG91dF91bmxvY2s7CiAKIAkvKgotCSAqIEFsbCBmcmVlemVycyBzaGFyZSBhIHNpbmdsZSBhY3RpdmUgcmVmZXJlbmNlLgotCSAqIFNvIGp1c3QgdW5sb2NrIGluIGNhc2UgdGhlcmUgYXJlIGFueSBsZWZ0LgomIzQzOwkgKiBBbGwgZnJlZXplcnMgc2hhcmUgYSBzaW5nbGUgYWN0aXZlIHJlZmVyZW5jZS4gSWYgb3RoZXIgZnJlZXplcnMKJiM0MzsJICogcmVtYWluLCBkcm9wIG91ciBob2xkIGFuZCByZXBvcnQgc3VjY2VzczsgdGhlIHN1cGVyYmxvY2sgc3RheXMKJiM0MzsJICogZnJvemVuIHVudGlsIHRoZSBsYXN0IGhvbGRlciB0aGF3cyBpdC4KIAkgKi8KLQlpZiAoZnJlZXplX2RlYyhzYiwgd2hvKSkKJiM0MzsJaWYgKGZyZWV6ZV9kZWMoc2IsIHdobykpIHsKJiM0MzsJCWVycm9yID0gMDsKIAkJZ290byBvdXRfdW5sb2NrOwomIzQzOwl9CiAKIAlpZiAoc2JfcmRvbmx5KHNiKSkgewogCQlzYi0mZ3Q7c193cml0ZXJzLmZyb3plbiA9IFNCX1VORlJPWkVOOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDYyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFZGUyBTdXBlcmJsb2NrIFRoYXdpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBmcy9zdXBlci5jYC4gSXQmIzM5O3MgZm9jdXNlZCBvbiBgdGhhd19zdXBlcl9sb2NrZWRgLCB3aGljaCBpcyByaWdodCB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBzZWUgY2hhbmdlcyByZWxhdGVkIHRvIGZyZWV6ZXIgaW50ZXJhY3Rpb25zLiBUaGUga2V5IGNoYW5nZSBpcyB0aGlzIHNuaXBwZXQ6CgpgYGBjCiAJLyoKLQkgKiBBbGwgZnJlZXplcnMgc2hhcmUgYSBzaW5nbGUgYWN0aXZlIHJlZmVyZW5jZS4KLQkgKiBTbyBqdXN0IHVubG9jayBpbiBjYXNlIHRoZXJlIGFyZSBhbnkgbGVmdC4KJiM0MzsJICogQWxsIGZyZWV6ZXJzIHNoYXJlIGEgc2luZ2xlIGFjdGl2ZSByZWZlcmVuY2UuIElmIG90aGVyIGZyZWV6ZXJzCiYjNDM7CSAqIHJlbWFpbiwgZHJvcCBvdXIgaG9sZCBhbmQgcmVwb3J0IHN1Y2Nlc3M7IHRoZSBzdXBlcmJsb2NrIHN0YXlzCiYjNDM7CSAqIGZyb3plbiB1bnRpbCB0aGUgbGFzdCBob2xkZXIgdGhhd3MgaXQuCiAJICovCi0JaWYgKGZyZWV6ZV9kZWMoc2IsIHdobykpCiYjNDM7CWlmIChmcmVlemVfZGVjKHNiLCB3aG8pKSB7CiYjNDM7CQllcnJvciA9IDA7CiAJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQpgYGAKCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIGFkZHJlc3NpbmcgYW4gZWRnZSBjYXNlIGluIHRoZSBmcmVlemVyIGxvZ2ljLiBQcmV2aW91c2x5LCBpdCBsb29rZWQgbGlrZSBpdCB3YXMgc2ltcGx5IHVubG9ja2luZyB0aGUgc3VwZXJibG9jayBpZiB0aGVyZSB3ZXJlIGFueSByZW1haW5pbmcgZnJlZXplcnMuIE5vdywgaXQgZXhwbGljaXRseSBjaGVja3MgaWYgYGZyZWV6ZV9kZWNgIHJldHVybnMgdHJ1ZSAobWVhbmluZyB0aGVyZSBhcmUgc3RpbGwgb3RoZXIgZnJlZXplcnMgYWN0aXZlKSwgYW5kIGlmIHNvLCBpdCAqZXhwbGljaXRseSogc2V0cyBgZXJyb3JgIHRvIDAgYmVmb3JlIGV4aXRpbmcuIFRoaXMgaXMgaW1wb3J0YW50OiBpdCYjMzk7cyBub3Qgc2ltcGx5IGxlYXZpbmcgYGVycm9yYCB1bmluaXRpYWxpemVkIG9yIHBvc3NpYmx5IHNldCB0byBhIHByZXZpb3VzIGluY29ycmVjdCB2YWx1ZSwgaXQmIzM5O3MgZW5zdXJpbmcgYSBzdWNjZXNzIHJldHVybiB3aGVuIGFub3RoZXIgZnJlZXplciBob2xkcyB0aGUgbG9jay4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBhIGJ1ZyBmaXggcmVsYXRlZCB0byBlcnJvciBoYW5kbGluZyBpbiB0aGlzIHNjZW5hcmlvLiBJdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGVycm9yIHJlcG9ydGluZyBvciBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBpZiBtdWx0aXBsZSBmcmVlemVycyB3ZXJlIGludm9sdmVkLiBUaGUgZml4IGVuc3VyZXMgYSBtb3JlIGNvbnNpc3RlbnQgYW5kIGNvcnJlY3Qgc3RhdGUgbWFuYWdlbWVudC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGB0aGF3X3N1cGVyX2xvY2tlZGAgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aGF3X3N1cGVyX2xvY2tlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc3VwZXIuYy00NC1cbmZzL3N1cGVyLmM6NDU6c3RhdGljIGludCB0aGF3X3N1cGVyX2xvY2tlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBlbnVtIGZyZWV6ZV9ob2xkZXIgd2hvLFxuZnMvc3VwZXIuYy00Ni1cdFx0XHQgICAgIGNvbnN0IHZvaWQgKmZyZWV6ZV9vd25lcik7XG4tLVxuZnMvc3VwZXIuYz0xMjE5PXN0YXRpYyB2b2lkIGRvX3RoYXdfYWxsX2NhbGxiYWNrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKnVudXNlZClcbi0tXG5mcy9zdXBlci5jLTEyMjktXHRpZiAoc3VwZXJfbG9ja19leGNsKHNiKSlcbmZzL3N1cGVyLmM6MTIzMDpcdFx0dGhhd19zdXBlcl9sb2NrZWQoc2IsIEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLCBOVUxMKTtcbmZzL3N1cGVyLmMtMTIzMS1cdGRlYWN0aXZhdGVfc3VwZXIoc2IpO1xuLS1cbmZzL3N1cGVyLmM9MjM1Mj1FWFBPUlRfU1lNQk9MKGZyZWV6ZV9zdXBlcik7XG4tLVxuZnMvc3VwZXIuYy0yMzU5LSAqL1xuZnMvc3VwZXIuYzoyMzYwOnN0YXRpYyBpbnQgdGhhd19zdXBlcl9sb2NrZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcbmZzL3N1cGVyLmMtMjM2MS1cdFx0XHQgICAgIGNvbnN0IHZvaWQgKmZyZWV6ZV9vd25lcilcbi0tXG5mcy9zdXBlci5jPTI0MzE9aW50IHRoYXdfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcbi0tXG5mcy9zdXBlci5jLTI0MzctXHR9XG5mcy9zdXBlci5jOjI0Mzg6XHRyZXR1cm4gdGhhd19zdXBlcl9sb2NrZWQoc2IsIHdobywgZnJlZXplX293bmVyKTtcbmZzL3N1cGVyLmMtMjQzOS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIGB0aGF3X3N1cGVyX2xvY2tlZGAgZnVuY3Rpb24gaW4gYGZzL3N1cGVyLmNgOgoKKipEZWVwIERpdmUgaW50byBgdGhhd19zdXBlcl9sb2NrZWRgKioKCk9rYXksIGxldCYjMzk7cyBnZXQgaW50byB0aGUgd2VlZHMgb2YgYHRoYXdfc3VwZXJfbG9ja2VkYC4gSSYjMzk7bSBndWVzc2luZyB0aGlzIGhhcyB0byBkbyB3aXRoIGJyaW5naW5nIGEgc3VwZXJibG9jayBiYWNrIHRvIGEgdXNhYmxlIHN0YXRlLCBwb3NzaWJseSBhZnRlciBzb21lIHNvcnQgb2YgcXVpZXNjaW5nIG9yIHN1c3BlbnNpb24uIFRoZSAmIzM0O2xvY2tlZCYjMzQ7IHBhcnQgaXMga2V5OyBpdCBpbXBsaWVzIHNvbWUgY3JpdGljYWwgc2VjdGlvbiBwcm90ZWN0aW9uIGlzIGludm9sdmVkLCB3aGljaCBtYWtlcyBtZSB0aGluayB0aGlzIGlzIHdoZXJlIHJhY2UgY29uZGl0aW9ucyBhcmUgbWFuYWdlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBiZWluZyB0aGF3ZWQgYW5kIHdoeS4gSXMgaXQgdGhlIGVudGlyZSBmaWxlc3lzdGVtLCBvciBqdXN0IHBhcnRzIG9mIGl0PyBJcyBpdCBhYm91dCBkYXRhIGNvbnNpc3RlbmN5LCBqb3VybmFsIHJlY292ZXJ5LCBvciByZXNvdXJjZSBhbGxvY2F0aW9uPyBJJiMzOTttIGFudGljaXBhdGluZyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgYmxvY2sgbGF5ZXIsIGlub2RlIG1hbmFnZW1lbnQsIGFuZCBtYXliZSBldmVuIHRoZSBWRlMgbGF5ZXIuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIG11dGV4ZXMsIHNwaW5sb2NrcywgYW5kIGF0b21pYyBvcGVyYXRpb25zLiBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcHJlcGFyaW5nIHRvIHRyYWNlIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIGZpbGVzeXN0ZW0gc3RhdGUgbWFjaGluZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGV4cGVjdGluZyB0byBsb29rIGZvciB0aGluZ3MgbGlrZTogaG93IHRoZSBzdXBlcmJsb2NrIGlzIGZsYWdnZWQsIGhvdyByZXNvdXJjZXMgYXJlIHJlbGVhc2VkLCBvciBob3cgZGF0YSBzdHJ1Y3R1cmVzIGFyZSB1cGRhdGVkLiBUaGlzIGNvdWxkIGJlIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgb24gaGFuZGxpbmcgcGVyc2lzdGVudCBkYXRhIGFmdGVyIGFuIHVwZGF0ZSBvciBzeXN0ZW0gcGF1c2UuIEkgbmVlZCB0byBiZSBwcmVwYXJlZCB0byBzZWUgc29tZSBpbnRyaWNhdGUgc3luY2hyb25pemF0aW9uIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzNTA6XHRcdHJldHVybiAwO1xuMjM1MTpcdH1cbjIzNTI6XHRFWFBPUlRfU1lNQk9MKGZyZWV6ZV9zdXBlcik7XG4yMzUzOlx0XG4yMzU0Olx0LypcbjIzNTU6XHQgKiBVbmRvZXMgdGhlIGVmZmVjdCBvZiBhIGZyZWV6ZV9zdXBlcl9sb2NrZWQgY2FsbC4gIElmIHRoZSBmaWxlc3lzdGVtIGlzXG4yMzU2Olx0ICogZnJvemVuIGJvdGggYnkgdXNlcnNwYWNlIGFuZCB0aGUga2VybmVsLCBhIHRoYXcgY2FsbCBmcm9tIGVpdGhlciBzb3VyY2VcbjIzNTc6XHQgKiByZW1vdmVzIHRoYXQgc3RhdGUgd2l0aG91dCByZWxlYXNpbmcgdGhlIG90aGVyIHN0YXRlIG9yIHVubG9ja2luZyB0aGVcbjIzNTg6XHQgKiBmaWxlc3lzdGVtLlxuMjM1OTpcdCAqL1xuMjM2MDpcdHN0YXRpYyBpbnQgdGhhd19zdXBlcl9sb2NrZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcbjIzNjE6XHRcdFx0XHQgICAgIGNvbnN0IHZvaWQgKmZyZWV6ZV9vd25lcilcbjIzNjI6XHR7XG4yMzYzOlx0XHRpbnQgZXJyb3IgPSAtRUlOVkFMO1xuMjM2NDpcdFxuMjM2NTpcdFx0aWYgKHNiLVx1MDAzZXNfd3JpdGVycy5mcm96ZW4gIT0gU0JfRlJFRVpFX0NPTVBMRVRFKVxuMjM2NjpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4yMzY3Olx0XG4yMzY4Olx0XHRpZiAoIW1heV91bmZyZWV6ZShzYiwgd2hvLCBmcmVlemVfb3duZXIpKVxuMjM2OTpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4yMzcwOlx0XG4yMzcxOlx0XHQvKlxuMjM3MjpcdFx0ICogQWxsIGZyZWV6ZXJzIHNoYXJlIGEgc2luZ2xlIGFjdGl2ZSByZWZlcmVuY2UuIElmIG90aGVyIGZyZWV6ZXJzXG4yMzczOlx0XHQgKiByZW1haW4sIGRyb3Agb3VyIGhvbGQgYW5kIHJlcG9ydCBzdWNjZXNzOyB0aGUgc3VwZXJibG9jayBzdGF5c1xuMjM3NDpcdFx0ICogZnJvemVuIHVudGlsIHRoZSBsYXN0IGhvbGRlciB0aGF3cyBpdC5cbjIzNzU6XHRcdCAqL1xuMjM3NjpcdFx0aWYgKGZyZWV6ZV9kZWMoc2IsIHdobykpIHtcbjIzNzc6XHRcdFx0ZXJyb3IgPSAwO1xuMjM3ODpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4yMzc5Olx0XHR9XG4yMzgwOlx0XG4yMzgxOlx0XHRpZiAoc2JfcmRvbmx5KHNiKSkge1xuMjM4MjpcdFx0XHRzYi1cdTAwM2VzX3dyaXRlcnMuZnJvemVuID0gU0JfVU5GUk9aRU47XG4yMzgzOlx0XHRcdHNiLVx1MDAzZXNfd3JpdGVycy5mcmVlemVfb3duZXIgPSBOVUxMO1xuMjM4NDpcdFx0XHR3YWtlX3VwX3ZhcihcdTAwMjZzYi1cdTAwM2VzX3dyaXRlcnMuZnJvemVuKTtcbjIzODU6XHRcdFx0Z290byBvdXRfZGVhY3RpdmF0ZTtcbjIzODY6XHRcdH1cbjIzODc6XHRcbjIzODg6XHRcdGxvY2tkZXBfc2JfZnJlZXplX2FjcXVpcmUoc2IpO1xuMjM4OTpcdFxuMjM5MDpcdFx0aWYgKHNiLVx1MDAzZXNfb3AtXHUwMDNldW5mcmVlemVfZnMpIHtcbjIzOTE6XHRcdFx0ZXJyb3IgPSBzYi1cdTAwM2VzX29wLVx1MDAzZXVuZnJlZXplX2ZzKHNiKTtcbjIzOTI6XHRcdFx0aWYgKGVycm9yKSB7XG4yMzkzOlx0XHRcdFx0cHJfZXJyKFwmIzM0O1ZGUzogRmlsZXN5c3RlbSB0aGF3IGZhaWxlZFxcblwmIzM0Oyk7XG4yMzk0Olx0XHRcdFx0ZnJlZXplX2luYyhzYiwgd2hvKTtcbjIzOTU6XHRcdFx0XHRsb2NrZGVwX3NiX2ZyZWV6ZV9yZWxlYXNlKHNiKTtcbjIzOTY6XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4yMzk3Olx0XHRcdH1cbjIzOTg6XHRcdH1cbjIzOTk6XHRcbjI0MDA6XHRcdHNiLVx1MDAzZXNfd3JpdGVycy5mcm96ZW4gPSBTQl9VTkZST1pFTjtcbjI0MDE6XHRcdHNiLVx1MDAzZXNfd3JpdGVycy5mcmVlemVfb3duZXIgPSBOVUxMO1xuMjQwMjpcdFx0d2FrZV91cF92YXIoXHUwMDI2c2ItXHUwMDNlc193cml0ZXJzLmZyb3plbik7XG4yNDAzOlx0XHRzYl9mcmVlemVfdW5sb2NrKHNiLCBTQl9GUkVFWkVfRlMpO1xuMjQwNDpcdG91dF9kZWFjdGl2YXRlOlxuMjQwNTpcdFx0ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpO1xuMjQwNjpcdFx0cmV0dXJuIDA7XG4yNDA3Olx0XG4yNDA4Olx0b3V0X3VubG9jazpcbjI0MDk6XHRcdHN1cGVyX3VubG9ja19leGNsKHNiKTtcbjI0MTA6XHRcdHJldHVybiBlcnJvcjtcbjI0MTE6XHR9XG4yNDEyOlx0XG4yNDEzOlx0LyoqXG4yNDE0Olx0ICogdGhhd19zdXBlciAtLSB1bmxvY2sgZmlsZXN5c3RlbVxuMjQxNTpcdCAqIEBzYjogdGhlIHN1cGVyIHRvIHRoYXdcbjI0MTY6XHQgKiBAd2hvOiBjb250ZXh0IHRoYXQgd2FudHMgdG8gZnJlZXplXG4yNDE3Olx0ICogQGZyZWV6ZV9vd25lcjogb3duZXIgb2YgdGhlIGZyZWV6ZVxuMjQxODpcdCAqXG4yNDE5Olx0ICogVW5sb2NrcyB0aGUgZmlsZXN5c3RlbSBhbmQgbWFya3MgaXQgd3JpdGVhYmxlIGFnYWluIGFmdGVyIGZyZWV6ZV9zdXBlcigpXG4yNDIwOlx0ICogaWYgdGhlcmUgYXJlIG5vIHJlbWFpbmluZyBmcmVlemVzIG9uIHRoZSBmaWxlc3lzdGVtLlxuMjQyMTpcdCAqXG4yNDIyOlx0ICogQHdobyBzaG91bGQgYmU6XG4yNDIzOlx0ICogKiAlRlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UgaWYgdXNlcnNwYWNlIHdhbnRzIHRvIHRoYXcgdGhlIGZzO1xuMjQyNDpcdCAqICogJUZSRUVaRV9IT0xERVJfS0VSTkVMIGlmIHRoZSBrZXJuZWwgd2FudHMgdG8gdGhhdyB0aGUgZnMuXG4yNDI1Olx0ICogKiAlRlJFRVpFX01BWV9ORVNUIHdoZXRoZXIgbmVzdGluZyBmcmVlemUgYW5kIHRoYXcgcmVxdWVzdHMgaXMgYWxsb3dlZFxuMjQyNjpcdCAqXG4yNDI3Olx0ICogQSBmaWxlc3lzdGVtIG1heSBob2xkIG11bHRpcGxlIGRldmljZXMgYW5kIHRodXMgYSBmaWxlc3lzdGVtcyBtYXlcbjI0Mjg6XHQgKiBoYXZlIGJlZW4gZnJvemVuIHRocm91Z2ggdGhlIGJsb2NrIGxheWVyIHZpYSBtdWx0aXBsZSBibG9jayBkZXZpY2VzLlxuMjQyOTpcdCAqIFRoZSBmaWxlc3lzdGVtIHJlbWFpbnMgZnJvemVuIHVudGlsIGFsbCBibG9jayBkZXZpY2VzIGFyZSB1bmZyb3plbi5cbjI0MzA6XHQgKi9cbjI0MzE6XHRpbnQgdGhhd19zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBlbnVtIGZyZWV6ZV9ob2xkZXIgd2hvLFxuMjQzMjpcdFx0ICAgICAgIGNvbnN0IHZvaWQgKmZyZWV6ZV9vd25lcilcbjI0MzM6XHR7XG4yNDM0Olx0XHRpZiAoIXN1cGVyX2xvY2tfZXhjbChzYikpIHtcbjI0MzU6XHRcdFx0V0FSTl9PTkNFKDEsIFwmIzM0O0R5aW5nIHN1cGVyYmxvY2sgd2hpbGUgdGhhd2luZyFcJiMzNDspO1xuMjQzNjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI0Mzc6XHRcdH1cbjI0Mzg6XHRcdHJldHVybiB0aGF3X3N1cGVyX2xvY2tlZChzYiwgd2hvLCBmcmVlemVfb3duZXIpO1xuMjQzOTpcdH1cbjI0NDA6XHRFWFBPUlRfU1lNQk9MKHRoYXdfc3VwZXIpO1xuMjQ0MTpcdFxuMjQ0MjpcdC8qXG4yNDQzOlx0ICogQ3JlYXRlIHdvcmtxdWV1ZSBmb3IgZGVmZXJyZWQgZGlyZWN0IElPIGNvbXBsZXRpb25zLiBXZSBhbGxvY2F0ZSB0aGVcbjI0NDQ6XHQgKiB3b3JrcXVldWUgd2hlbiBpdCYjMzk7cyBmaXJzdCBuZWVkZWQuIFRoaXMgYXZvaWRzIGNyZWF0aW5nIHdvcmtxdWV1ZSBmb3JcbjI0NDU6XHQgKiBmaWxlc3lzdGVtcyB0aGF0IGRvbiYjMzk7dCBuZWVkIGl0IGFuZCBhbHNvIGFsbG93cyB1cyB0byBjcmVhdGUgdGhlIHdvcmtxdWV1ZVxuMjQ0NjpcdCAqIGxhdGUgZW5vdWdoIHNvIHRoZSB3ZSBjYW4gaW5jbHVkZSBzX2lkIGluIHRoZSBuYW1lIG9mIHRoZSB3b3JrcXVldWUuXG4yNDQ3Olx0ICovXG4yNDQ4Olx0aW50IHNiX2luaXRfZGlvX2RvbmVfd3Eoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbjI0NDk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkwOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBWRlMgQnVnIEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBidWcgaW4gYHRoYXdfc3VwZXJfbG9ja2VkYC4gQXBwYXJlbnRseSwgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgaXNuJiMzOTt0IGNvcnJlY3Qgd2hlbiBgZnJlZXplX2RlY2AgcmV0dXJucyB0cnVlIOKAkyBpdCYjMzk7cyByZXR1cm5pbmcgYC1FSU5WQUxgIGluc3RlYWQgb2YgYDBgLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBjb3JlIFZGUyBsYXllci4gRGVmaW5pdGVseSB3b3J0aCBhIGZ1enppbmcgcnVuLiBNeSBpbW1lZGlhdGUgZm9jdXMgc3ltYm9scyB3aWxsIGJlIGB0aGF3X3N1cGVyX2xvY2tlZGAgYW5kIGB0aGF3X3N1cGVyYC4KCkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBObywgc2luY2UgdGhpcyBpcyBpbiBjb3JlIFZGUywgdGhlcmUgc2hvdWxkbiYjMzk7dCBiZSBhbnl0aGluZyBzcGVjaWZpYy4gCgpIbW0sIHdhaXQgYSBtaW51dGUuLi4gYHRoYXdfc3VwZXJfbG9ja2VkYCBpcyBzdGF0aWMuIFRoYXQgbWVhbnMgYHRoYXdfc3VwZXJgIGlzIHRoZSBleHBvcnRlZCBzeW1ib2wsIG5vdCB0aGUgbG9ja2VkIHZlcnNpb24uIFJpZ2h0LCBhZGRpbmcgYHRoYXdfc3VwZXJgIHRvIEZvY3VzU3ltYm9scywgYW5kIHJlbW92aW5nIGB0aGF3X3N1cGVyX2xvY2tlZGAgZnJvbSB0aGUgbGlzdC4KCk5vdywgSSBzaG91bGQgcXVpY2tseSBjaGVjayBmb3Igb3RoZXIgZXhwb3J0ZWQgc3ltYm9scyB0aGF0IG1pZ2h0IGNhbGwgYHRoYXdfc3VwZXJfbG9ja2VkYC4gTGV0JiMzOTtzIHNlZS4uLiBBaCwgYGRvX3RoYXdfYWxsX2NhbGxiYWNrYCBkb2VzLiBJIHNob3VsZCBjaGVjayB0aGF0IG9uZSBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fdGhhd19hbGxfY2FsbGJhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zdXBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3N1cGVyLmM9MTIwOD1zdGF0aWMgaW5saW5lIGJvb2wgZ2V0X2FjdGl2ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL3N1cGVyLmMtMTIxOC1cbmZzL3N1cGVyLmM6MTIxOTpzdGF0aWMgdm9pZCBkb190aGF3X2FsbF9jYWxsYmFjayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICp1bnVzZWQpXG5mcy9zdXBlci5jLTEyMjAte1xuLS1cbmZzL3N1cGVyLmM9MTIzND1zdGF0aWMgdm9pZCBkb190aGF3X2FsbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5mcy9zdXBlci5jLTEyMzUte1xuZnMvc3VwZXIuYzoxMjM2Olx0X19pdGVyYXRlX3N1cGVycyhkb190aGF3X2FsbF9jYWxsYmFjaywgTlVMTCwgU1VQRVJfSVRFUl9VTkxPQ0tFRCk7XG5mcy9zdXBlci5jLTEyMzctXHRrZnJlZSh3b3JrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTk2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGFpbWluZyBmb3IgYSBmdWxzb21lIHJlbmRlcmluZzoKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgRW1lcmdlbmN5IFRoYXcgQ2FsbCBQYXRocyoqCgpBbHJpZ2h0LCBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvZGViYXNlJiMzOTtzIHRoYXdpbmcgbWVjaGFuaXNtcywgc3BlY2lmaWNhbGx5IGhvdyB0aGV5IHJlbGF0ZSB0byBwb3RlbnRpYWwgZW1lcmdlbmN5IHNjZW5hcmlvcy4gVGhlIHRob3VnaHQgdGhhdCYjMzk7cyBjdXJyZW50bHkgbmFnZ2luZyBhdCBtZSBpcyB0aGlzOiBgZG9fdGhhd19hbGxgLiBXaGVyZSBleGFjdGx5IGlzIHRoYXQgY2FsbGVkIGZyb20/IEkmIzM5O20gcHJldHR5IHN1cmUgSSYjMzk7dmUgc2VlbiBpdCBtZW50aW9uZWQgaW4gdGhlIGNvbnRleHQgb2YgYW4gJiMzNDtlbWVyZ2VuY3kgdGhhdyYjMzQ7IHByb2NlZHVyZSwgcGVyaGFwcyB0cmlnZ2VyZWQgYnkgdGhlIGBlbWVyZ2VuY3lfdGhhd19iZGV2YCBmdW5jdGlvbiwgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIGxpbmsgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBjYWxsaW5nIGBkb190aGF3X2FsbGAgZnJvbSBhbnkgZW1lcmdlbmN5IGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlc2UgcmVsYXRpb25zaGlwcyBpcyBjcml0aWNhbCBmb3IgZW5zdXJpbmcgb3VyIHN5c3RlbXMgY2FuIHJlY292ZXIgZ3JhY2VmdWxseSBmcm9tIHVudXN1YWwgY29uZGl0aW9ucy4gQXJlIHRoZXJlIG90aGVyIGVudHJ5IHBvaW50cyB0aGF0IEkgYW0gbWlzc2luZz8gSXQgaXMgaW1wb3J0YW50IHRoYXQgSSBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX3RoYXdfYWxsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvc3VwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zdXBlci5jPTEyMDg9c3RhdGljIGlubGluZSBib29sIGdldF9hY3RpdmVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9zdXBlci5jLTEyMTgtXG5mcy9zdXBlci5jOjEyMTk6c3RhdGljIHZvaWQgZG9fdGhhd19hbGxfY2FsbGJhY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqdW51c2VkKVxuZnMvc3VwZXIuYy0xMjIwLXtcbi0tXG5mcy9zdXBlci5jLTEyMzMtXG5mcy9zdXBlci5jOjEyMzQ6c3RhdGljIHZvaWQgZG9fdGhhd19hbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZnMvc3VwZXIuYy0xMjM1LXtcbmZzL3N1cGVyLmM6MTIzNjpcdF9faXRlcmF0ZV9zdXBlcnMoZG9fdGhhd19hbGxfY2FsbGJhY2ssIE5VTEwsIFNVUEVSX0lURVJfVU5MT0NLRUQpO1xuZnMvc3VwZXIuYy0xMjM3LVx0a2ZyZWUod29yayk7XG4tLVxuZnMvc3VwZXIuYz0xMjQ2PXZvaWQgZW1lcmdlbmN5X3RoYXdfYWxsKHZvaWQpXG4tLVxuZnMvc3VwZXIuYy0xMjUxLVx0aWYgKHdvcmspIHtcbmZzL3N1cGVyLmM6MTI1MjpcdFx0SU5JVF9XT1JLKHdvcmssIGRvX3RoYXdfYWxsKTtcbmZzL3N1cGVyLmMtMTI1My1cdFx0c2NoZWR1bGVfd29yayh3b3JrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE1MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEltbWVkaWF0ZSBQbGFuKioKCk9rYXksIHNvIEkgc2VlIGB0aGF3X3N1cGVyYCBhbmQgYGVtZXJnZW5jeV90aGF3X2FsbGAgYXJlIHRoZSB0d28gbWFpbiBlbnRyeSBwb2ludHMgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4gVGhhdCBtYWtlcyB0aGluZ3Mgc3RyYWlnaHRmb3J3YXJkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYWRkIHRoZW0gdG8gYEZvY3VzU3ltYm9sc2AgaW1tZWRpYXRlbHk7IHRoYXQmIzM5O3MgdGhlIG5hdHVyYWwgcGxhY2UgZm9yIHRob3NlIGtpbmRzIG9mIGVudHJ5IHBvaW50cy4KCk5vdywgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gYW55dGhpbmcgZWxzZSwgaXQmIzM5O3Mgd29ydGggdGFraW5nIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgYW55dGhpbmcgZWxzZSBpcyBjYWxsaW5nIGB0aGF3X3N1cGVyX2xvY2tlZGAuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB0aGF0IGZ1bmN0aW9uLiBJdCYjMzk7cyBhIHF1aWNrIGNoZWNrIHRvIGVsaW1pbmF0ZSBhbnkgc3VycHJpc2VzIGRvd24gdGhlIGxpbmUsIGFuZCBtYWtlIHN1cmUgSSBkb24mIzM5O3QgY2F1c2UgYW55IHJlZ3Jlc3Npb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aGF3X3N1cGVyX2xvY2tlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc3VwZXIuYy00NC1cbmZzL3N1cGVyLmM6NDU6c3RhdGljIGludCB0aGF3X3N1cGVyX2xvY2tlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBlbnVtIGZyZWV6ZV9ob2xkZXIgd2hvLFxuZnMvc3VwZXIuYy00Ni1cdFx0XHQgICAgIGNvbnN0IHZvaWQgKmZyZWV6ZV9vd25lcik7XG4tLVxuZnMvc3VwZXIuYz0xMjE5PXN0YXRpYyB2b2lkIGRvX3RoYXdfYWxsX2NhbGxiYWNrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKnVudXNlZClcbi0tXG5mcy9zdXBlci5jLTEyMjktXHRpZiAoc3VwZXJfbG9ja19leGNsKHNiKSlcbmZzL3N1cGVyLmM6MTIzMDpcdFx0dGhhd19zdXBlcl9sb2NrZWQoc2IsIEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLCBOVUxMKTtcbmZzL3N1cGVyLmMtMTIzMS1cdGRlYWN0aXZhdGVfc3VwZXIoc2IpO1xuLS1cbmZzL3N1cGVyLmM9MjM1Mj1FWFBPUlRfU1lNQk9MKGZyZWV6ZV9zdXBlcik7XG4tLVxuZnMvc3VwZXIuYy0yMzU5LSAqL1xuZnMvc3VwZXIuYzoyMzYwOnN0YXRpYyBpbnQgdGhhd19zdXBlcl9sb2NrZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcbmZzL3N1cGVyLmMtMjM2MS1cdFx0XHQgICAgIGNvbnN0IHZvaWQgKmZyZWV6ZV9vd25lcilcbi0tXG5mcy9zdXBlci5jPTI0MzE9aW50IHRoYXdfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcbi0tXG5mcy9zdXBlci5jLTI0MzctXHR9XG5mcy9zdXBlci5jOjI0Mzg6XHRyZXR1cm4gdGhhd19zdXBlcl9sb2NrZWQoc2IsIHdobywgZnJlZXplX293bmVyKTtcbmZzL3N1cGVyLmMtMjQzOS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NjMKCQkJCQkJCW91dHB1dDogOTUKCQkJCQkJCXRob3VnaHRzOiAxNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGhlcmUgYXJlIGNsZWFybHkgYHRoYXdfc3VwZXJgIGFuZCBgZW1lcmdlbmN5X3RoYXdfYWxsYC4gVGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgZnVuY3Rpb25hbCBidWcgaW4gdGhlIGNvcmUgVkZTIGxheWVyOyBzcGVjaWZpY2FsbHksIGB0aGF3X3N1cGVyYCB3YXMgaW1wcm9wZXJseSByZXR1cm5pbmcgYC1FSU5WQUxgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucyDigJMgd2hlbiB0aGVyZSBhcmUgb3RoZXIgZnJlZXplcnMgcHJlc2VudCDigJMgd2hlbiBpdCBzaG91bGQgaGF2ZSByZXR1cm5lZCBgMGAuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQsIGZ1bmN0aW9uYWwgY29ycmVjdGlvbiwgbWVhbmluZyBpdCBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHJlYWNoYWJsZSBrZXJuZWwgY29kZS4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiB0aGUgcG90ZW50aWFsIGltcGFjdC4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGZvY3VzIG9uIGB0aGF3X3N1cGVyYCBhbmQgYGVtZXJnZW5jeV90aGF3X2FsbGAgZHVyaW5nIHRlc3RpbmcuIE5vIHNwZWNpZmljIGNvbmZpZyBjaGFuZ2VzIGFyZSBpbmRpY2F0ZWQsIHdoaWNoIGlzIGdvb2QuIFRoZSByZWFzb25pbmcgaXMgc291bmQsIGl0IHN1Y2NpbmN0bHkgaWRlbnRpZmllcyB0aGUgcHJvYmxlbSBhbmQgaXRzIGxvY2F0aW9uIGluIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGhhd19zdXBlciYjMzQ7LAogICAgJiMzNDtlbWVyZ2VuY3lfdGhhd19hbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGNvcmUgVkZTIGxheWVyIHdoZXJlIGB0aGF3X3N1cGVyYCB3b3VsZCBpbmNvcnJlY3RseSByZXR1cm4gYC1FSU5WQUxgIGluc3RlYWQgb2YgYDBgIHdoZW4gdGhlcmUgYXJlIG90aGVyIGZyZWV6ZXJzIHJlbWFpbmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RoYXdfc3VwZXImIzM0OywKICAgICYjMzQ7ZW1lcmdlbmN5X3RoYXdfYWxsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBjb3JlIFZGUyBsYXllciB3aGVyZSBgdGhhd19zdXBlcmAgd291bGQgaW5jb3JyZWN0bHkgcmV0dXJuIGAtRUlOVkFMYCBpbnN0ZWFkIG9mIGAwYCB3aGVuIHRoZXJlIGFyZSBvdGhlciBmcmVlemVycyByZW1haW5pbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOToyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgdGhhd19zdXBlcl9sb2NrZWRgIHdoZXJlIHRoZSBmdW5jdGlvbiBpbmNvcnJlY3RseSByZXR1cm5lZCBgLUVJTlZBTGAgaW5zdGVhZCBvZiBgMGAgd2hlbiBgZnJlZXplX2RlY2AgaW5kaWNhdGVkIHRoYXQgb3RoZXIgZnJlZXplcnMgd2VyZSBzdGlsbCBob2xkaW5nIHRoZSBmcmVlemUuIFRoZSBgZXJyb3JgIHZhcmlhYmxlIHdhcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGAtRUlOVkFMYCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uLCBzbyB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnZvbHZlZC4gVGhpcyBpcyBhIHB1cmUgbG9naWMvY29udHJvbC1mbG93IGJ1ZyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTFjNzQ1N2ZjOWJkMDA2ZDliYzkwNzBlZTIzNjQwZjhmODljODBhNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDA5OjIzOjExIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggMDVlNDQzMTczMDM4Ny4uMDFkYjYxMjRlNDA5ZCAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9zdXBlci5jCkBAIC0yMzY5LDExICYjNDM7MjM2OSwxNCBAQCBzdGF0aWMgaW50IHRoYXdfc3VwZXJfbG9ja2VkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGVudW0gZnJlZXplX2hvbGRlciB3aG8sCiAJCWdvdG8gb3V0X3VubG9jazsKIAogCS8qCi0JICogQWxsIGZyZWV6ZXJzIHNoYXJlIGEgc2luZ2xlIGFjdGl2ZSByZWZlcmVuY2UuCi0JICogU28ganVzdCB1bmxvY2sgaW4gY2FzZSB0aGVyZSBhcmUgYW55IGxlZnQuCiYjNDM7CSAqIEFsbCBmcmVlemVycyBzaGFyZSBhIHNpbmdsZSBhY3RpdmUgcmVmZXJlbmNlLiBJZiBvdGhlciBmcmVlemVycwomIzQzOwkgKiByZW1haW4sIGRyb3Agb3VyIGhvbGQgYW5kIHJlcG9ydCBzdWNjZXNzOyB0aGUgc3VwZXJibG9jayBzdGF5cwomIzQzOwkgKiBmcm96ZW4gdW50aWwgdGhlIGxhc3QgaG9sZGVyIHRoYXdzIGl0LgogCSAqLwotCWlmIChmcmVlemVfZGVjKHNiLCB3aG8pKQomIzQzOwlpZiAoZnJlZXplX2RlYyhzYiwgd2hvKSkgewomIzQzOwkJZXJyb3IgPSAwOwogCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CX0KIAogCWlmIChzYl9yZG9ubHkoc2IpKSB7CiAJCXNiLSZndDtzX3dyaXRlcnMuZnJvemVuID0gU0JfVU5GUk9aRU47CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3VwZXJibG9jayBUaGF3IExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBmcy9zdXBlci5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHRoYXdfc3VwZXJfbG9ja2VkYCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB3ZSBoYXZlIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgbG9naWMgYnVnIGZpeCByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgdGhlIGBmcmVlemVfZGVjYCBjYWxsLiBQcmV2aW91c2x5LCB0aGUgY29kZSBhc3N1bWVkIHRoYXQgaWYgYGZyZWV6ZV9kZWNgIHJldHVybmVkIHRydWUsIGl0IGF1dG9tYXRpY2FsbHkgbWVhbnQgdGhlIHRoYXcgd2FzIGZ1bGx5IHN1Y2Nlc3NmdWwuIEhvd2V2ZXIsIHRoYXQmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0LiBUcnVlIGZyb20gYGZyZWV6ZV9kZWNgIHNpbXBseSBtZWFucyAqdGhpcyogZnJlZXplciBoYXMgcmVsZWFzZWQgaXRzIGhvbGQsIGJ1dCBvdGhlciBmcmVlemVycyBtaWdodCAqc3RpbGwqIGJlIGFjdGl2ZWx5IGZyZWV6aW5nIHRoZSBzdXBlcmJsb2NrLgoKVGhlIG9yaWdpbmFsIGNvZGUgc25pcHBldCB3YXM6CgpgYGBjCiAJLyoKLQkgKiBBbGwgZnJlZXplcnMgc2hhcmUgYSBzaW5nbGUgYWN0aXZlIHJlZmVyZW5jZS4KLQkgKiBTbyBqdXN0IHVubG9jayBpbiBjYXNlIHRoZXJlIGFyZSBhbnkgbGVmdC4KJiM0MzsJICogQWxsIGZyZWV6ZXJzIHNoYXJlIGEgc2luZ2xlIGFjdGl2ZSByZWZlcmVuY2UuIElmIG90aGVyIGZyZWV6ZXJzCiYjNDM7CSAqIHJlbWFpbiwgZHJvcCBvdXIgaG9sZCBhbmQgcmVwb3J0IHN1Y2Nlc3M7IHRoZSBzdXBlcmJsb2NrIHN0YXlzCiYjNDM7CSAqIGZyb3plbiB1bnRpbCB0aGUgbGFzdCBob2xkZXIgdGhhd3MgaXQuCiAJICovCi0JaWYgKGZyZWV6ZV9kZWMoc2IsIHdobykpCiYjNDM7CWlmIChmcmVlemVfZGVjKHNiLCB3aG8pKSB7CiYjNDM7CQllcnJvciA9IDA7CiAJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQpgYGAKClRoZSBidWcgaGVyZSBpcyB0aGF0IGBlcnJvcmAgd2FzIG5vdCBiZWluZyBleHBsaWNpdGx5IHNldCB0byBgMGAgd2hlbiBgZnJlZXplX2RlY2AgcmV0dXJuZWQgYHRydWVgLiBUaGlzIGxpa2VseSBtZWFucyB0aGF0IGEgcHJpb3IgZXJyb3IgdmFsdWUgb3IgYW4gdW5pbml0aWFsaXplZCB2YWx1ZSBtaWdodCBiZSBjYXJyaWVkIGZvcndhcmQsIGluY29ycmVjdGx5IGluZGljYXRpbmcgYSBmYWlsdXJlIHdoZW4sIGluIGZhY3QsIHRoZSByZWxlYXNlIGZyb20gKnRoaXMqIGZyZWV6ZXIgd2FzIHN1Y2Nlc3NmdWwsIGFuZCB0aGUgc3VwZXJibG9jayB3aWxsIHJlbWFpbiBmcm96ZW4gdW50aWwgdGhlIGxhc3Qgb25lIHRoYXdzLiBUaGlzIGZpeCBlbnN1cmVzIHRoYXQgdGhlICYjMzQ7c3VjY2VzcyYjMzQ7IGlzIHJlcG9ydGVkIGNvcnJlY3RseSwgZXZlbiBpZiB0aGUgc3VwZXJibG9jayByZW1haW5zIGZyb3plbi4gVGhpcyBpcyBjcnVjaWFsIGZvciBhdm9pZGluZyBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciBkdXJpbmcgdGhlIHRoYXcgcHJvY2VzcyBhbmQgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IHN0YXRlIG9mIHRoZSBzdXBlcmJsb2NrIGlzIHJlcG9ydGVkIHRvIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgYSBnb29kIGNhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aGF3X3N1cGVyX2xvY2tlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc3VwZXIuYy00NC1cbmZzL3N1cGVyLmM6NDU6c3RhdGljIGludCB0aGF3X3N1cGVyX2xvY2tlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBlbnVtIGZyZWV6ZV9ob2xkZXIgd2hvLFxuZnMvc3VwZXIuYy00Ni1cdFx0XHQgICAgIGNvbnN0IHZvaWQgKmZyZWV6ZV9vd25lcik7XG4tLVxuZnMvc3VwZXIuYz0xMjE5PXN0YXRpYyB2b2lkIGRvX3RoYXdfYWxsX2NhbGxiYWNrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKnVudXNlZClcbi0tXG5mcy9zdXBlci5jLTEyMjktXHRpZiAoc3VwZXJfbG9ja19leGNsKHNiKSlcbmZzL3N1cGVyLmM6MTIzMDpcdFx0dGhhd19zdXBlcl9sb2NrZWQoc2IsIEZSRUVaRV9IT0xERVJfVVNFUlNQQUNFLCBOVUxMKTtcbmZzL3N1cGVyLmMtMTIzMS1cdGRlYWN0aXZhdGVfc3VwZXIoc2IpO1xuLS1cbmZzL3N1cGVyLmM9MjM1Mj1FWFBPUlRfU1lNQk9MKGZyZWV6ZV9zdXBlcik7XG4tLVxuZnMvc3VwZXIuYy0yMzU5LSAqL1xuZnMvc3VwZXIuYzoyMzYwOnN0YXRpYyBpbnQgdGhhd19zdXBlcl9sb2NrZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcbmZzL3N1cGVyLmMtMjM2MS1cdFx0XHQgICAgIGNvbnN0IHZvaWQgKmZyZWV6ZV9vd25lcilcbi0tXG5mcy9zdXBlci5jPTI0MzE9aW50IHRoYXdfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcbi0tXG5mcy9zdXBlci5jLTI0MzctXHR9XG5mcy9zdXBlci5jOjI0Mzg6XHRyZXR1cm4gdGhhd19zdXBlcl9sb2NrZWQoc2IsIHdobywgZnJlZXplX293bmVyKTtcbmZzL3N1cGVyLmMtMjQzOS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBJIHdlcmUgcHJvY2Vzc2luZyB0aG9zZSB0aG91Z2h0czoKCioqRGVlcCBEaXZlIGludG8gYHRoYXdfc3VwZXJfbG9ja2VkYCoqCgpPa2F5LCBzbyBJJiMzOTttIGFib3V0IHRvIGRpZyBpbnRvIHRoZSBgdGhhd19zdXBlcl9sb2NrZWRgIGZ1bmN0aW9uLCB3aGljaCByZXNpZGVzIGluIHRoZSBoZWFydCBvZiB0aGUgZmlsZXN5c3RlbSBvcGVyYXRpb25zIOKAkyBgZnMvc3VwZXIuY2AuIFRoaXMgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byBmaWxlc3lzdGVtIHVuZnJlZXppbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIHN1cGVyYmxvY2sgbG9jay4gVGhlICYjMzQ7bG9ja2VkJiMzNDsgcGFydCBpcyBjcnVjaWFsOyBpdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgbGlrZWx5IHdpdGhpbiBhIGNyaXRpY2FsIHNlY3Rpb24gdGhhdCBuZWVkcyBjYXJlZnVsIHN5bmNocm9uaXphdGlvbiB0byBhdm9pZCBjb3JydXB0aW9uIG9yIGRhdGEgcmFjZXMgZHVyaW5nIGEgZmlsZXN5c3RlbSB1bmZyZWV6ZS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBsb2NrIGFjcXVpc2l0aW9uIGFuZCByZWxlYXNlIHBhdHRlcm5zIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgbG9naWMgdGhhdCBkZWFscyB3aXRoIHN5bmNpbmcgbWV0YWRhdGEsIGVuc3VyaW5nIGNvbnNpc3RlbnQgc3RhdGUgYWNyb3NzIHRoZSBmaWxlc3lzdGVtIGFzIGl0IGNvbWVzIGJhY2sgb25saW5lLCBhbmQgcG9zc2libHkgaGFuZGxpbmcgYW55IHBlbmRpbmcgd3JpdGVzIG9yIG90aGVyIG9wZXJhdGlvbnMgdGhhdCB3ZXJlIGhlbGQgdXAgZHVyaW5nIHRoZSBmcm96ZW4gc3RhdGUuIEl04oCZcyBsaWtlbHkgdGhlcmUgd2lsbCBiZSBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIHRoaXMgcHJvY2VzcywgcG90ZW50aWFsbHkgaW52b2x2aW5nIHRoZSBkZXZpY2UgaXRzZWxmLCBpbm9kZSBvcGVyYXRpb25zLCBhbmQgdGhlIG92ZXJhbGwgc3VwZXIgYmxvY2sgc3RydWN0dXJlLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTt2ZSBoYW5kbGVkIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zIHdpdGhpbiB0aGlzLiBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgdmFyaW91cyBzdGF0ZXMgYSBzdXBlcmJsb2NrIGNhbiBiZSBpbiwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIHRoZSBnbG9iYWwgZmlsZXN5c3RlbSBmcmVlemUvdGhhdyBtZWNoYW5pc21zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgb24gaG93IHRoZXkmIzM5O3JlIG1hbmFnaW5nIGpvdXJuYWxpbmcgb3Igb3RoZXIgY3Jhc2gtcmVjb3ZlcnkgbWVjaGFuaXNtcyBkdXJpbmcgdGhlIHByb2Nlc3MsIGFuZCBtYWtpbmcgc3VyZSBhbGwgdGhlIGkvbyBpcyBwcm9wZXJseSBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3N1cGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzUwOlx0XHRyZXR1cm4gMDtcbjIzNTE6XHR9XG4yMzUyOlx0RVhQT1JUX1NZTUJPTChmcmVlemVfc3VwZXIpO1xuMjM1MzpcdFxuMjM1NDpcdC8qXG4yMzU1Olx0ICogVW5kb2VzIHRoZSBlZmZlY3Qgb2YgYSBmcmVlemVfc3VwZXJfbG9ja2VkIGNhbGwuICBJZiB0aGUgZmlsZXN5c3RlbSBpc1xuMjM1NjpcdCAqIGZyb3plbiBib3RoIGJ5IHVzZXJzcGFjZSBhbmQgdGhlIGtlcm5lbCwgYSB0aGF3IGNhbGwgZnJvbSBlaXRoZXIgc291cmNlXG4yMzU3Olx0ICogcmVtb3ZlcyB0aGF0IHN0YXRlIHdpdGhvdXQgcmVsZWFzaW5nIHRoZSBvdGhlciBzdGF0ZSBvciB1bmxvY2tpbmcgdGhlXG4yMzU4Olx0ICogZmlsZXN5c3RlbS5cbjIzNTk6XHQgKi9cbjIzNjA6XHRzdGF0aWMgaW50IHRoYXdfc3VwZXJfbG9ja2VkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGVudW0gZnJlZXplX2hvbGRlciB3aG8sXG4yMzYxOlx0XHRcdFx0ICAgICBjb25zdCB2b2lkICpmcmVlemVfb3duZXIpXG4yMzYyOlx0e1xuMjM2MzpcdFx0aW50IGVycm9yID0gLUVJTlZBTDtcbjIzNjQ6XHRcbjIzNjU6XHRcdGlmIChzYi1cdTAwM2VzX3dyaXRlcnMuZnJvemVuICE9IFNCX0ZSRUVaRV9DT01QTEVURSlcbjIzNjY6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMjM2NzpcdFxuMjM2ODpcdFx0aWYgKCFtYXlfdW5mcmVlemUoc2IsIHdobywgZnJlZXplX293bmVyKSlcbjIzNjk6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMjM3MDpcdFxuMjM3MTpcdFx0LypcbjIzNzI6XHRcdCAqIEFsbCBmcmVlemVycyBzaGFyZSBhIHNpbmdsZSBhY3RpdmUgcmVmZXJlbmNlLiBJZiBvdGhlciBmcmVlemVyc1xuMjM3MzpcdFx0ICogcmVtYWluLCBkcm9wIG91ciBob2xkIGFuZCByZXBvcnQgc3VjY2VzczsgdGhlIHN1cGVyYmxvY2sgc3RheXNcbjIzNzQ6XHRcdCAqIGZyb3plbiB1bnRpbCB0aGUgbGFzdCBob2xkZXIgdGhhd3MgaXQuXG4yMzc1Olx0XHQgKi9cbjIzNzY6XHRcdGlmIChmcmVlemVfZGVjKHNiLCB3aG8pKSB7XG4yMzc3Olx0XHRcdGVycm9yID0gMDtcbjIzNzg6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMjM3OTpcdFx0fVxuMjM4MDpcdFxuMjM4MTpcdFx0aWYgKHNiX3Jkb25seShzYikpIHtcbjIzODI6XHRcdFx0c2ItXHUwMDNlc193cml0ZXJzLmZyb3plbiA9IFNCX1VORlJPWkVOO1xuMjM4MzpcdFx0XHRzYi1cdTAwM2VzX3dyaXRlcnMuZnJlZXplX293bmVyID0gTlVMTDtcbjIzODQ6XHRcdFx0d2FrZV91cF92YXIoXHUwMDI2c2ItXHUwMDNlc193cml0ZXJzLmZyb3plbik7XG4yMzg1Olx0XHRcdGdvdG8gb3V0X2RlYWN0aXZhdGU7XG4yMzg2Olx0XHR9XG4yMzg3Olx0XG4yMzg4Olx0XHRsb2NrZGVwX3NiX2ZyZWV6ZV9hY3F1aXJlKHNiKTtcbjIzODk6XHRcbjIzOTA6XHRcdGlmIChzYi1cdTAwM2VzX29wLVx1MDAzZXVuZnJlZXplX2ZzKSB7XG4yMzkxOlx0XHRcdGVycm9yID0gc2ItXHUwMDNlc19vcC1cdTAwM2V1bmZyZWV6ZV9mcyhzYik7XG4yMzkyOlx0XHRcdGlmIChlcnJvcikge1xuMjM5MzpcdFx0XHRcdHByX2VycihcJiMzNDtWRlM6IEZpbGVzeXN0ZW0gdGhhdyBmYWlsZWRcXG5cJiMzNDspO1xuMjM5NDpcdFx0XHRcdGZyZWV6ZV9pbmMoc2IsIHdobyk7XG4yMzk1Olx0XHRcdFx0bG9ja2RlcF9zYl9mcmVlemVfcmVsZWFzZShzYik7XG4yMzk2Olx0XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMjM5NzpcdFx0XHR9XG4yMzk4Olx0XHR9XG4yMzk5Olx0XG4yNDAwOlx0XHRzYi1cdTAwM2VzX3dyaXRlcnMuZnJvemVuID0gU0JfVU5GUk9aRU47XG4yNDAxOlx0XHRzYi1cdTAwM2VzX3dyaXRlcnMuZnJlZXplX293bmVyID0gTlVMTDtcbjI0MDI6XHRcdHdha2VfdXBfdmFyKFx1MDAyNnNiLVx1MDAzZXNfd3JpdGVycy5mcm96ZW4pO1xuMjQwMzpcdFx0c2JfZnJlZXplX3VubG9jayhzYiwgU0JfRlJFRVpFX0ZTKTtcbjI0MDQ6XHRvdXRfZGVhY3RpdmF0ZTpcbjI0MDU6XHRcdGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHNiKTtcbjI0MDY6XHRcdHJldHVybiAwO1xuMjQwNzpcdFxuMjQwODpcdG91dF91bmxvY2s6XG4yNDA5Olx0XHRzdXBlcl91bmxvY2tfZXhjbChzYik7XG4yNDEwOlx0XHRyZXR1cm4gZXJyb3I7XG4yNDExOlx0fVxuMjQxMjpcdFxuMjQxMzpcdC8qKlxuMjQxNDpcdCAqIHRoYXdfc3VwZXIgLS0gdW5sb2NrIGZpbGVzeXN0ZW1cbjI0MTU6XHQgKiBAc2I6IHRoZSBzdXBlciB0byB0aGF3XG4yNDE2Olx0ICogQHdobzogY29udGV4dCB0aGF0IHdhbnRzIHRvIGZyZWV6ZVxuMjQxNzpcdCAqIEBmcmVlemVfb3duZXI6IG93bmVyIG9mIHRoZSBmcmVlemVcbjI0MTg6XHQgKlxuMjQxOTpcdCAqIFVubG9ja3MgdGhlIGZpbGVzeXN0ZW0gYW5kIG1hcmtzIGl0IHdyaXRlYWJsZSBhZ2FpbiBhZnRlciBmcmVlemVfc3VwZXIoKVxuMjQyMDpcdCAqIGlmIHRoZXJlIGFyZSBubyByZW1haW5pbmcgZnJlZXplcyBvbiB0aGUgZmlsZXN5c3RlbS5cbjI0MjE6XHQgKlxuMjQyMjpcdCAqIEB3aG8gc2hvdWxkIGJlOlxuMjQyMzpcdCAqICogJUZSRUVaRV9IT0xERVJfVVNFUlNQQUNFIGlmIHVzZXJzcGFjZSB3YW50cyB0byB0aGF3IHRoZSBmcztcbjI0MjQ6XHQgKiAqICVGUkVFWkVfSE9MREVSX0tFUk5FTCBpZiB0aGUga2VybmVsIHdhbnRzIHRvIHRoYXcgdGhlIGZzLlxuMjQyNTpcdCAqICogJUZSRUVaRV9NQVlfTkVTVCB3aGV0aGVyIG5lc3RpbmcgZnJlZXplIGFuZCB0aGF3IHJlcXVlc3RzIGlzIGFsbG93ZWRcbjI0MjY6XHQgKlxuMjQyNzpcdCAqIEEgZmlsZXN5c3RlbSBtYXkgaG9sZCBtdWx0aXBsZSBkZXZpY2VzIGFuZCB0aHVzIGEgZmlsZXN5c3RlbXMgbWF5XG4yNDI4Olx0ICogaGF2ZSBiZWVuIGZyb3plbiB0aHJvdWdoIHRoZSBibG9jayBsYXllciB2aWEgbXVsdGlwbGUgYmxvY2sgZGV2aWNlcy5cbjI0Mjk6XHQgKiBUaGUgZmlsZXN5c3RlbSByZW1haW5zIGZyb3plbiB1bnRpbCBhbGwgYmxvY2sgZGV2aWNlcyBhcmUgdW5mcm96ZW4uXG4yNDMwOlx0ICovXG4yNDMxOlx0aW50IHRoYXdfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcbjI0MzI6XHRcdCAgICAgICBjb25zdCB2b2lkICpmcmVlemVfb3duZXIpXG4yNDMzOlx0e1xuMjQzNDpcdFx0aWYgKCFzdXBlcl9sb2NrX2V4Y2woc2IpKSB7XG4yNDM1Olx0XHRcdFdBUk5fT05DRSgxLCBcJiMzNDtEeWluZyBzdXBlcmJsb2NrIHdoaWxlIHRoYXdpbmchXCYjMzQ7KTtcbjI0MzY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yNDM3Olx0XHR9XG4yNDM4Olx0XHRyZXR1cm4gdGhhd19zdXBlcl9sb2NrZWQoc2IsIHdobywgZnJlZXplX293bmVyKTtcbjI0Mzk6XHR9XG4yNDQwOlx0RVhQT1JUX1NZTUJPTCh0aGF3X3N1cGVyKTtcbjI0NDE6XHRcbjI0NDI6XHQvKlxuMjQ0MzpcdCAqIENyZWF0ZSB3b3JrcXVldWUgZm9yIGRlZmVycmVkIGRpcmVjdCBJTyBjb21wbGV0aW9ucy4gV2UgYWxsb2NhdGUgdGhlXG4yNDQ0Olx0ICogd29ya3F1ZXVlIHdoZW4gaXQmIzM5O3MgZmlyc3QgbmVlZGVkLiBUaGlzIGF2b2lkcyBjcmVhdGluZyB3b3JrcXVldWUgZm9yXG4yNDQ1Olx0ICogZmlsZXN5c3RlbXMgdGhhdCBkb24mIzM5O3QgbmVlZCBpdCBhbmQgYWxzbyBhbGxvd3MgdXMgdG8gY3JlYXRlIHRoZSB3b3JrcXVldWVcbjI0NDY6XHQgKiBsYXRlIGVub3VnaCBzbyB0aGUgd2UgY2FuIGluY2x1ZGUgc19pZCBpbiB0aGUgbmFtZSBvZiB0aGUgd29ya3F1ZXVlLlxuMjQ0NzpcdCAqL1xuMjQ0ODpcdGludCBzYl9pbml0X2Rpb19kb25lX3dxKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4yNDQ5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTU5CgkJCQkJCQlvdXRwdXQ6IDEzNgoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJ1ZyBGaXgqKgoKT2theSwgc28gdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGxvZ2ljIGVycm9yLiBJdCBsb29rcyBsaWtlIGB0aGF3X3N1cGVyX2xvY2tlZGAgaXMgZXJyb25lb3VzbHkgcmV0dXJuaW5nIGAtRUlOVkFMYCB3aGVuIGl0IHNob3VsZCBiZSByZXR1cm5pbmcgYDBgIGluIGEgc3BlY2lmaWMgc2NlbmFyaW8uIFRoZSByb290IGNhdXNlIGFwcGVhcnMgdG8gYmUgdGhlIGhhbmRsaW5nIG9mIGBmcmVlemVfZGVjYCByZXR1cm5pbmcgdHJ1ZS4KCkkgc2VlIHRoYXQgYGVycm9yYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCB0byBgLUVJTlZBTGAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24sIHdoaWNoIGNvbmZpcm1zIG15IGluaXRpYWwgaW50dWl0aW9uIHRoYXQgdGhpcyBpc24mIzM5O3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbS4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gVGhlIHByb2JsZW0gaXNuJiMzOTt0IHJlbGF0ZWQgdG8gbWVtb3J5IGluaXRpYWxpemF0aW9uIG9yIGxhY2sgdGhlcmVvZi4gSXQgaXMgYSBzdHJhaWdodCB1cCBpbmNvcnJlY3QgcmV0dXJuIHZhbHVlIGJlaW5nIHRyaWdnZXJlZCBpbiB0aGUgY29kZSwgd2hpY2ggaXMgZWFzaWx5IGFkZHJlc3NhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgdGhhd19zdXBlcl9sb2NrZWRgIHdoZXJlIHRoZSBmdW5jdGlvbiBpbmNvcnJlY3RseSByZXR1cm5lZCBgLUVJTlZBTGAgaW5zdGVhZCBvZiBgMGAgd2hlbiBgZnJlZXplX2RlY2AgaW5kaWNhdGVkIHRoYXQgb3RoZXIgZnJlZXplcnMgd2VyZSBzdGlsbCBob2xkaW5nIHRoZSBmcmVlemUuIFRoZSBgZXJyb3JgIHZhcmlhYmxlIHdhcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGAtRUlOVkFMYCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uLCBzbyB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnZvbHZlZC4gVGhpcyBpcyBhIHB1cmUgbG9naWMvY29udHJvbC1mbG93IGJ1ZyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB0aGF3X3N1cGVyX2xvY2tlZGAgd2hlcmUgdGhlIGZ1bmN0aW9uIGluY29ycmVjdGx5IHJldHVybmVkIGAtRUlOVkFMYCBpbnN0ZWFkIG9mIGAwYCB3aGVuIGBmcmVlemVfZGVjYCBpbmRpY2F0ZWQgdGhhdCBvdGhlciBmcmVlemVycyB3ZXJlIHN0aWxsIGhvbGRpbmcgdGhlIGZyZWV6ZS4gVGhlIGBlcnJvcmAgdmFyaWFibGUgd2FzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYC1FSU5WQUxgIGF0IHRoZSBzdGFydCBvZiB0aGUgZnVuY3Rpb24sIHNvIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludm9sdmVkLiBUaGlzIGlzIGEgcHVyZSBsb2dpYy9jb250cm9sLWZsb3cgYnVnIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOToyMzoxMi42OTA4NDkwMDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTgxNjYxNDU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aGF3X3N1cGVyXCIsXG4gICAgXCJlbWVyZ2VuY3lfdGhhd19hbGxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB0aGF3X3N1cGVyX2xvY2tlZGAgd2hlcmUgdGhlIGZ1bmN0aW9uIGluY29ycmVjdGx5IHJldHVybmVkIGAtRUlOVkFMYCBpbnN0ZWFkIG9mIGAwYCB3aGVuIGBmcmVlemVfZGVjYCBpbmRpY2F0ZWQgdGhhdCBvdGhlciBmcmVlemVycyB3ZXJlIHN0aWxsIGhvbGRpbmcgdGhlIGZyZWV6ZS4gVGhlIGBlcnJvcmAgdmFyaWFibGUgd2FzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYC1FSU5WQUxgIGF0IHRoZSBzdGFydCBvZiB0aGUgZnVuY3Rpb24sIHNvIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludm9sdmVkLiBUaGlzIGlzIGEgcHVyZSBsb2dpYy9jb250cm9sLWZsb3cgYnVnIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBjb3JlIFZGUyBsYXllciB3aGVyZSBgdGhhd19zdXBlcmAgd291bGQgaW5jb3JyZWN0bHkgcmV0dXJuIGAtRUlOVkFMYCBpbnN0ZWFkIG9mIGAwYCB3aGVuIHRoZXJlIGFyZSBvdGhlciBmcmVlemVycyByZW1haW5pbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MjM6MTIuNjkwODU0OTg2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQyODM0MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhMWM3NDU3ZmM5YmQwMDZkOWJjOTA3MGVlMjM2NDBmOGY4OWM4MGE0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDIxIDA5OjIzOjExIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jXFxuaW5kZXggMDVlNDQzMTczMDM4Ny4uMDFkYjYxMjRlNDA5ZCAxMDA2NDRcXG4tLS0gYS9mcy9zdXBlci5jXFxuKysrIGIvZnMvc3VwZXIuY1xcbkBAIC0yMzY5LDExICsyMzY5LDE0IEBAIHN0YXRpYyBpbnQgdGhhd19zdXBlcl9sb2NrZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogQWxsIGZyZWV6ZXJzIHNoYXJlIGEgc2luZ2xlIGFjdGl2ZSByZWZlcmVuY2UuXFxuLVxcdCAqIFNvIGp1c3QgdW5sb2NrIGluIGNhc2UgdGhlcmUgYXJlIGFueSBsZWZ0LlxcbitcXHQgKiBBbGwgZnJlZXplcnMgc2hhcmUgYSBzaW5nbGUgYWN0aXZlIHJlZmVyZW5jZS4gSWYgb3RoZXIgZnJlZXplcnNcXG4rXFx0ICogcmVtYWluLCBkcm9wIG91ciBob2xkIGFuZCByZXBvcnQgc3VjY2VzczsgdGhlIHN1cGVyYmxvY2sgc3RheXNcXG4rXFx0ICogZnJvemVuIHVudGlsIHRoZSBsYXN0IGhvbGRlciB0aGF3cyBpdC5cXG4gXFx0ICovXFxuLVxcdGlmIChmcmVlemVfZGVjKHNiLCB3aG8pKVxcbitcXHRpZiAoZnJlZXplX2RlYyhzYiwgd2hvKSkge1xcbitcXHRcXHRlcnJvciA9IDA7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKHNiX3Jkb25seShzYikpIHtcXG4gXFx0XFx0c2ItXFx1MDAzZXNfd3JpdGVycy5mcm96ZW4gPSBTQl9VTkZST1pFTjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MjM6MTMuMTc2MTU3MjkxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjY5MzYzNjc5NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGhhd19zdXBlclwiLFxuICAgIFwiZW1lcmdlbmN5X3RoYXdfYWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGNvcmUgVkZTIGxheWVyIHdoZXJlIGB0aGF3X3N1cGVyYCB3b3VsZCBpbmNvcnJlY3RseSByZXR1cm4gYC1FSU5WQUxgIGluc3RlYWQgb2YgYDBgIHdoZW4gdGhlcmUgYXJlIG90aGVyIGZyZWV6ZXJzIHJlbWFpbmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMWM3NDU3ZmM5YmQwMDZkOWJjOTA3MGVlMjM2NDBmOGY4OWM4MGE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMDk6MjM6MTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xuaW5kZXggMDVlNDQzMTczMDM4Ny4uMDFkYjYxMjRlNDA5ZCAxMDA2NDRcbi0tLSBhL2ZzL3N1cGVyLmNcbisrKyBiL2ZzL3N1cGVyLmNcbkBAIC0yMzY5LDExICsyMzY5LDE0IEBAIHN0YXRpYyBpbnQgdGhhd19zdXBlcl9sb2NrZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuIFx0Lypcbi1cdCAqIEFsbCBmcmVlemVycyBzaGFyZSBhIHNpbmdsZSBhY3RpdmUgcmVmZXJlbmNlLlxuLVx0ICogU28ganVzdCB1bmxvY2sgaW4gY2FzZSB0aGVyZSBhcmUgYW55IGxlZnQuXG4rXHQgKiBBbGwgZnJlZXplcnMgc2hhcmUgYSBzaW5nbGUgYWN0aXZlIHJlZmVyZW5jZS4gSWYgb3RoZXIgZnJlZXplcnNcbitcdCAqIHJlbWFpbiwgZHJvcCBvdXIgaG9sZCBhbmQgcmVwb3J0IHN1Y2Nlc3M7IHRoZSBzdXBlcmJsb2NrIHN0YXlzXG4rXHQgKiBmcm96ZW4gdW50aWwgdGhlIGxhc3QgaG9sZGVyIHRoYXdzIGl0LlxuIFx0ICovXG4tXHRpZiAoZnJlZXplX2RlYyhzYiwgd2hvKSlcbitcdGlmIChmcmVlemVfZGVjKHNiLCB3aG8pKSB7XG4rXHRcdGVycm9yID0gMDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0fVxuIFxuIFx0aWYgKHNiX3Jkb25seShzYikpIHtcbiBcdFx0c2ItXHUwMDNlc193cml0ZXJzLmZyb3plbiA9IFNCX1VORlJPWkVOO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MjM6MTMuMTc2MTU5MTYxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM4OTQ5MzMyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBWRlMgU3VwZXJibG9jayBUaGF3aW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGZzL3N1cGVyLmNgLiBJdCdzIGZvY3VzZWQgb24gYHRoYXdfc3VwZXJfbG9ja2VkYCwgd2hpY2ggaXMgcmlnaHQgd2hlcmUgSSdkIGV4cGVjdCB0byBzZWUgY2hhbmdlcyByZWxhdGVkIHRvIGZyZWV6ZXIgaW50ZXJhY3Rpb25zLiBUaGUga2V5IGNoYW5nZSBpcyB0aGlzIHNuaXBwZXQ6XG5cbmBgYGNcbiBcdC8qXG4tXHQgKiBBbGwgZnJlZXplcnMgc2hhcmUgYSBzaW5nbGUgYWN0aXZlIHJlZmVyZW5jZS5cbi1cdCAqIFNvIGp1c3QgdW5sb2NrIGluIGNhc2UgdGhlcmUgYXJlIGFueSBsZWZ0LlxuK1x0ICogQWxsIGZyZWV6ZXJzIHNoYXJlIGEgc2luZ2xlIGFjdGl2ZSByZWZlcmVuY2UuIElmIG90aGVyIGZyZWV6ZXJzXG4rXHQgKiByZW1haW4sIGRyb3Agb3VyIGhvbGQgYW5kIHJlcG9ydCBzdWNjZXNzOyB0aGUgc3VwZXJibG9jayBzdGF5c1xuK1x0ICogZnJvemVuIHVudGlsIHRoZSBsYXN0IGhvbGRlciB0aGF3cyBpdC5cbiBcdCAqL1xuLVx0aWYgKGZyZWV6ZV9kZWMoc2IsIHdobykpXG4rXHRpZiAoZnJlZXplX2RlYyhzYiwgd2hvKSkge1xuK1x0XHRlcnJvciA9IDA7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbmBgYFxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBpcyBhZGRyZXNzaW5nIGFuIGVkZ2UgY2FzZSBpbiB0aGUgZnJlZXplciBsb2dpYy4gUHJldmlvdXNseSwgaXQgbG9va2VkIGxpa2UgaXQgd2FzIHNpbXBseSB1bmxvY2tpbmcgdGhlIHN1cGVyYmxvY2sgaWYgdGhlcmUgd2VyZSBhbnkgcmVtYWluaW5nIGZyZWV6ZXJzLiBOb3csIGl0IGV4cGxpY2l0bHkgY2hlY2tzIGlmIGBmcmVlemVfZGVjYCByZXR1cm5zIHRydWUgKG1lYW5pbmcgdGhlcmUgYXJlIHN0aWxsIG90aGVyIGZyZWV6ZXJzIGFjdGl2ZSksIGFuZCBpZiBzbywgaXQgKmV4cGxpY2l0bHkqIHNldHMgYGVycm9yYCB0byAwIGJlZm9yZSBleGl0aW5nLiBUaGlzIGlzIGltcG9ydGFudDogaXQncyBub3Qgc2ltcGx5IGxlYXZpbmcgYGVycm9yYCB1bmluaXRpYWxpemVkIG9yIHBvc3NpYmx5IHNldCB0byBhIHByZXZpb3VzIGluY29ycmVjdCB2YWx1ZSwgaXQncyBlbnN1cmluZyBhIHN1Y2Nlc3MgcmV0dXJuIHdoZW4gYW5vdGhlciBmcmVlemVyIGhvbGRzIHRoZSBsb2NrLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgYnVnIGZpeCByZWxhdGVkIHRvIGVycm9yIGhhbmRsaW5nIGluIHRoaXMgc2NlbmFyaW8uIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgZXJyb3IgcmVwb3J0aW5nIG9yIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGlmIG11bHRpcGxlIGZyZWV6ZXJzIHdlcmUgaW52b2x2ZWQuIFRoZSBmaXggZW5zdXJlcyBhIG1vcmUgY29uc2lzdGVudCBhbmQgY29ycmVjdCBzdGF0ZSBtYW5hZ2VtZW50LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYHRoYXdfc3VwZXJfbG9ja2VkYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDYyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MjM6MTguNTY1NjU1NDc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDQwMjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRoYXdfc3VwZXJfbG9ja2VkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3N1cGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvc3VwZXIuYy00NC1cXG5mcy9zdXBlci5jOjQ1OnN0YXRpYyBpbnQgdGhhd19zdXBlcl9sb2NrZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcXG5mcy9zdXBlci5jLTQ2LVxcdFxcdFxcdCAgICAgY29uc3Qgdm9pZCAqZnJlZXplX293bmVyKTtcXG4tLVxcbmZzL3N1cGVyLmM9MTIxOT1zdGF0aWMgdm9pZCBkb190aGF3X2FsbF9jYWxsYmFjayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICp1bnVzZWQpXFxuLS1cXG5mcy9zdXBlci5jLTEyMjktXFx0aWYgKHN1cGVyX2xvY2tfZXhjbChzYikpXFxuZnMvc3VwZXIuYzoxMjMwOlxcdFxcdHRoYXdfc3VwZXJfbG9ja2VkKHNiLCBGUkVFWkVfSE9MREVSX1VTRVJTUEFDRSwgTlVMTCk7XFxuZnMvc3VwZXIuYy0xMjMxLVxcdGRlYWN0aXZhdGVfc3VwZXIoc2IpO1xcbi0tXFxuZnMvc3VwZXIuYz0yMzUyPUVYUE9SVF9TWU1CT0woZnJlZXplX3N1cGVyKTtcXG4tLVxcbmZzL3N1cGVyLmMtMjM1OS0gKi9cXG5mcy9zdXBlci5jOjIzNjA6c3RhdGljIGludCB0aGF3X3N1cGVyX2xvY2tlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBlbnVtIGZyZWV6ZV9ob2xkZXIgd2hvLFxcbmZzL3N1cGVyLmMtMjM2MS1cXHRcXHRcXHQgICAgIGNvbnN0IHZvaWQgKmZyZWV6ZV9vd25lcilcXG4tLVxcbmZzL3N1cGVyLmM9MjQzMT1pbnQgdGhhd19zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBlbnVtIGZyZWV6ZV9ob2xkZXIgd2hvLFxcbi0tXFxuZnMvc3VwZXIuYy0yNDM3LVxcdH1cXG5mcy9zdXBlci5jOjI0Mzg6XFx0cmV0dXJuIHRoYXdfc3VwZXJfbG9ja2VkKHNiLCB3aG8sIGZyZWV6ZV9vd25lcik7XFxuZnMvc3VwZXIuYy0yNDM5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MjM6MTguNjE0NzAyMjI0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyMzI0ODM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgYHRoYXdfc3VwZXJfbG9ja2VkYCBmdW5jdGlvbiBpbiBgZnMvc3VwZXIuY2A6XG5cbioqRGVlcCBEaXZlIGludG8gYHRoYXdfc3VwZXJfbG9ja2VkYCoqXG5cbk9rYXksIGxldCdzIGdldCBpbnRvIHRoZSB3ZWVkcyBvZiBgdGhhd19zdXBlcl9sb2NrZWRgLiBJJ20gZ3Vlc3NpbmcgdGhpcyBoYXMgdG8gZG8gd2l0aCBicmluZ2luZyBhIHN1cGVyYmxvY2sgYmFjayB0byBhIHVzYWJsZSBzdGF0ZSwgcG9zc2libHkgYWZ0ZXIgc29tZSBzb3J0IG9mIHF1aWVzY2luZyBvciBzdXNwZW5zaW9uLiBUaGUgXCJsb2NrZWRcIiBwYXJ0IGlzIGtleTsgaXQgaW1wbGllcyBzb21lIGNyaXRpY2FsIHNlY3Rpb24gcHJvdGVjdGlvbiBpcyBpbnZvbHZlZCwgd2hpY2ggbWFrZXMgbWUgdGhpbmsgdGhpcyBpcyB3aGVyZSByYWNlIGNvbmRpdGlvbnMgYXJlIG1hbmFnZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBiZWluZyB0aGF3ZWQgYW5kIHdoeS4gSXMgaXQgdGhlIGVudGlyZSBmaWxlc3lzdGVtLCBvciBqdXN0IHBhcnRzIG9mIGl0PyBJcyBpdCBhYm91dCBkYXRhIGNvbnNpc3RlbmN5LCBqb3VybmFsIHJlY292ZXJ5LCBvciByZXNvdXJjZSBhbGxvY2F0aW9uPyBJJ20gYW50aWNpcGF0aW5nIGludGVyYWN0aW9ucyB3aXRoIHRoZSBibG9jayBsYXllciwgaW5vZGUgbWFuYWdlbWVudCwgYW5kIG1heWJlIGV2ZW4gdGhlIFZGUyBsYXllci4gSSdsbCBiZSBsb29raW5nIGZvciBtdXRleGVzLCBzcGlubG9ja3MsIGFuZCBhdG9taWMgb3BlcmF0aW9ucy4gSSdtIGFscmVhZHkgbWVudGFsbHkgcHJlcGFyaW5nIHRvIHRyYWNlIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIGZpbGVzeXN0ZW0gc3RhdGUgbWFjaGluZS4gU3BlY2lmaWNhbGx5LCBJJ20gZXhwZWN0aW5nIHRvIGxvb2sgZm9yIHRoaW5ncyBsaWtlOiBob3cgdGhlIHN1cGVyYmxvY2sgaXMgZmxhZ2dlZCwgaG93IHJlc291cmNlcyBhcmUgcmVsZWFzZWQsIG9yIGhvdyBkYXRhIHN0cnVjdHVyZXMgYXJlIHVwZGF0ZWQuIFRoaXMgY291bGQgYmUgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCBvbiBoYW5kbGluZyBwZXJzaXN0ZW50IGRhdGEgYWZ0ZXIgYW4gdXBkYXRlIG9yIHN5c3RlbSBwYXVzZS4gSSBuZWVkIHRvIGJlIHByZXBhcmVkIHRvIHNlZSBzb21lIGludHJpY2F0ZSBzeW5jaHJvbml6YXRpb24gbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwODMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOToyMzoyMi42Mzc5NTM2M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzNTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzUwOlxcdFxcdHJldHVybiAwO1xcbjIzNTE6XFx0fVxcbjIzNTI6XFx0RVhQT1JUX1NZTUJPTChmcmVlemVfc3VwZXIpO1xcbjIzNTM6XFx0XFxuMjM1NDpcXHQvKlxcbjIzNTU6XFx0ICogVW5kb2VzIHRoZSBlZmZlY3Qgb2YgYSBmcmVlemVfc3VwZXJfbG9ja2VkIGNhbGwuICBJZiB0aGUgZmlsZXN5c3RlbSBpc1xcbjIzNTY6XFx0ICogZnJvemVuIGJvdGggYnkgdXNlcnNwYWNlIGFuZCB0aGUga2VybmVsLCBhIHRoYXcgY2FsbCBmcm9tIGVpdGhlciBzb3VyY2VcXG4yMzU3OlxcdCAqIHJlbW92ZXMgdGhhdCBzdGF0ZSB3aXRob3V0IHJlbGVhc2luZyB0aGUgb3RoZXIgc3RhdGUgb3IgdW5sb2NraW5nIHRoZVxcbjIzNTg6XFx0ICogZmlsZXN5c3RlbS5cXG4yMzU5OlxcdCAqL1xcbjIzNjA6XFx0c3RhdGljIGludCB0aGF3X3N1cGVyX2xvY2tlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBlbnVtIGZyZWV6ZV9ob2xkZXIgd2hvLFxcbjIzNjE6XFx0XFx0XFx0XFx0ICAgICBjb25zdCB2b2lkICpmcmVlemVfb3duZXIpXFxuMjM2MjpcXHR7XFxuMjM2MzpcXHRcXHRpbnQgZXJyb3IgPSAtRUlOVkFMO1xcbjIzNjQ6XFx0XFxuMjM2NTpcXHRcXHRpZiAoc2ItXFx1MDAzZXNfd3JpdGVycy5mcm96ZW4gIT0gU0JfRlJFRVpFX0NPTVBMRVRFKVxcbjIzNjY6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjIzNjc6XFx0XFxuMjM2ODpcXHRcXHRpZiAoIW1heV91bmZyZWV6ZShzYiwgd2hvLCBmcmVlemVfb3duZXIpKVxcbjIzNjk6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjIzNzA6XFx0XFxuMjM3MTpcXHRcXHQvKlxcbjIzNzI6XFx0XFx0ICogQWxsIGZyZWV6ZXJzIHNoYXJlIGEgc2luZ2xlIGFjdGl2ZSByZWZlcmVuY2UuIElmIG90aGVyIGZyZWV6ZXJzXFxuMjM3MzpcXHRcXHQgKiByZW1haW4sIGRyb3Agb3VyIGhvbGQgYW5kIHJlcG9ydCBzdWNjZXNzOyB0aGUgc3VwZXJibG9jayBzdGF5c1xcbjIzNzQ6XFx0XFx0ICogZnJvemVuIHVudGlsIHRoZSBsYXN0IGhvbGRlciB0aGF3cyBpdC5cXG4yMzc1OlxcdFxcdCAqL1xcbjIzNzY6XFx0XFx0aWYgKGZyZWV6ZV9kZWMoc2IsIHdobykpIHtcXG4yMzc3OlxcdFxcdFxcdGVycm9yID0gMDtcXG4yMzc4OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4yMzc5OlxcdFxcdH1cXG4yMzgwOlxcdFxcbjIzODE6XFx0XFx0aWYgKHNiX3Jkb25seShzYikpIHtcXG4yMzgyOlxcdFxcdFxcdHNiLVxcdTAwM2VzX3dyaXRlcnMuZnJvemVuID0gU0JfVU5GUk9aRU47XFxuMjM4MzpcXHRcXHRcXHRzYi1cXHUwMDNlc193cml0ZXJzLmZyZWV6ZV9vd25lciA9IE5VTEw7XFxuMjM4NDpcXHRcXHRcXHR3YWtlX3VwX3ZhcihcXHUwMDI2c2ItXFx1MDAzZXNfd3JpdGVycy5mcm96ZW4pO1xcbjIzODU6XFx0XFx0XFx0Z290byBvdXRfZGVhY3RpdmF0ZTtcXG4yMzg2OlxcdFxcdH1cXG4yMzg3OlxcdFxcbjIzODg6XFx0XFx0bG9ja2RlcF9zYl9mcmVlemVfYWNxdWlyZShzYik7XFxuMjM4OTpcXHRcXG4yMzkwOlxcdFxcdGlmIChzYi1cXHUwMDNlc19vcC1cXHUwMDNldW5mcmVlemVfZnMpIHtcXG4yMzkxOlxcdFxcdFxcdGVycm9yID0gc2ItXFx1MDAzZXNfb3AtXFx1MDAzZXVuZnJlZXplX2ZzKHNiKTtcXG4yMzkyOlxcdFxcdFxcdGlmIChlcnJvcikge1xcbjIzOTM6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJWRlM6IEZpbGVzeXN0ZW0gdGhhdyBmYWlsZWRcXFxcblxcXCIpO1xcbjIzOTQ6XFx0XFx0XFx0XFx0ZnJlZXplX2luYyhzYiwgd2hvKTtcXG4yMzk1OlxcdFxcdFxcdFxcdGxvY2tkZXBfc2JfZnJlZXplX3JlbGVhc2Uoc2IpO1xcbjIzOTY6XFx0XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjIzOTc6XFx0XFx0XFx0fVxcbjIzOTg6XFx0XFx0fVxcbjIzOTk6XFx0XFxuMjQwMDpcXHRcXHRzYi1cXHUwMDNlc193cml0ZXJzLmZyb3plbiA9IFNCX1VORlJPWkVOO1xcbjI0MDE6XFx0XFx0c2ItXFx1MDAzZXNfd3JpdGVycy5mcmVlemVfb3duZXIgPSBOVUxMO1xcbjI0MDI6XFx0XFx0d2FrZV91cF92YXIoXFx1MDAyNnNiLVxcdTAwM2VzX3dyaXRlcnMuZnJvemVuKTtcXG4yNDAzOlxcdFxcdHNiX2ZyZWV6ZV91bmxvY2soc2IsIFNCX0ZSRUVaRV9GUyk7XFxuMjQwNDpcXHRvdXRfZGVhY3RpdmF0ZTpcXG4yNDA1OlxcdFxcdGRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHNiKTtcXG4yNDA2OlxcdFxcdHJldHVybiAwO1xcbjI0MDc6XFx0XFxuMjQwODpcXHRvdXRfdW5sb2NrOlxcbjI0MDk6XFx0XFx0c3VwZXJfdW5sb2NrX2V4Y2woc2IpO1xcbjI0MTA6XFx0XFx0cmV0dXJuIGVycm9yO1xcbjI0MTE6XFx0fVxcbjI0MTI6XFx0XFxuMjQxMzpcXHQvKipcXG4yNDE0OlxcdCAqIHRoYXdfc3VwZXIgLS0gdW5sb2NrIGZpbGVzeXN0ZW1cXG4yNDE1OlxcdCAqIEBzYjogdGhlIHN1cGVyIHRvIHRoYXdcXG4yNDE2OlxcdCAqIEB3aG86IGNvbnRleHQgdGhhdCB3YW50cyB0byBmcmVlemVcXG4yNDE3OlxcdCAqIEBmcmVlemVfb3duZXI6IG93bmVyIG9mIHRoZSBmcmVlemVcXG4yNDE4OlxcdCAqXFxuMjQxOTpcXHQgKiBVbmxvY2tzIHRoZSBmaWxlc3lzdGVtIGFuZCBtYXJrcyBpdCB3cml0ZWFibGUgYWdhaW4gYWZ0ZXIgZnJlZXplX3N1cGVyKClcXG4yNDIwOlxcdCAqIGlmIHRoZXJlIGFyZSBubyByZW1haW5pbmcgZnJlZXplcyBvbiB0aGUgZmlsZXN5c3RlbS5cXG4yNDIxOlxcdCAqXFxuMjQyMjpcXHQgKiBAd2hvIHNob3VsZCBiZTpcXG4yNDIzOlxcdCAqICogJUZSRUVaRV9IT0xERVJfVVNFUlNQQUNFIGlmIHVzZXJzcGFjZSB3YW50cyB0byB0aGF3IHRoZSBmcztcXG4yNDI0OlxcdCAqICogJUZSRUVaRV9IT0xERVJfS0VSTkVMIGlmIHRoZSBrZXJuZWwgd2FudHMgdG8gdGhhdyB0aGUgZnMuXFxuMjQyNTpcXHQgKiAqICVGUkVFWkVfTUFZX05FU1Qgd2hldGhlciBuZXN0aW5nIGZyZWV6ZSBhbmQgdGhhdyByZXF1ZXN0cyBpcyBhbGxvd2VkXFxuMjQyNjpcXHQgKlxcbjI0Mjc6XFx0ICogQSBmaWxlc3lzdGVtIG1heSBob2xkIG11bHRpcGxlIGRldmljZXMgYW5kIHRodXMgYSBmaWxlc3lzdGVtcyBtYXlcXG4yNDI4OlxcdCAqIGhhdmUgYmVlbiBmcm96ZW4gdGhyb3VnaCB0aGUgYmxvY2sgbGF5ZXIgdmlhIG11bHRpcGxlIGJsb2NrIGRldmljZXMuXFxuMjQyOTpcXHQgKiBUaGUgZmlsZXN5c3RlbSByZW1haW5zIGZyb3plbiB1bnRpbCBhbGwgYmxvY2sgZGV2aWNlcyBhcmUgdW5mcm96ZW4uXFxuMjQzMDpcXHQgKi9cXG4yNDMxOlxcdGludCB0aGF3X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGVudW0gZnJlZXplX2hvbGRlciB3aG8sXFxuMjQzMjpcXHRcXHQgICAgICAgY29uc3Qgdm9pZCAqZnJlZXplX293bmVyKVxcbjI0MzM6XFx0e1xcbjI0MzQ6XFx0XFx0aWYgKCFzdXBlcl9sb2NrX2V4Y2woc2IpKSB7XFxuMjQzNTpcXHRcXHRcXHRXQVJOX09OQ0UoMSwgXFxcIkR5aW5nIHN1cGVyYmxvY2sgd2hpbGUgdGhhd2luZyFcXFwiKTtcXG4yNDM2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI0Mzc6XFx0XFx0fVxcbjI0Mzg6XFx0XFx0cmV0dXJuIHRoYXdfc3VwZXJfbG9ja2VkKHNiLCB3aG8sIGZyZWV6ZV9vd25lcik7XFxuMjQzOTpcXHR9XFxuMjQ0MDpcXHRFWFBPUlRfU1lNQk9MKHRoYXdfc3VwZXIpO1xcbjI0NDE6XFx0XFxuMjQ0MjpcXHQvKlxcbjI0NDM6XFx0ICogQ3JlYXRlIHdvcmtxdWV1ZSBmb3IgZGVmZXJyZWQgZGlyZWN0IElPIGNvbXBsZXRpb25zLiBXZSBhbGxvY2F0ZSB0aGVcXG4yNDQ0OlxcdCAqIHdvcmtxdWV1ZSB3aGVuIGl0J3MgZmlyc3QgbmVlZGVkLiBUaGlzIGF2b2lkcyBjcmVhdGluZyB3b3JrcXVldWUgZm9yXFxuMjQ0NTpcXHQgKiBmaWxlc3lzdGVtcyB0aGF0IGRvbid0IG5lZWQgaXQgYW5kIGFsc28gYWxsb3dzIHVzIHRvIGNyZWF0ZSB0aGUgd29ya3F1ZXVlXFxuMjQ0NjpcXHQgKiBsYXRlIGVub3VnaCBzbyB0aGUgd2UgY2FuIGluY2x1ZGUgc19pZCBpbiB0aGUgbmFtZSBvZiB0aGUgd29ya3F1ZXVlLlxcbjI0NDc6XFx0ICovXFxuMjQ0ODpcXHRpbnQgc2JfaW5pdF9kaW9fZG9uZV93cShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbjI0NDk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOToyMzoyMi42MzgxMDE4N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNDg5MTA2NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVkZTIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBidWcgaW4gYHRoYXdfc3VwZXJfbG9ja2VkYC4gQXBwYXJlbnRseSwgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgaXNuJ3QgY29ycmVjdCB3aGVuIGBmcmVlemVfZGVjYCByZXR1cm5zIHRydWUg4oCTIGl0J3MgcmV0dXJuaW5nIGAtRUlOVkFMYCBpbnN0ZWFkIG9mIGAwYC4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgY29yZSBWRlMgbGF5ZXIuIERlZmluaXRlbHkgd29ydGggYSBmdXp6aW5nIHJ1bi4gTXkgaW1tZWRpYXRlIGZvY3VzIHN5bWJvbHMgd2lsbCBiZSBgdGhhd19zdXBlcl9sb2NrZWRgIGFuZCBgdGhhd19zdXBlcmAuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBObywgc2luY2UgdGhpcyBpcyBpbiBjb3JlIFZGUywgdGhlcmUgc2hvdWxkbid0IGJlIGFueXRoaW5nIHNwZWNpZmljLiBcblxuSG1tLCB3YWl0IGEgbWludXRlLi4uIGB0aGF3X3N1cGVyX2xvY2tlZGAgaXMgc3RhdGljLiBUaGF0IG1lYW5zIGB0aGF3X3N1cGVyYCBpcyB0aGUgZXhwb3J0ZWQgc3ltYm9sLCBub3QgdGhlIGxvY2tlZCB2ZXJzaW9uLiBSaWdodCwgYWRkaW5nIGB0aGF3X3N1cGVyYCB0byBGb2N1c1N5bWJvbHMsIGFuZCByZW1vdmluZyBgdGhhd19zdXBlcl9sb2NrZWRgIGZyb20gdGhlIGxpc3QuXG5cbk5vdywgSSBzaG91bGQgcXVpY2tseSBjaGVjayBmb3Igb3RoZXIgZXhwb3J0ZWQgc3ltYm9scyB0aGF0IG1pZ2h0IGNhbGwgYHRoYXdfc3VwZXJfbG9ja2VkYC4gTGV0J3Mgc2VlLi4uIEFoLCBgZG9fdGhhd19hbGxfY2FsbGJhY2tgIGRvZXMuIEkgc2hvdWxkIGNoZWNrIHRoYXQgb25lIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkwOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA5OjIzOjI3Ljk4NzAxNDYxNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjcwNzQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb190aGF3X2FsbF9jYWxsYmFja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9zdXBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3N1cGVyLmM9MTIwOD1zdGF0aWMgaW5saW5lIGJvb2wgZ2V0X2FjdGl2ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvc3VwZXIuYy0xMjE4LVxcbmZzL3N1cGVyLmM6MTIxOTpzdGF0aWMgdm9pZCBkb190aGF3X2FsbF9jYWxsYmFjayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICp1bnVzZWQpXFxuZnMvc3VwZXIuYy0xMjIwLXtcXG4tLVxcbmZzL3N1cGVyLmM9MTIzND1zdGF0aWMgdm9pZCBkb190aGF3X2FsbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZnMvc3VwZXIuYy0xMjM1LXtcXG5mcy9zdXBlci5jOjEyMzY6XFx0X19pdGVyYXRlX3N1cGVycyhkb190aGF3X2FsbF9jYWxsYmFjaywgTlVMTCwgU1VQRVJfSVRFUl9VTkxPQ0tFRCk7XFxuZnMvc3VwZXIuYy0xMjM3LVxcdGtmcmVlKHdvcmspO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOToyMzoyOC4wMzM3MjcwNTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIwNDQxMTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGFpbWluZyBmb3IgYSBmdWxzb21lIHJlbmRlcmluZzpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBFbWVyZ2VuY3kgVGhhdyBDYWxsIFBhdGhzKipcblxuQWxyaWdodCwgSSdtIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvZGViYXNlJ3MgdGhhd2luZyBtZWNoYW5pc21zLCBzcGVjaWZpY2FsbHkgaG93IHRoZXkgcmVsYXRlIHRvIHBvdGVudGlhbCBlbWVyZ2VuY3kgc2NlbmFyaW9zLiBUaGUgdGhvdWdodCB0aGF0J3MgY3VycmVudGx5IG5hZ2dpbmcgYXQgbWUgaXMgdGhpczogYGRvX3RoYXdfYWxsYC4gV2hlcmUgZXhhY3RseSBpcyB0aGF0IGNhbGxlZCBmcm9tPyBJJ20gcHJldHR5IHN1cmUgSSd2ZSBzZWVuIGl0IG1lbnRpb25lZCBpbiB0aGUgY29udGV4dCBvZiBhbiBcImVtZXJnZW5jeSB0aGF3XCIgcHJvY2VkdXJlLCBwZXJoYXBzIHRyaWdnZXJlZCBieSB0aGUgYGVtZXJnZW5jeV90aGF3X2JkZXZgIGZ1bmN0aW9uLCBvciBzb21ldGhpbmcgc2ltaWxhci4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgbGluayBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGNhbGxpbmcgYGRvX3RoYXdfYWxsYCBmcm9tIGFueSBlbWVyZ2VuY3kgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGVzZSByZWxhdGlvbnNoaXBzIGlzIGNyaXRpY2FsIGZvciBlbnN1cmluZyBvdXIgc3lzdGVtcyBjYW4gcmVjb3ZlciBncmFjZWZ1bGx5IGZyb20gdW51c3VhbCBjb25kaXRpb25zLiBBcmUgdGhlcmUgb3RoZXIgZW50cnkgcG9pbnRzIHRoYXQgSSBhbSBtaXNzaW5nPyBJdCBpcyBpbXBvcnRhbnQgdGhhdCBJIGdldCB0aGUgY29tcGxldGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU5NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA5OjIzOjMxLjQ1NDE3MjIyOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzNDQ3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fdGhhd19hbGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zdXBlci5jPTEyMDg9c3RhdGljIGlubGluZSBib29sIGdldF9hY3RpdmVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL3N1cGVyLmMtMTIxOC1cXG5mcy9zdXBlci5jOjEyMTk6c3RhdGljIHZvaWQgZG9fdGhhd19hbGxfY2FsbGJhY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqdW51c2VkKVxcbmZzL3N1cGVyLmMtMTIyMC17XFxuLS1cXG5mcy9zdXBlci5jLTEyMzMtXFxuZnMvc3VwZXIuYzoxMjM0OnN0YXRpYyB2b2lkIGRvX3RoYXdfYWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5mcy9zdXBlci5jLTEyMzUte1xcbmZzL3N1cGVyLmM6MTIzNjpcXHRfX2l0ZXJhdGVfc3VwZXJzKGRvX3RoYXdfYWxsX2NhbGxiYWNrLCBOVUxMLCBTVVBFUl9JVEVSX1VOTE9DS0VEKTtcXG5mcy9zdXBlci5jLTEyMzctXFx0a2ZyZWUod29yayk7XFxuLS1cXG5mcy9zdXBlci5jPTEyNDY9dm9pZCBlbWVyZ2VuY3lfdGhhd19hbGwodm9pZClcXG4tLVxcbmZzL3N1cGVyLmMtMTI1MS1cXHRpZiAod29yaykge1xcbmZzL3N1cGVyLmM6MTI1MjpcXHRcXHRJTklUX1dPUksod29yaywgZG9fdGhhd19hbGwpO1xcbmZzL3N1cGVyLmMtMTI1My1cXHRcXHRzY2hlZHVsZV93b3JrKHdvcmspO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOToyMzozMS41MDI1MjI2ODhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk3MTQ0OTI2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbW1lZGlhdGUgUGxhbioqXG5cbk9rYXksIHNvIEkgc2VlIGB0aGF3X3N1cGVyYCBhbmQgYGVtZXJnZW5jeV90aGF3X2FsbGAgYXJlIHRoZSB0d28gbWFpbiBlbnRyeSBwb2ludHMgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4gVGhhdCBtYWtlcyB0aGluZ3Mgc3RyYWlnaHRmb3J3YXJkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYWRkIHRoZW0gdG8gYEZvY3VzU3ltYm9sc2AgaW1tZWRpYXRlbHk7IHRoYXQncyB0aGUgbmF0dXJhbCBwbGFjZSBmb3IgdGhvc2Uga2luZHMgb2YgZW50cnkgcG9pbnRzLlxuXG5Ob3csIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIGFueXRoaW5nIGVsc2UsIGl0J3Mgd29ydGggdGFraW5nIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgYW55dGhpbmcgZWxzZSBpcyBjYWxsaW5nIGB0aGF3X3N1cGVyX2xvY2tlZGAuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nIHRoYXQgbWlnaHQgZGVwZW5kIG9uIHRoYXQgZnVuY3Rpb24uIEl0J3MgYSBxdWljayBjaGVjayB0byBlbGltaW5hdGUgYW55IHN1cnByaXNlcyBkb3duIHRoZSBsaW5lLCBhbmQgbWFrZSBzdXJlIEkgZG9uJ3QgY2F1c2UgYW55IHJlZ3Jlc3Npb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTUyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MjM6MzUuNDczOTc1MDU2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTYwMTYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aGF3X3N1cGVyX2xvY2tlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9zdXBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3N1cGVyLmMtNDQtXFxuZnMvc3VwZXIuYzo0NTpzdGF0aWMgaW50IHRoYXdfc3VwZXJfbG9ja2VkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGVudW0gZnJlZXplX2hvbGRlciB3aG8sXFxuZnMvc3VwZXIuYy00Ni1cXHRcXHRcXHQgICAgIGNvbnN0IHZvaWQgKmZyZWV6ZV9vd25lcik7XFxuLS1cXG5mcy9zdXBlci5jPTEyMTk9c3RhdGljIHZvaWQgZG9fdGhhd19hbGxfY2FsbGJhY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqdW51c2VkKVxcbi0tXFxuZnMvc3VwZXIuYy0xMjI5LVxcdGlmIChzdXBlcl9sb2NrX2V4Y2woc2IpKVxcbmZzL3N1cGVyLmM6MTIzMDpcXHRcXHR0aGF3X3N1cGVyX2xvY2tlZChzYiwgRlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsIE5VTEwpO1xcbmZzL3N1cGVyLmMtMTIzMS1cXHRkZWFjdGl2YXRlX3N1cGVyKHNiKTtcXG4tLVxcbmZzL3N1cGVyLmM9MjM1Mj1FWFBPUlRfU1lNQk9MKGZyZWV6ZV9zdXBlcik7XFxuLS1cXG5mcy9zdXBlci5jLTIzNTktICovXFxuZnMvc3VwZXIuYzoyMzYwOnN0YXRpYyBpbnQgdGhhd19zdXBlcl9sb2NrZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcXG5mcy9zdXBlci5jLTIzNjEtXFx0XFx0XFx0ICAgICBjb25zdCB2b2lkICpmcmVlemVfb3duZXIpXFxuLS1cXG5mcy9zdXBlci5jPTI0MzE9aW50IHRoYXdfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcXG4tLVxcbmZzL3N1cGVyLmMtMjQzNy1cXHR9XFxuZnMvc3VwZXIuYzoyNDM4OlxcdHJldHVybiB0aGF3X3N1cGVyX2xvY2tlZChzYiwgd2hvLCBmcmVlemVfb3duZXIpO1xcbmZzL3N1cGVyLmMtMjQzOS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA5OjIzOjM1LjUxOTU4MzA1NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTkyOTA5ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGhlcmUgYXJlIGNsZWFybHkgYHRoYXdfc3VwZXJgIGFuZCBgZW1lcmdlbmN5X3RoYXdfYWxsYC4gVGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgZnVuY3Rpb25hbCBidWcgaW4gdGhlIGNvcmUgVkZTIGxheWVyOyBzcGVjaWZpY2FsbHksIGB0aGF3X3N1cGVyYCB3YXMgaW1wcm9wZXJseSByZXR1cm5pbmcgYC1FSU5WQUxgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucyDigJMgd2hlbiB0aGVyZSBhcmUgb3RoZXIgZnJlZXplcnMgcHJlc2VudCDigJMgd2hlbiBpdCBzaG91bGQgaGF2ZSByZXR1cm5lZCBgMGAuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQsIGZ1bmN0aW9uYWwgY29ycmVjdGlvbiwgbWVhbmluZyBpdCBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHJlYWNoYWJsZSBrZXJuZWwgY29kZS4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiB0aGUgcG90ZW50aWFsIGltcGFjdC4gSSdsbCBtYWtlIHN1cmUgdG8gZm9jdXMgb24gYHRoYXdfc3VwZXJgIGFuZCBgZW1lcmdlbmN5X3RoYXdfYWxsYCBkdXJpbmcgdGVzdGluZy4gTm8gc3BlY2lmaWMgY29uZmlnIGNoYW5nZXMgYXJlIGluZGljYXRlZCwgd2hpY2ggaXMgZ29vZC4gVGhlIHJlYXNvbmluZyBpcyBzb3VuZCwgaXQgc3VjY2luY3RseSBpZGVudGlmaWVzIHRoZSBwcm9ibGVtIGFuZCBpdHMgbG9jYXRpb24gaW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NjMsIk91dHB1dFRva2VucyI6OTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MjM6NDAuMTEyNDk1Mzc0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aGF3X3N1cGVyXCIsXG4gICAgXCJlbWVyZ2VuY3lfdGhhd19hbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgY29yZSBWRlMgbGF5ZXIgd2hlcmUgYHRoYXdfc3VwZXJgIHdvdWxkIGluY29ycmVjdGx5IHJldHVybiBgLUVJTlZBTGAgaW5zdGVhZCBvZiBgMGAgd2hlbiB0aGVyZSBhcmUgb3RoZXIgZnJlZXplcnMgcmVtYWluaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGhhd19zdXBlclwiLFxuICAgIFwiZW1lcmdlbmN5X3RoYXdfYWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGNvcmUgVkZTIGxheWVyIHdoZXJlIGB0aGF3X3N1cGVyYCB3b3VsZCBpbmNvcnJlY3RseSByZXR1cm4gYC1FSU5WQUxgIGluc3RlYWQgb2YgYDBgIHdoZW4gdGhlcmUgYXJlIG90aGVyIGZyZWV6ZXJzIHJlbWFpbmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOToyMzo0MC4xMTI1Mjc0NDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Mzk0OTI1MDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MjM6NDAuMTEyOTcyNTgzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0Mzk0NDc0MTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgdGhhd19zdXBlcl9sb2NrZWRgIHdoZXJlIHRoZSBmdW5jdGlvbiBpbmNvcnJlY3RseSByZXR1cm5lZCBgLUVJTlZBTGAgaW5zdGVhZCBvZiBgMGAgd2hlbiBgZnJlZXplX2RlY2AgaW5kaWNhdGVkIHRoYXQgb3RoZXIgZnJlZXplcnMgd2VyZSBzdGlsbCBob2xkaW5nIHRoZSBmcmVlemUuIFRoZSBgZXJyb3JgIHZhcmlhYmxlIHdhcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGAtRUlOVkFMYCBhdCB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uLCBzbyB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnZvbHZlZC4gVGhpcyBpcyBhIHB1cmUgbG9naWMvY29udHJvbC1mbG93IGJ1ZyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMWM3NDU3ZmM5YmQwMDZkOWJjOTA3MGVlMjM2NDBmOGY4OWM4MGE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMDk6MjM6MTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xuaW5kZXggMDVlNDQzMTczMDM4Ny4uMDFkYjYxMjRlNDA5ZCAxMDA2NDRcbi0tLSBhL2ZzL3N1cGVyLmNcbisrKyBiL2ZzL3N1cGVyLmNcbkBAIC0yMzY5LDExICsyMzY5LDE0IEBAIHN0YXRpYyBpbnQgdGhhd19zdXBlcl9sb2NrZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuIFx0Lypcbi1cdCAqIEFsbCBmcmVlemVycyBzaGFyZSBhIHNpbmdsZSBhY3RpdmUgcmVmZXJlbmNlLlxuLVx0ICogU28ganVzdCB1bmxvY2sgaW4gY2FzZSB0aGVyZSBhcmUgYW55IGxlZnQuXG4rXHQgKiBBbGwgZnJlZXplcnMgc2hhcmUgYSBzaW5nbGUgYWN0aXZlIHJlZmVyZW5jZS4gSWYgb3RoZXIgZnJlZXplcnNcbitcdCAqIHJlbWFpbiwgZHJvcCBvdXIgaG9sZCBhbmQgcmVwb3J0IHN1Y2Nlc3M7IHRoZSBzdXBlcmJsb2NrIHN0YXlzXG4rXHQgKiBmcm96ZW4gdW50aWwgdGhlIGxhc3QgaG9sZGVyIHRoYXdzIGl0LlxuIFx0ICovXG4tXHRpZiAoZnJlZXplX2RlYyhzYiwgd2hvKSlcbitcdGlmIChmcmVlemVfZGVjKHNiLCB3aG8pKSB7XG4rXHRcdGVycm9yID0gMDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0fVxuIFxuIFx0aWYgKHNiX3Jkb25seShzYikpIHtcbiBcdFx0c2ItXHUwMDNlc193cml0ZXJzLmZyb3plbiA9IFNCX1VORlJPWkVOO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6MjM6NDAuMTEyOTczNzU0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NTIzMzk2ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTdXBlcmJsb2NrIFRoYXcgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBmcy9zdXBlci5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHRoYXdfc3VwZXJfbG9ja2VkYCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB3ZSBoYXZlIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgbG9naWMgYnVnIGZpeCByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgdGhlIGBmcmVlemVfZGVjYCBjYWxsLiBQcmV2aW91c2x5LCB0aGUgY29kZSBhc3N1bWVkIHRoYXQgaWYgYGZyZWV6ZV9kZWNgIHJldHVybmVkIHRydWUsIGl0IGF1dG9tYXRpY2FsbHkgbWVhbnQgdGhlIHRoYXcgd2FzIGZ1bGx5IHN1Y2Nlc3NmdWwuIEhvd2V2ZXIsIHRoYXQncyBub3QgcXVpdGUgcmlnaHQuIFRydWUgZnJvbSBgZnJlZXplX2RlY2Agc2ltcGx5IG1lYW5zICp0aGlzKiBmcmVlemVyIGhhcyByZWxlYXNlZCBpdHMgaG9sZCwgYnV0IG90aGVyIGZyZWV6ZXJzIG1pZ2h0ICpzdGlsbCogYmUgYWN0aXZlbHkgZnJlZXppbmcgdGhlIHN1cGVyYmxvY2suXG5cblRoZSBvcmlnaW5hbCBjb2RlIHNuaXBwZXQgd2FzOlxuXG5gYGBjXG4gXHQvKlxuLVx0ICogQWxsIGZyZWV6ZXJzIHNoYXJlIGEgc2luZ2xlIGFjdGl2ZSByZWZlcmVuY2UuXG4tXHQgKiBTbyBqdXN0IHVubG9jayBpbiBjYXNlIHRoZXJlIGFyZSBhbnkgbGVmdC5cbitcdCAqIEFsbCBmcmVlemVycyBzaGFyZSBhIHNpbmdsZSBhY3RpdmUgcmVmZXJlbmNlLiBJZiBvdGhlciBmcmVlemVyc1xuK1x0ICogcmVtYWluLCBkcm9wIG91ciBob2xkIGFuZCByZXBvcnQgc3VjY2VzczsgdGhlIHN1cGVyYmxvY2sgc3RheXNcbitcdCAqIGZyb3plbiB1bnRpbCB0aGUgbGFzdCBob2xkZXIgdGhhd3MgaXQuXG4gXHQgKi9cbi1cdGlmIChmcmVlemVfZGVjKHNiLCB3aG8pKVxuK1x0aWYgKGZyZWV6ZV9kZWMoc2IsIHdobykpIHtcbitcdFx0ZXJyb3IgPSAwO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG5gYGBcblxuVGhlIGJ1ZyBoZXJlIGlzIHRoYXQgYGVycm9yYCB3YXMgbm90IGJlaW5nIGV4cGxpY2l0bHkgc2V0IHRvIGAwYCB3aGVuIGBmcmVlemVfZGVjYCByZXR1cm5lZCBgdHJ1ZWAuIFRoaXMgbGlrZWx5IG1lYW5zIHRoYXQgYSBwcmlvciBlcnJvciB2YWx1ZSBvciBhbiB1bmluaXRpYWxpemVkIHZhbHVlIG1pZ2h0IGJlIGNhcnJpZWQgZm9yd2FyZCwgaW5jb3JyZWN0bHkgaW5kaWNhdGluZyBhIGZhaWx1cmUgd2hlbiwgaW4gZmFjdCwgdGhlIHJlbGVhc2UgZnJvbSAqdGhpcyogZnJlZXplciB3YXMgc3VjY2Vzc2Z1bCwgYW5kIHRoZSBzdXBlcmJsb2NrIHdpbGwgcmVtYWluIGZyb3plbiB1bnRpbCB0aGUgbGFzdCBvbmUgdGhhd3MuIFRoaXMgZml4IGVuc3VyZXMgdGhhdCB0aGUgXCJzdWNjZXNzXCIgaXMgcmVwb3J0ZWQgY29ycmVjdGx5LCBldmVuIGlmIHRoZSBzdXBlcmJsb2NrIHJlbWFpbnMgZnJvemVuLiBUaGlzIGlzIGNydWNpYWwgZm9yIGF2b2lkaW5nIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yIGR1cmluZyB0aGUgdGhhdyBwcm9jZXNzIGFuZCB0byBlbnN1cmUgdGhlIGNvcnJlY3Qgc3RhdGUgb2YgdGhlIHN1cGVyYmxvY2sgaXMgcmVwb3J0ZWQgdG8gdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbC4gVGhpcyBpcyBhIGdvb2QgY2F0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOToyMzo0NS41NjUzMTY4MzZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NTY5NjM2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aGF3X3N1cGVyX2xvY2tlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9zdXBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3N1cGVyLmMtNDQtXFxuZnMvc3VwZXIuYzo0NTpzdGF0aWMgaW50IHRoYXdfc3VwZXJfbG9ja2VkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGVudW0gZnJlZXplX2hvbGRlciB3aG8sXFxuZnMvc3VwZXIuYy00Ni1cXHRcXHRcXHQgICAgIGNvbnN0IHZvaWQgKmZyZWV6ZV9vd25lcik7XFxuLS1cXG5mcy9zdXBlci5jPTEyMTk9c3RhdGljIHZvaWQgZG9fdGhhd19hbGxfY2FsbGJhY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqdW51c2VkKVxcbi0tXFxuZnMvc3VwZXIuYy0xMjI5LVxcdGlmIChzdXBlcl9sb2NrX2V4Y2woc2IpKVxcbmZzL3N1cGVyLmM6MTIzMDpcXHRcXHR0aGF3X3N1cGVyX2xvY2tlZChzYiwgRlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UsIE5VTEwpO1xcbmZzL3N1cGVyLmMtMTIzMS1cXHRkZWFjdGl2YXRlX3N1cGVyKHNiKTtcXG4tLVxcbmZzL3N1cGVyLmM9MjM1Mj1FWFBPUlRfU1lNQk9MKGZyZWV6ZV9zdXBlcik7XFxuLS1cXG5mcy9zdXBlci5jLTIzNTktICovXFxuZnMvc3VwZXIuYzoyMzYwOnN0YXRpYyBpbnQgdGhhd19zdXBlcl9sb2NrZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcXG5mcy9zdXBlci5jLTIzNjEtXFx0XFx0XFx0ICAgICBjb25zdCB2b2lkICpmcmVlemVfb3duZXIpXFxuLS1cXG5mcy9zdXBlci5jPTI0MzE9aW50IHRoYXdfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcXG4tLVxcbmZzL3N1cGVyLmMtMjQzNy1cXHR9XFxuZnMvc3VwZXIuYzoyNDM4OlxcdHJldHVybiB0aGF3X3N1cGVyX2xvY2tlZChzYiwgd2hvLCBmcmVlemVfb3duZXIpO1xcbmZzL3N1cGVyLmMtMjQzOS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA5OjIzOjQ1LjgzMTAxODgxOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzU5ODEyNzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgSSB3ZXJlIHByb2Nlc3NpbmcgdGhvc2UgdGhvdWdodHM6XG5cbioqRGVlcCBEaXZlIGludG8gYHRoYXdfc3VwZXJfbG9ja2VkYCoqXG5cbk9rYXksIHNvIEknbSBhYm91dCB0byBkaWcgaW50byB0aGUgYHRoYXdfc3VwZXJfbG9ja2VkYCBmdW5jdGlvbiwgd2hpY2ggcmVzaWRlcyBpbiB0aGUgaGVhcnQgb2YgdGhlIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyDigJMgYGZzL3N1cGVyLmNgLiBUaGlzIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byBmaWxlc3lzdGVtIHVuZnJlZXppbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIHN1cGVyYmxvY2sgbG9jay4gVGhlIFwibG9ja2VkXCIgcGFydCBpcyBjcnVjaWFsOyBpdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBsaWtlbHkgd2l0aGluIGEgY3JpdGljYWwgc2VjdGlvbiB0aGF0IG5lZWRzIGNhcmVmdWwgc3luY2hyb25pemF0aW9uIHRvIGF2b2lkIGNvcnJ1cHRpb24gb3IgZGF0YSByYWNlcyBkdXJpbmcgYSBmaWxlc3lzdGVtIHVuZnJlZXplLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbG9jayBhY3F1aXNpdGlvbiBhbmQgcmVsZWFzZSBwYXR0ZXJucyB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gSSdtIGV4cGVjdGluZyB0byBzZWUgbG9naWMgdGhhdCBkZWFscyB3aXRoIHN5bmNpbmcgbWV0YWRhdGEsIGVuc3VyaW5nIGNvbnNpc3RlbnQgc3RhdGUgYWNyb3NzIHRoZSBmaWxlc3lzdGVtIGFzIGl0IGNvbWVzIGJhY2sgb25saW5lLCBhbmQgcG9zc2libHkgaGFuZGxpbmcgYW55IHBlbmRpbmcgd3JpdGVzIG9yIG90aGVyIG9wZXJhdGlvbnMgdGhhdCB3ZXJlIGhlbGQgdXAgZHVyaW5nIHRoZSBmcm96ZW4gc3RhdGUuIEl04oCZcyBsaWtlbHkgdGhlcmUgd2lsbCBiZSBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGluIHRoaXMgcHJvY2VzcywgcG90ZW50aWFsbHkgaW52b2x2aW5nIHRoZSBkZXZpY2UgaXRzZWxmLCBpbm9kZSBvcGVyYXRpb25zLCBhbmQgdGhlIG92ZXJhbGwgc3VwZXIgYmxvY2sgc3RydWN0dXJlLiBMZXQncyBzZWUgaG93IHRoZXkndmUgaGFuZGxlZCBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyB3aXRoaW4gdGhpcy4gSSBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIHZhcmlvdXMgc3RhdGVzIGEgc3VwZXJibG9jayBjYW4gYmUgaW4sIHBhcnRpY3VsYXJseSBpbiByZWxhdGlvbiB0byB0aGUgZ2xvYmFsIGZpbGVzeXN0ZW0gZnJlZXplL3RoYXcgbWVjaGFuaXNtcy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgb24gaG93IHRoZXkncmUgbWFuYWdpbmcgam91cm5hbGluZyBvciBvdGhlciBjcmFzaC1yZWNvdmVyeSBtZWNoYW5pc21zIGR1cmluZyB0aGUgcHJvY2VzcywgYW5kIG1ha2luZyBzdXJlIGFsbCB0aGUgaS9vIGlzIHByb3Blcmx5IGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwOTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOToyMzo1MC4xOTA4MzU2NzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3N1cGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM1MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIzNTA6XFx0XFx0cmV0dXJuIDA7XFxuMjM1MTpcXHR9XFxuMjM1MjpcXHRFWFBPUlRfU1lNQk9MKGZyZWV6ZV9zdXBlcik7XFxuMjM1MzpcXHRcXG4yMzU0OlxcdC8qXFxuMjM1NTpcXHQgKiBVbmRvZXMgdGhlIGVmZmVjdCBvZiBhIGZyZWV6ZV9zdXBlcl9sb2NrZWQgY2FsbC4gIElmIHRoZSBmaWxlc3lzdGVtIGlzXFxuMjM1NjpcXHQgKiBmcm96ZW4gYm90aCBieSB1c2Vyc3BhY2UgYW5kIHRoZSBrZXJuZWwsIGEgdGhhdyBjYWxsIGZyb20gZWl0aGVyIHNvdXJjZVxcbjIzNTc6XFx0ICogcmVtb3ZlcyB0aGF0IHN0YXRlIHdpdGhvdXQgcmVsZWFzaW5nIHRoZSBvdGhlciBzdGF0ZSBvciB1bmxvY2tpbmcgdGhlXFxuMjM1ODpcXHQgKiBmaWxlc3lzdGVtLlxcbjIzNTk6XFx0ICovXFxuMjM2MDpcXHRzdGF0aWMgaW50IHRoYXdfc3VwZXJfbG9ja2VkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGVudW0gZnJlZXplX2hvbGRlciB3aG8sXFxuMjM2MTpcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHZvaWQgKmZyZWV6ZV9vd25lcilcXG4yMzYyOlxcdHtcXG4yMzYzOlxcdFxcdGludCBlcnJvciA9IC1FSU5WQUw7XFxuMjM2NDpcXHRcXG4yMzY1OlxcdFxcdGlmIChzYi1cXHUwMDNlc193cml0ZXJzLmZyb3plbiAhPSBTQl9GUkVFWkVfQ09NUExFVEUpXFxuMjM2NjpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMjM2NzpcXHRcXG4yMzY4OlxcdFxcdGlmICghbWF5X3VuZnJlZXplKHNiLCB3aG8sIGZyZWV6ZV9vd25lcikpXFxuMjM2OTpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMjM3MDpcXHRcXG4yMzcxOlxcdFxcdC8qXFxuMjM3MjpcXHRcXHQgKiBBbGwgZnJlZXplcnMgc2hhcmUgYSBzaW5nbGUgYWN0aXZlIHJlZmVyZW5jZS4gSWYgb3RoZXIgZnJlZXplcnNcXG4yMzczOlxcdFxcdCAqIHJlbWFpbiwgZHJvcCBvdXIgaG9sZCBhbmQgcmVwb3J0IHN1Y2Nlc3M7IHRoZSBzdXBlcmJsb2NrIHN0YXlzXFxuMjM3NDpcXHRcXHQgKiBmcm96ZW4gdW50aWwgdGhlIGxhc3QgaG9sZGVyIHRoYXdzIGl0LlxcbjIzNzU6XFx0XFx0ICovXFxuMjM3NjpcXHRcXHRpZiAoZnJlZXplX2RlYyhzYiwgd2hvKSkge1xcbjIzNzc6XFx0XFx0XFx0ZXJyb3IgPSAwO1xcbjIzNzg6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjIzNzk6XFx0XFx0fVxcbjIzODA6XFx0XFxuMjM4MTpcXHRcXHRpZiAoc2JfcmRvbmx5KHNiKSkge1xcbjIzODI6XFx0XFx0XFx0c2ItXFx1MDAzZXNfd3JpdGVycy5mcm96ZW4gPSBTQl9VTkZST1pFTjtcXG4yMzgzOlxcdFxcdFxcdHNiLVxcdTAwM2VzX3dyaXRlcnMuZnJlZXplX293bmVyID0gTlVMTDtcXG4yMzg0OlxcdFxcdFxcdHdha2VfdXBfdmFyKFxcdTAwMjZzYi1cXHUwMDNlc193cml0ZXJzLmZyb3plbik7XFxuMjM4NTpcXHRcXHRcXHRnb3RvIG91dF9kZWFjdGl2YXRlO1xcbjIzODY6XFx0XFx0fVxcbjIzODc6XFx0XFxuMjM4ODpcXHRcXHRsb2NrZGVwX3NiX2ZyZWV6ZV9hY3F1aXJlKHNiKTtcXG4yMzg5OlxcdFxcbjIzOTA6XFx0XFx0aWYgKHNiLVxcdTAwM2VzX29wLVxcdTAwM2V1bmZyZWV6ZV9mcykge1xcbjIzOTE6XFx0XFx0XFx0ZXJyb3IgPSBzYi1cXHUwMDNlc19vcC1cXHUwMDNldW5mcmVlemVfZnMoc2IpO1xcbjIzOTI6XFx0XFx0XFx0aWYgKGVycm9yKSB7XFxuMjM5MzpcXHRcXHRcXHRcXHRwcl9lcnIoXFxcIlZGUzogRmlsZXN5c3RlbSB0aGF3IGZhaWxlZFxcXFxuXFxcIik7XFxuMjM5NDpcXHRcXHRcXHRcXHRmcmVlemVfaW5jKHNiLCB3aG8pO1xcbjIzOTU6XFx0XFx0XFx0XFx0bG9ja2RlcF9zYl9mcmVlemVfcmVsZWFzZShzYik7XFxuMjM5NjpcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMjM5NzpcXHRcXHRcXHR9XFxuMjM5ODpcXHRcXHR9XFxuMjM5OTpcXHRcXG4yNDAwOlxcdFxcdHNiLVxcdTAwM2VzX3dyaXRlcnMuZnJvemVuID0gU0JfVU5GUk9aRU47XFxuMjQwMTpcXHRcXHRzYi1cXHUwMDNlc193cml0ZXJzLmZyZWV6ZV9vd25lciA9IE5VTEw7XFxuMjQwMjpcXHRcXHR3YWtlX3VwX3ZhcihcXHUwMDI2c2ItXFx1MDAzZXNfd3JpdGVycy5mcm96ZW4pO1xcbjI0MDM6XFx0XFx0c2JfZnJlZXplX3VubG9jayhzYiwgU0JfRlJFRVpFX0ZTKTtcXG4yNDA0OlxcdG91dF9kZWFjdGl2YXRlOlxcbjI0MDU6XFx0XFx0ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIoc2IpO1xcbjI0MDY6XFx0XFx0cmV0dXJuIDA7XFxuMjQwNzpcXHRcXG4yNDA4OlxcdG91dF91bmxvY2s6XFxuMjQwOTpcXHRcXHRzdXBlcl91bmxvY2tfZXhjbChzYik7XFxuMjQxMDpcXHRcXHRyZXR1cm4gZXJyb3I7XFxuMjQxMTpcXHR9XFxuMjQxMjpcXHRcXG4yNDEzOlxcdC8qKlxcbjI0MTQ6XFx0ICogdGhhd19zdXBlciAtLSB1bmxvY2sgZmlsZXN5c3RlbVxcbjI0MTU6XFx0ICogQHNiOiB0aGUgc3VwZXIgdG8gdGhhd1xcbjI0MTY6XFx0ICogQHdobzogY29udGV4dCB0aGF0IHdhbnRzIHRvIGZyZWV6ZVxcbjI0MTc6XFx0ICogQGZyZWV6ZV9vd25lcjogb3duZXIgb2YgdGhlIGZyZWV6ZVxcbjI0MTg6XFx0ICpcXG4yNDE5OlxcdCAqIFVubG9ja3MgdGhlIGZpbGVzeXN0ZW0gYW5kIG1hcmtzIGl0IHdyaXRlYWJsZSBhZ2FpbiBhZnRlciBmcmVlemVfc3VwZXIoKVxcbjI0MjA6XFx0ICogaWYgdGhlcmUgYXJlIG5vIHJlbWFpbmluZyBmcmVlemVzIG9uIHRoZSBmaWxlc3lzdGVtLlxcbjI0MjE6XFx0ICpcXG4yNDIyOlxcdCAqIEB3aG8gc2hvdWxkIGJlOlxcbjI0MjM6XFx0ICogKiAlRlJFRVpFX0hPTERFUl9VU0VSU1BBQ0UgaWYgdXNlcnNwYWNlIHdhbnRzIHRvIHRoYXcgdGhlIGZzO1xcbjI0MjQ6XFx0ICogKiAlRlJFRVpFX0hPTERFUl9LRVJORUwgaWYgdGhlIGtlcm5lbCB3YW50cyB0byB0aGF3IHRoZSBmcy5cXG4yNDI1OlxcdCAqICogJUZSRUVaRV9NQVlfTkVTVCB3aGV0aGVyIG5lc3RpbmcgZnJlZXplIGFuZCB0aGF3IHJlcXVlc3RzIGlzIGFsbG93ZWRcXG4yNDI2OlxcdCAqXFxuMjQyNzpcXHQgKiBBIGZpbGVzeXN0ZW0gbWF5IGhvbGQgbXVsdGlwbGUgZGV2aWNlcyBhbmQgdGh1cyBhIGZpbGVzeXN0ZW1zIG1heVxcbjI0Mjg6XFx0ICogaGF2ZSBiZWVuIGZyb3plbiB0aHJvdWdoIHRoZSBibG9jayBsYXllciB2aWEgbXVsdGlwbGUgYmxvY2sgZGV2aWNlcy5cXG4yNDI5OlxcdCAqIFRoZSBmaWxlc3lzdGVtIHJlbWFpbnMgZnJvemVuIHVudGlsIGFsbCBibG9jayBkZXZpY2VzIGFyZSB1bmZyb3plbi5cXG4yNDMwOlxcdCAqL1xcbjI0MzE6XFx0aW50IHRoYXdfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZW51bSBmcmVlemVfaG9sZGVyIHdobyxcXG4yNDMyOlxcdFxcdCAgICAgICBjb25zdCB2b2lkICpmcmVlemVfb3duZXIpXFxuMjQzMzpcXHR7XFxuMjQzNDpcXHRcXHRpZiAoIXN1cGVyX2xvY2tfZXhjbChzYikpIHtcXG4yNDM1OlxcdFxcdFxcdFdBUk5fT05DRSgxLCBcXFwiRHlpbmcgc3VwZXJibG9jayB3aGlsZSB0aGF3aW5nIVxcXCIpO1xcbjI0MzY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjQzNzpcXHRcXHR9XFxuMjQzODpcXHRcXHRyZXR1cm4gdGhhd19zdXBlcl9sb2NrZWQoc2IsIHdobywgZnJlZXplX293bmVyKTtcXG4yNDM5OlxcdH1cXG4yNDQwOlxcdEVYUE9SVF9TWU1CT0wodGhhd19zdXBlcik7XFxuMjQ0MTpcXHRcXG4yNDQyOlxcdC8qXFxuMjQ0MzpcXHQgKiBDcmVhdGUgd29ya3F1ZXVlIGZvciBkZWZlcnJlZCBkaXJlY3QgSU8gY29tcGxldGlvbnMuIFdlIGFsbG9jYXRlIHRoZVxcbjI0NDQ6XFx0ICogd29ya3F1ZXVlIHdoZW4gaXQncyBmaXJzdCBuZWVkZWQuIFRoaXMgYXZvaWRzIGNyZWF0aW5nIHdvcmtxdWV1ZSBmb3JcXG4yNDQ1OlxcdCAqIGZpbGVzeXN0ZW1zIHRoYXQgZG9uJ3QgbmVlZCBpdCBhbmQgYWxzbyBhbGxvd3MgdXMgdG8gY3JlYXRlIHRoZSB3b3JrcXVldWVcXG4yNDQ2OlxcdCAqIGxhdGUgZW5vdWdoIHNvIHRoZSB3ZSBjYW4gaW5jbHVkZSBzX2lkIGluIHRoZSBuYW1lIG9mIHRoZSB3b3JrcXVldWUuXFxuMjQ0NzpcXHQgKi9cXG4yNDQ4OlxcdGludCBzYl9pbml0X2Rpb19kb25lX3dxKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuMjQ0OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA5OjIzOjUwLjE5MTAyNTYwNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE2Mzk1MjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgbG9naWMgZXJyb3IuIEl0IGxvb2tzIGxpa2UgYHRoYXdfc3VwZXJfbG9ja2VkYCBpcyBlcnJvbmVvdXNseSByZXR1cm5pbmcgYC1FSU5WQUxgIHdoZW4gaXQgc2hvdWxkIGJlIHJldHVybmluZyBgMGAgaW4gYSBzcGVjaWZpYyBzY2VuYXJpby4gVGhlIHJvb3QgY2F1c2UgYXBwZWFycyB0byBiZSB0aGUgaGFuZGxpbmcgb2YgYGZyZWV6ZV9kZWNgIHJldHVybmluZyB0cnVlLlxuXG5JIHNlZSB0aGF0IGBlcnJvcmAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdG8gYC1FSU5WQUxgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uLCB3aGljaCBjb25maXJtcyBteSBpbml0aWFsIGludHVpdGlvbiB0aGF0IHRoaXMgaXNuJ3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbS4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgcHJvYmxlbSBpc24ndCByZWxhdGVkIHRvIG1lbW9yeSBpbml0aWFsaXphdGlvbiBvciBsYWNrIHRoZXJlb2YuIEl0IGlzIGEgc3RyYWlnaHQgdXAgaW5jb3JyZWN0IHJldHVybiB2YWx1ZSBiZWluZyB0cmlnZ2VyZWQgaW4gdGhlIGNvZGUsIHdoaWNoIGlzIGVhc2lseSBhZGRyZXNzYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk1OSwiT3V0cHV0VG9rZW5zIjoxMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA5OjIzOjU0LjUwNzQyNTM0MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYHRoYXdfc3VwZXJfbG9ja2VkYCB3aGVyZSB0aGUgZnVuY3Rpb24gaW5jb3JyZWN0bHkgcmV0dXJuZWQgYC1FSU5WQUxgIGluc3RlYWQgb2YgYDBgIHdoZW4gYGZyZWV6ZV9kZWNgIGluZGljYXRlZCB0aGF0IG90aGVyIGZyZWV6ZXJzIHdlcmUgc3RpbGwgaG9sZGluZyB0aGUgZnJlZXplLiBUaGUgYGVycm9yYCB2YXJpYWJsZSB3YXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgLUVJTlZBTGAgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbiwgc28gdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW52b2x2ZWQuIFRoaXMgaXMgYSBwdXJlIGxvZ2ljL2NvbnRyb2wtZmxvdyBidWcgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYHRoYXdfc3VwZXJfbG9ja2VkYCB3aGVyZSB0aGUgZnVuY3Rpb24gaW5jb3JyZWN0bHkgcmV0dXJuZWQgYC1FSU5WQUxgIGluc3RlYWQgb2YgYDBgIHdoZW4gYGZyZWV6ZV9kZWNgIGluZGljYXRlZCB0aGF0IG90aGVyIGZyZWV6ZXJzIHdlcmUgc3RpbGwgaG9sZGluZyB0aGUgZnJlZXplLiBUaGUgYGVycm9yYCB2YXJpYWJsZSB3YXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgLUVJTlZBTGAgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbiwgc28gdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW52b2x2ZWQuIFRoaXMgaXMgYSBwdXJlIGxvZ2ljL2NvbnRyb2wtZmxvdyBidWcgYW5kIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowbswqq[1] Phase: Succeeded StartedAt: 2026-08-21 09:24:06 +0000 UTC FinishedAt: 2026-08-21 09:24:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbswqq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-21 09:24:06 +0000 UTC FinishedAt: 2026-08-21 09:24:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbswqq[2] Phase: Succeeded StartedAt: 2026-08-21 09:24:06 +0000 UTC FinishedAt: 2026-08-21 13:08:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-21 09:24:06 +0000 UTC FinishedAt: 2026-08-21 13:08:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-21 09:24:06 +0000 UTC FinishedAt: 2026-08-21 09:24:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-21 09:24:06 +0000 UTC FinishedAt: 2026-08-21 09:24:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbswqq/series-workflowbswqq-convert-artifact-3577253617/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-21 09:24:16 +0000 UTC FinishedAt: 2026-08-21 09:40:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-21 09:24:16 +0000 UTC FinishedAt: 2026-08-21 09:40: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:*789d67cb-79fa-4ee6-b16b-50b0c86756be,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-workflowbswqq/series-workflowbswqq-convert-artifact-3577253617/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": "793ef380-9acb-4b90-b5db-c7ffe7e944bb", "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-workflowbswqq/series-workflowbswqq-build-action-27478303/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-21 09:24:16 +0000 UTC FinishedAt: 2026-08-21 09:40: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:*789d67cb-79fa-4ee6-b16b-50b0c86756be,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-workflowbswqq/series-workflowbswqq-convert-artifact-3577253617/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": "793ef380-9acb-4b90-b5db-c7ffe7e944bb", "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-workflowbswqq/series-workflowbswqq-build-action-27478303/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-21 09:40:38 +0000 UTC FinishedAt: 2026-08-21 09:40:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-21 09:40:38 +0000 UTC FinishedAt: 2026-08-21 09:40:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-21 09:40:38 +0000 UTC FinishedAt: 2026-08-21 09:40:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-21 09:40:38 +0000 UTC FinishedAt: 2026-08-21 09:40:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbswqq/series-workflowbswqq-convert-artifact-3458339140/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-21 09:40:48 +0000 UTC FinishedAt: 2026-08-21 09:42:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-21 09:40:48 +0000 UTC FinishedAt: 2026-08-21 09:42:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*793ef380-9acb-4b90-b5db-c7ffe7e944bb,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-workflowbswqq/series-workflowbswqq-build-action-27478303/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-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-21 09:42:52 +0000 UTC FinishedAt: 2026-08-21 09:42:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-21 09:42:52 +0000 UTC FinishedAt: 2026-08-21 09:42:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-21 09:42:52 +0000 UTC FinishedAt: 2026-08-21 10:03:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-21 09:42:52 +0000 UTC FinishedAt: 2026-08-21 10:03:13 +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:*789d67cb-79fa-4ee6-b16b-50b0c86756be,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-workflowbswqq/series-workflowbswqq-convert-artifact-3458339140/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": "3c28c1f4-2753-4add-9835-871da479a9b8", "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-workflowbswqq/series-workflowbswqq-build-action-1033386320/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-21 09:42:52 +0000 UTC FinishedAt: 2026-08-21 10:03:03 +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:*789d67cb-79fa-4ee6-b16b-50b0c86756be,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-workflowbswqq/series-workflowbswqq-convert-artifact-3458339140/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": "3c28c1f4-2753-4add-9835-871da479a9b8", "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-workflowbswqq/series-workflowbswqq-build-action-1033386320/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-21 10:03:13 +0000 UTC FinishedAt: 2026-08-21 10:03:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-21 10:03:13 +0000 UTC FinishedAt: 2026-08-21 10:03:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-21 10:03:13 +0000 UTC FinishedAt: 2026-08-21 10:05:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-21 10:03:13 +0000 UTC FinishedAt: 2026-08-21 10:05:11 +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:*3c28c1f4-2753-4add-9835-871da479a9b8,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-workflowbswqq/series-workflowbswqq-build-action-1033386320/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-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-21 10:05:21 +0000 UTC FinishedAt: 2026-08-21 13:08:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-21 10:05:21 +0000 UTC FinishedAt: 2026-08-21 13:08:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*793ef380-9acb-4b90-b5db-c7ffe7e944bb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3c28c1f4-2753-4add-9835-871da479a9b8,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-workflowbswqq/series-workflowbswqq-build-action-27478303/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-workflowbswqq/series-workflowbswqq-build-action-1033386320/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-21 10:05:21 +0000 UTC FinishedAt: 2026-08-21 10:05:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-21 10:05:21 +0000 UTC FinishedAt: 2026-08-21 10:05:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbswqq/series-workflowbswqq-convert-artifact-28655181/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-21 10:05:21 +0000 UTC FinishedAt: 2026-08-21 10:05:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-21 10:05:21 +0000 UTC FinishedAt: 2026-08-21 10:05:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-21 10:05:21 +0000 UTC FinishedAt: 2026-08-21 10:05:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-21 10:05:31 +0000 UTC FinishedAt: 2026-08-21 13:08:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbswqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["thaw_super","emergency_thaw_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"818bebeb63dd6bf5f4e07e145f6cdbace520a34c","config_name":"upstream-apparmor-kasan.config","series_id":"bfd15270-92da-4216-9bc4-405cb4af74c6","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-21 10:05:31 +0000 UTC FinishedAt: 2026-08-21 13:08:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*793ef380-9acb-4b90-b5db-c7ffe7e944bb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3c28c1f4-2753-4add-9835-871da479a9b8,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-workflowbswqq/series-workflowbswqq-build-action-27478303/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-workflowbswqq/series-workflowbswqq-build-action-1033386320/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-workflowbswqq/series-workflowbswqq-convert-artifact-28655181/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,}