Name: series-workflowz8f66 Phase: Succeeded StartedAt: 2026-08-31 01:37:05 +0000 UTC FinishedAt: 2026-08-31 03:42:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8f66[0] Phase: Succeeded StartedAt: 2026-08-31 01:37:05 +0000 UTC FinishedAt: 2026-08-31 02:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8f66[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 01:37:05 +0000 UTC FinishedAt: 2026-08-31 02:05:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK_H323", "NF_CONNTRACK", "NETFILTER", "NETFILTER_ADVANCED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK_H323", "NF_CONNTRACK", "NETFILTER", "NETFILTER_ADVANCED" ], "series_id": "30af3c0d-e2c6-4bdf-a3e8-01580a115d7f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "DecodeRasMessage", "DecodeQ931", "DecodeMultimediaSystemControlMessage", "get_h225_addr", "ras_help", "q931_help", "h245_help" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDS19IMzIzJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7RGVjb2RlUmFzTWVzc2FnZSYjMzQ7LAogICAgJiMzNDtEZWNvZGVROTMxJiMzNDssCiAgICAmIzM0O0RlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSYjMzQ7LAogICAgJiMzNDtnZXRfaDIyNV9hZGRyJiMzNDssCiAgICAmIzM0O3Jhc19oZWxwJiMzNDssCiAgICAmIzM0O3E5MzFfaGVscCYjMzQ7LAogICAgJiMzNDtoMjQ1X2hlbHAmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvaW50ZXIgYWR2YW5jZW1lbnQgYnVnIGluIGBkZWNvZGVfaW50KClgIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIEguMzIzIEFTTi4xIGNvbm50cmFjayBoZWxwZXIgKGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2ApLiBJbiBgY2FzZSBDT05TOmAsIGBnZXRfdWludChicywgbGVuKWAgYWR2YW5jZXMgYGJzLVx1MDAzZWN1cmAgaW50ZXJuYWxseSBieSBgbGVuYCBieXRlczsgcHJldmlvdXNseSwgYGJzLVx1MDAzZWN1ciAmIzQzOz0gbGVuYCB3YXMgYWxzbyBleGVjdXRlZCB1bmNvbmRpdGlvbmFsbHkgYWZ0ZXJ3YXJkcywgYWR2YW5jaW5nIHRoZSBiaXRzdHJlYW0gY3Vyc29yIHR3aWNlIHdoZW4gZGVjb2RpbmcgaW50ZWdlcnMuIFRoZSBwYXRjaCBtb3ZlcyBgYnMtXHUwMDNlY3VyICYjNDM7PSBsZW5gIGludG8gdGhlIGBlbHNlYCBicmFuY2guXG5cblRoaXMgY2hhbmdlIHN0cmljdGx5IGFkZHJlc3NlcyBzdHJlYW0gcGFyc2luZyBwb2ludGVyIG1hbmlwdWxhdGlvbiBvbiBpbmNvbWluZyBuZXR3b3JrIHBhY2tldCBidWZmZXJzIChgc2tiYCBkYXRhKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFBvdGVudGlhbCBtZW1vcnkgaXNzdWVzIHJlbGF0ZWQgdG8gc3RyZWFtIGJvdW5kcyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBlcnJvciBib3VuZGFyeSBjaGVja3MgKGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEguMzIzIGNvbm50cmFjayBoZWxwZXImIzM5O3MgQVNOLjEgaW50ZWdlciBkZWNvZGVyIChuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYykgd2hlcmUgZ2V0X3VpbnQoKSBhZHZhbmNlZCB0aGUgYml0c3RyZWFtIHBvaW50ZXIgYW5kIGRlY29kZV9pbnQoKSBhZHZhbmNlZCBpdCBhZ2Fpbi4gVGhpcyBhZmZlY3RzIHJlYWNoYWJpbGl0eSBhbmQgcGFyc2luZyBsb2dpYyBmb3IgSC4zMjMvUS45MzEvUkFTIG5ldHdvcmsgdHJhZmZpYyBpbiB0aGUgTmV0ZmlsdGVyIHN1YnN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRlNzhjN2EwYjdkYmVkNTUyMmYwMGYyNGUyYzE3ZjUyZTFjMDIzOTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwMjowMjo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXG5pbmRleCA2ODMwYzlkYTM1MDdjLi5hNTEyNzVjYzRkMGY2IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXG5AQCAtMzM2LDggJiM0MzszMzYsOSBAQCBzdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIFx0XHRcdHVuc2lnbmVkIGludCB2ID0gZ2V0X3VpbnQoYnMsIGxlbikgJiM0MzsgZi1cdTAwM2VsYjtcbiBcdFx0XHRQUklOVChcJiMzNDsgPSAldVwmIzM0Oywgdik7XG4gXHRcdFx0KigodW5zaWduZWQgaW50ICopKGJhc2UgJiM0MzsgZi1cdTAwM2VvZmZzZXQpKSA9IHY7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRicy1cdTAwM2VjdXIgJiM0Mzs9IGxlbjtcbiBcdFx0fVxuLVx0XHRicy1cdTAwM2VjdXIgJiM0Mzs9IGxlbjtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFVOQ086XG4gXHRcdEJZVEVfQUxJR04oYnMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDS19IMzIzJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7RGVjb2RlUmFzTWVzc2FnZSYjMzQ7LAogICAgJiMzNDtEZWNvZGVROTMxJiMzNDssCiAgICAmIzM0O0RlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSYjMzQ7LAogICAgJiMzNDtnZXRfaDIyNV9hZGRyJiMzNDssCiAgICAmIzM0O3Jhc19oZWxwJiMzNDssCiAgICAmIzM0O3E5MzFfaGVscCYjMzQ7LAogICAgJiMzNDtoMjQ1X2hlbHAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEguMzIzIGNvbm50cmFjayBoZWxwZXImIzM5O3MgQVNOLjEgaW50ZWdlciBkZWNvZGVyIChuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYykgd2hlcmUgZ2V0X3VpbnQoKSBhZHZhbmNlZCB0aGUgYml0c3RyZWFtIHBvaW50ZXIgYW5kIGRlY29kZV9pbnQoKSBhZHZhbmNlZCBpdCBhZ2Fpbi4gVGhpcyBhZmZlY3RzIHJlYWNoYWJpbGl0eSBhbmQgcGFyc2luZyBsb2dpYyBmb3IgSC4zMjMvUS45MzEvUkFTIG5ldHdvcmsgdHJhZmZpYyBpbiB0aGUgTmV0ZmlsdGVyIHN1YnN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRlNzhjN2EwYjdkYmVkNTUyMmYwMGYyNGUyYzE3ZjUyZTFjMDIzOTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAwMjowMjo1MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMKaW5kZXggNjgzMGM5ZGEzNTA3Yy4uYTUxMjc1Y2M0ZDBmNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMKQEAgLTMzNiw4ICYjNDM7MzM2LDkgQEAgc3RhdGljIGludCBkZWNvZGVfaW50KHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwKIAkJCXVuc2lnbmVkIGludCB2ID0gZ2V0X3VpbnQoYnMsIGxlbikgJiM0MzsgZi0mZ3Q7bGI7CiAJCQlQUklOVCgmIzM0OyA9ICV1JiMzNDssIHYpOwogCQkJKigodW5zaWduZWQgaW50ICopKGJhc2UgJiM0MzsgZi0mZ3Q7b2Zmc2V0KSkgPSB2OwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlicy0mZ3Q7Y3VyICYjNDM7PSBsZW47CiAJCX0KLQkJYnMtJmd0O2N1ciAmIzQzOz0gbGVuOwogCQlicmVhazsKIAljYXNlIFVOQ086CiAJCUJZVEVfQUxJR04oYnMpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMyCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgcGxheWluZyB0aGUgcm9sZSBvZiB0aGUgZXhwZXJ0OgoKKipEaXZpbmcgaW50byB0aGUgSC4zMjMgQVNOLjEgRGVjb2RlciBQYXRjaCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoaXMgcGF0Y2guIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUuIFRoZSBmaWxlIG1lbnRpb25lZCwgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCwgaXMgd2hlcmUgdGhlIEguMzIzIEFTTi4xIGRlY29kaW5nIGxvZ2ljIGxpdmVzIGZvciBuZXRmaWx0ZXImIzM5O3MgY29ubmVjdGlvbiB0cmFja2luZy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGBkZWNvZGVfaW50YCBmdW5jdGlvbiB3aXRoaW4gdGhhdCBmaWxlLiBUaGF0IGZ1bmN0aW9uIGlzIGNsZWFybHkgcmVzcG9uc2libGUgZm9yIGRlY29kaW5nIGludGVnZXIgdmFsdWVzIGVuY29kZWQgdXNpbmcgQVNOLjEuCgpMZXQmIzM5O3MgcHVsbCB1cCB0aGUgZmlsZSBjb250ZW50IHVzaW5nIGByZWFkLWZpbGVgIGluIHRoZSBhcHByb3ByaWF0ZSBzb3VyY2UgY29kZSBmb2xkZXIuIEhhdmluZyB0aGUgY29udGV4dCBmcm9tIHRoZSBjb21wbGV0ZSBzb3VyY2UgZmlsZSB3aWxsIGJlIHRoZSBtb3N0IHVzZWZ1bCB3YXkgdG8gZXhwbG9yZSB0aGUgc2l0dWF0aW9uIGhlcmUsIGJlY2F1c2UgSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyB0aGlzIGludGVnZXIgZGVjb2RpbmcgaXMgaW1wbGVtZW50ZWQsIHdoYXQgY2hlY2tzIGFyZSBwcmVzZW50LCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBBU04uMSBwYXJzaW5nIHByb2Nlc3MuIEFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IGludGVnZXItcmVsYXRlZCBvbmVzLCB3b3VsZCBiZSBleHBvc2VkIGJ5IHRoZXNlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzEwOlx0fVxuIDMxMTpcdFxuIDMxMjpcdHN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4gMzEzOlx0ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcbiAzMTQ6XHR7XG4gMzE1Olx0XHR1bnNpZ25lZCBpbnQgbGVuO1xuIDMxNjpcdFxuIDMxNzpcdFx0UFJJTlQoXCYjMzQ7JSpzJXNcJiMzNDssIGxldmVsICogVEFCX1NJWkUsIFwmIzM0OyBcJiMzNDssIGYtXHUwMDNlbmFtZSk7XG4gMzE4Olx0XG4gMzE5Olx0XHRzd2l0Y2ggKGYtXHUwMDNlc3opIHtcbiAzMjA6XHRcdGNhc2UgQllURTpcdFx0LyogUmFuZ2UgPT0gMjU2ICovXG4gMzIxOlx0XHRcdEJZVEVfQUxJR04oYnMpO1xuIDMyMjpcdFx0XHRicy1cdTAwM2VjdXImIzQzOyYjNDM7O1xuIDMyMzpcdFx0XHRicmVhaztcbiAzMjQ6XHRcdGNhc2UgV09SRDpcdFx0LyogMjU3IFx1MDAzYz0gUmFuZ2UgXHUwMDNjPSA2NEsgKi9cbiAzMjU6XHRcdFx0QllURV9BTElHTihicyk7XG4gMzI2Olx0XHRcdGJzLVx1MDAzZWN1ciAmIzQzOz0gMjtcbiAzMjc6XHRcdFx0YnJlYWs7XG4gMzI4Olx0XHRjYXNlIENPTlM6XHRcdC8qIDY0SyBcdTAwM2MgUmFuZ2UgXHUwMDNjIDRHICovXG4gMzI5Olx0XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAyKSlcbiAzMzA6XHRcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiAzMzE6XHRcdFx0bGVuID0gZ2V0X2JpdHMoYnMsIDIpICYjNDM7IDE7XG4gMzMyOlx0XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCBsZW4sIDApKVxuIDMzMzpcdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDMzNDpcdFx0XHRCWVRFX0FMSUdOKGJzKTtcbiAzMzU6XHRcdFx0aWYgKGJhc2UgXHUwMDI2XHUwMDI2IChmLVx1MDAzZWF0dHIgXHUwMDI2IERFQ09ERSkpIHtcdC8qIHRpbWVUb0xpdmUgKi9cbiAzMzY6XHRcdFx0XHR1bnNpZ25lZCBpbnQgdiA9IGdldF91aW50KGJzLCBsZW4pICYjNDM7IGYtXHUwMDNlbGI7XG4gMzM3Olx0XHRcdFx0UFJJTlQoXCYjMzQ7ID0gJXVcJiMzNDssIHYpO1xuIDMzODpcdFx0XHRcdCooKHVuc2lnbmVkIGludCAqKShiYXNlICYjNDM7IGYtXHUwMDNlb2Zmc2V0KSkgPSB2O1xuIDMzOTpcdFx0XHR9IGVsc2Uge1xuIDM0MDpcdFx0XHRcdGJzLVx1MDAzZWN1ciAmIzQzOz0gbGVuO1xuIDM0MTpcdFx0XHR9XG4gMzQyOlx0XHRcdGJyZWFrO1xuIDM0MzpcdFx0Y2FzZSBVTkNPOlxuIDM0NDpcdFx0XHRCWVRFX0FMSUdOKGJzKTtcbiAzNDU6XHRcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxuIDM0NjpcdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDM0NzpcdFx0XHRsZW4gPSBnZXRfbGVuKGJzKTtcbiAzNDg6XHRcdFx0YnMtXHUwMDNlY3VyICYjNDM7PSBsZW47XG4gMzQ5Olx0XHRcdGJyZWFrO1xuIDM1MDpcdFx0ZGVmYXVsdDpcdFx0LyogMiBcdTAwM2M9IFJhbmdlIFx1MDAzYz0gMjU1ICovXG4gMzUxOlx0XHRcdElOQ19CSVRTKGJzLCBmLVx1MDAzZXN6KTtcbiAzNTI6XHRcdFx0YnJlYWs7XG4gMzUzOlx0XHR9XG4gMzU0Olx0XG4gMzU1Olx0XHRQUklOVChcJiMzNDtcXG5cJiMzNDspO1xuIDM1NjpcdFxuIDM1NzpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxuIDM1ODpcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiAzNTk6XHRcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI3MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0OgoKKipEaXZpbmcgaW50byBgZ2V0X3VpbnRgIGluIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgYGdldF91aW50YCBmdW5jdGlvbiBpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgIGlzIGFjdHVhbGx5IGRvaW5nLiBJJiMzOTttIGFzc3VtaW5nLCBnaXZlbiB0aGUgZmlsZW5hbWUsIHRoYXQgdGhpcyBjb2RlIGlzIGNydWNpYWwgZm9yIHBhcnNpbmcgSC4zMjMgQVNOLjEgZGF0YSB3aXRoaW4gdGhlIE5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIGZyYW1ld29yay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0JiMzOTtzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgZXh0cmFjdGluZyB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcyBmcm9tIGEgYml0c3RyZWFtIG9yIGJ5dGUgYXJyYXkgZm9ybWF0dGVkIGFjY29yZGluZyB0byBBU04uMSBlbmNvZGluZyBydWxlcy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBtZWNoYW5pc20gaXQgdXNlczogSXMgaXQgaGFuZGxpbmcgQkVSIChCYXNpYyBFbmNvZGluZyBSdWxlcyksIERFUiAoRGlzdGluZ3Vpc2hlZCBFbmNvZGluZyBSdWxlcyksIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaGF0IHNpemUgaW50ZWdlciBkb2VzIGl0IGV4cGVjdCDigJMgOC1iaXQsIDE2LWJpdCwgMzItYml0LCBvciBwb3RlbnRpYWxseSB2YXJpYWJsZS1sZW5ndGg/IElzIGl0IGhhbmRsaW5nIGFueSBsZWFkaW5nIGxlbmd0aCBpbmRpY2F0b3JzPyBXaGF0IGFib3V0IGFueSBwb3RlbnRpYWwgcGFkZGluZyBvciB0YWcgYnl0ZXM/IEtub3dpbmcgdGhlc2UgZGV0YWlscyB3aWxsIGJlIGNyaXRpY2FsIGluIHVuZGVyc3RhbmRpbmcgaG93IGl0IGhhbmRsZXMgdGhlIHBhcnNpbmcgb2YgSC4zMjMgc2lnbmFsaW5nLiBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycywgb3ZlcmZsb3cgY29uZGl0aW9ucywgb3IgaW52YWxpZCBlbmNvZGluZ3MuIFRoaXMgd2lsbCB0ZWxsIG1lIGhvdyByb2J1c3QgaXQgaXMuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIGlucHV0cyBhbmQgb3V0cHV0cyB3aXRoaW4gdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGltcGxlbWVudGF0aW9uLiBVbHRpbWF0ZWx5LCB0aGlzIHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0cyBpbnRvIGhvdyBILjMyMyBzaWduYWxpbmcgaXMgZGlzc2VjdGVkIGFuZCBpdHMgcmVsZXZhbnQgaW5mb3JtYXRpb24gdXNlZCBpbiBjb25uZWN0aW9uIHRyYWNraW5nIGRlY2lzaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfdWludCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTEwND1zdGF0aWMgdW5zaWduZWQgaW50IGdldF9iaXRtYXAoc3RydWN0IGJpdHN0ciAqYnMsIHVuc2lnbmVkIGludCBiKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEwNTpzdGF0aWMgdW5zaWduZWQgaW50IGdldF91aW50KHN0cnVjdCBiaXRzdHIgKmJzLCBpbnQgYik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMDYtXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MjExPXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdG1hcChzdHJ1Y3QgYml0c3RyICpicywgdW5zaWduZWQgaW50IGIpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjQ5LSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MjUwOnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VpbnQoc3RydWN0IGJpdHN0ciAqYnMsIGludCBiKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjUxLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0zMTI9c3RhdGljIGludCBkZWNvZGVfaW50KHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zMzUtXHRcdGlmIChiYXNlIFx1MDAyNlx1MDAyNiAoZi1cdTAwM2VhdHRyIFx1MDAyNiBERUNPREUpKSB7XHQvKiB0aW1lVG9MaXZlICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozMzY6XHRcdFx0dW5zaWduZWQgaW50IHYgPSBnZXRfdWludChicywgbGVuKSAmIzQzOyBmLVx1MDAzZWxiO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzM3LVx0XHRcdFBSSU5UKFwmIzM0OyA9ICV1XCYjMzQ7LCB2KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jPTY4MD12b2lkIG5mX2Nvbm50cmFja19wcm90b19wZXJuZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy02OTYtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjY5Nzptb2R1bGVfcGFyYW1fY2FsbChoYXNoc2l6ZSwgbmZfY29ubnRyYWNrX3NldF9oYXNoc2l6ZSwgcGFyYW1fZ2V0X3VpbnQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTY5OC1cdFx0ICBcdTAwMjZuZl9jb25udHJhY2tfaHRhYmxlX3NpemUsIDA2MDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNTUKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBgZ2V0X3VpbnRgIGZ1bmN0aW9uIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AuCgoqKkRpdmluZyBpbnRvIGBnZXRfdWludGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHB1bGwgdXAgdGhhdCBgZ2V0X3VpbnRgIGZ1bmN0aW9uIGluIHRoZSBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nIGNvZGUuIFNwZWNpZmljYWxseSwgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYC4gSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHRoZSBBU04uMSBwYXJzaW5nIGNvbnRleHQgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcyB3aXRoaW4uIENvbnNpZGVyaW5nIHRoZSBsb3ctbGV2ZWwgQVNOLjEgZW5jb2RpbmcgcHJpbmNpcGxlcywgdGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJseSB0YXNrZWQgd2l0aCBleHRyYWN0aW5nIGFuIHVuc2lnbmVkIGludGVnZXIgdmFsdWUgZnJvbSBhIGJ1ZmZlciBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIElUVS1UIFguNjkwIChERVIvQkVSKSBvciB3aGF0ZXZlciBzdWJzZXQgdGhleSBhcmUgdXNpbmcuIEkgZXhwZWN0IHRvIHNlZSBpdCBoYW5kbGluZyB2YXJpYWJsZS1sZW5ndGggZW5jb2RpbmdzLCBwb3RlbnRpYWxseSBjaGVja2luZyBmb3IgdGhlIG1pbmltdW0gbnVtYmVyIG9mIG9jdGV0cyByZXF1aXJlZCB0byByZXByZXNlbnQgdGhlIHZhbHVlLCBhbmQgbGlrZWx5IGRlYWxpbmcgd2l0aCBsZWFkaW5nIHplcm8gYnl0ZXMgdGhhdCBtaWdodCBiZSBwcmVzZW50IGluIHRoZSBlbmNvZGVkIHJlcHJlc2VudGF0aW9uIGRlcGVuZGluZyBvbiB3aGljaCAmIzM0O3RhZyYjMzQ7IGNsYXNzIHRoZSBpbnRlZ2VyIGlzIGJlaW5nIGVuY29kZWQgd2l0aC4gVGhpcyBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgaW4gdGVybXMgb2YgaG93IGl0IGV4dHJhY3RzIGEgdmFsdWUgYW5kIHdoZXRoZXIgaXQgbWlnaHQgYmUgdnVsbmVyYWJsZSB0byB0aGluZ3MgbGlrZSBvdmVybG9uZyBlbmNvZGluZ3MuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaG93IGl0IGhhbmRsZXMgY2FzZXMgd2hlcmUgdGhlIGJ1ZmZlciBtaWdodCBiZSB0cnVuY2F0ZWQgb3IgaW52YWxpZCwgYW5kIG1ha2Ugc3VyZSB0aGF0IGl0JiMzOTtzIHJvYnVzdCBpbiB0aGF0IGNvbnRleHQuIEkgd2FudCB0byBzZWUgaWYgdGhleSYjMzk7cmUgdmFsaWRhdGluZyB0aGUgbGVuZ3RoIGZpZWxkIHByb3Blcmx5IGFuZCBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgcG90ZW50aWFsIG92ZXJmbG93cyDigJMgdGhhdCYjMzk7cyBvZnRlbiBhIHNvdXJjZSBvZiB2dWxuZXJhYmlsaXRpZXMgd2hlbiBkZWFsaW5nIHdpdGggdW5zaWduZWQgaW50ZWdlcnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgb2ZmLWJ5LW9uZSBlcnJvcnMgaW4gdGhlaXIgaW5kZXhpbmcgYXMgd2VsbC4gTGV0JiMzOTtzIHNlZSBob3cgd2VsbCBpdCYjMzk7cyBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDU6XHR9XG4gMjQ2Olx0XG4gMjQ3Olx0LypcbiAyNDg6XHQgKiBBc3N1bWUgYnMgaXMgYWxpZ25lZCBhbmQgc2l6ZW9mKHVuc2lnbmVkIGludCkgPT0gNFxuIDI0OTpcdCAqL1xuIDI1MDpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VpbnQoc3RydWN0IGJpdHN0ciAqYnMsIGludCBiKVxuIDI1MTpcdHtcbiAyNTI6XHRcdHVuc2lnbmVkIGludCB2ID0gMDtcbiAyNTM6XHRcbiAyNTQ6XHRcdHN3aXRjaCAoYikge1xuIDI1NTpcdFx0Y2FzZSA0OlxuIDI1NjpcdFx0XHR2IHw9ICpicy1cdTAwM2VjdXImIzQzOyYjNDM7O1xuIDI1NzpcdFx0XHR2IFx1MDAzY1x1MDAzYz0gODtcbiAyNTg6XHRcdFx0ZmFsbHRocm91Z2g7XG4gMjU5Olx0XHRjYXNlIDM6XG4gMjYwOlx0XHRcdHYgfD0gKmJzLVx1MDAzZWN1ciYjNDM7JiM0Mzs7XG4gMjYxOlx0XHRcdHYgXHUwMDNjXHUwMDNjPSA4O1xuIDI2MjpcdFx0XHRmYWxsdGhyb3VnaDtcbiAyNjM6XHRcdGNhc2UgMjpcbiAyNjQ6XHRcdFx0diB8PSAqYnMtXHUwMDNlY3VyJiM0MzsmIzQzOztcbiAyNjU6XHRcdFx0diBcdTAwM2NcdTAwM2M9IDg7XG4gMjY2Olx0XHRcdGZhbGx0aHJvdWdoO1xuIDI2NzpcdFx0Y2FzZSAxOlxuIDI2ODpcdFx0XHR2IHw9ICpicy1cdTAwM2VjdXImIzQzOyYjNDM7O1xuIDI2OTpcdFx0XHRicmVhaztcbiAyNzA6XHRcdH1cbiAyNzE6XHRcdHJldHVybiB2O1xuIDI3MjpcdH1cbiAyNzM6XHRcbiAyNzQ6XHRzdGF0aWMgaW50IGRlY29kZV9udWwoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIDI3NTpcdCAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4gMjc2Olx0e1xuIDI3NzpcdFx0UFJJTlQoXCYjMzQ7JSpzJXNcXG5cJiMzNDssIGxldmVsICogVEFCX1NJWkUsIFwmIzM0OyBcJiMzNDssIGYtXHUwMDNlbmFtZSk7XG4gMjc4Olx0XG4gMjc5Olx0XHRyZXR1cm4gSDMyM19FUlJPUl9OT05FO1xuIDI4MDpcdH1cbiAyODE6XHRcbiAyODI6XHRzdGF0aWMgaW50IGRlY29kZV9ib29sKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbiAyODM6XHQgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcbiAyODQ6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE4NwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDMzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvZGluZyBEaWxlbW1hIGFuZCBDb25udHJhY2sgQ29udW5kcnVtKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoYXQgYGdldF91aW50YCBmdW5jdGlvbuKApiBJIHNlZSBpdCYjMzk7cyBpbmNyZW1lbnRpbmcgYGJzLSZndDtjdXJgIGJ5IGBsZW5gIGJ5dGVzLiBPa2F5LCBzdGFuZGFyZCBiZWhhdmlvciwgbm90aGluZyB1bmV4cGVjdGVkIHRoZXJlLiBCdXQsIGxvb2tpbmcgYmFjayBhdCB0aGUgb3JpZ2luYWwgY29kZS4uLiBpZiBgYmFzZSAmYW1wOyZhbXA7IChmLSZndDthdHRyICZhbXA7IERFQ09ERSlgIGlzIHRydWUsIGBnZXRfdWludGAgYWxyZWFkeSBhZHZhbmNlZCBgYnMtJmd0O2N1cmAhIFRoZW4sIGltbWVkaWF0ZWx5IGFmdGVyLCBgYnMtJmd0O2N1ciAmIzQzOz0gbGVuYCBoYXBwZW5zIGFnYWluISBUaGF0JiMzOTtzIGEgY2xhc3NpYyBkb3VibGUgaW5jcmVtZW50IGJ1ZywgYW5kIGl0JiMzOTtzIHByb2JhYmx5IGdvaW5nIHRvIGNhdXNlIHNvbWUgc2VyaW91cyBpc3N1ZXMgZG93biB0aGUgbGluZS4gSWYgdGhlIGNvbmRpdGlvbmFsIGlzbiYjMzk7dCB0cnVlLCB0aGVuIGBnZXRfdWludGAgaXNuJiMzOTt0IGNhbGxlZCwgc28gb25seSB0aGUgYGJzLSZndDtjdXIgJiM0Mzs9IGxlbmAgc2hvdWxkIGhhcHBlbi4KClNvLCBpZiBJIGNoYW5nZSB0aGUgbG9naWMgdG8gdGhlIHNlY29uZCBjb2RlIGJsb2NrLCB0aGF0IHNob3VsZCBmaXggdGhlIGlzc3VlLiBUaGUgbmV3IGNvZGUgYmxvY2sgb25seSBpbmNyZW1lbnRzIHdoZW4gdGhlIGNvbmRpdGlvbmFsIHN0YXRlbWVudCBpcyBmYWxzZSwgYW5kIG90aGVyd2lzZSByZWxpZXMgb24gYGdldF91aW50YC4KClRoaXMgYWZmZWN0cyBBU04uMSBkZWNvZGluZywgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGEgcmVhbCBidWcgaW4gdGhlIEguMzIzIGNvbm50cmFjayBoZWxwZXIuIFRoaXMgY291bGQgYmUgY2F1c2luZyBhbGwgc29ydHMgb2YgdW5leHBlY3RlZCBiZWhhdmlvci4KCk5vdywgSSBuZWVkIHRvIGdldCBhIGJyb2FkZXIgdmlldy4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byBob3cgYG5mX2Nvbm50cmFja19oMzIzYCB3b3Jrcy4gSG93IGlzIGl0IGVuYWJsZWQ/IFdoYXQgc3ltYm9scyBhcmUgZXhwb3J0ZWQ/IFdoYXQgS2NvbmZpZyBvcHRpb25zIGFyZSByZWxldmFudCBoZXJlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgdGhpcyBmaXguCgpUaW1lIHRvIHN0YXJ0IGdyZXBwaW5nLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGBuZl9jb25udHJhY2tfaDMyM19hc24xYCBhbmQgYWxzbyBsb29rIGZvciBjYWxsZXJzIG9mIGRlY29kZSBmdW5jdGlvbnMgaW4gYG5ldC9uZXRmaWx0ZXIvYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RGVjb2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MTA1PXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VpbnQoc3RydWN0IGJpdHN0ciAqYnMsIGludCBiKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEwNi1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEwNzovKiBEZWNvZGVyIEZ1bmN0aW9ucyAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTA4LXN0YXRpYyBpbnQgZGVjb2RlX251bChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MTE5PXN0YXRpYyBpbnQgZGVjb2RlX2Nob2ljZShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMjAtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMjE6LyogRGVjb2RlciBGdW5jdGlvbnMgVmVjdG9yICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMjItdHlwZWRlZiBpbnQgKCpkZWNvZGVyX3QpKHN0cnVjdCBiaXRzdHIgKiwgY29uc3Qgc3RydWN0IGZpZWxkX3QgKiwgY2hhciAqLCBpbnQpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTIzOnN0YXRpYyBjb25zdCBkZWNvZGVyX3QgRGVjb2RlcnNbXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEyNC1cdGRlY29kZV9udWwsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9NTExPXN0YXRpYyBpbnQgZGVjb2RlX3NlcShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTIwLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTIxOlx0LyogRGVjb2RlPyAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTIyLVx0YmFzZSA9IChiYXNlIFx1MDAyNlx1MDAyNiAoZi1cdTAwM2VhdHRyIFx1MDAyNiBERUNPREUpKSA/IGJhc2UgJiM0MzsgZi1cdTAwM2VvZmZzZXQgOiBOVUxMO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTUzNy1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjUzODpcdC8qIERlY29kZSB0aGUgcm9vdCBjb21wb25lbnRzICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01MzktXHRmb3IgKGkgPSBvcHQgPSAwLCBzb24gPSBmLVx1MDAzZWZpZWxkczsgaSBcdTAwM2MgZi1cdTAwM2VsYjsgaSYjNDM7JiM0MzssIHNvbiYjNDM7JiM0MzspIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01NTAtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1NTE6XHRcdC8qIERlY29kZSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTUyLVx0XHRpZiAoc29uLVx1MDAzZWF0dHIgXHUwMDI2IE9QRU4pIHtcdC8qIE9wZW4gZmllbGQgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01NjUtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1NjY6XHRcdFx0LyogRGVjb2RlICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1Njc6XHRcdFx0aWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVx1MDAzZXR5cGVdKSAoYnMsIHNvbiwgYmFzZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU2OC1cdFx0XHRcdFx0XHRcdCAgbGV2ZWwgJiM0MzsgMSkpIFx1MDAzY1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU3My1cdFx0XHRicy1cdTAwM2ViaXQgPSAwO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTc0Olx0XHR9IGVsc2UgaWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVx1MDAzZXR5cGVdKSAoYnMsIHNvbiwgYmFzZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU3NS1cdFx0XHRcdFx0XHRcdCBsZXZlbCAmIzQzOyAxKSkgXHUwMDNjXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTk3LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTk4Olx0LyogRGVjb2RlIHRoZSBleHRlbnNpb24gY29tcG9uZW50cyAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTk5LVx0Zm9yIChvcHQgPSAwOyBvcHQgXHUwMDNjIGJtcDJfbGVuOyBvcHQmIzQzOyYjNDM7LCBpJiM0MzsmIzQzOywgc29uJiM0MzsmIzQzOykge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTYzMi1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjYzMzpcdFx0aWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVx1MDAzZXR5cGVdKSAoYnMsIHNvbiwgYmFzZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTYzNC1cdFx0XHRcdFx0XHQgIGxldmVsICYjNDM7IDEpKSBcdTAwM2Ncbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz02NDQ9c3RhdGljIGludCBkZWNvZGVfc2Vxb2Yoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY1My1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjY1NDpcdC8qIERlY29kZT8gKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY1NS1cdGJhc2UgPSAoYmFzZSBcdTAwMjZcdTAwMjYgKGYtXHUwMDNlYXR0ciBcdTAwMjYgREVDT0RFKSkgPyBiYXNlICYjNDM7IGYtXHUwMDNlb2Zmc2V0IDogTlVMTDtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY1Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjY1NzpcdC8qIERlY29kZSBpdGVtIGNvdW50ICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02NTgtXHRzd2l0Y2ggKGYtXHUwMDNlc3opIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02OTMtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo2OTQ6XHQvKiBEZWNvZGUgbmVzdGVkIGZpZWxkICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02OTUtXHRzb24gPSBmLVx1MDAzZWZpZWxkcztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MTMtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo3MTQ6XHRcdFx0aWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVx1MDAzZXR5cGVdKSAoYnMsIHNvbixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTcxNS1cdFx0XHRcdFx0XHRcdCAgaSBcdTAwM2Ncbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MjQtXHRcdH0gZWxzZVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzI1Olx0XHRcdGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cdTAwM2V0eXBlXSkgKGJzLCBzb24sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MjYtXHRcdFx0XHRcdFx0XHQgIGkgXHUwMDNjXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9NzQwPXN0YXRpYyBpbnQgZGVjb2RlX2Nob2ljZShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzQ5LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzUwOlx0LyogRGVjb2RlPyAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzUxLVx0YmFzZSA9IChiYXNlIFx1MDAyNlx1MDAyNiAoZi1cdTAwM2VhdHRyIFx1MDAyNiBERUNPREUpKSA/IGJhc2UgJiM0MzsgZi1cdTAwM2VvZmZzZXQgOiBOVUxMO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzUyLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzUzOlx0LyogRGVjb2RlIHRoZSBjaG9pY2UgaW5kZXggbnVtYmVyICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03NTQtXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMSkpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODA3LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODA4Olx0XHRpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXHUwMDNldHlwZV0pIChicywgc29uLCBiYXNlLCBsZXZlbCAmIzQzOyAxKSkgXHUwMDNjXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MDktXHRcdCAgICBIMzIzX0VSUk9SX05PTkUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODEzLVx0XHRicy1cdTAwM2ViaXQgPSAwO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODE0Olx0fSBlbHNlIGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cdTAwM2V0eXBlXSkgKGJzLCBzb24sIGJhc2UsIGxldmVsICYjNDM7IDEpKSBcdTAwM2Ncbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgxNS1cdFx0ICAgSDMyM19FUlJPUl9OT05FKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgyMC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgyMTppbnQgRGVjb2RlUmFzTWVzc2FnZSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeiwgUmFzTWVzc2FnZSAqcmFzKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODIyLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MzUtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo4MzY6c3RhdGljIGludCBEZWNvZGVIMzIzX1VzZXJJbmZvcm1hdGlvbih1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGNoYXIgKmJlZyxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgzNy1cdFx0XHRcdCAgICAgIHNpemVfdCBzeiwgSDMyM19Vc2VySW5mb3JtYXRpb24gKnV1aWUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODUyLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODUzOmludCBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NTQtXHRcdFx0XHRcdCBNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UgKlxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTg3MC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjg3MTppbnQgRGVjb2RlUTkzMSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeiwgUTkzMSAqcTkzMSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTg3Mi17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtOTA3LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6OTA4Olx0LyogRGVjb2RlIEluZm9ybWF0aW9uIEVsZW1lbnRzICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy05MDktXHR3aGlsZSAoc3ogXHUwMDNlIDApIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy05MjItXHRcdFx0XHRicmVhaztcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjkyMzpcdFx0XHRyZXR1cm4gRGVjb2RlSDMyM19Vc2VySW5mb3JtYXRpb24oYnVmLCBwLCBsZW4sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy05MjQtXHRcdFx0XHRcdFx0XHQgIFx1MDAyNnE5MzEtXHUwMDNlVVVJRSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9NTI5PXN0YXRpYyBpbnQgaDI0NV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTU1MS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjU1MjpcdFx0LyogRGVjb2RlIEguMjQ1IHNpZ25hbCAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NTUzOlx0XHRyZXQgPSBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UoZGF0YSwgZGF0YWxlbixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTU1NC1cdFx0XHRcdFx0XHRcdCAgIFx1MDAyNm1zY20pO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTEwODk9c3RhdGljIGludCBxOTMxX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTExMS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjExMTI6XHRcdC8qIERlY29kZSBRLjkzMSBzaWduYWwgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjExMTM6XHRcdHJldCA9IERlY29kZVE5MzEoZGF0YSwgZGF0YWxlbiwgXHUwMDI2cTkzMSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xMTE0LVx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTY2ND1zdGF0aWMgaW50IHJhc19oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE2ODItXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNjgzOlx0LyogRGVjb2RlIFJBUyBtZXNzYWdlICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNjg0Olx0cmV0ID0gRGVjb2RlUmFzTWVzc2FnZShkYXRhLCBkYXRhbGVuLCBcdTAwMjZyYXMpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTY4NS1cdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM4MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBuZl9jb25udHJhY2tfaDMyMyBDb25maWd1cmF0aW9uKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdC4gQmVmb3JlIEkgZGl2ZSBpbnRvIGFueXRoaW5nIGRlZXBlciwgSSBuZWVkIHRvIHZlcmlmeSBob3cgYG5mX2Nvbm50cmFja19oMzIzYCBpcyBhY3R1YWxseSBidWlsdCBpbnRvIHRoZSBrZXJuZWwuIFRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50cyBhcmUgdGhlIEtjb25maWcgYW5kIE1ha2VmaWxlLiBJIHdhbnQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaXRzIGJ1aWxkIHN0YXR1cyAoYnVpbHQtaW4sIG1vZHVsYXIsIG9yIGRpc2FibGVkKSBhbmQgZGVwZW5kZW5jaWVzLCBzbyBJIGtub3cgd2hldGhlciB0aGUgcHJvYmxlbSBJJiMzOTttIHRyeWluZyB0byBmaXggbWlnaHQgYmUgYSBrZXJuZWwgY29uZmlndXJhdGlvbiBpc3N1ZSBvciBzb21ldGhpbmcgZGVlcGVyIGluIHRoZSBjb2RlIG9yIG1vZHVsZSBsb2FkaW5nIHByb2Nlc3MuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gaXMgZnVuZGFtZW50YWwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGhpc3Rvcnkgb2YgSC4zMjMgc3VwcG9ydCBpbiB0aGUga2VybmVsLiBUaGlzIGluaXRpYWwgY2hlY2sgaXMgYSBiYXNpYyBzYW5pdHkgY2hlY2ssIGJ1dCBhIGNyaXRpY2FsIG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX2gzMjMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM5PW9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LX0hFTFBFUikgJiM0Mzs9IG5mbmV0bGlua19jdGhlbHBlci5vXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS00MS0jIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyc1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0MjpuZl9jb25udHJhY2tfaDMyMy1vYmpzIDo9IG5mX2Nvbm50cmFja19oMzIzX21haW4ubyBuZl9jb25udHJhY2tfaDMyM19hc24xLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNDMtXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZT00NT1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUCkgJiM0Mzs9IG5mX2Nvbm50cmFja19mdHAub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0NjpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjMpICYjNDM7PSBuZl9jb25udHJhY2tfaDMyMy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQ3LW9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfSVJDKSAmIzQzOz0gbmZfY29ubnRyYWNrX2lyYy5vXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTQtI2VuZGlmXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxNTojaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oXHUwMDNlXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xNi1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0xMjM9c3RhdGljIGNvbnN0IGRlY29kZXJfdCBEZWNvZGVyc1tdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE0MC0gKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjE0MTojaW5jbHVkZSBcJiMzNDtuZl9jb25udHJhY2tfaDMyM190eXBlcy5jXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xNDItXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMzUtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfem9uZXMuaFx1MDAzZVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MzY6I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmhcdTAwM2Vcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTM3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTE3NTU9c3RhdGljIHZvaWQgX19leGl0IGgzMjNfaGVscGVyX2V4aXQodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzYzLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTc2NDpzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX2gzMjNfZmluaSh2b2lkKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc2NS17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc3MC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE3NzE6c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2gzMjNfaW5pdCh2b2lkKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc3Mi17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc4OS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE3OTA6bW9kdWxlX2luaXQobmZfY29ubnRyYWNrX2gzMjNfaW5pdCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzkxOm1vZHVsZV9leGl0KG5mX2Nvbm50cmFja19oMzIzX2ZpbmkpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc5Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NzQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIEtjb25maWcgZm9yIEguMzIzIENvbm5lY3Rpb24gVHJhY2tpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgcmlnaHQgaW4uIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIG1lbnRhbGx5IGdvaW5nIHRocm91Z2ggdGhlIHBvdGVudGlhbCBpc3N1ZXMuIEkmIzM5O20gaGl0dGluZyBgTkZfQ09OTlRSQUNLX0gzMjNgIGluIGBLY29uZmlnYC4gSW1tZWRpYXRlbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgZGVwZW5kZW5jeSByZXNvbHV0aW9uLiBXaGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgdG8gZW5hYmxlIHRoaXMgc3BlY2lmaWMgY29ubmVjdGlvbiB0cmFja2luZz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNvbmZsaWN0cyBJIG5lZWQgdG8gZmxhZyByaWdodCBhd2F5PyBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBwb3RlbnRpYWwgbmVlZCB0byB0cmFjZSB0aGUgY29uZmlndXJhdGlvbiYjMzk7cyByZWxhdGlvbnNoaXAgdG8gbW9kdWxlcyBhbmQgcmVsZXZhbnQga2VybmVsIHN1YnN5c3RlbXMsIGFuZCBjaGVja2luZyB0aGUgZGVwZW5kZW5jaWVzIGluIGNhc2UgaXQgbmVlZHMgb3RoZXIgbW9kdWxlcyBsb2FkZWQgZm9yIGl0IHRvIHdvcmsuIEnigJltIGFsc28gYXNzdW1pbmcgdGhhdCB0aGVyZSBpcyBhIGdvb2QgcmVhc29uIGZvciB0aGlzIHNldHRpbmcgdG8gYmUgY29uc2lkZXJlZC4gSSBuZWVkIHRvIGZpZ3VyZSB0aGF0IG91dCBiZWZvcmUgY29udGludWluZy4gSSB3aWxsIGNoZWNrIGZvciBhbnkgcmVsYXRlZCBjb2RlIGluIHRoZSBuZXRmaWx0ZXIgbW9kdWxlIHRvby4gTXkgaW1tZWRpYXRlIG5lZWQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBCb29sZWFuIGZsYWcsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggd2l0aCBtdWx0aXBsZSBzZWxlY3RhYmxlIG9wdGlvbnM/IE15IHRob3VnaHQgcHJvY2VzcyBpbnZvbHZlcyB2aXN1YWxpemluZyB0aGUgYEtjb25maWdgIHN0cnVjdHVyZSwgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gYnVpbGQgdGltZXMsIGFuZCBhbnkgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGluY2x1ZGluZyB0aGlzIGZlYXR1cmUuIEl0JiMzOTtzIGEgcXVpY2ssIGZvY3VzZWQgc2NhbiwgYnV0IGl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcG90ZW50aWFsIHBpdGZhbGxzIGJlZm9yZSBtYWtpbmcgYW55IGRlY2lzaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZfQ09OTlRSQUNLX0gzMjMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MjI3PWNvbmZpZyBORl9DT05OVFJBQ0tfRlRQXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzOC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMzk6Y29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjQwLVx0dHJpc3RhdGUgXCYjMzQ7SC4zMjMgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9NDU9b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19GVFApICYjNDM7PSBuZl9jb25udHJhY2tfZnRwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDY6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19IMzIzKSAmIzQzOz0gbmZfY29ubnRyYWNrX2gzMjMub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS00Ny1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0lSQykgJiM0Mzs9IG5mX2Nvbm50cmFja19pcmMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTEwOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBLY29uZmlnIGZpbGU6CgoqKk5hdmlnYXRpbmcgdGhlIE5ldGZpbHRlciBLY29uZmlnKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGZvY3VzaW5nIGFyb3VuZCBsaW5lIDIzOS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGNvbmZpZ3VyZWQgdGhlcmUsIHByb2JhYmx5IHNvbWUgZmVhdHVyZSBvciBtb2R1bGUgcmVsYXRlZCB0byBOZXRmaWx0ZXIuIEdpdmVuIHRoZSBmaWxlIGFuZCBteSBleHBlcnRpc2UsIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBkZXBlbmRlbmNpZXMsIHByb21wdCBzdHJpbmdzLCBhbmQgZGVmYXVsdCBzZXR0aW5ncyB0aGF0IGRlZmluZSBob3cgdGhpcyBwYXJ0aWN1bGFyIE5ldGZpbHRlciBhc3BlY3QgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSB1bmRlcmx5aW5nIHRlY2hub2xvZ2llcywgYW5kIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgbW9kdWxlcywgd2hpY2ggaXMgY3J1Y2lhbCBmb3Igb3ZlcmFsbCBzeXN0ZW0gc3RhYmlsaXR5LiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhpcyByZWxhdGVzIHRvIGFueSBoYXJkd2FyZSBhY2NlbGVyYXRpb24sIG9yIGFueSBvdGhlciBmZWF0dXJlcyB0aGF0IG1pZ2h0IGJlIGFkZGVkIHRvIHRoZSBrZXJuZWwgYW5kIGhvdyB0aGV5IGFyZSBjb25maWd1cmVkLiBJJiMzOTttIGFudGljaXBhdGluZyBhIGNsZWFyIHBpY3R1cmUgdGhhdCB3aWxsIGhlbHAgdG8gc29saWRpZnkgb3VyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGJyb2FkZXIgTmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCBnb29kaWVzIGFyZSB0aGVyZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzNTpcdFx0ICBUaGlzIGlzIEZUUCBzdXBwb3J0IG9uIExheWVyIDMgaW5kZXBlbmRlbnQgY29ubmVjdGlvbiB0cmFja2luZy5cbiAyMzY6XHRcbiAyMzc6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gMjM4Olx0XG4gMjM5Olx0Y29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXG4gMjQwOlx0XHR0cmlzdGF0ZSBcJiMzNDtILjMyMyBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4gMjQxOlx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDI0MjpcdFx0aGVscFxuIDI0MzpcdFx0ICBILjMyMyBpcyBhIFZvSVAgc2lnbmFsbGluZyBwcm90b2NvbCBmcm9tIElUVS1ULiBBcyBvbmUgb2YgdGhlIG1vc3RcbiAyNDQ6XHRcdCAgaW1wb3J0YW50IFZvSVAgcHJvdG9jb2xzLCBpdCBpcyB3aWRlbHkgdXNlZCBieSB2b2ljZSBoYXJkd2FyZSBhbmRcbiAyNDU6XHRcdCAgc29mdHdhcmUgaW5jbHVkaW5nIHZvaWNlIGdhdGV3YXlzLCBJUCBwaG9uZXMsIE5ldG1lZXRpbmcsIE9wZW5QaG9uZSxcbiAyNDY6XHRcdCAgR25vbWVtZWV0aW5nLCBldGMuXG4gMjQ3Olx0XG4gMjQ4Olx0XHQgIFdpdGggdGhpcyBtb2R1bGUgeW91IGNhbiBzdXBwb3J0IEguMzIzIG9uIGEgY29ubmVjdGlvbiB0cmFja2luZy9OQVRcbiAyNDk6XHRcdCAgZmlyZXdhbGwuXG4gMjUwOlx0XG4gMjUxOlx0XHQgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIFJBUywgRmFzdCBTdGFydCwgSC4yNDUgVHVubmVsbGluZywgQ2FsbFxuIDI1MjpcdFx0ICBGb3J3YXJkaW5nLCBSVFAvUlRDUCBhbmQgVC4xMjAgYmFzZWQgYXVkaW8sIHZpZGVvLCBmYXgsIGNoYXQsXG4gMjUzOlx0XHQgIHdoaXRlYm9hcmQsIGZpbGUgdHJhbnNmZXIsIGV0Yy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZVxuIDI1NDpcdFx0ICB2aXNpdCBodHRwOi8vbmF0aDMyMy5zb3VyY2Vmb3JnZS5uZXQvLlxuIDI1NTpcdFxuIDI1NjpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyNTc6XHRcbiAyNTg6XHRjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xuIDI1OTpcdFx0dHJpc3RhdGUgXCYjMzQ7SVJDIERDQyBwcm90b2NvbCBzdXBwb3J0IChvYnNvbGV0ZSlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEguMzIzIENvbm5lY3Rpb24gVHJhY2tpbmcgTW9kdWxlIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgbmZfY29ubnRyYWNrX2gzMjNgIG1vZHVsZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgbW9kdWxlIGludGVyZmFjZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgc28gSSYjMzk7bGwgc3RhcnQgYnkgaWRlbnRpZnlpbmcgdGhlIGtleSBlbnRyeSBwb2ludHMgYW5kIGV4cG9ydGVkIHN5bWJvbHMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBhbmQgYG5mX2Nvbm50cmFja19oMzIzX21haW4uY2AuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBmdW5jdGlvbnMgb3IgdmFyaWFibGVzIHRoYXQgYXJlbiYjMzk7dCBkZWNsYXJlZCBgc3RhdGljYCBvciB0aGF0IGFyZSBvdGhlcndpc2UgZXhwb3J0ZWQsIGFzIHRob3NlIGFyZSB0aGUgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIGludGVyYWN0aW9uIHdpdGggdGhlIGtlcm5lbC4gSXTigJlzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHdoaWNoIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGZvciB0aGUga2VybmVsJiMzOTtzIHVzZS4KClRvIGFzc2lzdCB3aXRoIHRoYXQgaW52ZXN0aWdhdGlvbiwgSSYjMzk7bGwgdGhlbiBleGFtaW5lIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZXM6IGBpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmhgIGFuZCBgaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaGAuIEkmIzM5O20gaG9waW5nIHRob3NlIHdpbGwgY29udGFpbiBkZWNsYXJhdGlvbnMgb2YgdGhlIG5vbi1zdGF0aWMgc3ltYm9scyBvciBhdCBsZWFzdCBwcm92aWRlIGNsdWVzIGFib3V0IGhvdyB0aGUgbW9kdWxlJiMzOTtzIGRpZmZlcmVudCBjb21wb25lbnRzIGFyZSBtZWFudCB0byBpbnRlcmFjdC4gQ2hlY2tpbmcgdGhlIGhlYWRlcnMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIG1vZHVsZSYjMzk7cyBpbnRlbmRlZCBBUEkgYW5kIGl0cyBkYXRhIHN0cnVjdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RlY29kZXxoMzIzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmgtNy0jaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oOjg6I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaFx1MDAzZVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC05LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oXHUwMDNlXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC0xNC0vKiBUaGlzIHN0cnVjdHVyZSBleGlzdHMgb25seSBvbmNlIHBlciBtYXN0ZXIgKi9cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmg6MTU6c3RydWN0IG5mX2N0X2gzMjNfbWFzdGVyIHtcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmgtMTYtXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaD0zMj1pbnQgZ2V0X2gyMjVfYWRkcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHVuc2lnbmVkIGNoYXIgKmRhdGEsXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC0zNS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmg6MzY6c3RydWN0IG5mY3RfaDMyM19uYXRfaG9va3Mge1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC0zNy1cdGludCAoKnNldF9oMjQ1X2FkZHIpKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmgtOTEtfTtcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmg6OTI6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBuZmN0X2gzMjNfbmF0X2hvb2tzIF9fcmN1ICpuZmN0X2gzMjNfbmF0X2hvb2s7XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oLTkzLVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaC00MS0jaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmg6NDI6I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmhcdTAwM2VcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaC00My1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaD00ND10eXBlZGVmIHN0cnVjdCB7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oLTc3LS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oOjc4OiAqIERlY29kZSBGdW5jdGlvbnMgUmV0dXJuIENvZGVzXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmgtNzktICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmgtODAtXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmg6ODE6I2RlZmluZSBIMzIzX0VSUk9SX05PTkUgMFx0LyogRGVjb2RlZCBzdWNjZXNzZnVsbHkgKi9cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaC04Mi0jZGVmaW5lIEgzMjNfRVJST1JfU1RPUCAxXHQvKiBEZWNvZGluZyBzdG9wcGVkLCBub3QgcmVhbGx5IGFuIGVycm9yICovXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oLTg3LS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oOjg4OiAqIERlY29kZSBGdW5jdGlvbnNcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaC04OS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaC05MC1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaDo5MTppbnQgRGVjb2RlUmFzTWVzc2FnZSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeiwgUmFzTWVzc2FnZSAqIHJhcyk7XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmg6OTI6aW50IERlY29kZVE5MzEodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFE5MzEgKiBxOTMxKTtcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaDo5MzppbnQgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oLTk0LVx0XHRcdFx0XHQgTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlICpcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oPTQyMz10eXBlZGVmIHN0cnVjdCBQcm9ncmVzc19VVUlFIHtcdC8qIFNFUVVFTkNFICovXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaC00MzctXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQzODp0eXBlZGVmIHN0cnVjdCBIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keSB7XHQvKiBDSE9JQ0UgKi9cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmgtNDM5LVx0ZW51bSB7XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQ0MDpcdFx0ZUgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5X3NldHVwLFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaDo0NDE6XHRcdGVIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keV9jYWxsUHJvY2VlZGluZyxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmg6NDQyOlx0XHRlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfY29ubmVjdCxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmg6NDQzOlx0XHRlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfYWxlcnRpbmcsXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQ0NDpcdFx0ZUgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5X2luZm9ybWF0aW9uLFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaDo0NDU6XHRcdGVIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keV9yZWxlYXNlQ29tcGxldGUsXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQ0NjpcdFx0ZUgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5X2ZhY2lsaXR5LFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaDo0NDc6XHRcdGVIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keV9wcm9ncmVzcyxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmg6NDQ4Olx0XHRlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfZW1wdHksXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQ0OTpcdFx0ZUgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5X3N0YXR1cyxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmg6NDUwOlx0XHRlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfc3RhdHVzSW5xdWlyeSxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmg6NDUxOlx0XHRlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfc2V0dXBBY2tub3dsZWRnZSxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmg6NDUyOlx0XHRlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfbm90aWZ5LFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaC00NTMtXHR9IGNob2ljZTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oLTQ2MS1cdH07XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQ2Mjp9IEgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5O1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaC00NjMtXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaD02MDM9dHlwZWRlZiBzdHJ1Y3QgSDMyM19VVV9QRFUge1x0LyogU0VRVUVOQ0UgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oLTYxNS1cdH0gb3B0aW9ucztcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmg6NjE2Olx0SDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHkgaDMyM19tZXNzYWdlX2JvZHk7XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oLTYxNy1cdEgzMjNfVVVfUERVX2gyNDVDb250cm9sIGgyNDVDb250cm9sO1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmg9NjIwPXR5cGVkZWYgc3RydWN0IEgzMjNfVXNlckluZm9ybWF0aW9uIHtcdC8qIFNFUVVFTkNFICovXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaC02MjMtXHR9IG9wdGlvbnM7XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjYyNDpcdEgzMjNfVVVfUERVIGgzMjNfdXVfcGR1O1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaC02MjUtfSBIMzIzX1VzZXJJbmZvcm1hdGlvbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NzAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOgoKKipBbmFseXppbmcgSC4zMjMgQ29ubmVjdGlvbiBUcmFja2luZyBIZWxwZXIgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGZ1bmN0aW9uIGxhbmRzY2FwZSBmb3IgdGhlIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlLiBJJiMzOTtsbCBzdGFydCBieSBtYWtpbmcgYSBtZW50YWwgbWFwIG9mIHdoYXQmIzM5O3Mgd2hlcmUuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgZXhwb3J0ZWQgYW5kIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgQVNOLjEgZGVjb2Rpbmcgcm91dGluZXMgdGhlcmUsIGFuZCBsZXQmIzM5O3MgY29uZmlybSB0aGUgcHJlc2VuY2Ugb2YgdGhlc2UgZnVuY3Rpb25zOiBgRGVjb2RlUmFzTWVzc2FnZWAsIGBEZWNvZGVROTMxYCwgYERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZWAsIGFuZCwgbGlrZWx5IHNoYXJlZCwgYGdldF9oMjI1X2FkZHJgLgoKTmV4dCwgSSYjMzk7bGwgc2hpZnQgZm9jdXMgdG8gYG5mX2Nvbm50cmFja19oMzIzX21haW4uY2AuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCBgZ2V0X2gyMjVfYWRkcmAgd2lsbCByZXNpZGUgaGVyZSBhZ2Fpbi4gQ3J1Y2lhbGx5LCBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIGhlbHBlciBjYWxsYmFja3MgcmVnaXN0ZXJlZCB2aWEgdGhlIGBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlcmAuIFRoZXNlIGNhbGxiYWNrcyBhcmUgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbG9naWMgaXRzZWxmLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlbSBjbG9zZWx5LiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hhdCB0aGV5IGFyZSBkb2luZyBhbmQgd2hlbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXC5oZWxwXFxzKj0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTI4CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYG5mX2Nvbm50cmFja19oMzIzX21haW4uY2AgZm9yIEhlbHBlciBEZWZpbml0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIG5ldGZpbHRlciBmcmFtZXdvcmsuIFRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGlzIHRvIGxvY2F0ZSB0aGUgaGVscGVyIGRlZmluaXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIG5hdmlnYXRlIGRpcmVjdGx5IHRvIGBuZl9jb25udHJhY2tfaDMyM19tYWluLmNgIHRvIHNlZSBwcmVjaXNlbHkgaG93IHRoZSBILjMyMyBoZWxwZXJzIGFyZSBkZWZpbmVkIGFuZCByZWdpc3RlcmVkIHdpdGhpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUuIFRoaXMgZmlsZSBzaG91bGQgYmUgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIG1hbmFnaW5nIHRoZSBILjMyMyByZWxhdGVkIGxvZ2ljLCBzbyB0aGUgaGVscGVyIGRlZmluaXRpb25zICpzaG91bGQqIGJlIHJpZ2h0IGhlcmUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LiBIb3BlZnVsbHksIHRoZSBjb2RlIGlzIHdlbGwtc3RydWN0dXJlZCBhbmQgZG9jdW1lbnRlZCwgbWFraW5nIGl0IGVhc2llciB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBILjMyMyBwcm90b2NvbCBpcyBkaXNzZWN0ZWQgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcgcHVycG9zZXMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNvcmUgc3RydWN0dXJlcyBhbmQgcmVnaXN0cmF0aW9uIG1lY2hhbmlzbXMsIHNwZWNpZmljYWxseSBob3cgdGhlIGhlbHBlciBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBjb3JlLiBUaGlzIGRpcmVjdCBhcHByb2FjaCB3aWxsIGFsbG93IG1lIHRvIGltbWVkaWF0ZWx5IGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgdXNlZCBmb3IgZGlzc2VjdGluZyBILjMyMyBzaWduYWxsaW5nIG1lc3NhZ2VzIGFuZCBleHRyYWN0aW5nIHJlbGV2YW50IGluZm9ybWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTU5PXN0YXRpYyBjaGFyICpoMzIzX2J1ZmZlcjtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTYwLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NjE6c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIG5mX2Nvbm50cmFja19oZWxwZXJfaDI0NTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjYyOnN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBuZl9jb25udHJhY2tfaGVscGVyX3E5MzFbXTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjYzOnN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBuZl9jb25udHJhY2tfaGVscGVyX3Jhc1tdO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtNjQtXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9NTc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgaDI0NV9leHBfcG9saWN5ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTU4Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjU4MzpzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgbmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1IF9fcmVhZF9tb3N0bHk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzo1ODQ6c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpuZl9jb25udHJhY2tfaGVscGVyX2gyNDVfcHRyIF9fcmVhZF9tb3N0bHk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy01ODUtXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9NjcxPXN0YXRpYyBpbnQgY2FsbGZvcndhcmRfZG9fZmlsdGVyKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy03MzEtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzo3MzI6c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIG5mX2Nvbm50cmFja19oZWxwZXJfcTkzMVsyXSBfX3JlYWRfbW9zdGx5O1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NzMzOnN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxX3B0clsyXSBfX3JlYWRfbW9zdGx5O1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtNzM0LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTEyNDM9c3RhdGljIGludCBwcm9jZXNzX2dycShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTI1OS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjEyNjA6c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIG5mX2Nvbm50cmFja19oZWxwZXJfcmFzWzJdIF9fcmVhZF9tb3N0bHk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxMjYxOnN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbmZfY29ubnRyYWNrX2hlbHBlcl9yYXNfcHRyWzJdIF9fcmVhZF9tb3N0bHk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xMjYyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI5MwoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgSC4zMjMgQ29ubmVjdGlvbiBUcmFja2luZyBDb2RlKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBjb3JlIGhlbHBlciBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMgZm9yIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIGBuZl9jb25udHJhY2tfaDMyM19tYWluLmNgLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIG5lZWQgdG8gbmF2aWdhdGUgdGhyb3VnaCB0aGUgZmlsZSBzdHJ1Y3R1cmUgdG8gbG9jYXRlIHdoZXJlIHRob3NlIHNwZWNpZmljIGhlbHBlciBmdW5jdGlvbnMgYXJlIGRlZmluZWQgYW5kIGluaXRpYWxpemVkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBtYWluIGVudHJ5IHBvaW50cywgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSByZXNwb25zaWJsZSBmb3IgdGhlIG5pdHR5LWdyaXR0eSBvZiBILjMyMyBwcm90b2NvbCBhbmFseXNpcyBhbmQgY29ubmVjdGlvbiBzdGF0ZSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgY29ubnRyYWNrIGZyYW1ld29yay4gSSBleHBlY3QgdG8gZmluZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBzaWduYWxpbmcgcGFyc2luZywgcG9ydCBhbGxvY2F0aW9uLCBhbmQgcGVyaGFwcyBzb21lIGFzcGVjdCBvZiBBTEcgcHJvY2Vzc2luZy4gTGV0JiMzOTtzIGdldCB0byBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTE3MTE9c3RhdGljIGludCBfX2luaXQgaDMyM19oZWxwZXJfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MzAtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzMxOlx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX2gyNDUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzMyLVx0XHRcdFx0XHQgICBcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX2gyNDVfcHRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3MjEKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBILjMyMyBDb25udHJhY2sgTW9kdWxlKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIGxpbmUgMTcxMSBpbiBgbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgYSBwb3RlbnRpYWwgaXNzdWUgcmVsYXRlZCB0byBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nLiBUaGlzIGFyZWEgaXMgYWx3YXlzIGEgYml0IHRyaWNreSDigJMgaXQmIzM5O3MgYSBzdGF0ZWZ1bCBwcm90b2NvbCB3aXRoIG11bHRpcGxlIGNoYW5uZWxzLCBjb21wbGV4IHNpZ25hbGluZywgYW5kIG9mdGVuIE5BVCB0cmF2ZXJzYWwgaXNzdWVzIHRvIGNvbnNpZGVyLiBJIHN1c3BlY3QgdGhhdCB0aGUgbGluZSBudW1iZXIgcGlucG9pbnRzIGEgc3BlY2lmaWMgZnVuY3Rpb24gb3IgbG9naWMgYnJhbmNoIHJlbGF0ZWQgdG8gdGhlIGhhbmRsaW5nIG9mIHNpZ25hbGluZyBtZXNzYWdlcyBvciBwZXJoYXBzIG1lZGlhIHN0cmVhbSBhc3NvY2lhdGlvbi4gQ291bGQgYmUgYW4gaXNzdWUgd2l0aCBlbmRwb2ludCByZWdpc3RyYXRpb24sIGNhbGwgc2V0dXAvdGVhcmRvd24sIG9yIGV2ZW4gcG90ZW50aWFsbHkgcmVsYXRlZCB0byBoYW5kbGluZyBrZWVwLWFsaXZlcyBvciB0aW1lb3V0cyB3aXRoaW4gdGhlIGNvbm50cmFjayBtb2R1bGUuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoYXQgdGhlIGV4YWN0IGxpbmUgYW5kIGNvbnRleHQgbWlnaHQgYmUgdml0YWwgdG8gdW5kZXJzdGFuZGluZyBhbnkgcmVwb3J0ZWQgY29ubmVjdGl2aXR5IHByb2JsZW1zIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHdoZW4gdGhpcyBtb2R1bGUgaXMgcnVubmluZy4gSSBob3BlIHRoYXQgdGhlIHJlbGV2YW50IGxpbmVzIHByb3ZpZGUgbW9yZSBjb250ZXh0IGFib3V0IHRoZSBzdGF0ZSB0cmFuc2l0aW9ucyB0aGF0IGhhcHBlbiB3aXRoaW4gdGhlIGNvbm50cmFjayBzdHJ1Y3R1cmUuIFRoaXMgbGV2ZWwgb2YgZ3JhbnVsYXJpdHkgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGFueXRoaW5nIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTcxMDpcdFxuMTcxMTpcdHN0YXRpYyBpbnQgX19pbml0IGgzMjNfaGVscGVyX2luaXQodm9pZClcbjE3MTI6XHR7XG4xNzEzOlx0XHRpbnQgcmV0O1xuMTcxNDpcdFxuMTcxNTpcdFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbMF0sIEFGX0lORVQsIElQUFJPVE9fVURQLFxuMTcxNjpcdFx0XHRcdCAgXCYjMzQ7UkFTXCYjMzQ7LFxuMTcxNzpcdFx0XHRcdCAgXHUwMDI2cmFzX2V4cF9wb2xpY3ksIDAsIHJhc19oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4xNzE4Olx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX3Jhc1sxXSwgQUZfSU5FVDYsIElQUFJPVE9fVURQLFxuMTcxOTpcdFx0XHRcdCAgXCYjMzQ7UkFTXCYjMzQ7LFxuMTcyMDpcdFx0XHRcdCAgXHUwMDI2cmFzX2V4cF9wb2xpY3ksIDAsIHJhc19oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4xNzIxOlx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX2gyNDUsIEFGX1VOU1BFQywgSVBQUk9UT19VRFAsXG4xNzIyOlx0XHRcdFx0ICBcJiMzNDtILjI0NVwmIzM0OyxcbjE3MjM6XHRcdFx0XHQgIFx1MDAyNmgyNDVfZXhwX3BvbGljeSwgMCwgaDI0NV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4xNzI0Olx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX3E5MzFbMF0sIEFGX0lORVQsIElQUFJPVE9fVENQLFxuMTcyNTpcdFx0XHRcdCAgXCYjMzQ7US45MzFcJiMzNDssXG4xNzI2Olx0XHRcdFx0ICBcdTAwMjZxOTMxX2V4cF9wb2xpY3ksIDAsIHE5MzFfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xuMTcyNzpcdFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxWzFdLCBBRl9JTkVUNiwgSVBQUk9UT19UQ1AsXG4xNzI4Olx0XHRcdFx0ICBcJiMzNDtRLjkzMVwmIzM0OyxcbjE3Mjk6XHRcdFx0XHQgIFx1MDAyNnE5MzFfZXhwX3BvbGljeSwgMCwgcTkzMV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4xNzMwOlx0XG4xNzMxOlx0XHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfaDI0NSxcbjE3MzI6XHRcdFx0XHRcdFx0ICAgXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1X3B0cik7XG4xNzMzOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTczNDpcdFx0XHRyZXR1cm4gcmV0O1xuMTczNTpcdFx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIobmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxLFxuMTczNjpcdFx0XHRcdFx0XHQgICAgQVJSQVlfU0laRShuZl9jb25udHJhY2tfaGVscGVyX3E5MzEpLFxuMTczNzpcdFx0XHRcdFx0XHQgICAgbmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxX3B0cik7XG4xNzM4Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTczOTpcdFx0XHRnb3RvIGVycjE7XG4xNzQwOlx0XHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihuZl9jb25udHJhY2tfaGVscGVyX3JhcyxcbjE3NDE6XHRcdFx0XHRcdFx0ICAgIEFSUkFZX1NJWkUobmZfY29ubnRyYWNrX2hlbHBlcl9yYXMpLFxuMTc0MjpcdFx0XHRcdFx0XHQgICAgbmZfY29ubnRyYWNrX2hlbHBlcl9yYXNfcHRyKTtcbjE3NDM6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xNzQ0Olx0XHRcdGdvdG8gZXJyMjtcbjE3NDU6XHRcbjE3NDY6XHRcdHJldHVybiAwO1xuMTc0NzpcdGVycjI6XG4xNzQ4Olx0XHRuZl9jb25udHJhY2tfaGVscGVyc191bnJlZ2lzdGVyKG5mX2Nvbm50cmFja19oZWxwZXJfcTkzMV9wdHIsXG4xNzQ5Olx0XHRcdFx0XHRcdEFSUkFZX1NJWkUobmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxX3B0cikpO1xuMTc1MDpcdGVycjE6XG4xNzUxOlx0XHRuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIobmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1X3B0cik7XG4xNzUyOlx0XHRyZXR1cm4gcmV0O1xuMTc1MzpcdH1cbjE3NTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5NjMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVwZW5kZW5jeSBEZWVwIERpdmU6IEguMzIzIENvbm5lY3Rpb24gVHJhY2tpbmcqKgoKT2theSwgdGltZSB0byBnZXQgaW50byB0aGUgd2VlZHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjNgLiBGaXJzdCwgSSYjMzk7bGwgZ28gc3RyYWlnaHQgdG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYW5kIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZyBlbnRyeS4gQWgsIHRoZXJlIGl0IGlzOiBgY29uZmlnIE5GX0NPTk5UUkFDS19IMzIzYC4gTm93LCB3aGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBJIHNlZSBpdCBkZXBlbmRzIG9uIGBORVRGSUxURVJfQURWQU5DRURgLCB3aGljaCBtYWtlcyBzZW5zZS4gQnV0IGdpdmVuIGl0cyBwbGFjZW1lbnQsIGl0JiMzOTtzIHByZXR0eSBzYWZlIHRvIGFzc3VtZSBpdCYjMzk7cyBhbHNvIGltcGxpY2l0bHkgZGVwZW5kZW50IG9uIGBORl9DT05OVFJBQ0tgIGFzIHdlbGwsIHNpbmNlIGl0IHNpdHMgd2l0aGluIHRoYXQgYGlmYCBibG9jay4gVG8gYmUgY2VydGFpbiwgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgdG8gY29uZmlybSB3aGVyZSBgTkZfQ09OTlRSQUNLX0gzMjNgIGlzIHNpdHVhdGVkIGFuZCBob3cgaXQgcmVsYXRlcyB0byBgTkZfQ09OTlRSQUNLYC4gR290dGEgYmUgcHJlY2lzZSB3aGVuIGRlYWxpbmcgd2l0aCB0aGVzZSBrZXJuZWwgY29uZmlncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWYgTkZfQ09OTlRSQUNLfG1lbnVjb25maWcgTkZfQ09OTlRSQUNLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz05OD1jb25maWcgTkZfTE9HX1NZU0xPR1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMDktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTEwOmlmIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTExMS1jb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM5NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5hdmlnYXRpbmcgdGhlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBORl9DT05OVFJBQ0tgIHNldHRpbmcgd2l0aGluIHRoZSBOZXRmaWx0ZXIgY29udGV4dC4gUmlnaHQsIHNvIGZpcnN0IEkmIzM5O2xsIGhlYWQgb3ZlciB0byBgbmV0L25ldGZpbHRlci9LY29uZmlnYCB0byBwaW5wb2ludCBleGFjdGx5IHdoZXJlIHRoaXMgbWVudSBvciBjb25kaXRpb25hbCBibG9jayBsaXZlcy4gTGluZSAxMTAuLi4gYWhhISBJdCYjMzk7cyBuZXN0bGVkIHdpdGhpbiBhbiBgaWYgTkZfQ09OTlRSQUNLYCBibG9jay4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIE5vdywgYSBxdWljayBzYW5pdHkgY2hlY2s6IGBORl9DT05OVFJBQ0tgIHJlbGllcyBvbiBgTkVURklMVEVSYCwgYW5kIHRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGluZ3Mgc3RhcnQgdG8gdGllIGluLiBKdXN0IHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IGltbWVkaWF0ZSBkZXBlbmRlbmNpZXMgb3Igc2NvcGluZyBjb25zaWRlcmF0aW9ucywgSSYjMzk7bGwgcXVpY2tseSBzY2FuIHRoZSBmaXJzdCAxMjAgbGluZXMgb2YgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIEl0JiMzOTtzIGFsd2F5cyBiZXN0IHRvIGJlIHRob3JvdWdoIHdpdGggdGhlIGNvbmZpZyBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51IFwmIzM0O0NvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb25cJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgTkVURklMVEVSXG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIE5FVEZJTFRFUl9JTkdSRVNTXG4gICA2Olx0XHRib29sIFwmIzM0O05ldGZpbHRlciBpbmdyZXNzIHN1cHBvcnRcJiMzNDtcbiAgIDc6XHRcdGRlZmF1bHQgeVxuICAgODpcdFx0c2VsZWN0IE5FVF9JTkdSRVNTXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFRoaXMgYWxsb3dzIHlvdSB0byBjbGFzc2lmeSBwYWNrZXRzIGZyb20gaW5ncmVzcyB1c2luZyB0aGUgTmV0ZmlsdGVyXG4gIDExOlx0XHQgIGluZnJhc3RydWN0dXJlLlxuICAxMjpcdFxuICAxMzpcdGNvbmZpZyBORVRGSUxURVJfRUdSRVNTXG4gIDE0Olx0XHRib29sIFwmIzM0O05ldGZpbHRlciBlZ3Jlc3Mgc3VwcG9ydFwmIzM0O1xuICAxNTpcdFx0ZGVmYXVsdCB5XG4gIDE2Olx0XHRzZWxlY3QgTkVUX0VHUkVTU1xuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gY2xhc3NpZnkgcGFja2V0cyBiZWZvcmUgdHJhbnNtaXNzaW9uIHVzaW5nIHRoZVxuICAxOTpcdFx0ICBOZXRmaWx0ZXIgaW5mcmFzdHJ1Y3R1cmUuXG4gIDIwOlx0XG4gIDIxOlx0Y29uZmlnIE5FVEZJTFRFUl9TS0lQX0VHUkVTU1xuICAyMjpcdFx0ZGVmX2Jvb2wgTkVURklMVEVSX0VHUkVTUyBcdTAwMjZcdTAwMjYgKE5FVF9DTFNfQUNUIHx8IElGQilcbiAgMjM6XHRcbiAgMjQ6XHRjb25maWcgTkVURklMVEVSX05FVExJTktcbiAgMjU6XHRcdGJvb2xcbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgTkVURklMVEVSX0ZBTUlMWV9CUklER0VcbiAgMjg6XHRcdGJvb2xcbiAgMjk6XHRcbiAgMzA6XHRjb25maWcgTkVURklMVEVSX0ZBTUlMWV9BUlBcbiAgMzE6XHRcdGJvb2xcbiAgMzI6XHRcbiAgMzM6XHRjb25maWcgTkVURklMVEVSX0JQRl9MSU5LXG4gIDM0Olx0XHRkZWZfYm9vbCBCUEZfU1lTQ0FMTFxuICAzNTpcdFxuICAzNjpcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXG4gIDM3Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgYmFzZSBob29rIGR1bXAgc3VwcG9ydFwmIzM0O1xuICAzODpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAgMzk6XHRcdGRlcGVuZHMgb24gTkZfVEFCTEVTXG4gIDQwOlx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0cywgZ2VhcmVkIHRvd2FyZHMgYW4gZXhwZXJ0OgoKKipOYXZpZ2F0aW5nIHRoZSBOZXRmaWx0ZXIgS2NvbmZpZyoqCgpPa2F5LCB0aW1lIHRvIHplcm8gaW4gb24gbGluZXMgMTAwLTE0MCBvZiBgbmV0L25ldGZpbHRlci9LY29uZmlnYC4gSSYjMzk7bSBndWVzc2luZyB0aGVyZSYjMzk7cyBzb21ldGhpbmcgc3BlY2lmaWMgaW4gdGhhdCBzZWN0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGJldHRlciBvciBtYXliZSB0cm91Ymxlc2hvb3QuIEJhc2VkIG9uIHBhc3QgZXhwZXJpZW5jZSB3aXRoIEtjb25maWcsIHRoYXQgcmFuZ2UgY291bGQgYmUgZGVhbGluZyB3aXRoIGEgbnVtYmVyIG9mIHRoaW5ncy4gTWlnaHQgYmUgYSBuZXcgbW9kdWxlLCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGFuIGV4aXN0aW5nIG9uZSwgb3IgcGVyaGFwcyBkZXBlbmRlbmNpZXMgYmV0d2VlbiBmZWF0dXJlcy4gR2l2ZW4gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVpbmcgZW5hYmxlZCBvciBkaXNhYmxlZCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdy4gQXJlIHRoZXJlIGFueSB1bnVzdWFsIGRlZmF1bHRzPyBBbnkgdHJpY2t5IGRlcGVuZGVuY2llcyB0aGF0IEkgbWlnaHQgb3Zlcmxvb2sgYXQgYSBnbGFuY2U/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBzaWducyBvZiBjb25mbGljdHMgb3IgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGFjdHMuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuIDEwMTpcdFx0aGVscFxuIDEwMjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGUgc3VwcG9ydCBmb3IgcGFja2V0IGxvZ2dpbmcgdmlhIHN5c2xvZy5cbiAxMDM6XHRcdCAgSXQgc3VwcG9ydHMgSVB2NCwgSVBWNiwgQVJQIGFuZCBjb21tb24gdHJhbnNwb3J0IHByb3RvY29scyBzdWNoXG4gMTA0Olx0XHQgIGFzIFRDUCBhbmQgVURQLlxuIDEwNTpcdFx0ICBUaGlzIGlzIGEgc2ltcGxlciBidXQgbGVzcyBmbGV4aWJsZSBsb2dnaW5nIG1ldGhvZCBjb21wYXJlZCB0b1xuIDEwNjpcdFx0ICBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HLlxuIDEwNzpcdFx0ICBJZiBib3RoIGFyZSBlbmFibGVkIHRoZSBiYWNrZW5kIHRvIHVzZSBjYW4gYmUgY29uZmlndXJlZCBhdCBydW4tdGltZVxuIDEwODpcdFx0ICBieSBtZWFucyBvZiBwZXItYWRkcmVzcy1mYW1pbHkgc3lzY3RsIHR1bmFibGVzLlxuIDEwOTpcdFxuIDExMDpcdGlmIE5GX0NPTk5UUkFDS1xuIDExMTpcdGNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXG4gMTEyOlx0XHR0cmlzdGF0ZVxuIDExMzpcdFxuIDExNDpcdGNvbmZpZyBORl9DT05OVFJBQ0tfTUFSS1xuIDExNTpcdFx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIG1hcmsgdHJhY2tpbmcgc3VwcG9ydCYjMzk7XG4gMTE2Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDExNzpcdFx0aGVscFxuIDExODpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbm5lY3Rpb24gbWFya3MsIHVzZWQgYnkgdGhlXG4gMTE5Olx0XHQgIGBDT05OTUFSSyYjMzk7IHRhcmdldCBhbmQgYGNvbm5tYXJrJiMzOTsgbWF0Y2guIFNpbWlsYXIgdG8gdGhlIG1hcmsgdmFsdWVcbiAxMjA6XHRcdCAgb2YgcGFja2V0cywgYnV0IHRoaXMgbWFyayB2YWx1ZSBpcyBrZXB0IGluIHRoZSBjb25udHJhY2sgc2Vzc2lvblxuIDEyMTpcdFx0ICBpbnN0ZWFkIG9mIHRoZSBpbmRpdmlkdWFsIHBhY2tldHMuXG4gMTIyOlx0XG4gMTIzOlx0Y29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLXG4gMTI0Olx0XHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgc2VjdXJpdHkgbWFyayBzdXBwb3J0JiMzOTtcbiAxMjU6XHRcdGRlcGVuZHMgb24gTkVUV09SS19TRUNNQVJLXG4gMTI2Olx0XHRkZWZhdWx0IHkgaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbiAxMjc6XHRcdGhlbHBcbiAxMjg6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzZWN1cml0eSBtYXJraW5ncyB0byBiZSBhcHBsaWVkIHRvXG4gMTI5Olx0XHQgIGNvbm5lY3Rpb25zLiAgVHlwaWNhbGx5IHRoZXkgYXJlIGNvcGllZCB0byBjb25uZWN0aW9ucyBmcm9tXG4gMTMwOlx0XHQgIHBhY2tldHMgdXNpbmcgdGhlIENPTk5TRUNNQVJLIHRhcmdldCBhbmQgY29waWVkIGJhY2sgZnJvbVxuIDEzMTpcdFx0ICBjb25uZWN0aW9ucyB0byBwYWNrZXRzIHdpdGggdGhlIHNhbWUgdGFyZ2V0LCB3aXRoIHRoZSBwYWNrZXRzXG4gMTMyOlx0XHQgIGJlaW5nIG9yaWdpbmFsbHkgbGFiZWxlZCB2aWEgU0VDTUFSSy5cbiAxMzM6XHRcbiAxMzQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgJiMzOTtOJiMzOTsuXG4gMTM1Olx0XG4gMTM2Olx0Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xuIDEzNzpcdFx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHpvbmVzJiMzOTtcbiAxMzg6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gMTM5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTY4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBILjMyMyBDb25uZWN0aW9uIFRyYWNraW5nIE1vZHVsZSBEZXBlbmRlbmNpZXMgYW5kIFN5bWJvbHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgTkZfQ09OTlRSQUNLX0gzMjNgIG1vZHVsZS4gUmlnaHQgb2ZmIHRoZSBiYXQsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGl0IGRlcGVuZHMgb24gdGhlIGNvcmUgY29ubmVjdGlvbiB0cmFja2luZyBmcmFtZXdvcmsgKGBORl9DT05OVFJBQ0tgKSwgYWR2YW5jZWQgbmV0ZmlsdGVyIGZlYXR1cmVzIChgTkVURklMVEVSX0FEVkFOQ0VEYCwgYE5FVEZJTFRFUmApLCBhbmQgdGhlIGBJTkVUYCBzdGFjaywgd2hpY2ggaXMgd2hhdCBJJiMzOTtkIGV4cGVjdC4gTm93LCBsZXQmIzM5O3MgZGl2ZSBkZWVwZXIgaW50byB0aGUgY29kZS4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBrZXkgZnVuY3Rpb25zIHdpdGhpbiB0aGUgSC4zMjMgbW9kdWxlLCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgIGFuZCBgbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jYC4gTXkgaW5pdGlhbCBsaXN0IG9mIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBpbmNsdWRlIGBEZWNvZGVSYXNNZXNzYWdlYCwgYERlY29kZVE5MzFgLCBgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlYCwgYGdldF9oMjI1X2FkZHJgLCBgcmFzX2hlbHBgLCBgcTkzMV9oZWxwYCwgYW5kIGBoMjQ1X2hlbHBgLiBNeSBwcmltYXJ5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBzeW1ib2xzLCBtZWFuaW5nIHRoZXkgY2FuIGJlIHVzZWQgYnkgb3RoZXIga2VybmVsIG1vZHVsZXMuCgpJJiMzOTt2ZSBhbHJlYWR5IGxvb2tlZCBhdCB0aGUgZGVmaW5pdGlvbnMgaW4gdGhlIGNvZGUuIEkgY2FuIHNlZSB0aGF0IGBEZWNvZGVSYXNNZXNzYWdlYCwgYERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZWAsIGFuZCBgRGVjb2RlUTkzMWAgYXJlIGRlY2xhcmVkIGluIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgLCBhbmQgdGhlaXIgcHJvdG90eXBlcyBzaG93IHRoZXkgaGFuZGxlIEFTTi4xIGVuY29kZWQgbWVzc2FnZXMsIGFzIG9uZSB3b3VsZCBleHBlY3QuIEZyb20gYG5mX2Nvbm50cmFja19oMzIzX21haW4uY2AsIGBnZXRfaDIyNV9hZGRyYCBpcyAqRVhQT1JUX1NZTUJPTF9HUEwqIGFuZCB0aHVzIHZpc2libGUgb3V0c2lkZSB0aGUgbW9kdWxlLCBoYW5kbGluZyBhZGRyZXNzIGV4dHJhY3Rpb24gZnJvbSBILjIyNSBkYXRhLCBpbXBvcnRhbnQgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcuCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGEgbW9tZW50IGFuZCBxdWlja2x5IHNjYW4gdGhlIHJlbWFpbmluZyBjb2RlIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLCBqdXN0IHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgRGVjb2RlfF5FWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODMwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBNb2RpZmljYXRpb25zIGluIG5mX2Nvbm50cmFja19oMzIzX21haW4uYyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlZW4gaGFwcGVuaW5nLCBvciB3aGF0IG1pZ2h0IG5lZWQgdG8gYmUgYWRkZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIGZpbGUuICBMZXQmIzM5O3MgcXVpY2tseSBzY2FuIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uY2Agd2l0aCBgZ3JlcGAuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciBlaXRoZXIgbGluZXMgdGhhdCBzdGFydCB3aXRoICYjMzQ7aW50ICYjMzQ7IC0gc3VnZ2VzdGluZyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgb3IgZGVmaW5pdGlvbnMsIGFuZCB0aGUgYWRkaXRpb24sIG1vZGlmaWNhdGlvbiBvciByZW1vdmFsIG9mIHRob3NlLiBPciwgSSYjMzk7bSBsb29raW5nIGZvciB1c2FnZXMgb2YgYEVYUE9SVF9TWU1CT0xgLCBiZWNhdXNlIHRoYXQgaW5kaWNhdGVzIHN5bWJvbHMgYmVpbmcgbWFkZSBhdmFpbGFibGUgdG8gb3RoZXIgbW9kdWxlcywgd2hpY2ggb2Z0ZW4gc2lnbmFscyBpbXBvcnRhbnQgZnVuY3Rpb25hbGl0eSBjaGFuZ2VzIG9yIGhvb2tzLiBXaXRoIHRob3NlIHR3byBwYXR0ZXJucywgSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBzb2xpZCBvdmVydmlldyBvZiByZWxldmFudCBtb2RpZmljYXRpb25zIG9yIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgZm9yIGNoYW5nZXMgSSYjMzk7bSBpbnRlcmVzdGVkIGluLiBJIHdhbnQgYSBxdWljaywgdGFyZ2V0ZWQgdmlldyBvZiBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9NTU9Y29uc3Qgc3RydWN0IG5mY3RfaDMyM19uYXRfaG9va3MgX19yY3UgKm5mY3RfaDMyM19uYXRfaG9vayBfX3JlYWRfbW9zdGx5O1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NTY6RVhQT1JUX1NZTUJPTF9HUEwobmZjdF9oMzIzX25hdF9ob29rKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTU3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTU4Nj1pbnQgZ2V0X2gyMjVfYWRkcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHVuc2lnbmVkIGNoYXIgKmRhdGEsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtNjE1LX1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjYxNjpFWFBPUlRfU1lNQk9MX0dQTChnZXRfaDIyNV9hZGRyKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTYxNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzOTIKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIEguMzIzIEFTTi4xIERlY29kaW5nIGluIG5ldGZpbHRlcioqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUgd29ya3MgYXQgdGhlIEFTTi4xIGxldmVsLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aHJlZSBrZXkgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgcGFyc2luZzogYERlY29kZVJhc01lc3NhZ2VgLCBgRGVjb2RlUTkzMWAsIGFuZCBgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlYC4gVGhlc2UgYXJlIHRoZSBjb3JlIGRlY29kaW5nIHJvdXRpbmVzLCB0aGUgcmVhbCBoZWFydCBvZiB0aGUgQVNOLjEgcGFyc2luZyB3aXRoaW4gbmV0ZmlsdGVyIGZvciB0aGlzIHByb3RvY29sLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgcHJldHR5IGludHJpY2F0ZSBsb2dpYyBoZXJlLCBnaXZlbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgSC4zMjMgcHJvdG9jb2wgc3RhY2sgYW5kIHRoZSBuZWVkIHRvIG1haW50YWluIGNvbm5lY3Rpb24gc3RhdGUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGhvdyB0aGV5IGhhbmRsZSBCRVIvREVSIGVuY29kaW5nLCBob3cgdGhleSBpZGVudGlmeSBtZXNzYWdlIHR5cGVzLCBhbmQgaG93IHRoZSBkZWNvZGVkIGluZm9ybWF0aW9uIGlzIHVzZWQgdG8gdXBkYXRlIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJpZXMuIEl0JiMzOTtzIGEgY3JpdGljYWwgYXJlYSBmb3IgYm90aCBzZWN1cml0eSBhbmQgZnVuY3Rpb25hbGl0eSwgc28gYSB0aG9yb3VnaCByZXZpZXcgaXMgaW4gb3JkZXIuIExldCYjMzk7cyBzZWUgaG93IHdlbGwgdGhleSYjMzk7dmUgaGFuZGxlZCB0aGUgcG90ZW50aWFsIGZvciBidWZmZXIgb3ZlcmZsb3dzIGFuZCBtYWxmb3JtZWQgbWVzc2FnZXMuIFRoaXMgaXMgYWx3YXlzIGEgY29uY2VybiB3aGVuIHBhcnNpbmcgQVNOLjEsIEkga25vdy4gSSBhbHNvIHdhbnQgdG8gc2VlIGhvdyBlZmZpY2llbnRseSB0aGV5IHBhcnNlIGFuZCBzdG9yZSB0aGUgaW5mb3JtYXRpb24uIFRoaXMgd2lsbCBhZmZlY3QgY29ubmVjdGlvbiB0cmFja2luZyBwZXJmb3JtYW5jZSBmb3IgdGhpcyBwcm90b2NvbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RGVjb2RlW0EtWmEtejAtOV9dJiM0MzsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0xMDU9c3RhdGljIHVuc2lnbmVkIGludCBnZXRfdWludChzdHJ1Y3QgYml0c3RyICpicywgaW50IGIpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTA2LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTA3Oi8qIERlY29kZXIgRnVuY3Rpb25zICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMDgtc3RhdGljIGludCBkZWNvZGVfbnVsKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0xMTk9c3RhdGljIGludCBkZWNvZGVfY2hvaWNlKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEyMC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEyMTovKiBEZWNvZGVyIEZ1bmN0aW9ucyBWZWN0b3IgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEyMi10eXBlZGVmIGludCAoKmRlY29kZXJfdCkoc3RydWN0IGJpdHN0ciAqLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqLCBjaGFyICosIGludCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMjM6c3RhdGljIGNvbnN0IGRlY29kZXJfdCBEZWNvZGVyc1tdID0ge1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTI0LVx0ZGVjb2RlX251bCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz01MTE9c3RhdGljIGludCBkZWNvZGVfc2VxKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01NjYtXHRcdFx0LyogRGVjb2RlICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1Njc6XHRcdFx0aWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVx1MDAzZXR5cGVdKSAoYnMsIHNvbiwgYmFzZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU2OC1cdFx0XHRcdFx0XHRcdCAgbGV2ZWwgJiM0MzsgMSkpIFx1MDAzY1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU3My1cdFx0XHRicy1cdTAwM2ViaXQgPSAwO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTc0Olx0XHR9IGVsc2UgaWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVx1MDAzZXR5cGVdKSAoYnMsIHNvbiwgYmFzZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU3NS1cdFx0XHRcdFx0XHRcdCBsZXZlbCAmIzQzOyAxKSkgXHUwMDNjXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjMyLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NjMzOlx0XHRpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXHUwMDNldHlwZV0pIChicywgc29uLCBiYXNlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjM0LVx0XHRcdFx0XHRcdCAgbGV2ZWwgJiM0MzsgMSkpIFx1MDAzY1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTY0ND1zdGF0aWMgaW50IGRlY29kZV9zZXFvZihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzEzLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzE0Olx0XHRcdGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cdTAwM2V0eXBlXSkgKGJzLCBzb24sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MTUtXHRcdFx0XHRcdFx0XHQgIGkgXHUwMDNjXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzI0LVx0XHR9IGVsc2Vcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjcyNTpcdFx0XHRpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXHUwMDNldHlwZV0pIChicywgc29uLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzI2LVx0XHRcdFx0XHRcdFx0ICBpIFx1MDAzY1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTc0MD1zdGF0aWMgaW50IGRlY29kZV9jaG9pY2Uoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgwNy1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgwODpcdFx0aWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVx1MDAzZXR5cGVdKSAoYnMsIHNvbiwgYmFzZSwgbGV2ZWwgJiM0MzsgMSkpIFx1MDAzY1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODA5LVx0XHQgICAgSDMyM19FUlJPUl9OT05FKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgxMy1cdFx0YnMtXHUwMDNlYml0ID0gMDtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgxNDpcdH0gZWxzZSBpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXHUwMDNldHlwZV0pIChicywgc29uLCBiYXNlLCBsZXZlbCAmIzQzOyAxKSkgXHUwMDNjXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MTUtXHRcdCAgIEgzMjNfRVJST1JfTk9ORSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MjAtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo4MjE6aW50IERlY29kZVJhc01lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFJhc01lc3NhZ2UgKnJhcylcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgyMi17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODM1LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODM2OnN0YXRpYyBpbnQgRGVjb2RlSDMyM19Vc2VySW5mb3JtYXRpb24odW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBjaGFyICpiZWcsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MzctXHRcdFx0XHQgICAgICBzaXplX3Qgc3osIEgzMjNfVXNlckluZm9ybWF0aW9uICp1dWllKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTg1Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjg1MzppbnQgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODU0LVx0XHRcdFx0XHQgTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlICpcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NzAtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo4NzE6aW50IERlY29kZVE5MzEodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFE5MzEgKnE5MzEpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NzIte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTkyMi1cdFx0XHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6OTIzOlx0XHRcdHJldHVybiBEZWNvZGVIMzIzX1VzZXJJbmZvcm1hdGlvbihidWYsIHAsIGxlbixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTkyNC1cdFx0XHRcdFx0XHRcdCAgXHUwMDI2cTkzMS1cdTAwM2VVVUlFKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2NTUKCQkJCQkJCW91dHB1dDogMjExCgkJCQkJCQl0aG91Z2h0czogNTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIEguMzIzIENvbm50cmFjayBIZWxwZXIqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgZ29vZCB0YXJnZXQgaGVyZTogdGhlIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIG1vZHVsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgYXQgZnVuY3Rpb25zIGxpa2UgYERlY29kZVJhc01lc3NhZ2VgLCBgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlYCwgYERlY29kZVE5MzFgLCBhbmQgYGdldF9oMjI1X2FkZHJgIC0gdGhlc2UgYXJlIHRoZSBleHRlcm5hbGx5IGxpbmtlZCBmdW5jdGlvbnMsIGFuZCB0aGUgcGFja2V0IGhlbHBlciBjYWxsYmFja3MgKGByYXNfaGVscGAsIGBxOTMxX2hlbHBgLCBgaDI0NV9oZWxwYCkgdGhhdCBgbmZfY29ubnRyYWNrYCBjYWxscy4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gSSByZWFjaCB0aGlzIGNvZGUgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LCBvciBhbnkgdmlydHVhbGl6ZWQgdGVzdCBzZXR1cD8gVGhlIGFuc3dlciBpcyB5ZXMsIGFic29sdXRlbHkuIFRoZXNlIGhlbHBlcnMgYXJlIGRlc2lnbmVkIHRvIHBhcnNlIG5ldHdvcmsgcGFja2V0cywgYW5kIGV2ZW4gaWYgdGhleSBhcmVuJiMzOTt0IGhpdCBuYXR1cmFsbHksIEkgY2FuIGVhc2lseSB0cmlnZ2VyIHRoZW0gdmlhIHJhdyBzb2NrZXRzLCB0YXAgaW50ZXJmYWNlcywgbG9vcGJhY2ssIG9yIGV2ZW4gbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgaW5qZWN0aW9uLgoKVGhpcyBpcyB3b3J0aCB0aGUgZWZmb3J0IHRvIGZ1enouIFRoZXJlJiMzOTtzIGEga25vd24gYnVnIC0gYSBmaXggaGFzIGFscmVhZHkgYmVlbiBpbXBsZW1lbnRlZCAtIGEgZHVwbGljYXRpb24gaW4gdGhlIGJpdHN0cmVhbSBwb2ludGVyIGFkdmFuY2VtZW50IGR1cmluZyBBU04uMSBpbnRlZ2VyIGRlY29kaW5nLiBGdXp6aW5nIEFTTi4xIHBhcnNpbmcgd2l0aGluIHRoZSBuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzIGlzIGEgdmVyeSBzdGFuZGFyZCBhbmQgZWZmZWN0aXZlIGFwcHJvYWNoLiBJdCYjMzk7cyBhIGhpZ2gtdmFsdWUgdGFyZ2V0IGZvciBpZGVudGlmeWluZyB2dWxuZXJhYmlsaXRpZXMuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgb2YgZXZlcnl0aGluZy4gVGhlIGBzZXQtcmVzdWx0c2AgZGF0YSBsb29rcyBnb29kOiBJJiMzOTt2ZSBnb3QgYFdvcnRoRnV6emluZ2Agc2V0IHRvIGB0cnVlYCwgYW5kIHRoZSBgUmVhc29uaW5nYCBjbGVhcmx5IGV4cGxhaW5zIHRoZSBBU04uMSBpbnRlZ2VyIGRlY29kaW5nIGJ1ZyBhbmQgdGhlIHNwZWNpZmljIGZpbGUgKGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2ApLiBUaGUgYEZvY3VzU3ltYm9sc2AgbGlzdCBpcyBhY2N1cmF0ZSwgYW5kIGFsbCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIChgTkZfQ09OTlRSQUNLX0gzMjNgLCBgTkZfQ09OTlRSQUNLYCwgYE5FVEZJTFRFUmAsIGFuZCBgTkVURklMVEVSX0FEVkFOQ0VEYCkgYXJlIGlkZW50aWZpZWQuCgpMZXQgbWUgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgYWdhaW5zdCB0aGUgS2NvbmZpZy4gYE5GX0NPTk5UUkFDS19IMzIzYCBkZXBlbmRzIG9uIGBORVRGSUxURVJfQURWQU5DRURgIGFuZCBmYWxscyB1bmRlciBhIGJyb2FkZXIgZGVwZW5kZW5jeSBzdHJ1Y3R1cmUgd2hpY2ggbG9va3MgY29ycmVjdC4gVGhlIGNvbmZpZyBsaXN0IGlzIGFjY3VyYXRlLCBhbmQgdGhlIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBpcyB3aGF0IEkgZXhwZWN0LgoKT2theSwgZXZlcnl0aGluZyBsb29rcyBnb29kLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDS19IMzIzJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7RGVjb2RlUmFzTWVzc2FnZSYjMzQ7LAogICAgJiMzNDtEZWNvZGVROTMxJiMzNDssCiAgICAmIzM0O0RlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSYjMzQ7LAogICAgJiMzNDtnZXRfaDIyNV9hZGRyJiMzNDssCiAgICAmIzM0O3Jhc19oZWxwJiMzNDssCiAgICAmIzM0O3E5MzFfaGVscCYjMzQ7LAogICAgJiMzNDtoMjQ1X2hlbHAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEguMzIzIGNvbm50cmFjayBoZWxwZXImIzM5O3MgQVNOLjEgaW50ZWdlciBkZWNvZGVyIChuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYykgd2hlcmUgZ2V0X3VpbnQoKSBhZHZhbmNlZCB0aGUgYml0c3RyZWFtIHBvaW50ZXIgYW5kIGRlY29kZV9pbnQoKSBhZHZhbmNlZCBpdCBhZ2Fpbi4gVGhpcyBhZmZlY3RzIHJlYWNoYWJpbGl0eSBhbmQgcGFyc2luZyBsb2dpYyBmb3IgSC4zMjMvUS45MzEvUkFTIG5ldHdvcmsgdHJhZmZpYyBpbiB0aGUgTmV0ZmlsdGVyIHN1YnN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0gzMjMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtEZWNvZGVSYXNNZXNzYWdlJiMzNDssCiAgICAmIzM0O0RlY29kZVE5MzEmIzM0OywKICAgICYjMzQ7RGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlJiMzNDssCiAgICAmIzM0O2dldF9oMjI1X2FkZHImIzM0OywKICAgICYjMzQ7cmFzX2hlbHAmIzM0OywKICAgICYjMzQ7cTkzMV9oZWxwJiMzNDssCiAgICAmIzM0O2gyNDVfaGVscCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgSC4zMjMgY29ubnRyYWNrIGhlbHBlciYjMzk7cyBBU04uMSBpbnRlZ2VyIGRlY29kZXIgKG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jKSB3aGVyZSBnZXRfdWludCgpIGFkdmFuY2VkIHRoZSBiaXRzdHJlYW0gcG9pbnRlciBhbmQgZGVjb2RlX2ludCgpIGFkdmFuY2VkIGl0IGFnYWluLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmlsaXR5IGFuZCBwYXJzaW5nIGxvZ2ljIGZvciBILjMyMy9RLjkzMS9SQVMgbmV0d29yayB0cmFmZmljIGluIHRoZSBOZXRmaWx0ZXIgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb2ludGVyIGFkdmFuY2VtZW50IGJ1ZyBpbiBgZGVjb2RlX2ludCgpYCB3aXRoaW4gdGhlIE5ldGZpbHRlciBILjMyMyBBU04uMSBjb25udHJhY2sgaGVscGVyIChgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgKS4gSW4gYGNhc2UgQ09OUzpgLCBgZ2V0X3VpbnQoYnMsIGxlbilgIGFkdmFuY2VzIGBicy1cdTAwM2VjdXJgIGludGVybmFsbHkgYnkgYGxlbmAgYnl0ZXM7IHByZXZpb3VzbHksIGBicy1cdTAwM2VjdXIgJiM0Mzs9IGxlbmAgd2FzIGFsc28gZXhlY3V0ZWQgdW5jb25kaXRpb25hbGx5IGFmdGVyd2FyZHMsIGFkdmFuY2luZyB0aGUgYml0c3RyZWFtIGN1cnNvciB0d2ljZSB3aGVuIGRlY29kaW5nIGludGVnZXJzLiBUaGUgcGF0Y2ggbW92ZXMgYGJzLVx1MDAzZWN1ciAmIzQzOz0gbGVuYCBpbnRvIHRoZSBgZWxzZWAgYnJhbmNoLlxuXG5UaGlzIGNoYW5nZSBzdHJpY3RseSBhZGRyZXNzZXMgc3RyZWFtIHBhcnNpbmcgcG9pbnRlciBtYW5pcHVsYXRpb24gb24gaW5jb21pbmcgbmV0d29yayBwYWNrZXQgYnVmZmVycyAoYHNrYmAgZGF0YSkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBQb3RlbnRpYWwgbWVtb3J5IGlzc3VlcyByZWxhdGVkIHRvIHN0cmVhbSBib3VuZHMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgZXJyb3IgYm91bmRhcnkgY2hlY2tzIChgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRlNzhjN2EwYjdkYmVkNTUyMmYwMGYyNGUyYzE3ZjUyZTFjMDIzOTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAwMjowMjo1MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMKaW5kZXggNjgzMGM5ZGEzNTA3Yy4uYTUxMjc1Y2M0ZDBmNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMKQEAgLTMzNiw4ICYjNDM7MzM2LDkgQEAgc3RhdGljIGludCBkZWNvZGVfaW50KHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwKIAkJCXVuc2lnbmVkIGludCB2ID0gZ2V0X3VpbnQoYnMsIGxlbikgJiM0MzsgZi0mZ3Q7bGI7CiAJCQlQUklOVCgmIzM0OyA9ICV1JiMzNDssIHYpOwogCQkJKigodW5zaWduZWQgaW50ICopKGJhc2UgJiM0MzsgZi0mZ3Q7b2Zmc2V0KSkgPSB2OwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlicy0mZ3Q7Y3VyICYjNDM7PSBsZW47CiAJCX0KLQkJYnMtJmd0O2N1ciAmIzQzOz0gbGVuOwogCQlicmVhazsKIAljYXNlIFVOQ086CiAJCUJZVEVfQUxJR04oYnMpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyOQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDQxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExpbnV4IEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBkZWNpZGUgaWYgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIHdhcnJhbnRlZCBmb3IgdGhpcyBrZXJuZWwgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzc2VzcyB0aGUgcmlzayBsZXZlbC4gVGhpcyBsb29rcyBsaWtlIGEgY29kZSByZXZpZXcsIHNwZWNpZmljYWxseSBhIHRyaWFnZSB0byBkZXRlcm1pbmUgaWYgS0FTQU4gb3IgS01TQU4gaXMgbW9yZSBhcHByb3ByaWF0ZS4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgdGhpcyBmYWxscyBzcXVhcmVseSBpbnRvIHRoZSAmIzM0O2Jlbmlnbi9kZWZlbnNpdmUgc2VjdXJpdHkvY29kZSBhbmFseXNpcyYjMzQ7IGNhdGVnb3J5LiBObyBpbW1lZGlhdGUgcmVkIGZsYWdzLCBzbyBJIGNhbiBzYWZlbHkgcHJvY2VlZC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZSBpdHNlbGYuIEkgc2VlIGEgYGRpZmZgIHByZXNlbnRlZC4gTG9va3MgbGlrZSB3ZSYjMzk7cmUgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYC4gIEkmIzM5O2xsIGV4YW1pbmUgdGhlIHBhdGNoLCBmb2N1c2luZyBvbiB0aGUgY2hhbmdlcyBhcm91bmQgbGluZSAzMzYuIFRoZSBjb2RlIGRlYWxzIHdpdGggZGVjb2Rpbmcgc29tZSBpbnRlZ2VyIHZhbHVlcyB3aXRoaW4gYSBiaXRzdHJlYW0gdXNpbmcgYSBjdXN0b20gYGRlY29kZV9pbnRgIGZ1bmN0aW9uLiBUaGUgb3JpZ2luYWwgY29kZSBpbmNyZW1lbnRlZCB0aGUgYml0c3RyZWFtIGN1cnNvciBgYnMtJmd0O2N1cmAgcmVnYXJkbGVzcyBpZiB0aGUgdW5zaWduZWQgaW50IHdhcyBhY3R1YWxseSBhc3NpZ25lZCBhIHZhbHVlLiBUaGUgbmV3IHZlcnNpb24gc2tpcHMgaW5jcmVtZW50aW5nIHRoZSBiaXRzdHJlYW0gaWYgdGhlIGludCB2YWx1ZSBpcyBub3QgYXNzaWduZWQuIFRoaXMgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBidWctZml4LgoKSSYjMzk7bGwgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBnZXQgYSBiZXR0ZXIgY29udGV4dCBmb3IgdGhlIGNvZGUgYXJvdW5kIGxpbmUgMzM2LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMgYW5kIHNlZSBpZiB0aGlzIGZpeCByZXZlYWxzIGFueSB1bmRlcmx5aW5nIHZ1bG5lcmFiaWxpdGllcyBvciBhcmVhcyB0aGF0IG1pZ2h0IGJlbmVmaXQgZnJvbSBmdXp6aW5nLiBUaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhIG1lbW9yeSBzYWZldHkgY29uY2VybiB0aGF0IEtNU0FOIGlzIHBhcnRpY3VsYXJseSBzdWl0ZWQgdG8gZXhwb3NlLiBPbmNlIEkmIzM5O3ZlIHJldmlld2VkIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBJJiMzOTtsbCBiZSBpbiBhIGJldHRlciBwb3NpdGlvbiB0byBtYWtlIGEgcmVjb21tZW5kYXRpb24gb24gd2hldGhlciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbmVjZXNzYXJ5IG9yIGlmIEtBU0FOIGFsb25lIGlzIHN1ZmZpY2llbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwMDpcdFx0QllURV9BTElHTihicyk7XG4gMzAxOlx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMSwgMCkpXG4gMzAyOlx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDMwMzpcdFxuIDMwNDpcdFx0bGVuID0gKmJzLVx1MDAzZWN1ciYjNDM7JiM0Mzs7XG4gMzA1Olx0XHRicy1cdTAwM2VjdXIgJiM0Mzs9IGxlbjtcbiAzMDY6XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcbiAzMDc6XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4gMzA4Olx0XG4gMzA5Olx0XHRyZXR1cm4gSDMyM19FUlJPUl9OT05FO1xuIDMxMDpcdH1cbiAzMTE6XHRcbiAzMTI6XHRzdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIDMxMzpcdCAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4gMzE0Olx0e1xuIDMxNTpcdFx0dW5zaWduZWQgaW50IGxlbjtcbiAzMTY6XHRcbiAzMTc6XHRcdFBSSU5UKFwmIzM0OyUqcyVzXCYjMzQ7LCBsZXZlbCAqIFRBQl9TSVpFLCBcJiMzNDsgXCYjMzQ7LCBmLVx1MDAzZW5hbWUpO1xuIDMxODpcdFxuIDMxOTpcdFx0c3dpdGNoIChmLVx1MDAzZXN6KSB7XG4gMzIwOlx0XHRjYXNlIEJZVEU6XHRcdC8qIFJhbmdlID09IDI1NiAqL1xuIDMyMTpcdFx0XHRCWVRFX0FMSUdOKGJzKTtcbiAzMjI6XHRcdFx0YnMtXHUwMDNlY3VyJiM0MzsmIzQzOztcbiAzMjM6XHRcdFx0YnJlYWs7XG4gMzI0Olx0XHRjYXNlIFdPUkQ6XHRcdC8qIDI1NyBcdTAwM2M9IFJhbmdlIFx1MDAzYz0gNjRLICovXG4gMzI1Olx0XHRcdEJZVEVfQUxJR04oYnMpO1xuIDMyNjpcdFx0XHRicy1cdTAwM2VjdXIgJiM0Mzs9IDI7XG4gMzI3Olx0XHRcdGJyZWFrO1xuIDMyODpcdFx0Y2FzZSBDT05TOlx0XHQvKiA2NEsgXHUwMDNjIFJhbmdlIFx1MDAzYyA0RyAqL1xuIDMyOTpcdFx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMikpXG4gMzMwOlx0XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4gMzMxOlx0XHRcdGxlbiA9IGdldF9iaXRzKGJzLCAyKSAmIzQzOyAxO1xuIDMzMjpcdFx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgbGVuLCAwKSlcbiAzMzM6XHRcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiAzMzQ6XHRcdFx0QllURV9BTElHTihicyk7XG4gMzM1Olx0XHRcdGlmIChiYXNlIFx1MDAyNlx1MDAyNiAoZi1cdTAwM2VhdHRyIFx1MDAyNiBERUNPREUpKSB7XHQvKiB0aW1lVG9MaXZlICovXG4gMzM2Olx0XHRcdFx0dW5zaWduZWQgaW50IHYgPSBnZXRfdWludChicywgbGVuKSAmIzQzOyBmLVx1MDAzZWxiO1xuIDMzNzpcdFx0XHRcdFBSSU5UKFwmIzM0OyA9ICV1XCYjMzQ7LCB2KTtcbiAzMzg6XHRcdFx0XHQqKCh1bnNpZ25lZCBpbnQgKikoYmFzZSAmIzQzOyBmLVx1MDAzZW9mZnNldCkpID0gdjtcbiAzMzk6XHRcdFx0fSBlbHNlIHtcbiAzNDA6XHRcdFx0XHRicy1cdTAwM2VjdXIgJiM0Mzs9IGxlbjtcbiAzNDE6XHRcdFx0fVxuIDM0MjpcdFx0XHRicmVhaztcbiAzNDM6XHRcdGNhc2UgVU5DTzpcbiAzNDQ6XHRcdFx0QllURV9BTElHTihicyk7XG4gMzQ1Olx0XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcbiAzNDY6XHRcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiAzNDc6XHRcdFx0bGVuID0gZ2V0X2xlbihicyk7XG4gMzQ4Olx0XHRcdGJzLVx1MDAzZWN1ciAmIzQzOz0gbGVuO1xuIDM0OTpcdFx0XHRicmVhaztcbiAzNTA6XHRcdGRlZmF1bHQ6XHRcdC8qIDIgXHUwMDNjPSBSYW5nZSBcdTAwM2M9IDI1NSAqL1xuIDM1MTpcdFx0XHRJTkNfQklUUyhicywgZi1cdTAwM2Vzeik7XG4gMzUyOlx0XHRcdGJyZWFrO1xuIDM1MzpcdFx0fVxuIDM1NDpcdFxuIDM1NTpcdFx0UFJJTlQoXCYjMzQ7XFxuXCYjMzQ7KTtcbiAzNTY6XHRcbiAzNTc6XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcbiAzNTg6XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4gMzU5Olx0XHRyZXR1cm4gSDMyM19FUlJPUl9OT05FO1xuIDM2MDpcdH1cbiAzNjE6XHRcbiAzNjI6XHRzdGF0aWMgaW50IGRlY29kZV9lbnVtKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbiAzNjM6XHQgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcbiAzNjQ6XHR7XG4gMzY1Olx0XHRQUklOVChcJiMzNDslKnMlc1xcblwmIzM0OywgbGV2ZWwgKiBUQUJfU0laRSwgXCYjMzQ7IFwmIzM0OywgZi1cdTAwM2VuYW1lKTtcbiAzNjY6XHRcbiAzNjc6XHRcdGlmICgoZi1cdTAwM2VhdHRyIFx1MDAyNiBFWFQpIFx1MDAyNlx1MDAyNiBnZXRfYml0KGJzKSkge1xuIDM2ODpcdFx0XHRJTkNfQklUUyhicywgNyk7XG4gMzY5Olx0XHR9IGVsc2Uge1xuIDM3MDpcdFx0XHRJTkNfQklUUyhicywgZi1cdTAwM2Vzeik7XG4gMzcxOlx0XHR9XG4gMzcyOlx0XG4gMzczOlx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMCkpXG4gMzc0Olx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDM3NTpcdFx0cmV0dXJuIEgzMjNfRVJST1JfTk9ORTtcbiAzNzY6XHR9XG4gMzc3Olx0XG4gMzc4Olx0c3RhdGljIGludCBkZWNvZGVfYml0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbiAzNzk6XHQgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTg3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywga2VlcGluZyBpbiBtaW5kIG15IG93biBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBgZ2V0X3VpbnRgIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJlaGF2aW9yIG9mIHRoaXMgYGdldF91aW50YCBmdW5jdGlvbi4gV2hlcmUgaXMgdGhpcyB0aGluZyBkZWZpbmVkPyBJdCYjMzk7cyBwcm9iYWJseSBpbiB0aGUgYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgZmlsZSwgb3IgcGVyaGFwcyBpbmNsdWRlZCBpbiBvbmUgb2YgdGhlIGhlYWRlcnMgd2l0aGluIHRoYXQgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlIGNvZGUg4oCTIG5vIHJvb20gZm9yIGd1ZXNzd29yayBoZXJlLiBUaW1lIHRvIHB1bGwgdXAgdGhlIHJlbGV2YW50IGZpbGVzIGFuZCBkaXNzZWN0IHRoaXMgZnVuY3Rpb24mIzM5O3MgbG9naWMuIEkgbmVlZCB0byBleGFtaW5lIHByZWNpc2VseSBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgY29ubnRyYWNrIG1vZHVsZSBhbmQsIGJ5IGV4dGVuc2lvbiwgdGhlIEguMzIzIHByb3RvY29sIGhhbmRsaW5nLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQ7IHVuZGVyc3RhbmRpbmcgdGhpcyBsb3ctbGV2ZWwgZnVuY3Rpb24gaXMgY3JpdGljYWwgdG8gZ3Jhc3BpbmcgaG93IHRoZSBzeXN0ZW0gaW50ZXJwcmV0cyB0aGUgQVNOLjEgZGF0YSBzdHJlYW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfdWludCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTEwND1zdGF0aWMgdW5zaWduZWQgaW50IGdldF9iaXRtYXAoc3RydWN0IGJpdHN0ciAqYnMsIHVuc2lnbmVkIGludCBiKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEwNTpzdGF0aWMgdW5zaWduZWQgaW50IGdldF91aW50KHN0cnVjdCBiaXRzdHIgKmJzLCBpbnQgYik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMDYtXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MjExPXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdG1hcChzdHJ1Y3QgYml0c3RyICpicywgdW5zaWduZWQgaW50IGIpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjQ5LSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MjUwOnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VpbnQoc3RydWN0IGJpdHN0ciAqYnMsIGludCBiKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjUxLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0zMTI9c3RhdGljIGludCBkZWNvZGVfaW50KHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zMzUtXHRcdGlmIChiYXNlIFx1MDAyNlx1MDAyNiAoZi1cdTAwM2VhdHRyIFx1MDAyNiBERUNPREUpKSB7XHQvKiB0aW1lVG9MaXZlICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozMzY6XHRcdFx0dW5zaWduZWQgaW50IHYgPSBnZXRfdWludChicywgbGVuKSAmIzQzOyBmLVx1MDAzZWxiO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzM3LVx0XHRcdFBSSU5UKFwmIzM0OyA9ICV1XCYjMzQ7LCB2KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jPTY4MD12b2lkIG5mX2Nvbm50cmFja19wcm90b19wZXJuZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy02OTYtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjY5Nzptb2R1bGVfcGFyYW1fY2FsbChoYXNoc2l6ZSwgbmZfY29ubnRyYWNrX3NldF9oYXNoc2l6ZSwgcGFyYW1fZ2V0X3VpbnQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTY5OC1cdFx0ICBcdTAwMjZuZl9jb25udHJhY2tfaHRhYmxlX3NpemUsIDA2MDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDQ3CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgYGdldF91aW50YCBmdW5jdGlvbiBpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgLgoKKipEaXZpbmcgaW50byBgZ2V0X3VpbnRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoYXQgYGdldF91aW50YCBmdW5jdGlvbiBpbiB0aGUgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBjb2RlLiBTcGVjaWZpY2FsbHksIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AuIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCB0aGUgQVNOLjEgcGFyc2luZyBjb250ZXh0IHRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMgd2l0aGluLiBDb25zaWRlcmluZyB0aGUgbG93LWxldmVsIEFTTi4xIGVuY29kaW5nIHByaW5jaXBsZXMsIHRoaXMgZnVuY3Rpb24gaXMgcHJvYmFibHkgdGFza2VkIHdpdGggZXh0cmFjdGluZyBhbiB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGZyb20gYSBidWZmZXIgZm9ybWF0dGVkIGFjY29yZGluZyB0byBJVFUtVCBYLjY5MCAoREVSL0JFUikgb3Igd2hhdGV2ZXIgc3Vic2V0IHRoZXkgYXJlIHVzaW5nLiBJIGV4cGVjdCB0byBzZWUgaXQgaGFuZGxpbmcgdmFyaWFibGUtbGVuZ3RoIGVuY29kaW5ncywgcG90ZW50aWFsbHkgY2hlY2tpbmcgZm9yIHRoZSBtaW5pbXVtIG51bWJlciBvZiBvY3RldHMgcmVxdWlyZWQgdG8gcmVwcmVzZW50IHRoZSB2YWx1ZSwgYW5kIGxpa2VseSBkZWFsaW5nIHdpdGggbGVhZGluZyB6ZXJvIGJ5dGVzIHRoYXQgbWlnaHQgYmUgcHJlc2VudCBpbiB0aGUgZW5jb2RlZCByZXByZXNlbnRhdGlvbiBkZXBlbmRpbmcgb24gd2hpY2ggJiMzNDt0YWcmIzM0OyBjbGFzcyB0aGUgaW50ZWdlciBpcyBiZWluZyBlbmNvZGVkIHdpdGguIFRoaXMgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGluIHRlcm1zIG9mIGhvdyBpdCBleHRyYWN0cyBhIHZhbHVlIGFuZCB3aGV0aGVyIGl0IG1pZ2h0IGJlIHZ1bG5lcmFibGUgdG8gdGhpbmdzIGxpa2Ugb3ZlcmxvbmcgZW5jb2RpbmdzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGhvdyBpdCBoYW5kbGVzIGNhc2VzIHdoZXJlIHRoZSBidWZmZXIgbWlnaHQgYmUgdHJ1bmNhdGVkIG9yIGludmFsaWQsIGFuZCBtYWtlIHN1cmUgdGhhdCBpdCYjMzk7cyByb2J1c3QgaW4gdGhhdCBjb250ZXh0LiBJIHdhbnQgdG8gc2VlIGlmIHRoZXkmIzM5O3JlIHZhbGlkYXRpbmcgdGhlIGxlbmd0aCBmaWVsZCBwcm9wZXJseSBhbmQgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIHBvdGVudGlhbCBvdmVyZmxvd3Mg4oCTIHRoYXQmIzM5O3Mgb2Z0ZW4gYSBzb3VyY2Ugb2YgdnVsbmVyYWJpbGl0aWVzIHdoZW4gZGVhbGluZyB3aXRoIHVuc2lnbmVkIGludGVnZXJzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIG9mZi1ieS1vbmUgZXJyb3JzIGluIHRoZWlyIGluZGV4aW5nIGFzIHdlbGwuIExldCYjMzk7cyBzZWUgaG93IHdlbGwgaXQmIzM5O3MgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0MDpcdFx0fVxuIDI0MTpcdFxuIDI0MjpcdFx0diBcdTAwMjY9IDB4ZmZmZmZmZmYgXHUwMDNjXHUwMDNjICgzMiAtIGIpO1xuIDI0MzpcdFxuIDI0NDpcdFx0cmV0dXJuIHY7XG4gMjQ1Olx0fVxuIDI0NjpcdFxuIDI0NzpcdC8qXG4gMjQ4Olx0ICogQXNzdW1lIGJzIGlzIGFsaWduZWQgYW5kIHNpemVvZih1bnNpZ25lZCBpbnQpID09IDRcbiAyNDk6XHQgKi9cbiAyNTA6XHRzdGF0aWMgdW5zaWduZWQgaW50IGdldF91aW50KHN0cnVjdCBiaXRzdHIgKmJzLCBpbnQgYilcbiAyNTE6XHR7XG4gMjUyOlx0XHR1bnNpZ25lZCBpbnQgdiA9IDA7XG4gMjUzOlx0XG4gMjU0Olx0XHRzd2l0Y2ggKGIpIHtcbiAyNTU6XHRcdGNhc2UgNDpcbiAyNTY6XHRcdFx0diB8PSAqYnMtXHUwMDNlY3VyJiM0MzsmIzQzOztcbiAyNTc6XHRcdFx0diBcdTAwM2NcdTAwM2M9IDg7XG4gMjU4Olx0XHRcdGZhbGx0aHJvdWdoO1xuIDI1OTpcdFx0Y2FzZSAzOlxuIDI2MDpcdFx0XHR2IHw9ICpicy1cdTAwM2VjdXImIzQzOyYjNDM7O1xuIDI2MTpcdFx0XHR2IFx1MDAzY1x1MDAzYz0gODtcbiAyNjI6XHRcdFx0ZmFsbHRocm91Z2g7XG4gMjYzOlx0XHRjYXNlIDI6XG4gMjY0Olx0XHRcdHYgfD0gKmJzLVx1MDAzZWN1ciYjNDM7JiM0Mzs7XG4gMjY1Olx0XHRcdHYgXHUwMDNjXHUwMDNjPSA4O1xuIDI2NjpcdFx0XHRmYWxsdGhyb3VnaDtcbiAyNjc6XHRcdGNhc2UgMTpcbiAyNjg6XHRcdFx0diB8PSAqYnMtXHUwMDNlY3VyJiM0MzsmIzQzOztcbiAyNjk6XHRcdFx0YnJlYWs7XG4gMjcwOlx0XHR9XG4gMjcxOlx0XHRyZXR1cm4gdjtcbiAyNzI6XHR9XG4gMjczOlx0XG4gMjc0Olx0c3RhdGljIGludCBkZWNvZGVfbnVsKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbiAyNzU6XHQgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxuIDI3NjpcdHtcbiAyNzc6XHRcdFBSSU5UKFwmIzM0OyUqcyVzXFxuXCYjMzQ7LCBsZXZlbCAqIFRBQl9TSVpFLCBcJiMzNDsgXCYjMzQ7LCBmLVx1MDAzZW5hbWUpO1xuIDI3ODpcdFxuIDI3OTpcdFx0cmV0dXJuIEgzMjNfRVJST1JfTk9ORTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk2NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDU2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDcml0aWNhbCBBU04uMSBEZWNvZGluZyBCdWcqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBkZWNvZGVfaW50YCBmdW5jdGlvbiwgYW5kIHNvbWV0aGluZyBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXQgbWUgcmVnYXJkaW5nIGhvdyBgYnMtJmd0O2N1cmAgaXMgYmVpbmcgbWFuYWdlZC4gU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgbG9vayBhdCBgZ2V0X3VpbnRgLiBQcmV2aW91c2x5LCBgZ2V0X3VpbnQoYnMsIGxlbilgIHdhcyBkZWZpbmVkIGluIGEgd2F5IHRoYXQgaXQgaW5jcmVtZW50cyBgYnMtJmd0O2N1cmAgYnkgYGxlbmAgYnl0ZXMuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBhZHZhbmNpbmcgYGJzLSZndDtjdXJgIHVzaW5nIGAqYnMtJmd0O2N1ciYjNDM7JiM0MztgIHdpdGhpbiB0aGUgYGdldF91aW50YCBmdW5jdGlvbiBpdHNlbGYuCgpOb3csIGNvbnNpZGVyIHRoaXMgc2NlbmFyaW8gd2l0aGluIGBkZWNvZGVfaW50YCB1bmRlciB0aGUgYENPTlNgIGNhc2UuIFdlIGRldGVybWluZSBhIGBsZW5gIHZhbHVlLiBUaGVuLCBpZiB3ZSBoaXQgdGhlIGBpZiAoYmFzZSAmYW1wOyZhbXA7IChmLSZndDthdHRyICZhbXA7IERFQ09ERSkpYCBjb25kaXRpb24sIGBnZXRfdWludChicywgbGVuKWAgKmFscmVhZHkqIGFkdmFuY2VzIGBicy0mZ3Q7Y3VyYCBieSBgbGVuYC4gQnV0IHRoZW4sICp1bmNvbmRpdGlvbmFsbHkqLCBhZnRlciB0aGF0IGNvbmRpdGlvbmFsIGJsb2NrLCB3ZSBmaW5kIGBicy0mZ3Q7Y3VyICYjNDM7PSBsZW47YC4KCkhhbmcgb24gYSBtaW51dGUhIFRoYXQmIzM5O3MgdGhlIHByb2JsZW0uIEl0IG1lYW5zIHRoYXQgd2hlbiB0aGUgYGlmYCBzdGF0ZW1lbnQgaXMgdHJ1ZSwgd2UmIzM5O3JlIGVmZmVjdGl2ZWx5IGluY3JlbWVudGluZyBgYnMtJmd0O2N1cmAgYnkgYGxlbmAgKnR3aWNlKi4gT25jZSBpbnNpZGUgYGdldF91aW50YCwgYW5kIHRoZW4gYWdhaW4gYWZ0ZXIgYGdldF91aW50YCBjb21wbGV0ZXMuIFdoZW4gdGhlIGBpZmAgc3RhdGVtZW50IGlzIGZhbHNlLCBgYnMtJmd0O2N1ciAmIzQzOz0gbGVuO2AgaGFwcGVucyBvbmx5IG9uY2UuCgpTbywgdGhlIGJ1ZyBpcyBjbGVhcjogaW4gYGRlY29kZV9pbnRgIHRoZSBjb2RlIHdhcyBhZHZhbmNpbmcgdGhlIGJ1ZmZlciBwb2ludGVyLCBgYnMtJmd0O2N1cmAgYnkgYGxlbmAgYnl0ZXMgdHdpY2Ugd2hlbiBhIHNwZWNpZmljIGRlY29kaW5nIGNvbmRpdGlvbiB3YXMgbWV0LiBUaGlzIGV4cGxhaW5zIHRoZSBwb3RlbnRpYWwgZm9yIHNraXBwZWQgZGF0YSwgbWlzLXBhcnNpbmcsIGFuZCB0aGUgcmlzayBvZiBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGlzIGluY29ycmVjdCBvZmZzZXQgd2lsbCBjZXJ0YWlubHkgd3JlYWsgaGF2b2Mgb24gc3Vic2VxdWVudCBBU04uMSBmaWVsZCBkZWNvZGluZy4KClNpbmNlIGBicy0mZ3Q7Y3VyYCBwb2ludHMgdG8gYW4gaW5jb21pbmcgbmV0d29yayBwYWNrZXQsIGxpa2VseSBmcm9tIGFuIGBza2JgIGJ1ZmZlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgYml0c3RyYCBzdHJ1Y3R1cmUgYW5kIGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YCBmdW5jdGlvbiB3b3JrLiBUaG9zZSBhcmUgdGhlIGtleSBwaWVjZXMgbm93LiBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgdGhlIGJ1ZmZlcnMgYXJlIGNvbWluZyBmcm9tLiBUaW1lIHRvIGRpZyB0aHJvdWdoIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgYml0c3RyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9NzU9dHlwZWRlZiBzdHJ1Y3QgZmllbGRfdCB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODgtLyogQml0IFN0cmVhbSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODk6c3RydWN0IGJpdHN0ciB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy05MC1cdHVuc2lnbmVkIGNoYXIgKmJ1Zjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMDAtI2RlZmluZSBCWVRFX0FMSUdOKGJzKSBpZigoYnMpLVx1MDAzZWJpdCl7KGJzKS1cdTAwM2VjdXImIzQzOyYjNDM7OyhicyktXHUwMDNlYml0PTA7fVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTAxOnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2xlbihzdHJ1Y3QgYml0c3RyICpicyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMDI6c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0KHN0cnVjdCBiaXRzdHIgKmJzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEwMzpzdGF0aWMgdW5zaWduZWQgaW50IGdldF9iaXRzKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMDQ6c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0bWFwKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMDU6c3RhdGljIHVuc2lnbmVkIGludCBnZXRfdWludChzdHJ1Y3QgYml0c3RyICpicywgaW50IGIpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTA2LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTA3LS8qIERlY29kZXIgRnVuY3Rpb25zICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMDg6c3RhdGljIGludCBkZWNvZGVfbnVsKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEwOTpzdGF0aWMgaW50IGRlY29kZV9ib29sKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjExMDpzdGF0aWMgaW50IGRlY29kZV9vaWQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTExOnN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTI6c3RhdGljIGludCBkZWNvZGVfZW51bShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTM6c3RhdGljIGludCBkZWNvZGVfYml0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjExNDpzdGF0aWMgaW50IGRlY29kZV9udW1zdHIoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTE1OnN0YXRpYyBpbnQgZGVjb2RlX29jdHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTY6c3RhdGljIGludCBkZWNvZGVfYm1wc3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjExNzpzdGF0aWMgaW50IGRlY29kZV9zZXEoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTE4OnN0YXRpYyBpbnQgZGVjb2RlX3NlcW9mKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjExOTpzdGF0aWMgaW50IGRlY29kZV9jaG9pY2Uoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTIwLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTIxLS8qIERlY29kZXIgRnVuY3Rpb25zIFZlY3RvciAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTIyOnR5cGVkZWYgaW50ICgqZGVjb2Rlcl90KShzdHJ1Y3QgYml0c3RyICosIGNvbnN0IHN0cnVjdCBmaWVsZF90ICosIGNoYXIgKiwgaW50KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEyMy1zdGF0aWMgY29uc3QgZGVjb2Rlcl90IERlY29kZXJzW10gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTQ3LS8qIEFzc3VtZSBicyBpcyBhbGlnbmVkIFx1MDAyNlx1MDAyNiB2IFx1MDAzYyAxNjM4NCAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTQ4OnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2xlbihzdHJ1Y3QgYml0c3RyICpicylcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE0OS17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTYyLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTYzOnN0YXRpYyBpbnQgbmZfaDMyM19lcnJvcl9ib3VuZGFyeShzdHJ1Y3QgYml0c3RyICpicywgc2l6ZV90IGJ5dGVzLCBzaXplX3QgYml0cylcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE2NC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTc1LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTc2OnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdChzdHJ1Y3QgYml0c3RyICpicylcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE3Ny17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTg1LS8qIEFzc3VtZSBiIFx1MDAzYz0gOCAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTg2OnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdHMoc3RydWN0IGJpdHN0ciAqYnMsIHVuc2lnbmVkIGludCBiKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTg3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yMTAtLyogQXNzdW1lIGIgXHUwMDNjPSAzMiAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MjExOnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdG1hcChzdHJ1Y3QgYml0c3RyICpicywgdW5zaWduZWQgaW50IGIpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yMTIte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTI0OS0gKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjI1MDpzdGF0aWMgdW5zaWduZWQgaW50IGdldF91aW50KHN0cnVjdCBiaXRzdHIgKmJzLCBpbnQgYilcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTI1MS17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjczLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6Mjc0OnN0YXRpYyBpbnQgZGVjb2RlX251bChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yNzUtICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yODEtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoyODI6c3RhdGljIGludCBkZWNvZGVfYm9vbChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yODMtICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjkyLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MjkzOnN0YXRpYyBpbnQgZGVjb2RlX29pZChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yOTQtICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zMTEtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozMTI6c3RhdGljIGludCBkZWNvZGVfaW50KHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMxMy0gICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM2MS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjM2MjpzdGF0aWMgaW50IGRlY29kZV9lbnVtKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM2My0gICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zNzctXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozNzg6c3RhdGljIGludCBkZWNvZGVfYml0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM3OS0gICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQxMy1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjQxNDpzdGF0aWMgaW50IGRlY29kZV9udW1zdHIoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDE1LSAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDMzLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NDM0OnN0YXRpYyBpbnQgZGVjb2RlX29jdHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00MzUtICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00ODEtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo0ODI6c3RhdGljIGludCBkZWNvZGVfYm1wc3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ4My0gICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTUxMC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjUxMTpzdGF0aWMgaW50IGRlY29kZV9zZXEoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTEyLSAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjQzLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NjQ0OnN0YXRpYyBpbnQgZGVjb2RlX3NlcW9mKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY0NS0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzM5LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzQwOnN0YXRpYyBpbnQgZGVjb2RlX2Nob2ljZShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03NDEtICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz04MjE9aW50IERlY29kZVJhc01lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFJhc01lc3NhZ2UgKnJhcylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MjYtXHR9O1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODI3Olx0c3RydWN0IGJpdHN0ciBicztcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgyOC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz04MzY9c3RhdGljIGludCBEZWNvZGVIMzIzX1VzZXJJbmZvcm1hdGlvbih1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGNoYXIgKmJlZyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NDItXHR9O1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODQzOlx0c3RydWN0IGJpdHN0ciBicztcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTg0NC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz04NTM9aW50IERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NjAtXHR9O1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODYxOlx0c3RydWN0IGJpdHN0ciBicztcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTg2Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NzcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYERlY29kZVJhc01lc3NhZ2VgIFVzYWdlIGluIG5mX2Nvbm50cmFja19oMzIzX21haW4uYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgYERlY29kZVJhc01lc3NhZ2VgIGZ1bmN0aW9uIGlzIGJlaW5nIGxldmVyYWdlZCB3aXRoaW4gdGhlIGBuZl9jb25udHJhY2tfaDMyM19tYWluLmNgIGZpbGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIG5ldGZpbHRlciBjb250ZXh0LiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50LCBvcHRpbWl6YXRpb24sIG9yIGV2ZW4gcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgYWx0aG91Z2ggdGhhdCYjMzk7cyBub3QgdGhlIHByaW1hcnkgZm9jdXMgcmlnaHQgbm93LiBGaXJzdCBJJiMzOTttIGNoZWNraW5nLCBhdCBhIGhpZ2ggbGV2ZWwsIHRoZSBmbG93IG9mIHRoZSBjb2RlLiBUaGVuLCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgdGhhdOKAmXMgYmVpbmcgZmVkIGludG8gYERlY29kZVJhc01lc3NhZ2VgIGFuZCwgY29udmVyc2VseSwgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIHByb2R1Y2luZy4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUgZGVjb2RlZCBkYXRhIGlzIGJlaW5nIHVzZWQsIGVzcGVjaWFsbHkgaWYgYW55IGFzc3VtcHRpb25zIGFyZSBiZWluZyBtYWRlIGFib3V0IGl0cyBmb3JtYXQgb3IgY29udGVudC4gVGhlIGVuZCBnb2FsIGlzIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RGVjb2RlUmFzTWVzc2FnZXxEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2V8dGltZVRvTGl2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTMxMj1zdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMzNC1cdFx0QllURV9BTElHTihicyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozMzU6XHRcdGlmIChiYXNlIFx1MDAyNlx1MDAyNiAoZi1cdTAwM2VhdHRyIFx1MDAyNiBERUNPREUpKSB7XHQvKiB0aW1lVG9MaXZlICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zMzYtXHRcdFx0dW5zaWduZWQgaW50IHYgPSBnZXRfdWludChicywgbGVuKSAmIzQzOyBmLVx1MDAzZWxiO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTc0MD1zdGF0aWMgaW50IGRlY29kZV9jaG9pY2Uoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgyMC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgyMTppbnQgRGVjb2RlUmFzTWVzc2FnZSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeiwgUmFzTWVzc2FnZSAqcmFzKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODIyLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz04MzY9c3RhdGljIGludCBEZWNvZGVIMzIzX1VzZXJJbmZvcm1hdGlvbih1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGNoYXIgKmJlZyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NTItXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo4NTM6aW50IERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTg1NC1cdFx0XHRcdFx0IE11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSAqXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9NTI5PXN0YXRpYyBpbnQgaDI0NV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTU1Mi1cdFx0LyogRGVjb2RlIEguMjQ1IHNpZ25hbCAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NTUzOlx0XHRyZXQgPSBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UoZGF0YSwgZGF0YWxlbixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTU1NC1cdFx0XHRcdFx0XHRcdCAgIFx1MDAyNm1zY20pO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTEzMDc9c3RhdGljIGludCBwcm9jZXNzX3JycShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTMzNi1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjEzMzc6XHRpZiAocnJxLVx1MDAzZW9wdGlvbnMgXHUwMDI2IGVSZWdpc3RyYXRpb25SZXF1ZXN0X3RpbWVUb0xpdmUpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjEzMzg6XHRcdHByX2RlYnVnKFwmIzM0O25mX2N0X3JhczogUlJRIFRUTCA9ICV1IHNlY29uZHNcXG5cJiMzNDssIHJycS1cdTAwM2V0aW1lVG9MaXZlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjEzMzk6XHRcdGluZm8tXHUwMDNldGltZW91dCA9IHJycS1cdTAwM2V0aW1lVG9MaXZlO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTM0MC1cdH0gZWxzZVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTEzNDY9c3RhdGljIGludCBwcm9jZXNzX3JjZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTM3MS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjEzNzI6XHRpZiAocmNmLVx1MDAzZW9wdGlvbnMgXHUwMDI2IGVSZWdpc3RyYXRpb25Db25maXJtX3RpbWVUb0xpdmUpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjEzNzM6XHRcdHByX2RlYnVnKFwmIzM0O25mX2N0X3JhczogUkNGIFRUTCA9ICV1IHNlY29uZHNcXG5cJiMzNDssIHJjZi1cdTAwM2V0aW1lVG9MaXZlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjEzNzQ6XHRcdGluZm8tXHUwMDNldGltZW91dCA9IHJjZi1cdTAwM2V0aW1lVG9MaXZlO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTM3NS1cdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xNjY0PXN0YXRpYyBpbnQgcmFzX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTY4My1cdC8qIERlY29kZSBSQVMgbWVzc2FnZSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTY4NDpcdHJldCA9IERlY29kZVJhc01lc3NhZ2UoZGF0YSwgZGF0YWxlbiwgXHUwMDI2cmFzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE2ODUtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTE1NzU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9SZWdpc3RyYXRpb25SZXF1ZXN0W10gPSB7XHQvKiBTRVFVRU5DRSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNTkzLVx0e0ZOQU1FKFwmIzM0O2FsdGVybmF0ZUVuZHBvaW50c1wmIzM0OykgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE1OTQ6XHR7Rk5BTUUoXCYjMzQ7dGltZVRvTGl2ZVwmIzM0OykgSU5ULCBDT05TLCAxLCAwLCBERUNPREUgfCBPUFQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTU5NTpcdCBvZmZzZXRvZihSZWdpc3RyYXRpb25SZXF1ZXN0LCB0aW1lVG9MaXZlKSwgTlVMTH0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTU5Ni1cdHtGTkFNRShcJiMzNDt0b2tlbnNcJiMzNDspIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTYzMz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX1JlZ2lzdHJhdGlvbkNvbmZpcm1bXSA9IHtcdC8qIFNFUVVFTkNFICovXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE2NDUtXHR7Rk5BTUUoXCYjMzQ7YWx0ZXJuYXRlR2F0ZWtlZXBlclwmIzM0OykgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE2NDY6XHR7Rk5BTUUoXCYjMzQ7dGltZVRvTGl2ZVwmIzM0OykgSU5ULCBDT05TLCAxLCAwLCBERUNPREUgfCBPUFQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTY0NzpcdCBvZmZzZXRvZihSZWdpc3RyYXRpb25Db25maXJtLCB0aW1lVG9MaXZlKSwgTlVMTH0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTY0OC1cdHtGTkFNRShcJiMzNDt0b2tlbnNcJiMzNDspIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NDYKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHVuZGVyc3RhbmRpbmcgdGhlIGByYXNgIGluaXRpYWxpemF0aW9uIGFuZCB1c2FnZSB3aXRoaW4gYHJhc19oZWxwYCwgYmFzZWQgb24gdGhhdCBwb2ludGVyIHRvIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uY2AgYXJvdW5kIGxpbmVzIDE2NzUtMTcxMC4KCioqRGVjb25zdHJ1Y3RpbmcgYHJhc2AgaW4gYHJhc19oZWxwYCoqCgpNeSBpbW1lZGlhdGUgcGxhbiBpcyB0byBvcGVuIHRoYXQgZmlsZSwgYG5mX2Nvbm50cmFja19oMzIzX21haW4uY2AsIGFuZCB6ZXJvIGluIG9uIHRoZSBzdWdnZXN0ZWQgbGluZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBXaGF0IGlzIGByYXNgPyBJcyBpdCBhIGRhdGEgc3RydWN0dXJlPyBBIGZ1bmN0aW9uIHBvaW50ZXI/IEEgZ2xvYmFsIHZhcmlhYmxlPyBUaGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBjbHVlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igd2hlcmUgYHJhc2AgaXMgZGVjbGFyZWQgYW5kIGluaXRpYWxpemVkLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBzdHJ1Y3R1cmVzIG9yIHR5cGVzIGludm9sdmVkLiBUaGVuLCBJJiMzOTtsbCB0cmFjZSBob3cgaXQmIzM5O3MgdXNlZCB3aXRoaW4gdGhhdCBibG9jayBvZiBjb2RlIOKAkyBhcmUgZnVuY3Rpb25zIGNhbGxlZCBvbiBpdD8gQXJlIHZhbHVlcyBhc3NpZ25lZCB0byBpdHMgbWVtYmVycz8gSXMgaXQgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIG90aGVyIGZ1bmN0aW9ucz8KCkdpdmVuIHRoZSBmaWxlIG5hbWUsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgYHJhc2AgZW50aXR5IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nLiBJdCBtaWdodCBiZSByZWxhdGVkIHRvIGhhbmRsaW5nIFJBUyAoUmVnaXN0cmF0aW9uLCBBZG1pc3Npb24sIGFuZCBTdGF0dXMpIG1lc3NhZ2VzIHdpdGhpbiB0aGUgSC4zMjMgcHJvdG9jb2wuIFRoZSBsb2NhdGlvbiB3aXRoaW4gdGhlIGBuZl9jb25udHJhY2tgIGZyYW1ld29yayBzdWdnZXN0cyBpdHMgbGlrZWx5IGludm9sdmVkIGluIGluc3BlY3RpbmcgYW5kIG1hbmlwdWxhdGluZyBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJpZXMgcmVsZXZhbnQgdG8gSC4zMjMgdHJhZmZpYy4gVGhlIGxpbmUgbnVtYmVycyBob3BlZnVsbHkgcG9pbnQgdG8gd2hlcmUgUkFTLXNwZWNpZmljIHBhcnNpbmcgb3IgcHJvY2Vzc2luZyBvY2N1cnMsIHBlcmhhcHMgd2hlcmUgdGhlIEguMjI1L1EuOTMxIG1lc3NhZ2VzIGFyZSBkZW11eGVkIGFuZCB0aGUgUkFTLXNwZWNpZmljIGRldGFpbHMgYXJlIGhhbmRsZWQuIEkmIzM5O20ga2VlbiB0byBzZWUgdGhlIGNvZGUgd2hpY2ggdHJhY2tzIHRoZSBILjMyMyBSQVMgbWVzc2FnZXMsIHdoaWNoIGlzIHZpdGFsIHRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIGNvbm5lY3Rpb24gZmxvdyBhbmQgTkFUIHRyYXZlcnNhbCBiZWhhdmlvciBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nLiBNeSBleHBlcnQgaW5zdGluY3RzIHRlbGwgbWUgdGhpcyB3aWxsIHByb3ZpZGUgc29tZSBpbnNpZ2h0cyBpbnRvIGhvdyBILjMyMyBlbmRwb2ludHMgYXJlIHJlZ2lzdGVyZWQgYW5kIG1hbmFnZWQsIGFuZCBob3cgdGhhdCBpbmZvcm1hdGlvbiBpcyB1c2VkIGZvciBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2NzA6XHRcdGludCByZXQ7XG4xNjcxOlx0XG4xNjcyOlx0XHRwcl9kZWJ1ZyhcJiMzNDtuZl9jdF9yYXM6IHNrYmxlbiA9ICV1XFxuXCYjMzQ7LCBza2ItXHUwMDNlbGVuKTtcbjE2NzM6XHRcbjE2NzQ6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZl9oMzIzX2xvY2spO1xuMTY3NTpcdFxuMTY3NjpcdFx0LyogR2V0IFVEUCBkYXRhICovXG4xNjc3Olx0XHRkYXRhID0gZ2V0X3VkcF9kYXRhKHNrYiwgcHJvdG9mZiwgXHUwMDI2ZGF0YWxlbik7XG4xNjc4Olx0XHRpZiAoZGF0YSA9PSBOVUxMKVxuMTY3OTpcdFx0XHRnb3RvIGFjY2VwdDtcbjE2ODA6XHRcdHByX2RlYnVnKFwmIzM0O25mX2N0X3JhczogUkFTIG1lc3NhZ2UgbGVuPSVkIFwmIzM0OywgZGF0YWxlbik7XG4xNjgxOlx0XHRuZl9jdF9kdW1wX3R1cGxlKFx1MDAyNmN0LVx1MDAzZXR1cGxlaGFzaFtDVElORk8yRElSKGN0aW5mbyldLnR1cGxlKTtcbjE2ODI6XHRcbjE2ODM6XHRcdC8qIERlY29kZSBSQVMgbWVzc2FnZSAqL1xuMTY4NDpcdFx0cmV0ID0gRGVjb2RlUmFzTWVzc2FnZShkYXRhLCBkYXRhbGVuLCBcdTAwMjZyYXMpO1xuMTY4NTpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuMTY4NjpcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtuZl9jdF9yYXM6IGRlY29kaW5nIGVycm9yOiAlc1xcblwmIzM0OyxcbjE2ODc6XHRcdFx0XHQgcmV0ID09IEgzMjNfRVJST1JfQk9VTkQgP1xuMTY4ODpcdFx0XHRcdCBcJiMzNDtvdXQgb2YgYm91bmRcJiMzNDsgOiBcJiMzNDtvdXQgb2YgcmFuZ2VcJiMzNDspO1xuMTY4OTpcdFx0XHRnb3RvIGFjY2VwdDtcbjE2OTA6XHRcdH1cbjE2OTE6XHRcbjE2OTI6XHRcdC8qIFByb2Nlc3MgUkFTIG1lc3NhZ2UgKi9cbjE2OTM6XHRcdGlmIChwcm9jZXNzX3Jhcyhza2IsIGN0LCBjdGluZm8sIHByb3RvZmYsIFx1MDAyNmRhdGEsIFx1MDAyNnJhcykgXHUwMDNjIDApXG4xNjk0Olx0XHRcdGdvdG8gZHJvcDtcbjE2OTU6XHRcbjE2OTY6XHQgICAgICBhY2NlcHQ6XG4xNjk3Olx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZl9oMzIzX2xvY2spO1xuMTY5ODpcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbjE2OTk6XHRcbjE3MDA6XHQgICAgICBkcm9wOlxuMTcwMTpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmZfaDMyM19sb2NrKTtcbjE3MDI6XHRcdG5mX2N0X2hlbHBlcl9sb2coc2tiLCBjdCwgXCYjMzQ7Y2Fubm90IHByb2Nlc3MgUkFTIG1lc3NhZ2VcJiMzNDspO1xuMTcwMzpcdFx0cmV0dXJuIE5GX0RST1A7XG4xNzA0Olx0fVxuMTcwNTpcdFxuMTcwNjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgcmFzX2V4cF9wb2xpY3kgPSB7XG4xNzA3Olx0XHQubWF4X2V4cGVjdGVkXHRcdD0gMzIsXG4xNzA4Olx0XHQudGltZW91dFx0XHQ9IDI0MCxcbjE3MDk6XHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc4OQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGVjb2RpbmcgdGhlIGByYXNgIFZhcmlhYmxlOiBBIFF1aWNrIERpdmUqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgcmFzYCB2YXJpYWJsZSBpcyBkZWNsYXJlZCBhbmQgdXNlZCB3aXRoaW4gdGhpcyBjb250ZXh0LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGByYXNfaGVscGAgZnVuY3Rpb24gYW5kIHRoZSBgRGVjb2RlUmFzTWVzc2FnZWAgZnVuY3Rpb24uIEkgd2FudCB0byBzZWUgZXhhY3RseSBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRob3NlIHR3byBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5LiBHZXR0aW5nIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgZGVjbGFyYXRpb24gd2lsbCBpbmZvcm0gdGhlIHJlc3Qgb2YgbXkgYW5hbHlzaXMuIE5vIG5lZWQgdG8gZ28gdG9vIGRlZXAgaGVyZSwganVzdCB0aGUgaW5pdGlhbCBkZWZpbml0aW9uIGFuZCBtYXliZSB0aGUgZmlyc3QgZmV3IHVzYWdlcyBzaG91bGQgc3VmZmljZS4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcmVkIGZsYWdzLCBzdWNoIGFzIGFtYmlndW91cyB0eXBpbmcgb3IgcG90ZW50aWFsIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyByaWdodCBvZmYgdGhlIGJhdC4gTGV0JiMzOTtzIGdldCB0byBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY1MDpcdFx0Y2FzZSBlUmFzTWVzc2FnZV9sb2NhdGlvbkNvbmZpcm06XG4xNjUxOlx0XHRcdHJldHVybiBwcm9jZXNzX2xjZihza2IsIGN0LCBjdGluZm8sIHByb3RvZmYsIGRhdGEsXG4xNjUyOlx0XHRcdFx0XHQgICBcdTAwMjZyYXMtXHUwMDNlbG9jYXRpb25Db25maXJtKTtcbjE2NTM6XHRcdGNhc2UgZVJhc01lc3NhZ2VfaW5mb1JlcXVlc3RSZXNwb25zZTpcbjE2NTQ6XHRcdFx0cmV0dXJuIHByb2Nlc3NfaXJyKHNrYiwgY3QsIGN0aW5mbywgcHJvdG9mZiwgZGF0YSxcbjE2NTU6XHRcdFx0XHRcdCAgIFx1MDAyNnJhcy1cdTAwM2VpbmZvUmVxdWVzdFJlc3BvbnNlKTtcbjE2NTY6XHRcdGRlZmF1bHQ6XG4xNjU3Olx0XHRcdHByX2RlYnVnKFwmIzM0O25mX2N0X3JhczogUkFTIG1lc3NhZ2UgJWRcXG5cJiMzNDssIHJhcy1cdTAwM2VjaG9pY2UpO1xuMTY1ODpcdFx0XHRicmVhaztcbjE2NTk6XHRcdH1cbjE2NjA6XHRcbjE2NjE6XHRcdHJldHVybiAwO1xuMTY2MjpcdH1cbjE2NjM6XHRcbjE2NjQ6XHRzdGF0aWMgaW50IHJhc19oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuMTY2NTpcdFx0XHQgICAgc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbylcbjE2NjY6XHR7XG4xNjY3Olx0XHRzdGF0aWMgUmFzTWVzc2FnZSByYXM7XG4xNjY4Olx0XHR1bnNpZ25lZCBjaGFyICpkYXRhO1xuMTY2OTpcdFx0aW50IGRhdGFsZW4gPSAwO1xuMTY3MDpcdFx0aW50IHJldDtcbjE2NzE6XHRcbjE2NzI6XHRcdHByX2RlYnVnKFwmIzM0O25mX2N0X3Jhczogc2tibGVuID0gJXVcXG5cJiMzNDssIHNrYi1cdTAwM2VsZW4pO1xuMTY3MzpcdFxuMTY3NDpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5mX2gzMjNfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDA4CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEZWNvZGluZyB0aGUgSC4zMjMgQVNOLjEgTWVzc2FnZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYERlY29kZVJhc01lc3NhZ2VgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGhhbmRsZXMgSC4zMjMgc2lnbmFsaW5nLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCB0aGUgdHJhbnNsYXRpb24gb2YgdGhvc2UgQVNOLjEtZW5jb2RlZCBSQVMgbWVzc2FnZXMgaW50byBzb21ldGhpbmcgdGhlIGNvbm50cmFjayBtb2R1bGUgY2FuIGFjdHVhbGx5ICp1c2UqLiBJIGltYWdpbmUgaXQmIzM5O3MgcHVsbGluZyBhcGFydCB0aGUgYml0c3RyZWFtLCBpbnRlcnByZXRpbmcgdGhlIHRhZ3MsIGxlbmd0aHMsIGFuZCB2YWx1ZXMsIGFsbCBiYXNlZCBvbiB0aGUgSC4yMjUuMCBhbmQgSC4yNDUgc3BlY2lmaWNhdGlvbnMuIEkmIzM5O20gZ3Vlc3NpbmcgaXQgaGFuZGxlcyB0aGUgdmFyaW91cyBtZXNzYWdlIHR5cGVzIOKAkyBSZWdpc3RyYXRpb24sIEFkbWlzc2lvbiwgQmFuZHdpZHRoLCBhbmQgdGhlIHJlc3QuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcsIHRvby4gSSYjMzk7bSBjdXJpb3VzIGhvdyBpdCBkZWFscyB3aXRoIG1hbGZvcm1lZCBvciBpbmNvbXBsZXRlIHBhY2tldHM7IGRvZXMgaXQgZHJvcCB0aGVtLCBsb2cgdGhlbSwgb3IgdHJ5IHRvIHJlY292ZXI/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIG1lbW9yeSBhbGxvY2F0aW9uLCBzdHJ1Y3R1cmUgcG9wdWxhdGlvbiwgYW5kIGFueSBvcHRpbWl6YXRpb25zIHRoZXkmIzM5O3ZlIGltcGxlbWVudGVkLCBhcyBlZmZpY2llbmN5IGlzIGtleSBpbiBhIG5ldHdvcmtpbmcgZW52aXJvbm1lbnQuIFRoaXMgaXMgZ29pbmcgdG8gYmUgYSBnb29kIG9uZSwgdGltZSB0byBnZXQgdG8gaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgyMDpcdFxuIDgyMTpcdGludCBEZWNvZGVSYXNNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LCBSYXNNZXNzYWdlICpyYXMpXG4gODIyOlx0e1xuIDgyMzpcdFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IHJhc19tZXNzYWdlID0ge1xuIDgyNDpcdFx0XHRGTkFNRShcJiMzNDtSYXNNZXNzYWdlXCYjMzQ7KSBDSE9JQ0UsIDUsIDI0LCAzMiwgREVDT0RFIHwgRVhULFxuIDgyNTpcdFx0XHQwLCBfUmFzTWVzc2FnZVxuIDgyNjpcdFx0fTtcbiA4Mjc6XHRcdHN0cnVjdCBiaXRzdHIgYnM7XG4gODI4Olx0XG4gODI5Olx0XHRicy5idWYgPSBicy5iZWcgPSBicy5jdXIgPSBidWY7XG4gODMwOlx0XHRicy5lbmQgPSBidWYgJiM0Mzsgc3o7XG4gODMxOlx0XHRicy5iaXQgPSAwO1xuIDgzMjpcdFxuIDgzMzpcdFx0cmV0dXJuIGRlY29kZV9jaG9pY2UoXHUwMDI2YnMsIFx1MDAyNnJhc19tZXNzYWdlLCAoY2hhciAqKSByYXMsIDApO1xuIDgzNDpcdH1cbiA4MzU6XHRcbiA4MzY6XHRzdGF0aWMgaW50IERlY29kZUgzMjNfVXNlckluZm9ybWF0aW9uKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgY2hhciAqYmVnLFxuIDgzNzpcdFx0XHRcdFx0ICAgICAgc2l6ZV90IHN6LCBIMzIzX1VzZXJJbmZvcm1hdGlvbiAqdXVpZSlcbiA4Mzg6XHR7XG4gODM5Olx0XHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgaDMyM191c2VyaW5mb3JtYXRpb24gPSB7XG4gODQwOlx0XHRcdEZOQU1FKFwmIzM0O0gzMjMtVXNlckluZm9ybWF0aW9uXCYjMzQ7KSBTRVEsIDEsIDIsIDIsIERFQ09ERSB8IEVYVCxcbiA4NDE6XHRcdFx0MCwgX0gzMjNfVXNlckluZm9ybWF0aW9uXG4gODQyOlx0XHR9O1xuIDg0MzpcdFx0c3RydWN0IGJpdHN0ciBicztcbiA4NDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNDkKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqRGVjb2RpbmcgU3RydWN0dXJlczogRGVlcCBEaXZlIFRpbWUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgYmVoYXZpb3Igb2YgYGRlY29kZV9zZXFgIHdoZW4gaXQmIzM5O3MgZGVhbGluZyB3aXRoIGEgc3RydWN0LiBUaGUgY29yZSBxdWVzdGlvbiBJIGhhdmUgaXM6IERvZXMgdGhpcyBmdW5jdGlvbiBleGhpYml0IGEgY2VydGFpbiBsZXZlbCBvZiBoeWdpZW5lPyBEb2VzIGl0IGdvIHRocm91Z2ggdGhlIGVmZm9ydCBvZiBpbml0aWFsaXppbmcgdGhlIHN0cnVjdCYjMzk7cyBtZW1iZXJzLCBzcGVjaWZpY2FsbHkgYnkgdXNpbmcgc29tZXRoaW5nIGxpa2UgYG1lbXNldGAgdG8gemVybyB0aGVtIG91dCwgb3IgZG9lcyBpdCBsZWF2ZSB0aGVtIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQ/IE9yLCBkb2VzIGl0IGhhdmUgYSB3YXkgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyAqcmFzKiAoZS5nLiwgcmVkdW5kYW50IGFkZHJlc3Mgc3BhY2UpIGhhbmdpbmcgYXJvdW5kPyBUaGF0IGluaXRpYWxpemF0aW9uIGJlaGF2aW9yIGNhbiBiZSBjcml0aWNhbCBmb3Igc2FmZXR5IGFuZCBwcmVkaWN0YWJpbGl0eSwgc28gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgdGhlIGRldGFpbHMgaGVyZS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gdG8gdmVyaWZ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MTA6XHRcbiA1MTE6XHRzdGF0aWMgaW50IGRlY29kZV9zZXEoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIDUxMjpcdCAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4gNTEzOlx0e1xuIDUxNDpcdFx0dW5zaWduZWQgaW50IGV4dCwgYm1wLCBpLCBvcHQsIGxlbiA9IDAsIGJtcDIsIGJtcDJfbGVuO1xuIDUxNTpcdFx0aW50IGVycjtcbiA1MTY6XHRcdGNvbnN0IHN0cnVjdCBmaWVsZF90ICpzb247XG4gNTE3Olx0XHR1bnNpZ25lZCBjaGFyICpiZWcgPSBOVUxMO1xuIDUxODpcdFxuIDUxOTpcdFx0UFJJTlQoXCYjMzQ7JSpzJXNcXG5cJiMzNDssIGxldmVsICogVEFCX1NJWkUsIFwmIzM0OyBcJiMzNDssIGYtXHUwMDNlbmFtZSk7XG4gNTIwOlx0XG4gNTIxOlx0XHQvKiBEZWNvZGU/ICovXG4gNTIyOlx0XHRiYXNlID0gKGJhc2UgXHUwMDI2XHUwMDI2IChmLVx1MDAzZWF0dHIgXHUwMDI2IERFQ09ERSkpID8gYmFzZSAmIzQzOyBmLVx1MDAzZW9mZnNldCA6IE5VTEw7XG4gNTIzOlx0XG4gNTI0Olx0XHQvKiBFeHRlbnNpYmxlPyAqL1xuIDUyNTpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpKVxuIDUyNjpcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiA1Mjc6XHRcdGV4dCA9IChmLVx1MDAzZWF0dHIgXHUwMDI2IEVYVCkgPyBnZXRfYml0KGJzKSA6IDA7XG4gNTI4Olx0XG4gNTI5Olx0XHQvKiBHZXQgZmllbGRzIGJpdG1hcCAqL1xuIDUzMDpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIGYtXHUwMDNlc3opKVxuIDUzMTpcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiA1MzI6XHRcdGlmIChmLVx1MDAzZXN6IFx1MDAzZSAzMilcbiA1MzM6XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfUkFOR0U7XG4gNTM0Olx0XHRibXAgPSBnZXRfYml0bWFwKGJzLCBmLVx1MDAzZXN6KTtcbiA1MzU6XHRcdGlmIChiYXNlKVxuIDUzNjpcdFx0XHQqKHVuc2lnbmVkIGludCAqKWJhc2UgPSBibXA7XG4gNTM3Olx0XG4gNTM4Olx0XHQvKiBEZWNvZGUgdGhlIHJvb3QgY29tcG9uZW50cyAqL1xuIDUzOTpcdFx0Zm9yIChpID0gb3B0ID0gMCwgc29uID0gZi1cdTAwM2VmaWVsZHM7IGkgXHUwMDNjIGYtXHUwMDNlbGI7IGkmIzQzOyYjNDM7LCBzb24mIzQzOyYjNDM7KSB7XG4gNTQwOlx0XHRcdGlmIChzb24tXHUwMDNlYXR0ciBcdTAwMjYgU1RPUCkge1xuIDU0MTpcdFx0XHRcdFBSSU5UKFwmIzM0OyUqcyVzXFxuXCYjMzQ7LCAobGV2ZWwgJiM0MzsgMSkgKiBUQUJfU0laRSwgXCYjMzQ7IFwmIzM0OyxcbiA1NDI6XHRcdFx0XHQgICAgICBzb24tXHUwMDNlbmFtZSk7XG4gNTQzOlx0XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfU1RPUDtcbiA1NDQ6XHRcdFx0fVxuIDU0NTpcdFxuIDU0NjpcdFx0XHRpZiAoc29uLVx1MDAzZWF0dHIgXHUwMDI2IE9QVCkge1x0LyogT3B0aW9uYWwgY29tcG9uZW50ICovXG4gNTQ3Olx0XHRcdFx0aWYgKCEoKDB4ODAwMDAwMDBVIFx1MDAzZVx1MDAzZSAob3B0JiM0MzsmIzQzOykpIFx1MDAyNiBibXApKVx0LyogTm90IGV4aXN0ICovXG4gNTQ4Olx0XHRcdFx0XHRjb250aW51ZTtcbiA1NDk6XHRcdFx0fVxuIDU1MDpcdFxuIDU1MTpcdFx0XHQvKiBEZWNvZGUgKi9cbiA1NTI6XHRcdFx0aWYgKHNvbi1cdTAwM2VhdHRyIFx1MDAyNiBPUEVOKSB7XHQvKiBPcGVuIGZpZWxkICovXG4gNTUzOlx0XHRcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxuIDU1NDpcdFx0XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4gNTU1Olx0XHRcdFx0bGVuID0gZ2V0X2xlbihicyk7XG4gNTU2Olx0XHRcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIGxlbiwgMCkpXG4gNTU3Olx0XHRcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiA1NTg6XHRcdFx0XHRpZiAoIWJhc2UgfHwgIShzb24tXHUwMDNlYXR0ciBcdTAwMjYgREVDT0RFKSkge1xuIDU1OTpcdFx0XHRcdFx0UFJJTlQoXCYjMzQ7JSpzJXNcXG5cJiMzNDssIChsZXZlbCAmIzQzOyAxKSAqIFRBQl9TSVpFLFxuIDU2MDpcdFx0XHRcdFx0ICAgICAgXCYjMzQ7IFwmIzM0Oywgc29uLVx1MDAzZW5hbWUpO1xuIDU2MTpcdFx0XHRcdFx0YnMtXHUwMDNlY3VyICYjNDM7PSBsZW47XG4gNTYyOlx0XHRcdFx0XHRjb250aW51ZTtcbiA1NjM6XHRcdFx0XHR9XG4gNTY0Olx0XHRcdFx0YmVnID0gYnMtXHUwMDNlY3VyO1xuIDU2NTpcdFxuIDU2NjpcdFx0XHRcdC8qIERlY29kZSAqL1xuIDU2NzpcdFx0XHRcdGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cdTAwM2V0eXBlXSkgKGJzLCBzb24sIGJhc2UsXG4gNTY4Olx0XHRcdFx0XHRcdFx0XHQgIGxldmVsICYjNDM7IDEpKSBcdTAwM2NcbiA1Njk6XHRcdFx0XHQgICAgSDMyM19FUlJPUl9OT05FKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM5OQoJCQkJCQkJb3V0cHV0OiAyNDEKCQkJCQkJCXRob3VnaHRzOiAxMTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBgZGVjb2RlX2ludGAgQ29ycmVjdGlvbiBpbiBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGRlY29kZV9pbnRgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgbW9kdWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoYW5nZSBjb21wbGV0ZWx5LiBGaXJzdCwgSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSByZXN0IG9mIHRoZSBmaWxlIHRvIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgZWxzZXdoZXJlIGFuZCBpZiB0aGlzIGZpeCBoYXMgYW55IGJyb2FkZXIgaW1wbGljYXRpb25zLgoKTm93LCBmb2N1c2luZyBvbiBgZGVjb2RlX2ludGAgaXRzZWxmLCB0aGUgY29yZSBvZiB0aGUgaXNzdWUgbGllcyB3aXRoaW4gdGhlIGBjYXNlIENPTlM6YCBibG9jay4gSSBzZWUgdGhhdCBgZ2V0X3VpbnQoYnMsIGxlbilgIHJlYWRzIGBsZW5gIGJ5dGVzIGZyb20gdGhlIGJpdHN0cmVhbSBgYnNgIGFuZCAqYWxzbyogYWR2YW5jZXMgdGhlIGBicy0mZ3Q7Y3VyYCBwb2ludGVyLiBUaGUgb3JpZ2luYWwgY29kZSB1bmNvbmRpdGlvbmFsbHkgYWR2YW5jZWQgYGJzLSZndDtjdXJgIGFnYWluIGJ5IGBsZW5gIGJ5dGVzIGFmdGVyIHRoZSBjb25kaXRpb25hbCBhc3NpZ25tZW50IHVzaW5nIGBnZXRfdWludCgpYC4gVGhpcyBtZWFudCwgd2hlbiB0aGUgY29uZGl0aW9uIGAoYmFzZSAmYW1wOyZhbXA7IChmLSZndDthdHRyICZhbXA7IERFQ09ERSkpYCB3YXMgdHJ1ZSwgdGhlIHBvaW50ZXIgYGJzLSZndDtjdXJgIGdvdCBpbmNyZW1lbnRlZCB0d2ljZSBieSBgbGVuYCwgZWZmZWN0aXZlbHkgc2tpcHBpbmcgb3ZlciBkYXRhLgoKVGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQ6IHRoZSB1bmNvbmRpdGlvbmFsIGBicy0mZ3Q7Y3VyICYjNDM7PSBsZW47YCBpcyBub3cgbW92ZWQgaW50byB0aGUgYGVsc2VgIGJyYW5jaC4gTm93LCBgYnMtJmd0O2N1cmAgaXMgYWR2YW5jZWQgYnkgdGhlIGNvcnJlY3QgYW1vdW50LCAqb25seSogb25jZSwgZWl0aGVyIGJ5IGBnZXRfdWludGAgd2l0aGluIHRoZSBpZiBibG9jayBvciBieSBpbmNyZW1lbnRpbmcgd2l0aGluIHRoZSBlbHNlIGJsb2NrLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgdGhpcyBjb3JyZWN0aW9uIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3M/IEkgbmVlZCB0byBhbmFseXplIHRoaXMgY2FyZWZ1bGx5LgoKSSYjMzk7bGwgZ28gdGhyb3VnaCB0aGUgc3RhbmRhcmQgS01TQU4vS0FTQU4gY3JpdGVyaWE6CgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm8sIHRoaXMgaXMgY29ubnRyYWNrLCBwYXJzaW5nIHRoZSBuZXR3b3JrIHBhY2tldCBwYXlsb2FkICp3aXRoaW4qIHRoZSBrZXJuZWwuIFRoZXJlIGFyZSBubyBkaXJlY3QgY29waWVzIHRvIHVzZXJzcGFjZS4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLiBUaGUgdmFsdWUgYHZgIGlzIGRlcml2ZWQgZnJvbSBgZ2V0X3VpbnQoKWAgYW5kIGBmLSZndDtsYmAsIGBsZW5gIGZyb20gYGdldF9iaXRzKCkgJiM0MzsgMWAsIGFuZCBgYnNgIGlzIGEgdmFsaWQgYml0c3RyZWFtIG92ZXIgdGhlIHJlY2VpdmVkIHBhY2tldCBkYXRhLiBObyBkZXBlbmRlbmNpZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuCjMuICAqKkRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gd2l0aCBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIG9yIGluaXRpYWxpemF0aW9uIGNoYW5nZXMgaGVyZS4KNC4gICoqQm91bmRzIGNoZWNrcyBvciBsb2dpYyBleHBvc2luZyB1bmluaXRpYWxpemVkIGJ1ZmZlciBieXRlcz8qKiBOby4gVGhlIGBza2JgIGRhdGEgaXMgcmVjZWl2ZWQgcGFja2V0IGRhdGEsIGFscmVhZHkgcG9wdWxhdGVkLiBUaGUgYnVnIHdhcyBhIHBvaW50ZXIgb2Zmc2V0IGlzc3VlIHdpdGhpbiB0aGUgcGFyc2luZywgbm90IGFuIHVuaW5pdGlhbGl6ZWQgcmVhZC4gU3RhbmRhcmQgbWVtb3J5IHNhZmV0eSBkZXRlY3RvcnMgKEtBU0FOKSBhbmQgdGhlIHBhcnNpbmcgbG9naWMgaXRzZWxmIGhhbmRsZSBib3VuZHMgYW5kIG91dC1vZi1ib3VuZHMgaXNzdWVzLgoKVGhlcmVmb3JlLCB0aGlzIGlzIGEgcHVyZSBwYXJzZXIgc3RyZWFtIHBvc2l0aW9uIGJ1ZyBmaXggd2l0aGluIGBuZl9jb25udHJhY2tfaDMyM19hc24xYC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBjb3JyZWN0aW9uLiBTdGFuZGFyZCBLQVNBTiBhbmQgZXhpc3RpbmcgdGVzdCBzdWl0ZXMgYXJlIHN1ZmZpY2llbnQgdG8gdmFsaWRhdGUgdGhpcy4KCk15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGFuZCBpcyBwdXJlbHkgYSBwYXJzaW5nIGNvcnJlY3RuZXNzIGZpeC4gSSB3aWxsIHNldCB0aGUgcmVzdWx0cyB0byBpbmRpY2F0ZSB0aGF0IEtNU0FOIGlzIG5vdCBuZWVkZWQgZm9yIHRoaXMgY2hhbmdlLCB3aXRoIHRoZSByZWFzb25pbmcgSSBoYXZlIG91dGxpbmVkIGFib3ZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvaW50ZXIgYWR2YW5jZW1lbnQgYnVnIGluIGBkZWNvZGVfaW50KClgIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIEguMzIzIEFTTi4xIGNvbm50cmFjayBoZWxwZXIgKGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2ApLiBJbiBgY2FzZSBDT05TOmAsIGBnZXRfdWludChicywgbGVuKWAgYWR2YW5jZXMgYGJzLVx1MDAzZWN1cmAgaW50ZXJuYWxseSBieSBgbGVuYCBieXRlczsgcHJldmlvdXNseSwgYGJzLVx1MDAzZWN1ciAmIzQzOz0gbGVuYCB3YXMgYWxzbyBleGVjdXRlZCB1bmNvbmRpdGlvbmFsbHkgYWZ0ZXJ3YXJkcywgYWR2YW5jaW5nIHRoZSBiaXRzdHJlYW0gY3Vyc29yIHR3aWNlIHdoZW4gZGVjb2RpbmcgaW50ZWdlcnMuIFRoZSBwYXRjaCBtb3ZlcyBgYnMtXHUwMDNlY3VyICYjNDM7PSBsZW5gIGludG8gdGhlIGBlbHNlYCBicmFuY2guXG5cblRoaXMgY2hhbmdlIHN0cmljdGx5IGFkZHJlc3NlcyBzdHJlYW0gcGFyc2luZyBwb2ludGVyIG1hbmlwdWxhdGlvbiBvbiBpbmNvbWluZyBuZXR3b3JrIHBhY2tldCBidWZmZXJzIChgc2tiYCBkYXRhKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFBvdGVudGlhbCBtZW1vcnkgaXNzdWVzIHJlbGF0ZWQgdG8gc3RyZWFtIGJvdW5kcyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBlcnJvciBib3VuZGFyeSBjaGVja3MgKGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG9pbnRlciBhZHZhbmNlbWVudCBidWcgaW4gYGRlY29kZV9pbnQoKWAgd2l0aGluIHRoZSBOZXRmaWx0ZXIgSC4zMjMgQVNOLjEgY29ubnRyYWNrIGhlbHBlciAoYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCkuIEluIGBjYXNlIENPTlM6YCwgYGdldF91aW50KGJzLCBsZW4pYCBhZHZhbmNlcyBgYnMtXHUwMDNlY3VyYCBpbnRlcm5hbGx5IGJ5IGBsZW5gIGJ5dGVzOyBwcmV2aW91c2x5LCBgYnMtXHUwMDNlY3VyICYjNDM7PSBsZW5gIHdhcyBhbHNvIGV4ZWN1dGVkIHVuY29uZGl0aW9uYWxseSBhZnRlcndhcmRzLCBhZHZhbmNpbmcgdGhlIGJpdHN0cmVhbSBjdXJzb3IgdHdpY2Ugd2hlbiBkZWNvZGluZyBpbnRlZ2Vycy4gVGhlIHBhdGNoIG1vdmVzIGBicy1cdTAwM2VjdXIgJiM0Mzs9IGxlbmAgaW50byB0aGUgYGVsc2VgIGJyYW5jaC5cblxuVGhpcyBjaGFuZ2Ugc3RyaWN0bHkgYWRkcmVzc2VzIHN0cmVhbSBwYXJzaW5nIHBvaW50ZXIgbWFuaXB1bGF0aW9uIG9uIGluY29taW5nIG5ldHdvcmsgcGFja2V0IGJ1ZmZlcnMgKGBza2JgIGRhdGEpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gUG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMgcmVsYXRlZCB0byBzdHJlYW0gYm91bmRzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIGVycm9yIGJvdW5kYXJ5IGNoZWNrcyAoYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowMjo1Mi4wNzM3OTYyMzlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjgyNTY3NjkzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLX0gzMjNcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJEZWNvZGVSYXNNZXNzYWdlXCIsXG4gICAgXCJEZWNvZGVROTMxXCIsXG4gICAgXCJEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2VcIixcbiAgICBcImdldF9oMjI1X2FkZHJcIixcbiAgICBcInJhc19oZWxwXCIsXG4gICAgXCJxOTMxX2hlbHBcIixcbiAgICBcImgyNDVfaGVscFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb2ludGVyIGFkdmFuY2VtZW50IGJ1ZyBpbiBgZGVjb2RlX2ludCgpYCB3aXRoaW4gdGhlIE5ldGZpbHRlciBILjMyMyBBU04uMSBjb25udHJhY2sgaGVscGVyIChgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgKS4gSW4gYGNhc2UgQ09OUzpgLCBgZ2V0X3VpbnQoYnMsIGxlbilgIGFkdmFuY2VzIGBicy1cXHUwMDNlY3VyYCBpbnRlcm5hbGx5IGJ5IGBsZW5gIGJ5dGVzOyBwcmV2aW91c2x5LCBgYnMtXFx1MDAzZWN1ciArPSBsZW5gIHdhcyBhbHNvIGV4ZWN1dGVkIHVuY29uZGl0aW9uYWxseSBhZnRlcndhcmRzLCBhZHZhbmNpbmcgdGhlIGJpdHN0cmVhbSBjdXJzb3IgdHdpY2Ugd2hlbiBkZWNvZGluZyBpbnRlZ2Vycy4gVGhlIHBhdGNoIG1vdmVzIGBicy1cXHUwMDNlY3VyICs9IGxlbmAgaW50byB0aGUgYGVsc2VgIGJyYW5jaC5cXG5cXG5UaGlzIGNoYW5nZSBzdHJpY3RseSBhZGRyZXNzZXMgc3RyZWFtIHBhcnNpbmcgcG9pbnRlciBtYW5pcHVsYXRpb24gb24gaW5jb21pbmcgbmV0d29yayBwYWNrZXQgYnVmZmVycyAoYHNrYmAgZGF0YSkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBQb3RlbnRpYWwgbWVtb3J5IGlzc3VlcyByZWxhdGVkIHRvIHN0cmVhbSBib3VuZHMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgZXJyb3IgYm91bmRhcnkgY2hlY2tzIChgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEguMzIzIGNvbm50cmFjayBoZWxwZXIncyBBU04uMSBpbnRlZ2VyIGRlY29kZXIgKG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jKSB3aGVyZSBnZXRfdWludCgpIGFkdmFuY2VkIHRoZSBiaXRzdHJlYW0gcG9pbnRlciBhbmQgZGVjb2RlX2ludCgpIGFkdmFuY2VkIGl0IGFnYWluLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmlsaXR5IGFuZCBwYXJzaW5nIGxvZ2ljIGZvciBILjMyMy9RLjkzMS9SQVMgbmV0d29yayB0cmFmZmljIGluIHRoZSBOZXRmaWx0ZXIgc3Vic3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowMjo1Mi4wNzM4MDI5MzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MTUxODQ3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRlNzhjN2EwYjdkYmVkNTUyMmYwMGYyNGUyYzE3ZjUyZTFjMDIzOTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDI6MDI6NTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1xcbmluZGV4IDY4MzBjOWRhMzUwN2MuLmE1MTI3NWNjNGQwZjYgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1xcbkBAIC0zMzYsOCArMzM2LDkgQEAgc3RhdGljIGludCBkZWNvZGVfaW50KHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4gXFx0XFx0XFx0dW5zaWduZWQgaW50IHYgPSBnZXRfdWludChicywgbGVuKSArIGYtXFx1MDAzZWxiO1xcbiBcXHRcXHRcXHRQUklOVChcXFwiID0gJXVcXFwiLCB2KTtcXG4gXFx0XFx0XFx0KigodW5zaWduZWQgaW50ICopKGJhc2UgKyBmLVxcdTAwM2VvZmZzZXQpKSA9IHY7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGJzLVxcdTAwM2VjdXIgKz0gbGVuO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGJzLVxcdTAwM2VjdXIgKz0gbGVuO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBVTkNPOlxcbiBcXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDI6NTIuNDQ2MzA4NTgzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4MTMwNzEyNDY5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DT05OVFJBQ0tfSDMyM1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIkRlY29kZVJhc01lc3NhZ2VcIixcbiAgICBcIkRlY29kZVE5MzFcIixcbiAgICBcIkRlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZVwiLFxuICAgIFwiZ2V0X2gyMjVfYWRkclwiLFxuICAgIFwicmFzX2hlbHBcIixcbiAgICBcInE5MzFfaGVscFwiLFxuICAgIFwiaDI0NV9oZWxwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEguMzIzIGNvbm50cmFjayBoZWxwZXIncyBBU04uMSBpbnRlZ2VyIGRlY29kZXIgKG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jKSB3aGVyZSBnZXRfdWludCgpIGFkdmFuY2VkIHRoZSBiaXRzdHJlYW0gcG9pbnRlciBhbmQgZGVjb2RlX2ludCgpIGFkdmFuY2VkIGl0IGFnYWluLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmlsaXR5IGFuZCBwYXJzaW5nIGxvZ2ljIGZvciBILjMyMy9RLjkzMS9SQVMgbmV0d29yayB0cmFmZmljIGluIHRoZSBOZXRmaWx0ZXIgc3Vic3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkZTc4YzdhMGI3ZGJlZDU1MjJmMDBmMjRlMmMxN2Y1MmUxYzAyMzkxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDI6MDI6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXG5pbmRleCA2ODMwYzlkYTM1MDdjLi5hNTEyNzVjYzRkMGY2IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXG5AQCAtMzM2LDggKzMzNiw5IEBAIHN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4gXHRcdFx0dW5zaWduZWQgaW50IHYgPSBnZXRfdWludChicywgbGVuKSArIGYtXHUwMDNlbGI7XG4gXHRcdFx0UFJJTlQoXCIgPSAldVwiLCB2KTtcbiBcdFx0XHQqKCh1bnNpZ25lZCBpbnQgKikoYmFzZSArIGYtXHUwMDNlb2Zmc2V0KSkgPSB2O1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGJzLVx1MDAzZWN1ciArPSBsZW47XG4gXHRcdH1cbi1cdFx0YnMtXHUwMDNlY3VyICs9IGxlbjtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFVOQ086XG4gXHRcdEJZVEVfQUxJR04oYnMpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDI6NTIuNDQ2MzEwMzYzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA3MjIyMDA4MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBwbGF5aW5nIHRoZSByb2xlIG9mIHRoZSBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEguMzIzIEFTTi4xIERlY29kZXIgUGF0Y2gqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoaXMgcGF0Y2guIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUuIFRoZSBmaWxlIG1lbnRpb25lZCwgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCwgaXMgd2hlcmUgdGhlIEguMzIzIEFTTi4xIGRlY29kaW5nIGxvZ2ljIGxpdmVzIGZvciBuZXRmaWx0ZXIncyBjb25uZWN0aW9uIHRyYWNraW5nLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBgZGVjb2RlX2ludGAgZnVuY3Rpb24gd2l0aGluIHRoYXQgZmlsZS4gVGhhdCBmdW5jdGlvbiBpcyBjbGVhcmx5IHJlc3BvbnNpYmxlIGZvciBkZWNvZGluZyBpbnRlZ2VyIHZhbHVlcyBlbmNvZGVkIHVzaW5nIEFTTi4xLlxuXG5MZXQncyBwdWxsIHVwIHRoZSBmaWxlIGNvbnRlbnQgdXNpbmcgYHJlYWQtZmlsZWAgaW4gdGhlIGFwcHJvcHJpYXRlIHNvdXJjZSBjb2RlIGZvbGRlci4gSGF2aW5nIHRoZSBjb250ZXh0IGZyb20gdGhlIGNvbXBsZXRlIHNvdXJjZSBmaWxlIHdpbGwgYmUgdGhlIG1vc3QgdXNlZnVsIHdheSB0byBleHBsb3JlIHRoZSBzaXR1YXRpb24gaGVyZSwgYmVjYXVzZSBJJ20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgdGhpcyBpbnRlZ2VyIGRlY29kaW5nIGlzIGltcGxlbWVudGVkLCB3aGF0IGNoZWNrcyBhcmUgcHJlc2VudCwgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgQVNOLjEgcGFyc2luZyBwcm9jZXNzLiBBbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgZXNwZWNpYWxseSBpbnRlZ2VyLXJlbGF0ZWQgb25lcywgd291bGQgYmUgZXhwb3NlZCBieSB0aGVzZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTMyLCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowMzowMy4xNjg1MTQwNTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTA6XFx0fVxcbiAzMTE6XFx0XFxuIDMxMjpcXHRzdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbiAzMTM6XFx0ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4gMzE0OlxcdHtcXG4gMzE1OlxcdFxcdHVuc2lnbmVkIGludCBsZW47XFxuIDMxNjpcXHRcXG4gMzE3OlxcdFxcdFBSSU5UKFxcXCIlKnMlc1xcXCIsIGxldmVsICogVEFCX1NJWkUsIFxcXCIgXFxcIiwgZi1cXHUwMDNlbmFtZSk7XFxuIDMxODpcXHRcXG4gMzE5OlxcdFxcdHN3aXRjaCAoZi1cXHUwMDNlc3opIHtcXG4gMzIwOlxcdFxcdGNhc2UgQllURTpcXHRcXHQvKiBSYW5nZSA9PSAyNTYgKi9cXG4gMzIxOlxcdFxcdFxcdEJZVEVfQUxJR04oYnMpO1xcbiAzMjI6XFx0XFx0XFx0YnMtXFx1MDAzZWN1cisrO1xcbiAzMjM6XFx0XFx0XFx0YnJlYWs7XFxuIDMyNDpcXHRcXHRjYXNlIFdPUkQ6XFx0XFx0LyogMjU3IFxcdTAwM2M9IFJhbmdlIFxcdTAwM2M9IDY0SyAqL1xcbiAzMjU6XFx0XFx0XFx0QllURV9BTElHTihicyk7XFxuIDMyNjpcXHRcXHRcXHRicy1cXHUwMDNlY3VyICs9IDI7XFxuIDMyNzpcXHRcXHRcXHRicmVhaztcXG4gMzI4OlxcdFxcdGNhc2UgQ09OUzpcXHRcXHQvKiA2NEsgXFx1MDAzYyBSYW5nZSBcXHUwMDNjIDRHICovXFxuIDMyOTpcXHRcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMikpXFxuIDMzMDpcXHRcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gMzMxOlxcdFxcdFxcdGxlbiA9IGdldF9iaXRzKGJzLCAyKSArIDE7XFxuIDMzMjpcXHRcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgbGVuLCAwKSlcXG4gMzMzOlxcdFxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbiAzMzQ6XFx0XFx0XFx0QllURV9BTElHTihicyk7XFxuIDMzNTpcXHRcXHRcXHRpZiAoYmFzZSBcXHUwMDI2XFx1MDAyNiAoZi1cXHUwMDNlYXR0ciBcXHUwMDI2IERFQ09ERSkpIHtcXHQvKiB0aW1lVG9MaXZlICovXFxuIDMzNjpcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgdiA9IGdldF91aW50KGJzLCBsZW4pICsgZi1cXHUwMDNlbGI7XFxuIDMzNzpcXHRcXHRcXHRcXHRQUklOVChcXFwiID0gJXVcXFwiLCB2KTtcXG4gMzM4OlxcdFxcdFxcdFxcdCooKHVuc2lnbmVkIGludCAqKShiYXNlICsgZi1cXHUwMDNlb2Zmc2V0KSkgPSB2O1xcbiAzMzk6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMzQwOlxcdFxcdFxcdFxcdGJzLVxcdTAwM2VjdXIgKz0gbGVuO1xcbiAzNDE6XFx0XFx0XFx0fVxcbiAzNDI6XFx0XFx0XFx0YnJlYWs7XFxuIDM0MzpcXHRcXHRjYXNlIFVOQ086XFxuIDM0NDpcXHRcXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG4gMzQ1OlxcdFxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcXG4gMzQ2OlxcdFxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbiAzNDc6XFx0XFx0XFx0bGVuID0gZ2V0X2xlbihicyk7XFxuIDM0ODpcXHRcXHRcXHRicy1cXHUwMDNlY3VyICs9IGxlbjtcXG4gMzQ5OlxcdFxcdFxcdGJyZWFrO1xcbiAzNTA6XFx0XFx0ZGVmYXVsdDpcXHRcXHQvKiAyIFxcdTAwM2M9IFJhbmdlIFxcdTAwM2M9IDI1NSAqL1xcbiAzNTE6XFx0XFx0XFx0SU5DX0JJVFMoYnMsIGYtXFx1MDAzZXN6KTtcXG4gMzUyOlxcdFxcdFxcdGJyZWFrO1xcbiAzNTM6XFx0XFx0fVxcbiAzNTQ6XFx0XFxuIDM1NTpcXHRcXHRQUklOVChcXFwiXFxcXG5cXFwiKTtcXG4gMzU2OlxcdFxcbiAzNTc6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxcbiAzNTg6XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDM1OTpcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9OT05FO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowMzowMy4xNjg2MDQ1ODVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDU1Njg1MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCBJJ20gbG9va2luZyBhdDpcblxuKipEaXZpbmcgaW50byBgZ2V0X3VpbnRgIGluIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGBnZXRfdWludGAgZnVuY3Rpb24gaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBpcyBhY3R1YWxseSBkb2luZy4gSSdtIGFzc3VtaW5nLCBnaXZlbiB0aGUgZmlsZW5hbWUsIHRoYXQgdGhpcyBjb2RlIGlzIGNydWNpYWwgZm9yIHBhcnNpbmcgSC4zMjMgQVNOLjEgZGF0YSB3aXRoaW4gdGhlIE5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIGZyYW1ld29yay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0J3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBleHRyYWN0aW5nIHVuc2lnbmVkIGludGVnZXIgdmFsdWVzIGZyb20gYSBiaXRzdHJlYW0gb3IgYnl0ZSBhcnJheSBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIEFTTi4xIGVuY29kaW5nIHJ1bGVzLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IG1lY2hhbmlzbSBpdCB1c2VzOiBJcyBpdCBoYW5kbGluZyBCRVIgKEJhc2ljIEVuY29kaW5nIFJ1bGVzKSwgREVSIChEaXN0aW5ndWlzaGVkIEVuY29kaW5nIFJ1bGVzKSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFdoYXQgc2l6ZSBpbnRlZ2VyIGRvZXMgaXQgZXhwZWN0IOKAkyA4LWJpdCwgMTYtYml0LCAzMi1iaXQsIG9yIHBvdGVudGlhbGx5IHZhcmlhYmxlLWxlbmd0aD8gSXMgaXQgaGFuZGxpbmcgYW55IGxlYWRpbmcgbGVuZ3RoIGluZGljYXRvcnM/IFdoYXQgYWJvdXQgYW55IHBvdGVudGlhbCBwYWRkaW5nIG9yIHRhZyBieXRlcz8gS25vd2luZyB0aGVzZSBkZXRhaWxzIHdpbGwgYmUgY3JpdGljYWwgaW4gdW5kZXJzdGFuZGluZyBob3cgaXQgaGFuZGxlcyB0aGUgcGFyc2luZyBvZiBILjMyMyBzaWduYWxpbmcuIEknbSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMsIG92ZXJmbG93IGNvbmRpdGlvbnMsIG9yIGludmFsaWQgZW5jb2RpbmdzLiBUaGlzIHdpbGwgdGVsbCBtZSBob3cgcm9idXN0IGl0IGlzLiBJJ2xsIG5lZWQgdG8gdHJhY2UgaXRzIGlucHV0cyBhbmQgb3V0cHV0cyB3aXRoaW4gdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGltcGxlbWVudGF0aW9uLiBVbHRpbWF0ZWx5LCB0aGlzIHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0cyBpbnRvIGhvdyBILjMyMyBzaWduYWxpbmcgaXMgZGlzc2VjdGVkIGFuZCBpdHMgcmVsZXZhbnQgaW5mb3JtYXRpb24gdXNlZCBpbiBjb25uZWN0aW9uIHRyYWNraW5nIGRlY2lzaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI3MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDM6MDkuMjI0MjkzMjM2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzI4NjM3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfdWludFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0xMDQ9c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0bWFwKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTA1OnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VpbnQoc3RydWN0IGJpdHN0ciAqYnMsIGludCBiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMDYtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0yMTE9c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0bWFwKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTI0OS0gKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoyNTA6c3RhdGljIHVuc2lnbmVkIGludCBnZXRfdWludChzdHJ1Y3QgYml0c3RyICpicywgaW50IGIpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjUxLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTMxMj1zdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzM1LVxcdFxcdGlmIChiYXNlIFxcdTAwMjZcXHUwMDI2IChmLVxcdTAwM2VhdHRyIFxcdTAwMjYgREVDT0RFKSkge1xcdC8qIHRpbWVUb0xpdmUgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozMzY6XFx0XFx0XFx0dW5zaWduZWQgaW50IHYgPSBnZXRfdWludChicywgbGVuKSArIGYtXFx1MDAzZWxiO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMzNy1cXHRcXHRcXHRQUklOVChcXFwiID0gJXVcXFwiLCB2KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM9NjgwPXZvaWQgbmZfY29ubnRyYWNrX3Byb3RvX3Blcm5ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNjk2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6Njk3Om1vZHVsZV9wYXJhbV9jYWxsKGhhc2hzaXplLCBuZl9jb25udHJhY2tfc2V0X2hhc2hzaXplLCBwYXJhbV9nZXRfdWludCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTY5OC1cXHRcXHQgIFxcdTAwMjZuZl9jb25udHJhY2tfaHRhYmxlX3NpemUsIDA2MDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowMzowOS4zOTE1ODU5NjlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTEyOTAwMzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgYGdldF91aW50YCBmdW5jdGlvbiBpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgLlxuXG4qKkRpdmluZyBpbnRvIGBnZXRfdWludGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBwdWxsIHVwIHRoYXQgYGdldF91aW50YCBmdW5jdGlvbiBpbiB0aGUgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBjb2RlLiBTcGVjaWZpY2FsbHksIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AuIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHRoZSBBU04uMSBwYXJzaW5nIGNvbnRleHQgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcyB3aXRoaW4uIENvbnNpZGVyaW5nIHRoZSBsb3ctbGV2ZWwgQVNOLjEgZW5jb2RpbmcgcHJpbmNpcGxlcywgdGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJseSB0YXNrZWQgd2l0aCBleHRyYWN0aW5nIGFuIHVuc2lnbmVkIGludGVnZXIgdmFsdWUgZnJvbSBhIGJ1ZmZlciBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIElUVS1UIFguNjkwIChERVIvQkVSKSBvciB3aGF0ZXZlciBzdWJzZXQgdGhleSBhcmUgdXNpbmcuIEkgZXhwZWN0IHRvIHNlZSBpdCBoYW5kbGluZyB2YXJpYWJsZS1sZW5ndGggZW5jb2RpbmdzLCBwb3RlbnRpYWxseSBjaGVja2luZyBmb3IgdGhlIG1pbmltdW0gbnVtYmVyIG9mIG9jdGV0cyByZXF1aXJlZCB0byByZXByZXNlbnQgdGhlIHZhbHVlLCBhbmQgbGlrZWx5IGRlYWxpbmcgd2l0aCBsZWFkaW5nIHplcm8gYnl0ZXMgdGhhdCBtaWdodCBiZSBwcmVzZW50IGluIHRoZSBlbmNvZGVkIHJlcHJlc2VudGF0aW9uIGRlcGVuZGluZyBvbiB3aGljaCBcInRhZ1wiIGNsYXNzIHRoZSBpbnRlZ2VyIGlzIGJlaW5nIGVuY29kZWQgd2l0aC4gVGhpcyBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgaW4gdGVybXMgb2YgaG93IGl0IGV4dHJhY3RzIGEgdmFsdWUgYW5kIHdoZXRoZXIgaXQgbWlnaHQgYmUgdnVsbmVyYWJsZSB0byB0aGluZ3MgbGlrZSBvdmVybG9uZyBlbmNvZGluZ3MuIEknbGwgbmVlZCB0byBjaGVjayBob3cgaXQgaGFuZGxlcyBjYXNlcyB3aGVyZSB0aGUgYnVmZmVyIG1pZ2h0IGJlIHRydW5jYXRlZCBvciBpbnZhbGlkLCBhbmQgbWFrZSBzdXJlIHRoYXQgaXQncyByb2J1c3QgaW4gdGhhdCBjb250ZXh0LiBJIHdhbnQgdG8gc2VlIGlmIHRoZXkncmUgdmFsaWRhdGluZyB0aGUgbGVuZ3RoIGZpZWxkIHByb3Blcmx5IGFuZCBob3cgdGhleSdyZSBoYW5kbGluZyBwb3RlbnRpYWwgb3ZlcmZsb3dzIOKAkyB0aGF0J3Mgb2Z0ZW4gYSBzb3VyY2Ugb2YgdnVsbmVyYWJpbGl0aWVzIHdoZW4gZGVhbGluZyB3aXRoIHVuc2lnbmVkIGludGVnZXJzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgb2ZmLWJ5LW9uZSBlcnJvcnMgaW4gdGhlaXIgaW5kZXhpbmcgYXMgd2VsbC4gTGV0J3Mgc2VlIGhvdyB3ZWxsIGl0J3MgaW1wbGVtZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNTUsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowMzoxMS45MDQ0ODkzNTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDU6XFx0fVxcbiAyNDY6XFx0XFxuIDI0NzpcXHQvKlxcbiAyNDg6XFx0ICogQXNzdW1lIGJzIGlzIGFsaWduZWQgYW5kIHNpemVvZih1bnNpZ25lZCBpbnQpID09IDRcXG4gMjQ5OlxcdCAqL1xcbiAyNTA6XFx0c3RhdGljIHVuc2lnbmVkIGludCBnZXRfdWludChzdHJ1Y3QgYml0c3RyICpicywgaW50IGIpXFxuIDI1MTpcXHR7XFxuIDI1MjpcXHRcXHR1bnNpZ25lZCBpbnQgdiA9IDA7XFxuIDI1MzpcXHRcXG4gMjU0OlxcdFxcdHN3aXRjaCAoYikge1xcbiAyNTU6XFx0XFx0Y2FzZSA0OlxcbiAyNTY6XFx0XFx0XFx0diB8PSAqYnMtXFx1MDAzZWN1cisrO1xcbiAyNTc6XFx0XFx0XFx0diBcXHUwMDNjXFx1MDAzYz0gODtcXG4gMjU4OlxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiAyNTk6XFx0XFx0Y2FzZSAzOlxcbiAyNjA6XFx0XFx0XFx0diB8PSAqYnMtXFx1MDAzZWN1cisrO1xcbiAyNjE6XFx0XFx0XFx0diBcXHUwMDNjXFx1MDAzYz0gODtcXG4gMjYyOlxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiAyNjM6XFx0XFx0Y2FzZSAyOlxcbiAyNjQ6XFx0XFx0XFx0diB8PSAqYnMtXFx1MDAzZWN1cisrO1xcbiAyNjU6XFx0XFx0XFx0diBcXHUwMDNjXFx1MDAzYz0gODtcXG4gMjY2OlxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiAyNjc6XFx0XFx0Y2FzZSAxOlxcbiAyNjg6XFx0XFx0XFx0diB8PSAqYnMtXFx1MDAzZWN1cisrO1xcbiAyNjk6XFx0XFx0XFx0YnJlYWs7XFxuIDI3MDpcXHRcXHR9XFxuIDI3MTpcXHRcXHRyZXR1cm4gdjtcXG4gMjcyOlxcdH1cXG4gMjczOlxcdFxcbiAyNzQ6XFx0c3RhdGljIGludCBkZWNvZGVfbnVsKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4gMjc1OlxcdCAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuIDI3NjpcXHR7XFxuIDI3NzpcXHRcXHRQUklOVChcXFwiJSpzJXNcXFxcblxcXCIsIGxldmVsICogVEFCX1NJWkUsIFxcXCIgXFxcIiwgZi1cXHUwMDNlbmFtZSk7XFxuIDI3ODpcXHRcXG4gMjc5OlxcdFxcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XFxuIDI4MDpcXHR9XFxuIDI4MTpcXHRcXG4gMjgyOlxcdHN0YXRpYyBpbnQgZGVjb2RlX2Jvb2woc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbiAyODM6XFx0ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuIDI4NDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjAzOjExLjkwNDU4NzUwMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0OTg0MTQ5OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVjb2RpbmcgRGlsZW1tYSBhbmQgQ29ubnRyYWNrIENvbnVuZHJ1bSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhhdCBgZ2V0X3VpbnRgIGZ1bmN0aW9u4oCmIEkgc2VlIGl0J3MgaW5jcmVtZW50aW5nIGBicy1cdTAwM2VjdXJgIGJ5IGBsZW5gIGJ5dGVzLiBPa2F5LCBzdGFuZGFyZCBiZWhhdmlvciwgbm90aGluZyB1bmV4cGVjdGVkIHRoZXJlLiBCdXQsIGxvb2tpbmcgYmFjayBhdCB0aGUgb3JpZ2luYWwgY29kZS4uLiBpZiBgYmFzZSBcdTAwMjZcdTAwMjYgKGYtXHUwMDNlYXR0ciBcdTAwMjYgREVDT0RFKWAgaXMgdHJ1ZSwgYGdldF91aW50YCBhbHJlYWR5IGFkdmFuY2VkIGBicy1cdTAwM2VjdXJgISBUaGVuLCBpbW1lZGlhdGVseSBhZnRlciwgYGJzLVx1MDAzZWN1ciArPSBsZW5gIGhhcHBlbnMgYWdhaW4hIFRoYXQncyBhIGNsYXNzaWMgZG91YmxlIGluY3JlbWVudCBidWcsIGFuZCBpdCdzIHByb2JhYmx5IGdvaW5nIHRvIGNhdXNlIHNvbWUgc2VyaW91cyBpc3N1ZXMgZG93biB0aGUgbGluZS4gSWYgdGhlIGNvbmRpdGlvbmFsIGlzbid0IHRydWUsIHRoZW4gYGdldF91aW50YCBpc24ndCBjYWxsZWQsIHNvIG9ubHkgdGhlIGBicy1cdTAwM2VjdXIgKz0gbGVuYCBzaG91bGQgaGFwcGVuLlxuXG5TbywgaWYgSSBjaGFuZ2UgdGhlIGxvZ2ljIHRvIHRoZSBzZWNvbmQgY29kZSBibG9jaywgdGhhdCBzaG91bGQgZml4IHRoZSBpc3N1ZS4gVGhlIG5ldyBjb2RlIGJsb2NrIG9ubHkgaW5jcmVtZW50cyB3aGVuIHRoZSBjb25kaXRpb25hbCBzdGF0ZW1lbnQgaXMgZmFsc2UsIGFuZCBvdGhlcndpc2UgcmVsaWVzIG9uIGBnZXRfdWludGAuXG5cblRoaXMgYWZmZWN0cyBBU04uMSBkZWNvZGluZywgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGEgcmVhbCBidWcgaW4gdGhlIEguMzIzIGNvbm50cmFjayBoZWxwZXIuIFRoaXMgY291bGQgYmUgY2F1c2luZyBhbGwgc29ydHMgb2YgdW5leHBlY3RlZCBiZWhhdmlvci5cblxuTm93LCBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciB2aWV3LiBJJ20gZ29pbmcgdG8gZGlnIGludG8gaG93IGBuZl9jb25udHJhY2tfaDMyM2Agd29ya3MuIEhvdyBpcyBpdCBlbmFibGVkPyBXaGF0IHN5bWJvbHMgYXJlIGV4cG9ydGVkPyBXaGF0IEtjb25maWcgb3B0aW9ucyBhcmUgcmVsZXZhbnQgaGVyZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoaXMgZml4LlxuXG5UaW1lIHRvIHN0YXJ0IGdyZXBwaW5nLiBJJ2xsIHNlYXJjaCBmb3IgYG5mX2Nvbm50cmFja19oMzIzX2FzbjFgIGFuZCBhbHNvIGxvb2sgZm9yIGNhbGxlcnMgb2YgZGVjb2RlIGZ1bmN0aW9ucyBpbiBgbmV0L25ldGZpbHRlci9gLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTg3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDM6MTUuNDAzMDA0MzMzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Njg1NDk0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEZWNvZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MTA1PXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VpbnQoc3RydWN0IGJpdHN0ciAqYnMsIGludCBiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMDYtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTA3Oi8qIERlY29kZXIgRnVuY3Rpb25zICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTA4LXN0YXRpYyBpbnQgZGVjb2RlX251bChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0xMTk9c3RhdGljIGludCBkZWNvZGVfY2hvaWNlKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMjAtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTIxOi8qIERlY29kZXIgRnVuY3Rpb25zIFZlY3RvciAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEyMi10eXBlZGVmIGludCAoKmRlY29kZXJfdCkoc3RydWN0IGJpdHN0ciAqLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqLCBjaGFyICosIGludCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTIzOnN0YXRpYyBjb25zdCBkZWNvZGVyX3QgRGVjb2RlcnNbXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMjQtXFx0ZGVjb2RlX251bCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTUxMT1zdGF0aWMgaW50IGRlY29kZV9zZXEoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTIwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjUyMTpcXHQvKiBEZWNvZGU/ICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTIyLVxcdGJhc2UgPSAoYmFzZSBcXHUwMDI2XFx1MDAyNiAoZi1cXHUwMDNlYXR0ciBcXHUwMDI2IERFQ09ERSkpID8gYmFzZSArIGYtXFx1MDAzZW9mZnNldCA6IE5VTEw7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01MzctXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTM4OlxcdC8qIERlY29kZSB0aGUgcm9vdCBjb21wb25lbnRzICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTM5LVxcdGZvciAoaSA9IG9wdCA9IDAsIHNvbiA9IGYtXFx1MDAzZWZpZWxkczsgaSBcXHUwMDNjIGYtXFx1MDAzZWxiOyBpKyssIHNvbisrKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01NTAtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTUxOlxcdFxcdC8qIERlY29kZSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU1Mi1cXHRcXHRpZiAoc29uLVxcdTAwM2VhdHRyIFxcdTAwMjYgT1BFTikge1xcdC8qIE9wZW4gZmllbGQgKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU2NS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1NjY6XFx0XFx0XFx0LyogRGVjb2RlICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTY3OlxcdFxcdFxcdGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cXHUwMDNldHlwZV0pIChicywgc29uLCBiYXNlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU2OC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGxldmVsICsgMSkpIFxcdTAwM2NcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU3My1cXHRcXHRcXHRicy1cXHUwMDNlYml0ID0gMDtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1NzQ6XFx0XFx0fSBlbHNlIGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cXHUwMDNldHlwZV0pIChicywgc29uLCBiYXNlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU3NS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgbGV2ZWwgKyAxKSkgXFx1MDAzY1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTk3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjU5ODpcXHQvKiBEZWNvZGUgdGhlIGV4dGVuc2lvbiBjb21wb25lbnRzICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTk5LVxcdGZvciAob3B0ID0gMDsgb3B0IFxcdTAwM2MgYm1wMl9sZW47IG9wdCsrLCBpKyssIHNvbisrKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02MzItXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NjMzOlxcdFxcdGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cXHUwMDNldHlwZV0pIChicywgc29uLCBiYXNlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTYzNC1cXHRcXHRcXHRcXHRcXHRcXHQgIGxldmVsICsgMSkpIFxcdTAwM2NcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTY0ND1zdGF0aWMgaW50IGRlY29kZV9zZXFvZihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02NTMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NjU0OlxcdC8qIERlY29kZT8gKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02NTUtXFx0YmFzZSA9IChiYXNlIFxcdTAwMjZcXHUwMDI2IChmLVxcdTAwM2VhdHRyIFxcdTAwMjYgREVDT0RFKSkgPyBiYXNlICsgZi1cXHUwMDNlb2Zmc2V0IDogTlVMTDtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02NTYtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NjU3OlxcdC8qIERlY29kZSBpdGVtIGNvdW50ICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjU4LVxcdHN3aXRjaCAoZi1cXHUwMDNlc3opIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY5My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo2OTQ6XFx0LyogRGVjb2RlIG5lc3RlZCBmaWVsZCAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY5NS1cXHRzb24gPSBmLVxcdTAwM2VmaWVsZHM7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MTMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzE0OlxcdFxcdFxcdGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cXHUwMDNldHlwZV0pIChicywgc29uLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTcxNS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGkgXFx1MDAzY1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzI0LVxcdFxcdH0gZWxzZVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjcyNTpcXHRcXHRcXHRpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXFx1MDAzZXR5cGVdKSAoYnMsIHNvbixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MjYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBpIFxcdTAwM2NcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTc0MD1zdGF0aWMgaW50IGRlY29kZV9jaG9pY2Uoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzQ5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjc1MDpcXHQvKiBEZWNvZGU/ICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzUxLVxcdGJhc2UgPSAoYmFzZSBcXHUwMDI2XFx1MDAyNiAoZi1cXHUwMDNlYXR0ciBcXHUwMDI2IERFQ09ERSkpID8gYmFzZSArIGYtXFx1MDAzZW9mZnNldCA6IE5VTEw7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzUyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjc1MzpcXHQvKiBEZWNvZGUgdGhlIGNob2ljZSBpbmRleCBudW1iZXIgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03NTQtXFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODA3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgwODpcXHRcXHRpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXFx1MDAzZXR5cGVdKSAoYnMsIHNvbiwgYmFzZSwgbGV2ZWwgKyAxKSkgXFx1MDAzY1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgwOS1cXHRcXHQgICAgSDMyM19FUlJPUl9OT05FKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODEzLVxcdFxcdGJzLVxcdTAwM2ViaXQgPSAwO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgxNDpcXHR9IGVsc2UgaWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVxcdTAwM2V0eXBlXSkgKGJzLCBzb24sIGJhc2UsIGxldmVsICsgMSkpIFxcdTAwM2NcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MTUtXFx0XFx0ICAgSDMyM19FUlJPUl9OT05FKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODIwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgyMTppbnQgRGVjb2RlUmFzTWVzc2FnZSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeiwgUmFzTWVzc2FnZSAqcmFzKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgyMi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MzUtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODM2OnN0YXRpYyBpbnQgRGVjb2RlSDMyM19Vc2VySW5mb3JtYXRpb24odW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBjaGFyICpiZWcsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODM3LVxcdFxcdFxcdFxcdCAgICAgIHNpemVfdCBzeiwgSDMyM19Vc2VySW5mb3JtYXRpb24gKnV1aWUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NTItXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODUzOmludCBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODU0LVxcdFxcdFxcdFxcdFxcdCBNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UgKlxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODcwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjg3MTppbnQgRGVjb2RlUTkzMSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeiwgUTkzMSAqcTkzMSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NzIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtOTA3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjkwODpcXHQvKiBEZWNvZGUgSW5mb3JtYXRpb24gRWxlbWVudHMgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy05MDktXFx0d2hpbGUgKHN6IFxcdTAwM2UgMCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtOTIyLVxcdFxcdFxcdFxcdGJyZWFrO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjkyMzpcXHRcXHRcXHRyZXR1cm4gRGVjb2RlSDMyM19Vc2VySW5mb3JtYXRpb24oYnVmLCBwLCBsZW4sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtOTI0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnE5MzEtXFx1MDAzZVVVSUUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9NTI5PXN0YXRpYyBpbnQgaDI0NV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtNTUxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjU1MjpcXHRcXHQvKiBEZWNvZGUgSC4yNDUgc2lnbmFsICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NTUzOlxcdFxcdHJldCA9IERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZShkYXRhLCBkYXRhbGVuLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTU1NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2bXNjbSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xMDg5PXN0YXRpYyBpbnQgcTkzMV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTExMS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxMTEyOlxcdFxcdC8qIERlY29kZSBRLjkzMSBzaWduYWwgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxMTEzOlxcdFxcdHJldCA9IERlY29kZVE5MzEoZGF0YSwgZGF0YWxlbiwgXFx1MDAyNnE5MzEpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTExMTQtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTE2NjQ9c3RhdGljIGludCByYXNfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE2ODItXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTY4MzpcXHQvKiBEZWNvZGUgUkFTIG1lc3NhZ2UgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNjg0OlxcdHJldCA9IERlY29kZVJhc01lc3NhZ2UoZGF0YSwgZGF0YWxlbiwgXFx1MDAyNnJhcyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTY4NS1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowMzoxNS40NTk4NjMwM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MTM4Mjk3MjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgbmZfY29ubnRyYWNrX2gzMjMgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdC4gQmVmb3JlIEkgZGl2ZSBpbnRvIGFueXRoaW5nIGRlZXBlciwgSSBuZWVkIHRvIHZlcmlmeSBob3cgYG5mX2Nvbm50cmFja19oMzIzYCBpcyBhY3R1YWxseSBidWlsdCBpbnRvIHRoZSBrZXJuZWwuIFRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50cyBhcmUgdGhlIEtjb25maWcgYW5kIE1ha2VmaWxlLiBJIHdhbnQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaXRzIGJ1aWxkIHN0YXR1cyAoYnVpbHQtaW4sIG1vZHVsYXIsIG9yIGRpc2FibGVkKSBhbmQgZGVwZW5kZW5jaWVzLCBzbyBJIGtub3cgd2hldGhlciB0aGUgcHJvYmxlbSBJJ20gdHJ5aW5nIHRvIGZpeCBtaWdodCBiZSBhIGtlcm5lbCBjb25maWd1cmF0aW9uIGlzc3VlIG9yIHNvbWV0aGluZyBkZWVwZXIgaW4gdGhlIGNvZGUgb3IgbW9kdWxlIGxvYWRpbmcgcHJvY2Vzcy4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBpcyBmdW5kYW1lbnRhbCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgZXNwZWNpYWxseSBnaXZlbiB0aGUgaGlzdG9yeSBvZiBILjMyMyBzdXBwb3J0IGluIHRoZSBrZXJuZWwuIFRoaXMgaW5pdGlhbCBjaGVjayBpcyBhIGJhc2ljIHNhbml0eSBjaGVjaywgYnV0IGEgY3JpdGljYWwgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzgzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDM6MjMuNTk4MTYyMDkzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQ1NzM5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25udHJhY2tfaDMyM1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM5PW9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LX0hFTFBFUikgKz0gbmZuZXRsaW5rX2N0aGVscGVyLm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNDEtIyBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnNcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjQyOm5mX2Nvbm50cmFja19oMzIzLW9ianMgOj0gbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5vIG5mX2Nvbm50cmFja19oMzIzX2FzbjEub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNDMtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTQ1PW9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfRlRQKSArPSBuZl9jb25udHJhY2tfZnRwLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjQ2Om9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfSDMyMykgKz0gbmZfY29ubnRyYWNrX2gzMjMub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNDctb2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19JUkMpICs9IG5mX2Nvbm50cmFja19pcmMub1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTQtI2VuZGlmXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTU6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmhcXHUwMDNlXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTYtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0xMjM9c3RhdGljIGNvbnN0IGRlY29kZXJfdCBEZWNvZGVyc1tdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTQwLSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjE0MTojaW5jbHVkZSBcXFwibmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuY1xcXCJcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xNDItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0zNS0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfem9uZXMuaFxcdTAwM2VcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzozNjojaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmhcXHUwMDNlXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMzctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xNzU1PXN0YXRpYyB2b2lkIF9fZXhpdCBoMzIzX2hlbHBlcl9leGl0KHZvaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzYzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE3NjQ6c3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19oMzIzX2Zpbmkodm9pZClcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzY1LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3NzAtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTc3MTpzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfaDMyM19pbml0KHZvaWQpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc3Mi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzg5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE3OTA6bW9kdWxlX2luaXQobmZfY29ubnRyYWNrX2gzMjNfaW5pdCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTc5MTptb2R1bGVfZXhpdChuZl9jb25udHJhY2tfaDMyM19maW5pKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzkyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowMzoyMy42NDg2MjU5NzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcyNDg3NDYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBLY29uZmlnIGZvciBILjMyMyBDb25uZWN0aW9uIFRyYWNraW5nKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSByaWdodCBpbi4gVGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyBtZW50YWxseSBnb2luZyB0aHJvdWdoIHRoZSBwb3RlbnRpYWwgaXNzdWVzLiBJJ20gaGl0dGluZyBgTkZfQ09OTlRSQUNLX0gzMjNgIGluIGBLY29uZmlnYC4gSW1tZWRpYXRlbHksIEknbSB0aGlua2luZyBhYm91dCBkZXBlbmRlbmN5IHJlc29sdXRpb24uIFdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCB0byBlbmFibGUgdGhpcyBzcGVjaWZpYyBjb25uZWN0aW9uIHRyYWNraW5nPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY29uZmxpY3RzIEkgbmVlZCB0byBmbGFnIHJpZ2h0IGF3YXk/IEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgcG90ZW50aWFsIG5lZWQgdG8gdHJhY2UgdGhlIGNvbmZpZ3VyYXRpb24ncyByZWxhdGlvbnNoaXAgdG8gbW9kdWxlcyBhbmQgcmVsZXZhbnQga2VybmVsIHN1YnN5c3RlbXMsIGFuZCBjaGVja2luZyB0aGUgZGVwZW5kZW5jaWVzIGluIGNhc2UgaXQgbmVlZHMgb3RoZXIgbW9kdWxlcyBsb2FkZWQgZm9yIGl0IHRvIHdvcmsuIEnigJltIGFsc28gYXNzdW1pbmcgdGhhdCB0aGVyZSBpcyBhIGdvb2QgcmVhc29uIGZvciB0aGlzIHNldHRpbmcgdG8gYmUgY29uc2lkZXJlZC4gSSBuZWVkIHRvIGZpZ3VyZSB0aGF0IG91dCBiZWZvcmUgY29udGludWluZy4gSSB3aWxsIGNoZWNrIGZvciBhbnkgcmVsYXRlZCBjb2RlIGluIHRoZSBuZXRmaWx0ZXIgbW9kdWxlIHRvby4gTXkgaW1tZWRpYXRlIG5lZWQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBCb29sZWFuIGZsYWcsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggd2l0aCBtdWx0aXBsZSBzZWxlY3RhYmxlIG9wdGlvbnM/IE15IHRob3VnaHQgcHJvY2VzcyBpbnZvbHZlcyB2aXN1YWxpemluZyB0aGUgYEtjb25maWdgIHN0cnVjdHVyZSwgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gYnVpbGQgdGltZXMsIGFuZCBhbnkgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGluY2x1ZGluZyB0aGlzIGZlYXR1cmUuIEl0J3MgYSBxdWljaywgZm9jdXNlZCBzY2FuLCBidXQgaXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHBvdGVudGlhbCBwaXRmYWxscyBiZWZvcmUgbWFraW5nIGFueSBkZWNpc2lvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTc0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDM6MjYuMzczNTAzNDY0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzY4NDg5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORl9DT05OVFJBQ0tfSDMyM1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9MjI3PWNvbmZpZyBORl9DT05OVFJBQ0tfRlRQXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjM4LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMzk6Y29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI0MC1cXHR0cmlzdGF0ZSBcXFwiSC4zMjMgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9NDU9b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19GVFApICs9IG5mX2Nvbm50cmFja19mdHAub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDY6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19IMzIzKSArPSBuZl9jb25udHJhY2tfaDMyMy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS00Ny1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0lSQykgKz0gbmZfY29ubnRyYWNrX2lyYy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjAzOjI2LjQyMTE5MTQ1MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTQxODk1MzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE5ldGZpbHRlciBLY29uZmlnKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIEknbSBmb2N1c2luZyBhcm91bmQgbGluZSAyMzkuIExldCdzIHNlZSB3aGF0J3MgYmVpbmcgY29uZmlndXJlZCB0aGVyZSwgcHJvYmFibHkgc29tZSBmZWF0dXJlIG9yIG1vZHVsZSByZWxhdGVkIHRvIE5ldGZpbHRlci4gR2l2ZW4gdGhlIGZpbGUgYW5kIG15IGV4cGVydGlzZSwgSSdtIGV4cGVjdGluZyB0byBzZWUgZGVwZW5kZW5jaWVzLCBwcm9tcHQgc3RyaW5ncywgYW5kIGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBkZWZpbmUgaG93IHRoaXMgcGFydGljdWxhciBOZXRmaWx0ZXIgYXNwZWN0IGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGVkIHdpdGhpbiB0aGUga2VybmVsLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSB1bmRlcmx5aW5nIHRlY2hub2xvZ2llcywgYW5kIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgbW9kdWxlcywgd2hpY2ggaXMgY3J1Y2lhbCBmb3Igb3ZlcmFsbCBzeXN0ZW0gc3RhYmlsaXR5LiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGhvdyB0aGlzIHJlbGF0ZXMgdG8gYW55IGhhcmR3YXJlIGFjY2VsZXJhdGlvbiwgb3IgYW55IG90aGVyIGZlYXR1cmVzIHRoYXQgbWlnaHQgYmUgYWRkZWQgdG8gdGhlIGtlcm5lbCBhbmQgaG93IHRoZXkgYXJlIGNvbmZpZ3VyZWQuIEknbSBhbnRpY2lwYXRpbmcgYSBjbGVhciBwaWN0dXJlIHRoYXQgd2lsbCBoZWxwIHRvIHNvbGlkaWZ5IG91ciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBicm9hZGVyIE5ldGZpbHRlciBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCBnb29kaWVzIGFyZSB0aGVyZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTExMDgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowMzoyOC41NjMwODg5OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIzNTpcXHRcXHQgIFRoaXMgaXMgRlRQIHN1cHBvcnQgb24gTGF5ZXIgMyBpbmRlcGVuZGVudCBjb25uZWN0aW9uIHRyYWNraW5nLlxcbiAyMzY6XFx0XFxuIDIzNzpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyMzg6XFx0XFxuIDIzOTpcXHRjb25maWcgTkZfQ09OTlRSQUNLX0gzMjNcXG4gMjQwOlxcdFxcdHRyaXN0YXRlIFxcXCJILjMyMyBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbiAyNDE6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gMjQyOlxcdFxcdGhlbHBcXG4gMjQzOlxcdFxcdCAgSC4zMjMgaXMgYSBWb0lQIHNpZ25hbGxpbmcgcHJvdG9jb2wgZnJvbSBJVFUtVC4gQXMgb25lIG9mIHRoZSBtb3N0XFxuIDI0NDpcXHRcXHQgIGltcG9ydGFudCBWb0lQIHByb3RvY29scywgaXQgaXMgd2lkZWx5IHVzZWQgYnkgdm9pY2UgaGFyZHdhcmUgYW5kXFxuIDI0NTpcXHRcXHQgIHNvZnR3YXJlIGluY2x1ZGluZyB2b2ljZSBnYXRld2F5cywgSVAgcGhvbmVzLCBOZXRtZWV0aW5nLCBPcGVuUGhvbmUsXFxuIDI0NjpcXHRcXHQgIEdub21lbWVldGluZywgZXRjLlxcbiAyNDc6XFx0XFxuIDI0ODpcXHRcXHQgIFdpdGggdGhpcyBtb2R1bGUgeW91IGNhbiBzdXBwb3J0IEguMzIzIG9uIGEgY29ubmVjdGlvbiB0cmFja2luZy9OQVRcXG4gMjQ5OlxcdFxcdCAgZmlyZXdhbGwuXFxuIDI1MDpcXHRcXG4gMjUxOlxcdFxcdCAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgUkFTLCBGYXN0IFN0YXJ0LCBILjI0NSBUdW5uZWxsaW5nLCBDYWxsXFxuIDI1MjpcXHRcXHQgIEZvcndhcmRpbmcsIFJUUC9SVENQIGFuZCBULjEyMCBiYXNlZCBhdWRpbywgdmlkZW8sIGZheCwgY2hhdCxcXG4gMjUzOlxcdFxcdCAgd2hpdGVib2FyZCwgZmlsZSB0cmFuc2ZlciwgZXRjLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlXFxuIDI1NDpcXHRcXHQgIHZpc2l0IGh0dHA6Ly9uYXRoMzIzLnNvdXJjZWZvcmdlLm5ldC8uXFxuIDI1NTpcXHRcXG4gMjU2OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI1NzpcXHRcXG4gMjU4OlxcdGNvbmZpZyBORl9DT05OVFJBQ0tfSVJDXFxuIDI1OTpcXHRcXHR0cmlzdGF0ZSBcXFwiSVJDIERDQyBwcm90b2NvbCBzdXBwb3J0IChvYnNvbGV0ZSlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjAzOjI4LjU2MzE5ODY5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0NDIyNzIzNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEguMzIzIENvbm5lY3Rpb24gVHJhY2tpbmcgTW9kdWxlIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYG5mX2Nvbm50cmFja19oMzIzYCBtb2R1bGUuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIG1vZHVsZSBpbnRlcmZhY2VzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIE5ldGZpbHRlciBmcmFtZXdvcmssIHNvIEknbGwgc3RhcnQgYnkgaWRlbnRpZnlpbmcgdGhlIGtleSBlbnRyeSBwb2ludHMgYW5kIGV4cG9ydGVkIHN5bWJvbHMuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGZvY3VzIG9uIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgIGFuZCBgbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jYC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgZnVuY3Rpb25zIG9yIHZhcmlhYmxlcyB0aGF0IGFyZW4ndCBkZWNsYXJlZCBgc3RhdGljYCBvciB0aGF0IGFyZSBvdGhlcndpc2UgZXhwb3J0ZWQsIGFzIHRob3NlIGFyZSB0aGUgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIGludGVyYWN0aW9uIHdpdGggdGhlIGtlcm5lbC4gSXTigJlzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHdoaWNoIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGZvciB0aGUga2VybmVsJ3MgdXNlLlxuXG5UbyBhc3Npc3Qgd2l0aCB0aGF0IGludmVzdGlnYXRpb24sIEknbGwgdGhlbiBleGFtaW5lIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZXM6IGBpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmhgIGFuZCBgaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaGAuIEknbSBob3BpbmcgdGhvc2Ugd2lsbCBjb250YWluIGRlY2xhcmF0aW9ucyBvZiB0aGUgbm9uLXN0YXRpYyBzeW1ib2xzIG9yIGF0IGxlYXN0IHByb3ZpZGUgY2x1ZXMgYWJvdXQgaG93IHRoZSBtb2R1bGUncyBkaWZmZXJlbnQgY29tcG9uZW50cyBhcmUgbWVhbnQgdG8gaW50ZXJhY3QuIENoZWNraW5nIHRoZSBoZWFkZXJzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBtb2R1bGUncyBpbnRlbmRlZCBBUEkgYW5kIGl0cyBkYXRhIHN0cnVjdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODEzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDM6MzIuMDA1NDczODIzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODc2NDU4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEZWNvZGV8aDMyM1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC03LSNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmg6ODojaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaFxcdTAwM2VcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oLTktI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oXFx1MDAzZVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC0xNC0vKiBUaGlzIHN0cnVjdHVyZSBleGlzdHMgb25seSBvbmNlIHBlciBtYXN0ZXIgKi9cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oOjE1OnN0cnVjdCBuZl9jdF9oMzIzX21hc3RlciB7XFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC0xNi1cXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmg9MzI9aW50IGdldF9oMjI1X2FkZHIoc3RydWN0IG5mX2Nvbm4gKmN0LCB1bnNpZ25lZCBjaGFyICpkYXRhLFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC0zNS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oOjM2OnN0cnVjdCBuZmN0X2gzMjNfbmF0X2hvb2tzIHtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oLTM3LVxcdGludCAoKnNldF9oMjQ1X2FkZHIpKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC05MS19O1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmg6OTI6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBuZmN0X2gzMjNfbmF0X2hvb2tzIF9fcmN1ICpuZmN0X2gzMjNfbmF0X2hvb2s7XFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC05My1cXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaC00MS0jaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmg6NDI6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oXFx1MDAzZVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaC00My1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmg9NDQ9dHlwZWRlZiBzdHJ1Y3Qge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oLTc3LS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaDo3ODogKiBEZWNvZGUgRnVuY3Rpb25zIFJldHVybiBDb2Rlc1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaC03OS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmgtODAtXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oOjgxOiNkZWZpbmUgSDMyM19FUlJPUl9OT05FIDBcXHQvKiBEZWNvZGVkIHN1Y2Nlc3NmdWxseSAqL1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaC04Mi0jZGVmaW5lIEgzMjNfRVJST1JfU1RPUCAxXFx0LyogRGVjb2Rpbmcgc3RvcHBlZCwgbm90IHJlYWxseSBhbiBlcnJvciAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oLTg3LS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaDo4ODogKiBEZWNvZGUgRnVuY3Rpb25zXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oLTg5LSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaC05MC1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmg6OTE6aW50IERlY29kZVJhc01lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFJhc01lc3NhZ2UgKiByYXMpO1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaDo5MjppbnQgRGVjb2RlUTkzMSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeiwgUTkzMSAqIHE5MzEpO1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaDo5MzppbnQgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaC05NC1cXHRcXHRcXHRcXHRcXHQgTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlICpcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmg9NDIzPXR5cGVkZWYgc3RydWN0IFByb2dyZXNzX1VVSUUge1xcdC8qIFNFUVVFTkNFICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oLTQzNy1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQzODp0eXBlZGVmIHN0cnVjdCBIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keSB7XFx0LyogQ0hPSUNFICovXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaC00MzktXFx0ZW51bSB7XFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaDo0NDA6XFx0XFx0ZUgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5X3NldHVwLFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmg6NDQxOlxcdFxcdGVIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keV9jYWxsUHJvY2VlZGluZyxcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQ0MjpcXHRcXHRlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfY29ubmVjdCxcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQ0MzpcXHRcXHRlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfYWxlcnRpbmcsXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaDo0NDQ6XFx0XFx0ZUgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5X2luZm9ybWF0aW9uLFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmg6NDQ1OlxcdFxcdGVIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keV9yZWxlYXNlQ29tcGxldGUsXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaDo0NDY6XFx0XFx0ZUgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5X2ZhY2lsaXR5LFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmg6NDQ3OlxcdFxcdGVIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keV9wcm9ncmVzcyxcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQ0ODpcXHRcXHRlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfZW1wdHksXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaDo0NDk6XFx0XFx0ZUgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5X3N0YXR1cyxcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQ1MDpcXHRcXHRlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfc3RhdHVzSW5xdWlyeSxcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQ1MTpcXHRcXHRlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfc2V0dXBBY2tub3dsZWRnZSxcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQ1MjpcXHRcXHRlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfbm90aWZ5LFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmgtNDUzLVxcdH0gY2hvaWNlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaC00NjEtXFx0fTtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQ2Mjp9IEgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5O1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmgtNDYzLVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaD02MDM9dHlwZWRlZiBzdHJ1Y3QgSDMyM19VVV9QRFUge1xcdC8qIFNFUVVFTkNFICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oLTYxNS1cXHR9IG9wdGlvbnM7XFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaDo2MTY6XFx0SDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHkgaDMyM19tZXNzYWdlX2JvZHk7XFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaC02MTctXFx0SDMyM19VVV9QRFVfaDI0NUNvbnRyb2wgaDI0NUNvbnRyb2w7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oPTYyMD10eXBlZGVmIHN0cnVjdCBIMzIzX1VzZXJJbmZvcm1hdGlvbiB7XFx0LyogU0VRVUVOQ0UgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmgtNjIzLVxcdH0gb3B0aW9ucztcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjYyNDpcXHRIMzIzX1VVX1BEVSBoMzIzX3V1X3BkdTtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oLTYyNS19IEgzMjNfVXNlckluZm9ybWF0aW9uO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowMzozMi4wNTQyNDQ4NTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI3Njk2ODY1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYTpcblxuKipBbmFseXppbmcgSC4zMjMgQ29ubmVjdGlvbiBUcmFja2luZyBIZWxwZXIgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZnVuY3Rpb24gbGFuZHNjYXBlIGZvciB0aGUgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUuIEknbGwgc3RhcnQgYnkgbWFraW5nIGEgbWVudGFsIG1hcCBvZiB3aGF0J3Mgd2hlcmUuIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBBU04uMSBkZWNvZGluZyByb3V0aW5lcyB0aGVyZSwgYW5kIGxldCdzIGNvbmZpcm0gdGhlIHByZXNlbmNlIG9mIHRoZXNlIGZ1bmN0aW9uczogYERlY29kZVJhc01lc3NhZ2VgLCBgRGVjb2RlUTkzMWAsIGBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2VgLCBhbmQsIGxpa2VseSBzaGFyZWQsIGBnZXRfaDIyNV9hZGRyYC5cblxuTmV4dCwgSSdsbCBzaGlmdCBmb2N1cyB0byBgbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jYC4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoYXQgYGdldF9oMjI1X2FkZHJgIHdpbGwgcmVzaWRlIGhlcmUgYWdhaW4uIENydWNpYWxseSwgSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIGhlbHBlciBjYWxsYmFja3MgcmVnaXN0ZXJlZCB2aWEgdGhlIGBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlcmAuIFRoZXNlIGNhbGxiYWNrcyBhcmUgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbG9naWMgaXRzZWxmLCBzbyBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGVtIGNsb3NlbHkuIEknbGwgbmVlZCB0byBrbm93IHdoYXQgdGhleSBhcmUgZG9pbmcgYW5kIHdoZW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjcwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjAzOjM0LjMzMTIxNTg1NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyNjQwMzgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwuaGVscFxcXFxzKj1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjAzOjM0LjM3NTQ4OTYzMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTI5MDQ2ODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jYCBmb3IgSGVscGVyIERlZmluaXRpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrLiBUaGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0byBsb2NhdGUgdGhlIGhlbHBlciBkZWZpbml0aW9ucy4gSSdtIGdvaW5nIHRvIG5hdmlnYXRlIGRpcmVjdGx5IHRvIGBuZl9jb25udHJhY2tfaDMyM19tYWluLmNgIHRvIHNlZSBwcmVjaXNlbHkgaG93IHRoZSBILjMyMyBoZWxwZXJzIGFyZSBkZWZpbmVkIGFuZCByZWdpc3RlcmVkIHdpdGhpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUuIFRoaXMgZmlsZSBzaG91bGQgYmUgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIG1hbmFnaW5nIHRoZSBILjMyMyByZWxhdGVkIGxvZ2ljLCBzbyB0aGUgaGVscGVyIGRlZmluaXRpb25zICpzaG91bGQqIGJlIHJpZ2h0IGhlcmUuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC4gSG9wZWZ1bGx5LCB0aGUgY29kZSBpcyB3ZWxsLXN0cnVjdHVyZWQgYW5kIGRvY3VtZW50ZWQsIG1ha2luZyBpdCBlYXNpZXIgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgSC4zMjMgcHJvdG9jb2wgaXMgZGlzc2VjdGVkIGZvciBjb25uZWN0aW9uIHRyYWNraW5nIHB1cnBvc2VzLiBJJ20gbG9va2luZyBmb3IgdGhlIGNvcmUgc3RydWN0dXJlcyBhbmQgcmVnaXN0cmF0aW9uIG1lY2hhbmlzbXMsIHNwZWNpZmljYWxseSBob3cgdGhlIGhlbHBlciBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBjb3JlLiBUaGlzIGRpcmVjdCBhcHByb2FjaCB3aWxsIGFsbG93IG1lIHRvIGltbWVkaWF0ZWx5IGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgdXNlZCBmb3IgZGlzc2VjdGluZyBILjMyMyBzaWduYWxsaW5nIG1lc3NhZ2VzIGFuZCBleHRyYWN0aW5nIHJlbGV2YW50IGluZm9ybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTEyOCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjAzOjM2LjUwNDUzODUxMVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1MTI1NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9NTk9c3RhdGljIGNoYXIgKmgzMjNfYnVmZmVyO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTYwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjYxOnN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBuZl9jb25udHJhY2tfaGVscGVyX2gyNDU7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NjI6c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIG5mX2Nvbm50cmFja19oZWxwZXJfcTkzMVtdO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjYzOnN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBuZl9jb25udHJhY2tfaGVscGVyX3Jhc1tdO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTY0LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9NTc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgaDI0NV9leHBfcG9saWN5ID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtNTgyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjU4MzpzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgbmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1IF9fcmVhZF9tb3N0bHk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NTg0OnN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1X3B0ciBfX3JlYWRfbW9zdGx5O1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTU4NS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTY3MT1zdGF0aWMgaW50IGNhbGxmb3J3YXJkX2RvX2ZpbHRlcihzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy03MzEtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NzMyOnN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBuZl9jb25udHJhY2tfaGVscGVyX3E5MzFbMl0gX19yZWFkX21vc3RseTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzo3MzM6c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpuZl9jb25udHJhY2tfaGVscGVyX3E5MzFfcHRyWzJdIF9fcmVhZF9tb3N0bHk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtNzM0LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTI0Mz1zdGF0aWMgaW50IHByb2Nlc3NfZ3JxKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTEyNTktXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTI2MDpzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgbmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbMl0gX19yZWFkX21vc3RseTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxMjYxOnN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbmZfY29ubnRyYWNrX2hlbHBlcl9yYXNfcHRyWzJdIF9fcmVhZF9tb3N0bHk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTI2Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDM6MzYuNTUxMDU3MTQ5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNDIzODYxMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgSC4zMjMgQ29ubmVjdGlvbiBUcmFja2luZyBDb2RlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGNvcmUgaGVscGVyIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyBmb3IgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZy4gVGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgaXMgYG5mX2Nvbm50cmFja19oMzIzX21haW4uY2AuIExldCdzIHNlZS4uLiBJJ2xsIG5lZWQgdG8gbmF2aWdhdGUgdGhyb3VnaCB0aGUgZmlsZSBzdHJ1Y3R1cmUgdG8gbG9jYXRlIHdoZXJlIHRob3NlIHNwZWNpZmljIGhlbHBlciBmdW5jdGlvbnMgYXJlIGRlZmluZWQgYW5kIGluaXRpYWxpemVkLiBJJ20gbG9va2luZyBmb3IgdGhlIG1haW4gZW50cnkgcG9pbnRzLCB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIHJlc3BvbnNpYmxlIGZvciB0aGUgbml0dHktZ3JpdHR5IG9mIEguMzIzIHByb3RvY29sIGFuYWx5c2lzIGFuZCBjb25uZWN0aW9uIHN0YXRlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBjb25udHJhY2sgZnJhbWV3b3JrLiBJIGV4cGVjdCB0byBmaW5kIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHNpZ25hbGluZyBwYXJzaW5nLCBwb3J0IGFsbG9jYXRpb24sIGFuZCBwZXJoYXBzIHNvbWUgYXNwZWN0IG9mIEFMRyBwcm9jZXNzaW5nLiBMZXQncyBnZXQgdG8gaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjkzLCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDM6MzguNjkzNDQ2NDM4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE0ODE0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTE3MTE9c3RhdGljIGludCBfX2luaXQgaDMyM19oZWxwZXJfaW5pdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTczMC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzMxOlxcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfaDI0NSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzMyLVxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX2gyNDVfcHRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDM6MzguNzM4NTk2ODU2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTA2Mjc2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEguMzIzIENvbm50cmFjayBNb2R1bGUqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIGxpbmUgMTcxMSBpbiBgbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gcHJvYmFibHkgbG9va2luZyBhdCBhIHBvdGVudGlhbCBpc3N1ZSByZWxhdGVkIHRvIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcuIFRoaXMgYXJlYSBpcyBhbHdheXMgYSBiaXQgdHJpY2t5IOKAkyBpdCdzIGEgc3RhdGVmdWwgcHJvdG9jb2wgd2l0aCBtdWx0aXBsZSBjaGFubmVscywgY29tcGxleCBzaWduYWxpbmcsIGFuZCBvZnRlbiBOQVQgdHJhdmVyc2FsIGlzc3VlcyB0byBjb25zaWRlci4gSSBzdXNwZWN0IHRoYXQgdGhlIGxpbmUgbnVtYmVyIHBpbnBvaW50cyBhIHNwZWNpZmljIGZ1bmN0aW9uIG9yIGxvZ2ljIGJyYW5jaCByZWxhdGVkIHRvIHRoZSBoYW5kbGluZyBvZiBzaWduYWxpbmcgbWVzc2FnZXMgb3IgcGVyaGFwcyBtZWRpYSBzdHJlYW0gYXNzb2NpYXRpb24uIENvdWxkIGJlIGFuIGlzc3VlIHdpdGggZW5kcG9pbnQgcmVnaXN0cmF0aW9uLCBjYWxsIHNldHVwL3RlYXJkb3duLCBvciBldmVuIHBvdGVudGlhbGx5IHJlbGF0ZWQgdG8gaGFuZGxpbmcga2VlcC1hbGl2ZXMgb3IgdGltZW91dHMgd2l0aGluIHRoZSBjb25udHJhY2sgbW9kdWxlLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGF0IHRoZSBleGFjdCBsaW5lIGFuZCBjb250ZXh0IG1pZ2h0IGJlIHZpdGFsIHRvIHVuZGVyc3RhbmRpbmcgYW55IHJlcG9ydGVkIGNvbm5lY3Rpdml0eSBwcm9ibGVtcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB3aGVuIHRoaXMgbW9kdWxlIGlzIHJ1bm5pbmcuIEkgaG9wZSB0aGF0IHRoZSByZWxldmFudCBsaW5lcyBwcm92aWRlIG1vcmUgY29udGV4dCBhYm91dCB0aGUgc3RhdGUgdHJhbnNpdGlvbnMgdGhhdCBoYXBwZW4gd2l0aGluIHRoZSBjb25udHJhY2sgc3RydWN0dXJlLiBUaGlzIGxldmVsIG9mIGdyYW51bGFyaXR5IGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBhbnl0aGluZyB3aXRoaW4gdGhlIG5ldGZpbHRlciBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzIxLCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDM6NDEuMjI5MjI3NTk5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDc4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzEwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzEwOlxcdFxcbjE3MTE6XFx0c3RhdGljIGludCBfX2luaXQgaDMyM19oZWxwZXJfaW5pdCh2b2lkKVxcbjE3MTI6XFx0e1xcbjE3MTM6XFx0XFx0aW50IHJldDtcXG4xNzE0OlxcdFxcbjE3MTU6XFx0XFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfcmFzWzBdLCBBRl9JTkVULCBJUFBST1RPX1VEUCxcXG4xNzE2OlxcdFxcdFxcdFxcdCAgXFxcIlJBU1xcXCIsXFxuMTcxNzpcXHRcXHRcXHRcXHQgIFxcdTAwMjZyYXNfZXhwX3BvbGljeSwgMCwgcmFzX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcXG4xNzE4OlxcdFxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX3Jhc1sxXSwgQUZfSU5FVDYsIElQUFJPVE9fVURQLFxcbjE3MTk6XFx0XFx0XFx0XFx0ICBcXFwiUkFTXFxcIixcXG4xNzIwOlxcdFxcdFxcdFxcdCAgXFx1MDAyNnJhc19leHBfcG9saWN5LCAwLCByYXNfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xcbjE3MjE6XFx0XFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfaDI0NSwgQUZfVU5TUEVDLCBJUFBST1RPX1VEUCxcXG4xNzIyOlxcdFxcdFxcdFxcdCAgXFxcIkguMjQ1XFxcIixcXG4xNzIzOlxcdFxcdFxcdFxcdCAgXFx1MDAyNmgyNDVfZXhwX3BvbGljeSwgMCwgaDI0NV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XFxuMTcyNDpcXHRcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxWzBdLCBBRl9JTkVULCBJUFBST1RPX1RDUCxcXG4xNzI1OlxcdFxcdFxcdFxcdCAgXFxcIlEuOTMxXFxcIixcXG4xNzI2OlxcdFxcdFxcdFxcdCAgXFx1MDAyNnE5MzFfZXhwX3BvbGljeSwgMCwgcTkzMV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XFxuMTcyNzpcXHRcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxWzFdLCBBRl9JTkVUNiwgSVBQUk9UT19UQ1AsXFxuMTcyODpcXHRcXHRcXHRcXHQgIFxcXCJRLjkzMVxcXCIsXFxuMTcyOTpcXHRcXHRcXHRcXHQgIFxcdTAwMjZxOTMxX2V4cF9wb2xpY3ksIDAsIHE5MzFfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xcbjE3MzA6XFx0XFxuMTczMTpcXHRcXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFxcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX2gyNDUsXFxuMTczMjpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1X3B0cik7XFxuMTczMzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xNzM0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTczNTpcXHRcXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihuZl9jb25udHJhY2tfaGVscGVyX3E5MzEsXFxuMTczNjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgQVJSQVlfU0laRShuZl9jb25udHJhY2tfaGVscGVyX3E5MzEpLFxcbjE3Mzc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIG5mX2Nvbm50cmFja19oZWxwZXJfcTkzMV9wdHIpO1xcbjE3Mzg6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTczOTpcXHRcXHRcXHRnb3RvIGVycjE7XFxuMTc0MDpcXHRcXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihuZl9jb25udHJhY2tfaGVscGVyX3JhcyxcXG4xNzQxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBBUlJBWV9TSVpFKG5mX2Nvbm50cmFja19oZWxwZXJfcmFzKSxcXG4xNzQyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBuZl9jb25udHJhY2tfaGVscGVyX3Jhc19wdHIpO1xcbjE3NDM6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTc0NDpcXHRcXHRcXHRnb3RvIGVycjI7XFxuMTc0NTpcXHRcXG4xNzQ2OlxcdFxcdHJldHVybiAwO1xcbjE3NDc6XFx0ZXJyMjpcXG4xNzQ4OlxcdFxcdG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIobmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxX3B0cixcXG4xNzQ5OlxcdFxcdFxcdFxcdFxcdFxcdEFSUkFZX1NJWkUobmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxX3B0cikpO1xcbjE3NTA6XFx0ZXJyMTpcXG4xNzUxOlxcdFxcdG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihuZl9jb25udHJhY2tfaGVscGVyX2gyNDVfcHRyKTtcXG4xNzUyOlxcdFxcdHJldHVybiByZXQ7XFxuMTc1MzpcXHR9XFxuMTc1NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDM6NDEuMjI5MzMzOTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc4NTczNzU4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZXBlbmRlbmN5IERlZXAgRGl2ZTogSC4zMjMgQ29ubmVjdGlvbiBUcmFja2luZyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGludG8gdGhlIHdlZWRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ09ORklHX05GX0NPTk5UUkFDS19IMzIzYC4gRmlyc3QsIEknbGwgZ28gc3RyYWlnaHQgdG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYW5kIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZyBlbnRyeS4gQWgsIHRoZXJlIGl0IGlzOiBgY29uZmlnIE5GX0NPTk5UUkFDS19IMzIzYC4gTm93LCB3aGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBJIHNlZSBpdCBkZXBlbmRzIG9uIGBORVRGSUxURVJfQURWQU5DRURgLCB3aGljaCBtYWtlcyBzZW5zZS4gQnV0IGdpdmVuIGl0cyBwbGFjZW1lbnQsIGl0J3MgcHJldHR5IHNhZmUgdG8gYXNzdW1lIGl0J3MgYWxzbyBpbXBsaWNpdGx5IGRlcGVuZGVudCBvbiBgTkZfQ09OTlRSQUNLYCBhcyB3ZWxsLCBzaW5jZSBpdCBzaXRzIHdpdGhpbiB0aGF0IGBpZmAgYmxvY2suIFRvIGJlIGNlcnRhaW4sIEknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgdG8gY29uZmlybSB3aGVyZSBgTkZfQ09OTlRSQUNLX0gzMjNgIGlzIHNpdHVhdGVkIGFuZCBob3cgaXQgcmVsYXRlcyB0byBgTkZfQ09OTlRSQUNLYC4gR290dGEgYmUgcHJlY2lzZSB3aGVuIGRlYWxpbmcgd2l0aCB0aGVzZSBrZXJuZWwgY29uZmlncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5NjMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowMzo0NC4wMTUwNzQwNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3ODI5NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWYgTkZfQ09OTlRSQUNLfG1lbnVjb25maWcgTkZfQ09OTlRSQUNLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9OTg9Y29uZmlnIE5GX0xPR19TWVNMT0dcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMDktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjExMDppZiBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTExLWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjAzOjQ0LjA2Mjg2MzA2OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDc3MzI0NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgdGhlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgTkZfQ09OTlRSQUNLYCBzZXR0aW5nIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGNvbnRleHQuIFJpZ2h0LCBzbyBmaXJzdCBJJ2xsIGhlYWQgb3ZlciB0byBgbmV0L25ldGZpbHRlci9LY29uZmlnYCB0byBwaW5wb2ludCBleGFjdGx5IHdoZXJlIHRoaXMgbWVudSBvciBjb25kaXRpb25hbCBibG9jayBsaXZlcy4gTGluZSAxMTAuLi4gYWhhISBJdCdzIG5lc3RsZWQgd2l0aGluIGFuIGBpZiBORl9DT05OVFJBQ0tgIGJsb2NrLiBUaGF0J3MgZ29vZCB0byBrbm93LiBOb3csIGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBgTkZfQ09OTlRSQUNLYCByZWxpZXMgb24gYE5FVEZJTFRFUmAsIGFuZCB0aGF0J3MgdXN1YWxseSB3aGVyZSB0aGluZ3Mgc3RhcnQgdG8gdGllIGluLiBKdXN0IHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgaW1tZWRpYXRlIGRlcGVuZGVuY2llcyBvciBzY29waW5nIGNvbnNpZGVyYXRpb25zLCBJJ2xsIHF1aWNrbHkgc2NhbiB0aGUgZmlyc3QgMTIwIGxpbmVzIG9mIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLiBJdCdzIGFsd2F5cyBiZXN0IHRvIGJlIHRob3JvdWdoIHdpdGggdGhlIGNvbmZpZyBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzOTQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowMzo0Ni4xNDAxOTAyNzlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0bWVudSBcXFwiQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvblxcXCJcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBORVRGSUxURVJcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIE5FVEZJTFRFUl9JTkdSRVNTXFxuICAgNjpcXHRcXHRib29sIFxcXCJOZXRmaWx0ZXIgaW5ncmVzcyBzdXBwb3J0XFxcIlxcbiAgIDc6XFx0XFx0ZGVmYXVsdCB5XFxuICAgODpcXHRcXHRzZWxlY3QgTkVUX0lOR1JFU1NcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgVGhpcyBhbGxvd3MgeW91IHRvIGNsYXNzaWZ5IHBhY2tldHMgZnJvbSBpbmdyZXNzIHVzaW5nIHRoZSBOZXRmaWx0ZXJcXG4gIDExOlxcdFxcdCAgaW5mcmFzdHJ1Y3R1cmUuXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBORVRGSUxURVJfRUdSRVNTXFxuICAxNDpcXHRcXHRib29sIFxcXCJOZXRmaWx0ZXIgZWdyZXNzIHN1cHBvcnRcXFwiXFxuICAxNTpcXHRcXHRkZWZhdWx0IHlcXG4gIDE2OlxcdFxcdHNlbGVjdCBORVRfRUdSRVNTXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIFRoaXMgYWxsb3dzIHlvdSB0byBjbGFzc2lmeSBwYWNrZXRzIGJlZm9yZSB0cmFuc21pc3Npb24gdXNpbmcgdGhlXFxuICAxOTpcXHRcXHQgIE5ldGZpbHRlciBpbmZyYXN0cnVjdHVyZS5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0Y29uZmlnIE5FVEZJTFRFUl9TS0lQX0VHUkVTU1xcbiAgMjI6XFx0XFx0ZGVmX2Jvb2wgTkVURklMVEVSX0VHUkVTUyBcXHUwMDI2XFx1MDAyNiAoTkVUX0NMU19BQ1QgfHwgSUZCKVxcbiAgMjM6XFx0XFxuICAyNDpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktcXG4gIDI1OlxcdFxcdGJvb2xcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIE5FVEZJTFRFUl9GQU1JTFlfQlJJREdFXFxuICAyODpcXHRcXHRib29sXFxuICAyOTpcXHRcXG4gIDMwOlxcdGNvbmZpZyBORVRGSUxURVJfRkFNSUxZX0FSUFxcbiAgMzE6XFx0XFx0Ym9vbFxcbiAgMzI6XFx0XFxuICAzMzpcXHRjb25maWcgTkVURklMVEVSX0JQRl9MSU5LXFxuICAzNDpcXHRcXHRkZWZfYm9vbCBCUEZfU1lTQ0FMTFxcbiAgMzU6XFx0XFxuICAzNjpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktfSE9PS1xcbiAgMzc6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBiYXNlIGhvb2sgZHVtcCBzdXBwb3J0XFxcIlxcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gIDM5OlxcdFxcdGRlcGVuZHMgb24gTkZfVEFCTEVTXFxuICA0MDpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDM6NDYuMTQwMjk1Nzk5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MDA3MjY0NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0cywgZ2VhcmVkIHRvd2FyZHMgYW4gZXhwZXJ0OlxuXG4qKk5hdmlnYXRpbmcgdGhlIE5ldGZpbHRlciBLY29uZmlnKipcblxuT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGxpbmVzIDEwMC0xNDAgb2YgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIEknbSBndWVzc2luZyB0aGVyZSdzIHNvbWV0aGluZyBzcGVjaWZpYyBpbiB0aGF0IHNlY3Rpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYmV0dGVyIG9yIG1heWJlIHRyb3VibGVzaG9vdC4gQmFzZWQgb24gcGFzdCBleHBlcmllbmNlIHdpdGggS2NvbmZpZywgdGhhdCByYW5nZSBjb3VsZCBiZSBkZWFsaW5nIHdpdGggYSBudW1iZXIgb2YgdGhpbmdzLiBNaWdodCBiZSBhIG5ldyBtb2R1bGUsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYW4gZXhpc3Rpbmcgb25lLCBvciBwZXJoYXBzIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGZlYXR1cmVzLiBHaXZlbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBob3cuIEFyZSB0aGVyZSBhbnkgdW51c3VhbCBkZWZhdWx0cz8gQW55IHRyaWNreSBkZXBlbmRlbmNpZXMgdGhhdCBJIG1pZ2h0IG92ZXJsb29rIGF0IGEgZ2xhbmNlPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBzaWducyBvZiBjb25mbGljdHMgb3IgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGFjdHMuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTEyNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDM6NDguMDQxMDI0NzE4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbiAxMDE6XFx0XFx0aGVscFxcbiAxMDI6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGUgc3VwcG9ydCBmb3IgcGFja2V0IGxvZ2dpbmcgdmlhIHN5c2xvZy5cXG4gMTAzOlxcdFxcdCAgSXQgc3VwcG9ydHMgSVB2NCwgSVBWNiwgQVJQIGFuZCBjb21tb24gdHJhbnNwb3J0IHByb3RvY29scyBzdWNoXFxuIDEwNDpcXHRcXHQgIGFzIFRDUCBhbmQgVURQLlxcbiAxMDU6XFx0XFx0ICBUaGlzIGlzIGEgc2ltcGxlciBidXQgbGVzcyBmbGV4aWJsZSBsb2dnaW5nIG1ldGhvZCBjb21wYXJlZCB0b1xcbiAxMDY6XFx0XFx0ICBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HLlxcbiAxMDc6XFx0XFx0ICBJZiBib3RoIGFyZSBlbmFibGVkIHRoZSBiYWNrZW5kIHRvIHVzZSBjYW4gYmUgY29uZmlndXJlZCBhdCBydW4tdGltZVxcbiAxMDg6XFx0XFx0ICBieSBtZWFucyBvZiBwZXItYWRkcmVzcy1mYW1pbHkgc3lzY3RsIHR1bmFibGVzLlxcbiAxMDk6XFx0XFxuIDExMDpcXHRpZiBORl9DT05OVFJBQ0tcXG4gMTExOlxcdGNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxuIDExMjpcXHRcXHR0cmlzdGF0ZVxcbiAxMTM6XFx0XFxuIDExNDpcXHRjb25maWcgTkZfQ09OTlRSQUNLX01BUktcXG4gMTE1OlxcdFxcdGJvb2wgICdDb25uZWN0aW9uIG1hcmsgdHJhY2tpbmcgc3VwcG9ydCdcXG4gMTE2OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuIDExNzpcXHRcXHRoZWxwXFxuIDExODpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29ubmVjdGlvbiBtYXJrcywgdXNlZCBieSB0aGVcXG4gMTE5OlxcdFxcdCAgYENPTk5NQVJLJyB0YXJnZXQgYW5kIGBjb25ubWFyaycgbWF0Y2guIFNpbWlsYXIgdG8gdGhlIG1hcmsgdmFsdWVcXG4gMTIwOlxcdFxcdCAgb2YgcGFja2V0cywgYnV0IHRoaXMgbWFyayB2YWx1ZSBpcyBrZXB0IGluIHRoZSBjb25udHJhY2sgc2Vzc2lvblxcbiAxMjE6XFx0XFx0ICBpbnN0ZWFkIG9mIHRoZSBpbmRpdmlkdWFsIHBhY2tldHMuXFxuIDEyMjpcXHRcXG4gMTIzOlxcdGNvbmZpZyBORl9DT05OVFJBQ0tfU0VDTUFSS1xcbiAxMjQ6XFx0XFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgc2VjdXJpdHkgbWFyayBzdXBwb3J0J1xcbiAxMjU6XFx0XFx0ZGVwZW5kcyBvbiBORVRXT1JLX1NFQ01BUktcXG4gMTI2OlxcdFxcdGRlZmF1bHQgeSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbiAxMjc6XFx0XFx0aGVscFxcbiAxMjg6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHNlY3VyaXR5IG1hcmtpbmdzIHRvIGJlIGFwcGxpZWQgdG9cXG4gMTI5OlxcdFxcdCAgY29ubmVjdGlvbnMuICBUeXBpY2FsbHkgdGhleSBhcmUgY29waWVkIHRvIGNvbm5lY3Rpb25zIGZyb21cXG4gMTMwOlxcdFxcdCAgcGFja2V0cyB1c2luZyB0aGUgQ09OTlNFQ01BUksgdGFyZ2V0IGFuZCBjb3BpZWQgYmFjayBmcm9tXFxuIDEzMTpcXHRcXHQgIGNvbm5lY3Rpb25zIHRvIHBhY2tldHMgd2l0aCB0aGUgc2FtZSB0YXJnZXQsIHdpdGggdGhlIHBhY2tldHNcXG4gMTMyOlxcdFxcdCAgYmVpbmcgb3JpZ2luYWxseSBsYWJlbGVkIHZpYSBTRUNNQVJLLlxcbiAxMzM6XFx0XFxuIDEzNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5ICdOJy5cXG4gMTM1OlxcdFxcbiAxMzY6XFx0Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xcbiAxMzc6XFx0XFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMnXFxuIDEzODpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAxMzk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowMzo0OC4wNDExMzExNDhaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzc4MzIwMzEwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSC4zMjMgQ29ubmVjdGlvbiBUcmFja2luZyBNb2R1bGUgRGVwZW5kZW5jaWVzIGFuZCBTeW1ib2xzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBORl9DT05OVFJBQ0tfSDMyM2AgbW9kdWxlLiBSaWdodCBvZmYgdGhlIGJhdCwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBpdCBkZXBlbmRzIG9uIHRoZSBjb3JlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnJhbWV3b3JrIChgTkZfQ09OTlRSQUNLYCksIGFkdmFuY2VkIG5ldGZpbHRlciBmZWF0dXJlcyAoYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORVRGSUxURVJgKSwgYW5kIHRoZSBgSU5FVGAgc3RhY2ssIHdoaWNoIGlzIHdoYXQgSSdkIGV4cGVjdC4gTm93LCBsZXQncyBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUga2V5IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIEguMzIzIG1vZHVsZSwgc28gSSdtIGZvY3VzaW5nIG9uIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgIGFuZCBgbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jYC4gTXkgaW5pdGlhbCBsaXN0IG9mIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBpbmNsdWRlIGBEZWNvZGVSYXNNZXNzYWdlYCwgYERlY29kZVE5MzFgLCBgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlYCwgYGdldF9oMjI1X2FkZHJgLCBgcmFzX2hlbHBgLCBgcTkzMV9oZWxwYCwgYW5kIGBoMjQ1X2hlbHBgLiBNeSBwcmltYXJ5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBzeW1ib2xzLCBtZWFuaW5nIHRoZXkgY2FuIGJlIHVzZWQgYnkgb3RoZXIga2VybmVsIG1vZHVsZXMuXG5cbkkndmUgYWxyZWFkeSBsb29rZWQgYXQgdGhlIGRlZmluaXRpb25zIGluIHRoZSBjb2RlLiBJIGNhbiBzZWUgdGhhdCBgRGVjb2RlUmFzTWVzc2FnZWAsIGBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2VgLCBhbmQgYERlY29kZVE5MzFgIGFyZSBkZWNsYXJlZCBpbiBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCwgYW5kIHRoZWlyIHByb3RvdHlwZXMgc2hvdyB0aGV5IGhhbmRsZSBBU04uMSBlbmNvZGVkIG1lc3NhZ2VzLCBhcyBvbmUgd291bGQgZXhwZWN0LiBGcm9tIGBuZl9jb25udHJhY2tfaDMyM19tYWluLmNgLCBgZ2V0X2gyMjVfYWRkcmAgaXMgKkVYUE9SVF9TWU1CT0xfR1BMKiBhbmQgdGh1cyB2aXNpYmxlIG91dHNpZGUgdGhlIG1vZHVsZSwgaGFuZGxpbmcgYWRkcmVzcyBleHRyYWN0aW9uIGZyb20gSC4yMjUgZGF0YSwgaW1wb3J0YW50IGZvciBjb25uZWN0aW9uIHRyYWNraW5nLlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2sgYSBtb21lbnQgYW5kIHF1aWNrbHkgc2NhbiB0aGUgcmVtYWluaW5nIGNvZGUgZm9yIGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMsIGp1c3QgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTY4LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDM6NTUuODI0MzM4MzQ2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTk5MTQ1MjYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgRGVjb2RlfF5FWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjAzOjU2LjE0NDI3NTI0MloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzEzOTY5NzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIE1vZGlmaWNhdGlvbnMgaW4gbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlZW4gaGFwcGVuaW5nLCBvciB3aGF0IG1pZ2h0IG5lZWQgdG8gYmUgYWRkZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIGZpbGUuICBMZXQncyBxdWlja2x5IHNjYW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jYCB3aXRoIGBncmVwYC4gU3BlY2lmaWNhbGx5LCBJJ20gbG9va2luZyBmb3IgZWl0aGVyIGxpbmVzIHRoYXQgc3RhcnQgd2l0aCBcImludCBcIiAtIHN1Z2dlc3RpbmcgZnVuY3Rpb24gZGVjbGFyYXRpb25zIG9yIGRlZmluaXRpb25zLCBhbmQgdGhlIGFkZGl0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVtb3ZhbCBvZiB0aG9zZS4gT3IsIEknbSBsb29raW5nIGZvciB1c2FnZXMgb2YgYEVYUE9SVF9TWU1CT0xgLCBiZWNhdXNlIHRoYXQgaW5kaWNhdGVzIHN5bWJvbHMgYmVpbmcgbWFkZSBhdmFpbGFibGUgdG8gb3RoZXIgbW9kdWxlcywgd2hpY2ggb2Z0ZW4gc2lnbmFscyBpbXBvcnRhbnQgZnVuY3Rpb25hbGl0eSBjaGFuZ2VzIG9yIGhvb2tzLiBXaXRoIHRob3NlIHR3byBwYXR0ZXJucywgSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBzb2xpZCBvdmVydmlldyBvZiByZWxldmFudCBtb2RpZmljYXRpb25zIG9yIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgZm9yIGNoYW5nZXMgSSdtIGludGVyZXN0ZWQgaW4uIEkgd2FudCBhIHF1aWNrLCB0YXJnZXRlZCB2aWV3IG9mIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODMwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDQ6MDAuNDU4MjQ3NTc4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE4NDYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTU1PWNvbnN0IHN0cnVjdCBuZmN0X2gzMjNfbmF0X2hvb2tzIF9fcmN1ICpuZmN0X2gzMjNfbmF0X2hvb2sgX19yZWFkX21vc3RseTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzo1NjpFWFBPUlRfU1lNQk9MX0dQTChuZmN0X2gzMjNfbmF0X2hvb2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTU3LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9NTg2PWludCBnZXRfaDIyNV9hZGRyKHN0cnVjdCBuZl9jb25uICpjdCwgdW5zaWduZWQgY2hhciAqZGF0YSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTYxNS19XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NjE2OkVYUE9SVF9TWU1CT0xfR1BMKGdldF9oMjI1X2FkZHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTYxNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDQ6MDAuNTAzNDM2NzM2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4ODUyMDAwMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgSC4zMjMgQVNOLjEgRGVjb2RpbmcgaW4gbmV0ZmlsdGVyKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUgd29ya3MgYXQgdGhlIEFTTi4xIGxldmVsLiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRocmVlIGtleSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBwYXJzaW5nOiBgRGVjb2RlUmFzTWVzc2FnZWAsIGBEZWNvZGVROTMxYCwgYW5kIGBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2VgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZGVjb2Rpbmcgcm91dGluZXMsIHRoZSByZWFsIGhlYXJ0IG9mIHRoZSBBU04uMSBwYXJzaW5nIHdpdGhpbiBuZXRmaWx0ZXIgZm9yIHRoaXMgcHJvdG9jb2wuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBwcmV0dHkgaW50cmljYXRlIGxvZ2ljIGhlcmUsIGdpdmVuIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBILjMyMyBwcm90b2NvbCBzdGFjayBhbmQgdGhlIG5lZWQgdG8gbWFpbnRhaW4gY29ubmVjdGlvbiBzdGF0ZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBob3cgdGhleSBoYW5kbGUgQkVSL0RFUiBlbmNvZGluZywgaG93IHRoZXkgaWRlbnRpZnkgbWVzc2FnZSB0eXBlcywgYW5kIGhvdyB0aGUgZGVjb2RlZCBpbmZvcm1hdGlvbiBpcyB1c2VkIHRvIHVwZGF0ZSB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyaWVzLiBJdCdzIGEgY3JpdGljYWwgYXJlYSBmb3IgYm90aCBzZWN1cml0eSBhbmQgZnVuY3Rpb25hbGl0eSwgc28gYSB0aG9yb3VnaCByZXZpZXcgaXMgaW4gb3JkZXIuIExldCdzIHNlZSBob3cgd2VsbCB0aGV5J3ZlIGhhbmRsZWQgdGhlIHBvdGVudGlhbCBmb3IgYnVmZmVyIG92ZXJmbG93cyBhbmQgbWFsZm9ybWVkIG1lc3NhZ2VzLiBUaGlzIGlzIGFsd2F5cyBhIGNvbmNlcm4gd2hlbiBwYXJzaW5nIEFTTi4xLCBJIGtub3cuIEkgYWxzbyB3YW50IHRvIHNlZSBob3cgZWZmaWNpZW50bHkgdGhleSBwYXJzZSBhbmQgc3RvcmUgdGhlIGluZm9ybWF0aW9uLiBUaGlzIHdpbGwgYWZmZWN0IGNvbm5lY3Rpb24gdHJhY2tpbmcgcGVyZm9ybWFuY2UgZm9yIHRoaXMgcHJvdG9jb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzkyLCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDQ6MDMuMzg4NjM5NjgzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY5MzA0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEZWNvZGVbQS1aYS16MC05X10rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTEwNT1zdGF0aWMgdW5zaWduZWQgaW50IGdldF91aW50KHN0cnVjdCBiaXRzdHIgKmJzLCBpbnQgYik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTA2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEwNzovKiBEZWNvZGVyIEZ1bmN0aW9ucyAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEwOC1zdGF0aWMgaW50IGRlY29kZV9udWwoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MTE5PXN0YXRpYyBpbnQgZGVjb2RlX2Nob2ljZShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTIwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEyMTovKiBEZWNvZGVyIEZ1bmN0aW9ucyBWZWN0b3IgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMjItdHlwZWRlZiBpbnQgKCpkZWNvZGVyX3QpKHN0cnVjdCBiaXRzdHIgKiwgY29uc3Qgc3RydWN0IGZpZWxkX3QgKiwgY2hhciAqLCBpbnQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEyMzpzdGF0aWMgY29uc3QgZGVjb2Rlcl90IERlY29kZXJzW10gPSB7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTI0LVxcdGRlY29kZV9udWwsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz01MTE9c3RhdGljIGludCBkZWNvZGVfc2VxKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU2Ni1cXHRcXHRcXHQvKiBEZWNvZGUgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1Njc6XFx0XFx0XFx0aWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVxcdTAwM2V0eXBlXSkgKGJzLCBzb24sIGJhc2UsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTY4LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbGV2ZWwgKyAxKSkgXFx1MDAzY1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTczLVxcdFxcdFxcdGJzLVxcdTAwM2ViaXQgPSAwO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjU3NDpcXHRcXHR9IGVsc2UgaWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVxcdTAwM2V0eXBlXSkgKGJzLCBzb24sIGJhc2UsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTc1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBsZXZlbCArIDEpKSBcXHUwMDNjXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02MzItXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NjMzOlxcdFxcdGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cXHUwMDNldHlwZV0pIChicywgc29uLCBiYXNlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTYzNC1cXHRcXHRcXHRcXHRcXHRcXHQgIGxldmVsICsgMSkpIFxcdTAwM2NcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTY0ND1zdGF0aWMgaW50IGRlY29kZV9zZXFvZihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MTMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzE0OlxcdFxcdFxcdGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cXHUwMDNldHlwZV0pIChicywgc29uLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTcxNS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGkgXFx1MDAzY1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzI0LVxcdFxcdH0gZWxzZVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjcyNTpcXHRcXHRcXHRpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXFx1MDAzZXR5cGVdKSAoYnMsIHNvbixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MjYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBpIFxcdTAwM2NcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTc0MD1zdGF0aWMgaW50IGRlY29kZV9jaG9pY2Uoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODA3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgwODpcXHRcXHRpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXFx1MDAzZXR5cGVdKSAoYnMsIHNvbiwgYmFzZSwgbGV2ZWwgKyAxKSkgXFx1MDAzY1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgwOS1cXHRcXHQgICAgSDMyM19FUlJPUl9OT05FKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODEzLVxcdFxcdGJzLVxcdTAwM2ViaXQgPSAwO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgxNDpcXHR9IGVsc2UgaWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVxcdTAwM2V0eXBlXSkgKGJzLCBzb24sIGJhc2UsIGxldmVsICsgMSkpIFxcdTAwM2NcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MTUtXFx0XFx0ICAgSDMyM19FUlJPUl9OT05FKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODIwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgyMTppbnQgRGVjb2RlUmFzTWVzc2FnZSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeiwgUmFzTWVzc2FnZSAqcmFzKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgyMi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MzUtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODM2OnN0YXRpYyBpbnQgRGVjb2RlSDMyM19Vc2VySW5mb3JtYXRpb24odW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBjaGFyICpiZWcsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODM3LVxcdFxcdFxcdFxcdCAgICAgIHNpemVfdCBzeiwgSDMyM19Vc2VySW5mb3JtYXRpb24gKnV1aWUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NTItXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODUzOmludCBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODU0LVxcdFxcdFxcdFxcdFxcdCBNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UgKlxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODcwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjg3MTppbnQgRGVjb2RlUTkzMSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeiwgUTkzMSAqcTkzMSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NzIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtOTIyLVxcdFxcdFxcdFxcdGJyZWFrO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjkyMzpcXHRcXHRcXHRyZXR1cm4gRGVjb2RlSDMyM19Vc2VySW5mb3JtYXRpb24oYnVmLCBwLCBsZW4sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtOTI0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnE5MzEtXFx1MDAzZVVVSUUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowNDowMy40MzQzMzkxNDFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAyNDYxMDYzODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgSC4zMjMgQ29ubnRyYWNrIEhlbHBlcioqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgZ29vZCB0YXJnZXQgaGVyZTogdGhlIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIG1vZHVsZS4gU3BlY2lmaWNhbGx5LCBJJ20gbG9va2luZyBhdCBmdW5jdGlvbnMgbGlrZSBgRGVjb2RlUmFzTWVzc2FnZWAsIGBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2VgLCBgRGVjb2RlUTkzMWAsIGFuZCBgZ2V0X2gyMjVfYWRkcmAgLSB0aGVzZSBhcmUgdGhlIGV4dGVybmFsbHkgbGlua2VkIGZ1bmN0aW9ucywgYW5kIHRoZSBwYWNrZXQgaGVscGVyIGNhbGxiYWNrcyAoYHJhc19oZWxwYCwgYHE5MzFfaGVscGAsIGBoMjQ1X2hlbHBgKSB0aGF0IGBuZl9jb25udHJhY2tgIGNhbGxzLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBJIHJlYWNoIHRoaXMgY29kZSBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQsIG9yIGFueSB2aXJ0dWFsaXplZCB0ZXN0IHNldHVwPyBUaGUgYW5zd2VyIGlzIHllcywgYWJzb2x1dGVseS4gVGhlc2UgaGVscGVycyBhcmUgZGVzaWduZWQgdG8gcGFyc2UgbmV0d29yayBwYWNrZXRzLCBhbmQgZXZlbiBpZiB0aGV5IGFyZW4ndCBoaXQgbmF0dXJhbGx5LCBJIGNhbiBlYXNpbHkgdHJpZ2dlciB0aGVtIHZpYSByYXcgc29ja2V0cywgdGFwIGludGVyZmFjZXMsIGxvb3BiYWNrLCBvciBldmVuIG5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIGluamVjdGlvbi5cblxuVGhpcyBpcyB3b3J0aCB0aGUgZWZmb3J0IHRvIGZ1enouIFRoZXJlJ3MgYSBrbm93biBidWcgLSBhIGZpeCBoYXMgYWxyZWFkeSBiZWVuIGltcGxlbWVudGVkIC0gYSBkdXBsaWNhdGlvbiBpbiB0aGUgYml0c3RyZWFtIHBvaW50ZXIgYWR2YW5jZW1lbnQgZHVyaW5nIEFTTi4xIGludGVnZXIgZGVjb2RpbmcuIEZ1enppbmcgQVNOLjEgcGFyc2luZyB3aXRoaW4gdGhlIG5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgaXMgYSB2ZXJ5IHN0YW5kYXJkIGFuZCBlZmZlY3RpdmUgYXBwcm9hY2guIEl0J3MgYSBoaWdoLXZhbHVlIHRhcmdldCBmb3IgaWRlbnRpZnlpbmcgdnVsbmVyYWJpbGl0aWVzLlxuXG5MZXQncyBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjayBvZiBldmVyeXRoaW5nLiBUaGUgYHNldC1yZXN1bHRzYCBkYXRhIGxvb2tzIGdvb2Q6IEkndmUgZ290IGBXb3J0aEZ1enppbmdgIHNldCB0byBgdHJ1ZWAsIGFuZCB0aGUgYFJlYXNvbmluZ2AgY2xlYXJseSBleHBsYWlucyB0aGUgQVNOLjEgaW50ZWdlciBkZWNvZGluZyBidWcgYW5kIHRoZSBzcGVjaWZpYyBmaWxlIChgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgKS4gVGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QgaXMgYWNjdXJhdGUsIGFuZCBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAoYE5GX0NPTk5UUkFDS19IMzIzYCwgYE5GX0NPTk5UUkFDS2AsIGBORVRGSUxURVJgLCBhbmQgYE5FVEZJTFRFUl9BRFZBTkNFRGApIGFyZSBpZGVudGlmaWVkLlxuXG5MZXQgbWUgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgYWdhaW5zdCB0aGUgS2NvbmZpZy4gYE5GX0NPTk5UUkFDS19IMzIzYCBkZXBlbmRzIG9uIGBORVRGSUxURVJfQURWQU5DRURgIGFuZCBmYWxscyB1bmRlciBhIGJyb2FkZXIgZGVwZW5kZW5jeSBzdHJ1Y3R1cmUgd2hpY2ggbG9va3MgY29ycmVjdC4gVGhlIGNvbmZpZyBsaXN0IGlzIGFjY3VyYXRlLCBhbmQgdGhlIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBpcyB3aGF0IEkgZXhwZWN0LlxuXG5Pa2F5LCBldmVyeXRoaW5nIGxvb2tzIGdvb2QuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzY1NSwiT3V0cHV0VG9rZW5zIjoyMTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDQ6MTMuNjgwNDQ3ODc0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI5ODI0NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS19IMzIzXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiRGVjb2RlUmFzTWVzc2FnZVwiLFxuICAgIFwiRGVjb2RlUTkzMVwiLFxuICAgIFwiRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlXCIsXG4gICAgXCJnZXRfaDIyNV9hZGRyXCIsXG4gICAgXCJyYXNfaGVscFwiLFxuICAgIFwicTkzMV9oZWxwXCIsXG4gICAgXCJoMjQ1X2hlbHBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgSC4zMjMgY29ubnRyYWNrIGhlbHBlcidzIEFTTi4xIGludGVnZXIgZGVjb2RlciAobmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMpIHdoZXJlIGdldF91aW50KCkgYWR2YW5jZWQgdGhlIGJpdHN0cmVhbSBwb2ludGVyIGFuZCBkZWNvZGVfaW50KCkgYWR2YW5jZWQgaXQgYWdhaW4uIFRoaXMgYWZmZWN0cyByZWFjaGFiaWxpdHkgYW5kIHBhcnNpbmcgbG9naWMgZm9yIEguMzIzL1EuOTMxL1JBUyBuZXR3b3JrIHRyYWZmaWMgaW4gdGhlIE5ldGZpbHRlciBzdWJzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLX0gzMjNcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJEZWNvZGVSYXNNZXNzYWdlXCIsXG4gICAgXCJEZWNvZGVROTMxXCIsXG4gICAgXCJEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2VcIixcbiAgICBcImdldF9oMjI1X2FkZHJcIixcbiAgICBcInJhc19oZWxwXCIsXG4gICAgXCJxOTMxX2hlbHBcIixcbiAgICBcImgyNDVfaGVscFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBILjMyMyBjb25udHJhY2sgaGVscGVyJ3MgQVNOLjEgaW50ZWdlciBkZWNvZGVyIChuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYykgd2hlcmUgZ2V0X3VpbnQoKSBhZHZhbmNlZCB0aGUgYml0c3RyZWFtIHBvaW50ZXIgYW5kIGRlY29kZV9pbnQoKSBhZHZhbmNlZCBpdCBhZ2Fpbi4gVGhpcyBhZmZlY3RzIHJlYWNoYWJpbGl0eSBhbmQgcGFyc2luZyBsb2dpYyBmb3IgSC4zMjMvUS45MzEvUkFTIG5ldHdvcmsgdHJhZmZpYyBpbiB0aGUgTmV0ZmlsdGVyIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDQ6MTMuNzUzNDM3MzIxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU3NzExODk2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjA0OjEzLjc1Mzg2NjIxWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDY1NzY2ODU2NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG9pbnRlciBhZHZhbmNlbWVudCBidWcgaW4gYGRlY29kZV9pbnQoKWAgd2l0aGluIHRoZSBOZXRmaWx0ZXIgSC4zMjMgQVNOLjEgY29ubnRyYWNrIGhlbHBlciAoYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCkuIEluIGBjYXNlIENPTlM6YCwgYGdldF91aW50KGJzLCBsZW4pYCBhZHZhbmNlcyBgYnMtXFx1MDAzZWN1cmAgaW50ZXJuYWxseSBieSBgbGVuYCBieXRlczsgcHJldmlvdXNseSwgYGJzLVxcdTAwM2VjdXIgKz0gbGVuYCB3YXMgYWxzbyBleGVjdXRlZCB1bmNvbmRpdGlvbmFsbHkgYWZ0ZXJ3YXJkcywgYWR2YW5jaW5nIHRoZSBiaXRzdHJlYW0gY3Vyc29yIHR3aWNlIHdoZW4gZGVjb2RpbmcgaW50ZWdlcnMuIFRoZSBwYXRjaCBtb3ZlcyBgYnMtXFx1MDAzZWN1ciArPSBsZW5gIGludG8gdGhlIGBlbHNlYCBicmFuY2guXFxuXFxuVGhpcyBjaGFuZ2Ugc3RyaWN0bHkgYWRkcmVzc2VzIHN0cmVhbSBwYXJzaW5nIHBvaW50ZXIgbWFuaXB1bGF0aW9uIG9uIGluY29taW5nIG5ldHdvcmsgcGFja2V0IGJ1ZmZlcnMgKGBza2JgIGRhdGEpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gUG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMgcmVsYXRlZCB0byBzdHJlYW0gYm91bmRzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIGVycm9yIGJvdW5kYXJ5IGNoZWNrcyAoYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRlNzhjN2EwYjdkYmVkNTUyMmYwMGYyNGUyYzE3ZjUyZTFjMDIzOTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwMjowMjo1MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcbmluZGV4IDY4MzBjOWRhMzUwN2MuLmE1MTI3NWNjNGQwZjYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcbkBAIC0zMzYsOCArMzM2LDkgQEAgc3RhdGljIGludCBkZWNvZGVfaW50KHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbiBcdFx0XHR1bnNpZ25lZCBpbnQgdiA9IGdldF91aW50KGJzLCBsZW4pICsgZi1cdTAwM2VsYjtcbiBcdFx0XHRQUklOVChcIiA9ICV1XCIsIHYpO1xuIFx0XHRcdCooKHVuc2lnbmVkIGludCAqKShiYXNlICsgZi1cdTAwM2VvZmZzZXQpKSA9IHY7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0YnMtXHUwMDNlY3VyICs9IGxlbjtcbiBcdFx0fVxuLVx0XHRicy1cdTAwM2VjdXIgKz0gbGVuO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgVU5DTzpcbiBcdFx0QllURV9BTElHTihicyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowNDoxMy43NTM4NjczOVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTIwMDMzMDkzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExpbnV4IEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGRlY2lkZSBpZiBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgd2FycmFudGVkIGZvciB0aGlzIGtlcm5lbCBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSByaXNrIGxldmVsLiBUaGlzIGxvb2tzIGxpa2UgYSBjb2RlIHJldmlldywgc3BlY2lmaWNhbGx5IGEgdHJpYWdlIHRvIGRldGVybWluZSBpZiBLQVNBTiBvciBLTVNBTiBpcyBtb3JlIGFwcHJvcHJpYXRlLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCB0aGlzIGZhbGxzIHNxdWFyZWx5IGludG8gdGhlIFwiYmVuaWduL2RlZmVuc2l2ZSBzZWN1cml0eS9jb2RlIGFuYWx5c2lzXCIgY2F0ZWdvcnkuIE5vIGltbWVkaWF0ZSByZWQgZmxhZ3MsIHNvIEkgY2FuIHNhZmVseSBwcm9jZWVkLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZSBpdHNlbGYuIEkgc2VlIGEgYGRpZmZgIHByZXNlbnRlZC4gTG9va3MgbGlrZSB3ZSdyZSBpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgLiAgSSdsbCBleGFtaW5lIHRoZSBwYXRjaCwgZm9jdXNpbmcgb24gdGhlIGNoYW5nZXMgYXJvdW5kIGxpbmUgMzM2LiBUaGUgY29kZSBkZWFscyB3aXRoIGRlY29kaW5nIHNvbWUgaW50ZWdlciB2YWx1ZXMgd2l0aGluIGEgYml0c3RyZWFtIHVzaW5nIGEgY3VzdG9tIGBkZWNvZGVfaW50YCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgaW5jcmVtZW50ZWQgdGhlIGJpdHN0cmVhbSBjdXJzb3IgYGJzLVx1MDAzZWN1cmAgcmVnYXJkbGVzcyBpZiB0aGUgdW5zaWduZWQgaW50IHdhcyBhY3R1YWxseSBhc3NpZ25lZCBhIHZhbHVlLiBUaGUgbmV3IHZlcnNpb24gc2tpcHMgaW5jcmVtZW50aW5nIHRoZSBiaXRzdHJlYW0gaWYgdGhlIGludCB2YWx1ZSBpcyBub3QgYXNzaWduZWQuIFRoaXMgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBidWctZml4LlxuXG5JJ2xsIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZ2V0IGEgYmV0dGVyIGNvbnRleHQgZm9yIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDMzNi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljIGFuZCBzZWUgaWYgdGhpcyBmaXggcmV2ZWFscyBhbnkgdW5kZXJseWluZyB2dWxuZXJhYmlsaXRpZXMgb3IgYXJlYXMgdGhhdCBtaWdodCBiZW5lZml0IGZyb20gZnV6emluZy4gVGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYSBtZW1vcnkgc2FmZXR5IGNvbmNlcm4gdGhhdCBLTVNBTiBpcyBwYXJ0aWN1bGFybHkgc3VpdGVkIHRvIGV4cG9zZS4gT25jZSBJJ3ZlIHJldmlld2VkIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBJJ2xsIGJlIGluIGEgYmV0dGVyIHBvc2l0aW9uIHRvIG1ha2UgYSByZWNvbW1lbmRhdGlvbiBvbiB3aGV0aGVyIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBuZWNlc3Nhcnkgb3IgaWYgS0FTQU4gYWxvbmUgaXMgc3VmZmljaWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyOSwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjA0OjI4Ljk1NDIwMjIxMVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDA6XFx0XFx0QllURV9BTElHTihicyk7XFxuIDMwMTpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMSwgMCkpXFxuIDMwMjpcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gMzAzOlxcdFxcbiAzMDQ6XFx0XFx0bGVuID0gKmJzLVxcdTAwM2VjdXIrKztcXG4gMzA1OlxcdFxcdGJzLVxcdTAwM2VjdXIgKz0gbGVuO1xcbiAzMDY6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxcbiAzMDc6XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDMwODpcXHRcXG4gMzA5OlxcdFxcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XFxuIDMxMDpcXHR9XFxuIDMxMTpcXHRcXG4gMzEyOlxcdHN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuIDMxMzpcXHQgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxcbiAzMTQ6XFx0e1xcbiAzMTU6XFx0XFx0dW5zaWduZWQgaW50IGxlbjtcXG4gMzE2OlxcdFxcbiAzMTc6XFx0XFx0UFJJTlQoXFxcIiUqcyVzXFxcIiwgbGV2ZWwgKiBUQUJfU0laRSwgXFxcIiBcXFwiLCBmLVxcdTAwM2VuYW1lKTtcXG4gMzE4OlxcdFxcbiAzMTk6XFx0XFx0c3dpdGNoIChmLVxcdTAwM2Vzeikge1xcbiAzMjA6XFx0XFx0Y2FzZSBCWVRFOlxcdFxcdC8qIFJhbmdlID09IDI1NiAqL1xcbiAzMjE6XFx0XFx0XFx0QllURV9BTElHTihicyk7XFxuIDMyMjpcXHRcXHRcXHRicy1cXHUwMDNlY3VyKys7XFxuIDMyMzpcXHRcXHRcXHRicmVhaztcXG4gMzI0OlxcdFxcdGNhc2UgV09SRDpcXHRcXHQvKiAyNTcgXFx1MDAzYz0gUmFuZ2UgXFx1MDAzYz0gNjRLICovXFxuIDMyNTpcXHRcXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG4gMzI2OlxcdFxcdFxcdGJzLVxcdTAwM2VjdXIgKz0gMjtcXG4gMzI3OlxcdFxcdFxcdGJyZWFrO1xcbiAzMjg6XFx0XFx0Y2FzZSBDT05TOlxcdFxcdC8qIDY0SyBcXHUwMDNjIFJhbmdlIFxcdTAwM2MgNEcgKi9cXG4gMzI5OlxcdFxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAyKSlcXG4gMzMwOlxcdFxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbiAzMzE6XFx0XFx0XFx0bGVuID0gZ2V0X2JpdHMoYnMsIDIpICsgMTtcXG4gMzMyOlxcdFxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCBsZW4sIDApKVxcbiAzMzM6XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDMzNDpcXHRcXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG4gMzM1OlxcdFxcdFxcdGlmIChiYXNlIFxcdTAwMjZcXHUwMDI2IChmLVxcdTAwM2VhdHRyIFxcdTAwMjYgREVDT0RFKSkge1xcdC8qIHRpbWVUb0xpdmUgKi9cXG4gMzM2OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCB2ID0gZ2V0X3VpbnQoYnMsIGxlbikgKyBmLVxcdTAwM2VsYjtcXG4gMzM3OlxcdFxcdFxcdFxcdFBSSU5UKFxcXCIgPSAldVxcXCIsIHYpO1xcbiAzMzg6XFx0XFx0XFx0XFx0KigodW5zaWduZWQgaW50ICopKGJhc2UgKyBmLVxcdTAwM2VvZmZzZXQpKSA9IHY7XFxuIDMzOTpcXHRcXHRcXHR9IGVsc2Uge1xcbiAzNDA6XFx0XFx0XFx0XFx0YnMtXFx1MDAzZWN1ciArPSBsZW47XFxuIDM0MTpcXHRcXHRcXHR9XFxuIDM0MjpcXHRcXHRcXHRicmVhaztcXG4gMzQzOlxcdFxcdGNhc2UgVU5DTzpcXG4gMzQ0OlxcdFxcdFxcdEJZVEVfQUxJR04oYnMpO1xcbiAzNDU6XFx0XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxcbiAzNDY6XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDM0NzpcXHRcXHRcXHRsZW4gPSBnZXRfbGVuKGJzKTtcXG4gMzQ4OlxcdFxcdFxcdGJzLVxcdTAwM2VjdXIgKz0gbGVuO1xcbiAzNDk6XFx0XFx0XFx0YnJlYWs7XFxuIDM1MDpcXHRcXHRkZWZhdWx0OlxcdFxcdC8qIDIgXFx1MDAzYz0gUmFuZ2UgXFx1MDAzYz0gMjU1ICovXFxuIDM1MTpcXHRcXHRcXHRJTkNfQklUUyhicywgZi1cXHUwMDNlc3opO1xcbiAzNTI6XFx0XFx0XFx0YnJlYWs7XFxuIDM1MzpcXHRcXHR9XFxuIDM1NDpcXHRcXG4gMzU1OlxcdFxcdFBSSU5UKFxcXCJcXFxcblxcXCIpO1xcbiAzNTY6XFx0XFxuIDM1NzpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMCkpXFxuIDM1ODpcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gMzU5OlxcdFxcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XFxuIDM2MDpcXHR9XFxuIDM2MTpcXHRcXG4gMzYyOlxcdHN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbiAzNjM6XFx0ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuIDM2NDpcXHR7XFxuIDM2NTpcXHRcXHRQUklOVChcXFwiJSpzJXNcXFxcblxcXCIsIGxldmVsICogVEFCX1NJWkUsIFxcXCIgXFxcIiwgZi1cXHUwMDNlbmFtZSk7XFxuIDM2NjpcXHRcXG4gMzY3OlxcdFxcdGlmICgoZi1cXHUwMDNlYXR0ciBcXHUwMDI2IEVYVCkgXFx1MDAyNlxcdTAwMjYgZ2V0X2JpdChicykpIHtcXG4gMzY4OlxcdFxcdFxcdElOQ19CSVRTKGJzLCA3KTtcXG4gMzY5OlxcdFxcdH0gZWxzZSB7XFxuIDM3MDpcXHRcXHRcXHRJTkNfQklUUyhicywgZi1cXHUwMDNlc3opO1xcbiAzNzE6XFx0XFx0fVxcbiAzNzI6XFx0XFxuIDM3MzpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMCkpXFxuIDM3NDpcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gMzc1OlxcdFxcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XFxuIDM3NjpcXHR9XFxuIDM3NzpcXHRcXG4gMzc4OlxcdHN0YXRpYyBpbnQgZGVjb2RlX2JpdHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuIDM3OTpcXHQgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowNDoyOC45NTQzMDI5NzFaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUwOTM0MzU1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGtlZXBpbmcgaW4gbWluZCBteSBvd24gZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgZ2V0X3VpbnRgIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBvZiB0aGlzIGBnZXRfdWludGAgZnVuY3Rpb24uIFdoZXJlIGlzIHRoaXMgdGhpbmcgZGVmaW5lZD8gSXQncyBwcm9iYWJseSBpbiB0aGUgYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgZmlsZSwgb3IgcGVyaGFwcyBpbmNsdWRlZCBpbiBvbmUgb2YgdGhlIGhlYWRlcnMgd2l0aGluIHRoYXQgY29udGV4dC4gSSdsbCBuZWVkIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UgY29kZSDigJMgbm8gcm9vbSBmb3IgZ3Vlc3N3b3JrIGhlcmUuIFRpbWUgdG8gcHVsbCB1cCB0aGUgcmVsZXZhbnQgZmlsZXMgYW5kIGRpc3NlY3QgdGhpcyBmdW5jdGlvbidzIGxvZ2ljLiBJIG5lZWQgdG8gZXhhbWluZSBwcmVjaXNlbHkgaG93IGl0J3MgaW1wbGVtZW50ZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgY29ubnRyYWNrIG1vZHVsZSBhbmQsIGJ5IGV4dGVuc2lvbiwgdGhlIEguMzIzIHByb3RvY29sIGhhbmRsaW5nLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQ7IHVuZGVyc3RhbmRpbmcgdGhpcyBsb3ctbGV2ZWwgZnVuY3Rpb24gaXMgY3JpdGljYWwgdG8gZ3Jhc3BpbmcgaG93IHRoZSBzeXN0ZW0gaW50ZXJwcmV0cyB0aGUgQVNOLjEgZGF0YSBzdHJlYW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTg3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowNDozMi40NjM2NDk4MDJaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTU4ODI0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfdWludFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0xMDQ9c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0bWFwKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTA1OnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VpbnQoc3RydWN0IGJpdHN0ciAqYnMsIGludCBiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMDYtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0yMTE9c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0bWFwKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTI0OS0gKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoyNTA6c3RhdGljIHVuc2lnbmVkIGludCBnZXRfdWludChzdHJ1Y3QgYml0c3RyICpicywgaW50IGIpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjUxLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTMxMj1zdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzM1LVxcdFxcdGlmIChiYXNlIFxcdTAwMjZcXHUwMDI2IChmLVxcdTAwM2VhdHRyIFxcdTAwMjYgREVDT0RFKSkge1xcdC8qIHRpbWVUb0xpdmUgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozMzY6XFx0XFx0XFx0dW5zaWduZWQgaW50IHYgPSBnZXRfdWludChicywgbGVuKSArIGYtXFx1MDAzZWxiO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMzNy1cXHRcXHRcXHRQUklOVChcXFwiID0gJXVcXFwiLCB2KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM9NjgwPXZvaWQgbmZfY29ubnRyYWNrX3Byb3RvX3Blcm5ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNjk2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6Njk3Om1vZHVsZV9wYXJhbV9jYWxsKGhhc2hzaXplLCBuZl9jb25udHJhY2tfc2V0X2hhc2hzaXplLCBwYXJhbV9nZXRfdWludCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTY5OC1cXHRcXHQgIFxcdTAwMjZuZl9jb25udHJhY2tfaHRhYmxlX3NpemUsIDA2MDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowNDozMi42MDMyNTQ0NDZaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg0NDczODk4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGBnZXRfdWludGAgZnVuY3Rpb24gaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYC5cblxuKipEaXZpbmcgaW50byBgZ2V0X3VpbnRgKipcblxuQWxyaWdodCwgbGV0J3MgcHVsbCB1cCB0aGF0IGBnZXRfdWludGAgZnVuY3Rpb24gaW4gdGhlIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgY29kZS4gU3BlY2lmaWNhbGx5LCBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgLiBJJ20gYWxyZWFkeSB0aGlua2luZyBhYm91dCB0aGUgQVNOLjEgcGFyc2luZyBjb250ZXh0IHRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMgd2l0aGluLiBDb25zaWRlcmluZyB0aGUgbG93LWxldmVsIEFTTi4xIGVuY29kaW5nIHByaW5jaXBsZXMsIHRoaXMgZnVuY3Rpb24gaXMgcHJvYmFibHkgdGFza2VkIHdpdGggZXh0cmFjdGluZyBhbiB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGZyb20gYSBidWZmZXIgZm9ybWF0dGVkIGFjY29yZGluZyB0byBJVFUtVCBYLjY5MCAoREVSL0JFUikgb3Igd2hhdGV2ZXIgc3Vic2V0IHRoZXkgYXJlIHVzaW5nLiBJIGV4cGVjdCB0byBzZWUgaXQgaGFuZGxpbmcgdmFyaWFibGUtbGVuZ3RoIGVuY29kaW5ncywgcG90ZW50aWFsbHkgY2hlY2tpbmcgZm9yIHRoZSBtaW5pbXVtIG51bWJlciBvZiBvY3RldHMgcmVxdWlyZWQgdG8gcmVwcmVzZW50IHRoZSB2YWx1ZSwgYW5kIGxpa2VseSBkZWFsaW5nIHdpdGggbGVhZGluZyB6ZXJvIGJ5dGVzIHRoYXQgbWlnaHQgYmUgcHJlc2VudCBpbiB0aGUgZW5jb2RlZCByZXByZXNlbnRhdGlvbiBkZXBlbmRpbmcgb24gd2hpY2ggXCJ0YWdcIiBjbGFzcyB0aGUgaW50ZWdlciBpcyBiZWluZyBlbmNvZGVkIHdpdGguIFRoaXMgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGluIHRlcm1zIG9mIGhvdyBpdCBleHRyYWN0cyBhIHZhbHVlIGFuZCB3aGV0aGVyIGl0IG1pZ2h0IGJlIHZ1bG5lcmFibGUgdG8gdGhpbmdzIGxpa2Ugb3ZlcmxvbmcgZW5jb2RpbmdzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IGl0IGhhbmRsZXMgY2FzZXMgd2hlcmUgdGhlIGJ1ZmZlciBtaWdodCBiZSB0cnVuY2F0ZWQgb3IgaW52YWxpZCwgYW5kIG1ha2Ugc3VyZSB0aGF0IGl0J3Mgcm9idXN0IGluIHRoYXQgY29udGV4dC4gSSB3YW50IHRvIHNlZSBpZiB0aGV5J3JlIHZhbGlkYXRpbmcgdGhlIGxlbmd0aCBmaWVsZCBwcm9wZXJseSBhbmQgaG93IHRoZXkncmUgaGFuZGxpbmcgcG90ZW50aWFsIG92ZXJmbG93cyDigJMgdGhhdCdzIG9mdGVuIGEgc291cmNlIG9mIHZ1bG5lcmFiaWxpdGllcyB3aGVuIGRlYWxpbmcgd2l0aCB1bnNpZ25lZCBpbnRlZ2Vycy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIG9mZi1ieS1vbmUgZXJyb3JzIGluIHRoZWlyIGluZGV4aW5nIGFzIHdlbGwuIExldCdzIHNlZSBob3cgd2VsbCBpdCdzIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQ3LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDQ6MzUuNDQ3OTk1OTU1WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDA6XFx0XFx0fVxcbiAyNDE6XFx0XFxuIDI0MjpcXHRcXHR2IFxcdTAwMjY9IDB4ZmZmZmZmZmYgXFx1MDAzY1xcdTAwM2MgKDMyIC0gYik7XFxuIDI0MzpcXHRcXG4gMjQ0OlxcdFxcdHJldHVybiB2O1xcbiAyNDU6XFx0fVxcbiAyNDY6XFx0XFxuIDI0NzpcXHQvKlxcbiAyNDg6XFx0ICogQXNzdW1lIGJzIGlzIGFsaWduZWQgYW5kIHNpemVvZih1bnNpZ25lZCBpbnQpID09IDRcXG4gMjQ5OlxcdCAqL1xcbiAyNTA6XFx0c3RhdGljIHVuc2lnbmVkIGludCBnZXRfdWludChzdHJ1Y3QgYml0c3RyICpicywgaW50IGIpXFxuIDI1MTpcXHR7XFxuIDI1MjpcXHRcXHR1bnNpZ25lZCBpbnQgdiA9IDA7XFxuIDI1MzpcXHRcXG4gMjU0OlxcdFxcdHN3aXRjaCAoYikge1xcbiAyNTU6XFx0XFx0Y2FzZSA0OlxcbiAyNTY6XFx0XFx0XFx0diB8PSAqYnMtXFx1MDAzZWN1cisrO1xcbiAyNTc6XFx0XFx0XFx0diBcXHUwMDNjXFx1MDAzYz0gODtcXG4gMjU4OlxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiAyNTk6XFx0XFx0Y2FzZSAzOlxcbiAyNjA6XFx0XFx0XFx0diB8PSAqYnMtXFx1MDAzZWN1cisrO1xcbiAyNjE6XFx0XFx0XFx0diBcXHUwMDNjXFx1MDAzYz0gODtcXG4gMjYyOlxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiAyNjM6XFx0XFx0Y2FzZSAyOlxcbiAyNjQ6XFx0XFx0XFx0diB8PSAqYnMtXFx1MDAzZWN1cisrO1xcbiAyNjU6XFx0XFx0XFx0diBcXHUwMDNjXFx1MDAzYz0gODtcXG4gMjY2OlxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiAyNjc6XFx0XFx0Y2FzZSAxOlxcbiAyNjg6XFx0XFx0XFx0diB8PSAqYnMtXFx1MDAzZWN1cisrO1xcbiAyNjk6XFx0XFx0XFx0YnJlYWs7XFxuIDI3MDpcXHRcXHR9XFxuIDI3MTpcXHRcXHRyZXR1cm4gdjtcXG4gMjcyOlxcdH1cXG4gMjczOlxcdFxcbiAyNzQ6XFx0c3RhdGljIGludCBkZWNvZGVfbnVsKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4gMjc1OlxcdCAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuIDI3NjpcXHR7XFxuIDI3NzpcXHRcXHRQUklOVChcXFwiJSpzJXNcXFxcblxcXCIsIGxldmVsICogVEFCX1NJWkUsIFxcXCIgXFxcIiwgZi1cXHUwMDNlbmFtZSk7XFxuIDI3ODpcXHRcXG4gMjc5OlxcdFxcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjA0OjM1LjQ0ODEwNzIwNFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0Mjk2MzQ4MjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENyaXRpY2FsIEFTTi4xIERlY29kaW5nIEJ1ZyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBkZWNvZGVfaW50YCBmdW5jdGlvbiwgYW5kIHNvbWV0aGluZyBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXQgbWUgcmVnYXJkaW5nIGhvdyBgYnMtXHUwMDNlY3VyYCBpcyBiZWluZyBtYW5hZ2VkLiBTcGVjaWZpY2FsbHksIGxldCdzIGxvb2sgYXQgYGdldF91aW50YC4gUHJldmlvdXNseSwgYGdldF91aW50KGJzLCBsZW4pYCB3YXMgZGVmaW5lZCBpbiBhIHdheSB0aGF0IGl0IGluY3JlbWVudHMgYGJzLVx1MDAzZWN1cmAgYnkgYGxlbmAgYnl0ZXMuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBhZHZhbmNpbmcgYGJzLVx1MDAzZWN1cmAgdXNpbmcgYCpicy1cdTAwM2VjdXIrK2Agd2l0aGluIHRoZSBgZ2V0X3VpbnRgIGZ1bmN0aW9uIGl0c2VsZi5cblxuTm93LCBjb25zaWRlciB0aGlzIHNjZW5hcmlvIHdpdGhpbiBgZGVjb2RlX2ludGAgdW5kZXIgdGhlIGBDT05TYCBjYXNlLiBXZSBkZXRlcm1pbmUgYSBgbGVuYCB2YWx1ZS4gVGhlbiwgaWYgd2UgaGl0IHRoZSBgaWYgKGJhc2UgXHUwMDI2XHUwMDI2IChmLVx1MDAzZWF0dHIgXHUwMDI2IERFQ09ERSkpYCBjb25kaXRpb24sIGBnZXRfdWludChicywgbGVuKWAgKmFscmVhZHkqIGFkdmFuY2VzIGBicy1cdTAwM2VjdXJgIGJ5IGBsZW5gLiBCdXQgdGhlbiwgKnVuY29uZGl0aW9uYWxseSosIGFmdGVyIHRoYXQgY29uZGl0aW9uYWwgYmxvY2ssIHdlIGZpbmQgYGJzLVx1MDAzZWN1ciArPSBsZW47YC5cblxuSGFuZyBvbiBhIG1pbnV0ZSEgVGhhdCdzIHRoZSBwcm9ibGVtLiBJdCBtZWFucyB0aGF0IHdoZW4gdGhlIGBpZmAgc3RhdGVtZW50IGlzIHRydWUsIHdlJ3JlIGVmZmVjdGl2ZWx5IGluY3JlbWVudGluZyBgYnMtXHUwMDNlY3VyYCBieSBgbGVuYCAqdHdpY2UqLiBPbmNlIGluc2lkZSBgZ2V0X3VpbnRgLCBhbmQgdGhlbiBhZ2FpbiBhZnRlciBgZ2V0X3VpbnRgIGNvbXBsZXRlcy4gV2hlbiB0aGUgYGlmYCBzdGF0ZW1lbnQgaXMgZmFsc2UsIGBicy1cdTAwM2VjdXIgKz0gbGVuO2AgaGFwcGVucyBvbmx5IG9uY2UuXG5cblNvLCB0aGUgYnVnIGlzIGNsZWFyOiBpbiBgZGVjb2RlX2ludGAgdGhlIGNvZGUgd2FzIGFkdmFuY2luZyB0aGUgYnVmZmVyIHBvaW50ZXIsIGBicy1cdTAwM2VjdXJgIGJ5IGBsZW5gIGJ5dGVzIHR3aWNlIHdoZW4gYSBzcGVjaWZpYyBkZWNvZGluZyBjb25kaXRpb24gd2FzIG1ldC4gVGhpcyBleHBsYWlucyB0aGUgcG90ZW50aWFsIGZvciBza2lwcGVkIGRhdGEsIG1pcy1wYXJzaW5nLCBhbmQgdGhlIHJpc2sgb2Ygb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBpbmNvcnJlY3Qgb2Zmc2V0IHdpbGwgY2VydGFpbmx5IHdyZWFrIGhhdm9jIG9uIHN1YnNlcXVlbnQgQVNOLjEgZmllbGQgZGVjb2RpbmcuXG5cblNpbmNlIGBicy1cdTAwM2VjdXJgIHBvaW50cyB0byBhbiBpbmNvbWluZyBuZXR3b3JrIHBhY2tldCwgbGlrZWx5IGZyb20gYW4gYHNrYmAgYnVmZmVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBiaXRzdHJgIHN0cnVjdHVyZSBhbmQgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgIGZ1bmN0aW9uIHdvcmsuIFRob3NlIGFyZSB0aGUga2V5IHBpZWNlcyBub3cuIEkgbmVlZCB0byB0cmFjZSB3aGVyZSB0aGUgYnVmZmVycyBhcmUgY29taW5nIGZyb20uIFRpbWUgdG8gZGlnIHRocm91Z2ggYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NjYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowNDozOS43NDQ0NTc4WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDY4NTM5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgYml0c3RyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTc1PXR5cGVkZWYgc3RydWN0IGZpZWxkX3Qge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODgtLyogQml0IFN0cmVhbSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjg5OnN0cnVjdCBiaXRzdHIge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTkwLVxcdHVuc2lnbmVkIGNoYXIgKmJ1ZjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEwMC0jZGVmaW5lIEJZVEVfQUxJR04oYnMpIGlmKChicyktXFx1MDAzZWJpdCl7KGJzKS1cXHUwMDNlY3VyKys7KGJzKS1cXHUwMDNlYml0PTA7fVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEwMTpzdGF0aWMgdW5zaWduZWQgaW50IGdldF9sZW4oc3RydWN0IGJpdHN0ciAqYnMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEwMjpzdGF0aWMgdW5zaWduZWQgaW50IGdldF9iaXQoc3RydWN0IGJpdHN0ciAqYnMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEwMzpzdGF0aWMgdW5zaWduZWQgaW50IGdldF9iaXRzKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTA0OnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdG1hcChzdHJ1Y3QgYml0c3RyICpicywgdW5zaWduZWQgaW50IGIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEwNTpzdGF0aWMgdW5zaWduZWQgaW50IGdldF91aW50KHN0cnVjdCBiaXRzdHIgKmJzLCBpbnQgYik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTA2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEwNy0vKiBEZWNvZGVyIEZ1bmN0aW9ucyAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEwODpzdGF0aWMgaW50IGRlY29kZV9udWwoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEwOTpzdGF0aWMgaW50IGRlY29kZV9ib29sKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTA6c3RhdGljIGludCBkZWNvZGVfb2lkKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTE6c3RhdGljIGludCBkZWNvZGVfaW50KHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTI6c3RhdGljIGludCBkZWNvZGVfZW51bShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTEzOnN0YXRpYyBpbnQgZGVjb2RlX2JpdHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTE0OnN0YXRpYyBpbnQgZGVjb2RlX251bXN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTE1OnN0YXRpYyBpbnQgZGVjb2RlX29jdHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTE2OnN0YXRpYyBpbnQgZGVjb2RlX2JtcHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTE3OnN0YXRpYyBpbnQgZGVjb2RlX3NlcShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTE4OnN0YXRpYyBpbnQgZGVjb2RlX3NlcW9mKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTk6c3RhdGljIGludCBkZWNvZGVfY2hvaWNlKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMjAtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTIxLS8qIERlY29kZXIgRnVuY3Rpb25zIFZlY3RvciAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEyMjp0eXBlZGVmIGludCAoKmRlY29kZXJfdCkoc3RydWN0IGJpdHN0ciAqLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqLCBjaGFyICosIGludCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTIzLXN0YXRpYyBjb25zdCBkZWNvZGVyX3QgRGVjb2RlcnNbXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE0Ny0vKiBBc3N1bWUgYnMgaXMgYWxpZ25lZCBcXHUwMDI2XFx1MDAyNiB2IFxcdTAwM2MgMTYzODQgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxNDg6c3RhdGljIHVuc2lnbmVkIGludCBnZXRfbGVuKHN0cnVjdCBiaXRzdHIgKmJzKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE0OS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xNjItXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTYzOnN0YXRpYyBpbnQgbmZfaDMyM19lcnJvcl9ib3VuZGFyeShzdHJ1Y3QgYml0c3RyICpicywgc2l6ZV90IGJ5dGVzLCBzaXplX3QgYml0cylcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xNjQte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTc1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjE3NjpzdGF0aWMgdW5zaWduZWQgaW50IGdldF9iaXQoc3RydWN0IGJpdHN0ciAqYnMpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTc3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE4NS0vKiBBc3N1bWUgYiBcXHUwMDNjPSA4ICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTg2OnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdHMoc3RydWN0IGJpdHN0ciAqYnMsIHVuc2lnbmVkIGludCBiKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE4Ny17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yMTAtLyogQXNzdW1lIGIgXFx1MDAzYz0gMzIgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoyMTE6c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0bWFwKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYilcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yMTIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjQ5LSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjI1MDpzdGF0aWMgdW5zaWduZWQgaW50IGdldF91aW50KHN0cnVjdCBiaXRzdHIgKmJzLCBpbnQgYilcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yNTEte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjczLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjI3NDpzdGF0aWMgaW50IGRlY29kZV9udWwoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTI3NS0gICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjgxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjI4MjpzdGF0aWMgaW50IGRlY29kZV9ib29sKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yODMtICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yOTItXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MjkzOnN0YXRpYyBpbnQgZGVjb2RlX29pZChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjk0LSAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zMTEtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MzEyOnN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzEzLSAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zNjEtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MzYyOnN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM2My0gICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM3Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozNzg6c3RhdGljIGludCBkZWNvZGVfYml0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zNzktICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQxMy1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo0MTQ6c3RhdGljIGludCBkZWNvZGVfbnVtc3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00MTUtICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQzMy1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo0MzQ6c3RhdGljIGludCBkZWNvZGVfb2N0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00MzUtICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ4MS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo0ODI6c3RhdGljIGludCBkZWNvZGVfYm1wc3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00ODMtICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTUxMC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1MTE6c3RhdGljIGludCBkZWNvZGVfc2VxKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01MTItICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY0My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo2NDQ6c3RhdGljIGludCBkZWNvZGVfc2Vxb2Yoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY0NS0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MzktXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzQwOnN0YXRpYyBpbnQgZGVjb2RlX2Nob2ljZShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzQxLSAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz04MjE9aW50IERlY29kZVJhc01lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFJhc01lc3NhZ2UgKnJhcylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgyNi1cXHR9O1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgyNzpcXHRzdHJ1Y3QgYml0c3RyIGJzO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgyOC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTgzNj1zdGF0aWMgaW50IERlY29kZUgzMjNfVXNlckluZm9ybWF0aW9uKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgY2hhciAqYmVnLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODQyLVxcdH07XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODQzOlxcdHN0cnVjdCBiaXRzdHIgYnM7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODQ0LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9ODUzPWludCBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NjAtXFx0fTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo4NjE6XFx0c3RydWN0IGJpdHN0ciBicztcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NjItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjA0OjM5Ljc5NTE2Mjg0OFoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTI3ODQ5MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYERlY29kZVJhc01lc3NhZ2VgIFVzYWdlIGluIG5mX2Nvbm50cmFja19oMzIzX21haW4uYyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGBEZWNvZGVSYXNNZXNzYWdlYCBmdW5jdGlvbiBpcyBiZWluZyBsZXZlcmFnZWQgd2l0aGluIHRoZSBgbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBuZXRmaWx0ZXIgY29udGV4dC4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGFyZWFzIGZvciBpbXByb3ZlbWVudCwgb3B0aW1pemF0aW9uLCBvciBldmVuIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGFsdGhvdWdoIHRoYXQncyBub3QgdGhlIHByaW1hcnkgZm9jdXMgcmlnaHQgbm93LiBGaXJzdCBJJ20gY2hlY2tpbmcsIGF0IGEgaGlnaCBsZXZlbCwgdGhlIGZsb3cgb2YgdGhlIGNvZGUuIFRoZW4sIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGluZyBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSB0aGF04oCZcyBiZWluZyBmZWQgaW50byBgRGVjb2RlUmFzTWVzc2FnZWAgYW5kLCBjb252ZXJzZWx5LCB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgcHJvZHVjaW5nLiBJIHdpbGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBkZWNvZGVkIGRhdGEgaXMgYmVpbmcgdXNlZCwgZXNwZWNpYWxseSBpZiBhbnkgYXNzdW1wdGlvbnMgYXJlIGJlaW5nIG1hZGUgYWJvdXQgaXRzIGZvcm1hdCBvciBjb250ZW50LiBUaGUgZW5kIGdvYWwgaXMgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU3NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjA0OjQxLjkyMzA2NDM3N1oiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyNDUxNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRGVjb2RlUmFzTWVzc2FnZXxEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2V8dGltZVRvTGl2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0zMTI9c3RhdGljIGludCBkZWNvZGVfaW50KHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMzNC1cXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozMzU6XFx0XFx0aWYgKGJhc2UgXFx1MDAyNlxcdTAwMjYgKGYtXFx1MDAzZWF0dHIgXFx1MDAyNiBERUNPREUpKSB7XFx0LyogdGltZVRvTGl2ZSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMzNi1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgdiA9IGdldF91aW50KGJzLCBsZW4pICsgZi1cXHUwMDNlbGI7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz03NDA9c3RhdGljIGludCBkZWNvZGVfY2hvaWNlKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgyMC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo4MjE6aW50IERlY29kZVJhc01lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFJhc01lc3NhZ2UgKnJhcylcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MjIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9ODM2PXN0YXRpYyBpbnQgRGVjb2RlSDMyM19Vc2VySW5mb3JtYXRpb24odW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBjaGFyICpiZWcsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NTItXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODUzOmludCBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODU0LVxcdFxcdFxcdFxcdFxcdCBNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UgKlxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9NTI5PXN0YXRpYyBpbnQgaDI0NV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtNTUyLVxcdFxcdC8qIERlY29kZSBILjI0NSBzaWduYWwgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzo1NTM6XFx0XFx0cmV0ID0gRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlKGRhdGEsIGRhdGFsZW4sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtNTU0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZtc2NtKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTEzMDc9c3RhdGljIGludCBwcm9jZXNzX3JycShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xMzM2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjEzMzc6XFx0aWYgKHJycS1cXHUwMDNlb3B0aW9ucyBcXHUwMDI2IGVSZWdpc3RyYXRpb25SZXF1ZXN0X3RpbWVUb0xpdmUpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxMzM4OlxcdFxcdHByX2RlYnVnKFxcXCJuZl9jdF9yYXM6IFJSUSBUVEwgPSAldSBzZWNvbmRzXFxcXG5cXFwiLCBycnEtXFx1MDAzZXRpbWVUb0xpdmUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjEzMzk6XFx0XFx0aW5mby1cXHUwMDNldGltZW91dCA9IHJycS1cXHUwMDNldGltZVRvTGl2ZTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xMzQwLVxcdH0gZWxzZVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTM0Nj1zdGF0aWMgaW50IHByb2Nlc3NfcmNmKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTEzNzEtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTM3MjpcXHRpZiAocmNmLVxcdTAwM2VvcHRpb25zIFxcdTAwMjYgZVJlZ2lzdHJhdGlvbkNvbmZpcm1fdGltZVRvTGl2ZSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjEzNzM6XFx0XFx0cHJfZGVidWcoXFxcIm5mX2N0X3JhczogUkNGIFRUTCA9ICV1IHNlY29uZHNcXFxcblxcXCIsIHJjZi1cXHUwMDNldGltZVRvTGl2ZSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTM3NDpcXHRcXHRpbmZvLVxcdTAwM2V0aW1lb3V0ID0gcmNmLVxcdTAwM2V0aW1lVG9MaXZlO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTEzNzUtXFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTY2ND1zdGF0aWMgaW50IHJhc19oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTY4My1cXHQvKiBEZWNvZGUgUkFTIG1lc3NhZ2UgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNjg0OlxcdHJldCA9IERlY29kZVJhc01lc3NhZ2UoZGF0YSwgZGF0YWxlbiwgXFx1MDAyNnJhcyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTY4NS1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTE1NzU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9SZWdpc3RyYXRpb25SZXF1ZXN0W10gPSB7XFx0LyogU0VRVUVOQ0UgKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNTkzLVxcdHtGTkFNRShcXFwiYWx0ZXJuYXRlRW5kcG9pbnRzXFxcIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxNTk0OlxcdHtGTkFNRShcXFwidGltZVRvTGl2ZVxcXCIpIElOVCwgQ09OUywgMSwgMCwgREVDT0RFIHwgT1BULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxNTk1OlxcdCBvZmZzZXRvZihSZWdpc3RyYXRpb25SZXF1ZXN0LCB0aW1lVG9MaXZlKSwgTlVMTH0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE1OTYtXFx0e0ZOQU1FKFxcXCJ0b2tlbnNcXFwiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTYzMz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX1JlZ2lzdHJhdGlvbkNvbmZpcm1bXSA9IHtcXHQvKiBTRVFVRU5DRSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE2NDUtXFx0e0ZOQU1FKFxcXCJhbHRlcm5hdGVHYXRla2VlcGVyXFxcIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxNjQ2OlxcdHtGTkFNRShcXFwidGltZVRvTGl2ZVxcXCIpIElOVCwgQ09OUywgMSwgMCwgREVDT0RFIHwgT1BULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxNjQ3OlxcdCBvZmZzZXRvZihSZWdpc3RyYXRpb25Db25maXJtLCB0aW1lVG9MaXZlKSwgTlVMTH0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE2NDgtXFx0e0ZOQU1FKFxcXCJ0b2tlbnNcXFwiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjA0OjQxLjk3NDMxNjg1NVoiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTk3MzYxMzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdW5kZXJzdGFuZGluZyB0aGUgYHJhc2AgaW5pdGlhbGl6YXRpb24gYW5kIHVzYWdlIHdpdGhpbiBgcmFzX2hlbHBgLCBiYXNlZCBvbiB0aGF0IHBvaW50ZXIgdG8gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jYCBhcm91bmQgbGluZXMgMTY3NS0xNzEwLlxuXG4qKkRlY29uc3RydWN0aW5nIGByYXNgIGluIGByYXNfaGVscGAqKlxuXG5NeSBpbW1lZGlhdGUgcGxhbiBpcyB0byBvcGVuIHRoYXQgZmlsZSwgYG5mX2Nvbm50cmFja19oMzIzX21haW4uY2AsIGFuZCB6ZXJvIGluIG9uIHRoZSBzdWdnZXN0ZWQgbGluZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBXaGF0IGlzIGByYXNgPyBJcyBpdCBhIGRhdGEgc3RydWN0dXJlPyBBIGZ1bmN0aW9uIHBvaW50ZXI/IEEgZ2xvYmFsIHZhcmlhYmxlPyBUaGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBjbHVlcy4gSSdsbCBiZSBsb29raW5nIGZvciB3aGVyZSBgcmFzYCBpcyBkZWNsYXJlZCBhbmQgaW5pdGlhbGl6ZWQsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHN0cnVjdHVyZXMgb3IgdHlwZXMgaW52b2x2ZWQuIFRoZW4sIEknbGwgdHJhY2UgaG93IGl0J3MgdXNlZCB3aXRoaW4gdGhhdCBibG9jayBvZiBjb2RlIOKAkyBhcmUgZnVuY3Rpb25zIGNhbGxlZCBvbiBpdD8gQXJlIHZhbHVlcyBhc3NpZ25lZCB0byBpdHMgbWVtYmVycz8gSXMgaXQgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIG90aGVyIGZ1bmN0aW9ucz9cblxuR2l2ZW4gdGhlIGZpbGUgbmFtZSwgSSdtIGV4cGVjdGluZyB0aGlzIGByYXNgIGVudGl0eSBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZy4gSXQgbWlnaHQgYmUgcmVsYXRlZCB0byBoYW5kbGluZyBSQVMgKFJlZ2lzdHJhdGlvbiwgQWRtaXNzaW9uLCBhbmQgU3RhdHVzKSBtZXNzYWdlcyB3aXRoaW4gdGhlIEguMzIzIHByb3RvY29sLiBUaGUgbG9jYXRpb24gd2l0aGluIHRoZSBgbmZfY29ubnRyYWNrYCBmcmFtZXdvcmsgc3VnZ2VzdHMgaXRzIGxpa2VseSBpbnZvbHZlZCBpbiBpbnNwZWN0aW5nIGFuZCBtYW5pcHVsYXRpbmcgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyaWVzIHJlbGV2YW50IHRvIEguMzIzIHRyYWZmaWMuIFRoZSBsaW5lIG51bWJlcnMgaG9wZWZ1bGx5IHBvaW50IHRvIHdoZXJlIFJBUy1zcGVjaWZpYyBwYXJzaW5nIG9yIHByb2Nlc3Npbmcgb2NjdXJzLCBwZXJoYXBzIHdoZXJlIHRoZSBILjIyNS9RLjkzMSBtZXNzYWdlcyBhcmUgZGVtdXhlZCBhbmQgdGhlIFJBUy1zcGVjaWZpYyBkZXRhaWxzIGFyZSBoYW5kbGVkLiBJJ20ga2VlbiB0byBzZWUgdGhlIGNvZGUgd2hpY2ggdHJhY2tzIHRoZSBILjMyMyBSQVMgbWVzc2FnZXMsIHdoaWNoIGlzIHZpdGFsIHRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIGNvbm5lY3Rpb24gZmxvdyBhbmQgTkFUIHRyYXZlcnNhbCBiZWhhdmlvciBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nLiBNeSBleHBlcnQgaW5zdGluY3RzIHRlbGwgbWUgdGhpcyB3aWxsIHByb3ZpZGUgc29tZSBpbnNpZ2h0cyBpbnRvIGhvdyBILjMyMyBlbmRwb2ludHMgYXJlIHJlZ2lzdGVyZWQgYW5kIG1hbmFnZWQsIGFuZCBob3cgdGhhdCBpbmZvcm1hdGlvbiBpcyB1c2VkIGZvciBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjQ2LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDQ6NDUuNTcxNjgyMzQxWiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjcwOlxcdFxcdGludCByZXQ7XFxuMTY3MTpcXHRcXG4xNjcyOlxcdFxcdHByX2RlYnVnKFxcXCJuZl9jdF9yYXM6IHNrYmxlbiA9ICV1XFxcXG5cXFwiLCBza2ItXFx1MDAzZWxlbik7XFxuMTY3MzpcXHRcXG4xNjc0OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmZfaDMyM19sb2NrKTtcXG4xNjc1OlxcdFxcbjE2NzY6XFx0XFx0LyogR2V0IFVEUCBkYXRhICovXFxuMTY3NzpcXHRcXHRkYXRhID0gZ2V0X3VkcF9kYXRhKHNrYiwgcHJvdG9mZiwgXFx1MDAyNmRhdGFsZW4pO1xcbjE2Nzg6XFx0XFx0aWYgKGRhdGEgPT0gTlVMTClcXG4xNjc5OlxcdFxcdFxcdGdvdG8gYWNjZXB0O1xcbjE2ODA6XFx0XFx0cHJfZGVidWcoXFxcIm5mX2N0X3JhczogUkFTIG1lc3NhZ2UgbGVuPSVkIFxcXCIsIGRhdGFsZW4pO1xcbjE2ODE6XFx0XFx0bmZfY3RfZHVtcF90dXBsZShcXHUwMDI2Y3QtXFx1MDAzZXR1cGxlaGFzaFtDVElORk8yRElSKGN0aW5mbyldLnR1cGxlKTtcXG4xNjgyOlxcdFxcbjE2ODM6XFx0XFx0LyogRGVjb2RlIFJBUyBtZXNzYWdlICovXFxuMTY4NDpcXHRcXHRyZXQgPSBEZWNvZGVSYXNNZXNzYWdlKGRhdGEsIGRhdGFsZW4sIFxcdTAwMjZyYXMpO1xcbjE2ODU6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4xNjg2OlxcdFxcdFxcdHByX2RlYnVnKFxcXCJuZl9jdF9yYXM6IGRlY29kaW5nIGVycm9yOiAlc1xcXFxuXFxcIixcXG4xNjg3OlxcdFxcdFxcdFxcdCByZXQgPT0gSDMyM19FUlJPUl9CT1VORCA/XFxuMTY4ODpcXHRcXHRcXHRcXHQgXFxcIm91dCBvZiBib3VuZFxcXCIgOiBcXFwib3V0IG9mIHJhbmdlXFxcIik7XFxuMTY4OTpcXHRcXHRcXHRnb3RvIGFjY2VwdDtcXG4xNjkwOlxcdFxcdH1cXG4xNjkxOlxcdFxcbjE2OTI6XFx0XFx0LyogUHJvY2VzcyBSQVMgbWVzc2FnZSAqL1xcbjE2OTM6XFx0XFx0aWYgKHByb2Nlc3NfcmFzKHNrYiwgY3QsIGN0aW5mbywgcHJvdG9mZiwgXFx1MDAyNmRhdGEsIFxcdTAwMjZyYXMpIFxcdTAwM2MgMClcXG4xNjk0OlxcdFxcdFxcdGdvdG8gZHJvcDtcXG4xNjk1OlxcdFxcbjE2OTY6XFx0ICAgICAgYWNjZXB0OlxcbjE2OTc6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5mX2gzMjNfbG9jayk7XFxuMTY5ODpcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbjE2OTk6XFx0XFxuMTcwMDpcXHQgICAgICBkcm9wOlxcbjE3MDE6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5mX2gzMjNfbG9jayk7XFxuMTcwMjpcXHRcXHRuZl9jdF9oZWxwZXJfbG9nKHNrYiwgY3QsIFxcXCJjYW5ub3QgcHJvY2VzcyBSQVMgbWVzc2FnZVxcXCIpO1xcbjE3MDM6XFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuMTcwNDpcXHR9XFxuMTcwNTpcXHRcXG4xNzA2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgcmFzX2V4cF9wb2xpY3kgPSB7XFxuMTcwNzpcXHRcXHQubWF4X2V4cGVjdGVkXFx0XFx0PSAzMixcXG4xNzA4OlxcdFxcdC50aW1lb3V0XFx0XFx0PSAyNDAsXFxuMTcwOTpcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowNDo0NS41NzE3OTQ0NTFaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc2OTIzMjYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEZWNvZGluZyB0aGUgYHJhc2AgVmFyaWFibGU6IEEgUXVpY2sgRGl2ZSoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHJhc2AgdmFyaWFibGUgaXMgZGVjbGFyZWQgYW5kIHVzZWQgd2l0aGluIHRoaXMgY29udGV4dC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGByYXNfaGVscGAgZnVuY3Rpb24gYW5kIHRoZSBgRGVjb2RlUmFzTWVzc2FnZWAgZnVuY3Rpb24uIEkgd2FudCB0byBzZWUgZXhhY3RseSBob3cgaXQncyBkZWZpbmVkIGFuZCBob3cgaXQncyB1c2VkIHdpdGhpbiB0aG9zZSB0d28gZnVuY3Rpb25zIHNwZWNpZmljYWxseS4gR2V0dGluZyBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGRlY2xhcmF0aW9uIHdpbGwgaW5mb3JtIHRoZSByZXN0IG9mIG15IGFuYWx5c2lzLiBObyBuZWVkIHRvIGdvIHRvbyBkZWVwIGhlcmUsIGp1c3QgdGhlIGluaXRpYWwgZGVmaW5pdGlvbiBhbmQgbWF5YmUgdGhlIGZpcnN0IGZldyB1c2FnZXMgc2hvdWxkIHN1ZmZpY2UuIEkgd2FudCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHJlZCBmbGFncywgc3VjaCBhcyBhbWJpZ3VvdXMgdHlwaW5nIG9yIHBvdGVudGlhbCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgcmlnaHQgb2ZmIHRoZSBiYXQuIExldCdzIGdldCB0byBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTM3ODksIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjA0OjQ4LjM0MTAzMDM0MloiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjIwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY1MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTY1MDpcXHRcXHRjYXNlIGVSYXNNZXNzYWdlX2xvY2F0aW9uQ29uZmlybTpcXG4xNjUxOlxcdFxcdFxcdHJldHVybiBwcm9jZXNzX2xjZihza2IsIGN0LCBjdGluZm8sIHByb3RvZmYsIGRhdGEsXFxuMTY1MjpcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2cmFzLVxcdTAwM2Vsb2NhdGlvbkNvbmZpcm0pO1xcbjE2NTM6XFx0XFx0Y2FzZSBlUmFzTWVzc2FnZV9pbmZvUmVxdWVzdFJlc3BvbnNlOlxcbjE2NTQ6XFx0XFx0XFx0cmV0dXJuIHByb2Nlc3NfaXJyKHNrYiwgY3QsIGN0aW5mbywgcHJvdG9mZiwgZGF0YSxcXG4xNjU1OlxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZyYXMtXFx1MDAzZWluZm9SZXF1ZXN0UmVzcG9uc2UpO1xcbjE2NTY6XFx0XFx0ZGVmYXVsdDpcXG4xNjU3OlxcdFxcdFxcdHByX2RlYnVnKFxcXCJuZl9jdF9yYXM6IFJBUyBtZXNzYWdlICVkXFxcXG5cXFwiLCByYXMtXFx1MDAzZWNob2ljZSk7XFxuMTY1ODpcXHRcXHRcXHRicmVhaztcXG4xNjU5OlxcdFxcdH1cXG4xNjYwOlxcdFxcbjE2NjE6XFx0XFx0cmV0dXJuIDA7XFxuMTY2MjpcXHR9XFxuMTY2MzpcXHRcXG4xNjY0OlxcdHN0YXRpYyBpbnQgcmFzX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXFxuMTY2NTpcXHRcXHRcXHQgICAgc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbylcXG4xNjY2OlxcdHtcXG4xNjY3OlxcdFxcdHN0YXRpYyBSYXNNZXNzYWdlIHJhcztcXG4xNjY4OlxcdFxcdHVuc2lnbmVkIGNoYXIgKmRhdGE7XFxuMTY2OTpcXHRcXHRpbnQgZGF0YWxlbiA9IDA7XFxuMTY3MDpcXHRcXHRpbnQgcmV0O1xcbjE2NzE6XFx0XFxuMTY3MjpcXHRcXHRwcl9kZWJ1ZyhcXFwibmZfY3RfcmFzOiBza2JsZW4gPSAldVxcXFxuXFxcIiwgc2tiLVxcdTAwM2VsZW4pO1xcbjE2NzM6XFx0XFxuMTY3NDpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5mX2gzMjNfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjA0OjQ4LjM0MTE1NDM0MloiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTI0Nzk4NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRlY29kaW5nIHRoZSBILjMyMyBBU04uMSBNZXNzYWdlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYERlY29kZVJhc01lc3NhZ2VgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGhhbmRsZXMgSC4zMjMgc2lnbmFsaW5nLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCB0aGUgdHJhbnNsYXRpb24gb2YgdGhvc2UgQVNOLjEtZW5jb2RlZCBSQVMgbWVzc2FnZXMgaW50byBzb21ldGhpbmcgdGhlIGNvbm50cmFjayBtb2R1bGUgY2FuIGFjdHVhbGx5ICp1c2UqLiBJIGltYWdpbmUgaXQncyBwdWxsaW5nIGFwYXJ0IHRoZSBiaXRzdHJlYW0sIGludGVycHJldGluZyB0aGUgdGFncywgbGVuZ3RocywgYW5kIHZhbHVlcywgYWxsIGJhc2VkIG9uIHRoZSBILjIyNS4wIGFuZCBILjI0NSBzcGVjaWZpY2F0aW9ucy4gSSdtIGd1ZXNzaW5nIGl0IGhhbmRsZXMgdGhlIHZhcmlvdXMgbWVzc2FnZSB0eXBlcyDigJMgUmVnaXN0cmF0aW9uLCBBZG1pc3Npb24sIEJhbmR3aWR0aCwgYW5kIHRoZSByZXN0LiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcsIHRvby4gSSdtIGN1cmlvdXMgaG93IGl0IGRlYWxzIHdpdGggbWFsZm9ybWVkIG9yIGluY29tcGxldGUgcGFja2V0czsgZG9lcyBpdCBkcm9wIHRoZW0sIGxvZyB0aGVtLCBvciB0cnkgdG8gcmVjb3Zlcj8gSSdsbCBiZSBsb29raW5nIGZvciBtZW1vcnkgYWxsb2NhdGlvbiwgc3RydWN0dXJlIHBvcHVsYXRpb24sIGFuZCBhbnkgb3B0aW1pemF0aW9ucyB0aGV5J3ZlIGltcGxlbWVudGVkLCBhcyBlZmZpY2llbmN5IGlzIGtleSBpbiBhIG5ldHdvcmtpbmcgZW52aXJvbm1lbnQuIFRoaXMgaXMgZ29pbmcgdG8gYmUgYSBnb29kIG9uZSwgdGltZSB0byBnZXQgdG8gaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDA4LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowNDo1MC40NjU5NTYzNDFaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODIwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODIwOlxcdFxcbiA4MjE6XFx0aW50IERlY29kZVJhc01lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFJhc01lc3NhZ2UgKnJhcylcXG4gODIyOlxcdHtcXG4gODIzOlxcdFxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCByYXNfbWVzc2FnZSA9IHtcXG4gODI0OlxcdFxcdFxcdEZOQU1FKFxcXCJSYXNNZXNzYWdlXFxcIikgQ0hPSUNFLCA1LCAyNCwgMzIsIERFQ09ERSB8IEVYVCxcXG4gODI1OlxcdFxcdFxcdDAsIF9SYXNNZXNzYWdlXFxuIDgyNjpcXHRcXHR9O1xcbiA4Mjc6XFx0XFx0c3RydWN0IGJpdHN0ciBicztcXG4gODI4OlxcdFxcbiA4Mjk6XFx0XFx0YnMuYnVmID0gYnMuYmVnID0gYnMuY3VyID0gYnVmO1xcbiA4MzA6XFx0XFx0YnMuZW5kID0gYnVmICsgc3o7XFxuIDgzMTpcXHRcXHRicy5iaXQgPSAwO1xcbiA4MzI6XFx0XFxuIDgzMzpcXHRcXHRyZXR1cm4gZGVjb2RlX2Nob2ljZShcXHUwMDI2YnMsIFxcdTAwMjZyYXNfbWVzc2FnZSwgKGNoYXIgKikgcmFzLCAwKTtcXG4gODM0OlxcdH1cXG4gODM1OlxcdFxcbiA4MzY6XFx0c3RhdGljIGludCBEZWNvZGVIMzIzX1VzZXJJbmZvcm1hdGlvbih1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGNoYXIgKmJlZyxcXG4gODM3OlxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVfdCBzeiwgSDMyM19Vc2VySW5mb3JtYXRpb24gKnV1aWUpXFxuIDgzODpcXHR7XFxuIDgzOTpcXHRcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgaDMyM191c2VyaW5mb3JtYXRpb24gPSB7XFxuIDg0MDpcXHRcXHRcXHRGTkFNRShcXFwiSDMyMy1Vc2VySW5mb3JtYXRpb25cXFwiKSBTRVEsIDEsIDIsIDIsIERFQ09ERSB8IEVYVCxcXG4gODQxOlxcdFxcdFxcdDAsIF9IMzIzX1VzZXJJbmZvcm1hdGlvblxcbiA4NDI6XFx0XFx0fTtcXG4gODQzOlxcdFxcdHN0cnVjdCBiaXRzdHIgYnM7XFxuIDg0NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDQ6NTAuNDY2MDUzNjUxWiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMTkzOTYwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqRGVjb2RpbmcgU3RydWN0dXJlczogRGVlcCBEaXZlIFRpbWUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGN1cmlvdXMgYWJvdXQgdGhlIGJlaGF2aW9yIG9mIGBkZWNvZGVfc2VxYCB3aGVuIGl0J3MgZGVhbGluZyB3aXRoIGEgc3RydWN0LiBUaGUgY29yZSBxdWVzdGlvbiBJIGhhdmUgaXM6IERvZXMgdGhpcyBmdW5jdGlvbiBleGhpYml0IGEgY2VydGFpbiBsZXZlbCBvZiBoeWdpZW5lPyBEb2VzIGl0IGdvIHRocm91Z2ggdGhlIGVmZm9ydCBvZiBpbml0aWFsaXppbmcgdGhlIHN0cnVjdCdzIG1lbWJlcnMsIHNwZWNpZmljYWxseSBieSB1c2luZyBzb21ldGhpbmcgbGlrZSBgbWVtc2V0YCB0byB6ZXJvIHRoZW0gb3V0LCBvciBkb2VzIGl0IGxlYXZlIHRoZW0gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZD8gT3IsIGRvZXMgaXQgaGF2ZSBhIHdheSB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vICpyYXMqIChlLmcuLCByZWR1bmRhbnQgYWRkcmVzcyBzcGFjZSkgaGFuZ2luZyBhcm91bmQ/IFRoYXQgaW5pdGlhbGl6YXRpb24gYmVoYXZpb3IgY2FuIGJlIGNyaXRpY2FsIGZvciBzYWZldHkgYW5kIHByZWRpY3RhYmlsaXR5LCBzbyBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzIGhlcmUuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gdG8gdmVyaWZ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE0OSwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDQ6NTIuNjg1NDUyNjA3WiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUxMDpcXHRcXG4gNTExOlxcdHN0YXRpYyBpbnQgZGVjb2RlX3NlcShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuIDUxMjpcXHQgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxcbiA1MTM6XFx0e1xcbiA1MTQ6XFx0XFx0dW5zaWduZWQgaW50IGV4dCwgYm1wLCBpLCBvcHQsIGxlbiA9IDAsIGJtcDIsIGJtcDJfbGVuO1xcbiA1MTU6XFx0XFx0aW50IGVycjtcXG4gNTE2OlxcdFxcdGNvbnN0IHN0cnVjdCBmaWVsZF90ICpzb247XFxuIDUxNzpcXHRcXHR1bnNpZ25lZCBjaGFyICpiZWcgPSBOVUxMO1xcbiA1MTg6XFx0XFxuIDUxOTpcXHRcXHRQUklOVChcXFwiJSpzJXNcXFxcblxcXCIsIGxldmVsICogVEFCX1NJWkUsIFxcXCIgXFxcIiwgZi1cXHUwMDNlbmFtZSk7XFxuIDUyMDpcXHRcXG4gNTIxOlxcdFxcdC8qIERlY29kZT8gKi9cXG4gNTIyOlxcdFxcdGJhc2UgPSAoYmFzZSBcXHUwMDI2XFx1MDAyNiAoZi1cXHUwMDNlYXR0ciBcXHUwMDI2IERFQ09ERSkpID8gYmFzZSArIGYtXFx1MDAzZW9mZnNldCA6IE5VTEw7XFxuIDUyMzpcXHRcXG4gNTI0OlxcdFxcdC8qIEV4dGVuc2libGU/ICovXFxuIDUyNTpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMSkpXFxuIDUyNjpcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gNTI3OlxcdFxcdGV4dCA9IChmLVxcdTAwM2VhdHRyIFxcdTAwMjYgRVhUKSA/IGdldF9iaXQoYnMpIDogMDtcXG4gNTI4OlxcdFxcbiA1Mjk6XFx0XFx0LyogR2V0IGZpZWxkcyBiaXRtYXAgKi9cXG4gNTMwOlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCBmLVxcdTAwM2VzeikpXFxuIDUzMTpcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gNTMyOlxcdFxcdGlmIChmLVxcdTAwM2VzeiBcXHUwMDNlIDMyKVxcbiA1MzM6XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfUkFOR0U7XFxuIDUzNDpcXHRcXHRibXAgPSBnZXRfYml0bWFwKGJzLCBmLVxcdTAwM2Vzeik7XFxuIDUzNTpcXHRcXHRpZiAoYmFzZSlcXG4gNTM2OlxcdFxcdFxcdCoodW5zaWduZWQgaW50ICopYmFzZSA9IGJtcDtcXG4gNTM3OlxcdFxcbiA1Mzg6XFx0XFx0LyogRGVjb2RlIHRoZSByb290IGNvbXBvbmVudHMgKi9cXG4gNTM5OlxcdFxcdGZvciAoaSA9IG9wdCA9IDAsIHNvbiA9IGYtXFx1MDAzZWZpZWxkczsgaSBcXHUwMDNjIGYtXFx1MDAzZWxiOyBpKyssIHNvbisrKSB7XFxuIDU0MDpcXHRcXHRcXHRpZiAoc29uLVxcdTAwM2VhdHRyIFxcdTAwMjYgU1RPUCkge1xcbiA1NDE6XFx0XFx0XFx0XFx0UFJJTlQoXFxcIiUqcyVzXFxcXG5cXFwiLCAobGV2ZWwgKyAxKSAqIFRBQl9TSVpFLCBcXFwiIFxcXCIsXFxuIDU0MjpcXHRcXHRcXHRcXHQgICAgICBzb24tXFx1MDAzZW5hbWUpO1xcbiA1NDM6XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfU1RPUDtcXG4gNTQ0OlxcdFxcdFxcdH1cXG4gNTQ1OlxcdFxcbiA1NDY6XFx0XFx0XFx0aWYgKHNvbi1cXHUwMDNlYXR0ciBcXHUwMDI2IE9QVCkge1xcdC8qIE9wdGlvbmFsIGNvbXBvbmVudCAqL1xcbiA1NDc6XFx0XFx0XFx0XFx0aWYgKCEoKDB4ODAwMDAwMDBVIFxcdTAwM2VcXHUwMDNlIChvcHQrKykpIFxcdTAwMjYgYm1wKSlcXHQvKiBOb3QgZXhpc3QgKi9cXG4gNTQ4OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA1NDk6XFx0XFx0XFx0fVxcbiA1NTA6XFx0XFxuIDU1MTpcXHRcXHRcXHQvKiBEZWNvZGUgKi9cXG4gNTUyOlxcdFxcdFxcdGlmIChzb24tXFx1MDAzZWF0dHIgXFx1MDAyNiBPUEVOKSB7XFx0LyogT3BlbiBmaWVsZCAqL1xcbiA1NTM6XFx0XFx0XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxcbiA1NTQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDU1NTpcXHRcXHRcXHRcXHRsZW4gPSBnZXRfbGVuKGJzKTtcXG4gNTU2OlxcdFxcdFxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCBsZW4sIDApKVxcbiA1NTc6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDU1ODpcXHRcXHRcXHRcXHRpZiAoIWJhc2UgfHwgIShzb24tXFx1MDAzZWF0dHIgXFx1MDAyNiBERUNPREUpKSB7XFxuIDU1OTpcXHRcXHRcXHRcXHRcXHRQUklOVChcXFwiJSpzJXNcXFxcblxcXCIsIChsZXZlbCArIDEpICogVEFCX1NJWkUsXFxuIDU2MDpcXHRcXHRcXHRcXHRcXHQgICAgICBcXFwiIFxcXCIsIHNvbi1cXHUwMDNlbmFtZSk7XFxuIDU2MTpcXHRcXHRcXHRcXHRcXHRicy1cXHUwMDNlY3VyICs9IGxlbjtcXG4gNTYyOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA1NjM6XFx0XFx0XFx0XFx0fVxcbiA1NjQ6XFx0XFx0XFx0XFx0YmVnID0gYnMtXFx1MDAzZWN1cjtcXG4gNTY1OlxcdFxcbiA1NjY6XFx0XFx0XFx0XFx0LyogRGVjb2RlICovXFxuIDU2NzpcXHRcXHRcXHRcXHRpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXFx1MDAzZXR5cGVdKSAoYnMsIHNvbiwgYmFzZSxcXG4gNTY4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbGV2ZWwgKyAxKSkgXFx1MDAzY1xcbiA1Njk6XFx0XFx0XFx0XFx0ICAgIEgzMjNfRVJST1JfTk9ORSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDQ6NTIuNjg1NTQ1ODM3WiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc2NDQ5ODU5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIGBkZWNvZGVfaW50YCBDb3JyZWN0aW9uIGluIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGRlY29kZV9pbnRgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgbW9kdWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoYW5nZSBjb21wbGV0ZWx5LiBGaXJzdCwgSSdtIGdvaW5nIHRvIHNjYW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUgdG8gc2VlIGlmIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBlbHNld2hlcmUgYW5kIGlmIHRoaXMgZml4IGhhcyBhbnkgYnJvYWRlciBpbXBsaWNhdGlvbnMuXG5cbk5vdywgZm9jdXNpbmcgb24gYGRlY29kZV9pbnRgIGl0c2VsZiwgdGhlIGNvcmUgb2YgdGhlIGlzc3VlIGxpZXMgd2l0aGluIHRoZSBgY2FzZSBDT05TOmAgYmxvY2suIEkgc2VlIHRoYXQgYGdldF91aW50KGJzLCBsZW4pYCByZWFkcyBgbGVuYCBieXRlcyBmcm9tIHRoZSBiaXRzdHJlYW0gYGJzYCBhbmQgKmFsc28qIGFkdmFuY2VzIHRoZSBgYnMtXHUwMDNlY3VyYCBwb2ludGVyLiBUaGUgb3JpZ2luYWwgY29kZSB1bmNvbmRpdGlvbmFsbHkgYWR2YW5jZWQgYGJzLVx1MDAzZWN1cmAgYWdhaW4gYnkgYGxlbmAgYnl0ZXMgYWZ0ZXIgdGhlIGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQgdXNpbmcgYGdldF91aW50KClgLiBUaGlzIG1lYW50LCB3aGVuIHRoZSBjb25kaXRpb24gYChiYXNlIFx1MDAyNlx1MDAyNiAoZi1cdTAwM2VhdHRyIFx1MDAyNiBERUNPREUpKWAgd2FzIHRydWUsIHRoZSBwb2ludGVyIGBicy1cdTAwM2VjdXJgIGdvdCBpbmNyZW1lbnRlZCB0d2ljZSBieSBgbGVuYCwgZWZmZWN0aXZlbHkgc2tpcHBpbmcgb3ZlciBkYXRhLlxuXG5UaGUgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhlIHVuY29uZGl0aW9uYWwgYGJzLVx1MDAzZWN1ciArPSBsZW47YCBpcyBub3cgbW92ZWQgaW50byB0aGUgYGVsc2VgIGJyYW5jaC4gTm93LCBgYnMtXHUwMDNlY3VyYCBpcyBhZHZhbmNlZCBieSB0aGUgY29ycmVjdCBhbW91bnQsICpvbmx5KiBvbmNlLCBlaXRoZXIgYnkgYGdldF91aW50YCB3aXRoaW4gdGhlIGlmIGJsb2NrIG9yIGJ5IGluY3JlbWVudGluZyB3aXRoaW4gdGhlIGVsc2UgYmxvY2suXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgdGhpcyBjb3JyZWN0aW9uIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3M/IEkgbmVlZCB0byBhbmFseXplIHRoaXMgY2FyZWZ1bGx5LlxuXG5JJ2xsIGdvIHRocm91Z2ggdGhlIHN0YW5kYXJkIEtNU0FOL0tBU0FOIGNyaXRlcmlhOlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm8sIHRoaXMgaXMgY29ubnRyYWNrLCBwYXJzaW5nIHRoZSBuZXR3b3JrIHBhY2tldCBwYXlsb2FkICp3aXRoaW4qIHRoZSBrZXJuZWwuIFRoZXJlIGFyZSBubyBkaXJlY3QgY29waWVzIHRvIHVzZXJzcGFjZS5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBOby4gVGhlIHZhbHVlIGB2YCBpcyBkZXJpdmVkIGZyb20gYGdldF91aW50KClgIGFuZCBgZi1cdTAwM2VsYmAsIGBsZW5gIGZyb20gYGdldF9iaXRzKCkgKyAxYCwgYW5kIGBic2AgaXMgYSB2YWxpZCBiaXRzdHJlYW0gb3ZlciB0aGUgcmVjZWl2ZWQgcGFja2V0IGRhdGEuIE5vIGRlcGVuZGVuY2llcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS5cbjMuICAqKkRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gd2l0aCBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIG9yIGluaXRpYWxpemF0aW9uIGNoYW5nZXMgaGVyZS5cbjQuICAqKkJvdW5kcyBjaGVja3Mgb3IgbG9naWMgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBidWZmZXIgYnl0ZXM/KiogTm8uIFRoZSBgc2tiYCBkYXRhIGlzIHJlY2VpdmVkIHBhY2tldCBkYXRhLCBhbHJlYWR5IHBvcHVsYXRlZC4gVGhlIGJ1ZyB3YXMgYSBwb2ludGVyIG9mZnNldCBpc3N1ZSB3aXRoaW4gdGhlIHBhcnNpbmcsIG5vdCBhbiB1bmluaXRpYWxpemVkIHJlYWQuIFN0YW5kYXJkIG1lbW9yeSBzYWZldHkgZGV0ZWN0b3JzIChLQVNBTikgYW5kIHRoZSBwYXJzaW5nIGxvZ2ljIGl0c2VsZiBoYW5kbGUgYm91bmRzIGFuZCBvdXQtb2YtYm91bmRzIGlzc3Vlcy5cblxuVGhlcmVmb3JlLCB0aGlzIGlzIGEgcHVyZSBwYXJzZXIgc3RyZWFtIHBvc2l0aW9uIGJ1ZyBmaXggd2l0aGluIGBuZl9jb25udHJhY2tfaDMyM19hc24xYC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBjb3JyZWN0aW9uLiBTdGFuZGFyZCBLQVNBTiBhbmQgZXhpc3RpbmcgdGVzdCBzdWl0ZXMgYXJlIHN1ZmZpY2llbnQgdG8gdmFsaWRhdGUgdGhpcy5cblxuTXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBzYWZldHkgY29uY2VybnMgYW5kIGlzIHB1cmVseSBhIHBhcnNpbmcgY29ycmVjdG5lc3MgZml4LiBJIHdpbGwgc2V0IHRoZSByZXN1bHRzIHRvIGluZGljYXRlIHRoYXQgS01TQU4gaXMgbm90IG5lZWRlZCBmb3IgdGhpcyBjaGFuZ2UsIHdpdGggdGhlIHJlYXNvbmluZyBJIGhhdmUgb3V0bGluZWQgYWJvdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Mzk5LCJPdXRwdXRUb2tlbnMiOjI0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowNTowMC4zMzA1MzQ3MDlaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG9pbnRlciBhZHZhbmNlbWVudCBidWcgaW4gYGRlY29kZV9pbnQoKWAgd2l0aGluIHRoZSBOZXRmaWx0ZXIgSC4zMjMgQVNOLjEgY29ubnRyYWNrIGhlbHBlciAoYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCkuIEluIGBjYXNlIENPTlM6YCwgYGdldF91aW50KGJzLCBsZW4pYCBhZHZhbmNlcyBgYnMtXFx1MDAzZWN1cmAgaW50ZXJuYWxseSBieSBgbGVuYCBieXRlczsgcHJldmlvdXNseSwgYGJzLVxcdTAwM2VjdXIgKz0gbGVuYCB3YXMgYWxzbyBleGVjdXRlZCB1bmNvbmRpdGlvbmFsbHkgYWZ0ZXJ3YXJkcywgYWR2YW5jaW5nIHRoZSBiaXRzdHJlYW0gY3Vyc29yIHR3aWNlIHdoZW4gZGVjb2RpbmcgaW50ZWdlcnMuIFRoZSBwYXRjaCBtb3ZlcyBgYnMtXFx1MDAzZWN1ciArPSBsZW5gIGludG8gdGhlIGBlbHNlYCBicmFuY2guXFxuXFxuVGhpcyBjaGFuZ2Ugc3RyaWN0bHkgYWRkcmVzc2VzIHN0cmVhbSBwYXJzaW5nIHBvaW50ZXIgbWFuaXB1bGF0aW9uIG9uIGluY29taW5nIG5ldHdvcmsgcGFja2V0IGJ1ZmZlcnMgKGBza2JgIGRhdGEpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gUG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMgcmVsYXRlZCB0byBzdHJlYW0gYm91bmRzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIGVycm9yIGJvdW5kYXJ5IGNoZWNrcyAoYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG9pbnRlciBhZHZhbmNlbWVudCBidWcgaW4gYGRlY29kZV9pbnQoKWAgd2l0aGluIHRoZSBOZXRmaWx0ZXIgSC4zMjMgQVNOLjEgY29ubnRyYWNrIGhlbHBlciAoYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCkuIEluIGBjYXNlIENPTlM6YCwgYGdldF91aW50KGJzLCBsZW4pYCBhZHZhbmNlcyBgYnMtXFx1MDAzZWN1cmAgaW50ZXJuYWxseSBieSBgbGVuYCBieXRlczsgcHJldmlvdXNseSwgYGJzLVxcdTAwM2VjdXIgKz0gbGVuYCB3YXMgYWxzbyBleGVjdXRlZCB1bmNvbmRpdGlvbmFsbHkgYWZ0ZXJ3YXJkcywgYWR2YW5jaW5nIHRoZSBiaXRzdHJlYW0gY3Vyc29yIHR3aWNlIHdoZW4gZGVjb2RpbmcgaW50ZWdlcnMuIFRoZSBwYXRjaCBtb3ZlcyBgYnMtXFx1MDAzZWN1ciArPSBsZW5gIGludG8gdGhlIGBlbHNlYCBicmFuY2guXFxuXFxuVGhpcyBjaGFuZ2Ugc3RyaWN0bHkgYWRkcmVzc2VzIHN0cmVhbSBwYXJzaW5nIHBvaW50ZXIgbWFuaXB1bGF0aW9uIG9uIGluY29taW5nIG5ldHdvcmsgcGFja2V0IGJ1ZmZlcnMgKGBza2JgIGRhdGEpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gUG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMgcmVsYXRlZCB0byBzdHJlYW0gYm91bmRzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIGVycm9yIGJvdW5kYXJ5IGNoZWNrcyAoYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz8f66[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 01:37:05 +0000 UTC FinishedAt: 2026-08-31 02:05:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK_H323", "NF_CONNTRACK", "NETFILTER", "NETFILTER_ADVANCED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK_H323", "NF_CONNTRACK", "NETFILTER", "NETFILTER_ADVANCED" ], "series_id": "30af3c0d-e2c6-4bdf-a3e8-01580a115d7f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "DecodeRasMessage", "DecodeQ931", "DecodeMultimediaSystemControlMessage", "get_h225_addr", "ras_help", "q931_help", "h245_help" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDS19IMzIzJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7RGVjb2RlUmFzTWVzc2FnZSYjMzQ7LAogICAgJiMzNDtEZWNvZGVROTMxJiMzNDssCiAgICAmIzM0O0RlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSYjMzQ7LAogICAgJiMzNDtnZXRfaDIyNV9hZGRyJiMzNDssCiAgICAmIzM0O3Jhc19oZWxwJiMzNDssCiAgICAmIzM0O3E5MzFfaGVscCYjMzQ7LAogICAgJiMzNDtoMjQ1X2hlbHAmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvaW50ZXIgYWR2YW5jZW1lbnQgYnVnIGluIGBkZWNvZGVfaW50KClgIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIEguMzIzIEFTTi4xIGNvbm50cmFjayBoZWxwZXIgKGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2ApLiBJbiBgY2FzZSBDT05TOmAsIGBnZXRfdWludChicywgbGVuKWAgYWR2YW5jZXMgYGJzLVx1MDAzZWN1cmAgaW50ZXJuYWxseSBieSBgbGVuYCBieXRlczsgcHJldmlvdXNseSwgYGJzLVx1MDAzZWN1ciAmIzQzOz0gbGVuYCB3YXMgYWxzbyBleGVjdXRlZCB1bmNvbmRpdGlvbmFsbHkgYWZ0ZXJ3YXJkcywgYWR2YW5jaW5nIHRoZSBiaXRzdHJlYW0gY3Vyc29yIHR3aWNlIHdoZW4gZGVjb2RpbmcgaW50ZWdlcnMuIFRoZSBwYXRjaCBtb3ZlcyBgYnMtXHUwMDNlY3VyICYjNDM7PSBsZW5gIGludG8gdGhlIGBlbHNlYCBicmFuY2guXG5cblRoaXMgY2hhbmdlIHN0cmljdGx5IGFkZHJlc3NlcyBzdHJlYW0gcGFyc2luZyBwb2ludGVyIG1hbmlwdWxhdGlvbiBvbiBpbmNvbWluZyBuZXR3b3JrIHBhY2tldCBidWZmZXJzIChgc2tiYCBkYXRhKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFBvdGVudGlhbCBtZW1vcnkgaXNzdWVzIHJlbGF0ZWQgdG8gc3RyZWFtIGJvdW5kcyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBlcnJvciBib3VuZGFyeSBjaGVja3MgKGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEguMzIzIGNvbm50cmFjayBoZWxwZXImIzM5O3MgQVNOLjEgaW50ZWdlciBkZWNvZGVyIChuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYykgd2hlcmUgZ2V0X3VpbnQoKSBhZHZhbmNlZCB0aGUgYml0c3RyZWFtIHBvaW50ZXIgYW5kIGRlY29kZV9pbnQoKSBhZHZhbmNlZCBpdCBhZ2Fpbi4gVGhpcyBhZmZlY3RzIHJlYWNoYWJpbGl0eSBhbmQgcGFyc2luZyBsb2dpYyBmb3IgSC4zMjMvUS45MzEvUkFTIG5ldHdvcmsgdHJhZmZpYyBpbiB0aGUgTmV0ZmlsdGVyIHN1YnN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRlNzhjN2EwYjdkYmVkNTUyMmYwMGYyNGUyYzE3ZjUyZTFjMDIzOTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwMjowMjo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXG5pbmRleCA2ODMwYzlkYTM1MDdjLi5hNTEyNzVjYzRkMGY2IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXG5AQCAtMzM2LDggJiM0MzszMzYsOSBAQCBzdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIFx0XHRcdHVuc2lnbmVkIGludCB2ID0gZ2V0X3VpbnQoYnMsIGxlbikgJiM0MzsgZi1cdTAwM2VsYjtcbiBcdFx0XHRQUklOVChcJiMzNDsgPSAldVwmIzM0Oywgdik7XG4gXHRcdFx0KigodW5zaWduZWQgaW50ICopKGJhc2UgJiM0MzsgZi1cdTAwM2VvZmZzZXQpKSA9IHY7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRicy1cdTAwM2VjdXIgJiM0Mzs9IGxlbjtcbiBcdFx0fVxuLVx0XHRicy1cdTAwM2VjdXIgJiM0Mzs9IGxlbjtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFVOQ086XG4gXHRcdEJZVEVfQUxJR04oYnMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDS19IMzIzJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7RGVjb2RlUmFzTWVzc2FnZSYjMzQ7LAogICAgJiMzNDtEZWNvZGVROTMxJiMzNDssCiAgICAmIzM0O0RlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSYjMzQ7LAogICAgJiMzNDtnZXRfaDIyNV9hZGRyJiMzNDssCiAgICAmIzM0O3Jhc19oZWxwJiMzNDssCiAgICAmIzM0O3E5MzFfaGVscCYjMzQ7LAogICAgJiMzNDtoMjQ1X2hlbHAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEguMzIzIGNvbm50cmFjayBoZWxwZXImIzM5O3MgQVNOLjEgaW50ZWdlciBkZWNvZGVyIChuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYykgd2hlcmUgZ2V0X3VpbnQoKSBhZHZhbmNlZCB0aGUgYml0c3RyZWFtIHBvaW50ZXIgYW5kIGRlY29kZV9pbnQoKSBhZHZhbmNlZCBpdCBhZ2Fpbi4gVGhpcyBhZmZlY3RzIHJlYWNoYWJpbGl0eSBhbmQgcGFyc2luZyBsb2dpYyBmb3IgSC4zMjMvUS45MzEvUkFTIG5ldHdvcmsgdHJhZmZpYyBpbiB0aGUgTmV0ZmlsdGVyIHN1YnN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRlNzhjN2EwYjdkYmVkNTUyMmYwMGYyNGUyYzE3ZjUyZTFjMDIzOTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAwMjowMjo1MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMKaW5kZXggNjgzMGM5ZGEzNTA3Yy4uYTUxMjc1Y2M0ZDBmNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMKQEAgLTMzNiw4ICYjNDM7MzM2LDkgQEAgc3RhdGljIGludCBkZWNvZGVfaW50KHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwKIAkJCXVuc2lnbmVkIGludCB2ID0gZ2V0X3VpbnQoYnMsIGxlbikgJiM0MzsgZi0mZ3Q7bGI7CiAJCQlQUklOVCgmIzM0OyA9ICV1JiMzNDssIHYpOwogCQkJKigodW5zaWduZWQgaW50ICopKGJhc2UgJiM0MzsgZi0mZ3Q7b2Zmc2V0KSkgPSB2OwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlicy0mZ3Q7Y3VyICYjNDM7PSBsZW47CiAJCX0KLQkJYnMtJmd0O2N1ciAmIzQzOz0gbGVuOwogCQlicmVhazsKIAljYXNlIFVOQ086CiAJCUJZVEVfQUxJR04oYnMpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMyCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgcGxheWluZyB0aGUgcm9sZSBvZiB0aGUgZXhwZXJ0OgoKKipEaXZpbmcgaW50byB0aGUgSC4zMjMgQVNOLjEgRGVjb2RlciBQYXRjaCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoaXMgcGF0Y2guIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUuIFRoZSBmaWxlIG1lbnRpb25lZCwgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCwgaXMgd2hlcmUgdGhlIEguMzIzIEFTTi4xIGRlY29kaW5nIGxvZ2ljIGxpdmVzIGZvciBuZXRmaWx0ZXImIzM5O3MgY29ubmVjdGlvbiB0cmFja2luZy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGBkZWNvZGVfaW50YCBmdW5jdGlvbiB3aXRoaW4gdGhhdCBmaWxlLiBUaGF0IGZ1bmN0aW9uIGlzIGNsZWFybHkgcmVzcG9uc2libGUgZm9yIGRlY29kaW5nIGludGVnZXIgdmFsdWVzIGVuY29kZWQgdXNpbmcgQVNOLjEuCgpMZXQmIzM5O3MgcHVsbCB1cCB0aGUgZmlsZSBjb250ZW50IHVzaW5nIGByZWFkLWZpbGVgIGluIHRoZSBhcHByb3ByaWF0ZSBzb3VyY2UgY29kZSBmb2xkZXIuIEhhdmluZyB0aGUgY29udGV4dCBmcm9tIHRoZSBjb21wbGV0ZSBzb3VyY2UgZmlsZSB3aWxsIGJlIHRoZSBtb3N0IHVzZWZ1bCB3YXkgdG8gZXhwbG9yZSB0aGUgc2l0dWF0aW9uIGhlcmUsIGJlY2F1c2UgSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyB0aGlzIGludGVnZXIgZGVjb2RpbmcgaXMgaW1wbGVtZW50ZWQsIHdoYXQgY2hlY2tzIGFyZSBwcmVzZW50LCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBBU04uMSBwYXJzaW5nIHByb2Nlc3MuIEFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IGludGVnZXItcmVsYXRlZCBvbmVzLCB3b3VsZCBiZSBleHBvc2VkIGJ5IHRoZXNlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzEwOlx0fVxuIDMxMTpcdFxuIDMxMjpcdHN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4gMzEzOlx0ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcbiAzMTQ6XHR7XG4gMzE1Olx0XHR1bnNpZ25lZCBpbnQgbGVuO1xuIDMxNjpcdFxuIDMxNzpcdFx0UFJJTlQoXCYjMzQ7JSpzJXNcJiMzNDssIGxldmVsICogVEFCX1NJWkUsIFwmIzM0OyBcJiMzNDssIGYtXHUwMDNlbmFtZSk7XG4gMzE4Olx0XG4gMzE5Olx0XHRzd2l0Y2ggKGYtXHUwMDNlc3opIHtcbiAzMjA6XHRcdGNhc2UgQllURTpcdFx0LyogUmFuZ2UgPT0gMjU2ICovXG4gMzIxOlx0XHRcdEJZVEVfQUxJR04oYnMpO1xuIDMyMjpcdFx0XHRicy1cdTAwM2VjdXImIzQzOyYjNDM7O1xuIDMyMzpcdFx0XHRicmVhaztcbiAzMjQ6XHRcdGNhc2UgV09SRDpcdFx0LyogMjU3IFx1MDAzYz0gUmFuZ2UgXHUwMDNjPSA2NEsgKi9cbiAzMjU6XHRcdFx0QllURV9BTElHTihicyk7XG4gMzI2Olx0XHRcdGJzLVx1MDAzZWN1ciAmIzQzOz0gMjtcbiAzMjc6XHRcdFx0YnJlYWs7XG4gMzI4Olx0XHRjYXNlIENPTlM6XHRcdC8qIDY0SyBcdTAwM2MgUmFuZ2UgXHUwMDNjIDRHICovXG4gMzI5Olx0XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAyKSlcbiAzMzA6XHRcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiAzMzE6XHRcdFx0bGVuID0gZ2V0X2JpdHMoYnMsIDIpICYjNDM7IDE7XG4gMzMyOlx0XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCBsZW4sIDApKVxuIDMzMzpcdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDMzNDpcdFx0XHRCWVRFX0FMSUdOKGJzKTtcbiAzMzU6XHRcdFx0aWYgKGJhc2UgXHUwMDI2XHUwMDI2IChmLVx1MDAzZWF0dHIgXHUwMDI2IERFQ09ERSkpIHtcdC8qIHRpbWVUb0xpdmUgKi9cbiAzMzY6XHRcdFx0XHR1bnNpZ25lZCBpbnQgdiA9IGdldF91aW50KGJzLCBsZW4pICYjNDM7IGYtXHUwMDNlbGI7XG4gMzM3Olx0XHRcdFx0UFJJTlQoXCYjMzQ7ID0gJXVcJiMzNDssIHYpO1xuIDMzODpcdFx0XHRcdCooKHVuc2lnbmVkIGludCAqKShiYXNlICYjNDM7IGYtXHUwMDNlb2Zmc2V0KSkgPSB2O1xuIDMzOTpcdFx0XHR9IGVsc2Uge1xuIDM0MDpcdFx0XHRcdGJzLVx1MDAzZWN1ciAmIzQzOz0gbGVuO1xuIDM0MTpcdFx0XHR9XG4gMzQyOlx0XHRcdGJyZWFrO1xuIDM0MzpcdFx0Y2FzZSBVTkNPOlxuIDM0NDpcdFx0XHRCWVRFX0FMSUdOKGJzKTtcbiAzNDU6XHRcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxuIDM0NjpcdFx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDM0NzpcdFx0XHRsZW4gPSBnZXRfbGVuKGJzKTtcbiAzNDg6XHRcdFx0YnMtXHUwMDNlY3VyICYjNDM7PSBsZW47XG4gMzQ5Olx0XHRcdGJyZWFrO1xuIDM1MDpcdFx0ZGVmYXVsdDpcdFx0LyogMiBcdTAwM2M9IFJhbmdlIFx1MDAzYz0gMjU1ICovXG4gMzUxOlx0XHRcdElOQ19CSVRTKGJzLCBmLVx1MDAzZXN6KTtcbiAzNTI6XHRcdFx0YnJlYWs7XG4gMzUzOlx0XHR9XG4gMzU0Olx0XG4gMzU1Olx0XHRQUklOVChcJiMzNDtcXG5cJiMzNDspO1xuIDM1NjpcdFxuIDM1NzpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxuIDM1ODpcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiAzNTk6XHRcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI3MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0OgoKKipEaXZpbmcgaW50byBgZ2V0X3VpbnRgIGluIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgYGdldF91aW50YCBmdW5jdGlvbiBpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgIGlzIGFjdHVhbGx5IGRvaW5nLiBJJiMzOTttIGFzc3VtaW5nLCBnaXZlbiB0aGUgZmlsZW5hbWUsIHRoYXQgdGhpcyBjb2RlIGlzIGNydWNpYWwgZm9yIHBhcnNpbmcgSC4zMjMgQVNOLjEgZGF0YSB3aXRoaW4gdGhlIE5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIGZyYW1ld29yay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0JiMzOTtzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgZXh0cmFjdGluZyB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcyBmcm9tIGEgYml0c3RyZWFtIG9yIGJ5dGUgYXJyYXkgZm9ybWF0dGVkIGFjY29yZGluZyB0byBBU04uMSBlbmNvZGluZyBydWxlcy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBtZWNoYW5pc20gaXQgdXNlczogSXMgaXQgaGFuZGxpbmcgQkVSIChCYXNpYyBFbmNvZGluZyBSdWxlcyksIERFUiAoRGlzdGluZ3Vpc2hlZCBFbmNvZGluZyBSdWxlcyksIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaGF0IHNpemUgaW50ZWdlciBkb2VzIGl0IGV4cGVjdCDigJMgOC1iaXQsIDE2LWJpdCwgMzItYml0LCBvciBwb3RlbnRpYWxseSB2YXJpYWJsZS1sZW5ndGg/IElzIGl0IGhhbmRsaW5nIGFueSBsZWFkaW5nIGxlbmd0aCBpbmRpY2F0b3JzPyBXaGF0IGFib3V0IGFueSBwb3RlbnRpYWwgcGFkZGluZyBvciB0YWcgYnl0ZXM/IEtub3dpbmcgdGhlc2UgZGV0YWlscyB3aWxsIGJlIGNyaXRpY2FsIGluIHVuZGVyc3RhbmRpbmcgaG93IGl0IGhhbmRsZXMgdGhlIHBhcnNpbmcgb2YgSC4zMjMgc2lnbmFsaW5nLiBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycywgb3ZlcmZsb3cgY29uZGl0aW9ucywgb3IgaW52YWxpZCBlbmNvZGluZ3MuIFRoaXMgd2lsbCB0ZWxsIG1lIGhvdyByb2J1c3QgaXQgaXMuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIGlucHV0cyBhbmQgb3V0cHV0cyB3aXRoaW4gdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGltcGxlbWVudGF0aW9uLiBVbHRpbWF0ZWx5LCB0aGlzIHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0cyBpbnRvIGhvdyBILjMyMyBzaWduYWxpbmcgaXMgZGlzc2VjdGVkIGFuZCBpdHMgcmVsZXZhbnQgaW5mb3JtYXRpb24gdXNlZCBpbiBjb25uZWN0aW9uIHRyYWNraW5nIGRlY2lzaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfdWludCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTEwND1zdGF0aWMgdW5zaWduZWQgaW50IGdldF9iaXRtYXAoc3RydWN0IGJpdHN0ciAqYnMsIHVuc2lnbmVkIGludCBiKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEwNTpzdGF0aWMgdW5zaWduZWQgaW50IGdldF91aW50KHN0cnVjdCBiaXRzdHIgKmJzLCBpbnQgYik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMDYtXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MjExPXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdG1hcChzdHJ1Y3QgYml0c3RyICpicywgdW5zaWduZWQgaW50IGIpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjQ5LSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MjUwOnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VpbnQoc3RydWN0IGJpdHN0ciAqYnMsIGludCBiKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjUxLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0zMTI9c3RhdGljIGludCBkZWNvZGVfaW50KHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zMzUtXHRcdGlmIChiYXNlIFx1MDAyNlx1MDAyNiAoZi1cdTAwM2VhdHRyIFx1MDAyNiBERUNPREUpKSB7XHQvKiB0aW1lVG9MaXZlICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozMzY6XHRcdFx0dW5zaWduZWQgaW50IHYgPSBnZXRfdWludChicywgbGVuKSAmIzQzOyBmLVx1MDAzZWxiO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzM3LVx0XHRcdFBSSU5UKFwmIzM0OyA9ICV1XCYjMzQ7LCB2KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jPTY4MD12b2lkIG5mX2Nvbm50cmFja19wcm90b19wZXJuZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy02OTYtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjY5Nzptb2R1bGVfcGFyYW1fY2FsbChoYXNoc2l6ZSwgbmZfY29ubnRyYWNrX3NldF9oYXNoc2l6ZSwgcGFyYW1fZ2V0X3VpbnQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTY5OC1cdFx0ICBcdTAwMjZuZl9jb25udHJhY2tfaHRhYmxlX3NpemUsIDA2MDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNTUKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBgZ2V0X3VpbnRgIGZ1bmN0aW9uIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AuCgoqKkRpdmluZyBpbnRvIGBnZXRfdWludGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHB1bGwgdXAgdGhhdCBgZ2V0X3VpbnRgIGZ1bmN0aW9uIGluIHRoZSBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nIGNvZGUuIFNwZWNpZmljYWxseSwgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYC4gSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHRoZSBBU04uMSBwYXJzaW5nIGNvbnRleHQgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcyB3aXRoaW4uIENvbnNpZGVyaW5nIHRoZSBsb3ctbGV2ZWwgQVNOLjEgZW5jb2RpbmcgcHJpbmNpcGxlcywgdGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJseSB0YXNrZWQgd2l0aCBleHRyYWN0aW5nIGFuIHVuc2lnbmVkIGludGVnZXIgdmFsdWUgZnJvbSBhIGJ1ZmZlciBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIElUVS1UIFguNjkwIChERVIvQkVSKSBvciB3aGF0ZXZlciBzdWJzZXQgdGhleSBhcmUgdXNpbmcuIEkgZXhwZWN0IHRvIHNlZSBpdCBoYW5kbGluZyB2YXJpYWJsZS1sZW5ndGggZW5jb2RpbmdzLCBwb3RlbnRpYWxseSBjaGVja2luZyBmb3IgdGhlIG1pbmltdW0gbnVtYmVyIG9mIG9jdGV0cyByZXF1aXJlZCB0byByZXByZXNlbnQgdGhlIHZhbHVlLCBhbmQgbGlrZWx5IGRlYWxpbmcgd2l0aCBsZWFkaW5nIHplcm8gYnl0ZXMgdGhhdCBtaWdodCBiZSBwcmVzZW50IGluIHRoZSBlbmNvZGVkIHJlcHJlc2VudGF0aW9uIGRlcGVuZGluZyBvbiB3aGljaCAmIzM0O3RhZyYjMzQ7IGNsYXNzIHRoZSBpbnRlZ2VyIGlzIGJlaW5nIGVuY29kZWQgd2l0aC4gVGhpcyBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgaW4gdGVybXMgb2YgaG93IGl0IGV4dHJhY3RzIGEgdmFsdWUgYW5kIHdoZXRoZXIgaXQgbWlnaHQgYmUgdnVsbmVyYWJsZSB0byB0aGluZ3MgbGlrZSBvdmVybG9uZyBlbmNvZGluZ3MuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaG93IGl0IGhhbmRsZXMgY2FzZXMgd2hlcmUgdGhlIGJ1ZmZlciBtaWdodCBiZSB0cnVuY2F0ZWQgb3IgaW52YWxpZCwgYW5kIG1ha2Ugc3VyZSB0aGF0IGl0JiMzOTtzIHJvYnVzdCBpbiB0aGF0IGNvbnRleHQuIEkgd2FudCB0byBzZWUgaWYgdGhleSYjMzk7cmUgdmFsaWRhdGluZyB0aGUgbGVuZ3RoIGZpZWxkIHByb3Blcmx5IGFuZCBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgcG90ZW50aWFsIG92ZXJmbG93cyDigJMgdGhhdCYjMzk7cyBvZnRlbiBhIHNvdXJjZSBvZiB2dWxuZXJhYmlsaXRpZXMgd2hlbiBkZWFsaW5nIHdpdGggdW5zaWduZWQgaW50ZWdlcnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgb2ZmLWJ5LW9uZSBlcnJvcnMgaW4gdGhlaXIgaW5kZXhpbmcgYXMgd2VsbC4gTGV0JiMzOTtzIHNlZSBob3cgd2VsbCBpdCYjMzk7cyBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDU6XHR9XG4gMjQ2Olx0XG4gMjQ3Olx0LypcbiAyNDg6XHQgKiBBc3N1bWUgYnMgaXMgYWxpZ25lZCBhbmQgc2l6ZW9mKHVuc2lnbmVkIGludCkgPT0gNFxuIDI0OTpcdCAqL1xuIDI1MDpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VpbnQoc3RydWN0IGJpdHN0ciAqYnMsIGludCBiKVxuIDI1MTpcdHtcbiAyNTI6XHRcdHVuc2lnbmVkIGludCB2ID0gMDtcbiAyNTM6XHRcbiAyNTQ6XHRcdHN3aXRjaCAoYikge1xuIDI1NTpcdFx0Y2FzZSA0OlxuIDI1NjpcdFx0XHR2IHw9ICpicy1cdTAwM2VjdXImIzQzOyYjNDM7O1xuIDI1NzpcdFx0XHR2IFx1MDAzY1x1MDAzYz0gODtcbiAyNTg6XHRcdFx0ZmFsbHRocm91Z2g7XG4gMjU5Olx0XHRjYXNlIDM6XG4gMjYwOlx0XHRcdHYgfD0gKmJzLVx1MDAzZWN1ciYjNDM7JiM0Mzs7XG4gMjYxOlx0XHRcdHYgXHUwMDNjXHUwMDNjPSA4O1xuIDI2MjpcdFx0XHRmYWxsdGhyb3VnaDtcbiAyNjM6XHRcdGNhc2UgMjpcbiAyNjQ6XHRcdFx0diB8PSAqYnMtXHUwMDNlY3VyJiM0MzsmIzQzOztcbiAyNjU6XHRcdFx0diBcdTAwM2NcdTAwM2M9IDg7XG4gMjY2Olx0XHRcdGZhbGx0aHJvdWdoO1xuIDI2NzpcdFx0Y2FzZSAxOlxuIDI2ODpcdFx0XHR2IHw9ICpicy1cdTAwM2VjdXImIzQzOyYjNDM7O1xuIDI2OTpcdFx0XHRicmVhaztcbiAyNzA6XHRcdH1cbiAyNzE6XHRcdHJldHVybiB2O1xuIDI3MjpcdH1cbiAyNzM6XHRcbiAyNzQ6XHRzdGF0aWMgaW50IGRlY29kZV9udWwoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIDI3NTpcdCAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4gMjc2Olx0e1xuIDI3NzpcdFx0UFJJTlQoXCYjMzQ7JSpzJXNcXG5cJiMzNDssIGxldmVsICogVEFCX1NJWkUsIFwmIzM0OyBcJiMzNDssIGYtXHUwMDNlbmFtZSk7XG4gMjc4Olx0XG4gMjc5Olx0XHRyZXR1cm4gSDMyM19FUlJPUl9OT05FO1xuIDI4MDpcdH1cbiAyODE6XHRcbiAyODI6XHRzdGF0aWMgaW50IGRlY29kZV9ib29sKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbiAyODM6XHQgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcbiAyODQ6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE4NwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDMzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvZGluZyBEaWxlbW1hIGFuZCBDb25udHJhY2sgQ29udW5kcnVtKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoYXQgYGdldF91aW50YCBmdW5jdGlvbuKApiBJIHNlZSBpdCYjMzk7cyBpbmNyZW1lbnRpbmcgYGJzLSZndDtjdXJgIGJ5IGBsZW5gIGJ5dGVzLiBPa2F5LCBzdGFuZGFyZCBiZWhhdmlvciwgbm90aGluZyB1bmV4cGVjdGVkIHRoZXJlLiBCdXQsIGxvb2tpbmcgYmFjayBhdCB0aGUgb3JpZ2luYWwgY29kZS4uLiBpZiBgYmFzZSAmYW1wOyZhbXA7IChmLSZndDthdHRyICZhbXA7IERFQ09ERSlgIGlzIHRydWUsIGBnZXRfdWludGAgYWxyZWFkeSBhZHZhbmNlZCBgYnMtJmd0O2N1cmAhIFRoZW4sIGltbWVkaWF0ZWx5IGFmdGVyLCBgYnMtJmd0O2N1ciAmIzQzOz0gbGVuYCBoYXBwZW5zIGFnYWluISBUaGF0JiMzOTtzIGEgY2xhc3NpYyBkb3VibGUgaW5jcmVtZW50IGJ1ZywgYW5kIGl0JiMzOTtzIHByb2JhYmx5IGdvaW5nIHRvIGNhdXNlIHNvbWUgc2VyaW91cyBpc3N1ZXMgZG93biB0aGUgbGluZS4gSWYgdGhlIGNvbmRpdGlvbmFsIGlzbiYjMzk7dCB0cnVlLCB0aGVuIGBnZXRfdWludGAgaXNuJiMzOTt0IGNhbGxlZCwgc28gb25seSB0aGUgYGJzLSZndDtjdXIgJiM0Mzs9IGxlbmAgc2hvdWxkIGhhcHBlbi4KClNvLCBpZiBJIGNoYW5nZSB0aGUgbG9naWMgdG8gdGhlIHNlY29uZCBjb2RlIGJsb2NrLCB0aGF0IHNob3VsZCBmaXggdGhlIGlzc3VlLiBUaGUgbmV3IGNvZGUgYmxvY2sgb25seSBpbmNyZW1lbnRzIHdoZW4gdGhlIGNvbmRpdGlvbmFsIHN0YXRlbWVudCBpcyBmYWxzZSwgYW5kIG90aGVyd2lzZSByZWxpZXMgb24gYGdldF91aW50YC4KClRoaXMgYWZmZWN0cyBBU04uMSBkZWNvZGluZywgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGEgcmVhbCBidWcgaW4gdGhlIEguMzIzIGNvbm50cmFjayBoZWxwZXIuIFRoaXMgY291bGQgYmUgY2F1c2luZyBhbGwgc29ydHMgb2YgdW5leHBlY3RlZCBiZWhhdmlvci4KCk5vdywgSSBuZWVkIHRvIGdldCBhIGJyb2FkZXIgdmlldy4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byBob3cgYG5mX2Nvbm50cmFja19oMzIzYCB3b3Jrcy4gSG93IGlzIGl0IGVuYWJsZWQ/IFdoYXQgc3ltYm9scyBhcmUgZXhwb3J0ZWQ/IFdoYXQgS2NvbmZpZyBvcHRpb25zIGFyZSByZWxldmFudCBoZXJlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgdGhpcyBmaXguCgpUaW1lIHRvIHN0YXJ0IGdyZXBwaW5nLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGBuZl9jb25udHJhY2tfaDMyM19hc24xYCBhbmQgYWxzbyBsb29rIGZvciBjYWxsZXJzIG9mIGRlY29kZSBmdW5jdGlvbnMgaW4gYG5ldC9uZXRmaWx0ZXIvYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RGVjb2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MTA1PXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VpbnQoc3RydWN0IGJpdHN0ciAqYnMsIGludCBiKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEwNi1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEwNzovKiBEZWNvZGVyIEZ1bmN0aW9ucyAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTA4LXN0YXRpYyBpbnQgZGVjb2RlX251bChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MTE5PXN0YXRpYyBpbnQgZGVjb2RlX2Nob2ljZShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMjAtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMjE6LyogRGVjb2RlciBGdW5jdGlvbnMgVmVjdG9yICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMjItdHlwZWRlZiBpbnQgKCpkZWNvZGVyX3QpKHN0cnVjdCBiaXRzdHIgKiwgY29uc3Qgc3RydWN0IGZpZWxkX3QgKiwgY2hhciAqLCBpbnQpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTIzOnN0YXRpYyBjb25zdCBkZWNvZGVyX3QgRGVjb2RlcnNbXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEyNC1cdGRlY29kZV9udWwsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9NTExPXN0YXRpYyBpbnQgZGVjb2RlX3NlcShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTIwLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTIxOlx0LyogRGVjb2RlPyAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTIyLVx0YmFzZSA9IChiYXNlIFx1MDAyNlx1MDAyNiAoZi1cdTAwM2VhdHRyIFx1MDAyNiBERUNPREUpKSA/IGJhc2UgJiM0MzsgZi1cdTAwM2VvZmZzZXQgOiBOVUxMO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTUzNy1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjUzODpcdC8qIERlY29kZSB0aGUgcm9vdCBjb21wb25lbnRzICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01MzktXHRmb3IgKGkgPSBvcHQgPSAwLCBzb24gPSBmLVx1MDAzZWZpZWxkczsgaSBcdTAwM2MgZi1cdTAwM2VsYjsgaSYjNDM7JiM0MzssIHNvbiYjNDM7JiM0MzspIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01NTAtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1NTE6XHRcdC8qIERlY29kZSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTUyLVx0XHRpZiAoc29uLVx1MDAzZWF0dHIgXHUwMDI2IE9QRU4pIHtcdC8qIE9wZW4gZmllbGQgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01NjUtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1NjY6XHRcdFx0LyogRGVjb2RlICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1Njc6XHRcdFx0aWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVx1MDAzZXR5cGVdKSAoYnMsIHNvbiwgYmFzZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU2OC1cdFx0XHRcdFx0XHRcdCAgbGV2ZWwgJiM0MzsgMSkpIFx1MDAzY1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU3My1cdFx0XHRicy1cdTAwM2ViaXQgPSAwO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTc0Olx0XHR9IGVsc2UgaWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVx1MDAzZXR5cGVdKSAoYnMsIHNvbiwgYmFzZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU3NS1cdFx0XHRcdFx0XHRcdCBsZXZlbCAmIzQzOyAxKSkgXHUwMDNjXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTk3LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTk4Olx0LyogRGVjb2RlIHRoZSBleHRlbnNpb24gY29tcG9uZW50cyAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTk5LVx0Zm9yIChvcHQgPSAwOyBvcHQgXHUwMDNjIGJtcDJfbGVuOyBvcHQmIzQzOyYjNDM7LCBpJiM0MzsmIzQzOywgc29uJiM0MzsmIzQzOykge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTYzMi1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjYzMzpcdFx0aWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVx1MDAzZXR5cGVdKSAoYnMsIHNvbiwgYmFzZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTYzNC1cdFx0XHRcdFx0XHQgIGxldmVsICYjNDM7IDEpKSBcdTAwM2Ncbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz02NDQ9c3RhdGljIGludCBkZWNvZGVfc2Vxb2Yoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY1My1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjY1NDpcdC8qIERlY29kZT8gKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY1NS1cdGJhc2UgPSAoYmFzZSBcdTAwMjZcdTAwMjYgKGYtXHUwMDNlYXR0ciBcdTAwMjYgREVDT0RFKSkgPyBiYXNlICYjNDM7IGYtXHUwMDNlb2Zmc2V0IDogTlVMTDtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY1Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjY1NzpcdC8qIERlY29kZSBpdGVtIGNvdW50ICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02NTgtXHRzd2l0Y2ggKGYtXHUwMDNlc3opIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02OTMtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo2OTQ6XHQvKiBEZWNvZGUgbmVzdGVkIGZpZWxkICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02OTUtXHRzb24gPSBmLVx1MDAzZWZpZWxkcztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MTMtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo3MTQ6XHRcdFx0aWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVx1MDAzZXR5cGVdKSAoYnMsIHNvbixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTcxNS1cdFx0XHRcdFx0XHRcdCAgaSBcdTAwM2Ncbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MjQtXHRcdH0gZWxzZVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzI1Olx0XHRcdGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cdTAwM2V0eXBlXSkgKGJzLCBzb24sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MjYtXHRcdFx0XHRcdFx0XHQgIGkgXHUwMDNjXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9NzQwPXN0YXRpYyBpbnQgZGVjb2RlX2Nob2ljZShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzQ5LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzUwOlx0LyogRGVjb2RlPyAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzUxLVx0YmFzZSA9IChiYXNlIFx1MDAyNlx1MDAyNiAoZi1cdTAwM2VhdHRyIFx1MDAyNiBERUNPREUpKSA/IGJhc2UgJiM0MzsgZi1cdTAwM2VvZmZzZXQgOiBOVUxMO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzUyLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzUzOlx0LyogRGVjb2RlIHRoZSBjaG9pY2UgaW5kZXggbnVtYmVyICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03NTQtXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMSkpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODA3LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODA4Olx0XHRpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXHUwMDNldHlwZV0pIChicywgc29uLCBiYXNlLCBsZXZlbCAmIzQzOyAxKSkgXHUwMDNjXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MDktXHRcdCAgICBIMzIzX0VSUk9SX05PTkUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODEzLVx0XHRicy1cdTAwM2ViaXQgPSAwO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODE0Olx0fSBlbHNlIGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cdTAwM2V0eXBlXSkgKGJzLCBzb24sIGJhc2UsIGxldmVsICYjNDM7IDEpKSBcdTAwM2Ncbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgxNS1cdFx0ICAgSDMyM19FUlJPUl9OT05FKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgyMC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgyMTppbnQgRGVjb2RlUmFzTWVzc2FnZSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeiwgUmFzTWVzc2FnZSAqcmFzKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODIyLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MzUtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo4MzY6c3RhdGljIGludCBEZWNvZGVIMzIzX1VzZXJJbmZvcm1hdGlvbih1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGNoYXIgKmJlZyxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgzNy1cdFx0XHRcdCAgICAgIHNpemVfdCBzeiwgSDMyM19Vc2VySW5mb3JtYXRpb24gKnV1aWUpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODUyLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODUzOmludCBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NTQtXHRcdFx0XHRcdCBNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UgKlxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTg3MC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjg3MTppbnQgRGVjb2RlUTkzMSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeiwgUTkzMSAqcTkzMSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTg3Mi17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtOTA3LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6OTA4Olx0LyogRGVjb2RlIEluZm9ybWF0aW9uIEVsZW1lbnRzICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy05MDktXHR3aGlsZSAoc3ogXHUwMDNlIDApIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy05MjItXHRcdFx0XHRicmVhaztcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjkyMzpcdFx0XHRyZXR1cm4gRGVjb2RlSDMyM19Vc2VySW5mb3JtYXRpb24oYnVmLCBwLCBsZW4sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy05MjQtXHRcdFx0XHRcdFx0XHQgIFx1MDAyNnE5MzEtXHUwMDNlVVVJRSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9NTI5PXN0YXRpYyBpbnQgaDI0NV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTU1MS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjU1MjpcdFx0LyogRGVjb2RlIEguMjQ1IHNpZ25hbCAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NTUzOlx0XHRyZXQgPSBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UoZGF0YSwgZGF0YWxlbixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTU1NC1cdFx0XHRcdFx0XHRcdCAgIFx1MDAyNm1zY20pO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTEwODk9c3RhdGljIGludCBxOTMxX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTExMS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjExMTI6XHRcdC8qIERlY29kZSBRLjkzMSBzaWduYWwgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjExMTM6XHRcdHJldCA9IERlY29kZVE5MzEoZGF0YSwgZGF0YWxlbiwgXHUwMDI2cTkzMSk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xMTE0LVx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTY2ND1zdGF0aWMgaW50IHJhc19oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE2ODItXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNjgzOlx0LyogRGVjb2RlIFJBUyBtZXNzYWdlICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNjg0Olx0cmV0ID0gRGVjb2RlUmFzTWVzc2FnZShkYXRhLCBkYXRhbGVuLCBcdTAwMjZyYXMpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTY4NS1cdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM4MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBuZl9jb25udHJhY2tfaDMyMyBDb25maWd1cmF0aW9uKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdC4gQmVmb3JlIEkgZGl2ZSBpbnRvIGFueXRoaW5nIGRlZXBlciwgSSBuZWVkIHRvIHZlcmlmeSBob3cgYG5mX2Nvbm50cmFja19oMzIzYCBpcyBhY3R1YWxseSBidWlsdCBpbnRvIHRoZSBrZXJuZWwuIFRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50cyBhcmUgdGhlIEtjb25maWcgYW5kIE1ha2VmaWxlLiBJIHdhbnQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaXRzIGJ1aWxkIHN0YXR1cyAoYnVpbHQtaW4sIG1vZHVsYXIsIG9yIGRpc2FibGVkKSBhbmQgZGVwZW5kZW5jaWVzLCBzbyBJIGtub3cgd2hldGhlciB0aGUgcHJvYmxlbSBJJiMzOTttIHRyeWluZyB0byBmaXggbWlnaHQgYmUgYSBrZXJuZWwgY29uZmlndXJhdGlvbiBpc3N1ZSBvciBzb21ldGhpbmcgZGVlcGVyIGluIHRoZSBjb2RlIG9yIG1vZHVsZSBsb2FkaW5nIHByb2Nlc3MuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gaXMgZnVuZGFtZW50YWwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGhpc3Rvcnkgb2YgSC4zMjMgc3VwcG9ydCBpbiB0aGUga2VybmVsLiBUaGlzIGluaXRpYWwgY2hlY2sgaXMgYSBiYXNpYyBzYW5pdHkgY2hlY2ssIGJ1dCBhIGNyaXRpY2FsIG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX2gzMjMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM5PW9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LX0hFTFBFUikgJiM0Mzs9IG5mbmV0bGlua19jdGhlbHBlci5vXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS00MS0jIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyc1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0MjpuZl9jb25udHJhY2tfaDMyMy1vYmpzIDo9IG5mX2Nvbm50cmFja19oMzIzX21haW4ubyBuZl9jb25udHJhY2tfaDMyM19hc24xLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNDMtXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZT00NT1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUCkgJiM0Mzs9IG5mX2Nvbm50cmFja19mdHAub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0NjpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjMpICYjNDM7PSBuZl9jb25udHJhY2tfaDMyMy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQ3LW9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfSVJDKSAmIzQzOz0gbmZfY29ubnRyYWNrX2lyYy5vXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTQtI2VuZGlmXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxNTojaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oXHUwMDNlXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xNi1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0xMjM9c3RhdGljIGNvbnN0IGRlY29kZXJfdCBEZWNvZGVyc1tdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE0MC0gKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjE0MTojaW5jbHVkZSBcJiMzNDtuZl9jb25udHJhY2tfaDMyM190eXBlcy5jXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xNDItXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMzUtI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfem9uZXMuaFx1MDAzZVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MzY6I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmhcdTAwM2Vcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTM3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTE3NTU9c3RhdGljIHZvaWQgX19leGl0IGgzMjNfaGVscGVyX2V4aXQodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzYzLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTc2NDpzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX2gzMjNfZmluaSh2b2lkKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc2NS17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc3MC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE3NzE6c3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2gzMjNfaW5pdCh2b2lkKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc3Mi17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc4OS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE3OTA6bW9kdWxlX2luaXQobmZfY29ubnRyYWNrX2gzMjNfaW5pdCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzkxOm1vZHVsZV9leGl0KG5mX2Nvbm50cmFja19oMzIzX2ZpbmkpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc5Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NzQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIEtjb25maWcgZm9yIEguMzIzIENvbm5lY3Rpb24gVHJhY2tpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgcmlnaHQgaW4uIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIG1lbnRhbGx5IGdvaW5nIHRocm91Z2ggdGhlIHBvdGVudGlhbCBpc3N1ZXMuIEkmIzM5O20gaGl0dGluZyBgTkZfQ09OTlRSQUNLX0gzMjNgIGluIGBLY29uZmlnYC4gSW1tZWRpYXRlbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgZGVwZW5kZW5jeSByZXNvbHV0aW9uLiBXaGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgdG8gZW5hYmxlIHRoaXMgc3BlY2lmaWMgY29ubmVjdGlvbiB0cmFja2luZz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNvbmZsaWN0cyBJIG5lZWQgdG8gZmxhZyByaWdodCBhd2F5PyBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBwb3RlbnRpYWwgbmVlZCB0byB0cmFjZSB0aGUgY29uZmlndXJhdGlvbiYjMzk7cyByZWxhdGlvbnNoaXAgdG8gbW9kdWxlcyBhbmQgcmVsZXZhbnQga2VybmVsIHN1YnN5c3RlbXMsIGFuZCBjaGVja2luZyB0aGUgZGVwZW5kZW5jaWVzIGluIGNhc2UgaXQgbmVlZHMgb3RoZXIgbW9kdWxlcyBsb2FkZWQgZm9yIGl0IHRvIHdvcmsuIEnigJltIGFsc28gYXNzdW1pbmcgdGhhdCB0aGVyZSBpcyBhIGdvb2QgcmVhc29uIGZvciB0aGlzIHNldHRpbmcgdG8gYmUgY29uc2lkZXJlZC4gSSBuZWVkIHRvIGZpZ3VyZSB0aGF0IG91dCBiZWZvcmUgY29udGludWluZy4gSSB3aWxsIGNoZWNrIGZvciBhbnkgcmVsYXRlZCBjb2RlIGluIHRoZSBuZXRmaWx0ZXIgbW9kdWxlIHRvby4gTXkgaW1tZWRpYXRlIG5lZWQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBCb29sZWFuIGZsYWcsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggd2l0aCBtdWx0aXBsZSBzZWxlY3RhYmxlIG9wdGlvbnM/IE15IHRob3VnaHQgcHJvY2VzcyBpbnZvbHZlcyB2aXN1YWxpemluZyB0aGUgYEtjb25maWdgIHN0cnVjdHVyZSwgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gYnVpbGQgdGltZXMsIGFuZCBhbnkgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGluY2x1ZGluZyB0aGlzIGZlYXR1cmUuIEl0JiMzOTtzIGEgcXVpY2ssIGZvY3VzZWQgc2NhbiwgYnV0IGl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcG90ZW50aWFsIHBpdGZhbGxzIGJlZm9yZSBtYWtpbmcgYW55IGRlY2lzaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZfQ09OTlRSQUNLX0gzMjMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MjI3PWNvbmZpZyBORl9DT05OVFJBQ0tfRlRQXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzOC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMzk6Y29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjQwLVx0dHJpc3RhdGUgXCYjMzQ7SC4zMjMgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9NDU9b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19GVFApICYjNDM7PSBuZl9jb25udHJhY2tfZnRwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDY6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19IMzIzKSAmIzQzOz0gbmZfY29ubnRyYWNrX2gzMjMub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS00Ny1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0lSQykgJiM0Mzs9IG5mX2Nvbm50cmFja19pcmMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTEwOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHRoaW5raW5nIGFib3V0IHRoZSBLY29uZmlnIGZpbGU6CgoqKk5hdmlnYXRpbmcgdGhlIE5ldGZpbHRlciBLY29uZmlnKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGZvY3VzaW5nIGFyb3VuZCBsaW5lIDIzOS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGNvbmZpZ3VyZWQgdGhlcmUsIHByb2JhYmx5IHNvbWUgZmVhdHVyZSBvciBtb2R1bGUgcmVsYXRlZCB0byBOZXRmaWx0ZXIuIEdpdmVuIHRoZSBmaWxlIGFuZCBteSBleHBlcnRpc2UsIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBkZXBlbmRlbmNpZXMsIHByb21wdCBzdHJpbmdzLCBhbmQgZGVmYXVsdCBzZXR0aW5ncyB0aGF0IGRlZmluZSBob3cgdGhpcyBwYXJ0aWN1bGFyIE5ldGZpbHRlciBhc3BlY3QgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgd2l0aGluIHRoZSBrZXJuZWwuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSB1bmRlcmx5aW5nIHRlY2hub2xvZ2llcywgYW5kIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgbW9kdWxlcywgd2hpY2ggaXMgY3J1Y2lhbCBmb3Igb3ZlcmFsbCBzeXN0ZW0gc3RhYmlsaXR5LiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhpcyByZWxhdGVzIHRvIGFueSBoYXJkd2FyZSBhY2NlbGVyYXRpb24sIG9yIGFueSBvdGhlciBmZWF0dXJlcyB0aGF0IG1pZ2h0IGJlIGFkZGVkIHRvIHRoZSBrZXJuZWwgYW5kIGhvdyB0aGV5IGFyZSBjb25maWd1cmVkLiBJJiMzOTttIGFudGljaXBhdGluZyBhIGNsZWFyIHBpY3R1cmUgdGhhdCB3aWxsIGhlbHAgdG8gc29saWRpZnkgb3VyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGJyb2FkZXIgTmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCBnb29kaWVzIGFyZSB0aGVyZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzNTpcdFx0ICBUaGlzIGlzIEZUUCBzdXBwb3J0IG9uIExheWVyIDMgaW5kZXBlbmRlbnQgY29ubmVjdGlvbiB0cmFja2luZy5cbiAyMzY6XHRcbiAyMzc6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gMjM4Olx0XG4gMjM5Olx0Y29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXG4gMjQwOlx0XHR0cmlzdGF0ZSBcJiMzNDtILjMyMyBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4gMjQxOlx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDI0MjpcdFx0aGVscFxuIDI0MzpcdFx0ICBILjMyMyBpcyBhIFZvSVAgc2lnbmFsbGluZyBwcm90b2NvbCBmcm9tIElUVS1ULiBBcyBvbmUgb2YgdGhlIG1vc3RcbiAyNDQ6XHRcdCAgaW1wb3J0YW50IFZvSVAgcHJvdG9jb2xzLCBpdCBpcyB3aWRlbHkgdXNlZCBieSB2b2ljZSBoYXJkd2FyZSBhbmRcbiAyNDU6XHRcdCAgc29mdHdhcmUgaW5jbHVkaW5nIHZvaWNlIGdhdGV3YXlzLCBJUCBwaG9uZXMsIE5ldG1lZXRpbmcsIE9wZW5QaG9uZSxcbiAyNDY6XHRcdCAgR25vbWVtZWV0aW5nLCBldGMuXG4gMjQ3Olx0XG4gMjQ4Olx0XHQgIFdpdGggdGhpcyBtb2R1bGUgeW91IGNhbiBzdXBwb3J0IEguMzIzIG9uIGEgY29ubmVjdGlvbiB0cmFja2luZy9OQVRcbiAyNDk6XHRcdCAgZmlyZXdhbGwuXG4gMjUwOlx0XG4gMjUxOlx0XHQgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIFJBUywgRmFzdCBTdGFydCwgSC4yNDUgVHVubmVsbGluZywgQ2FsbFxuIDI1MjpcdFx0ICBGb3J3YXJkaW5nLCBSVFAvUlRDUCBhbmQgVC4xMjAgYmFzZWQgYXVkaW8sIHZpZGVvLCBmYXgsIGNoYXQsXG4gMjUzOlx0XHQgIHdoaXRlYm9hcmQsIGZpbGUgdHJhbnNmZXIsIGV0Yy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZVxuIDI1NDpcdFx0ICB2aXNpdCBodHRwOi8vbmF0aDMyMy5zb3VyY2Vmb3JnZS5uZXQvLlxuIDI1NTpcdFxuIDI1NjpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyNTc6XHRcbiAyNTg6XHRjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xuIDI1OTpcdFx0dHJpc3RhdGUgXCYjMzQ7SVJDIERDQyBwcm90b2NvbCBzdXBwb3J0IChvYnNvbGV0ZSlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEguMzIzIENvbm5lY3Rpb24gVHJhY2tpbmcgTW9kdWxlIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgbmZfY29ubnRyYWNrX2gzMjNgIG1vZHVsZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgbW9kdWxlIGludGVyZmFjZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgc28gSSYjMzk7bGwgc3RhcnQgYnkgaWRlbnRpZnlpbmcgdGhlIGtleSBlbnRyeSBwb2ludHMgYW5kIGV4cG9ydGVkIHN5bWJvbHMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBhbmQgYG5mX2Nvbm50cmFja19oMzIzX21haW4uY2AuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBmdW5jdGlvbnMgb3IgdmFyaWFibGVzIHRoYXQgYXJlbiYjMzk7dCBkZWNsYXJlZCBgc3RhdGljYCBvciB0aGF0IGFyZSBvdGhlcndpc2UgZXhwb3J0ZWQsIGFzIHRob3NlIGFyZSB0aGUgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIGludGVyYWN0aW9uIHdpdGggdGhlIGtlcm5lbC4gSXTigJlzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHdoaWNoIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGZvciB0aGUga2VybmVsJiMzOTtzIHVzZS4KClRvIGFzc2lzdCB3aXRoIHRoYXQgaW52ZXN0aWdhdGlvbiwgSSYjMzk7bGwgdGhlbiBleGFtaW5lIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZXM6IGBpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmhgIGFuZCBgaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaGAuIEkmIzM5O20gaG9waW5nIHRob3NlIHdpbGwgY29udGFpbiBkZWNsYXJhdGlvbnMgb2YgdGhlIG5vbi1zdGF0aWMgc3ltYm9scyBvciBhdCBsZWFzdCBwcm92aWRlIGNsdWVzIGFib3V0IGhvdyB0aGUgbW9kdWxlJiMzOTtzIGRpZmZlcmVudCBjb21wb25lbnRzIGFyZSBtZWFudCB0byBpbnRlcmFjdC4gQ2hlY2tpbmcgdGhlIGhlYWRlcnMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIG1vZHVsZSYjMzk7cyBpbnRlbmRlZCBBUEkgYW5kIGl0cyBkYXRhIHN0cnVjdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RlY29kZXxoMzIzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmgtNy0jaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oOjg6I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaFx1MDAzZVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC05LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oXHUwMDNlXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC0xNC0vKiBUaGlzIHN0cnVjdHVyZSBleGlzdHMgb25seSBvbmNlIHBlciBtYXN0ZXIgKi9cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmg6MTU6c3RydWN0IG5mX2N0X2gzMjNfbWFzdGVyIHtcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmgtMTYtXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaD0zMj1pbnQgZ2V0X2gyMjVfYWRkcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHVuc2lnbmVkIGNoYXIgKmRhdGEsXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC0zNS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmg6MzY6c3RydWN0IG5mY3RfaDMyM19uYXRfaG9va3Mge1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC0zNy1cdGludCAoKnNldF9oMjQ1X2FkZHIpKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmgtOTEtfTtcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmg6OTI6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBuZmN0X2gzMjNfbmF0X2hvb2tzIF9fcmN1ICpuZmN0X2gzMjNfbmF0X2hvb2s7XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oLTkzLVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaC00MS0jaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmg6NDI6I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmhcdTAwM2VcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaC00My1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaD00ND10eXBlZGVmIHN0cnVjdCB7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oLTc3LS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oOjc4OiAqIERlY29kZSBGdW5jdGlvbnMgUmV0dXJuIENvZGVzXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmgtNzktICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmgtODAtXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmg6ODE6I2RlZmluZSBIMzIzX0VSUk9SX05PTkUgMFx0LyogRGVjb2RlZCBzdWNjZXNzZnVsbHkgKi9cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaC04Mi0jZGVmaW5lIEgzMjNfRVJST1JfU1RPUCAxXHQvKiBEZWNvZGluZyBzdG9wcGVkLCBub3QgcmVhbGx5IGFuIGVycm9yICovXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oLTg3LS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oOjg4OiAqIERlY29kZSBGdW5jdGlvbnNcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaC04OS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaC05MC1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaDo5MTppbnQgRGVjb2RlUmFzTWVzc2FnZSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeiwgUmFzTWVzc2FnZSAqIHJhcyk7XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmg6OTI6aW50IERlY29kZVE5MzEodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFE5MzEgKiBxOTMxKTtcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaDo5MzppbnQgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oLTk0LVx0XHRcdFx0XHQgTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlICpcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oPTQyMz10eXBlZGVmIHN0cnVjdCBQcm9ncmVzc19VVUlFIHtcdC8qIFNFUVVFTkNFICovXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaC00MzctXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQzODp0eXBlZGVmIHN0cnVjdCBIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keSB7XHQvKiBDSE9JQ0UgKi9cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmgtNDM5LVx0ZW51bSB7XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQ0MDpcdFx0ZUgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5X3NldHVwLFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaDo0NDE6XHRcdGVIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keV9jYWxsUHJvY2VlZGluZyxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmg6NDQyOlx0XHRlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfY29ubmVjdCxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmg6NDQzOlx0XHRlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfYWxlcnRpbmcsXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQ0NDpcdFx0ZUgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5X2luZm9ybWF0aW9uLFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaDo0NDU6XHRcdGVIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keV9yZWxlYXNlQ29tcGxldGUsXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQ0NjpcdFx0ZUgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5X2ZhY2lsaXR5LFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaDo0NDc6XHRcdGVIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keV9wcm9ncmVzcyxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmg6NDQ4Olx0XHRlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfZW1wdHksXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQ0OTpcdFx0ZUgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5X3N0YXR1cyxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmg6NDUwOlx0XHRlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfc3RhdHVzSW5xdWlyeSxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmg6NDUxOlx0XHRlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfc2V0dXBBY2tub3dsZWRnZSxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmg6NDUyOlx0XHRlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfbm90aWZ5LFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaC00NTMtXHR9IGNob2ljZTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oLTQ2MS1cdH07XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQ2Mjp9IEgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5O1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaC00NjMtXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaD02MDM9dHlwZWRlZiBzdHJ1Y3QgSDMyM19VVV9QRFUge1x0LyogU0VRVUVOQ0UgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oLTYxNS1cdH0gb3B0aW9ucztcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmg6NjE2Olx0SDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHkgaDMyM19tZXNzYWdlX2JvZHk7XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oLTYxNy1cdEgzMjNfVVVfUERVX2gyNDVDb250cm9sIGgyNDVDb250cm9sO1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmg9NjIwPXR5cGVkZWYgc3RydWN0IEgzMjNfVXNlckluZm9ybWF0aW9uIHtcdC8qIFNFUVVFTkNFICovXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaC02MjMtXHR9IG9wdGlvbnM7XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjYyNDpcdEgzMjNfVVVfUERVIGgzMjNfdXVfcGR1O1xuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaC02MjUtfSBIMzIzX1VzZXJJbmZvcm1hdGlvbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NzAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOgoKKipBbmFseXppbmcgSC4zMjMgQ29ubmVjdGlvbiBUcmFja2luZyBIZWxwZXIgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGZ1bmN0aW9uIGxhbmRzY2FwZSBmb3IgdGhlIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlLiBJJiMzOTtsbCBzdGFydCBieSBtYWtpbmcgYSBtZW50YWwgbWFwIG9mIHdoYXQmIzM5O3Mgd2hlcmUuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgZXhwb3J0ZWQgYW5kIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgQVNOLjEgZGVjb2Rpbmcgcm91dGluZXMgdGhlcmUsIGFuZCBsZXQmIzM5O3MgY29uZmlybSB0aGUgcHJlc2VuY2Ugb2YgdGhlc2UgZnVuY3Rpb25zOiBgRGVjb2RlUmFzTWVzc2FnZWAsIGBEZWNvZGVROTMxYCwgYERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZWAsIGFuZCwgbGlrZWx5IHNoYXJlZCwgYGdldF9oMjI1X2FkZHJgLgoKTmV4dCwgSSYjMzk7bGwgc2hpZnQgZm9jdXMgdG8gYG5mX2Nvbm50cmFja19oMzIzX21haW4uY2AuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCBgZ2V0X2gyMjVfYWRkcmAgd2lsbCByZXNpZGUgaGVyZSBhZ2Fpbi4gQ3J1Y2lhbGx5LCBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIGhlbHBlciBjYWxsYmFja3MgcmVnaXN0ZXJlZCB2aWEgdGhlIGBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlcmAuIFRoZXNlIGNhbGxiYWNrcyBhcmUgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbG9naWMgaXRzZWxmLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlbSBjbG9zZWx5LiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hhdCB0aGV5IGFyZSBkb2luZyBhbmQgd2hlbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXC5oZWxwXFxzKj0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTI4CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYG5mX2Nvbm50cmFja19oMzIzX21haW4uY2AgZm9yIEhlbHBlciBEZWZpbml0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIG5ldGZpbHRlciBmcmFtZXdvcmsuIFRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGlzIHRvIGxvY2F0ZSB0aGUgaGVscGVyIGRlZmluaXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIG5hdmlnYXRlIGRpcmVjdGx5IHRvIGBuZl9jb25udHJhY2tfaDMyM19tYWluLmNgIHRvIHNlZSBwcmVjaXNlbHkgaG93IHRoZSBILjMyMyBoZWxwZXJzIGFyZSBkZWZpbmVkIGFuZCByZWdpc3RlcmVkIHdpdGhpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUuIFRoaXMgZmlsZSBzaG91bGQgYmUgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIG1hbmFnaW5nIHRoZSBILjMyMyByZWxhdGVkIGxvZ2ljLCBzbyB0aGUgaGVscGVyIGRlZmluaXRpb25zICpzaG91bGQqIGJlIHJpZ2h0IGhlcmUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LiBIb3BlZnVsbHksIHRoZSBjb2RlIGlzIHdlbGwtc3RydWN0dXJlZCBhbmQgZG9jdW1lbnRlZCwgbWFraW5nIGl0IGVhc2llciB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBILjMyMyBwcm90b2NvbCBpcyBkaXNzZWN0ZWQgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcgcHVycG9zZXMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNvcmUgc3RydWN0dXJlcyBhbmQgcmVnaXN0cmF0aW9uIG1lY2hhbmlzbXMsIHNwZWNpZmljYWxseSBob3cgdGhlIGhlbHBlciBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBjb3JlLiBUaGlzIGRpcmVjdCBhcHByb2FjaCB3aWxsIGFsbG93IG1lIHRvIGltbWVkaWF0ZWx5IGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgdXNlZCBmb3IgZGlzc2VjdGluZyBILjMyMyBzaWduYWxsaW5nIG1lc3NhZ2VzIGFuZCBleHRyYWN0aW5nIHJlbGV2YW50IGluZm9ybWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTU5PXN0YXRpYyBjaGFyICpoMzIzX2J1ZmZlcjtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTYwLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NjE6c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIG5mX2Nvbm50cmFja19oZWxwZXJfaDI0NTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjYyOnN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBuZl9jb25udHJhY2tfaGVscGVyX3E5MzFbXTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjYzOnN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBuZl9jb25udHJhY2tfaGVscGVyX3Jhc1tdO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtNjQtXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9NTc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgaDI0NV9leHBfcG9saWN5ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTU4Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjU4MzpzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgbmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1IF9fcmVhZF9tb3N0bHk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzo1ODQ6c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpuZl9jb25udHJhY2tfaGVscGVyX2gyNDVfcHRyIF9fcmVhZF9tb3N0bHk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy01ODUtXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9NjcxPXN0YXRpYyBpbnQgY2FsbGZvcndhcmRfZG9fZmlsdGVyKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy03MzEtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzo3MzI6c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIG5mX2Nvbm50cmFja19oZWxwZXJfcTkzMVsyXSBfX3JlYWRfbW9zdGx5O1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NzMzOnN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxX3B0clsyXSBfX3JlYWRfbW9zdGx5O1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtNzM0LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTEyNDM9c3RhdGljIGludCBwcm9jZXNzX2dycShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTI1OS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjEyNjA6c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIG5mX2Nvbm50cmFja19oZWxwZXJfcmFzWzJdIF9fcmVhZF9tb3N0bHk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxMjYxOnN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbmZfY29ubnRyYWNrX2hlbHBlcl9yYXNfcHRyWzJdIF9fcmVhZF9tb3N0bHk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xMjYyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI5MwoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgSC4zMjMgQ29ubmVjdGlvbiBUcmFja2luZyBDb2RlKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBjb3JlIGhlbHBlciBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMgZm9yIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIGBuZl9jb25udHJhY2tfaDMyM19tYWluLmNgLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIG5lZWQgdG8gbmF2aWdhdGUgdGhyb3VnaCB0aGUgZmlsZSBzdHJ1Y3R1cmUgdG8gbG9jYXRlIHdoZXJlIHRob3NlIHNwZWNpZmljIGhlbHBlciBmdW5jdGlvbnMgYXJlIGRlZmluZWQgYW5kIGluaXRpYWxpemVkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBtYWluIGVudHJ5IHBvaW50cywgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSByZXNwb25zaWJsZSBmb3IgdGhlIG5pdHR5LWdyaXR0eSBvZiBILjMyMyBwcm90b2NvbCBhbmFseXNpcyBhbmQgY29ubmVjdGlvbiBzdGF0ZSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgY29ubnRyYWNrIGZyYW1ld29yay4gSSBleHBlY3QgdG8gZmluZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBzaWduYWxpbmcgcGFyc2luZywgcG9ydCBhbGxvY2F0aW9uLCBhbmQgcGVyaGFwcyBzb21lIGFzcGVjdCBvZiBBTEcgcHJvY2Vzc2luZy4gTGV0JiMzOTtzIGdldCB0byBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTE3MTE9c3RhdGljIGludCBfX2luaXQgaDMyM19oZWxwZXJfaW5pdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3MzAtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzMxOlx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX2gyNDUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzMyLVx0XHRcdFx0XHQgICBcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX2gyNDVfcHRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3MjEKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBILjMyMyBDb25udHJhY2sgTW9kdWxlKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIGxpbmUgMTcxMSBpbiBgbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgYSBwb3RlbnRpYWwgaXNzdWUgcmVsYXRlZCB0byBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nLiBUaGlzIGFyZWEgaXMgYWx3YXlzIGEgYml0IHRyaWNreSDigJMgaXQmIzM5O3MgYSBzdGF0ZWZ1bCBwcm90b2NvbCB3aXRoIG11bHRpcGxlIGNoYW5uZWxzLCBjb21wbGV4IHNpZ25hbGluZywgYW5kIG9mdGVuIE5BVCB0cmF2ZXJzYWwgaXNzdWVzIHRvIGNvbnNpZGVyLiBJIHN1c3BlY3QgdGhhdCB0aGUgbGluZSBudW1iZXIgcGlucG9pbnRzIGEgc3BlY2lmaWMgZnVuY3Rpb24gb3IgbG9naWMgYnJhbmNoIHJlbGF0ZWQgdG8gdGhlIGhhbmRsaW5nIG9mIHNpZ25hbGluZyBtZXNzYWdlcyBvciBwZXJoYXBzIG1lZGlhIHN0cmVhbSBhc3NvY2lhdGlvbi4gQ291bGQgYmUgYW4gaXNzdWUgd2l0aCBlbmRwb2ludCByZWdpc3RyYXRpb24sIGNhbGwgc2V0dXAvdGVhcmRvd24sIG9yIGV2ZW4gcG90ZW50aWFsbHkgcmVsYXRlZCB0byBoYW5kbGluZyBrZWVwLWFsaXZlcyBvciB0aW1lb3V0cyB3aXRoaW4gdGhlIGNvbm50cmFjayBtb2R1bGUuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoYXQgdGhlIGV4YWN0IGxpbmUgYW5kIGNvbnRleHQgbWlnaHQgYmUgdml0YWwgdG8gdW5kZXJzdGFuZGluZyBhbnkgcmVwb3J0ZWQgY29ubmVjdGl2aXR5IHByb2JsZW1zIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHdoZW4gdGhpcyBtb2R1bGUgaXMgcnVubmluZy4gSSBob3BlIHRoYXQgdGhlIHJlbGV2YW50IGxpbmVzIHByb3ZpZGUgbW9yZSBjb250ZXh0IGFib3V0IHRoZSBzdGF0ZSB0cmFuc2l0aW9ucyB0aGF0IGhhcHBlbiB3aXRoaW4gdGhlIGNvbm50cmFjayBzdHJ1Y3R1cmUuIFRoaXMgbGV2ZWwgb2YgZ3JhbnVsYXJpdHkgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGFueXRoaW5nIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTcxMDpcdFxuMTcxMTpcdHN0YXRpYyBpbnQgX19pbml0IGgzMjNfaGVscGVyX2luaXQodm9pZClcbjE3MTI6XHR7XG4xNzEzOlx0XHRpbnQgcmV0O1xuMTcxNDpcdFxuMTcxNTpcdFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbMF0sIEFGX0lORVQsIElQUFJPVE9fVURQLFxuMTcxNjpcdFx0XHRcdCAgXCYjMzQ7UkFTXCYjMzQ7LFxuMTcxNzpcdFx0XHRcdCAgXHUwMDI2cmFzX2V4cF9wb2xpY3ksIDAsIHJhc19oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4xNzE4Olx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX3Jhc1sxXSwgQUZfSU5FVDYsIElQUFJPVE9fVURQLFxuMTcxOTpcdFx0XHRcdCAgXCYjMzQ7UkFTXCYjMzQ7LFxuMTcyMDpcdFx0XHRcdCAgXHUwMDI2cmFzX2V4cF9wb2xpY3ksIDAsIHJhc19oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4xNzIxOlx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX2gyNDUsIEFGX1VOU1BFQywgSVBQUk9UT19VRFAsXG4xNzIyOlx0XHRcdFx0ICBcJiMzNDtILjI0NVwmIzM0OyxcbjE3MjM6XHRcdFx0XHQgIFx1MDAyNmgyNDVfZXhwX3BvbGljeSwgMCwgaDI0NV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4xNzI0Olx0XHRuZl9jdF9oZWxwZXJfaW5pdChcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX3E5MzFbMF0sIEFGX0lORVQsIElQUFJPVE9fVENQLFxuMTcyNTpcdFx0XHRcdCAgXCYjMzQ7US45MzFcJiMzNDssXG4xNzI2Olx0XHRcdFx0ICBcdTAwMjZxOTMxX2V4cF9wb2xpY3ksIDAsIHE5MzFfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xuMTcyNzpcdFx0bmZfY3RfaGVscGVyX2luaXQoXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxWzFdLCBBRl9JTkVUNiwgSVBQUk9UT19UQ1AsXG4xNzI4Olx0XHRcdFx0ICBcJiMzNDtRLjkzMVwmIzM0OyxcbjE3Mjk6XHRcdFx0XHQgIFx1MDAyNnE5MzFfZXhwX3BvbGljeSwgMCwgcTkzMV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XG4xNzMwOlx0XG4xNzMxOlx0XHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfaDI0NSxcbjE3MzI6XHRcdFx0XHRcdFx0ICAgXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1X3B0cik7XG4xNzMzOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTczNDpcdFx0XHRyZXR1cm4gcmV0O1xuMTczNTpcdFx0cmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIobmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxLFxuMTczNjpcdFx0XHRcdFx0XHQgICAgQVJSQVlfU0laRShuZl9jb25udHJhY2tfaGVscGVyX3E5MzEpLFxuMTczNzpcdFx0XHRcdFx0XHQgICAgbmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxX3B0cik7XG4xNzM4Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTczOTpcdFx0XHRnb3RvIGVycjE7XG4xNzQwOlx0XHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihuZl9jb25udHJhY2tfaGVscGVyX3JhcyxcbjE3NDE6XHRcdFx0XHRcdFx0ICAgIEFSUkFZX1NJWkUobmZfY29ubnRyYWNrX2hlbHBlcl9yYXMpLFxuMTc0MjpcdFx0XHRcdFx0XHQgICAgbmZfY29ubnRyYWNrX2hlbHBlcl9yYXNfcHRyKTtcbjE3NDM6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xNzQ0Olx0XHRcdGdvdG8gZXJyMjtcbjE3NDU6XHRcbjE3NDY6XHRcdHJldHVybiAwO1xuMTc0NzpcdGVycjI6XG4xNzQ4Olx0XHRuZl9jb25udHJhY2tfaGVscGVyc191bnJlZ2lzdGVyKG5mX2Nvbm50cmFja19oZWxwZXJfcTkzMV9wdHIsXG4xNzQ5Olx0XHRcdFx0XHRcdEFSUkFZX1NJWkUobmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxX3B0cikpO1xuMTc1MDpcdGVycjE6XG4xNzUxOlx0XHRuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIobmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1X3B0cik7XG4xNzUyOlx0XHRyZXR1cm4gcmV0O1xuMTc1MzpcdH1cbjE3NTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5NjMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVwZW5kZW5jeSBEZWVwIERpdmU6IEguMzIzIENvbm5lY3Rpb24gVHJhY2tpbmcqKgoKT2theSwgdGltZSB0byBnZXQgaW50byB0aGUgd2VlZHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjNgLiBGaXJzdCwgSSYjMzk7bGwgZ28gc3RyYWlnaHQgdG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYW5kIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZyBlbnRyeS4gQWgsIHRoZXJlIGl0IGlzOiBgY29uZmlnIE5GX0NPTk5UUkFDS19IMzIzYC4gTm93LCB3aGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBJIHNlZSBpdCBkZXBlbmRzIG9uIGBORVRGSUxURVJfQURWQU5DRURgLCB3aGljaCBtYWtlcyBzZW5zZS4gQnV0IGdpdmVuIGl0cyBwbGFjZW1lbnQsIGl0JiMzOTtzIHByZXR0eSBzYWZlIHRvIGFzc3VtZSBpdCYjMzk7cyBhbHNvIGltcGxpY2l0bHkgZGVwZW5kZW50IG9uIGBORl9DT05OVFJBQ0tgIGFzIHdlbGwsIHNpbmNlIGl0IHNpdHMgd2l0aGluIHRoYXQgYGlmYCBibG9jay4gVG8gYmUgY2VydGFpbiwgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgdG8gY29uZmlybSB3aGVyZSBgTkZfQ09OTlRSQUNLX0gzMjNgIGlzIHNpdHVhdGVkIGFuZCBob3cgaXQgcmVsYXRlcyB0byBgTkZfQ09OTlRSQUNLYC4gR290dGEgYmUgcHJlY2lzZSB3aGVuIGRlYWxpbmcgd2l0aCB0aGVzZSBrZXJuZWwgY29uZmlncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWYgTkZfQ09OTlRSQUNLfG1lbnVjb25maWcgTkZfQ09OTlRSQUNLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz05OD1jb25maWcgTkZfTE9HX1NZU0xPR1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMDktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTEwOmlmIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTExMS1jb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM5NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5hdmlnYXRpbmcgdGhlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBORl9DT05OVFJBQ0tgIHNldHRpbmcgd2l0aGluIHRoZSBOZXRmaWx0ZXIgY29udGV4dC4gUmlnaHQsIHNvIGZpcnN0IEkmIzM5O2xsIGhlYWQgb3ZlciB0byBgbmV0L25ldGZpbHRlci9LY29uZmlnYCB0byBwaW5wb2ludCBleGFjdGx5IHdoZXJlIHRoaXMgbWVudSBvciBjb25kaXRpb25hbCBibG9jayBsaXZlcy4gTGluZSAxMTAuLi4gYWhhISBJdCYjMzk7cyBuZXN0bGVkIHdpdGhpbiBhbiBgaWYgTkZfQ09OTlRSQUNLYCBibG9jay4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIE5vdywgYSBxdWljayBzYW5pdHkgY2hlY2s6IGBORl9DT05OVFJBQ0tgIHJlbGllcyBvbiBgTkVURklMVEVSYCwgYW5kIHRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGluZ3Mgc3RhcnQgdG8gdGllIGluLiBKdXN0IHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IGltbWVkaWF0ZSBkZXBlbmRlbmNpZXMgb3Igc2NvcGluZyBjb25zaWRlcmF0aW9ucywgSSYjMzk7bGwgcXVpY2tseSBzY2FuIHRoZSBmaXJzdCAxMjAgbGluZXMgb2YgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIEl0JiMzOTtzIGFsd2F5cyBiZXN0IHRvIGJlIHRob3JvdWdoIHdpdGggdGhlIGNvbmZpZyBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51IFwmIzM0O0NvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb25cJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgTkVURklMVEVSXG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIE5FVEZJTFRFUl9JTkdSRVNTXG4gICA2Olx0XHRib29sIFwmIzM0O05ldGZpbHRlciBpbmdyZXNzIHN1cHBvcnRcJiMzNDtcbiAgIDc6XHRcdGRlZmF1bHQgeVxuICAgODpcdFx0c2VsZWN0IE5FVF9JTkdSRVNTXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFRoaXMgYWxsb3dzIHlvdSB0byBjbGFzc2lmeSBwYWNrZXRzIGZyb20gaW5ncmVzcyB1c2luZyB0aGUgTmV0ZmlsdGVyXG4gIDExOlx0XHQgIGluZnJhc3RydWN0dXJlLlxuICAxMjpcdFxuICAxMzpcdGNvbmZpZyBORVRGSUxURVJfRUdSRVNTXG4gIDE0Olx0XHRib29sIFwmIzM0O05ldGZpbHRlciBlZ3Jlc3Mgc3VwcG9ydFwmIzM0O1xuICAxNTpcdFx0ZGVmYXVsdCB5XG4gIDE2Olx0XHRzZWxlY3QgTkVUX0VHUkVTU1xuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gY2xhc3NpZnkgcGFja2V0cyBiZWZvcmUgdHJhbnNtaXNzaW9uIHVzaW5nIHRoZVxuICAxOTpcdFx0ICBOZXRmaWx0ZXIgaW5mcmFzdHJ1Y3R1cmUuXG4gIDIwOlx0XG4gIDIxOlx0Y29uZmlnIE5FVEZJTFRFUl9TS0lQX0VHUkVTU1xuICAyMjpcdFx0ZGVmX2Jvb2wgTkVURklMVEVSX0VHUkVTUyBcdTAwMjZcdTAwMjYgKE5FVF9DTFNfQUNUIHx8IElGQilcbiAgMjM6XHRcbiAgMjQ6XHRjb25maWcgTkVURklMVEVSX05FVExJTktcbiAgMjU6XHRcdGJvb2xcbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgTkVURklMVEVSX0ZBTUlMWV9CUklER0VcbiAgMjg6XHRcdGJvb2xcbiAgMjk6XHRcbiAgMzA6XHRjb25maWcgTkVURklMVEVSX0ZBTUlMWV9BUlBcbiAgMzE6XHRcdGJvb2xcbiAgMzI6XHRcbiAgMzM6XHRjb25maWcgTkVURklMVEVSX0JQRl9MSU5LXG4gIDM0Olx0XHRkZWZfYm9vbCBCUEZfU1lTQ0FMTFxuICAzNTpcdFxuICAzNjpcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXG4gIDM3Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgYmFzZSBob29rIGR1bXAgc3VwcG9ydFwmIzM0O1xuICAzODpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAgMzk6XHRcdGRlcGVuZHMgb24gTkZfVEFCTEVTXG4gIDQwOlx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0cywgZ2VhcmVkIHRvd2FyZHMgYW4gZXhwZXJ0OgoKKipOYXZpZ2F0aW5nIHRoZSBOZXRmaWx0ZXIgS2NvbmZpZyoqCgpPa2F5LCB0aW1lIHRvIHplcm8gaW4gb24gbGluZXMgMTAwLTE0MCBvZiBgbmV0L25ldGZpbHRlci9LY29uZmlnYC4gSSYjMzk7bSBndWVzc2luZyB0aGVyZSYjMzk7cyBzb21ldGhpbmcgc3BlY2lmaWMgaW4gdGhhdCBzZWN0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGJldHRlciBvciBtYXliZSB0cm91Ymxlc2hvb3QuIEJhc2VkIG9uIHBhc3QgZXhwZXJpZW5jZSB3aXRoIEtjb25maWcsIHRoYXQgcmFuZ2UgY291bGQgYmUgZGVhbGluZyB3aXRoIGEgbnVtYmVyIG9mIHRoaW5ncy4gTWlnaHQgYmUgYSBuZXcgbW9kdWxlLCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGFuIGV4aXN0aW5nIG9uZSwgb3IgcGVyaGFwcyBkZXBlbmRlbmNpZXMgYmV0d2VlbiBmZWF0dXJlcy4gR2l2ZW4gdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVpbmcgZW5hYmxlZCBvciBkaXNhYmxlZCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdy4gQXJlIHRoZXJlIGFueSB1bnVzdWFsIGRlZmF1bHRzPyBBbnkgdHJpY2t5IGRlcGVuZGVuY2llcyB0aGF0IEkgbWlnaHQgb3Zlcmxvb2sgYXQgYSBnbGFuY2U/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBzaWducyBvZiBjb25mbGljdHMgb3IgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGFjdHMuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuIDEwMTpcdFx0aGVscFxuIDEwMjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGUgc3VwcG9ydCBmb3IgcGFja2V0IGxvZ2dpbmcgdmlhIHN5c2xvZy5cbiAxMDM6XHRcdCAgSXQgc3VwcG9ydHMgSVB2NCwgSVBWNiwgQVJQIGFuZCBjb21tb24gdHJhbnNwb3J0IHByb3RvY29scyBzdWNoXG4gMTA0Olx0XHQgIGFzIFRDUCBhbmQgVURQLlxuIDEwNTpcdFx0ICBUaGlzIGlzIGEgc2ltcGxlciBidXQgbGVzcyBmbGV4aWJsZSBsb2dnaW5nIG1ldGhvZCBjb21wYXJlZCB0b1xuIDEwNjpcdFx0ICBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HLlxuIDEwNzpcdFx0ICBJZiBib3RoIGFyZSBlbmFibGVkIHRoZSBiYWNrZW5kIHRvIHVzZSBjYW4gYmUgY29uZmlndXJlZCBhdCBydW4tdGltZVxuIDEwODpcdFx0ICBieSBtZWFucyBvZiBwZXItYWRkcmVzcy1mYW1pbHkgc3lzY3RsIHR1bmFibGVzLlxuIDEwOTpcdFxuIDExMDpcdGlmIE5GX0NPTk5UUkFDS1xuIDExMTpcdGNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXG4gMTEyOlx0XHR0cmlzdGF0ZVxuIDExMzpcdFxuIDExNDpcdGNvbmZpZyBORl9DT05OVFJBQ0tfTUFSS1xuIDExNTpcdFx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIG1hcmsgdHJhY2tpbmcgc3VwcG9ydCYjMzk7XG4gMTE2Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuIDExNzpcdFx0aGVscFxuIDExODpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbm5lY3Rpb24gbWFya3MsIHVzZWQgYnkgdGhlXG4gMTE5Olx0XHQgIGBDT05OTUFSSyYjMzk7IHRhcmdldCBhbmQgYGNvbm5tYXJrJiMzOTsgbWF0Y2guIFNpbWlsYXIgdG8gdGhlIG1hcmsgdmFsdWVcbiAxMjA6XHRcdCAgb2YgcGFja2V0cywgYnV0IHRoaXMgbWFyayB2YWx1ZSBpcyBrZXB0IGluIHRoZSBjb25udHJhY2sgc2Vzc2lvblxuIDEyMTpcdFx0ICBpbnN0ZWFkIG9mIHRoZSBpbmRpdmlkdWFsIHBhY2tldHMuXG4gMTIyOlx0XG4gMTIzOlx0Y29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLXG4gMTI0Olx0XHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgc2VjdXJpdHkgbWFyayBzdXBwb3J0JiMzOTtcbiAxMjU6XHRcdGRlcGVuZHMgb24gTkVUV09SS19TRUNNQVJLXG4gMTI2Olx0XHRkZWZhdWx0IHkgaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbiAxMjc6XHRcdGhlbHBcbiAxMjg6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzZWN1cml0eSBtYXJraW5ncyB0byBiZSBhcHBsaWVkIHRvXG4gMTI5Olx0XHQgIGNvbm5lY3Rpb25zLiAgVHlwaWNhbGx5IHRoZXkgYXJlIGNvcGllZCB0byBjb25uZWN0aW9ucyBmcm9tXG4gMTMwOlx0XHQgIHBhY2tldHMgdXNpbmcgdGhlIENPTk5TRUNNQVJLIHRhcmdldCBhbmQgY29waWVkIGJhY2sgZnJvbVxuIDEzMTpcdFx0ICBjb25uZWN0aW9ucyB0byBwYWNrZXRzIHdpdGggdGhlIHNhbWUgdGFyZ2V0LCB3aXRoIHRoZSBwYWNrZXRzXG4gMTMyOlx0XHQgIGJlaW5nIG9yaWdpbmFsbHkgbGFiZWxlZCB2aWEgU0VDTUFSSy5cbiAxMzM6XHRcbiAxMzQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgJiMzOTtOJiMzOTsuXG4gMTM1Olx0XG4gMTM2Olx0Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xuIDEzNzpcdFx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHpvbmVzJiMzOTtcbiAxMzg6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gMTM5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTY4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBILjMyMyBDb25uZWN0aW9uIFRyYWNraW5nIE1vZHVsZSBEZXBlbmRlbmNpZXMgYW5kIFN5bWJvbHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgTkZfQ09OTlRSQUNLX0gzMjNgIG1vZHVsZS4gUmlnaHQgb2ZmIHRoZSBiYXQsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGl0IGRlcGVuZHMgb24gdGhlIGNvcmUgY29ubmVjdGlvbiB0cmFja2luZyBmcmFtZXdvcmsgKGBORl9DT05OVFJBQ0tgKSwgYWR2YW5jZWQgbmV0ZmlsdGVyIGZlYXR1cmVzIChgTkVURklMVEVSX0FEVkFOQ0VEYCwgYE5FVEZJTFRFUmApLCBhbmQgdGhlIGBJTkVUYCBzdGFjaywgd2hpY2ggaXMgd2hhdCBJJiMzOTtkIGV4cGVjdC4gTm93LCBsZXQmIzM5O3MgZGl2ZSBkZWVwZXIgaW50byB0aGUgY29kZS4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBrZXkgZnVuY3Rpb25zIHdpdGhpbiB0aGUgSC4zMjMgbW9kdWxlLCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgIGFuZCBgbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jYC4gTXkgaW5pdGlhbCBsaXN0IG9mIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBpbmNsdWRlIGBEZWNvZGVSYXNNZXNzYWdlYCwgYERlY29kZVE5MzFgLCBgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlYCwgYGdldF9oMjI1X2FkZHJgLCBgcmFzX2hlbHBgLCBgcTkzMV9oZWxwYCwgYW5kIGBoMjQ1X2hlbHBgLiBNeSBwcmltYXJ5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBzeW1ib2xzLCBtZWFuaW5nIHRoZXkgY2FuIGJlIHVzZWQgYnkgb3RoZXIga2VybmVsIG1vZHVsZXMuCgpJJiMzOTt2ZSBhbHJlYWR5IGxvb2tlZCBhdCB0aGUgZGVmaW5pdGlvbnMgaW4gdGhlIGNvZGUuIEkgY2FuIHNlZSB0aGF0IGBEZWNvZGVSYXNNZXNzYWdlYCwgYERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZWAsIGFuZCBgRGVjb2RlUTkzMWAgYXJlIGRlY2xhcmVkIGluIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgLCBhbmQgdGhlaXIgcHJvdG90eXBlcyBzaG93IHRoZXkgaGFuZGxlIEFTTi4xIGVuY29kZWQgbWVzc2FnZXMsIGFzIG9uZSB3b3VsZCBleHBlY3QuIEZyb20gYG5mX2Nvbm50cmFja19oMzIzX21haW4uY2AsIGBnZXRfaDIyNV9hZGRyYCBpcyAqRVhQT1JUX1NZTUJPTF9HUEwqIGFuZCB0aHVzIHZpc2libGUgb3V0c2lkZSB0aGUgbW9kdWxlLCBoYW5kbGluZyBhZGRyZXNzIGV4dHJhY3Rpb24gZnJvbSBILjIyNSBkYXRhLCBpbXBvcnRhbnQgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcuCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGEgbW9tZW50IGFuZCBxdWlja2x5IHNjYW4gdGhlIHJlbWFpbmluZyBjb2RlIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLCBqdXN0IHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgRGVjb2RlfF5FWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODMwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBNb2RpZmljYXRpb25zIGluIG5mX2Nvbm50cmFja19oMzIzX21haW4uYyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlZW4gaGFwcGVuaW5nLCBvciB3aGF0IG1pZ2h0IG5lZWQgdG8gYmUgYWRkZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIGZpbGUuICBMZXQmIzM5O3MgcXVpY2tseSBzY2FuIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uY2Agd2l0aCBgZ3JlcGAuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciBlaXRoZXIgbGluZXMgdGhhdCBzdGFydCB3aXRoICYjMzQ7aW50ICYjMzQ7IC0gc3VnZ2VzdGluZyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgb3IgZGVmaW5pdGlvbnMsIGFuZCB0aGUgYWRkaXRpb24sIG1vZGlmaWNhdGlvbiBvciByZW1vdmFsIG9mIHRob3NlLiBPciwgSSYjMzk7bSBsb29raW5nIGZvciB1c2FnZXMgb2YgYEVYUE9SVF9TWU1CT0xgLCBiZWNhdXNlIHRoYXQgaW5kaWNhdGVzIHN5bWJvbHMgYmVpbmcgbWFkZSBhdmFpbGFibGUgdG8gb3RoZXIgbW9kdWxlcywgd2hpY2ggb2Z0ZW4gc2lnbmFscyBpbXBvcnRhbnQgZnVuY3Rpb25hbGl0eSBjaGFuZ2VzIG9yIGhvb2tzLiBXaXRoIHRob3NlIHR3byBwYXR0ZXJucywgSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBzb2xpZCBvdmVydmlldyBvZiByZWxldmFudCBtb2RpZmljYXRpb25zIG9yIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgZm9yIGNoYW5nZXMgSSYjMzk7bSBpbnRlcmVzdGVkIGluLiBJIHdhbnQgYSBxdWljaywgdGFyZ2V0ZWQgdmlldyBvZiBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9NTU9Y29uc3Qgc3RydWN0IG5mY3RfaDMyM19uYXRfaG9va3MgX19yY3UgKm5mY3RfaDMyM19uYXRfaG9vayBfX3JlYWRfbW9zdGx5O1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NTY6RVhQT1JUX1NZTUJPTF9HUEwobmZjdF9oMzIzX25hdF9ob29rKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTU3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTU4Nj1pbnQgZ2V0X2gyMjVfYWRkcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHVuc2lnbmVkIGNoYXIgKmRhdGEsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtNjE1LX1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjYxNjpFWFBPUlRfU1lNQk9MX0dQTChnZXRfaDIyNV9hZGRyKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTYxNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzOTIKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIEguMzIzIEFTTi4xIERlY29kaW5nIGluIG5ldGZpbHRlcioqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUgd29ya3MgYXQgdGhlIEFTTi4xIGxldmVsLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aHJlZSBrZXkgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgcGFyc2luZzogYERlY29kZVJhc01lc3NhZ2VgLCBgRGVjb2RlUTkzMWAsIGFuZCBgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlYC4gVGhlc2UgYXJlIHRoZSBjb3JlIGRlY29kaW5nIHJvdXRpbmVzLCB0aGUgcmVhbCBoZWFydCBvZiB0aGUgQVNOLjEgcGFyc2luZyB3aXRoaW4gbmV0ZmlsdGVyIGZvciB0aGlzIHByb3RvY29sLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgcHJldHR5IGludHJpY2F0ZSBsb2dpYyBoZXJlLCBnaXZlbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgSC4zMjMgcHJvdG9jb2wgc3RhY2sgYW5kIHRoZSBuZWVkIHRvIG1haW50YWluIGNvbm5lY3Rpb24gc3RhdGUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGhvdyB0aGV5IGhhbmRsZSBCRVIvREVSIGVuY29kaW5nLCBob3cgdGhleSBpZGVudGlmeSBtZXNzYWdlIHR5cGVzLCBhbmQgaG93IHRoZSBkZWNvZGVkIGluZm9ybWF0aW9uIGlzIHVzZWQgdG8gdXBkYXRlIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJpZXMuIEl0JiMzOTtzIGEgY3JpdGljYWwgYXJlYSBmb3IgYm90aCBzZWN1cml0eSBhbmQgZnVuY3Rpb25hbGl0eSwgc28gYSB0aG9yb3VnaCByZXZpZXcgaXMgaW4gb3JkZXIuIExldCYjMzk7cyBzZWUgaG93IHdlbGwgdGhleSYjMzk7dmUgaGFuZGxlZCB0aGUgcG90ZW50aWFsIGZvciBidWZmZXIgb3ZlcmZsb3dzIGFuZCBtYWxmb3JtZWQgbWVzc2FnZXMuIFRoaXMgaXMgYWx3YXlzIGEgY29uY2VybiB3aGVuIHBhcnNpbmcgQVNOLjEsIEkga25vdy4gSSBhbHNvIHdhbnQgdG8gc2VlIGhvdyBlZmZpY2llbnRseSB0aGV5IHBhcnNlIGFuZCBzdG9yZSB0aGUgaW5mb3JtYXRpb24uIFRoaXMgd2lsbCBhZmZlY3QgY29ubmVjdGlvbiB0cmFja2luZyBwZXJmb3JtYW5jZSBmb3IgdGhpcyBwcm90b2NvbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RGVjb2RlW0EtWmEtejAtOV9dJiM0MzsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0xMDU9c3RhdGljIHVuc2lnbmVkIGludCBnZXRfdWludChzdHJ1Y3QgYml0c3RyICpicywgaW50IGIpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTA2LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTA3Oi8qIERlY29kZXIgRnVuY3Rpb25zICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMDgtc3RhdGljIGludCBkZWNvZGVfbnVsKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0xMTk9c3RhdGljIGludCBkZWNvZGVfY2hvaWNlKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEyMC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEyMTovKiBEZWNvZGVyIEZ1bmN0aW9ucyBWZWN0b3IgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEyMi10eXBlZGVmIGludCAoKmRlY29kZXJfdCkoc3RydWN0IGJpdHN0ciAqLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqLCBjaGFyICosIGludCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMjM6c3RhdGljIGNvbnN0IGRlY29kZXJfdCBEZWNvZGVyc1tdID0ge1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTI0LVx0ZGVjb2RlX251bCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz01MTE9c3RhdGljIGludCBkZWNvZGVfc2VxKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01NjYtXHRcdFx0LyogRGVjb2RlICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1Njc6XHRcdFx0aWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVx1MDAzZXR5cGVdKSAoYnMsIHNvbiwgYmFzZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU2OC1cdFx0XHRcdFx0XHRcdCAgbGV2ZWwgJiM0MzsgMSkpIFx1MDAzY1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU3My1cdFx0XHRicy1cdTAwM2ViaXQgPSAwO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTc0Olx0XHR9IGVsc2UgaWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVx1MDAzZXR5cGVdKSAoYnMsIHNvbiwgYmFzZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU3NS1cdFx0XHRcdFx0XHRcdCBsZXZlbCAmIzQzOyAxKSkgXHUwMDNjXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjMyLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NjMzOlx0XHRpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXHUwMDNldHlwZV0pIChicywgc29uLCBiYXNlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjM0LVx0XHRcdFx0XHRcdCAgbGV2ZWwgJiM0MzsgMSkpIFx1MDAzY1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTY0ND1zdGF0aWMgaW50IGRlY29kZV9zZXFvZihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzEzLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzE0Olx0XHRcdGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cdTAwM2V0eXBlXSkgKGJzLCBzb24sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MTUtXHRcdFx0XHRcdFx0XHQgIGkgXHUwMDNjXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzI0LVx0XHR9IGVsc2Vcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjcyNTpcdFx0XHRpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXHUwMDNldHlwZV0pIChicywgc29uLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzI2LVx0XHRcdFx0XHRcdFx0ICBpIFx1MDAzY1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTc0MD1zdGF0aWMgaW50IGRlY29kZV9jaG9pY2Uoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgwNy1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgwODpcdFx0aWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVx1MDAzZXR5cGVdKSAoYnMsIHNvbiwgYmFzZSwgbGV2ZWwgJiM0MzsgMSkpIFx1MDAzY1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODA5LVx0XHQgICAgSDMyM19FUlJPUl9OT05FKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgxMy1cdFx0YnMtXHUwMDNlYml0ID0gMDtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgxNDpcdH0gZWxzZSBpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXHUwMDNldHlwZV0pIChicywgc29uLCBiYXNlLCBsZXZlbCAmIzQzOyAxKSkgXHUwMDNjXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MTUtXHRcdCAgIEgzMjNfRVJST1JfTk9ORSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MjAtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo4MjE6aW50IERlY29kZVJhc01lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFJhc01lc3NhZ2UgKnJhcylcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgyMi17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODM1LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODM2OnN0YXRpYyBpbnQgRGVjb2RlSDMyM19Vc2VySW5mb3JtYXRpb24odW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBjaGFyICpiZWcsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MzctXHRcdFx0XHQgICAgICBzaXplX3Qgc3osIEgzMjNfVXNlckluZm9ybWF0aW9uICp1dWllKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTg1Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjg1MzppbnQgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODU0LVx0XHRcdFx0XHQgTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlICpcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NzAtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo4NzE6aW50IERlY29kZVE5MzEodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFE5MzEgKnE5MzEpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NzIte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTkyMi1cdFx0XHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6OTIzOlx0XHRcdHJldHVybiBEZWNvZGVIMzIzX1VzZXJJbmZvcm1hdGlvbihidWYsIHAsIGxlbixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTkyNC1cdFx0XHRcdFx0XHRcdCAgXHUwMDI2cTkzMS1cdTAwM2VVVUlFKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2NTUKCQkJCQkJCW91dHB1dDogMjExCgkJCQkJCQl0aG91Z2h0czogNTQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIEguMzIzIENvbm50cmFjayBIZWxwZXIqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgZ29vZCB0YXJnZXQgaGVyZTogdGhlIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIG1vZHVsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgYXQgZnVuY3Rpb25zIGxpa2UgYERlY29kZVJhc01lc3NhZ2VgLCBgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlYCwgYERlY29kZVE5MzFgLCBhbmQgYGdldF9oMjI1X2FkZHJgIC0gdGhlc2UgYXJlIHRoZSBleHRlcm5hbGx5IGxpbmtlZCBmdW5jdGlvbnMsIGFuZCB0aGUgcGFja2V0IGhlbHBlciBjYWxsYmFja3MgKGByYXNfaGVscGAsIGBxOTMxX2hlbHBgLCBgaDI0NV9oZWxwYCkgdGhhdCBgbmZfY29ubnRyYWNrYCBjYWxscy4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gSSByZWFjaCB0aGlzIGNvZGUgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LCBvciBhbnkgdmlydHVhbGl6ZWQgdGVzdCBzZXR1cD8gVGhlIGFuc3dlciBpcyB5ZXMsIGFic29sdXRlbHkuIFRoZXNlIGhlbHBlcnMgYXJlIGRlc2lnbmVkIHRvIHBhcnNlIG5ldHdvcmsgcGFja2V0cywgYW5kIGV2ZW4gaWYgdGhleSBhcmVuJiMzOTt0IGhpdCBuYXR1cmFsbHksIEkgY2FuIGVhc2lseSB0cmlnZ2VyIHRoZW0gdmlhIHJhdyBzb2NrZXRzLCB0YXAgaW50ZXJmYWNlcywgbG9vcGJhY2ssIG9yIGV2ZW4gbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgaW5qZWN0aW9uLgoKVGhpcyBpcyB3b3J0aCB0aGUgZWZmb3J0IHRvIGZ1enouIFRoZXJlJiMzOTtzIGEga25vd24gYnVnIC0gYSBmaXggaGFzIGFscmVhZHkgYmVlbiBpbXBsZW1lbnRlZCAtIGEgZHVwbGljYXRpb24gaW4gdGhlIGJpdHN0cmVhbSBwb2ludGVyIGFkdmFuY2VtZW50IGR1cmluZyBBU04uMSBpbnRlZ2VyIGRlY29kaW5nLiBGdXp6aW5nIEFTTi4xIHBhcnNpbmcgd2l0aGluIHRoZSBuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzIGlzIGEgdmVyeSBzdGFuZGFyZCBhbmQgZWZmZWN0aXZlIGFwcHJvYWNoLiBJdCYjMzk7cyBhIGhpZ2gtdmFsdWUgdGFyZ2V0IGZvciBpZGVudGlmeWluZyB2dWxuZXJhYmlsaXRpZXMuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgb2YgZXZlcnl0aGluZy4gVGhlIGBzZXQtcmVzdWx0c2AgZGF0YSBsb29rcyBnb29kOiBJJiMzOTt2ZSBnb3QgYFdvcnRoRnV6emluZ2Agc2V0IHRvIGB0cnVlYCwgYW5kIHRoZSBgUmVhc29uaW5nYCBjbGVhcmx5IGV4cGxhaW5zIHRoZSBBU04uMSBpbnRlZ2VyIGRlY29kaW5nIGJ1ZyBhbmQgdGhlIHNwZWNpZmljIGZpbGUgKGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2ApLiBUaGUgYEZvY3VzU3ltYm9sc2AgbGlzdCBpcyBhY2N1cmF0ZSwgYW5kIGFsbCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIChgTkZfQ09OTlRSQUNLX0gzMjNgLCBgTkZfQ09OTlRSQUNLYCwgYE5FVEZJTFRFUmAsIGFuZCBgTkVURklMVEVSX0FEVkFOQ0VEYCkgYXJlIGlkZW50aWZpZWQuCgpMZXQgbWUgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgYWdhaW5zdCB0aGUgS2NvbmZpZy4gYE5GX0NPTk5UUkFDS19IMzIzYCBkZXBlbmRzIG9uIGBORVRGSUxURVJfQURWQU5DRURgIGFuZCBmYWxscyB1bmRlciBhIGJyb2FkZXIgZGVwZW5kZW5jeSBzdHJ1Y3R1cmUgd2hpY2ggbG9va3MgY29ycmVjdC4gVGhlIGNvbmZpZyBsaXN0IGlzIGFjY3VyYXRlLCBhbmQgdGhlIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBpcyB3aGF0IEkgZXhwZWN0LgoKT2theSwgZXZlcnl0aGluZyBsb29rcyBnb29kLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDS19IMzIzJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0FEVkFOQ0VEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7RGVjb2RlUmFzTWVzc2FnZSYjMzQ7LAogICAgJiMzNDtEZWNvZGVROTMxJiMzNDssCiAgICAmIzM0O0RlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSYjMzQ7LAogICAgJiMzNDtnZXRfaDIyNV9hZGRyJiMzNDssCiAgICAmIzM0O3Jhc19oZWxwJiMzNDssCiAgICAmIzM0O3E5MzFfaGVscCYjMzQ7LAogICAgJiMzNDtoMjQ1X2hlbHAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEguMzIzIGNvbm50cmFjayBoZWxwZXImIzM5O3MgQVNOLjEgaW50ZWdlciBkZWNvZGVyIChuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYykgd2hlcmUgZ2V0X3VpbnQoKSBhZHZhbmNlZCB0aGUgYml0c3RyZWFtIHBvaW50ZXIgYW5kIGRlY29kZV9pbnQoKSBhZHZhbmNlZCBpdCBhZ2Fpbi4gVGhpcyBhZmZlY3RzIHJlYWNoYWJpbGl0eSBhbmQgcGFyc2luZyBsb2dpYyBmb3IgSC4zMjMvUS45MzEvUkFTIG5ldHdvcmsgdHJhZmZpYyBpbiB0aGUgTmV0ZmlsdGVyIHN1YnN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ09OTlRSQUNLX0gzMjMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtEZWNvZGVSYXNNZXNzYWdlJiMzNDssCiAgICAmIzM0O0RlY29kZVE5MzEmIzM0OywKICAgICYjMzQ7RGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlJiMzNDssCiAgICAmIzM0O2dldF9oMjI1X2FkZHImIzM0OywKICAgICYjMzQ7cmFzX2hlbHAmIzM0OywKICAgICYjMzQ7cTkzMV9oZWxwJiMzNDssCiAgICAmIzM0O2gyNDVfaGVscCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgSC4zMjMgY29ubnRyYWNrIGhlbHBlciYjMzk7cyBBU04uMSBpbnRlZ2VyIGRlY29kZXIgKG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jKSB3aGVyZSBnZXRfdWludCgpIGFkdmFuY2VkIHRoZSBiaXRzdHJlYW0gcG9pbnRlciBhbmQgZGVjb2RlX2ludCgpIGFkdmFuY2VkIGl0IGFnYWluLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmlsaXR5IGFuZCBwYXJzaW5nIGxvZ2ljIGZvciBILjMyMy9RLjkzMS9SQVMgbmV0d29yayB0cmFmZmljIGluIHRoZSBOZXRmaWx0ZXIgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb2ludGVyIGFkdmFuY2VtZW50IGJ1ZyBpbiBgZGVjb2RlX2ludCgpYCB3aXRoaW4gdGhlIE5ldGZpbHRlciBILjMyMyBBU04uMSBjb25udHJhY2sgaGVscGVyIChgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgKS4gSW4gYGNhc2UgQ09OUzpgLCBgZ2V0X3VpbnQoYnMsIGxlbilgIGFkdmFuY2VzIGBicy1cdTAwM2VjdXJgIGludGVybmFsbHkgYnkgYGxlbmAgYnl0ZXM7IHByZXZpb3VzbHksIGBicy1cdTAwM2VjdXIgJiM0Mzs9IGxlbmAgd2FzIGFsc28gZXhlY3V0ZWQgdW5jb25kaXRpb25hbGx5IGFmdGVyd2FyZHMsIGFkdmFuY2luZyB0aGUgYml0c3RyZWFtIGN1cnNvciB0d2ljZSB3aGVuIGRlY29kaW5nIGludGVnZXJzLiBUaGUgcGF0Y2ggbW92ZXMgYGJzLVx1MDAzZWN1ciAmIzQzOz0gbGVuYCBpbnRvIHRoZSBgZWxzZWAgYnJhbmNoLlxuXG5UaGlzIGNoYW5nZSBzdHJpY3RseSBhZGRyZXNzZXMgc3RyZWFtIHBhcnNpbmcgcG9pbnRlciBtYW5pcHVsYXRpb24gb24gaW5jb21pbmcgbmV0d29yayBwYWNrZXQgYnVmZmVycyAoYHNrYmAgZGF0YSkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBQb3RlbnRpYWwgbWVtb3J5IGlzc3VlcyByZWxhdGVkIHRvIHN0cmVhbSBib3VuZHMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgZXJyb3IgYm91bmRhcnkgY2hlY2tzIChgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRlNzhjN2EwYjdkYmVkNTUyMmYwMGYyNGUyYzE3ZjUyZTFjMDIzOTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAwMjowMjo1MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMKaW5kZXggNjgzMGM5ZGEzNTA3Yy4uYTUxMjc1Y2M0ZDBmNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMKQEAgLTMzNiw4ICYjNDM7MzM2LDkgQEAgc3RhdGljIGludCBkZWNvZGVfaW50KHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwKIAkJCXVuc2lnbmVkIGludCB2ID0gZ2V0X3VpbnQoYnMsIGxlbikgJiM0MzsgZi0mZ3Q7bGI7CiAJCQlQUklOVCgmIzM0OyA9ICV1JiMzNDssIHYpOwogCQkJKigodW5zaWduZWQgaW50ICopKGJhc2UgJiM0MzsgZi0mZ3Q7b2Zmc2V0KSkgPSB2OwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlicy0mZ3Q7Y3VyICYjNDM7PSBsZW47CiAJCX0KLQkJYnMtJmd0O2N1ciAmIzQzOz0gbGVuOwogCQlicmVhazsKIAljYXNlIFVOQ086CiAJCUJZVEVfQUxJR04oYnMpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyOQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDQxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExpbnV4IEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBkZWNpZGUgaWYgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIHdhcnJhbnRlZCBmb3IgdGhpcyBrZXJuZWwgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzc2VzcyB0aGUgcmlzayBsZXZlbC4gVGhpcyBsb29rcyBsaWtlIGEgY29kZSByZXZpZXcsIHNwZWNpZmljYWxseSBhIHRyaWFnZSB0byBkZXRlcm1pbmUgaWYgS0FTQU4gb3IgS01TQU4gaXMgbW9yZSBhcHByb3ByaWF0ZS4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgdGhpcyBmYWxscyBzcXVhcmVseSBpbnRvIHRoZSAmIzM0O2Jlbmlnbi9kZWZlbnNpdmUgc2VjdXJpdHkvY29kZSBhbmFseXNpcyYjMzQ7IGNhdGVnb3J5LiBObyBpbW1lZGlhdGUgcmVkIGZsYWdzLCBzbyBJIGNhbiBzYWZlbHkgcHJvY2VlZC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZSBpdHNlbGYuIEkgc2VlIGEgYGRpZmZgIHByZXNlbnRlZC4gTG9va3MgbGlrZSB3ZSYjMzk7cmUgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYC4gIEkmIzM5O2xsIGV4YW1pbmUgdGhlIHBhdGNoLCBmb2N1c2luZyBvbiB0aGUgY2hhbmdlcyBhcm91bmQgbGluZSAzMzYuIFRoZSBjb2RlIGRlYWxzIHdpdGggZGVjb2Rpbmcgc29tZSBpbnRlZ2VyIHZhbHVlcyB3aXRoaW4gYSBiaXRzdHJlYW0gdXNpbmcgYSBjdXN0b20gYGRlY29kZV9pbnRgIGZ1bmN0aW9uLiBUaGUgb3JpZ2luYWwgY29kZSBpbmNyZW1lbnRlZCB0aGUgYml0c3RyZWFtIGN1cnNvciBgYnMtJmd0O2N1cmAgcmVnYXJkbGVzcyBpZiB0aGUgdW5zaWduZWQgaW50IHdhcyBhY3R1YWxseSBhc3NpZ25lZCBhIHZhbHVlLiBUaGUgbmV3IHZlcnNpb24gc2tpcHMgaW5jcmVtZW50aW5nIHRoZSBiaXRzdHJlYW0gaWYgdGhlIGludCB2YWx1ZSBpcyBub3QgYXNzaWduZWQuIFRoaXMgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBidWctZml4LgoKSSYjMzk7bGwgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBnZXQgYSBiZXR0ZXIgY29udGV4dCBmb3IgdGhlIGNvZGUgYXJvdW5kIGxpbmUgMzM2LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMgYW5kIHNlZSBpZiB0aGlzIGZpeCByZXZlYWxzIGFueSB1bmRlcmx5aW5nIHZ1bG5lcmFiaWxpdGllcyBvciBhcmVhcyB0aGF0IG1pZ2h0IGJlbmVmaXQgZnJvbSBmdXp6aW5nLiBUaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhIG1lbW9yeSBzYWZldHkgY29uY2VybiB0aGF0IEtNU0FOIGlzIHBhcnRpY3VsYXJseSBzdWl0ZWQgdG8gZXhwb3NlLiBPbmNlIEkmIzM5O3ZlIHJldmlld2VkIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBJJiMzOTtsbCBiZSBpbiBhIGJldHRlciBwb3NpdGlvbiB0byBtYWtlIGEgcmVjb21tZW5kYXRpb24gb24gd2hldGhlciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbmVjZXNzYXJ5IG9yIGlmIEtBU0FOIGFsb25lIGlzIHN1ZmZpY2llbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwMDpcdFx0QllURV9BTElHTihicyk7XG4gMzAxOlx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMSwgMCkpXG4gMzAyOlx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDMwMzpcdFxuIDMwNDpcdFx0bGVuID0gKmJzLVx1MDAzZWN1ciYjNDM7JiM0Mzs7XG4gMzA1Olx0XHRicy1cdTAwM2VjdXIgJiM0Mzs9IGxlbjtcbiAzMDY6XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcbiAzMDc6XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4gMzA4Olx0XG4gMzA5Olx0XHRyZXR1cm4gSDMyM19FUlJPUl9OT05FO1xuIDMxMDpcdH1cbiAzMTE6XHRcbiAzMTI6XHRzdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIDMxMzpcdCAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4gMzE0Olx0e1xuIDMxNTpcdFx0dW5zaWduZWQgaW50IGxlbjtcbiAzMTY6XHRcbiAzMTc6XHRcdFBSSU5UKFwmIzM0OyUqcyVzXCYjMzQ7LCBsZXZlbCAqIFRBQl9TSVpFLCBcJiMzNDsgXCYjMzQ7LCBmLVx1MDAzZW5hbWUpO1xuIDMxODpcdFxuIDMxOTpcdFx0c3dpdGNoIChmLVx1MDAzZXN6KSB7XG4gMzIwOlx0XHRjYXNlIEJZVEU6XHRcdC8qIFJhbmdlID09IDI1NiAqL1xuIDMyMTpcdFx0XHRCWVRFX0FMSUdOKGJzKTtcbiAzMjI6XHRcdFx0YnMtXHUwMDNlY3VyJiM0MzsmIzQzOztcbiAzMjM6XHRcdFx0YnJlYWs7XG4gMzI0Olx0XHRjYXNlIFdPUkQ6XHRcdC8qIDI1NyBcdTAwM2M9IFJhbmdlIFx1MDAzYz0gNjRLICovXG4gMzI1Olx0XHRcdEJZVEVfQUxJR04oYnMpO1xuIDMyNjpcdFx0XHRicy1cdTAwM2VjdXIgJiM0Mzs9IDI7XG4gMzI3Olx0XHRcdGJyZWFrO1xuIDMyODpcdFx0Y2FzZSBDT05TOlx0XHQvKiA2NEsgXHUwMDNjIFJhbmdlIFx1MDAzYyA0RyAqL1xuIDMyOTpcdFx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMikpXG4gMzMwOlx0XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4gMzMxOlx0XHRcdGxlbiA9IGdldF9iaXRzKGJzLCAyKSAmIzQzOyAxO1xuIDMzMjpcdFx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgbGVuLCAwKSlcbiAzMzM6XHRcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiAzMzQ6XHRcdFx0QllURV9BTElHTihicyk7XG4gMzM1Olx0XHRcdGlmIChiYXNlIFx1MDAyNlx1MDAyNiAoZi1cdTAwM2VhdHRyIFx1MDAyNiBERUNPREUpKSB7XHQvKiB0aW1lVG9MaXZlICovXG4gMzM2Olx0XHRcdFx0dW5zaWduZWQgaW50IHYgPSBnZXRfdWludChicywgbGVuKSAmIzQzOyBmLVx1MDAzZWxiO1xuIDMzNzpcdFx0XHRcdFBSSU5UKFwmIzM0OyA9ICV1XCYjMzQ7LCB2KTtcbiAzMzg6XHRcdFx0XHQqKCh1bnNpZ25lZCBpbnQgKikoYmFzZSAmIzQzOyBmLVx1MDAzZW9mZnNldCkpID0gdjtcbiAzMzk6XHRcdFx0fSBlbHNlIHtcbiAzNDA6XHRcdFx0XHRicy1cdTAwM2VjdXIgJiM0Mzs9IGxlbjtcbiAzNDE6XHRcdFx0fVxuIDM0MjpcdFx0XHRicmVhaztcbiAzNDM6XHRcdGNhc2UgVU5DTzpcbiAzNDQ6XHRcdFx0QllURV9BTElHTihicyk7XG4gMzQ1Olx0XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcbiAzNDY6XHRcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiAzNDc6XHRcdFx0bGVuID0gZ2V0X2xlbihicyk7XG4gMzQ4Olx0XHRcdGJzLVx1MDAzZWN1ciAmIzQzOz0gbGVuO1xuIDM0OTpcdFx0XHRicmVhaztcbiAzNTA6XHRcdGRlZmF1bHQ6XHRcdC8qIDIgXHUwMDNjPSBSYW5nZSBcdTAwM2M9IDI1NSAqL1xuIDM1MTpcdFx0XHRJTkNfQklUUyhicywgZi1cdTAwM2Vzeik7XG4gMzUyOlx0XHRcdGJyZWFrO1xuIDM1MzpcdFx0fVxuIDM1NDpcdFxuIDM1NTpcdFx0UFJJTlQoXCYjMzQ7XFxuXCYjMzQ7KTtcbiAzNTY6XHRcbiAzNTc6XHRcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAwKSlcbiAzNTg6XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4gMzU5Olx0XHRyZXR1cm4gSDMyM19FUlJPUl9OT05FO1xuIDM2MDpcdH1cbiAzNjE6XHRcbiAzNjI6XHRzdGF0aWMgaW50IGRlY29kZV9lbnVtKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbiAzNjM6XHQgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcbiAzNjQ6XHR7XG4gMzY1Olx0XHRQUklOVChcJiMzNDslKnMlc1xcblwmIzM0OywgbGV2ZWwgKiBUQUJfU0laRSwgXCYjMzQ7IFwmIzM0OywgZi1cdTAwM2VuYW1lKTtcbiAzNjY6XHRcbiAzNjc6XHRcdGlmICgoZi1cdTAwM2VhdHRyIFx1MDAyNiBFWFQpIFx1MDAyNlx1MDAyNiBnZXRfYml0KGJzKSkge1xuIDM2ODpcdFx0XHRJTkNfQklUUyhicywgNyk7XG4gMzY5Olx0XHR9IGVsc2Uge1xuIDM3MDpcdFx0XHRJTkNfQklUUyhicywgZi1cdTAwM2Vzeik7XG4gMzcxOlx0XHR9XG4gMzcyOlx0XG4gMzczOlx0XHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMCkpXG4gMzc0Olx0XHRcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xuIDM3NTpcdFx0cmV0dXJuIEgzMjNfRVJST1JfTk9ORTtcbiAzNzY6XHR9XG4gMzc3Olx0XG4gMzc4Olx0c3RhdGljIGludCBkZWNvZGVfYml0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbiAzNzk6XHQgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTg3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywga2VlcGluZyBpbiBtaW5kIG15IG93biBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBgZ2V0X3VpbnRgIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJlaGF2aW9yIG9mIHRoaXMgYGdldF91aW50YCBmdW5jdGlvbi4gV2hlcmUgaXMgdGhpcyB0aGluZyBkZWZpbmVkPyBJdCYjMzk7cyBwcm9iYWJseSBpbiB0aGUgYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgZmlsZSwgb3IgcGVyaGFwcyBpbmNsdWRlZCBpbiBvbmUgb2YgdGhlIGhlYWRlcnMgd2l0aGluIHRoYXQgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlIGNvZGUg4oCTIG5vIHJvb20gZm9yIGd1ZXNzd29yayBoZXJlLiBUaW1lIHRvIHB1bGwgdXAgdGhlIHJlbGV2YW50IGZpbGVzIGFuZCBkaXNzZWN0IHRoaXMgZnVuY3Rpb24mIzM5O3MgbG9naWMuIEkgbmVlZCB0byBleGFtaW5lIHByZWNpc2VseSBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgY29ubnRyYWNrIG1vZHVsZSBhbmQsIGJ5IGV4dGVuc2lvbiwgdGhlIEguMzIzIHByb3RvY29sIGhhbmRsaW5nLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQ7IHVuZGVyc3RhbmRpbmcgdGhpcyBsb3ctbGV2ZWwgZnVuY3Rpb24gaXMgY3JpdGljYWwgdG8gZ3Jhc3BpbmcgaG93IHRoZSBzeXN0ZW0gaW50ZXJwcmV0cyB0aGUgQVNOLjEgZGF0YSBzdHJlYW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfdWludCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTEwND1zdGF0aWMgdW5zaWduZWQgaW50IGdldF9iaXRtYXAoc3RydWN0IGJpdHN0ciAqYnMsIHVuc2lnbmVkIGludCBiKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEwNTpzdGF0aWMgdW5zaWduZWQgaW50IGdldF91aW50KHN0cnVjdCBiaXRzdHIgKmJzLCBpbnQgYik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMDYtXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MjExPXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdG1hcChzdHJ1Y3QgYml0c3RyICpicywgdW5zaWduZWQgaW50IGIpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjQ5LSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MjUwOnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VpbnQoc3RydWN0IGJpdHN0ciAqYnMsIGludCBiKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjUxLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0zMTI9c3RhdGljIGludCBkZWNvZGVfaW50KHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zMzUtXHRcdGlmIChiYXNlIFx1MDAyNlx1MDAyNiAoZi1cdTAwM2VhdHRyIFx1MDAyNiBERUNPREUpKSB7XHQvKiB0aW1lVG9MaXZlICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozMzY6XHRcdFx0dW5zaWduZWQgaW50IHYgPSBnZXRfdWludChicywgbGVuKSAmIzQzOyBmLVx1MDAzZWxiO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzM3LVx0XHRcdFBSSU5UKFwmIzM0OyA9ICV1XCYjMzQ7LCB2KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jPTY4MD12b2lkIG5mX2Nvbm50cmFja19wcm90b19wZXJuZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy02OTYtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjY5Nzptb2R1bGVfcGFyYW1fY2FsbChoYXNoc2l6ZSwgbmZfY29ubnRyYWNrX3NldF9oYXNoc2l6ZSwgcGFyYW1fZ2V0X3VpbnQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTY5OC1cdFx0ICBcdTAwMjZuZl9jb25udHJhY2tfaHRhYmxlX3NpemUsIDA2MDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDQ3CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgYGdldF91aW50YCBmdW5jdGlvbiBpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgLgoKKipEaXZpbmcgaW50byBgZ2V0X3VpbnRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoYXQgYGdldF91aW50YCBmdW5jdGlvbiBpbiB0aGUgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBjb2RlLiBTcGVjaWZpY2FsbHksIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AuIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCB0aGUgQVNOLjEgcGFyc2luZyBjb250ZXh0IHRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMgd2l0aGluLiBDb25zaWRlcmluZyB0aGUgbG93LWxldmVsIEFTTi4xIGVuY29kaW5nIHByaW5jaXBsZXMsIHRoaXMgZnVuY3Rpb24gaXMgcHJvYmFibHkgdGFza2VkIHdpdGggZXh0cmFjdGluZyBhbiB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGZyb20gYSBidWZmZXIgZm9ybWF0dGVkIGFjY29yZGluZyB0byBJVFUtVCBYLjY5MCAoREVSL0JFUikgb3Igd2hhdGV2ZXIgc3Vic2V0IHRoZXkgYXJlIHVzaW5nLiBJIGV4cGVjdCB0byBzZWUgaXQgaGFuZGxpbmcgdmFyaWFibGUtbGVuZ3RoIGVuY29kaW5ncywgcG90ZW50aWFsbHkgY2hlY2tpbmcgZm9yIHRoZSBtaW5pbXVtIG51bWJlciBvZiBvY3RldHMgcmVxdWlyZWQgdG8gcmVwcmVzZW50IHRoZSB2YWx1ZSwgYW5kIGxpa2VseSBkZWFsaW5nIHdpdGggbGVhZGluZyB6ZXJvIGJ5dGVzIHRoYXQgbWlnaHQgYmUgcHJlc2VudCBpbiB0aGUgZW5jb2RlZCByZXByZXNlbnRhdGlvbiBkZXBlbmRpbmcgb24gd2hpY2ggJiMzNDt0YWcmIzM0OyBjbGFzcyB0aGUgaW50ZWdlciBpcyBiZWluZyBlbmNvZGVkIHdpdGguIFRoaXMgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGluIHRlcm1zIG9mIGhvdyBpdCBleHRyYWN0cyBhIHZhbHVlIGFuZCB3aGV0aGVyIGl0IG1pZ2h0IGJlIHZ1bG5lcmFibGUgdG8gdGhpbmdzIGxpa2Ugb3ZlcmxvbmcgZW5jb2RpbmdzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGhvdyBpdCBoYW5kbGVzIGNhc2VzIHdoZXJlIHRoZSBidWZmZXIgbWlnaHQgYmUgdHJ1bmNhdGVkIG9yIGludmFsaWQsIGFuZCBtYWtlIHN1cmUgdGhhdCBpdCYjMzk7cyByb2J1c3QgaW4gdGhhdCBjb250ZXh0LiBJIHdhbnQgdG8gc2VlIGlmIHRoZXkmIzM5O3JlIHZhbGlkYXRpbmcgdGhlIGxlbmd0aCBmaWVsZCBwcm9wZXJseSBhbmQgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIHBvdGVudGlhbCBvdmVyZmxvd3Mg4oCTIHRoYXQmIzM5O3Mgb2Z0ZW4gYSBzb3VyY2Ugb2YgdnVsbmVyYWJpbGl0aWVzIHdoZW4gZGVhbGluZyB3aXRoIHVuc2lnbmVkIGludGVnZXJzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIG9mZi1ieS1vbmUgZXJyb3JzIGluIHRoZWlyIGluZGV4aW5nIGFzIHdlbGwuIExldCYjMzk7cyBzZWUgaG93IHdlbGwgaXQmIzM5O3MgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0MDpcdFx0fVxuIDI0MTpcdFxuIDI0MjpcdFx0diBcdTAwMjY9IDB4ZmZmZmZmZmYgXHUwMDNjXHUwMDNjICgzMiAtIGIpO1xuIDI0MzpcdFxuIDI0NDpcdFx0cmV0dXJuIHY7XG4gMjQ1Olx0fVxuIDI0NjpcdFxuIDI0NzpcdC8qXG4gMjQ4Olx0ICogQXNzdW1lIGJzIGlzIGFsaWduZWQgYW5kIHNpemVvZih1bnNpZ25lZCBpbnQpID09IDRcbiAyNDk6XHQgKi9cbiAyNTA6XHRzdGF0aWMgdW5zaWduZWQgaW50IGdldF91aW50KHN0cnVjdCBiaXRzdHIgKmJzLCBpbnQgYilcbiAyNTE6XHR7XG4gMjUyOlx0XHR1bnNpZ25lZCBpbnQgdiA9IDA7XG4gMjUzOlx0XG4gMjU0Olx0XHRzd2l0Y2ggKGIpIHtcbiAyNTU6XHRcdGNhc2UgNDpcbiAyNTY6XHRcdFx0diB8PSAqYnMtXHUwMDNlY3VyJiM0MzsmIzQzOztcbiAyNTc6XHRcdFx0diBcdTAwM2NcdTAwM2M9IDg7XG4gMjU4Olx0XHRcdGZhbGx0aHJvdWdoO1xuIDI1OTpcdFx0Y2FzZSAzOlxuIDI2MDpcdFx0XHR2IHw9ICpicy1cdTAwM2VjdXImIzQzOyYjNDM7O1xuIDI2MTpcdFx0XHR2IFx1MDAzY1x1MDAzYz0gODtcbiAyNjI6XHRcdFx0ZmFsbHRocm91Z2g7XG4gMjYzOlx0XHRjYXNlIDI6XG4gMjY0Olx0XHRcdHYgfD0gKmJzLVx1MDAzZWN1ciYjNDM7JiM0Mzs7XG4gMjY1Olx0XHRcdHYgXHUwMDNjXHUwMDNjPSA4O1xuIDI2NjpcdFx0XHRmYWxsdGhyb3VnaDtcbiAyNjc6XHRcdGNhc2UgMTpcbiAyNjg6XHRcdFx0diB8PSAqYnMtXHUwMDNlY3VyJiM0MzsmIzQzOztcbiAyNjk6XHRcdFx0YnJlYWs7XG4gMjcwOlx0XHR9XG4gMjcxOlx0XHRyZXR1cm4gdjtcbiAyNzI6XHR9XG4gMjczOlx0XG4gMjc0Olx0c3RhdGljIGludCBkZWNvZGVfbnVsKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbiAyNzU6XHQgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxuIDI3NjpcdHtcbiAyNzc6XHRcdFBSSU5UKFwmIzM0OyUqcyVzXFxuXCYjMzQ7LCBsZXZlbCAqIFRBQl9TSVpFLCBcJiMzNDsgXCYjMzQ7LCBmLVx1MDAzZW5hbWUpO1xuIDI3ODpcdFxuIDI3OTpcdFx0cmV0dXJuIEgzMjNfRVJST1JfTk9ORTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk2NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDU2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDcml0aWNhbCBBU04uMSBEZWNvZGluZyBCdWcqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBkZWNvZGVfaW50YCBmdW5jdGlvbiwgYW5kIHNvbWV0aGluZyBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXQgbWUgcmVnYXJkaW5nIGhvdyBgYnMtJmd0O2N1cmAgaXMgYmVpbmcgbWFuYWdlZC4gU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgbG9vayBhdCBgZ2V0X3VpbnRgLiBQcmV2aW91c2x5LCBgZ2V0X3VpbnQoYnMsIGxlbilgIHdhcyBkZWZpbmVkIGluIGEgd2F5IHRoYXQgaXQgaW5jcmVtZW50cyBgYnMtJmd0O2N1cmAgYnkgYGxlbmAgYnl0ZXMuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBhZHZhbmNpbmcgYGJzLSZndDtjdXJgIHVzaW5nIGAqYnMtJmd0O2N1ciYjNDM7JiM0MztgIHdpdGhpbiB0aGUgYGdldF91aW50YCBmdW5jdGlvbiBpdHNlbGYuCgpOb3csIGNvbnNpZGVyIHRoaXMgc2NlbmFyaW8gd2l0aGluIGBkZWNvZGVfaW50YCB1bmRlciB0aGUgYENPTlNgIGNhc2UuIFdlIGRldGVybWluZSBhIGBsZW5gIHZhbHVlLiBUaGVuLCBpZiB3ZSBoaXQgdGhlIGBpZiAoYmFzZSAmYW1wOyZhbXA7IChmLSZndDthdHRyICZhbXA7IERFQ09ERSkpYCBjb25kaXRpb24sIGBnZXRfdWludChicywgbGVuKWAgKmFscmVhZHkqIGFkdmFuY2VzIGBicy0mZ3Q7Y3VyYCBieSBgbGVuYC4gQnV0IHRoZW4sICp1bmNvbmRpdGlvbmFsbHkqLCBhZnRlciB0aGF0IGNvbmRpdGlvbmFsIGJsb2NrLCB3ZSBmaW5kIGBicy0mZ3Q7Y3VyICYjNDM7PSBsZW47YC4KCkhhbmcgb24gYSBtaW51dGUhIFRoYXQmIzM5O3MgdGhlIHByb2JsZW0uIEl0IG1lYW5zIHRoYXQgd2hlbiB0aGUgYGlmYCBzdGF0ZW1lbnQgaXMgdHJ1ZSwgd2UmIzM5O3JlIGVmZmVjdGl2ZWx5IGluY3JlbWVudGluZyBgYnMtJmd0O2N1cmAgYnkgYGxlbmAgKnR3aWNlKi4gT25jZSBpbnNpZGUgYGdldF91aW50YCwgYW5kIHRoZW4gYWdhaW4gYWZ0ZXIgYGdldF91aW50YCBjb21wbGV0ZXMuIFdoZW4gdGhlIGBpZmAgc3RhdGVtZW50IGlzIGZhbHNlLCBgYnMtJmd0O2N1ciAmIzQzOz0gbGVuO2AgaGFwcGVucyBvbmx5IG9uY2UuCgpTbywgdGhlIGJ1ZyBpcyBjbGVhcjogaW4gYGRlY29kZV9pbnRgIHRoZSBjb2RlIHdhcyBhZHZhbmNpbmcgdGhlIGJ1ZmZlciBwb2ludGVyLCBgYnMtJmd0O2N1cmAgYnkgYGxlbmAgYnl0ZXMgdHdpY2Ugd2hlbiBhIHNwZWNpZmljIGRlY29kaW5nIGNvbmRpdGlvbiB3YXMgbWV0LiBUaGlzIGV4cGxhaW5zIHRoZSBwb3RlbnRpYWwgZm9yIHNraXBwZWQgZGF0YSwgbWlzLXBhcnNpbmcsIGFuZCB0aGUgcmlzayBvZiBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGlzIGluY29ycmVjdCBvZmZzZXQgd2lsbCBjZXJ0YWlubHkgd3JlYWsgaGF2b2Mgb24gc3Vic2VxdWVudCBBU04uMSBmaWVsZCBkZWNvZGluZy4KClNpbmNlIGBicy0mZ3Q7Y3VyYCBwb2ludHMgdG8gYW4gaW5jb21pbmcgbmV0d29yayBwYWNrZXQsIGxpa2VseSBmcm9tIGFuIGBza2JgIGJ1ZmZlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgYml0c3RyYCBzdHJ1Y3R1cmUgYW5kIGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YCBmdW5jdGlvbiB3b3JrLiBUaG9zZSBhcmUgdGhlIGtleSBwaWVjZXMgbm93LiBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgdGhlIGJ1ZmZlcnMgYXJlIGNvbWluZyBmcm9tLiBUaW1lIHRvIGRpZyB0aHJvdWdoIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgYml0c3RyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9NzU9dHlwZWRlZiBzdHJ1Y3QgZmllbGRfdCB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODgtLyogQml0IFN0cmVhbSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODk6c3RydWN0IGJpdHN0ciB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy05MC1cdHVuc2lnbmVkIGNoYXIgKmJ1Zjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMDAtI2RlZmluZSBCWVRFX0FMSUdOKGJzKSBpZigoYnMpLVx1MDAzZWJpdCl7KGJzKS1cdTAwM2VjdXImIzQzOyYjNDM7OyhicyktXHUwMDNlYml0PTA7fVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTAxOnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2xlbihzdHJ1Y3QgYml0c3RyICpicyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMDI6c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0KHN0cnVjdCBiaXRzdHIgKmJzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEwMzpzdGF0aWMgdW5zaWduZWQgaW50IGdldF9iaXRzKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMDQ6c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0bWFwKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMDU6c3RhdGljIHVuc2lnbmVkIGludCBnZXRfdWludChzdHJ1Y3QgYml0c3RyICpicywgaW50IGIpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTA2LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTA3LS8qIERlY29kZXIgRnVuY3Rpb25zICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMDg6c3RhdGljIGludCBkZWNvZGVfbnVsKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEwOTpzdGF0aWMgaW50IGRlY29kZV9ib29sKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjExMDpzdGF0aWMgaW50IGRlY29kZV9vaWQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTExOnN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTI6c3RhdGljIGludCBkZWNvZGVfZW51bShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTM6c3RhdGljIGludCBkZWNvZGVfYml0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjExNDpzdGF0aWMgaW50IGRlY29kZV9udW1zdHIoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTE1OnN0YXRpYyBpbnQgZGVjb2RlX29jdHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTY6c3RhdGljIGludCBkZWNvZGVfYm1wc3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjExNzpzdGF0aWMgaW50IGRlY29kZV9zZXEoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTE4OnN0YXRpYyBpbnQgZGVjb2RlX3NlcW9mKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjExOTpzdGF0aWMgaW50IGRlY29kZV9jaG9pY2Uoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTIwLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTIxLS8qIERlY29kZXIgRnVuY3Rpb25zIFZlY3RvciAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTIyOnR5cGVkZWYgaW50ICgqZGVjb2Rlcl90KShzdHJ1Y3QgYml0c3RyICosIGNvbnN0IHN0cnVjdCBmaWVsZF90ICosIGNoYXIgKiwgaW50KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEyMy1zdGF0aWMgY29uc3QgZGVjb2Rlcl90IERlY29kZXJzW10gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTQ3LS8qIEFzc3VtZSBicyBpcyBhbGlnbmVkIFx1MDAyNlx1MDAyNiB2IFx1MDAzYyAxNjM4NCAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTQ4OnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2xlbihzdHJ1Y3QgYml0c3RyICpicylcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE0OS17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTYyLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTYzOnN0YXRpYyBpbnQgbmZfaDMyM19lcnJvcl9ib3VuZGFyeShzdHJ1Y3QgYml0c3RyICpicywgc2l6ZV90IGJ5dGVzLCBzaXplX3QgYml0cylcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE2NC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTc1LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTc2OnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdChzdHJ1Y3QgYml0c3RyICpicylcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE3Ny17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTg1LS8qIEFzc3VtZSBiIFx1MDAzYz0gOCAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTg2OnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdHMoc3RydWN0IGJpdHN0ciAqYnMsIHVuc2lnbmVkIGludCBiKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTg3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yMTAtLyogQXNzdW1lIGIgXHUwMDNjPSAzMiAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MjExOnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdG1hcChzdHJ1Y3QgYml0c3RyICpicywgdW5zaWduZWQgaW50IGIpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yMTIte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTI0OS0gKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjI1MDpzdGF0aWMgdW5zaWduZWQgaW50IGdldF91aW50KHN0cnVjdCBiaXRzdHIgKmJzLCBpbnQgYilcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTI1MS17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjczLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6Mjc0OnN0YXRpYyBpbnQgZGVjb2RlX251bChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yNzUtICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yODEtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoyODI6c3RhdGljIGludCBkZWNvZGVfYm9vbChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yODMtICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjkyLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MjkzOnN0YXRpYyBpbnQgZGVjb2RlX29pZChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yOTQtICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zMTEtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozMTI6c3RhdGljIGludCBkZWNvZGVfaW50KHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMxMy0gICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM2MS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjM2MjpzdGF0aWMgaW50IGRlY29kZV9lbnVtKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM2My0gICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zNzctXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozNzg6c3RhdGljIGludCBkZWNvZGVfYml0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM3OS0gICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQxMy1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjQxNDpzdGF0aWMgaW50IGRlY29kZV9udW1zdHIoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDE1LSAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNDMzLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NDM0OnN0YXRpYyBpbnQgZGVjb2RlX29jdHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00MzUtICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00ODEtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo0ODI6c3RhdGljIGludCBkZWNvZGVfYm1wc3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ4My0gICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTUxMC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjUxMTpzdGF0aWMgaW50IGRlY29kZV9zZXEoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTEyLSAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjQzLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NjQ0OnN0YXRpYyBpbnQgZGVjb2RlX3NlcW9mKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY0NS0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzM5LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzQwOnN0YXRpYyBpbnQgZGVjb2RlX2Nob2ljZShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03NDEtICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz04MjE9aW50IERlY29kZVJhc01lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFJhc01lc3NhZ2UgKnJhcylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MjYtXHR9O1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODI3Olx0c3RydWN0IGJpdHN0ciBicztcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgyOC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz04MzY9c3RhdGljIGludCBEZWNvZGVIMzIzX1VzZXJJbmZvcm1hdGlvbih1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGNoYXIgKmJlZyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NDItXHR9O1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODQzOlx0c3RydWN0IGJpdHN0ciBicztcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTg0NC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz04NTM9aW50IERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NjAtXHR9O1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODYxOlx0c3RydWN0IGJpdHN0ciBicztcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTg2Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NzcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYERlY29kZVJhc01lc3NhZ2VgIFVzYWdlIGluIG5mX2Nvbm50cmFja19oMzIzX21haW4uYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgYERlY29kZVJhc01lc3NhZ2VgIGZ1bmN0aW9uIGlzIGJlaW5nIGxldmVyYWdlZCB3aXRoaW4gdGhlIGBuZl9jb25udHJhY2tfaDMyM19tYWluLmNgIGZpbGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIG5ldGZpbHRlciBjb250ZXh0LiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50LCBvcHRpbWl6YXRpb24sIG9yIGV2ZW4gcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgYWx0aG91Z2ggdGhhdCYjMzk7cyBub3QgdGhlIHByaW1hcnkgZm9jdXMgcmlnaHQgbm93LiBGaXJzdCBJJiMzOTttIGNoZWNraW5nLCBhdCBhIGhpZ2ggbGV2ZWwsIHRoZSBmbG93IG9mIHRoZSBjb2RlLiBUaGVuLCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgdGhhdOKAmXMgYmVpbmcgZmVkIGludG8gYERlY29kZVJhc01lc3NhZ2VgIGFuZCwgY29udmVyc2VseSwgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIHByb2R1Y2luZy4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUgZGVjb2RlZCBkYXRhIGlzIGJlaW5nIHVzZWQsIGVzcGVjaWFsbHkgaWYgYW55IGFzc3VtcHRpb25zIGFyZSBiZWluZyBtYWRlIGFib3V0IGl0cyBmb3JtYXQgb3IgY29udGVudC4gVGhlIGVuZCBnb2FsIGlzIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RGVjb2RlUmFzTWVzc2FnZXxEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2V8dGltZVRvTGl2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTMxMj1zdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMzNC1cdFx0QllURV9BTElHTihicyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozMzU6XHRcdGlmIChiYXNlIFx1MDAyNlx1MDAyNiAoZi1cdTAwM2VhdHRyIFx1MDAyNiBERUNPREUpKSB7XHQvKiB0aW1lVG9MaXZlICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zMzYtXHRcdFx0dW5zaWduZWQgaW50IHYgPSBnZXRfdWludChicywgbGVuKSAmIzQzOyBmLVx1MDAzZWxiO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTc0MD1zdGF0aWMgaW50IGRlY29kZV9jaG9pY2Uoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgyMC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgyMTppbnQgRGVjb2RlUmFzTWVzc2FnZSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeiwgUmFzTWVzc2FnZSAqcmFzKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODIyLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz04MzY9c3RhdGljIGludCBEZWNvZGVIMzIzX1VzZXJJbmZvcm1hdGlvbih1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGNoYXIgKmJlZyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NTItXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo4NTM6aW50IERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTg1NC1cdFx0XHRcdFx0IE11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSAqXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9NTI5PXN0YXRpYyBpbnQgaDI0NV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTU1Mi1cdFx0LyogRGVjb2RlIEguMjQ1IHNpZ25hbCAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NTUzOlx0XHRyZXQgPSBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UoZGF0YSwgZGF0YWxlbixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTU1NC1cdFx0XHRcdFx0XHRcdCAgIFx1MDAyNm1zY20pO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTEzMDc9c3RhdGljIGludCBwcm9jZXNzX3JycShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTMzNi1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjEzMzc6XHRpZiAocnJxLVx1MDAzZW9wdGlvbnMgXHUwMDI2IGVSZWdpc3RyYXRpb25SZXF1ZXN0X3RpbWVUb0xpdmUpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjEzMzg6XHRcdHByX2RlYnVnKFwmIzM0O25mX2N0X3JhczogUlJRIFRUTCA9ICV1IHNlY29uZHNcXG5cJiMzNDssIHJycS1cdTAwM2V0aW1lVG9MaXZlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjEzMzk6XHRcdGluZm8tXHUwMDNldGltZW91dCA9IHJycS1cdTAwM2V0aW1lVG9MaXZlO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTM0MC1cdH0gZWxzZVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTEzNDY9c3RhdGljIGludCBwcm9jZXNzX3JjZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTM3MS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjEzNzI6XHRpZiAocmNmLVx1MDAzZW9wdGlvbnMgXHUwMDI2IGVSZWdpc3RyYXRpb25Db25maXJtX3RpbWVUb0xpdmUpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjEzNzM6XHRcdHByX2RlYnVnKFwmIzM0O25mX2N0X3JhczogUkNGIFRUTCA9ICV1IHNlY29uZHNcXG5cJiMzNDssIHJjZi1cdTAwM2V0aW1lVG9MaXZlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjEzNzQ6XHRcdGluZm8tXHUwMDNldGltZW91dCA9IHJjZi1cdTAwM2V0aW1lVG9MaXZlO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTM3NS1cdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xNjY0PXN0YXRpYyBpbnQgcmFzX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTY4My1cdC8qIERlY29kZSBSQVMgbWVzc2FnZSAqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTY4NDpcdHJldCA9IERlY29kZVJhc01lc3NhZ2UoZGF0YSwgZGF0YWxlbiwgXHUwMDI2cmFzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE2ODUtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTE1NzU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9SZWdpc3RyYXRpb25SZXF1ZXN0W10gPSB7XHQvKiBTRVFVRU5DRSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNTkzLVx0e0ZOQU1FKFwmIzM0O2FsdGVybmF0ZUVuZHBvaW50c1wmIzM0OykgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE1OTQ6XHR7Rk5BTUUoXCYjMzQ7dGltZVRvTGl2ZVwmIzM0OykgSU5ULCBDT05TLCAxLCAwLCBERUNPREUgfCBPUFQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTU5NTpcdCBvZmZzZXRvZihSZWdpc3RyYXRpb25SZXF1ZXN0LCB0aW1lVG9MaXZlKSwgTlVMTH0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTU5Ni1cdHtGTkFNRShcJiMzNDt0b2tlbnNcJiMzNDspIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTYzMz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX1JlZ2lzdHJhdGlvbkNvbmZpcm1bXSA9IHtcdC8qIFNFUVVFTkNFICovXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE2NDUtXHR7Rk5BTUUoXCYjMzQ7YWx0ZXJuYXRlR2F0ZWtlZXBlclwmIzM0OykgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jOjE2NDY6XHR7Rk5BTUUoXCYjMzQ7dGltZVRvTGl2ZVwmIzM0OykgSU5ULCBDT05TLCAxLCAwLCBERUNPREUgfCBPUFQsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM6MTY0NzpcdCBvZmZzZXRvZihSZWdpc3RyYXRpb25Db25maXJtLCB0aW1lVG9MaXZlKSwgTlVMTH0sXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMtMTY0OC1cdHtGTkFNRShcJiMzNDt0b2tlbnNcJiMzNDspIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NDYKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHVuZGVyc3RhbmRpbmcgdGhlIGByYXNgIGluaXRpYWxpemF0aW9uIGFuZCB1c2FnZSB3aXRoaW4gYHJhc19oZWxwYCwgYmFzZWQgb24gdGhhdCBwb2ludGVyIHRvIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uY2AgYXJvdW5kIGxpbmVzIDE2NzUtMTcxMC4KCioqRGVjb25zdHJ1Y3RpbmcgYHJhc2AgaW4gYHJhc19oZWxwYCoqCgpNeSBpbW1lZGlhdGUgcGxhbiBpcyB0byBvcGVuIHRoYXQgZmlsZSwgYG5mX2Nvbm50cmFja19oMzIzX21haW4uY2AsIGFuZCB6ZXJvIGluIG9uIHRoZSBzdWdnZXN0ZWQgbGluZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBXaGF0IGlzIGByYXNgPyBJcyBpdCBhIGRhdGEgc3RydWN0dXJlPyBBIGZ1bmN0aW9uIHBvaW50ZXI/IEEgZ2xvYmFsIHZhcmlhYmxlPyBUaGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBjbHVlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igd2hlcmUgYHJhc2AgaXMgZGVjbGFyZWQgYW5kIGluaXRpYWxpemVkLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBzdHJ1Y3R1cmVzIG9yIHR5cGVzIGludm9sdmVkLiBUaGVuLCBJJiMzOTtsbCB0cmFjZSBob3cgaXQmIzM5O3MgdXNlZCB3aXRoaW4gdGhhdCBibG9jayBvZiBjb2RlIOKAkyBhcmUgZnVuY3Rpb25zIGNhbGxlZCBvbiBpdD8gQXJlIHZhbHVlcyBhc3NpZ25lZCB0byBpdHMgbWVtYmVycz8gSXMgaXQgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIG90aGVyIGZ1bmN0aW9ucz8KCkdpdmVuIHRoZSBmaWxlIG5hbWUsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgYHJhc2AgZW50aXR5IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nLiBJdCBtaWdodCBiZSByZWxhdGVkIHRvIGhhbmRsaW5nIFJBUyAoUmVnaXN0cmF0aW9uLCBBZG1pc3Npb24sIGFuZCBTdGF0dXMpIG1lc3NhZ2VzIHdpdGhpbiB0aGUgSC4zMjMgcHJvdG9jb2wuIFRoZSBsb2NhdGlvbiB3aXRoaW4gdGhlIGBuZl9jb25udHJhY2tgIGZyYW1ld29yayBzdWdnZXN0cyBpdHMgbGlrZWx5IGludm9sdmVkIGluIGluc3BlY3RpbmcgYW5kIG1hbmlwdWxhdGluZyBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJpZXMgcmVsZXZhbnQgdG8gSC4zMjMgdHJhZmZpYy4gVGhlIGxpbmUgbnVtYmVycyBob3BlZnVsbHkgcG9pbnQgdG8gd2hlcmUgUkFTLXNwZWNpZmljIHBhcnNpbmcgb3IgcHJvY2Vzc2luZyBvY2N1cnMsIHBlcmhhcHMgd2hlcmUgdGhlIEguMjI1L1EuOTMxIG1lc3NhZ2VzIGFyZSBkZW11eGVkIGFuZCB0aGUgUkFTLXNwZWNpZmljIGRldGFpbHMgYXJlIGhhbmRsZWQuIEkmIzM5O20ga2VlbiB0byBzZWUgdGhlIGNvZGUgd2hpY2ggdHJhY2tzIHRoZSBILjMyMyBSQVMgbWVzc2FnZXMsIHdoaWNoIGlzIHZpdGFsIHRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIGNvbm5lY3Rpb24gZmxvdyBhbmQgTkFUIHRyYXZlcnNhbCBiZWhhdmlvciBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nLiBNeSBleHBlcnQgaW5zdGluY3RzIHRlbGwgbWUgdGhpcyB3aWxsIHByb3ZpZGUgc29tZSBpbnNpZ2h0cyBpbnRvIGhvdyBILjMyMyBlbmRwb2ludHMgYXJlIHJlZ2lzdGVyZWQgYW5kIG1hbmFnZWQsIGFuZCBob3cgdGhhdCBpbmZvcm1hdGlvbiBpcyB1c2VkIGZvciBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2NzA6XHRcdGludCByZXQ7XG4xNjcxOlx0XG4xNjcyOlx0XHRwcl9kZWJ1ZyhcJiMzNDtuZl9jdF9yYXM6IHNrYmxlbiA9ICV1XFxuXCYjMzQ7LCBza2ItXHUwMDNlbGVuKTtcbjE2NzM6XHRcbjE2NzQ6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZl9oMzIzX2xvY2spO1xuMTY3NTpcdFxuMTY3NjpcdFx0LyogR2V0IFVEUCBkYXRhICovXG4xNjc3Olx0XHRkYXRhID0gZ2V0X3VkcF9kYXRhKHNrYiwgcHJvdG9mZiwgXHUwMDI2ZGF0YWxlbik7XG4xNjc4Olx0XHRpZiAoZGF0YSA9PSBOVUxMKVxuMTY3OTpcdFx0XHRnb3RvIGFjY2VwdDtcbjE2ODA6XHRcdHByX2RlYnVnKFwmIzM0O25mX2N0X3JhczogUkFTIG1lc3NhZ2UgbGVuPSVkIFwmIzM0OywgZGF0YWxlbik7XG4xNjgxOlx0XHRuZl9jdF9kdW1wX3R1cGxlKFx1MDAyNmN0LVx1MDAzZXR1cGxlaGFzaFtDVElORk8yRElSKGN0aW5mbyldLnR1cGxlKTtcbjE2ODI6XHRcbjE2ODM6XHRcdC8qIERlY29kZSBSQVMgbWVzc2FnZSAqL1xuMTY4NDpcdFx0cmV0ID0gRGVjb2RlUmFzTWVzc2FnZShkYXRhLCBkYXRhbGVuLCBcdTAwMjZyYXMpO1xuMTY4NTpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuMTY4NjpcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtuZl9jdF9yYXM6IGRlY29kaW5nIGVycm9yOiAlc1xcblwmIzM0OyxcbjE2ODc6XHRcdFx0XHQgcmV0ID09IEgzMjNfRVJST1JfQk9VTkQgP1xuMTY4ODpcdFx0XHRcdCBcJiMzNDtvdXQgb2YgYm91bmRcJiMzNDsgOiBcJiMzNDtvdXQgb2YgcmFuZ2VcJiMzNDspO1xuMTY4OTpcdFx0XHRnb3RvIGFjY2VwdDtcbjE2OTA6XHRcdH1cbjE2OTE6XHRcbjE2OTI6XHRcdC8qIFByb2Nlc3MgUkFTIG1lc3NhZ2UgKi9cbjE2OTM6XHRcdGlmIChwcm9jZXNzX3Jhcyhza2IsIGN0LCBjdGluZm8sIHByb3RvZmYsIFx1MDAyNmRhdGEsIFx1MDAyNnJhcykgXHUwMDNjIDApXG4xNjk0Olx0XHRcdGdvdG8gZHJvcDtcbjE2OTU6XHRcbjE2OTY6XHQgICAgICBhY2NlcHQ6XG4xNjk3Olx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZl9oMzIzX2xvY2spO1xuMTY5ODpcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbjE2OTk6XHRcbjE3MDA6XHQgICAgICBkcm9wOlxuMTcwMTpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmZfaDMyM19sb2NrKTtcbjE3MDI6XHRcdG5mX2N0X2hlbHBlcl9sb2coc2tiLCBjdCwgXCYjMzQ7Y2Fubm90IHByb2Nlc3MgUkFTIG1lc3NhZ2VcJiMzNDspO1xuMTcwMzpcdFx0cmV0dXJuIE5GX0RST1A7XG4xNzA0Olx0fVxuMTcwNTpcdFxuMTcwNjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgcmFzX2V4cF9wb2xpY3kgPSB7XG4xNzA3Olx0XHQubWF4X2V4cGVjdGVkXHRcdD0gMzIsXG4xNzA4Olx0XHQudGltZW91dFx0XHQ9IDI0MCxcbjE3MDk6XHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc4OQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGVjb2RpbmcgdGhlIGByYXNgIFZhcmlhYmxlOiBBIFF1aWNrIERpdmUqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgcmFzYCB2YXJpYWJsZSBpcyBkZWNsYXJlZCBhbmQgdXNlZCB3aXRoaW4gdGhpcyBjb250ZXh0LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGByYXNfaGVscGAgZnVuY3Rpb24gYW5kIHRoZSBgRGVjb2RlUmFzTWVzc2FnZWAgZnVuY3Rpb24uIEkgd2FudCB0byBzZWUgZXhhY3RseSBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRob3NlIHR3byBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5LiBHZXR0aW5nIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgZGVjbGFyYXRpb24gd2lsbCBpbmZvcm0gdGhlIHJlc3Qgb2YgbXkgYW5hbHlzaXMuIE5vIG5lZWQgdG8gZ28gdG9vIGRlZXAgaGVyZSwganVzdCB0aGUgaW5pdGlhbCBkZWZpbml0aW9uIGFuZCBtYXliZSB0aGUgZmlyc3QgZmV3IHVzYWdlcyBzaG91bGQgc3VmZmljZS4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcmVkIGZsYWdzLCBzdWNoIGFzIGFtYmlndW91cyB0eXBpbmcgb3IgcG90ZW50aWFsIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyByaWdodCBvZmYgdGhlIGJhdC4gTGV0JiMzOTtzIGdldCB0byBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY1MDpcdFx0Y2FzZSBlUmFzTWVzc2FnZV9sb2NhdGlvbkNvbmZpcm06XG4xNjUxOlx0XHRcdHJldHVybiBwcm9jZXNzX2xjZihza2IsIGN0LCBjdGluZm8sIHByb3RvZmYsIGRhdGEsXG4xNjUyOlx0XHRcdFx0XHQgICBcdTAwMjZyYXMtXHUwMDNlbG9jYXRpb25Db25maXJtKTtcbjE2NTM6XHRcdGNhc2UgZVJhc01lc3NhZ2VfaW5mb1JlcXVlc3RSZXNwb25zZTpcbjE2NTQ6XHRcdFx0cmV0dXJuIHByb2Nlc3NfaXJyKHNrYiwgY3QsIGN0aW5mbywgcHJvdG9mZiwgZGF0YSxcbjE2NTU6XHRcdFx0XHRcdCAgIFx1MDAyNnJhcy1cdTAwM2VpbmZvUmVxdWVzdFJlc3BvbnNlKTtcbjE2NTY6XHRcdGRlZmF1bHQ6XG4xNjU3Olx0XHRcdHByX2RlYnVnKFwmIzM0O25mX2N0X3JhczogUkFTIG1lc3NhZ2UgJWRcXG5cJiMzNDssIHJhcy1cdTAwM2VjaG9pY2UpO1xuMTY1ODpcdFx0XHRicmVhaztcbjE2NTk6XHRcdH1cbjE2NjA6XHRcbjE2NjE6XHRcdHJldHVybiAwO1xuMTY2MjpcdH1cbjE2NjM6XHRcbjE2NjQ6XHRzdGF0aWMgaW50IHJhc19oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuMTY2NTpcdFx0XHQgICAgc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbylcbjE2NjY6XHR7XG4xNjY3Olx0XHRzdGF0aWMgUmFzTWVzc2FnZSByYXM7XG4xNjY4Olx0XHR1bnNpZ25lZCBjaGFyICpkYXRhO1xuMTY2OTpcdFx0aW50IGRhdGFsZW4gPSAwO1xuMTY3MDpcdFx0aW50IHJldDtcbjE2NzE6XHRcbjE2NzI6XHRcdHByX2RlYnVnKFwmIzM0O25mX2N0X3Jhczogc2tibGVuID0gJXVcXG5cJiMzNDssIHNrYi1cdTAwM2VsZW4pO1xuMTY3MzpcdFxuMTY3NDpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5mX2gzMjNfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDA4CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEZWNvZGluZyB0aGUgSC4zMjMgQVNOLjEgTWVzc2FnZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYERlY29kZVJhc01lc3NhZ2VgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGhhbmRsZXMgSC4zMjMgc2lnbmFsaW5nLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCB0aGUgdHJhbnNsYXRpb24gb2YgdGhvc2UgQVNOLjEtZW5jb2RlZCBSQVMgbWVzc2FnZXMgaW50byBzb21ldGhpbmcgdGhlIGNvbm50cmFjayBtb2R1bGUgY2FuIGFjdHVhbGx5ICp1c2UqLiBJIGltYWdpbmUgaXQmIzM5O3MgcHVsbGluZyBhcGFydCB0aGUgYml0c3RyZWFtLCBpbnRlcnByZXRpbmcgdGhlIHRhZ3MsIGxlbmd0aHMsIGFuZCB2YWx1ZXMsIGFsbCBiYXNlZCBvbiB0aGUgSC4yMjUuMCBhbmQgSC4yNDUgc3BlY2lmaWNhdGlvbnMuIEkmIzM5O20gZ3Vlc3NpbmcgaXQgaGFuZGxlcyB0aGUgdmFyaW91cyBtZXNzYWdlIHR5cGVzIOKAkyBSZWdpc3RyYXRpb24sIEFkbWlzc2lvbiwgQmFuZHdpZHRoLCBhbmQgdGhlIHJlc3QuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcsIHRvby4gSSYjMzk7bSBjdXJpb3VzIGhvdyBpdCBkZWFscyB3aXRoIG1hbGZvcm1lZCBvciBpbmNvbXBsZXRlIHBhY2tldHM7IGRvZXMgaXQgZHJvcCB0aGVtLCBsb2cgdGhlbSwgb3IgdHJ5IHRvIHJlY292ZXI/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIG1lbW9yeSBhbGxvY2F0aW9uLCBzdHJ1Y3R1cmUgcG9wdWxhdGlvbiwgYW5kIGFueSBvcHRpbWl6YXRpb25zIHRoZXkmIzM5O3ZlIGltcGxlbWVudGVkLCBhcyBlZmZpY2llbmN5IGlzIGtleSBpbiBhIG5ldHdvcmtpbmcgZW52aXJvbm1lbnQuIFRoaXMgaXMgZ29pbmcgdG8gYmUgYSBnb29kIG9uZSwgdGltZSB0byBnZXQgdG8gaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgyMDpcdFxuIDgyMTpcdGludCBEZWNvZGVSYXNNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LCBSYXNNZXNzYWdlICpyYXMpXG4gODIyOlx0e1xuIDgyMzpcdFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IHJhc19tZXNzYWdlID0ge1xuIDgyNDpcdFx0XHRGTkFNRShcJiMzNDtSYXNNZXNzYWdlXCYjMzQ7KSBDSE9JQ0UsIDUsIDI0LCAzMiwgREVDT0RFIHwgRVhULFxuIDgyNTpcdFx0XHQwLCBfUmFzTWVzc2FnZVxuIDgyNjpcdFx0fTtcbiA4Mjc6XHRcdHN0cnVjdCBiaXRzdHIgYnM7XG4gODI4Olx0XG4gODI5Olx0XHRicy5idWYgPSBicy5iZWcgPSBicy5jdXIgPSBidWY7XG4gODMwOlx0XHRicy5lbmQgPSBidWYgJiM0Mzsgc3o7XG4gODMxOlx0XHRicy5iaXQgPSAwO1xuIDgzMjpcdFxuIDgzMzpcdFx0cmV0dXJuIGRlY29kZV9jaG9pY2UoXHUwMDI2YnMsIFx1MDAyNnJhc19tZXNzYWdlLCAoY2hhciAqKSByYXMsIDApO1xuIDgzNDpcdH1cbiA4MzU6XHRcbiA4MzY6XHRzdGF0aWMgaW50IERlY29kZUgzMjNfVXNlckluZm9ybWF0aW9uKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgY2hhciAqYmVnLFxuIDgzNzpcdFx0XHRcdFx0ICAgICAgc2l6ZV90IHN6LCBIMzIzX1VzZXJJbmZvcm1hdGlvbiAqdXVpZSlcbiA4Mzg6XHR7XG4gODM5Olx0XHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgaDMyM191c2VyaW5mb3JtYXRpb24gPSB7XG4gODQwOlx0XHRcdEZOQU1FKFwmIzM0O0gzMjMtVXNlckluZm9ybWF0aW9uXCYjMzQ7KSBTRVEsIDEsIDIsIDIsIERFQ09ERSB8IEVYVCxcbiA4NDE6XHRcdFx0MCwgX0gzMjNfVXNlckluZm9ybWF0aW9uXG4gODQyOlx0XHR9O1xuIDg0MzpcdFx0c3RydWN0IGJpdHN0ciBicztcbiA4NDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNDkKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqRGVjb2RpbmcgU3RydWN0dXJlczogRGVlcCBEaXZlIFRpbWUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgYmVoYXZpb3Igb2YgYGRlY29kZV9zZXFgIHdoZW4gaXQmIzM5O3MgZGVhbGluZyB3aXRoIGEgc3RydWN0LiBUaGUgY29yZSBxdWVzdGlvbiBJIGhhdmUgaXM6IERvZXMgdGhpcyBmdW5jdGlvbiBleGhpYml0IGEgY2VydGFpbiBsZXZlbCBvZiBoeWdpZW5lPyBEb2VzIGl0IGdvIHRocm91Z2ggdGhlIGVmZm9ydCBvZiBpbml0aWFsaXppbmcgdGhlIHN0cnVjdCYjMzk7cyBtZW1iZXJzLCBzcGVjaWZpY2FsbHkgYnkgdXNpbmcgc29tZXRoaW5nIGxpa2UgYG1lbXNldGAgdG8gemVybyB0aGVtIG91dCwgb3IgZG9lcyBpdCBsZWF2ZSB0aGVtIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQ/IE9yLCBkb2VzIGl0IGhhdmUgYSB3YXkgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyAqcmFzKiAoZS5nLiwgcmVkdW5kYW50IGFkZHJlc3Mgc3BhY2UpIGhhbmdpbmcgYXJvdW5kPyBUaGF0IGluaXRpYWxpemF0aW9uIGJlaGF2aW9yIGNhbiBiZSBjcml0aWNhbCBmb3Igc2FmZXR5IGFuZCBwcmVkaWN0YWJpbGl0eSwgc28gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgdGhlIGRldGFpbHMgaGVyZS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gdG8gdmVyaWZ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MTA6XHRcbiA1MTE6XHRzdGF0aWMgaW50IGRlY29kZV9zZXEoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxuIDUxMjpcdCAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXG4gNTEzOlx0e1xuIDUxNDpcdFx0dW5zaWduZWQgaW50IGV4dCwgYm1wLCBpLCBvcHQsIGxlbiA9IDAsIGJtcDIsIGJtcDJfbGVuO1xuIDUxNTpcdFx0aW50IGVycjtcbiA1MTY6XHRcdGNvbnN0IHN0cnVjdCBmaWVsZF90ICpzb247XG4gNTE3Olx0XHR1bnNpZ25lZCBjaGFyICpiZWcgPSBOVUxMO1xuIDUxODpcdFxuIDUxOTpcdFx0UFJJTlQoXCYjMzQ7JSpzJXNcXG5cJiMzNDssIGxldmVsICogVEFCX1NJWkUsIFwmIzM0OyBcJiMzNDssIGYtXHUwMDNlbmFtZSk7XG4gNTIwOlx0XG4gNTIxOlx0XHQvKiBEZWNvZGU/ICovXG4gNTIyOlx0XHRiYXNlID0gKGJhc2UgXHUwMDI2XHUwMDI2IChmLVx1MDAzZWF0dHIgXHUwMDI2IERFQ09ERSkpID8gYmFzZSAmIzQzOyBmLVx1MDAzZW9mZnNldCA6IE5VTEw7XG4gNTIzOlx0XG4gNTI0Olx0XHQvKiBFeHRlbnNpYmxlPyAqL1xuIDUyNTpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpKVxuIDUyNjpcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiA1Mjc6XHRcdGV4dCA9IChmLVx1MDAzZWF0dHIgXHUwMDI2IEVYVCkgPyBnZXRfYml0KGJzKSA6IDA7XG4gNTI4Olx0XG4gNTI5Olx0XHQvKiBHZXQgZmllbGRzIGJpdG1hcCAqL1xuIDUzMDpcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIGYtXHUwMDNlc3opKVxuIDUzMTpcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiA1MzI6XHRcdGlmIChmLVx1MDAzZXN6IFx1MDAzZSAzMilcbiA1MzM6XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfUkFOR0U7XG4gNTM0Olx0XHRibXAgPSBnZXRfYml0bWFwKGJzLCBmLVx1MDAzZXN6KTtcbiA1MzU6XHRcdGlmIChiYXNlKVxuIDUzNjpcdFx0XHQqKHVuc2lnbmVkIGludCAqKWJhc2UgPSBibXA7XG4gNTM3Olx0XG4gNTM4Olx0XHQvKiBEZWNvZGUgdGhlIHJvb3QgY29tcG9uZW50cyAqL1xuIDUzOTpcdFx0Zm9yIChpID0gb3B0ID0gMCwgc29uID0gZi1cdTAwM2VmaWVsZHM7IGkgXHUwMDNjIGYtXHUwMDNlbGI7IGkmIzQzOyYjNDM7LCBzb24mIzQzOyYjNDM7KSB7XG4gNTQwOlx0XHRcdGlmIChzb24tXHUwMDNlYXR0ciBcdTAwMjYgU1RPUCkge1xuIDU0MTpcdFx0XHRcdFBSSU5UKFwmIzM0OyUqcyVzXFxuXCYjMzQ7LCAobGV2ZWwgJiM0MzsgMSkgKiBUQUJfU0laRSwgXCYjMzQ7IFwmIzM0OyxcbiA1NDI6XHRcdFx0XHQgICAgICBzb24tXHUwMDNlbmFtZSk7XG4gNTQzOlx0XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfU1RPUDtcbiA1NDQ6XHRcdFx0fVxuIDU0NTpcdFxuIDU0NjpcdFx0XHRpZiAoc29uLVx1MDAzZWF0dHIgXHUwMDI2IE9QVCkge1x0LyogT3B0aW9uYWwgY29tcG9uZW50ICovXG4gNTQ3Olx0XHRcdFx0aWYgKCEoKDB4ODAwMDAwMDBVIFx1MDAzZVx1MDAzZSAob3B0JiM0MzsmIzQzOykpIFx1MDAyNiBibXApKVx0LyogTm90IGV4aXN0ICovXG4gNTQ4Olx0XHRcdFx0XHRjb250aW51ZTtcbiA1NDk6XHRcdFx0fVxuIDU1MDpcdFxuIDU1MTpcdFx0XHQvKiBEZWNvZGUgKi9cbiA1NTI6XHRcdFx0aWYgKHNvbi1cdTAwM2VhdHRyIFx1MDAyNiBPUEVOKSB7XHQvKiBPcGVuIGZpZWxkICovXG4gNTUzOlx0XHRcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxuIDU1NDpcdFx0XHRcdFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XG4gNTU1Olx0XHRcdFx0bGVuID0gZ2V0X2xlbihicyk7XG4gNTU2Olx0XHRcdFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIGxlbiwgMCkpXG4gNTU3Olx0XHRcdFx0XHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcbiA1NTg6XHRcdFx0XHRpZiAoIWJhc2UgfHwgIShzb24tXHUwMDNlYXR0ciBcdTAwMjYgREVDT0RFKSkge1xuIDU1OTpcdFx0XHRcdFx0UFJJTlQoXCYjMzQ7JSpzJXNcXG5cJiMzNDssIChsZXZlbCAmIzQzOyAxKSAqIFRBQl9TSVpFLFxuIDU2MDpcdFx0XHRcdFx0ICAgICAgXCYjMzQ7IFwmIzM0Oywgc29uLVx1MDAzZW5hbWUpO1xuIDU2MTpcdFx0XHRcdFx0YnMtXHUwMDNlY3VyICYjNDM7PSBsZW47XG4gNTYyOlx0XHRcdFx0XHRjb250aW51ZTtcbiA1NjM6XHRcdFx0XHR9XG4gNTY0Olx0XHRcdFx0YmVnID0gYnMtXHUwMDNlY3VyO1xuIDU2NTpcdFxuIDU2NjpcdFx0XHRcdC8qIERlY29kZSAqL1xuIDU2NzpcdFx0XHRcdGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cdTAwM2V0eXBlXSkgKGJzLCBzb24sIGJhc2UsXG4gNTY4Olx0XHRcdFx0XHRcdFx0XHQgIGxldmVsICYjNDM7IDEpKSBcdTAwM2NcbiA1Njk6XHRcdFx0XHQgICAgSDMyM19FUlJPUl9OT05FKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM5OQoJCQkJCQkJb3V0cHV0OiAyNDEKCQkJCQkJCXRob3VnaHRzOiAxMTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBgZGVjb2RlX2ludGAgQ29ycmVjdGlvbiBpbiBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGRlY29kZV9pbnRgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgbW9kdWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoYW5nZSBjb21wbGV0ZWx5LiBGaXJzdCwgSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSByZXN0IG9mIHRoZSBmaWxlIHRvIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgZWxzZXdoZXJlIGFuZCBpZiB0aGlzIGZpeCBoYXMgYW55IGJyb2FkZXIgaW1wbGljYXRpb25zLgoKTm93LCBmb2N1c2luZyBvbiBgZGVjb2RlX2ludGAgaXRzZWxmLCB0aGUgY29yZSBvZiB0aGUgaXNzdWUgbGllcyB3aXRoaW4gdGhlIGBjYXNlIENPTlM6YCBibG9jay4gSSBzZWUgdGhhdCBgZ2V0X3VpbnQoYnMsIGxlbilgIHJlYWRzIGBsZW5gIGJ5dGVzIGZyb20gdGhlIGJpdHN0cmVhbSBgYnNgIGFuZCAqYWxzbyogYWR2YW5jZXMgdGhlIGBicy0mZ3Q7Y3VyYCBwb2ludGVyLiBUaGUgb3JpZ2luYWwgY29kZSB1bmNvbmRpdGlvbmFsbHkgYWR2YW5jZWQgYGJzLSZndDtjdXJgIGFnYWluIGJ5IGBsZW5gIGJ5dGVzIGFmdGVyIHRoZSBjb25kaXRpb25hbCBhc3NpZ25tZW50IHVzaW5nIGBnZXRfdWludCgpYC4gVGhpcyBtZWFudCwgd2hlbiB0aGUgY29uZGl0aW9uIGAoYmFzZSAmYW1wOyZhbXA7IChmLSZndDthdHRyICZhbXA7IERFQ09ERSkpYCB3YXMgdHJ1ZSwgdGhlIHBvaW50ZXIgYGJzLSZndDtjdXJgIGdvdCBpbmNyZW1lbnRlZCB0d2ljZSBieSBgbGVuYCwgZWZmZWN0aXZlbHkgc2tpcHBpbmcgb3ZlciBkYXRhLgoKVGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQ6IHRoZSB1bmNvbmRpdGlvbmFsIGBicy0mZ3Q7Y3VyICYjNDM7PSBsZW47YCBpcyBub3cgbW92ZWQgaW50byB0aGUgYGVsc2VgIGJyYW5jaC4gTm93LCBgYnMtJmd0O2N1cmAgaXMgYWR2YW5jZWQgYnkgdGhlIGNvcnJlY3QgYW1vdW50LCAqb25seSogb25jZSwgZWl0aGVyIGJ5IGBnZXRfdWludGAgd2l0aGluIHRoZSBpZiBibG9jayBvciBieSBpbmNyZW1lbnRpbmcgd2l0aGluIHRoZSBlbHNlIGJsb2NrLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgdGhpcyBjb3JyZWN0aW9uIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3M/IEkgbmVlZCB0byBhbmFseXplIHRoaXMgY2FyZWZ1bGx5LgoKSSYjMzk7bGwgZ28gdGhyb3VnaCB0aGUgc3RhbmRhcmQgS01TQU4vS0FTQU4gY3JpdGVyaWE6CgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm8sIHRoaXMgaXMgY29ubnRyYWNrLCBwYXJzaW5nIHRoZSBuZXR3b3JrIHBhY2tldCBwYXlsb2FkICp3aXRoaW4qIHRoZSBrZXJuZWwuIFRoZXJlIGFyZSBubyBkaXJlY3QgY29waWVzIHRvIHVzZXJzcGFjZS4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vLiBUaGUgdmFsdWUgYHZgIGlzIGRlcml2ZWQgZnJvbSBgZ2V0X3VpbnQoKWAgYW5kIGBmLSZndDtsYmAsIGBsZW5gIGZyb20gYGdldF9iaXRzKCkgJiM0MzsgMWAsIGFuZCBgYnNgIGlzIGEgdmFsaWQgYml0c3RyZWFtIG92ZXIgdGhlIHJlY2VpdmVkIHBhY2tldCBkYXRhLiBObyBkZXBlbmRlbmNpZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuCjMuICAqKkRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gd2l0aCBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIG9yIGluaXRpYWxpemF0aW9uIGNoYW5nZXMgaGVyZS4KNC4gICoqQm91bmRzIGNoZWNrcyBvciBsb2dpYyBleHBvc2luZyB1bmluaXRpYWxpemVkIGJ1ZmZlciBieXRlcz8qKiBOby4gVGhlIGBza2JgIGRhdGEgaXMgcmVjZWl2ZWQgcGFja2V0IGRhdGEsIGFscmVhZHkgcG9wdWxhdGVkLiBUaGUgYnVnIHdhcyBhIHBvaW50ZXIgb2Zmc2V0IGlzc3VlIHdpdGhpbiB0aGUgcGFyc2luZywgbm90IGFuIHVuaW5pdGlhbGl6ZWQgcmVhZC4gU3RhbmRhcmQgbWVtb3J5IHNhZmV0eSBkZXRlY3RvcnMgKEtBU0FOKSBhbmQgdGhlIHBhcnNpbmcgbG9naWMgaXRzZWxmIGhhbmRsZSBib3VuZHMgYW5kIG91dC1vZi1ib3VuZHMgaXNzdWVzLgoKVGhlcmVmb3JlLCB0aGlzIGlzIGEgcHVyZSBwYXJzZXIgc3RyZWFtIHBvc2l0aW9uIGJ1ZyBmaXggd2l0aGluIGBuZl9jb25udHJhY2tfaDMyM19hc24xYC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBjb3JyZWN0aW9uLiBTdGFuZGFyZCBLQVNBTiBhbmQgZXhpc3RpbmcgdGVzdCBzdWl0ZXMgYXJlIHN1ZmZpY2llbnQgdG8gdmFsaWRhdGUgdGhpcy4KCk15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGFuZCBpcyBwdXJlbHkgYSBwYXJzaW5nIGNvcnJlY3RuZXNzIGZpeC4gSSB3aWxsIHNldCB0aGUgcmVzdWx0cyB0byBpbmRpY2F0ZSB0aGF0IEtNU0FOIGlzIG5vdCBuZWVkZWQgZm9yIHRoaXMgY2hhbmdlLCB3aXRoIHRoZSByZWFzb25pbmcgSSBoYXZlIG91dGxpbmVkIGFib3ZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvaW50ZXIgYWR2YW5jZW1lbnQgYnVnIGluIGBkZWNvZGVfaW50KClgIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIEguMzIzIEFTTi4xIGNvbm50cmFjayBoZWxwZXIgKGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2ApLiBJbiBgY2FzZSBDT05TOmAsIGBnZXRfdWludChicywgbGVuKWAgYWR2YW5jZXMgYGJzLVx1MDAzZWN1cmAgaW50ZXJuYWxseSBieSBgbGVuYCBieXRlczsgcHJldmlvdXNseSwgYGJzLVx1MDAzZWN1ciAmIzQzOz0gbGVuYCB3YXMgYWxzbyBleGVjdXRlZCB1bmNvbmRpdGlvbmFsbHkgYWZ0ZXJ3YXJkcywgYWR2YW5jaW5nIHRoZSBiaXRzdHJlYW0gY3Vyc29yIHR3aWNlIHdoZW4gZGVjb2RpbmcgaW50ZWdlcnMuIFRoZSBwYXRjaCBtb3ZlcyBgYnMtXHUwMDNlY3VyICYjNDM7PSBsZW5gIGludG8gdGhlIGBlbHNlYCBicmFuY2guXG5cblRoaXMgY2hhbmdlIHN0cmljdGx5IGFkZHJlc3NlcyBzdHJlYW0gcGFyc2luZyBwb2ludGVyIG1hbmlwdWxhdGlvbiBvbiBpbmNvbWluZyBuZXR3b3JrIHBhY2tldCBidWZmZXJzIChgc2tiYCBkYXRhKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFBvdGVudGlhbCBtZW1vcnkgaXNzdWVzIHJlbGF0ZWQgdG8gc3RyZWFtIGJvdW5kcyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBlcnJvciBib3VuZGFyeSBjaGVja3MgKGBuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5YCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG9pbnRlciBhZHZhbmNlbWVudCBidWcgaW4gYGRlY29kZV9pbnQoKWAgd2l0aGluIHRoZSBOZXRmaWx0ZXIgSC4zMjMgQVNOLjEgY29ubnRyYWNrIGhlbHBlciAoYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCkuIEluIGBjYXNlIENPTlM6YCwgYGdldF91aW50KGJzLCBsZW4pYCBhZHZhbmNlcyBgYnMtXHUwMDNlY3VyYCBpbnRlcm5hbGx5IGJ5IGBsZW5gIGJ5dGVzOyBwcmV2aW91c2x5LCBgYnMtXHUwMDNlY3VyICYjNDM7PSBsZW5gIHdhcyBhbHNvIGV4ZWN1dGVkIHVuY29uZGl0aW9uYWxseSBhZnRlcndhcmRzLCBhZHZhbmNpbmcgdGhlIGJpdHN0cmVhbSBjdXJzb3IgdHdpY2Ugd2hlbiBkZWNvZGluZyBpbnRlZ2Vycy4gVGhlIHBhdGNoIG1vdmVzIGBicy1cdTAwM2VjdXIgJiM0Mzs9IGxlbmAgaW50byB0aGUgYGVsc2VgIGJyYW5jaC5cblxuVGhpcyBjaGFuZ2Ugc3RyaWN0bHkgYWRkcmVzc2VzIHN0cmVhbSBwYXJzaW5nIHBvaW50ZXIgbWFuaXB1bGF0aW9uIG9uIGluY29taW5nIG5ldHdvcmsgcGFja2V0IGJ1ZmZlcnMgKGBza2JgIGRhdGEpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gUG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMgcmVsYXRlZCB0byBzdHJlYW0gYm91bmRzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIGVycm9yIGJvdW5kYXJ5IGNoZWNrcyAoYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowMjo1Mi4wNzM3OTYyMzlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjgyNTY3NjkzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLX0gzMjNcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJEZWNvZGVSYXNNZXNzYWdlXCIsXG4gICAgXCJEZWNvZGVROTMxXCIsXG4gICAgXCJEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2VcIixcbiAgICBcImdldF9oMjI1X2FkZHJcIixcbiAgICBcInJhc19oZWxwXCIsXG4gICAgXCJxOTMxX2hlbHBcIixcbiAgICBcImgyNDVfaGVscFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb2ludGVyIGFkdmFuY2VtZW50IGJ1ZyBpbiBgZGVjb2RlX2ludCgpYCB3aXRoaW4gdGhlIE5ldGZpbHRlciBILjMyMyBBU04uMSBjb25udHJhY2sgaGVscGVyIChgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgKS4gSW4gYGNhc2UgQ09OUzpgLCBgZ2V0X3VpbnQoYnMsIGxlbilgIGFkdmFuY2VzIGBicy1cXHUwMDNlY3VyYCBpbnRlcm5hbGx5IGJ5IGBsZW5gIGJ5dGVzOyBwcmV2aW91c2x5LCBgYnMtXFx1MDAzZWN1ciArPSBsZW5gIHdhcyBhbHNvIGV4ZWN1dGVkIHVuY29uZGl0aW9uYWxseSBhZnRlcndhcmRzLCBhZHZhbmNpbmcgdGhlIGJpdHN0cmVhbSBjdXJzb3IgdHdpY2Ugd2hlbiBkZWNvZGluZyBpbnRlZ2Vycy4gVGhlIHBhdGNoIG1vdmVzIGBicy1cXHUwMDNlY3VyICs9IGxlbmAgaW50byB0aGUgYGVsc2VgIGJyYW5jaC5cXG5cXG5UaGlzIGNoYW5nZSBzdHJpY3RseSBhZGRyZXNzZXMgc3RyZWFtIHBhcnNpbmcgcG9pbnRlciBtYW5pcHVsYXRpb24gb24gaW5jb21pbmcgbmV0d29yayBwYWNrZXQgYnVmZmVycyAoYHNrYmAgZGF0YSkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBQb3RlbnRpYWwgbWVtb3J5IGlzc3VlcyByZWxhdGVkIHRvIHN0cmVhbSBib3VuZHMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgZXJyb3IgYm91bmRhcnkgY2hlY2tzIChgbmZfaDMyM19lcnJvcl9ib3VuZGFyeWApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEguMzIzIGNvbm50cmFjayBoZWxwZXIncyBBU04uMSBpbnRlZ2VyIGRlY29kZXIgKG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jKSB3aGVyZSBnZXRfdWludCgpIGFkdmFuY2VkIHRoZSBiaXRzdHJlYW0gcG9pbnRlciBhbmQgZGVjb2RlX2ludCgpIGFkdmFuY2VkIGl0IGFnYWluLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmlsaXR5IGFuZCBwYXJzaW5nIGxvZ2ljIGZvciBILjMyMy9RLjkzMS9SQVMgbmV0d29yayB0cmFmZmljIGluIHRoZSBOZXRmaWx0ZXIgc3Vic3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowMjo1Mi4wNzM4MDI5MzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MTUxODQ3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRlNzhjN2EwYjdkYmVkNTUyMmYwMGYyNGUyYzE3ZjUyZTFjMDIzOTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDI6MDI6NTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1xcbmluZGV4IDY4MzBjOWRhMzUwN2MuLmE1MTI3NWNjNGQwZjYgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1xcbkBAIC0zMzYsOCArMzM2LDkgQEAgc3RhdGljIGludCBkZWNvZGVfaW50KHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4gXFx0XFx0XFx0dW5zaWduZWQgaW50IHYgPSBnZXRfdWludChicywgbGVuKSArIGYtXFx1MDAzZWxiO1xcbiBcXHRcXHRcXHRQUklOVChcXFwiID0gJXVcXFwiLCB2KTtcXG4gXFx0XFx0XFx0KigodW5zaWduZWQgaW50ICopKGJhc2UgKyBmLVxcdTAwM2VvZmZzZXQpKSA9IHY7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGJzLVxcdTAwM2VjdXIgKz0gbGVuO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGJzLVxcdTAwM2VjdXIgKz0gbGVuO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBVTkNPOlxcbiBcXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDI6NTIuNDQ2MzA4NTgzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4MTMwNzEyNDY5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DT05OVFJBQ0tfSDMyM1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIkRlY29kZVJhc01lc3NhZ2VcIixcbiAgICBcIkRlY29kZVE5MzFcIixcbiAgICBcIkRlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZVwiLFxuICAgIFwiZ2V0X2gyMjVfYWRkclwiLFxuICAgIFwicmFzX2hlbHBcIixcbiAgICBcInE5MzFfaGVscFwiLFxuICAgIFwiaDI0NV9oZWxwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEguMzIzIGNvbm50cmFjayBoZWxwZXIncyBBU04uMSBpbnRlZ2VyIGRlY29kZXIgKG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jKSB3aGVyZSBnZXRfdWludCgpIGFkdmFuY2VkIHRoZSBiaXRzdHJlYW0gcG9pbnRlciBhbmQgZGVjb2RlX2ludCgpIGFkdmFuY2VkIGl0IGFnYWluLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmlsaXR5IGFuZCBwYXJzaW5nIGxvZ2ljIGZvciBILjMyMy9RLjkzMS9SQVMgbmV0d29yayB0cmFmZmljIGluIHRoZSBOZXRmaWx0ZXIgc3Vic3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkZTc4YzdhMGI3ZGJlZDU1MjJmMDBmMjRlMmMxN2Y1MmUxYzAyMzkxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDI6MDI6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXG5pbmRleCA2ODMwYzlkYTM1MDdjLi5hNTEyNzVjYzRkMGY2IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXG5AQCAtMzM2LDggKzMzNiw5IEBAIHN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXG4gXHRcdFx0dW5zaWduZWQgaW50IHYgPSBnZXRfdWludChicywgbGVuKSArIGYtXHUwMDNlbGI7XG4gXHRcdFx0UFJJTlQoXCIgPSAldVwiLCB2KTtcbiBcdFx0XHQqKCh1bnNpZ25lZCBpbnQgKikoYmFzZSArIGYtXHUwMDNlb2Zmc2V0KSkgPSB2O1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGJzLVx1MDAzZWN1ciArPSBsZW47XG4gXHRcdH1cbi1cdFx0YnMtXHUwMDNlY3VyICs9IGxlbjtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFVOQ086XG4gXHRcdEJZVEVfQUxJR04oYnMpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDI6NTIuNDQ2MzEwMzYzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA3MjIyMDA4MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBwbGF5aW5nIHRoZSByb2xlIG9mIHRoZSBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEguMzIzIEFTTi4xIERlY29kZXIgUGF0Y2gqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoaXMgcGF0Y2guIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUuIFRoZSBmaWxlIG1lbnRpb25lZCwgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCwgaXMgd2hlcmUgdGhlIEguMzIzIEFTTi4xIGRlY29kaW5nIGxvZ2ljIGxpdmVzIGZvciBuZXRmaWx0ZXIncyBjb25uZWN0aW9uIHRyYWNraW5nLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBgZGVjb2RlX2ludGAgZnVuY3Rpb24gd2l0aGluIHRoYXQgZmlsZS4gVGhhdCBmdW5jdGlvbiBpcyBjbGVhcmx5IHJlc3BvbnNpYmxlIGZvciBkZWNvZGluZyBpbnRlZ2VyIHZhbHVlcyBlbmNvZGVkIHVzaW5nIEFTTi4xLlxuXG5MZXQncyBwdWxsIHVwIHRoZSBmaWxlIGNvbnRlbnQgdXNpbmcgYHJlYWQtZmlsZWAgaW4gdGhlIGFwcHJvcHJpYXRlIHNvdXJjZSBjb2RlIGZvbGRlci4gSGF2aW5nIHRoZSBjb250ZXh0IGZyb20gdGhlIGNvbXBsZXRlIHNvdXJjZSBmaWxlIHdpbGwgYmUgdGhlIG1vc3QgdXNlZnVsIHdheSB0byBleHBsb3JlIHRoZSBzaXR1YXRpb24gaGVyZSwgYmVjYXVzZSBJJ20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgdGhpcyBpbnRlZ2VyIGRlY29kaW5nIGlzIGltcGxlbWVudGVkLCB3aGF0IGNoZWNrcyBhcmUgcHJlc2VudCwgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgQVNOLjEgcGFyc2luZyBwcm9jZXNzLiBBbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgZXNwZWNpYWxseSBpbnRlZ2VyLXJlbGF0ZWQgb25lcywgd291bGQgYmUgZXhwb3NlZCBieSB0aGVzZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTMyLCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowMzowMy4xNjg1MTQwNTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTA6XFx0fVxcbiAzMTE6XFx0XFxuIDMxMjpcXHRzdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbiAzMTM6XFx0ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4gMzE0OlxcdHtcXG4gMzE1OlxcdFxcdHVuc2lnbmVkIGludCBsZW47XFxuIDMxNjpcXHRcXG4gMzE3OlxcdFxcdFBSSU5UKFxcXCIlKnMlc1xcXCIsIGxldmVsICogVEFCX1NJWkUsIFxcXCIgXFxcIiwgZi1cXHUwMDNlbmFtZSk7XFxuIDMxODpcXHRcXG4gMzE5OlxcdFxcdHN3aXRjaCAoZi1cXHUwMDNlc3opIHtcXG4gMzIwOlxcdFxcdGNhc2UgQllURTpcXHRcXHQvKiBSYW5nZSA9PSAyNTYgKi9cXG4gMzIxOlxcdFxcdFxcdEJZVEVfQUxJR04oYnMpO1xcbiAzMjI6XFx0XFx0XFx0YnMtXFx1MDAzZWN1cisrO1xcbiAzMjM6XFx0XFx0XFx0YnJlYWs7XFxuIDMyNDpcXHRcXHRjYXNlIFdPUkQ6XFx0XFx0LyogMjU3IFxcdTAwM2M9IFJhbmdlIFxcdTAwM2M9IDY0SyAqL1xcbiAzMjU6XFx0XFx0XFx0QllURV9BTElHTihicyk7XFxuIDMyNjpcXHRcXHRcXHRicy1cXHUwMDNlY3VyICs9IDI7XFxuIDMyNzpcXHRcXHRcXHRicmVhaztcXG4gMzI4OlxcdFxcdGNhc2UgQ09OUzpcXHRcXHQvKiA2NEsgXFx1MDAzYyBSYW5nZSBcXHUwMDNjIDRHICovXFxuIDMyOTpcXHRcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMikpXFxuIDMzMDpcXHRcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gMzMxOlxcdFxcdFxcdGxlbiA9IGdldF9iaXRzKGJzLCAyKSArIDE7XFxuIDMzMjpcXHRcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgbGVuLCAwKSlcXG4gMzMzOlxcdFxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbiAzMzQ6XFx0XFx0XFx0QllURV9BTElHTihicyk7XFxuIDMzNTpcXHRcXHRcXHRpZiAoYmFzZSBcXHUwMDI2XFx1MDAyNiAoZi1cXHUwMDNlYXR0ciBcXHUwMDI2IERFQ09ERSkpIHtcXHQvKiB0aW1lVG9MaXZlICovXFxuIDMzNjpcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgdiA9IGdldF91aW50KGJzLCBsZW4pICsgZi1cXHUwMDNlbGI7XFxuIDMzNzpcXHRcXHRcXHRcXHRQUklOVChcXFwiID0gJXVcXFwiLCB2KTtcXG4gMzM4OlxcdFxcdFxcdFxcdCooKHVuc2lnbmVkIGludCAqKShiYXNlICsgZi1cXHUwMDNlb2Zmc2V0KSkgPSB2O1xcbiAzMzk6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMzQwOlxcdFxcdFxcdFxcdGJzLVxcdTAwM2VjdXIgKz0gbGVuO1xcbiAzNDE6XFx0XFx0XFx0fVxcbiAzNDI6XFx0XFx0XFx0YnJlYWs7XFxuIDM0MzpcXHRcXHRjYXNlIFVOQ086XFxuIDM0NDpcXHRcXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG4gMzQ1OlxcdFxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAyLCAwKSlcXG4gMzQ2OlxcdFxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbiAzNDc6XFx0XFx0XFx0bGVuID0gZ2V0X2xlbihicyk7XFxuIDM0ODpcXHRcXHRcXHRicy1cXHUwMDNlY3VyICs9IGxlbjtcXG4gMzQ5OlxcdFxcdFxcdGJyZWFrO1xcbiAzNTA6XFx0XFx0ZGVmYXVsdDpcXHRcXHQvKiAyIFxcdTAwM2M9IFJhbmdlIFxcdTAwM2M9IDI1NSAqL1xcbiAzNTE6XFx0XFx0XFx0SU5DX0JJVFMoYnMsIGYtXFx1MDAzZXN6KTtcXG4gMzUyOlxcdFxcdFxcdGJyZWFrO1xcbiAzNTM6XFx0XFx0fVxcbiAzNTQ6XFx0XFxuIDM1NTpcXHRcXHRQUklOVChcXFwiXFxcXG5cXFwiKTtcXG4gMzU2OlxcdFxcbiAzNTc6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxcbiAzNTg6XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDM1OTpcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9OT05FO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowMzowMy4xNjg2MDQ1ODVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDU1Njg1MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCBJJ20gbG9va2luZyBhdDpcblxuKipEaXZpbmcgaW50byBgZ2V0X3VpbnRgIGluIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGBnZXRfdWludGAgZnVuY3Rpb24gaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCBpcyBhY3R1YWxseSBkb2luZy4gSSdtIGFzc3VtaW5nLCBnaXZlbiB0aGUgZmlsZW5hbWUsIHRoYXQgdGhpcyBjb2RlIGlzIGNydWNpYWwgZm9yIHBhcnNpbmcgSC4zMjMgQVNOLjEgZGF0YSB3aXRoaW4gdGhlIE5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIGZyYW1ld29yay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0J3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBleHRyYWN0aW5nIHVuc2lnbmVkIGludGVnZXIgdmFsdWVzIGZyb20gYSBiaXRzdHJlYW0gb3IgYnl0ZSBhcnJheSBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIEFTTi4xIGVuY29kaW5nIHJ1bGVzLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IG1lY2hhbmlzbSBpdCB1c2VzOiBJcyBpdCBoYW5kbGluZyBCRVIgKEJhc2ljIEVuY29kaW5nIFJ1bGVzKSwgREVSIChEaXN0aW5ndWlzaGVkIEVuY29kaW5nIFJ1bGVzKSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFdoYXQgc2l6ZSBpbnRlZ2VyIGRvZXMgaXQgZXhwZWN0IOKAkyA4LWJpdCwgMTYtYml0LCAzMi1iaXQsIG9yIHBvdGVudGlhbGx5IHZhcmlhYmxlLWxlbmd0aD8gSXMgaXQgaGFuZGxpbmcgYW55IGxlYWRpbmcgbGVuZ3RoIGluZGljYXRvcnM/IFdoYXQgYWJvdXQgYW55IHBvdGVudGlhbCBwYWRkaW5nIG9yIHRhZyBieXRlcz8gS25vd2luZyB0aGVzZSBkZXRhaWxzIHdpbGwgYmUgY3JpdGljYWwgaW4gdW5kZXJzdGFuZGluZyBob3cgaXQgaGFuZGxlcyB0aGUgcGFyc2luZyBvZiBILjMyMyBzaWduYWxpbmcuIEknbSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMsIG92ZXJmbG93IGNvbmRpdGlvbnMsIG9yIGludmFsaWQgZW5jb2RpbmdzLiBUaGlzIHdpbGwgdGVsbCBtZSBob3cgcm9idXN0IGl0IGlzLiBJJ2xsIG5lZWQgdG8gdHJhY2UgaXRzIGlucHV0cyBhbmQgb3V0cHV0cyB3aXRoaW4gdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGltcGxlbWVudGF0aW9uLiBVbHRpbWF0ZWx5LCB0aGlzIHdpbGwgZ2l2ZSBtZSBpbnNpZ2h0cyBpbnRvIGhvdyBILjMyMyBzaWduYWxpbmcgaXMgZGlzc2VjdGVkIGFuZCBpdHMgcmVsZXZhbnQgaW5mb3JtYXRpb24gdXNlZCBpbiBjb25uZWN0aW9uIHRyYWNraW5nIGRlY2lzaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI3MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDM6MDkuMjI0MjkzMjM2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzI4NjM3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfdWludFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0xMDQ9c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0bWFwKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTA1OnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VpbnQoc3RydWN0IGJpdHN0ciAqYnMsIGludCBiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMDYtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0yMTE9c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0bWFwKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTI0OS0gKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoyNTA6c3RhdGljIHVuc2lnbmVkIGludCBnZXRfdWludChzdHJ1Y3QgYml0c3RyICpicywgaW50IGIpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjUxLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTMxMj1zdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzM1LVxcdFxcdGlmIChiYXNlIFxcdTAwMjZcXHUwMDI2IChmLVxcdTAwM2VhdHRyIFxcdTAwMjYgREVDT0RFKSkge1xcdC8qIHRpbWVUb0xpdmUgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozMzY6XFx0XFx0XFx0dW5zaWduZWQgaW50IHYgPSBnZXRfdWludChicywgbGVuKSArIGYtXFx1MDAzZWxiO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMzNy1cXHRcXHRcXHRQUklOVChcXFwiID0gJXVcXFwiLCB2KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM9NjgwPXZvaWQgbmZfY29ubnRyYWNrX3Byb3RvX3Blcm5ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNjk2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6Njk3Om1vZHVsZV9wYXJhbV9jYWxsKGhhc2hzaXplLCBuZl9jb25udHJhY2tfc2V0X2hhc2hzaXplLCBwYXJhbV9nZXRfdWludCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTY5OC1cXHRcXHQgIFxcdTAwMjZuZl9jb25udHJhY2tfaHRhYmxlX3NpemUsIDA2MDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowMzowOS4zOTE1ODU5NjlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTEyOTAwMzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgYGdldF91aW50YCBmdW5jdGlvbiBpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgLlxuXG4qKkRpdmluZyBpbnRvIGBnZXRfdWludGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBwdWxsIHVwIHRoYXQgYGdldF91aW50YCBmdW5jdGlvbiBpbiB0aGUgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBjb2RlLiBTcGVjaWZpY2FsbHksIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AuIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHRoZSBBU04uMSBwYXJzaW5nIGNvbnRleHQgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcyB3aXRoaW4uIENvbnNpZGVyaW5nIHRoZSBsb3ctbGV2ZWwgQVNOLjEgZW5jb2RpbmcgcHJpbmNpcGxlcywgdGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJseSB0YXNrZWQgd2l0aCBleHRyYWN0aW5nIGFuIHVuc2lnbmVkIGludGVnZXIgdmFsdWUgZnJvbSBhIGJ1ZmZlciBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIElUVS1UIFguNjkwIChERVIvQkVSKSBvciB3aGF0ZXZlciBzdWJzZXQgdGhleSBhcmUgdXNpbmcuIEkgZXhwZWN0IHRvIHNlZSBpdCBoYW5kbGluZyB2YXJpYWJsZS1sZW5ndGggZW5jb2RpbmdzLCBwb3RlbnRpYWxseSBjaGVja2luZyBmb3IgdGhlIG1pbmltdW0gbnVtYmVyIG9mIG9jdGV0cyByZXF1aXJlZCB0byByZXByZXNlbnQgdGhlIHZhbHVlLCBhbmQgbGlrZWx5IGRlYWxpbmcgd2l0aCBsZWFkaW5nIHplcm8gYnl0ZXMgdGhhdCBtaWdodCBiZSBwcmVzZW50IGluIHRoZSBlbmNvZGVkIHJlcHJlc2VudGF0aW9uIGRlcGVuZGluZyBvbiB3aGljaCBcInRhZ1wiIGNsYXNzIHRoZSBpbnRlZ2VyIGlzIGJlaW5nIGVuY29kZWQgd2l0aC4gVGhpcyBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgaW4gdGVybXMgb2YgaG93IGl0IGV4dHJhY3RzIGEgdmFsdWUgYW5kIHdoZXRoZXIgaXQgbWlnaHQgYmUgdnVsbmVyYWJsZSB0byB0aGluZ3MgbGlrZSBvdmVybG9uZyBlbmNvZGluZ3MuIEknbGwgbmVlZCB0byBjaGVjayBob3cgaXQgaGFuZGxlcyBjYXNlcyB3aGVyZSB0aGUgYnVmZmVyIG1pZ2h0IGJlIHRydW5jYXRlZCBvciBpbnZhbGlkLCBhbmQgbWFrZSBzdXJlIHRoYXQgaXQncyByb2J1c3QgaW4gdGhhdCBjb250ZXh0LiBJIHdhbnQgdG8gc2VlIGlmIHRoZXkncmUgdmFsaWRhdGluZyB0aGUgbGVuZ3RoIGZpZWxkIHByb3Blcmx5IGFuZCBob3cgdGhleSdyZSBoYW5kbGluZyBwb3RlbnRpYWwgb3ZlcmZsb3dzIOKAkyB0aGF0J3Mgb2Z0ZW4gYSBzb3VyY2Ugb2YgdnVsbmVyYWJpbGl0aWVzIHdoZW4gZGVhbGluZyB3aXRoIHVuc2lnbmVkIGludGVnZXJzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgb2ZmLWJ5LW9uZSBlcnJvcnMgaW4gdGhlaXIgaW5kZXhpbmcgYXMgd2VsbC4gTGV0J3Mgc2VlIGhvdyB3ZWxsIGl0J3MgaW1wbGVtZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNTUsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowMzoxMS45MDQ0ODkzNTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDU6XFx0fVxcbiAyNDY6XFx0XFxuIDI0NzpcXHQvKlxcbiAyNDg6XFx0ICogQXNzdW1lIGJzIGlzIGFsaWduZWQgYW5kIHNpemVvZih1bnNpZ25lZCBpbnQpID09IDRcXG4gMjQ5OlxcdCAqL1xcbiAyNTA6XFx0c3RhdGljIHVuc2lnbmVkIGludCBnZXRfdWludChzdHJ1Y3QgYml0c3RyICpicywgaW50IGIpXFxuIDI1MTpcXHR7XFxuIDI1MjpcXHRcXHR1bnNpZ25lZCBpbnQgdiA9IDA7XFxuIDI1MzpcXHRcXG4gMjU0OlxcdFxcdHN3aXRjaCAoYikge1xcbiAyNTU6XFx0XFx0Y2FzZSA0OlxcbiAyNTY6XFx0XFx0XFx0diB8PSAqYnMtXFx1MDAzZWN1cisrO1xcbiAyNTc6XFx0XFx0XFx0diBcXHUwMDNjXFx1MDAzYz0gODtcXG4gMjU4OlxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiAyNTk6XFx0XFx0Y2FzZSAzOlxcbiAyNjA6XFx0XFx0XFx0diB8PSAqYnMtXFx1MDAzZWN1cisrO1xcbiAyNjE6XFx0XFx0XFx0diBcXHUwMDNjXFx1MDAzYz0gODtcXG4gMjYyOlxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiAyNjM6XFx0XFx0Y2FzZSAyOlxcbiAyNjQ6XFx0XFx0XFx0diB8PSAqYnMtXFx1MDAzZWN1cisrO1xcbiAyNjU6XFx0XFx0XFx0diBcXHUwMDNjXFx1MDAzYz0gODtcXG4gMjY2OlxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiAyNjc6XFx0XFx0Y2FzZSAxOlxcbiAyNjg6XFx0XFx0XFx0diB8PSAqYnMtXFx1MDAzZWN1cisrO1xcbiAyNjk6XFx0XFx0XFx0YnJlYWs7XFxuIDI3MDpcXHRcXHR9XFxuIDI3MTpcXHRcXHRyZXR1cm4gdjtcXG4gMjcyOlxcdH1cXG4gMjczOlxcdFxcbiAyNzQ6XFx0c3RhdGljIGludCBkZWNvZGVfbnVsKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4gMjc1OlxcdCAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuIDI3NjpcXHR7XFxuIDI3NzpcXHRcXHRQUklOVChcXFwiJSpzJXNcXFxcblxcXCIsIGxldmVsICogVEFCX1NJWkUsIFxcXCIgXFxcIiwgZi1cXHUwMDNlbmFtZSk7XFxuIDI3ODpcXHRcXG4gMjc5OlxcdFxcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XFxuIDI4MDpcXHR9XFxuIDI4MTpcXHRcXG4gMjgyOlxcdHN0YXRpYyBpbnQgZGVjb2RlX2Jvb2woc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbiAyODM6XFx0ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuIDI4NDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjAzOjExLjkwNDU4NzUwMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0OTg0MTQ5OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVjb2RpbmcgRGlsZW1tYSBhbmQgQ29ubnRyYWNrIENvbnVuZHJ1bSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhhdCBgZ2V0X3VpbnRgIGZ1bmN0aW9u4oCmIEkgc2VlIGl0J3MgaW5jcmVtZW50aW5nIGBicy1cdTAwM2VjdXJgIGJ5IGBsZW5gIGJ5dGVzLiBPa2F5LCBzdGFuZGFyZCBiZWhhdmlvciwgbm90aGluZyB1bmV4cGVjdGVkIHRoZXJlLiBCdXQsIGxvb2tpbmcgYmFjayBhdCB0aGUgb3JpZ2luYWwgY29kZS4uLiBpZiBgYmFzZSBcdTAwMjZcdTAwMjYgKGYtXHUwMDNlYXR0ciBcdTAwMjYgREVDT0RFKWAgaXMgdHJ1ZSwgYGdldF91aW50YCBhbHJlYWR5IGFkdmFuY2VkIGBicy1cdTAwM2VjdXJgISBUaGVuLCBpbW1lZGlhdGVseSBhZnRlciwgYGJzLVx1MDAzZWN1ciArPSBsZW5gIGhhcHBlbnMgYWdhaW4hIFRoYXQncyBhIGNsYXNzaWMgZG91YmxlIGluY3JlbWVudCBidWcsIGFuZCBpdCdzIHByb2JhYmx5IGdvaW5nIHRvIGNhdXNlIHNvbWUgc2VyaW91cyBpc3N1ZXMgZG93biB0aGUgbGluZS4gSWYgdGhlIGNvbmRpdGlvbmFsIGlzbid0IHRydWUsIHRoZW4gYGdldF91aW50YCBpc24ndCBjYWxsZWQsIHNvIG9ubHkgdGhlIGBicy1cdTAwM2VjdXIgKz0gbGVuYCBzaG91bGQgaGFwcGVuLlxuXG5TbywgaWYgSSBjaGFuZ2UgdGhlIGxvZ2ljIHRvIHRoZSBzZWNvbmQgY29kZSBibG9jaywgdGhhdCBzaG91bGQgZml4IHRoZSBpc3N1ZS4gVGhlIG5ldyBjb2RlIGJsb2NrIG9ubHkgaW5jcmVtZW50cyB3aGVuIHRoZSBjb25kaXRpb25hbCBzdGF0ZW1lbnQgaXMgZmFsc2UsIGFuZCBvdGhlcndpc2UgcmVsaWVzIG9uIGBnZXRfdWludGAuXG5cblRoaXMgYWZmZWN0cyBBU04uMSBkZWNvZGluZywgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGEgcmVhbCBidWcgaW4gdGhlIEguMzIzIGNvbm50cmFjayBoZWxwZXIuIFRoaXMgY291bGQgYmUgY2F1c2luZyBhbGwgc29ydHMgb2YgdW5leHBlY3RlZCBiZWhhdmlvci5cblxuTm93LCBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciB2aWV3LiBJJ20gZ29pbmcgdG8gZGlnIGludG8gaG93IGBuZl9jb25udHJhY2tfaDMyM2Agd29ya3MuIEhvdyBpcyBpdCBlbmFibGVkPyBXaGF0IHN5bWJvbHMgYXJlIGV4cG9ydGVkPyBXaGF0IEtjb25maWcgb3B0aW9ucyBhcmUgcmVsZXZhbnQgaGVyZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoaXMgZml4LlxuXG5UaW1lIHRvIHN0YXJ0IGdyZXBwaW5nLiBJJ2xsIHNlYXJjaCBmb3IgYG5mX2Nvbm50cmFja19oMzIzX2FzbjFgIGFuZCBhbHNvIGxvb2sgZm9yIGNhbGxlcnMgb2YgZGVjb2RlIGZ1bmN0aW9ucyBpbiBgbmV0L25ldGZpbHRlci9gLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTg3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDM6MTUuNDAzMDA0MzMzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Njg1NDk0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEZWNvZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MTA1PXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VpbnQoc3RydWN0IGJpdHN0ciAqYnMsIGludCBiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMDYtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTA3Oi8qIERlY29kZXIgRnVuY3Rpb25zICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTA4LXN0YXRpYyBpbnQgZGVjb2RlX251bChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0xMTk9c3RhdGljIGludCBkZWNvZGVfY2hvaWNlKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMjAtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTIxOi8qIERlY29kZXIgRnVuY3Rpb25zIFZlY3RvciAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEyMi10eXBlZGVmIGludCAoKmRlY29kZXJfdCkoc3RydWN0IGJpdHN0ciAqLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqLCBjaGFyICosIGludCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTIzOnN0YXRpYyBjb25zdCBkZWNvZGVyX3QgRGVjb2RlcnNbXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMjQtXFx0ZGVjb2RlX251bCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTUxMT1zdGF0aWMgaW50IGRlY29kZV9zZXEoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTIwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjUyMTpcXHQvKiBEZWNvZGU/ICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTIyLVxcdGJhc2UgPSAoYmFzZSBcXHUwMDI2XFx1MDAyNiAoZi1cXHUwMDNlYXR0ciBcXHUwMDI2IERFQ09ERSkpID8gYmFzZSArIGYtXFx1MDAzZW9mZnNldCA6IE5VTEw7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01MzctXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTM4OlxcdC8qIERlY29kZSB0aGUgcm9vdCBjb21wb25lbnRzICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTM5LVxcdGZvciAoaSA9IG9wdCA9IDAsIHNvbiA9IGYtXFx1MDAzZWZpZWxkczsgaSBcXHUwMDNjIGYtXFx1MDAzZWxiOyBpKyssIHNvbisrKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01NTAtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTUxOlxcdFxcdC8qIERlY29kZSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU1Mi1cXHRcXHRpZiAoc29uLVxcdTAwM2VhdHRyIFxcdTAwMjYgT1BFTikge1xcdC8qIE9wZW4gZmllbGQgKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU2NS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1NjY6XFx0XFx0XFx0LyogRGVjb2RlICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NTY3OlxcdFxcdFxcdGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cXHUwMDNldHlwZV0pIChicywgc29uLCBiYXNlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU2OC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGxldmVsICsgMSkpIFxcdTAwM2NcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU3My1cXHRcXHRcXHRicy1cXHUwMDNlYml0ID0gMDtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1NzQ6XFx0XFx0fSBlbHNlIGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cXHUwMDNldHlwZV0pIChicywgc29uLCBiYXNlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU3NS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgbGV2ZWwgKyAxKSkgXFx1MDAzY1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTk3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjU5ODpcXHQvKiBEZWNvZGUgdGhlIGV4dGVuc2lvbiBjb21wb25lbnRzICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTk5LVxcdGZvciAob3B0ID0gMDsgb3B0IFxcdTAwM2MgYm1wMl9sZW47IG9wdCsrLCBpKyssIHNvbisrKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02MzItXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NjMzOlxcdFxcdGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cXHUwMDNldHlwZV0pIChicywgc29uLCBiYXNlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTYzNC1cXHRcXHRcXHRcXHRcXHRcXHQgIGxldmVsICsgMSkpIFxcdTAwM2NcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTY0ND1zdGF0aWMgaW50IGRlY29kZV9zZXFvZihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02NTMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NjU0OlxcdC8qIERlY29kZT8gKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02NTUtXFx0YmFzZSA9IChiYXNlIFxcdTAwMjZcXHUwMDI2IChmLVxcdTAwM2VhdHRyIFxcdTAwMjYgREVDT0RFKSkgPyBiYXNlICsgZi1cXHUwMDNlb2Zmc2V0IDogTlVMTDtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02NTYtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NjU3OlxcdC8qIERlY29kZSBpdGVtIGNvdW50ICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNjU4LVxcdHN3aXRjaCAoZi1cXHUwMDNlc3opIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY5My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo2OTQ6XFx0LyogRGVjb2RlIG5lc3RlZCBmaWVsZCAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY5NS1cXHRzb24gPSBmLVxcdTAwM2VmaWVsZHM7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MTMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzE0OlxcdFxcdFxcdGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cXHUwMDNldHlwZV0pIChicywgc29uLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTcxNS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGkgXFx1MDAzY1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzI0LVxcdFxcdH0gZWxzZVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjcyNTpcXHRcXHRcXHRpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXFx1MDAzZXR5cGVdKSAoYnMsIHNvbixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MjYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBpIFxcdTAwM2NcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTc0MD1zdGF0aWMgaW50IGRlY29kZV9jaG9pY2Uoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzQ5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjc1MDpcXHQvKiBEZWNvZGU/ICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzUxLVxcdGJhc2UgPSAoYmFzZSBcXHUwMDI2XFx1MDAyNiAoZi1cXHUwMDNlYXR0ciBcXHUwMDI2IERFQ09ERSkpID8gYmFzZSArIGYtXFx1MDAzZW9mZnNldCA6IE5VTEw7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzUyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjc1MzpcXHQvKiBEZWNvZGUgdGhlIGNob2ljZSBpbmRleCBudW1iZXIgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03NTQtXFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDEpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODA3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgwODpcXHRcXHRpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXFx1MDAzZXR5cGVdKSAoYnMsIHNvbiwgYmFzZSwgbGV2ZWwgKyAxKSkgXFx1MDAzY1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgwOS1cXHRcXHQgICAgSDMyM19FUlJPUl9OT05FKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODEzLVxcdFxcdGJzLVxcdTAwM2ViaXQgPSAwO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgxNDpcXHR9IGVsc2UgaWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVxcdTAwM2V0eXBlXSkgKGJzLCBzb24sIGJhc2UsIGxldmVsICsgMSkpIFxcdTAwM2NcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MTUtXFx0XFx0ICAgSDMyM19FUlJPUl9OT05FKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODIwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgyMTppbnQgRGVjb2RlUmFzTWVzc2FnZSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeiwgUmFzTWVzc2FnZSAqcmFzKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgyMi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MzUtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODM2OnN0YXRpYyBpbnQgRGVjb2RlSDMyM19Vc2VySW5mb3JtYXRpb24odW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBjaGFyICpiZWcsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODM3LVxcdFxcdFxcdFxcdCAgICAgIHNpemVfdCBzeiwgSDMyM19Vc2VySW5mb3JtYXRpb24gKnV1aWUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NTItXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODUzOmludCBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODU0LVxcdFxcdFxcdFxcdFxcdCBNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UgKlxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODcwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjg3MTppbnQgRGVjb2RlUTkzMSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeiwgUTkzMSAqcTkzMSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NzIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtOTA3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjkwODpcXHQvKiBEZWNvZGUgSW5mb3JtYXRpb24gRWxlbWVudHMgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy05MDktXFx0d2hpbGUgKHN6IFxcdTAwM2UgMCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtOTIyLVxcdFxcdFxcdFxcdGJyZWFrO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjkyMzpcXHRcXHRcXHRyZXR1cm4gRGVjb2RlSDMyM19Vc2VySW5mb3JtYXRpb24oYnVmLCBwLCBsZW4sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtOTI0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnE5MzEtXFx1MDAzZVVVSUUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9NTI5PXN0YXRpYyBpbnQgaDI0NV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtNTUxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjU1MjpcXHRcXHQvKiBEZWNvZGUgSC4yNDUgc2lnbmFsICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NTUzOlxcdFxcdHJldCA9IERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZShkYXRhLCBkYXRhbGVuLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTU1NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2bXNjbSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xMDg5PXN0YXRpYyBpbnQgcTkzMV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTExMS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxMTEyOlxcdFxcdC8qIERlY29kZSBRLjkzMSBzaWduYWwgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxMTEzOlxcdFxcdHJldCA9IERlY29kZVE5MzEoZGF0YSwgZGF0YWxlbiwgXFx1MDAyNnE5MzEpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTExMTQtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTE2NjQ9c3RhdGljIGludCByYXNfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE2ODItXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTY4MzpcXHQvKiBEZWNvZGUgUkFTIG1lc3NhZ2UgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNjg0OlxcdHJldCA9IERlY29kZVJhc01lc3NhZ2UoZGF0YSwgZGF0YWxlbiwgXFx1MDAyNnJhcyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTY4NS1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowMzoxNS40NTk4NjMwM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MTM4Mjk3MjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgbmZfY29ubnRyYWNrX2gzMjMgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdC4gQmVmb3JlIEkgZGl2ZSBpbnRvIGFueXRoaW5nIGRlZXBlciwgSSBuZWVkIHRvIHZlcmlmeSBob3cgYG5mX2Nvbm50cmFja19oMzIzYCBpcyBhY3R1YWxseSBidWlsdCBpbnRvIHRoZSBrZXJuZWwuIFRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50cyBhcmUgdGhlIEtjb25maWcgYW5kIE1ha2VmaWxlLiBJIHdhbnQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaXRzIGJ1aWxkIHN0YXR1cyAoYnVpbHQtaW4sIG1vZHVsYXIsIG9yIGRpc2FibGVkKSBhbmQgZGVwZW5kZW5jaWVzLCBzbyBJIGtub3cgd2hldGhlciB0aGUgcHJvYmxlbSBJJ20gdHJ5aW5nIHRvIGZpeCBtaWdodCBiZSBhIGtlcm5lbCBjb25maWd1cmF0aW9uIGlzc3VlIG9yIHNvbWV0aGluZyBkZWVwZXIgaW4gdGhlIGNvZGUgb3IgbW9kdWxlIGxvYWRpbmcgcHJvY2Vzcy4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBpcyBmdW5kYW1lbnRhbCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgZXNwZWNpYWxseSBnaXZlbiB0aGUgaGlzdG9yeSBvZiBILjMyMyBzdXBwb3J0IGluIHRoZSBrZXJuZWwuIFRoaXMgaW5pdGlhbCBjaGVjayBpcyBhIGJhc2ljIHNhbml0eSBjaGVjaywgYnV0IGEgY3JpdGljYWwgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzgzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDM6MjMuNTk4MTYyMDkzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQ1NzM5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25udHJhY2tfaDMyM1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM5PW9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LX0hFTFBFUikgKz0gbmZuZXRsaW5rX2N0aGVscGVyLm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNDEtIyBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnNcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjQyOm5mX2Nvbm50cmFja19oMzIzLW9ianMgOj0gbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5vIG5mX2Nvbm50cmFja19oMzIzX2FzbjEub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNDMtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTQ1PW9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfRlRQKSArPSBuZl9jb25udHJhY2tfZnRwLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjQ2Om9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfSDMyMykgKz0gbmZfY29ubnRyYWNrX2gzMjMub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNDctb2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19JUkMpICs9IG5mX2Nvbm50cmFja19pcmMub1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTQtI2VuZGlmXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTU6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmhcXHUwMDNlXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTYtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0xMjM9c3RhdGljIGNvbnN0IGRlY29kZXJfdCBEZWNvZGVyc1tdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTQwLSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjE0MTojaW5jbHVkZSBcXFwibmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuY1xcXCJcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xNDItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0zNS0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfem9uZXMuaFxcdTAwM2VcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzozNjojaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmhcXHUwMDNlXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMzctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYz0xNzU1PXN0YXRpYyB2b2lkIF9fZXhpdCBoMzIzX2hlbHBlcl9leGl0KHZvaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzYzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE3NjQ6c3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19oMzIzX2Zpbmkodm9pZClcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzY1LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTE3NzAtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTc3MTpzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfaDMyM19pbml0KHZvaWQpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTc3Mi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzg5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjE3OTA6bW9kdWxlX2luaXQobmZfY29ubnRyYWNrX2gzMjNfaW5pdCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTc5MTptb2R1bGVfZXhpdChuZl9jb25udHJhY2tfaDMyM19maW5pKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzkyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowMzoyMy42NDg2MjU5NzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcyNDg3NDYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBLY29uZmlnIGZvciBILjMyMyBDb25uZWN0aW9uIFRyYWNraW5nKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSByaWdodCBpbi4gVGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyBtZW50YWxseSBnb2luZyB0aHJvdWdoIHRoZSBwb3RlbnRpYWwgaXNzdWVzLiBJJ20gaGl0dGluZyBgTkZfQ09OTlRSQUNLX0gzMjNgIGluIGBLY29uZmlnYC4gSW1tZWRpYXRlbHksIEknbSB0aGlua2luZyBhYm91dCBkZXBlbmRlbmN5IHJlc29sdXRpb24uIFdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCB0byBlbmFibGUgdGhpcyBzcGVjaWZpYyBjb25uZWN0aW9uIHRyYWNraW5nPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY29uZmxpY3RzIEkgbmVlZCB0byBmbGFnIHJpZ2h0IGF3YXk/IEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgcG90ZW50aWFsIG5lZWQgdG8gdHJhY2UgdGhlIGNvbmZpZ3VyYXRpb24ncyByZWxhdGlvbnNoaXAgdG8gbW9kdWxlcyBhbmQgcmVsZXZhbnQga2VybmVsIHN1YnN5c3RlbXMsIGFuZCBjaGVja2luZyB0aGUgZGVwZW5kZW5jaWVzIGluIGNhc2UgaXQgbmVlZHMgb3RoZXIgbW9kdWxlcyBsb2FkZWQgZm9yIGl0IHRvIHdvcmsuIEnigJltIGFsc28gYXNzdW1pbmcgdGhhdCB0aGVyZSBpcyBhIGdvb2QgcmVhc29uIGZvciB0aGlzIHNldHRpbmcgdG8gYmUgY29uc2lkZXJlZC4gSSBuZWVkIHRvIGZpZ3VyZSB0aGF0IG91dCBiZWZvcmUgY29udGludWluZy4gSSB3aWxsIGNoZWNrIGZvciBhbnkgcmVsYXRlZCBjb2RlIGluIHRoZSBuZXRmaWx0ZXIgbW9kdWxlIHRvby4gTXkgaW1tZWRpYXRlIG5lZWQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBCb29sZWFuIGZsYWcsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggd2l0aCBtdWx0aXBsZSBzZWxlY3RhYmxlIG9wdGlvbnM/IE15IHRob3VnaHQgcHJvY2VzcyBpbnZvbHZlcyB2aXN1YWxpemluZyB0aGUgYEtjb25maWdgIHN0cnVjdHVyZSwgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gYnVpbGQgdGltZXMsIGFuZCBhbnkgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGluY2x1ZGluZyB0aGlzIGZlYXR1cmUuIEl0J3MgYSBxdWljaywgZm9jdXNlZCBzY2FuLCBidXQgaXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHBvdGVudGlhbCBwaXRmYWxscyBiZWZvcmUgbWFraW5nIGFueSBkZWNpc2lvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTc0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDM6MjYuMzczNTAzNDY0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzY4NDg5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORl9DT05OVFJBQ0tfSDMyM1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9MjI3PWNvbmZpZyBORl9DT05OVFJBQ0tfRlRQXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjM4LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMzk6Y29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI0MC1cXHR0cmlzdGF0ZSBcXFwiSC4zMjMgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9NDU9b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19GVFApICs9IG5mX2Nvbm50cmFja19mdHAub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDY6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19IMzIzKSArPSBuZl9jb25udHJhY2tfaDMyMy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS00Ny1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0lSQykgKz0gbmZfY29ubnRyYWNrX2lyYy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjAzOjI2LjQyMTE5MTQ1MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTQxODk1MzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE5ldGZpbHRlciBLY29uZmlnKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIEknbSBmb2N1c2luZyBhcm91bmQgbGluZSAyMzkuIExldCdzIHNlZSB3aGF0J3MgYmVpbmcgY29uZmlndXJlZCB0aGVyZSwgcHJvYmFibHkgc29tZSBmZWF0dXJlIG9yIG1vZHVsZSByZWxhdGVkIHRvIE5ldGZpbHRlci4gR2l2ZW4gdGhlIGZpbGUgYW5kIG15IGV4cGVydGlzZSwgSSdtIGV4cGVjdGluZyB0byBzZWUgZGVwZW5kZW5jaWVzLCBwcm9tcHQgc3RyaW5ncywgYW5kIGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBkZWZpbmUgaG93IHRoaXMgcGFydGljdWxhciBOZXRmaWx0ZXIgYXNwZWN0IGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGVkIHdpdGhpbiB0aGUga2VybmVsLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSB1bmRlcmx5aW5nIHRlY2hub2xvZ2llcywgYW5kIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgbW9kdWxlcywgd2hpY2ggaXMgY3J1Y2lhbCBmb3Igb3ZlcmFsbCBzeXN0ZW0gc3RhYmlsaXR5LiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGhvdyB0aGlzIHJlbGF0ZXMgdG8gYW55IGhhcmR3YXJlIGFjY2VsZXJhdGlvbiwgb3IgYW55IG90aGVyIGZlYXR1cmVzIHRoYXQgbWlnaHQgYmUgYWRkZWQgdG8gdGhlIGtlcm5lbCBhbmQgaG93IHRoZXkgYXJlIGNvbmZpZ3VyZWQuIEknbSBhbnRpY2lwYXRpbmcgYSBjbGVhciBwaWN0dXJlIHRoYXQgd2lsbCBoZWxwIHRvIHNvbGlkaWZ5IG91ciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBicm9hZGVyIE5ldGZpbHRlciBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCBnb29kaWVzIGFyZSB0aGVyZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTExMDgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowMzoyOC41NjMwODg5OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIzNTpcXHRcXHQgIFRoaXMgaXMgRlRQIHN1cHBvcnQgb24gTGF5ZXIgMyBpbmRlcGVuZGVudCBjb25uZWN0aW9uIHRyYWNraW5nLlxcbiAyMzY6XFx0XFxuIDIzNzpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyMzg6XFx0XFxuIDIzOTpcXHRjb25maWcgTkZfQ09OTlRSQUNLX0gzMjNcXG4gMjQwOlxcdFxcdHRyaXN0YXRlIFxcXCJILjMyMyBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbiAyNDE6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gMjQyOlxcdFxcdGhlbHBcXG4gMjQzOlxcdFxcdCAgSC4zMjMgaXMgYSBWb0lQIHNpZ25hbGxpbmcgcHJvdG9jb2wgZnJvbSBJVFUtVC4gQXMgb25lIG9mIHRoZSBtb3N0XFxuIDI0NDpcXHRcXHQgIGltcG9ydGFudCBWb0lQIHByb3RvY29scywgaXQgaXMgd2lkZWx5IHVzZWQgYnkgdm9pY2UgaGFyZHdhcmUgYW5kXFxuIDI0NTpcXHRcXHQgIHNvZnR3YXJlIGluY2x1ZGluZyB2b2ljZSBnYXRld2F5cywgSVAgcGhvbmVzLCBOZXRtZWV0aW5nLCBPcGVuUGhvbmUsXFxuIDI0NjpcXHRcXHQgIEdub21lbWVldGluZywgZXRjLlxcbiAyNDc6XFx0XFxuIDI0ODpcXHRcXHQgIFdpdGggdGhpcyBtb2R1bGUgeW91IGNhbiBzdXBwb3J0IEguMzIzIG9uIGEgY29ubmVjdGlvbiB0cmFja2luZy9OQVRcXG4gMjQ5OlxcdFxcdCAgZmlyZXdhbGwuXFxuIDI1MDpcXHRcXG4gMjUxOlxcdFxcdCAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgUkFTLCBGYXN0IFN0YXJ0LCBILjI0NSBUdW5uZWxsaW5nLCBDYWxsXFxuIDI1MjpcXHRcXHQgIEZvcndhcmRpbmcsIFJUUC9SVENQIGFuZCBULjEyMCBiYXNlZCBhdWRpbywgdmlkZW8sIGZheCwgY2hhdCxcXG4gMjUzOlxcdFxcdCAgd2hpdGVib2FyZCwgZmlsZSB0cmFuc2ZlciwgZXRjLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlXFxuIDI1NDpcXHRcXHQgIHZpc2l0IGh0dHA6Ly9uYXRoMzIzLnNvdXJjZWZvcmdlLm5ldC8uXFxuIDI1NTpcXHRcXG4gMjU2OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI1NzpcXHRcXG4gMjU4OlxcdGNvbmZpZyBORl9DT05OVFJBQ0tfSVJDXFxuIDI1OTpcXHRcXHR0cmlzdGF0ZSBcXFwiSVJDIERDQyBwcm90b2NvbCBzdXBwb3J0IChvYnNvbGV0ZSlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjAzOjI4LjU2MzE5ODY5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0NDIyNzIzNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEguMzIzIENvbm5lY3Rpb24gVHJhY2tpbmcgTW9kdWxlIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYG5mX2Nvbm50cmFja19oMzIzYCBtb2R1bGUuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIG1vZHVsZSBpbnRlcmZhY2VzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIE5ldGZpbHRlciBmcmFtZXdvcmssIHNvIEknbGwgc3RhcnQgYnkgaWRlbnRpZnlpbmcgdGhlIGtleSBlbnRyeSBwb2ludHMgYW5kIGV4cG9ydGVkIHN5bWJvbHMuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGZvY3VzIG9uIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgIGFuZCBgbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jYC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgZnVuY3Rpb25zIG9yIHZhcmlhYmxlcyB0aGF0IGFyZW4ndCBkZWNsYXJlZCBgc3RhdGljYCBvciB0aGF0IGFyZSBvdGhlcndpc2UgZXhwb3J0ZWQsIGFzIHRob3NlIGFyZSB0aGUgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIGludGVyYWN0aW9uIHdpdGggdGhlIGtlcm5lbC4gSXTigJlzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHdoaWNoIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGZvciB0aGUga2VybmVsJ3MgdXNlLlxuXG5UbyBhc3Npc3Qgd2l0aCB0aGF0IGludmVzdGlnYXRpb24sIEknbGwgdGhlbiBleGFtaW5lIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZXM6IGBpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmhgIGFuZCBgaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaGAuIEknbSBob3BpbmcgdGhvc2Ugd2lsbCBjb250YWluIGRlY2xhcmF0aW9ucyBvZiB0aGUgbm9uLXN0YXRpYyBzeW1ib2xzIG9yIGF0IGxlYXN0IHByb3ZpZGUgY2x1ZXMgYWJvdXQgaG93IHRoZSBtb2R1bGUncyBkaWZmZXJlbnQgY29tcG9uZW50cyBhcmUgbWVhbnQgdG8gaW50ZXJhY3QuIENoZWNraW5nIHRoZSBoZWFkZXJzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBtb2R1bGUncyBpbnRlbmRlZCBBUEkgYW5kIGl0cyBkYXRhIHN0cnVjdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODEzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDM6MzIuMDA1NDczODIzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODc2NDU4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEZWNvZGV8aDMyM1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC03LSNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmg6ODojaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaFxcdTAwM2VcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oLTktI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oXFx1MDAzZVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC0xNC0vKiBUaGlzIHN0cnVjdHVyZSBleGlzdHMgb25seSBvbmNlIHBlciBtYXN0ZXIgKi9cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oOjE1OnN0cnVjdCBuZl9jdF9oMzIzX21hc3RlciB7XFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC0xNi1cXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmg9MzI9aW50IGdldF9oMjI1X2FkZHIoc3RydWN0IG5mX2Nvbm4gKmN0LCB1bnNpZ25lZCBjaGFyICpkYXRhLFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC0zNS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oOjM2OnN0cnVjdCBuZmN0X2gzMjNfbmF0X2hvb2tzIHtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oLTM3LVxcdGludCAoKnNldF9oMjQ1X2FkZHIpKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC05MS19O1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmg6OTI6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBuZmN0X2gzMjNfbmF0X2hvb2tzIF9fcmN1ICpuZmN0X2gzMjNfbmF0X2hvb2s7XFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaC05My1cXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaC00MS0jaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmg6NDI6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oXFx1MDAzZVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaC00My1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmg9NDQ9dHlwZWRlZiBzdHJ1Y3Qge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oLTc3LS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaDo3ODogKiBEZWNvZGUgRnVuY3Rpb25zIFJldHVybiBDb2Rlc1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaC03OS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmgtODAtXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oOjgxOiNkZWZpbmUgSDMyM19FUlJPUl9OT05FIDBcXHQvKiBEZWNvZGVkIHN1Y2Nlc3NmdWxseSAqL1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaC04Mi0jZGVmaW5lIEgzMjNfRVJST1JfU1RPUCAxXFx0LyogRGVjb2Rpbmcgc3RvcHBlZCwgbm90IHJlYWxseSBhbiBlcnJvciAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oLTg3LS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaDo4ODogKiBEZWNvZGUgRnVuY3Rpb25zXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oLTg5LSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaC05MC1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmg6OTE6aW50IERlY29kZVJhc01lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFJhc01lc3NhZ2UgKiByYXMpO1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaDo5MjppbnQgRGVjb2RlUTkzMSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeiwgUTkzMSAqIHE5MzEpO1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaDo5MzppbnQgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaC05NC1cXHRcXHRcXHRcXHRcXHQgTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlICpcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmg9NDIzPXR5cGVkZWYgc3RydWN0IFByb2dyZXNzX1VVSUUge1xcdC8qIFNFUVVFTkNFICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oLTQzNy1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQzODp0eXBlZGVmIHN0cnVjdCBIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keSB7XFx0LyogQ0hPSUNFICovXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaC00MzktXFx0ZW51bSB7XFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaDo0NDA6XFx0XFx0ZUgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5X3NldHVwLFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmg6NDQxOlxcdFxcdGVIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keV9jYWxsUHJvY2VlZGluZyxcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQ0MjpcXHRcXHRlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfY29ubmVjdCxcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQ0MzpcXHRcXHRlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfYWxlcnRpbmcsXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaDo0NDQ6XFx0XFx0ZUgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5X2luZm9ybWF0aW9uLFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmg6NDQ1OlxcdFxcdGVIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keV9yZWxlYXNlQ29tcGxldGUsXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaDo0NDY6XFx0XFx0ZUgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5X2ZhY2lsaXR5LFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmg6NDQ3OlxcdFxcdGVIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keV9wcm9ncmVzcyxcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQ0ODpcXHRcXHRlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfZW1wdHksXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaDo0NDk6XFx0XFx0ZUgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5X3N0YXR1cyxcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQ1MDpcXHRcXHRlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfc3RhdHVzSW5xdWlyeSxcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQ1MTpcXHRcXHRlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfc2V0dXBBY2tub3dsZWRnZSxcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQ1MjpcXHRcXHRlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfbm90aWZ5LFxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmgtNDUzLVxcdH0gY2hvaWNlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaC00NjEtXFx0fTtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjQ2Mjp9IEgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5O1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmgtNDYzLVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaD02MDM9dHlwZWRlZiBzdHJ1Y3QgSDMyM19VVV9QRFUge1xcdC8qIFNFUVVFTkNFICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oLTYxNS1cXHR9IG9wdGlvbnM7XFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaDo2MTY6XFx0SDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHkgaDMyM19tZXNzYWdlX2JvZHk7XFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaC02MTctXFx0SDMyM19VVV9QRFVfaDI0NUNvbnRyb2wgaDI0NUNvbnRyb2w7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oPTYyMD10eXBlZGVmIHN0cnVjdCBIMzIzX1VzZXJJbmZvcm1hdGlvbiB7XFx0LyogU0VRVUVOQ0UgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmgtNjIzLVxcdH0gb3B0aW9ucztcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oOjYyNDpcXHRIMzIzX1VVX1BEVSBoMzIzX3V1X3BkdTtcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5oLTYyNS19IEgzMjNfVXNlckluZm9ybWF0aW9uO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowMzozMi4wNTQyNDQ4NTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI3Njk2ODY1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYTpcblxuKipBbmFseXppbmcgSC4zMjMgQ29ubmVjdGlvbiBUcmFja2luZyBIZWxwZXIgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZnVuY3Rpb24gbGFuZHNjYXBlIGZvciB0aGUgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUuIEknbGwgc3RhcnQgYnkgbWFraW5nIGEgbWVudGFsIG1hcCBvZiB3aGF0J3Mgd2hlcmUuIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBBU04uMSBkZWNvZGluZyByb3V0aW5lcyB0aGVyZSwgYW5kIGxldCdzIGNvbmZpcm0gdGhlIHByZXNlbmNlIG9mIHRoZXNlIGZ1bmN0aW9uczogYERlY29kZVJhc01lc3NhZ2VgLCBgRGVjb2RlUTkzMWAsIGBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2VgLCBhbmQsIGxpa2VseSBzaGFyZWQsIGBnZXRfaDIyNV9hZGRyYC5cblxuTmV4dCwgSSdsbCBzaGlmdCBmb2N1cyB0byBgbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jYC4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoYXQgYGdldF9oMjI1X2FkZHJgIHdpbGwgcmVzaWRlIGhlcmUgYWdhaW4uIENydWNpYWxseSwgSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIGhlbHBlciBjYWxsYmFja3MgcmVnaXN0ZXJlZCB2aWEgdGhlIGBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlcmAuIFRoZXNlIGNhbGxiYWNrcyBhcmUgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbG9naWMgaXRzZWxmLCBzbyBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGVtIGNsb3NlbHkuIEknbGwgbmVlZCB0byBrbm93IHdoYXQgdGhleSBhcmUgZG9pbmcgYW5kIHdoZW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjcwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjAzOjM0LjMzMTIxNTg1NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyNjQwMzgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwuaGVscFxcXFxzKj1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjAzOjM0LjM3NTQ4OTYzMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTI5MDQ2ODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jYCBmb3IgSGVscGVyIERlZmluaXRpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrLiBUaGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0byBsb2NhdGUgdGhlIGhlbHBlciBkZWZpbml0aW9ucy4gSSdtIGdvaW5nIHRvIG5hdmlnYXRlIGRpcmVjdGx5IHRvIGBuZl9jb25udHJhY2tfaDMyM19tYWluLmNgIHRvIHNlZSBwcmVjaXNlbHkgaG93IHRoZSBILjMyMyBoZWxwZXJzIGFyZSBkZWZpbmVkIGFuZCByZWdpc3RlcmVkIHdpdGhpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUuIFRoaXMgZmlsZSBzaG91bGQgYmUgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIG1hbmFnaW5nIHRoZSBILjMyMyByZWxhdGVkIGxvZ2ljLCBzbyB0aGUgaGVscGVyIGRlZmluaXRpb25zICpzaG91bGQqIGJlIHJpZ2h0IGhlcmUuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC4gSG9wZWZ1bGx5LCB0aGUgY29kZSBpcyB3ZWxsLXN0cnVjdHVyZWQgYW5kIGRvY3VtZW50ZWQsIG1ha2luZyBpdCBlYXNpZXIgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgSC4zMjMgcHJvdG9jb2wgaXMgZGlzc2VjdGVkIGZvciBjb25uZWN0aW9uIHRyYWNraW5nIHB1cnBvc2VzLiBJJ20gbG9va2luZyBmb3IgdGhlIGNvcmUgc3RydWN0dXJlcyBhbmQgcmVnaXN0cmF0aW9uIG1lY2hhbmlzbXMsIHNwZWNpZmljYWxseSBob3cgdGhlIGhlbHBlciBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBjb3JlLiBUaGlzIGRpcmVjdCBhcHByb2FjaCB3aWxsIGFsbG93IG1lIHRvIGltbWVkaWF0ZWx5IGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgdXNlZCBmb3IgZGlzc2VjdGluZyBILjMyMyBzaWduYWxsaW5nIG1lc3NhZ2VzIGFuZCBleHRyYWN0aW5nIHJlbGV2YW50IGluZm9ybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTEyOCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjAzOjM2LjUwNDUzODUxMVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1MTI1NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9NTk9c3RhdGljIGNoYXIgKmgzMjNfYnVmZmVyO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTYwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjYxOnN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBuZl9jb25udHJhY2tfaGVscGVyX2gyNDU7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NjI6c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIG5mX2Nvbm50cmFja19oZWxwZXJfcTkzMVtdO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjYzOnN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBuZl9jb25udHJhY2tfaGVscGVyX3Jhc1tdO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTY0LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9NTc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgaDI0NV9leHBfcG9saWN5ID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtNTgyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjU4MzpzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgbmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1IF9fcmVhZF9tb3N0bHk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NTg0OnN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1X3B0ciBfX3JlYWRfbW9zdGx5O1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTU4NS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTY3MT1zdGF0aWMgaW50IGNhbGxmb3J3YXJkX2RvX2ZpbHRlcihzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy03MzEtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NzMyOnN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBuZl9jb25udHJhY2tfaGVscGVyX3E5MzFbMl0gX19yZWFkX21vc3RseTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzo3MzM6c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpuZl9jb25udHJhY2tfaGVscGVyX3E5MzFfcHRyWzJdIF9fcmVhZF9tb3N0bHk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtNzM0LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTI0Mz1zdGF0aWMgaW50IHByb2Nlc3NfZ3JxKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTEyNTktXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTI2MDpzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgbmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbMl0gX19yZWFkX21vc3RseTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxMjYxOnN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbmZfY29ubnRyYWNrX2hlbHBlcl9yYXNfcHRyWzJdIF9fcmVhZF9tb3N0bHk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTI2Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDM6MzYuNTUxMDU3MTQ5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNDIzODYxMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgSC4zMjMgQ29ubmVjdGlvbiBUcmFja2luZyBDb2RlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGNvcmUgaGVscGVyIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyBmb3IgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZy4gVGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgaXMgYG5mX2Nvbm50cmFja19oMzIzX21haW4uY2AuIExldCdzIHNlZS4uLiBJJ2xsIG5lZWQgdG8gbmF2aWdhdGUgdGhyb3VnaCB0aGUgZmlsZSBzdHJ1Y3R1cmUgdG8gbG9jYXRlIHdoZXJlIHRob3NlIHNwZWNpZmljIGhlbHBlciBmdW5jdGlvbnMgYXJlIGRlZmluZWQgYW5kIGluaXRpYWxpemVkLiBJJ20gbG9va2luZyBmb3IgdGhlIG1haW4gZW50cnkgcG9pbnRzLCB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIHJlc3BvbnNpYmxlIGZvciB0aGUgbml0dHktZ3JpdHR5IG9mIEguMzIzIHByb3RvY29sIGFuYWx5c2lzIGFuZCBjb25uZWN0aW9uIHN0YXRlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBjb25udHJhY2sgZnJhbWV3b3JrLiBJIGV4cGVjdCB0byBmaW5kIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHNpZ25hbGluZyBwYXJzaW5nLCBwb3J0IGFsbG9jYXRpb24sIGFuZCBwZXJoYXBzIHNvbWUgYXNwZWN0IG9mIEFMRyBwcm9jZXNzaW5nLiBMZXQncyBnZXQgdG8gaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjkzLCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDM6MzguNjkzNDQ2NDM4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE0ODE0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTE3MTE9c3RhdGljIGludCBfX2luaXQgaDMyM19oZWxwZXJfaW5pdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTczMC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNzMxOlxcdHJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoXFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfaDI0NSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xNzMyLVxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX2gyNDVfcHRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDM6MzguNzM4NTk2ODU2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTA2Mjc2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEguMzIzIENvbm50cmFjayBNb2R1bGUqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIGxpbmUgMTcxMSBpbiBgbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gcHJvYmFibHkgbG9va2luZyBhdCBhIHBvdGVudGlhbCBpc3N1ZSByZWxhdGVkIHRvIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcuIFRoaXMgYXJlYSBpcyBhbHdheXMgYSBiaXQgdHJpY2t5IOKAkyBpdCdzIGEgc3RhdGVmdWwgcHJvdG9jb2wgd2l0aCBtdWx0aXBsZSBjaGFubmVscywgY29tcGxleCBzaWduYWxpbmcsIGFuZCBvZnRlbiBOQVQgdHJhdmVyc2FsIGlzc3VlcyB0byBjb25zaWRlci4gSSBzdXNwZWN0IHRoYXQgdGhlIGxpbmUgbnVtYmVyIHBpbnBvaW50cyBhIHNwZWNpZmljIGZ1bmN0aW9uIG9yIGxvZ2ljIGJyYW5jaCByZWxhdGVkIHRvIHRoZSBoYW5kbGluZyBvZiBzaWduYWxpbmcgbWVzc2FnZXMgb3IgcGVyaGFwcyBtZWRpYSBzdHJlYW0gYXNzb2NpYXRpb24uIENvdWxkIGJlIGFuIGlzc3VlIHdpdGggZW5kcG9pbnQgcmVnaXN0cmF0aW9uLCBjYWxsIHNldHVwL3RlYXJkb3duLCBvciBldmVuIHBvdGVudGlhbGx5IHJlbGF0ZWQgdG8gaGFuZGxpbmcga2VlcC1hbGl2ZXMgb3IgdGltZW91dHMgd2l0aGluIHRoZSBjb25udHJhY2sgbW9kdWxlLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGF0IHRoZSBleGFjdCBsaW5lIGFuZCBjb250ZXh0IG1pZ2h0IGJlIHZpdGFsIHRvIHVuZGVyc3RhbmRpbmcgYW55IHJlcG9ydGVkIGNvbm5lY3Rpdml0eSBwcm9ibGVtcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB3aGVuIHRoaXMgbW9kdWxlIGlzIHJ1bm5pbmcuIEkgaG9wZSB0aGF0IHRoZSByZWxldmFudCBsaW5lcyBwcm92aWRlIG1vcmUgY29udGV4dCBhYm91dCB0aGUgc3RhdGUgdHJhbnNpdGlvbnMgdGhhdCBoYXBwZW4gd2l0aGluIHRoZSBjb25udHJhY2sgc3RydWN0dXJlLiBUaGlzIGxldmVsIG9mIGdyYW51bGFyaXR5IGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBhbnl0aGluZyB3aXRoaW4gdGhlIG5ldGZpbHRlciBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzIxLCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDM6NDEuMjI5MjI3NTk5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDc4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzEwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzEwOlxcdFxcbjE3MTE6XFx0c3RhdGljIGludCBfX2luaXQgaDMyM19oZWxwZXJfaW5pdCh2b2lkKVxcbjE3MTI6XFx0e1xcbjE3MTM6XFx0XFx0aW50IHJldDtcXG4xNzE0OlxcdFxcbjE3MTU6XFx0XFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfcmFzWzBdLCBBRl9JTkVULCBJUFBST1RPX1VEUCxcXG4xNzE2OlxcdFxcdFxcdFxcdCAgXFxcIlJBU1xcXCIsXFxuMTcxNzpcXHRcXHRcXHRcXHQgIFxcdTAwMjZyYXNfZXhwX3BvbGljeSwgMCwgcmFzX2hlbHAsIE5VTEwsIFRISVNfTU9EVUxFKTtcXG4xNzE4OlxcdFxcdG5mX2N0X2hlbHBlcl9pbml0KFxcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX3Jhc1sxXSwgQUZfSU5FVDYsIElQUFJPVE9fVURQLFxcbjE3MTk6XFx0XFx0XFx0XFx0ICBcXFwiUkFTXFxcIixcXG4xNzIwOlxcdFxcdFxcdFxcdCAgXFx1MDAyNnJhc19leHBfcG9saWN5LCAwLCByYXNfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xcbjE3MjE6XFx0XFx0bmZfY3RfaGVscGVyX2luaXQoXFx1MDAyNm5mX2Nvbm50cmFja19oZWxwZXJfaDI0NSwgQUZfVU5TUEVDLCBJUFBST1RPX1VEUCxcXG4xNzIyOlxcdFxcdFxcdFxcdCAgXFxcIkguMjQ1XFxcIixcXG4xNzIzOlxcdFxcdFxcdFxcdCAgXFx1MDAyNmgyNDVfZXhwX3BvbGljeSwgMCwgaDI0NV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XFxuMTcyNDpcXHRcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxWzBdLCBBRl9JTkVULCBJUFBST1RPX1RDUCxcXG4xNzI1OlxcdFxcdFxcdFxcdCAgXFxcIlEuOTMxXFxcIixcXG4xNzI2OlxcdFxcdFxcdFxcdCAgXFx1MDAyNnE5MzFfZXhwX3BvbGljeSwgMCwgcTkzMV9oZWxwLCBOVUxMLCBUSElTX01PRFVMRSk7XFxuMTcyNzpcXHRcXHRuZl9jdF9oZWxwZXJfaW5pdChcXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxWzFdLCBBRl9JTkVUNiwgSVBQUk9UT19UQ1AsXFxuMTcyODpcXHRcXHRcXHRcXHQgIFxcXCJRLjkzMVxcXCIsXFxuMTcyOTpcXHRcXHRcXHRcXHQgIFxcdTAwMjZxOTMxX2V4cF9wb2xpY3ksIDAsIHE5MzFfaGVscCwgTlVMTCwgVEhJU19NT0RVTEUpO1xcbjE3MzA6XFx0XFxuMTczMTpcXHRcXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKFxcdTAwMjZuZl9jb25udHJhY2tfaGVscGVyX2gyNDUsXFxuMTczMjpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2bmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1X3B0cik7XFxuMTczMzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xNzM0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTczNTpcXHRcXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihuZl9jb25udHJhY2tfaGVscGVyX3E5MzEsXFxuMTczNjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgQVJSQVlfU0laRShuZl9jb25udHJhY2tfaGVscGVyX3E5MzEpLFxcbjE3Mzc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIG5mX2Nvbm50cmFja19oZWxwZXJfcTkzMV9wdHIpO1xcbjE3Mzg6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTczOTpcXHRcXHRcXHRnb3RvIGVycjE7XFxuMTc0MDpcXHRcXHRyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihuZl9jb25udHJhY2tfaGVscGVyX3JhcyxcXG4xNzQxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBBUlJBWV9TSVpFKG5mX2Nvbm50cmFja19oZWxwZXJfcmFzKSxcXG4xNzQyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBuZl9jb25udHJhY2tfaGVscGVyX3Jhc19wdHIpO1xcbjE3NDM6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTc0NDpcXHRcXHRcXHRnb3RvIGVycjI7XFxuMTc0NTpcXHRcXG4xNzQ2OlxcdFxcdHJldHVybiAwO1xcbjE3NDc6XFx0ZXJyMjpcXG4xNzQ4OlxcdFxcdG5mX2Nvbm50cmFja19oZWxwZXJzX3VucmVnaXN0ZXIobmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxX3B0cixcXG4xNzQ5OlxcdFxcdFxcdFxcdFxcdFxcdEFSUkFZX1NJWkUobmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxX3B0cikpO1xcbjE3NTA6XFx0ZXJyMTpcXG4xNzUxOlxcdFxcdG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihuZl9jb25udHJhY2tfaGVscGVyX2gyNDVfcHRyKTtcXG4xNzUyOlxcdFxcdHJldHVybiByZXQ7XFxuMTc1MzpcXHR9XFxuMTc1NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDM6NDEuMjI5MzMzOTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc4NTczNzU4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZXBlbmRlbmN5IERlZXAgRGl2ZTogSC4zMjMgQ29ubmVjdGlvbiBUcmFja2luZyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGludG8gdGhlIHdlZWRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ09ORklHX05GX0NPTk5UUkFDS19IMzIzYC4gRmlyc3QsIEknbGwgZ28gc3RyYWlnaHQgdG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYW5kIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZyBlbnRyeS4gQWgsIHRoZXJlIGl0IGlzOiBgY29uZmlnIE5GX0NPTk5UUkFDS19IMzIzYC4gTm93LCB3aGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBJIHNlZSBpdCBkZXBlbmRzIG9uIGBORVRGSUxURVJfQURWQU5DRURgLCB3aGljaCBtYWtlcyBzZW5zZS4gQnV0IGdpdmVuIGl0cyBwbGFjZW1lbnQsIGl0J3MgcHJldHR5IHNhZmUgdG8gYXNzdW1lIGl0J3MgYWxzbyBpbXBsaWNpdGx5IGRlcGVuZGVudCBvbiBgTkZfQ09OTlRSQUNLYCBhcyB3ZWxsLCBzaW5jZSBpdCBzaXRzIHdpdGhpbiB0aGF0IGBpZmAgYmxvY2suIFRvIGJlIGNlcnRhaW4sIEknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgdG8gY29uZmlybSB3aGVyZSBgTkZfQ09OTlRSQUNLX0gzMjNgIGlzIHNpdHVhdGVkIGFuZCBob3cgaXQgcmVsYXRlcyB0byBgTkZfQ09OTlRSQUNLYC4gR290dGEgYmUgcHJlY2lzZSB3aGVuIGRlYWxpbmcgd2l0aCB0aGVzZSBrZXJuZWwgY29uZmlncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5NjMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowMzo0NC4wMTUwNzQwNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3ODI5NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWYgTkZfQ09OTlRSQUNLfG1lbnVjb25maWcgTkZfQ09OTlRSQUNLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9OTg9Y29uZmlnIE5GX0xPR19TWVNMT0dcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMDktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjExMDppZiBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTExLWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjAzOjQ0LjA2Mjg2MzA2OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDc3MzI0NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgdGhlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgTkZfQ09OTlRSQUNLYCBzZXR0aW5nIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGNvbnRleHQuIFJpZ2h0LCBzbyBmaXJzdCBJJ2xsIGhlYWQgb3ZlciB0byBgbmV0L25ldGZpbHRlci9LY29uZmlnYCB0byBwaW5wb2ludCBleGFjdGx5IHdoZXJlIHRoaXMgbWVudSBvciBjb25kaXRpb25hbCBibG9jayBsaXZlcy4gTGluZSAxMTAuLi4gYWhhISBJdCdzIG5lc3RsZWQgd2l0aGluIGFuIGBpZiBORl9DT05OVFJBQ0tgIGJsb2NrLiBUaGF0J3MgZ29vZCB0byBrbm93LiBOb3csIGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBgTkZfQ09OTlRSQUNLYCByZWxpZXMgb24gYE5FVEZJTFRFUmAsIGFuZCB0aGF0J3MgdXN1YWxseSB3aGVyZSB0aGluZ3Mgc3RhcnQgdG8gdGllIGluLiBKdXN0IHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgaW1tZWRpYXRlIGRlcGVuZGVuY2llcyBvciBzY29waW5nIGNvbnNpZGVyYXRpb25zLCBJJ2xsIHF1aWNrbHkgc2NhbiB0aGUgZmlyc3QgMTIwIGxpbmVzIG9mIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLiBJdCdzIGFsd2F5cyBiZXN0IHRvIGJlIHRob3JvdWdoIHdpdGggdGhlIGNvbmZpZyBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzOTQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowMzo0Ni4xNDAxOTAyNzlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0bWVudSBcXFwiQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvblxcXCJcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBORVRGSUxURVJcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIE5FVEZJTFRFUl9JTkdSRVNTXFxuICAgNjpcXHRcXHRib29sIFxcXCJOZXRmaWx0ZXIgaW5ncmVzcyBzdXBwb3J0XFxcIlxcbiAgIDc6XFx0XFx0ZGVmYXVsdCB5XFxuICAgODpcXHRcXHRzZWxlY3QgTkVUX0lOR1JFU1NcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgVGhpcyBhbGxvd3MgeW91IHRvIGNsYXNzaWZ5IHBhY2tldHMgZnJvbSBpbmdyZXNzIHVzaW5nIHRoZSBOZXRmaWx0ZXJcXG4gIDExOlxcdFxcdCAgaW5mcmFzdHJ1Y3R1cmUuXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBORVRGSUxURVJfRUdSRVNTXFxuICAxNDpcXHRcXHRib29sIFxcXCJOZXRmaWx0ZXIgZWdyZXNzIHN1cHBvcnRcXFwiXFxuICAxNTpcXHRcXHRkZWZhdWx0IHlcXG4gIDE2OlxcdFxcdHNlbGVjdCBORVRfRUdSRVNTXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIFRoaXMgYWxsb3dzIHlvdSB0byBjbGFzc2lmeSBwYWNrZXRzIGJlZm9yZSB0cmFuc21pc3Npb24gdXNpbmcgdGhlXFxuICAxOTpcXHRcXHQgIE5ldGZpbHRlciBpbmZyYXN0cnVjdHVyZS5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0Y29uZmlnIE5FVEZJTFRFUl9TS0lQX0VHUkVTU1xcbiAgMjI6XFx0XFx0ZGVmX2Jvb2wgTkVURklMVEVSX0VHUkVTUyBcXHUwMDI2XFx1MDAyNiAoTkVUX0NMU19BQ1QgfHwgSUZCKVxcbiAgMjM6XFx0XFxuICAyNDpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktcXG4gIDI1OlxcdFxcdGJvb2xcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIE5FVEZJTFRFUl9GQU1JTFlfQlJJREdFXFxuICAyODpcXHRcXHRib29sXFxuICAyOTpcXHRcXG4gIDMwOlxcdGNvbmZpZyBORVRGSUxURVJfRkFNSUxZX0FSUFxcbiAgMzE6XFx0XFx0Ym9vbFxcbiAgMzI6XFx0XFxuICAzMzpcXHRjb25maWcgTkVURklMVEVSX0JQRl9MSU5LXFxuICAzNDpcXHRcXHRkZWZfYm9vbCBCUEZfU1lTQ0FMTFxcbiAgMzU6XFx0XFxuICAzNjpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktfSE9PS1xcbiAgMzc6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBiYXNlIGhvb2sgZHVtcCBzdXBwb3J0XFxcIlxcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gIDM5OlxcdFxcdGRlcGVuZHMgb24gTkZfVEFCTEVTXFxuICA0MDpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDM6NDYuMTQwMjk1Nzk5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MDA3MjY0NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0cywgZ2VhcmVkIHRvd2FyZHMgYW4gZXhwZXJ0OlxuXG4qKk5hdmlnYXRpbmcgdGhlIE5ldGZpbHRlciBLY29uZmlnKipcblxuT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGxpbmVzIDEwMC0xNDAgb2YgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIEknbSBndWVzc2luZyB0aGVyZSdzIHNvbWV0aGluZyBzcGVjaWZpYyBpbiB0aGF0IHNlY3Rpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYmV0dGVyIG9yIG1heWJlIHRyb3VibGVzaG9vdC4gQmFzZWQgb24gcGFzdCBleHBlcmllbmNlIHdpdGggS2NvbmZpZywgdGhhdCByYW5nZSBjb3VsZCBiZSBkZWFsaW5nIHdpdGggYSBudW1iZXIgb2YgdGhpbmdzLiBNaWdodCBiZSBhIG5ldyBtb2R1bGUsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYW4gZXhpc3Rpbmcgb25lLCBvciBwZXJoYXBzIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGZlYXR1cmVzLiBHaXZlbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBob3cuIEFyZSB0aGVyZSBhbnkgdW51c3VhbCBkZWZhdWx0cz8gQW55IHRyaWNreSBkZXBlbmRlbmNpZXMgdGhhdCBJIG1pZ2h0IG92ZXJsb29rIGF0IGEgZ2xhbmNlPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBzaWducyBvZiBjb25mbGljdHMgb3IgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGFjdHMuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTEyNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDM6NDguMDQxMDI0NzE4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbiAxMDE6XFx0XFx0aGVscFxcbiAxMDI6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGUgc3VwcG9ydCBmb3IgcGFja2V0IGxvZ2dpbmcgdmlhIHN5c2xvZy5cXG4gMTAzOlxcdFxcdCAgSXQgc3VwcG9ydHMgSVB2NCwgSVBWNiwgQVJQIGFuZCBjb21tb24gdHJhbnNwb3J0IHByb3RvY29scyBzdWNoXFxuIDEwNDpcXHRcXHQgIGFzIFRDUCBhbmQgVURQLlxcbiAxMDU6XFx0XFx0ICBUaGlzIGlzIGEgc2ltcGxlciBidXQgbGVzcyBmbGV4aWJsZSBsb2dnaW5nIG1ldGhvZCBjb21wYXJlZCB0b1xcbiAxMDY6XFx0XFx0ICBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HLlxcbiAxMDc6XFx0XFx0ICBJZiBib3RoIGFyZSBlbmFibGVkIHRoZSBiYWNrZW5kIHRvIHVzZSBjYW4gYmUgY29uZmlndXJlZCBhdCBydW4tdGltZVxcbiAxMDg6XFx0XFx0ICBieSBtZWFucyBvZiBwZXItYWRkcmVzcy1mYW1pbHkgc3lzY3RsIHR1bmFibGVzLlxcbiAxMDk6XFx0XFxuIDExMDpcXHRpZiBORl9DT05OVFJBQ0tcXG4gMTExOlxcdGNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxuIDExMjpcXHRcXHR0cmlzdGF0ZVxcbiAxMTM6XFx0XFxuIDExNDpcXHRjb25maWcgTkZfQ09OTlRSQUNLX01BUktcXG4gMTE1OlxcdFxcdGJvb2wgICdDb25uZWN0aW9uIG1hcmsgdHJhY2tpbmcgc3VwcG9ydCdcXG4gMTE2OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuIDExNzpcXHRcXHRoZWxwXFxuIDExODpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29ubmVjdGlvbiBtYXJrcywgdXNlZCBieSB0aGVcXG4gMTE5OlxcdFxcdCAgYENPTk5NQVJLJyB0YXJnZXQgYW5kIGBjb25ubWFyaycgbWF0Y2guIFNpbWlsYXIgdG8gdGhlIG1hcmsgdmFsdWVcXG4gMTIwOlxcdFxcdCAgb2YgcGFja2V0cywgYnV0IHRoaXMgbWFyayB2YWx1ZSBpcyBrZXB0IGluIHRoZSBjb25udHJhY2sgc2Vzc2lvblxcbiAxMjE6XFx0XFx0ICBpbnN0ZWFkIG9mIHRoZSBpbmRpdmlkdWFsIHBhY2tldHMuXFxuIDEyMjpcXHRcXG4gMTIzOlxcdGNvbmZpZyBORl9DT05OVFJBQ0tfU0VDTUFSS1xcbiAxMjQ6XFx0XFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgc2VjdXJpdHkgbWFyayBzdXBwb3J0J1xcbiAxMjU6XFx0XFx0ZGVwZW5kcyBvbiBORVRXT1JLX1NFQ01BUktcXG4gMTI2OlxcdFxcdGRlZmF1bHQgeSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbiAxMjc6XFx0XFx0aGVscFxcbiAxMjg6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHNlY3VyaXR5IG1hcmtpbmdzIHRvIGJlIGFwcGxpZWQgdG9cXG4gMTI5OlxcdFxcdCAgY29ubmVjdGlvbnMuICBUeXBpY2FsbHkgdGhleSBhcmUgY29waWVkIHRvIGNvbm5lY3Rpb25zIGZyb21cXG4gMTMwOlxcdFxcdCAgcGFja2V0cyB1c2luZyB0aGUgQ09OTlNFQ01BUksgdGFyZ2V0IGFuZCBjb3BpZWQgYmFjayBmcm9tXFxuIDEzMTpcXHRcXHQgIGNvbm5lY3Rpb25zIHRvIHBhY2tldHMgd2l0aCB0aGUgc2FtZSB0YXJnZXQsIHdpdGggdGhlIHBhY2tldHNcXG4gMTMyOlxcdFxcdCAgYmVpbmcgb3JpZ2luYWxseSBsYWJlbGVkIHZpYSBTRUNNQVJLLlxcbiAxMzM6XFx0XFxuIDEzNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5ICdOJy5cXG4gMTM1OlxcdFxcbiAxMzY6XFx0Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xcbiAxMzc6XFx0XFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMnXFxuIDEzODpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAxMzk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowMzo0OC4wNDExMzExNDhaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzc4MzIwMzEwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSC4zMjMgQ29ubmVjdGlvbiBUcmFja2luZyBNb2R1bGUgRGVwZW5kZW5jaWVzIGFuZCBTeW1ib2xzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBORl9DT05OVFJBQ0tfSDMyM2AgbW9kdWxlLiBSaWdodCBvZmYgdGhlIGJhdCwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBpdCBkZXBlbmRzIG9uIHRoZSBjb3JlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnJhbWV3b3JrIChgTkZfQ09OTlRSQUNLYCksIGFkdmFuY2VkIG5ldGZpbHRlciBmZWF0dXJlcyAoYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORVRGSUxURVJgKSwgYW5kIHRoZSBgSU5FVGAgc3RhY2ssIHdoaWNoIGlzIHdoYXQgSSdkIGV4cGVjdC4gTm93LCBsZXQncyBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUga2V5IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIEguMzIzIG1vZHVsZSwgc28gSSdtIGZvY3VzaW5nIG9uIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgIGFuZCBgbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jYC4gTXkgaW5pdGlhbCBsaXN0IG9mIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBpbmNsdWRlIGBEZWNvZGVSYXNNZXNzYWdlYCwgYERlY29kZVE5MzFgLCBgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlYCwgYGdldF9oMjI1X2FkZHJgLCBgcmFzX2hlbHBgLCBgcTkzMV9oZWxwYCwgYW5kIGBoMjQ1X2hlbHBgLiBNeSBwcmltYXJ5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBzeW1ib2xzLCBtZWFuaW5nIHRoZXkgY2FuIGJlIHVzZWQgYnkgb3RoZXIga2VybmVsIG1vZHVsZXMuXG5cbkkndmUgYWxyZWFkeSBsb29rZWQgYXQgdGhlIGRlZmluaXRpb25zIGluIHRoZSBjb2RlLiBJIGNhbiBzZWUgdGhhdCBgRGVjb2RlUmFzTWVzc2FnZWAsIGBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2VgLCBhbmQgYERlY29kZVE5MzFgIGFyZSBkZWNsYXJlZCBpbiBgbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCwgYW5kIHRoZWlyIHByb3RvdHlwZXMgc2hvdyB0aGV5IGhhbmRsZSBBU04uMSBlbmNvZGVkIG1lc3NhZ2VzLCBhcyBvbmUgd291bGQgZXhwZWN0LiBGcm9tIGBuZl9jb25udHJhY2tfaDMyM19tYWluLmNgLCBgZ2V0X2gyMjVfYWRkcmAgaXMgKkVYUE9SVF9TWU1CT0xfR1BMKiBhbmQgdGh1cyB2aXNpYmxlIG91dHNpZGUgdGhlIG1vZHVsZSwgaGFuZGxpbmcgYWRkcmVzcyBleHRyYWN0aW9uIGZyb20gSC4yMjUgZGF0YSwgaW1wb3J0YW50IGZvciBjb25uZWN0aW9uIHRyYWNraW5nLlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2sgYSBtb21lbnQgYW5kIHF1aWNrbHkgc2NhbiB0aGUgcmVtYWluaW5nIGNvZGUgZm9yIGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMsIGp1c3QgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTY4LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDM6NTUuODI0MzM4MzQ2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTk5MTQ1MjYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgRGVjb2RlfF5FWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjAzOjU2LjE0NDI3NTI0MloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzEzOTY5NzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIE1vZGlmaWNhdGlvbnMgaW4gbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlZW4gaGFwcGVuaW5nLCBvciB3aGF0IG1pZ2h0IG5lZWQgdG8gYmUgYWRkZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIGZpbGUuICBMZXQncyBxdWlja2x5IHNjYW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jYCB3aXRoIGBncmVwYC4gU3BlY2lmaWNhbGx5LCBJJ20gbG9va2luZyBmb3IgZWl0aGVyIGxpbmVzIHRoYXQgc3RhcnQgd2l0aCBcImludCBcIiAtIHN1Z2dlc3RpbmcgZnVuY3Rpb24gZGVjbGFyYXRpb25zIG9yIGRlZmluaXRpb25zLCBhbmQgdGhlIGFkZGl0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVtb3ZhbCBvZiB0aG9zZS4gT3IsIEknbSBsb29raW5nIGZvciB1c2FnZXMgb2YgYEVYUE9SVF9TWU1CT0xgLCBiZWNhdXNlIHRoYXQgaW5kaWNhdGVzIHN5bWJvbHMgYmVpbmcgbWFkZSBhdmFpbGFibGUgdG8gb3RoZXIgbW9kdWxlcywgd2hpY2ggb2Z0ZW4gc2lnbmFscyBpbXBvcnRhbnQgZnVuY3Rpb25hbGl0eSBjaGFuZ2VzIG9yIGhvb2tzLiBXaXRoIHRob3NlIHR3byBwYXR0ZXJucywgSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBzb2xpZCBvdmVydmlldyBvZiByZWxldmFudCBtb2RpZmljYXRpb25zIG9yIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgZm9yIGNoYW5nZXMgSSdtIGludGVyZXN0ZWQgaW4uIEkgd2FudCBhIHF1aWNrLCB0YXJnZXRlZCB2aWV3IG9mIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODMwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDQ6MDAuNDU4MjQ3NTc4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE4NDYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTU1PWNvbnN0IHN0cnVjdCBuZmN0X2gzMjNfbmF0X2hvb2tzIF9fcmN1ICpuZmN0X2gzMjNfbmF0X2hvb2sgX19yZWFkX21vc3RseTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzo1NjpFWFBPUlRfU1lNQk9MX0dQTChuZmN0X2gzMjNfbmF0X2hvb2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTU3LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9NTg2PWludCBnZXRfaDIyNV9hZGRyKHN0cnVjdCBuZl9jb25uICpjdCwgdW5zaWduZWQgY2hhciAqZGF0YSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTYxNS19XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6NjE2OkVYUE9SVF9TWU1CT0xfR1BMKGdldF9oMjI1X2FkZHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTYxNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDQ6MDAuNTAzNDM2NzM2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4ODUyMDAwMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgSC4zMjMgQVNOLjEgRGVjb2RpbmcgaW4gbmV0ZmlsdGVyKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUgd29ya3MgYXQgdGhlIEFTTi4xIGxldmVsLiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRocmVlIGtleSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBwYXJzaW5nOiBgRGVjb2RlUmFzTWVzc2FnZWAsIGBEZWNvZGVROTMxYCwgYW5kIGBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2VgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZGVjb2Rpbmcgcm91dGluZXMsIHRoZSByZWFsIGhlYXJ0IG9mIHRoZSBBU04uMSBwYXJzaW5nIHdpdGhpbiBuZXRmaWx0ZXIgZm9yIHRoaXMgcHJvdG9jb2wuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBwcmV0dHkgaW50cmljYXRlIGxvZ2ljIGhlcmUsIGdpdmVuIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBILjMyMyBwcm90b2NvbCBzdGFjayBhbmQgdGhlIG5lZWQgdG8gbWFpbnRhaW4gY29ubmVjdGlvbiBzdGF0ZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBob3cgdGhleSBoYW5kbGUgQkVSL0RFUiBlbmNvZGluZywgaG93IHRoZXkgaWRlbnRpZnkgbWVzc2FnZSB0eXBlcywgYW5kIGhvdyB0aGUgZGVjb2RlZCBpbmZvcm1hdGlvbiBpcyB1c2VkIHRvIHVwZGF0ZSB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyaWVzLiBJdCdzIGEgY3JpdGljYWwgYXJlYSBmb3IgYm90aCBzZWN1cml0eSBhbmQgZnVuY3Rpb25hbGl0eSwgc28gYSB0aG9yb3VnaCByZXZpZXcgaXMgaW4gb3JkZXIuIExldCdzIHNlZSBob3cgd2VsbCB0aGV5J3ZlIGhhbmRsZWQgdGhlIHBvdGVudGlhbCBmb3IgYnVmZmVyIG92ZXJmbG93cyBhbmQgbWFsZm9ybWVkIG1lc3NhZ2VzLiBUaGlzIGlzIGFsd2F5cyBhIGNvbmNlcm4gd2hlbiBwYXJzaW5nIEFTTi4xLCBJIGtub3cuIEkgYWxzbyB3YW50IHRvIHNlZSBob3cgZWZmaWNpZW50bHkgdGhleSBwYXJzZSBhbmQgc3RvcmUgdGhlIGluZm9ybWF0aW9uLiBUaGlzIHdpbGwgYWZmZWN0IGNvbm5lY3Rpb24gdHJhY2tpbmcgcGVyZm9ybWFuY2UgZm9yIHRoaXMgcHJvdG9jb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzkyLCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDQ6MDMuMzg4NjM5NjgzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY5MzA0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEZWNvZGVbQS1aYS16MC05X10rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTEwNT1zdGF0aWMgdW5zaWduZWQgaW50IGdldF91aW50KHN0cnVjdCBiaXRzdHIgKmJzLCBpbnQgYik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTA2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEwNzovKiBEZWNvZGVyIEZ1bmN0aW9ucyAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEwOC1zdGF0aWMgaW50IGRlY29kZV9udWwoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9MTE5PXN0YXRpYyBpbnQgZGVjb2RlX2Nob2ljZShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTIwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEyMTovKiBEZWNvZGVyIEZ1bmN0aW9ucyBWZWN0b3IgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMjItdHlwZWRlZiBpbnQgKCpkZWNvZGVyX3QpKHN0cnVjdCBiaXRzdHIgKiwgY29uc3Qgc3RydWN0IGZpZWxkX3QgKiwgY2hhciAqLCBpbnQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEyMzpzdGF0aWMgY29uc3QgZGVjb2Rlcl90IERlY29kZXJzW10gPSB7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTI0LVxcdGRlY29kZV9udWwsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz01MTE9c3RhdGljIGludCBkZWNvZGVfc2VxKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTU2Ni1cXHRcXHRcXHQvKiBEZWNvZGUgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1Njc6XFx0XFx0XFx0aWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVxcdTAwM2V0eXBlXSkgKGJzLCBzb24sIGJhc2UsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTY4LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbGV2ZWwgKyAxKSkgXFx1MDAzY1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTczLVxcdFxcdFxcdGJzLVxcdTAwM2ViaXQgPSAwO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjU3NDpcXHRcXHR9IGVsc2UgaWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVxcdTAwM2V0eXBlXSkgKGJzLCBzb24sIGJhc2UsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNTc1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBsZXZlbCArIDEpKSBcXHUwMDNjXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy02MzItXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NjMzOlxcdFxcdGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cXHUwMDNldHlwZV0pIChicywgc29uLCBiYXNlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTYzNC1cXHRcXHRcXHRcXHRcXHRcXHQgIGxldmVsICsgMSkpIFxcdTAwM2NcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTY0ND1zdGF0aWMgaW50IGRlY29kZV9zZXFvZihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MTMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzE0OlxcdFxcdFxcdGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi1cXHUwMDNldHlwZV0pIChicywgc29uLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTcxNS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGkgXFx1MDAzY1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzI0LVxcdFxcdH0gZWxzZVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjcyNTpcXHRcXHRcXHRpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXFx1MDAzZXR5cGVdKSAoYnMsIHNvbixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MjYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBpIFxcdTAwM2NcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTc0MD1zdGF0aWMgaW50IGRlY29kZV9jaG9pY2Uoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODA3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgwODpcXHRcXHRpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXFx1MDAzZXR5cGVdKSAoYnMsIHNvbiwgYmFzZSwgbGV2ZWwgKyAxKSkgXFx1MDAzY1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgwOS1cXHRcXHQgICAgSDMyM19FUlJPUl9OT05FKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODEzLVxcdFxcdGJzLVxcdTAwM2ViaXQgPSAwO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgxNDpcXHR9IGVsc2UgaWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLVxcdTAwM2V0eXBlXSkgKGJzLCBzb24sIGJhc2UsIGxldmVsICsgMSkpIFxcdTAwM2NcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MTUtXFx0XFx0ICAgSDMyM19FUlJPUl9OT05FKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODIwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgyMTppbnQgRGVjb2RlUmFzTWVzc2FnZSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeiwgUmFzTWVzc2FnZSAqcmFzKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgyMi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MzUtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODM2OnN0YXRpYyBpbnQgRGVjb2RlSDMyM19Vc2VySW5mb3JtYXRpb24odW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBjaGFyICpiZWcsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODM3LVxcdFxcdFxcdFxcdCAgICAgIHNpemVfdCBzeiwgSDMyM19Vc2VySW5mb3JtYXRpb24gKnV1aWUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NTItXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODUzOmludCBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODU0LVxcdFxcdFxcdFxcdFxcdCBNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UgKlxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODcwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjg3MTppbnQgRGVjb2RlUTkzMSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeiwgUTkzMSAqcTkzMSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NzIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtOTIyLVxcdFxcdFxcdFxcdGJyZWFrO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjkyMzpcXHRcXHRcXHRyZXR1cm4gRGVjb2RlSDMyM19Vc2VySW5mb3JtYXRpb24oYnVmLCBwLCBsZW4sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtOTI0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnE5MzEtXFx1MDAzZVVVSUUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowNDowMy40MzQzMzkxNDFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAyNDYxMDYzODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgSC4zMjMgQ29ubnRyYWNrIEhlbHBlcioqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgZ29vZCB0YXJnZXQgaGVyZTogdGhlIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIG1vZHVsZS4gU3BlY2lmaWNhbGx5LCBJJ20gbG9va2luZyBhdCBmdW5jdGlvbnMgbGlrZSBgRGVjb2RlUmFzTWVzc2FnZWAsIGBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2VgLCBgRGVjb2RlUTkzMWAsIGFuZCBgZ2V0X2gyMjVfYWRkcmAgLSB0aGVzZSBhcmUgdGhlIGV4dGVybmFsbHkgbGlua2VkIGZ1bmN0aW9ucywgYW5kIHRoZSBwYWNrZXQgaGVscGVyIGNhbGxiYWNrcyAoYHJhc19oZWxwYCwgYHE5MzFfaGVscGAsIGBoMjQ1X2hlbHBgKSB0aGF0IGBuZl9jb25udHJhY2tgIGNhbGxzLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBJIHJlYWNoIHRoaXMgY29kZSBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQsIG9yIGFueSB2aXJ0dWFsaXplZCB0ZXN0IHNldHVwPyBUaGUgYW5zd2VyIGlzIHllcywgYWJzb2x1dGVseS4gVGhlc2UgaGVscGVycyBhcmUgZGVzaWduZWQgdG8gcGFyc2UgbmV0d29yayBwYWNrZXRzLCBhbmQgZXZlbiBpZiB0aGV5IGFyZW4ndCBoaXQgbmF0dXJhbGx5LCBJIGNhbiBlYXNpbHkgdHJpZ2dlciB0aGVtIHZpYSByYXcgc29ja2V0cywgdGFwIGludGVyZmFjZXMsIGxvb3BiYWNrLCBvciBldmVuIG5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIGluamVjdGlvbi5cblxuVGhpcyBpcyB3b3J0aCB0aGUgZWZmb3J0IHRvIGZ1enouIFRoZXJlJ3MgYSBrbm93biBidWcgLSBhIGZpeCBoYXMgYWxyZWFkeSBiZWVuIGltcGxlbWVudGVkIC0gYSBkdXBsaWNhdGlvbiBpbiB0aGUgYml0c3RyZWFtIHBvaW50ZXIgYWR2YW5jZW1lbnQgZHVyaW5nIEFTTi4xIGludGVnZXIgZGVjb2RpbmcuIEZ1enppbmcgQVNOLjEgcGFyc2luZyB3aXRoaW4gdGhlIG5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgaXMgYSB2ZXJ5IHN0YW5kYXJkIGFuZCBlZmZlY3RpdmUgYXBwcm9hY2guIEl0J3MgYSBoaWdoLXZhbHVlIHRhcmdldCBmb3IgaWRlbnRpZnlpbmcgdnVsbmVyYWJpbGl0aWVzLlxuXG5MZXQncyBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjayBvZiBldmVyeXRoaW5nLiBUaGUgYHNldC1yZXN1bHRzYCBkYXRhIGxvb2tzIGdvb2Q6IEkndmUgZ290IGBXb3J0aEZ1enppbmdgIHNldCB0byBgdHJ1ZWAsIGFuZCB0aGUgYFJlYXNvbmluZ2AgY2xlYXJseSBleHBsYWlucyB0aGUgQVNOLjEgaW50ZWdlciBkZWNvZGluZyBidWcgYW5kIHRoZSBzcGVjaWZpYyBmaWxlIChgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgKS4gVGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QgaXMgYWNjdXJhdGUsIGFuZCBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAoYE5GX0NPTk5UUkFDS19IMzIzYCwgYE5GX0NPTk5UUkFDS2AsIGBORVRGSUxURVJgLCBhbmQgYE5FVEZJTFRFUl9BRFZBTkNFRGApIGFyZSBpZGVudGlmaWVkLlxuXG5MZXQgbWUgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgYWdhaW5zdCB0aGUgS2NvbmZpZy4gYE5GX0NPTk5UUkFDS19IMzIzYCBkZXBlbmRzIG9uIGBORVRGSUxURVJfQURWQU5DRURgIGFuZCBmYWxscyB1bmRlciBhIGJyb2FkZXIgZGVwZW5kZW5jeSBzdHJ1Y3R1cmUgd2hpY2ggbG9va3MgY29ycmVjdC4gVGhlIGNvbmZpZyBsaXN0IGlzIGFjY3VyYXRlLCBhbmQgdGhlIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBpcyB3aGF0IEkgZXhwZWN0LlxuXG5Pa2F5LCBldmVyeXRoaW5nIGxvb2tzIGdvb2QuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzY1NSwiT3V0cHV0VG9rZW5zIjoyMTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDQ6MTMuNjgwNDQ3ODc0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI5ODI0NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS19IMzIzXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiRGVjb2RlUmFzTWVzc2FnZVwiLFxuICAgIFwiRGVjb2RlUTkzMVwiLFxuICAgIFwiRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlXCIsXG4gICAgXCJnZXRfaDIyNV9hZGRyXCIsXG4gICAgXCJyYXNfaGVscFwiLFxuICAgIFwicTkzMV9oZWxwXCIsXG4gICAgXCJoMjQ1X2hlbHBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgSC4zMjMgY29ubnRyYWNrIGhlbHBlcidzIEFTTi4xIGludGVnZXIgZGVjb2RlciAobmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMpIHdoZXJlIGdldF91aW50KCkgYWR2YW5jZWQgdGhlIGJpdHN0cmVhbSBwb2ludGVyIGFuZCBkZWNvZGVfaW50KCkgYWR2YW5jZWQgaXQgYWdhaW4uIFRoaXMgYWZmZWN0cyByZWFjaGFiaWxpdHkgYW5kIHBhcnNpbmcgbG9naWMgZm9yIEguMzIzL1EuOTMxL1JBUyBuZXR3b3JrIHRyYWZmaWMgaW4gdGhlIE5ldGZpbHRlciBzdWJzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLX0gzMjNcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJEZWNvZGVSYXNNZXNzYWdlXCIsXG4gICAgXCJEZWNvZGVROTMxXCIsXG4gICAgXCJEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2VcIixcbiAgICBcImdldF9oMjI1X2FkZHJcIixcbiAgICBcInJhc19oZWxwXCIsXG4gICAgXCJxOTMxX2hlbHBcIixcbiAgICBcImgyNDVfaGVscFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBILjMyMyBjb25udHJhY2sgaGVscGVyJ3MgQVNOLjEgaW50ZWdlciBkZWNvZGVyIChuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYykgd2hlcmUgZ2V0X3VpbnQoKSBhZHZhbmNlZCB0aGUgYml0c3RyZWFtIHBvaW50ZXIgYW5kIGRlY29kZV9pbnQoKSBhZHZhbmNlZCBpdCBhZ2Fpbi4gVGhpcyBhZmZlY3RzIHJlYWNoYWJpbGl0eSBhbmQgcGFyc2luZyBsb2dpYyBmb3IgSC4zMjMvUS45MzEvUkFTIG5ldHdvcmsgdHJhZmZpYyBpbiB0aGUgTmV0ZmlsdGVyIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDQ6MTMuNzUzNDM3MzIxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU3NzExODk2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjA0OjEzLjc1Mzg2NjIxWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDY1NzY2ODU2NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG9pbnRlciBhZHZhbmNlbWVudCBidWcgaW4gYGRlY29kZV9pbnQoKWAgd2l0aGluIHRoZSBOZXRmaWx0ZXIgSC4zMjMgQVNOLjEgY29ubnRyYWNrIGhlbHBlciAoYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCkuIEluIGBjYXNlIENPTlM6YCwgYGdldF91aW50KGJzLCBsZW4pYCBhZHZhbmNlcyBgYnMtXFx1MDAzZWN1cmAgaW50ZXJuYWxseSBieSBgbGVuYCBieXRlczsgcHJldmlvdXNseSwgYGJzLVxcdTAwM2VjdXIgKz0gbGVuYCB3YXMgYWxzbyBleGVjdXRlZCB1bmNvbmRpdGlvbmFsbHkgYWZ0ZXJ3YXJkcywgYWR2YW5jaW5nIHRoZSBiaXRzdHJlYW0gY3Vyc29yIHR3aWNlIHdoZW4gZGVjb2RpbmcgaW50ZWdlcnMuIFRoZSBwYXRjaCBtb3ZlcyBgYnMtXFx1MDAzZWN1ciArPSBsZW5gIGludG8gdGhlIGBlbHNlYCBicmFuY2guXFxuXFxuVGhpcyBjaGFuZ2Ugc3RyaWN0bHkgYWRkcmVzc2VzIHN0cmVhbSBwYXJzaW5nIHBvaW50ZXIgbWFuaXB1bGF0aW9uIG9uIGluY29taW5nIG5ldHdvcmsgcGFja2V0IGJ1ZmZlcnMgKGBza2JgIGRhdGEpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gUG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMgcmVsYXRlZCB0byBzdHJlYW0gYm91bmRzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIGVycm9yIGJvdW5kYXJ5IGNoZWNrcyAoYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRlNzhjN2EwYjdkYmVkNTUyMmYwMGYyNGUyYzE3ZjUyZTFjMDIzOTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwMjowMjo1MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcbmluZGV4IDY4MzBjOWRhMzUwN2MuLmE1MTI3NWNjNGQwZjYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcbkBAIC0zMzYsOCArMzM2LDkgQEAgc3RhdGljIGludCBkZWNvZGVfaW50KHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcbiBcdFx0XHR1bnNpZ25lZCBpbnQgdiA9IGdldF91aW50KGJzLCBsZW4pICsgZi1cdTAwM2VsYjtcbiBcdFx0XHRQUklOVChcIiA9ICV1XCIsIHYpO1xuIFx0XHRcdCooKHVuc2lnbmVkIGludCAqKShiYXNlICsgZi1cdTAwM2VvZmZzZXQpKSA9IHY7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0YnMtXHUwMDNlY3VyICs9IGxlbjtcbiBcdFx0fVxuLVx0XHRicy1cdTAwM2VjdXIgKz0gbGVuO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgVU5DTzpcbiBcdFx0QllURV9BTElHTihicyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowNDoxMy43NTM4NjczOVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTIwMDMzMDkzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExpbnV4IEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGRlY2lkZSBpZiBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgd2FycmFudGVkIGZvciB0aGlzIGtlcm5lbCBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSByaXNrIGxldmVsLiBUaGlzIGxvb2tzIGxpa2UgYSBjb2RlIHJldmlldywgc3BlY2lmaWNhbGx5IGEgdHJpYWdlIHRvIGRldGVybWluZSBpZiBLQVNBTiBvciBLTVNBTiBpcyBtb3JlIGFwcHJvcHJpYXRlLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCB0aGlzIGZhbGxzIHNxdWFyZWx5IGludG8gdGhlIFwiYmVuaWduL2RlZmVuc2l2ZSBzZWN1cml0eS9jb2RlIGFuYWx5c2lzXCIgY2F0ZWdvcnkuIE5vIGltbWVkaWF0ZSByZWQgZmxhZ3MsIHNvIEkgY2FuIHNhZmVseSBwcm9jZWVkLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZSBpdHNlbGYuIEkgc2VlIGEgYGRpZmZgIHByZXNlbnRlZC4gTG9va3MgbGlrZSB3ZSdyZSBpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgLiAgSSdsbCBleGFtaW5lIHRoZSBwYXRjaCwgZm9jdXNpbmcgb24gdGhlIGNoYW5nZXMgYXJvdW5kIGxpbmUgMzM2LiBUaGUgY29kZSBkZWFscyB3aXRoIGRlY29kaW5nIHNvbWUgaW50ZWdlciB2YWx1ZXMgd2l0aGluIGEgYml0c3RyZWFtIHVzaW5nIGEgY3VzdG9tIGBkZWNvZGVfaW50YCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgaW5jcmVtZW50ZWQgdGhlIGJpdHN0cmVhbSBjdXJzb3IgYGJzLVx1MDAzZWN1cmAgcmVnYXJkbGVzcyBpZiB0aGUgdW5zaWduZWQgaW50IHdhcyBhY3R1YWxseSBhc3NpZ25lZCBhIHZhbHVlLiBUaGUgbmV3IHZlcnNpb24gc2tpcHMgaW5jcmVtZW50aW5nIHRoZSBiaXRzdHJlYW0gaWYgdGhlIGludCB2YWx1ZSBpcyBub3QgYXNzaWduZWQuIFRoaXMgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBidWctZml4LlxuXG5JJ2xsIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZ2V0IGEgYmV0dGVyIGNvbnRleHQgZm9yIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDMzNi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljIGFuZCBzZWUgaWYgdGhpcyBmaXggcmV2ZWFscyBhbnkgdW5kZXJseWluZyB2dWxuZXJhYmlsaXRpZXMgb3IgYXJlYXMgdGhhdCBtaWdodCBiZW5lZml0IGZyb20gZnV6emluZy4gVGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYSBtZW1vcnkgc2FmZXR5IGNvbmNlcm4gdGhhdCBLTVNBTiBpcyBwYXJ0aWN1bGFybHkgc3VpdGVkIHRvIGV4cG9zZS4gT25jZSBJJ3ZlIHJldmlld2VkIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBJJ2xsIGJlIGluIGEgYmV0dGVyIHBvc2l0aW9uIHRvIG1ha2UgYSByZWNvbW1lbmRhdGlvbiBvbiB3aGV0aGVyIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBuZWNlc3Nhcnkgb3IgaWYgS0FTQU4gYWxvbmUgaXMgc3VmZmljaWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyOSwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjA0OjI4Ljk1NDIwMjIxMVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDA6XFx0XFx0QllURV9BTElHTihicyk7XFxuIDMwMTpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMSwgMCkpXFxuIDMwMjpcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gMzAzOlxcdFxcbiAzMDQ6XFx0XFx0bGVuID0gKmJzLVxcdTAwM2VjdXIrKztcXG4gMzA1OlxcdFxcdGJzLVxcdTAwM2VjdXIgKz0gbGVuO1xcbiAzMDY6XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDAsIDApKVxcbiAzMDc6XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDMwODpcXHRcXG4gMzA5OlxcdFxcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XFxuIDMxMDpcXHR9XFxuIDMxMTpcXHRcXG4gMzEyOlxcdHN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuIDMxMzpcXHQgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxcbiAzMTQ6XFx0e1xcbiAzMTU6XFx0XFx0dW5zaWduZWQgaW50IGxlbjtcXG4gMzE2OlxcdFxcbiAzMTc6XFx0XFx0UFJJTlQoXFxcIiUqcyVzXFxcIiwgbGV2ZWwgKiBUQUJfU0laRSwgXFxcIiBcXFwiLCBmLVxcdTAwM2VuYW1lKTtcXG4gMzE4OlxcdFxcbiAzMTk6XFx0XFx0c3dpdGNoIChmLVxcdTAwM2Vzeikge1xcbiAzMjA6XFx0XFx0Y2FzZSBCWVRFOlxcdFxcdC8qIFJhbmdlID09IDI1NiAqL1xcbiAzMjE6XFx0XFx0XFx0QllURV9BTElHTihicyk7XFxuIDMyMjpcXHRcXHRcXHRicy1cXHUwMDNlY3VyKys7XFxuIDMyMzpcXHRcXHRcXHRicmVhaztcXG4gMzI0OlxcdFxcdGNhc2UgV09SRDpcXHRcXHQvKiAyNTcgXFx1MDAzYz0gUmFuZ2UgXFx1MDAzYz0gNjRLICovXFxuIDMyNTpcXHRcXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG4gMzI2OlxcdFxcdFxcdGJzLVxcdTAwM2VjdXIgKz0gMjtcXG4gMzI3OlxcdFxcdFxcdGJyZWFrO1xcbiAzMjg6XFx0XFx0Y2FzZSBDT05TOlxcdFxcdC8qIDY0SyBcXHUwMDNjIFJhbmdlIFxcdTAwM2MgNEcgKi9cXG4gMzI5OlxcdFxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCAyKSlcXG4gMzMwOlxcdFxcdFxcdFxcdHJldHVybiBIMzIzX0VSUk9SX0JPVU5EO1xcbiAzMzE6XFx0XFx0XFx0bGVuID0gZ2V0X2JpdHMoYnMsIDIpICsgMTtcXG4gMzMyOlxcdFxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCBsZW4sIDApKVxcbiAzMzM6XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDMzNDpcXHRcXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG4gMzM1OlxcdFxcdFxcdGlmIChiYXNlIFxcdTAwMjZcXHUwMDI2IChmLVxcdTAwM2VhdHRyIFxcdTAwMjYgREVDT0RFKSkge1xcdC8qIHRpbWVUb0xpdmUgKi9cXG4gMzM2OlxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCB2ID0gZ2V0X3VpbnQoYnMsIGxlbikgKyBmLVxcdTAwM2VsYjtcXG4gMzM3OlxcdFxcdFxcdFxcdFBSSU5UKFxcXCIgPSAldVxcXCIsIHYpO1xcbiAzMzg6XFx0XFx0XFx0XFx0KigodW5zaWduZWQgaW50ICopKGJhc2UgKyBmLVxcdTAwM2VvZmZzZXQpKSA9IHY7XFxuIDMzOTpcXHRcXHRcXHR9IGVsc2Uge1xcbiAzNDA6XFx0XFx0XFx0XFx0YnMtXFx1MDAzZWN1ciArPSBsZW47XFxuIDM0MTpcXHRcXHRcXHR9XFxuIDM0MjpcXHRcXHRcXHRicmVhaztcXG4gMzQzOlxcdFxcdGNhc2UgVU5DTzpcXG4gMzQ0OlxcdFxcdFxcdEJZVEVfQUxJR04oYnMpO1xcbiAzNDU6XFx0XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxcbiAzNDY6XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDM0NzpcXHRcXHRcXHRsZW4gPSBnZXRfbGVuKGJzKTtcXG4gMzQ4OlxcdFxcdFxcdGJzLVxcdTAwM2VjdXIgKz0gbGVuO1xcbiAzNDk6XFx0XFx0XFx0YnJlYWs7XFxuIDM1MDpcXHRcXHRkZWZhdWx0OlxcdFxcdC8qIDIgXFx1MDAzYz0gUmFuZ2UgXFx1MDAzYz0gMjU1ICovXFxuIDM1MTpcXHRcXHRcXHRJTkNfQklUUyhicywgZi1cXHUwMDNlc3opO1xcbiAzNTI6XFx0XFx0XFx0YnJlYWs7XFxuIDM1MzpcXHRcXHR9XFxuIDM1NDpcXHRcXG4gMzU1OlxcdFxcdFBSSU5UKFxcXCJcXFxcblxcXCIpO1xcbiAzNTY6XFx0XFxuIDM1NzpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMCkpXFxuIDM1ODpcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gMzU5OlxcdFxcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XFxuIDM2MDpcXHR9XFxuIDM2MTpcXHRcXG4gMzYyOlxcdHN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbiAzNjM6XFx0ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuIDM2NDpcXHR7XFxuIDM2NTpcXHRcXHRQUklOVChcXFwiJSpzJXNcXFxcblxcXCIsIGxldmVsICogVEFCX1NJWkUsIFxcXCIgXFxcIiwgZi1cXHUwMDNlbmFtZSk7XFxuIDM2NjpcXHRcXG4gMzY3OlxcdFxcdGlmICgoZi1cXHUwMDNlYXR0ciBcXHUwMDI2IEVYVCkgXFx1MDAyNlxcdTAwMjYgZ2V0X2JpdChicykpIHtcXG4gMzY4OlxcdFxcdFxcdElOQ19CSVRTKGJzLCA3KTtcXG4gMzY5OlxcdFxcdH0gZWxzZSB7XFxuIDM3MDpcXHRcXHRcXHRJTkNfQklUUyhicywgZi1cXHUwMDNlc3opO1xcbiAzNzE6XFx0XFx0fVxcbiAzNzI6XFx0XFxuIDM3MzpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMCkpXFxuIDM3NDpcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gMzc1OlxcdFxcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XFxuIDM3NjpcXHR9XFxuIDM3NzpcXHRcXG4gMzc4OlxcdHN0YXRpYyBpbnQgZGVjb2RlX2JpdHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuIDM3OTpcXHQgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowNDoyOC45NTQzMDI5NzFaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUwOTM0MzU1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGtlZXBpbmcgaW4gbWluZCBteSBvd24gZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgZ2V0X3VpbnRgIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBvZiB0aGlzIGBnZXRfdWludGAgZnVuY3Rpb24uIFdoZXJlIGlzIHRoaXMgdGhpbmcgZGVmaW5lZD8gSXQncyBwcm9iYWJseSBpbiB0aGUgYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgZmlsZSwgb3IgcGVyaGFwcyBpbmNsdWRlZCBpbiBvbmUgb2YgdGhlIGhlYWRlcnMgd2l0aGluIHRoYXQgY29udGV4dC4gSSdsbCBuZWVkIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UgY29kZSDigJMgbm8gcm9vbSBmb3IgZ3Vlc3N3b3JrIGhlcmUuIFRpbWUgdG8gcHVsbCB1cCB0aGUgcmVsZXZhbnQgZmlsZXMgYW5kIGRpc3NlY3QgdGhpcyBmdW5jdGlvbidzIGxvZ2ljLiBJIG5lZWQgdG8gZXhhbWluZSBwcmVjaXNlbHkgaG93IGl0J3MgaW1wbGVtZW50ZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgY29ubnRyYWNrIG1vZHVsZSBhbmQsIGJ5IGV4dGVuc2lvbiwgdGhlIEguMzIzIHByb3RvY29sIGhhbmRsaW5nLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQ7IHVuZGVyc3RhbmRpbmcgdGhpcyBsb3ctbGV2ZWwgZnVuY3Rpb24gaXMgY3JpdGljYWwgdG8gZ3Jhc3BpbmcgaG93IHRoZSBzeXN0ZW0gaW50ZXJwcmV0cyB0aGUgQVNOLjEgZGF0YSBzdHJlYW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTg3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowNDozMi40NjM2NDk4MDJaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTU4ODI0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfdWludFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0xMDQ9c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0bWFwKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTA1OnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3VpbnQoc3RydWN0IGJpdHN0ciAqYnMsIGludCBiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMDYtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0yMTE9c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0bWFwKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTI0OS0gKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoyNTA6c3RhdGljIHVuc2lnbmVkIGludCBnZXRfdWludChzdHJ1Y3QgYml0c3RyICpicywgaW50IGIpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjUxLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTMxMj1zdGF0aWMgaW50IGRlY29kZV9pbnQoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzM1LVxcdFxcdGlmIChiYXNlIFxcdTAwMjZcXHUwMDI2IChmLVxcdTAwM2VhdHRyIFxcdTAwMjYgREVDT0RFKSkge1xcdC8qIHRpbWVUb0xpdmUgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozMzY6XFx0XFx0XFx0dW5zaWduZWQgaW50IHYgPSBnZXRfdWludChicywgbGVuKSArIGYtXFx1MDAzZWxiO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMzNy1cXHRcXHRcXHRQUklOVChcXFwiID0gJXVcXFwiLCB2KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM9NjgwPXZvaWQgbmZfY29ubnRyYWNrX3Byb3RvX3Blcm5ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNjk2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6Njk3Om1vZHVsZV9wYXJhbV9jYWxsKGhhc2hzaXplLCBuZl9jb25udHJhY2tfc2V0X2hhc2hzaXplLCBwYXJhbV9nZXRfdWludCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTY5OC1cXHRcXHQgIFxcdTAwMjZuZl9jb25udHJhY2tfaHRhYmxlX3NpemUsIDA2MDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowNDozMi42MDMyNTQ0NDZaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg0NDczODk4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGBnZXRfdWludGAgZnVuY3Rpb24gaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYC5cblxuKipEaXZpbmcgaW50byBgZ2V0X3VpbnRgKipcblxuQWxyaWdodCwgbGV0J3MgcHVsbCB1cCB0aGF0IGBnZXRfdWludGAgZnVuY3Rpb24gaW4gdGhlIEguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgY29kZS4gU3BlY2lmaWNhbGx5LCBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNgLiBJJ20gYWxyZWFkeSB0aGlua2luZyBhYm91dCB0aGUgQVNOLjEgcGFyc2luZyBjb250ZXh0IHRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMgd2l0aGluLiBDb25zaWRlcmluZyB0aGUgbG93LWxldmVsIEFTTi4xIGVuY29kaW5nIHByaW5jaXBsZXMsIHRoaXMgZnVuY3Rpb24gaXMgcHJvYmFibHkgdGFza2VkIHdpdGggZXh0cmFjdGluZyBhbiB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGZyb20gYSBidWZmZXIgZm9ybWF0dGVkIGFjY29yZGluZyB0byBJVFUtVCBYLjY5MCAoREVSL0JFUikgb3Igd2hhdGV2ZXIgc3Vic2V0IHRoZXkgYXJlIHVzaW5nLiBJIGV4cGVjdCB0byBzZWUgaXQgaGFuZGxpbmcgdmFyaWFibGUtbGVuZ3RoIGVuY29kaW5ncywgcG90ZW50aWFsbHkgY2hlY2tpbmcgZm9yIHRoZSBtaW5pbXVtIG51bWJlciBvZiBvY3RldHMgcmVxdWlyZWQgdG8gcmVwcmVzZW50IHRoZSB2YWx1ZSwgYW5kIGxpa2VseSBkZWFsaW5nIHdpdGggbGVhZGluZyB6ZXJvIGJ5dGVzIHRoYXQgbWlnaHQgYmUgcHJlc2VudCBpbiB0aGUgZW5jb2RlZCByZXByZXNlbnRhdGlvbiBkZXBlbmRpbmcgb24gd2hpY2ggXCJ0YWdcIiBjbGFzcyB0aGUgaW50ZWdlciBpcyBiZWluZyBlbmNvZGVkIHdpdGguIFRoaXMgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGluIHRlcm1zIG9mIGhvdyBpdCBleHRyYWN0cyBhIHZhbHVlIGFuZCB3aGV0aGVyIGl0IG1pZ2h0IGJlIHZ1bG5lcmFibGUgdG8gdGhpbmdzIGxpa2Ugb3ZlcmxvbmcgZW5jb2RpbmdzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IGl0IGhhbmRsZXMgY2FzZXMgd2hlcmUgdGhlIGJ1ZmZlciBtaWdodCBiZSB0cnVuY2F0ZWQgb3IgaW52YWxpZCwgYW5kIG1ha2Ugc3VyZSB0aGF0IGl0J3Mgcm9idXN0IGluIHRoYXQgY29udGV4dC4gSSB3YW50IHRvIHNlZSBpZiB0aGV5J3JlIHZhbGlkYXRpbmcgdGhlIGxlbmd0aCBmaWVsZCBwcm9wZXJseSBhbmQgaG93IHRoZXkncmUgaGFuZGxpbmcgcG90ZW50aWFsIG92ZXJmbG93cyDigJMgdGhhdCdzIG9mdGVuIGEgc291cmNlIG9mIHZ1bG5lcmFiaWxpdGllcyB3aGVuIGRlYWxpbmcgd2l0aCB1bnNpZ25lZCBpbnRlZ2Vycy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIG9mZi1ieS1vbmUgZXJyb3JzIGluIHRoZWlyIGluZGV4aW5nIGFzIHdlbGwuIExldCdzIHNlZSBob3cgd2VsbCBpdCdzIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQ3LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDQ6MzUuNDQ3OTk1OTU1WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDA6XFx0XFx0fVxcbiAyNDE6XFx0XFxuIDI0MjpcXHRcXHR2IFxcdTAwMjY9IDB4ZmZmZmZmZmYgXFx1MDAzY1xcdTAwM2MgKDMyIC0gYik7XFxuIDI0MzpcXHRcXG4gMjQ0OlxcdFxcdHJldHVybiB2O1xcbiAyNDU6XFx0fVxcbiAyNDY6XFx0XFxuIDI0NzpcXHQvKlxcbiAyNDg6XFx0ICogQXNzdW1lIGJzIGlzIGFsaWduZWQgYW5kIHNpemVvZih1bnNpZ25lZCBpbnQpID09IDRcXG4gMjQ5OlxcdCAqL1xcbiAyNTA6XFx0c3RhdGljIHVuc2lnbmVkIGludCBnZXRfdWludChzdHJ1Y3QgYml0c3RyICpicywgaW50IGIpXFxuIDI1MTpcXHR7XFxuIDI1MjpcXHRcXHR1bnNpZ25lZCBpbnQgdiA9IDA7XFxuIDI1MzpcXHRcXG4gMjU0OlxcdFxcdHN3aXRjaCAoYikge1xcbiAyNTU6XFx0XFx0Y2FzZSA0OlxcbiAyNTY6XFx0XFx0XFx0diB8PSAqYnMtXFx1MDAzZWN1cisrO1xcbiAyNTc6XFx0XFx0XFx0diBcXHUwMDNjXFx1MDAzYz0gODtcXG4gMjU4OlxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiAyNTk6XFx0XFx0Y2FzZSAzOlxcbiAyNjA6XFx0XFx0XFx0diB8PSAqYnMtXFx1MDAzZWN1cisrO1xcbiAyNjE6XFx0XFx0XFx0diBcXHUwMDNjXFx1MDAzYz0gODtcXG4gMjYyOlxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiAyNjM6XFx0XFx0Y2FzZSAyOlxcbiAyNjQ6XFx0XFx0XFx0diB8PSAqYnMtXFx1MDAzZWN1cisrO1xcbiAyNjU6XFx0XFx0XFx0diBcXHUwMDNjXFx1MDAzYz0gODtcXG4gMjY2OlxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiAyNjc6XFx0XFx0Y2FzZSAxOlxcbiAyNjg6XFx0XFx0XFx0diB8PSAqYnMtXFx1MDAzZWN1cisrO1xcbiAyNjk6XFx0XFx0XFx0YnJlYWs7XFxuIDI3MDpcXHRcXHR9XFxuIDI3MTpcXHRcXHRyZXR1cm4gdjtcXG4gMjcyOlxcdH1cXG4gMjczOlxcdFxcbiAyNzQ6XFx0c3RhdGljIGludCBkZWNvZGVfbnVsKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4gMjc1OlxcdCAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuIDI3NjpcXHR7XFxuIDI3NzpcXHRcXHRQUklOVChcXFwiJSpzJXNcXFxcblxcXCIsIGxldmVsICogVEFCX1NJWkUsIFxcXCIgXFxcIiwgZi1cXHUwMDNlbmFtZSk7XFxuIDI3ODpcXHRcXG4gMjc5OlxcdFxcdHJldHVybiBIMzIzX0VSUk9SX05PTkU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjA0OjM1LjQ0ODEwNzIwNFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0Mjk2MzQ4MjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENyaXRpY2FsIEFTTi4xIERlY29kaW5nIEJ1ZyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBkZWNvZGVfaW50YCBmdW5jdGlvbiwgYW5kIHNvbWV0aGluZyBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXQgbWUgcmVnYXJkaW5nIGhvdyBgYnMtXHUwMDNlY3VyYCBpcyBiZWluZyBtYW5hZ2VkLiBTcGVjaWZpY2FsbHksIGxldCdzIGxvb2sgYXQgYGdldF91aW50YC4gUHJldmlvdXNseSwgYGdldF91aW50KGJzLCBsZW4pYCB3YXMgZGVmaW5lZCBpbiBhIHdheSB0aGF0IGl0IGluY3JlbWVudHMgYGJzLVx1MDAzZWN1cmAgYnkgYGxlbmAgYnl0ZXMuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBhZHZhbmNpbmcgYGJzLVx1MDAzZWN1cmAgdXNpbmcgYCpicy1cdTAwM2VjdXIrK2Agd2l0aGluIHRoZSBgZ2V0X3VpbnRgIGZ1bmN0aW9uIGl0c2VsZi5cblxuTm93LCBjb25zaWRlciB0aGlzIHNjZW5hcmlvIHdpdGhpbiBgZGVjb2RlX2ludGAgdW5kZXIgdGhlIGBDT05TYCBjYXNlLiBXZSBkZXRlcm1pbmUgYSBgbGVuYCB2YWx1ZS4gVGhlbiwgaWYgd2UgaGl0IHRoZSBgaWYgKGJhc2UgXHUwMDI2XHUwMDI2IChmLVx1MDAzZWF0dHIgXHUwMDI2IERFQ09ERSkpYCBjb25kaXRpb24sIGBnZXRfdWludChicywgbGVuKWAgKmFscmVhZHkqIGFkdmFuY2VzIGBicy1cdTAwM2VjdXJgIGJ5IGBsZW5gLiBCdXQgdGhlbiwgKnVuY29uZGl0aW9uYWxseSosIGFmdGVyIHRoYXQgY29uZGl0aW9uYWwgYmxvY2ssIHdlIGZpbmQgYGJzLVx1MDAzZWN1ciArPSBsZW47YC5cblxuSGFuZyBvbiBhIG1pbnV0ZSEgVGhhdCdzIHRoZSBwcm9ibGVtLiBJdCBtZWFucyB0aGF0IHdoZW4gdGhlIGBpZmAgc3RhdGVtZW50IGlzIHRydWUsIHdlJ3JlIGVmZmVjdGl2ZWx5IGluY3JlbWVudGluZyBgYnMtXHUwMDNlY3VyYCBieSBgbGVuYCAqdHdpY2UqLiBPbmNlIGluc2lkZSBgZ2V0X3VpbnRgLCBhbmQgdGhlbiBhZ2FpbiBhZnRlciBgZ2V0X3VpbnRgIGNvbXBsZXRlcy4gV2hlbiB0aGUgYGlmYCBzdGF0ZW1lbnQgaXMgZmFsc2UsIGBicy1cdTAwM2VjdXIgKz0gbGVuO2AgaGFwcGVucyBvbmx5IG9uY2UuXG5cblNvLCB0aGUgYnVnIGlzIGNsZWFyOiBpbiBgZGVjb2RlX2ludGAgdGhlIGNvZGUgd2FzIGFkdmFuY2luZyB0aGUgYnVmZmVyIHBvaW50ZXIsIGBicy1cdTAwM2VjdXJgIGJ5IGBsZW5gIGJ5dGVzIHR3aWNlIHdoZW4gYSBzcGVjaWZpYyBkZWNvZGluZyBjb25kaXRpb24gd2FzIG1ldC4gVGhpcyBleHBsYWlucyB0aGUgcG90ZW50aWFsIGZvciBza2lwcGVkIGRhdGEsIG1pcy1wYXJzaW5nLCBhbmQgdGhlIHJpc2sgb2Ygb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBpbmNvcnJlY3Qgb2Zmc2V0IHdpbGwgY2VydGFpbmx5IHdyZWFrIGhhdm9jIG9uIHN1YnNlcXVlbnQgQVNOLjEgZmllbGQgZGVjb2RpbmcuXG5cblNpbmNlIGBicy1cdTAwM2VjdXJgIHBvaW50cyB0byBhbiBpbmNvbWluZyBuZXR3b3JrIHBhY2tldCwgbGlrZWx5IGZyb20gYW4gYHNrYmAgYnVmZmVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBiaXRzdHJgIHN0cnVjdHVyZSBhbmQgYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgIGZ1bmN0aW9uIHdvcmsuIFRob3NlIGFyZSB0aGUga2V5IHBpZWNlcyBub3cuIEkgbmVlZCB0byB0cmFjZSB3aGVyZSB0aGUgYnVmZmVycyBhcmUgY29taW5nIGZyb20uIFRpbWUgdG8gZGlnIHRocm91Z2ggYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NjYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowNDozOS43NDQ0NTc4WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDY4NTM5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgYml0c3RyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTc1PXR5cGVkZWYgc3RydWN0IGZpZWxkX3Qge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODgtLyogQml0IFN0cmVhbSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjg5OnN0cnVjdCBiaXRzdHIge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTkwLVxcdHVuc2lnbmVkIGNoYXIgKmJ1ZjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEwMC0jZGVmaW5lIEJZVEVfQUxJR04oYnMpIGlmKChicyktXFx1MDAzZWJpdCl7KGJzKS1cXHUwMDNlY3VyKys7KGJzKS1cXHUwMDNlYml0PTA7fVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEwMTpzdGF0aWMgdW5zaWduZWQgaW50IGdldF9sZW4oc3RydWN0IGJpdHN0ciAqYnMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEwMjpzdGF0aWMgdW5zaWduZWQgaW50IGdldF9iaXQoc3RydWN0IGJpdHN0ciAqYnMpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEwMzpzdGF0aWMgdW5zaWduZWQgaW50IGdldF9iaXRzKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTA0OnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdG1hcChzdHJ1Y3QgYml0c3RyICpicywgdW5zaWduZWQgaW50IGIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEwNTpzdGF0aWMgdW5zaWduZWQgaW50IGdldF91aW50KHN0cnVjdCBiaXRzdHIgKmJzLCBpbnQgYik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTA2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTEwNy0vKiBEZWNvZGVyIEZ1bmN0aW9ucyAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEwODpzdGF0aWMgaW50IGRlY29kZV9udWwoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEwOTpzdGF0aWMgaW50IGRlY29kZV9ib29sKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTA6c3RhdGljIGludCBkZWNvZGVfb2lkKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTE6c3RhdGljIGludCBkZWNvZGVfaW50KHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTI6c3RhdGljIGludCBkZWNvZGVfZW51bShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTEzOnN0YXRpYyBpbnQgZGVjb2RlX2JpdHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTE0OnN0YXRpYyBpbnQgZGVjb2RlX251bXN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTE1OnN0YXRpYyBpbnQgZGVjb2RlX29jdHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTE2OnN0YXRpYyBpbnQgZGVjb2RlX2JtcHN0cihzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTE3OnN0YXRpYyBpbnQgZGVjb2RlX3NlcShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTE4OnN0YXRpYyBpbnQgZGVjb2RlX3NlcW9mKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxMTk6c3RhdGljIGludCBkZWNvZGVfY2hvaWNlKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xMjAtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTIxLS8qIERlY29kZXIgRnVuY3Rpb25zIFZlY3RvciAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjEyMjp0eXBlZGVmIGludCAoKmRlY29kZXJfdCkoc3RydWN0IGJpdHN0ciAqLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqLCBjaGFyICosIGludCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTIzLXN0YXRpYyBjb25zdCBkZWNvZGVyX3QgRGVjb2RlcnNbXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE0Ny0vKiBBc3N1bWUgYnMgaXMgYWxpZ25lZCBcXHUwMDI2XFx1MDAyNiB2IFxcdTAwM2MgMTYzODQgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoxNDg6c3RhdGljIHVuc2lnbmVkIGludCBnZXRfbGVuKHN0cnVjdCBiaXRzdHIgKmJzKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE0OS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xNjItXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTYzOnN0YXRpYyBpbnQgbmZfaDMyM19lcnJvcl9ib3VuZGFyeShzdHJ1Y3QgYml0c3RyICpicywgc2l6ZV90IGJ5dGVzLCBzaXplX3QgYml0cylcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0xNjQte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTc1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjE3NjpzdGF0aWMgdW5zaWduZWQgaW50IGdldF9iaXQoc3RydWN0IGJpdHN0ciAqYnMpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMTc3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE4NS0vKiBBc3N1bWUgYiBcXHUwMDNjPSA4ICovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MTg2OnN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2JpdHMoc3RydWN0IGJpdHN0ciAqYnMsIHVuc2lnbmVkIGludCBiKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTE4Ny17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yMTAtLyogQXNzdW1lIGIgXFx1MDAzYz0gMzIgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzoyMTE6c3RhdGljIHVuc2lnbmVkIGludCBnZXRfYml0bWFwKHN0cnVjdCBiaXRzdHIgKmJzLCB1bnNpZ25lZCBpbnQgYilcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yMTIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjQ5LSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjI1MDpzdGF0aWMgdW5zaWduZWQgaW50IGdldF91aW50KHN0cnVjdCBiaXRzdHIgKmJzLCBpbnQgYilcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yNTEte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjczLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjI3NDpzdGF0aWMgaW50IGRlY29kZV9udWwoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTI3NS0gICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjgxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjI4MjpzdGF0aWMgaW50IGRlY29kZV9ib29sKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yODMtICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0yOTItXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MjkzOnN0YXRpYyBpbnQgZGVjb2RlX29pZChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMjk0LSAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zMTEtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MzEyOnN0YXRpYyBpbnQgZGVjb2RlX2ludChzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtMzEzLSAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zNjEtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6MzYyOnN0YXRpYyBpbnQgZGVjb2RlX2VudW0oc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM2My0gICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTM3Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozNzg6c3RhdGljIGludCBkZWNvZGVfYml0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy0zNzktICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQxMy1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo0MTQ6c3RhdGljIGludCBkZWNvZGVfbnVtc3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00MTUtICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQzMy1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo0MzQ6c3RhdGljIGludCBkZWNvZGVfb2N0c3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00MzUtICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTQ4MS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo0ODI6c3RhdGljIGludCBkZWNvZGVfYm1wc3RyKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy00ODMtICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTUxMC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo1MTE6c3RhdGljIGludCBkZWNvZGVfc2VxKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy01MTItICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJhc2UsIGludCBsZXZlbClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY0My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo2NDQ6c3RhdGljIGludCBkZWNvZGVfc2Vxb2Yoc3RydWN0IGJpdHN0ciAqYnMsIGNvbnN0IHN0cnVjdCBmaWVsZF90ICpmLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTY0NS0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy03MzktXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6NzQwOnN0YXRpYyBpbnQgZGVjb2RlX2Nob2ljZShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtNzQxLSAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz04MjE9aW50IERlY29kZVJhc01lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFJhc01lc3NhZ2UgKnJhcylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgyNi1cXHR9O1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jOjgyNzpcXHRzdHJ1Y3QgYml0c3RyIGJzO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgyOC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jPTgzNj1zdGF0aWMgaW50IERlY29kZUgzMjNfVXNlckluZm9ybWF0aW9uKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgY2hhciAqYmVnLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODQyLVxcdH07XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODQzOlxcdHN0cnVjdCBiaXRzdHIgYnM7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODQ0LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9ODUzPWludCBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NjAtXFx0fTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo4NjE6XFx0c3RydWN0IGJpdHN0ciBicztcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NjItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjA0OjM5Ljc5NTE2Mjg0OFoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTI3ODQ5MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYERlY29kZVJhc01lc3NhZ2VgIFVzYWdlIGluIG5mX2Nvbm50cmFja19oMzIzX21haW4uYyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGBEZWNvZGVSYXNNZXNzYWdlYCBmdW5jdGlvbiBpcyBiZWluZyBsZXZlcmFnZWQgd2l0aGluIHRoZSBgbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBuZXRmaWx0ZXIgY29udGV4dC4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGFyZWFzIGZvciBpbXByb3ZlbWVudCwgb3B0aW1pemF0aW9uLCBvciBldmVuIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGFsdGhvdWdoIHRoYXQncyBub3QgdGhlIHByaW1hcnkgZm9jdXMgcmlnaHQgbm93LiBGaXJzdCBJJ20gY2hlY2tpbmcsIGF0IGEgaGlnaCBsZXZlbCwgdGhlIGZsb3cgb2YgdGhlIGNvZGUuIFRoZW4sIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGluZyBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSB0aGF04oCZcyBiZWluZyBmZWQgaW50byBgRGVjb2RlUmFzTWVzc2FnZWAgYW5kLCBjb252ZXJzZWx5LCB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgcHJvZHVjaW5nLiBJIHdpbGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBkZWNvZGVkIGRhdGEgaXMgYmVpbmcgdXNlZCwgZXNwZWNpYWxseSBpZiBhbnkgYXNzdW1wdGlvbnMgYXJlIGJlaW5nIG1hZGUgYWJvdXQgaXRzIGZvcm1hdCBvciBjb250ZW50LiBUaGUgZW5kIGdvYWwgaXMgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU3NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjA0OjQxLjkyMzA2NDM3N1oiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyNDUxNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRGVjb2RlUmFzTWVzc2FnZXxEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2V8dGltZVRvTGl2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz0zMTI9c3RhdGljIGludCBkZWNvZGVfaW50KHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMzNC1cXHRcXHRCWVRFX0FMSUdOKGJzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzozMzU6XFx0XFx0aWYgKGJhc2UgXFx1MDAyNlxcdTAwMjYgKGYtXFx1MDAzZWF0dHIgXFx1MDAyNiBERUNPREUpKSB7XFx0LyogdGltZVRvTGl2ZSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTMzNi1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgdiA9IGdldF91aW50KGJzLCBsZW4pICsgZi1cXHUwMDNlbGI7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYz03NDA9c3RhdGljIGludCBkZWNvZGVfY2hvaWNlKHN0cnVjdCBiaXRzdHIgKmJzLCBjb25zdCBzdHJ1Y3QgZmllbGRfdCAqZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jLTgyMC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYzo4MjE6aW50IERlY29kZVJhc01lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFJhc01lc3NhZ2UgKnJhcylcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04MjIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM9ODM2PXN0YXRpYyBpbnQgRGVjb2RlSDMyM19Vc2VySW5mb3JtYXRpb24odW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBjaGFyICpiZWcsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYy04NTItXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmM6ODUzOmludCBEZWNvZGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmMtODU0LVxcdFxcdFxcdFxcdFxcdCBNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UgKlxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9NTI5PXN0YXRpYyBpbnQgaDI0NV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtNTUyLVxcdFxcdC8qIERlY29kZSBILjI0NSBzaWduYWwgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzo1NTM6XFx0XFx0cmV0ID0gRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlKGRhdGEsIGRhdGFsZW4sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtNTU0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZtc2NtKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jPTEzMDc9c3RhdGljIGludCBwcm9jZXNzX3JycShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xMzM2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjEzMzc6XFx0aWYgKHJycS1cXHUwMDNlb3B0aW9ucyBcXHUwMDI2IGVSZWdpc3RyYXRpb25SZXF1ZXN0X3RpbWVUb0xpdmUpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxMzM4OlxcdFxcdHByX2RlYnVnKFxcXCJuZl9jdF9yYXM6IFJSUSBUVEwgPSAldSBzZWNvbmRzXFxcXG5cXFwiLCBycnEtXFx1MDAzZXRpbWVUb0xpdmUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjEzMzk6XFx0XFx0aW5mby1cXHUwMDNldGltZW91dCA9IHJycS1cXHUwMDNldGltZVRvTGl2ZTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYy0xMzQwLVxcdH0gZWxzZVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTM0Nj1zdGF0aWMgaW50IHByb2Nlc3NfcmNmKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTEzNzEtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTM3MjpcXHRpZiAocmNmLVxcdTAwM2VvcHRpb25zIFxcdTAwMjYgZVJlZ2lzdHJhdGlvbkNvbmZpcm1fdGltZVRvTGl2ZSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jOjEzNzM6XFx0XFx0cHJfZGVidWcoXFxcIm5mX2N0X3JhczogUkNGIFRUTCA9ICV1IHNlY29uZHNcXFxcblxcXCIsIHJjZi1cXHUwMDNldGltZVRvTGl2ZSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM6MTM3NDpcXHRcXHRpbmZvLVxcdTAwM2V0aW1lb3V0ID0gcmNmLVxcdTAwM2V0aW1lVG9MaXZlO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jLTEzNzUtXFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmM9MTY2ND1zdGF0aWMgaW50IHJhc19oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTY4My1cXHQvKiBEZWNvZGUgUkFTIG1lc3NhZ2UgKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYzoxNjg0OlxcdHJldCA9IERlY29kZVJhc01lc3NhZ2UoZGF0YSwgZGF0YWxlbiwgXFx1MDAyNnJhcyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMtMTY4NS1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jPTE1NzU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWVsZF90IF9SZWdpc3RyYXRpb25SZXF1ZXN0W10gPSB7XFx0LyogU0VRVUVOQ0UgKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYy0xNTkzLVxcdHtGTkFNRShcXFwiYWx0ZXJuYXRlRW5kcG9pbnRzXFxcIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxNTk0OlxcdHtGTkFNRShcXFwidGltZVRvTGl2ZVxcXCIpIElOVCwgQ09OUywgMSwgMCwgREVDT0RFIHwgT1BULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxNTk1OlxcdCBvZmZzZXRvZihSZWdpc3RyYXRpb25SZXF1ZXN0LCB0aW1lVG9MaXZlKSwgTlVMTH0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE1OTYtXFx0e0ZOQU1FKFxcXCJ0b2tlbnNcXFwiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmM9MTYzMz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgX1JlZ2lzdHJhdGlvbkNvbmZpcm1bXSA9IHtcXHQvKiBTRVFVRU5DRSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE2NDUtXFx0e0ZOQU1FKFxcXCJhbHRlcm5hdGVHYXRla2VlcGVyXFxcIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxNjQ2OlxcdHtGTkFNRShcXFwidGltZVRvTGl2ZVxcXCIpIElOVCwgQ09OUywgMSwgMCwgREVDT0RFIHwgT1BULFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYzoxNjQ3OlxcdCBvZmZzZXRvZihSZWdpc3RyYXRpb25Db25maXJtLCB0aW1lVG9MaXZlKSwgTlVMTH0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM190eXBlcy5jLTE2NDgtXFx0e0ZOQU1FKFxcXCJ0b2tlbnNcXFwiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjA0OjQxLjk3NDMxNjg1NVoiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTk3MzYxMzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdW5kZXJzdGFuZGluZyB0aGUgYHJhc2AgaW5pdGlhbGl6YXRpb24gYW5kIHVzYWdlIHdpdGhpbiBgcmFzX2hlbHBgLCBiYXNlZCBvbiB0aGF0IHBvaW50ZXIgdG8gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jYCBhcm91bmQgbGluZXMgMTY3NS0xNzEwLlxuXG4qKkRlY29uc3RydWN0aW5nIGByYXNgIGluIGByYXNfaGVscGAqKlxuXG5NeSBpbW1lZGlhdGUgcGxhbiBpcyB0byBvcGVuIHRoYXQgZmlsZSwgYG5mX2Nvbm50cmFja19oMzIzX21haW4uY2AsIGFuZCB6ZXJvIGluIG9uIHRoZSBzdWdnZXN0ZWQgbGluZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBXaGF0IGlzIGByYXNgPyBJcyBpdCBhIGRhdGEgc3RydWN0dXJlPyBBIGZ1bmN0aW9uIHBvaW50ZXI/IEEgZ2xvYmFsIHZhcmlhYmxlPyBUaGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBjbHVlcy4gSSdsbCBiZSBsb29raW5nIGZvciB3aGVyZSBgcmFzYCBpcyBkZWNsYXJlZCBhbmQgaW5pdGlhbGl6ZWQsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHN0cnVjdHVyZXMgb3IgdHlwZXMgaW52b2x2ZWQuIFRoZW4sIEknbGwgdHJhY2UgaG93IGl0J3MgdXNlZCB3aXRoaW4gdGhhdCBibG9jayBvZiBjb2RlIOKAkyBhcmUgZnVuY3Rpb25zIGNhbGxlZCBvbiBpdD8gQXJlIHZhbHVlcyBhc3NpZ25lZCB0byBpdHMgbWVtYmVycz8gSXMgaXQgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIG90aGVyIGZ1bmN0aW9ucz9cblxuR2l2ZW4gdGhlIGZpbGUgbmFtZSwgSSdtIGV4cGVjdGluZyB0aGlzIGByYXNgIGVudGl0eSBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggSC4zMjMgY29ubmVjdGlvbiB0cmFja2luZy4gSXQgbWlnaHQgYmUgcmVsYXRlZCB0byBoYW5kbGluZyBSQVMgKFJlZ2lzdHJhdGlvbiwgQWRtaXNzaW9uLCBhbmQgU3RhdHVzKSBtZXNzYWdlcyB3aXRoaW4gdGhlIEguMzIzIHByb3RvY29sLiBUaGUgbG9jYXRpb24gd2l0aGluIHRoZSBgbmZfY29ubnRyYWNrYCBmcmFtZXdvcmsgc3VnZ2VzdHMgaXRzIGxpa2VseSBpbnZvbHZlZCBpbiBpbnNwZWN0aW5nIGFuZCBtYW5pcHVsYXRpbmcgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyaWVzIHJlbGV2YW50IHRvIEguMzIzIHRyYWZmaWMuIFRoZSBsaW5lIG51bWJlcnMgaG9wZWZ1bGx5IHBvaW50IHRvIHdoZXJlIFJBUy1zcGVjaWZpYyBwYXJzaW5nIG9yIHByb2Nlc3Npbmcgb2NjdXJzLCBwZXJoYXBzIHdoZXJlIHRoZSBILjIyNS9RLjkzMSBtZXNzYWdlcyBhcmUgZGVtdXhlZCBhbmQgdGhlIFJBUy1zcGVjaWZpYyBkZXRhaWxzIGFyZSBoYW5kbGVkLiBJJ20ga2VlbiB0byBzZWUgdGhlIGNvZGUgd2hpY2ggdHJhY2tzIHRoZSBILjMyMyBSQVMgbWVzc2FnZXMsIHdoaWNoIGlzIHZpdGFsIHRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIGNvbm5lY3Rpb24gZmxvdyBhbmQgTkFUIHRyYXZlcnNhbCBiZWhhdmlvciBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nLiBNeSBleHBlcnQgaW5zdGluY3RzIHRlbGwgbWUgdGhpcyB3aWxsIHByb3ZpZGUgc29tZSBpbnNpZ2h0cyBpbnRvIGhvdyBILjMyMyBlbmRwb2ludHMgYXJlIHJlZ2lzdGVyZWQgYW5kIG1hbmFnZWQsIGFuZCBob3cgdGhhdCBpbmZvcm1hdGlvbiBpcyB1c2VkIGZvciBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjQ2LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDQ6NDUuNTcxNjgyMzQxWiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjcwOlxcdFxcdGludCByZXQ7XFxuMTY3MTpcXHRcXG4xNjcyOlxcdFxcdHByX2RlYnVnKFxcXCJuZl9jdF9yYXM6IHNrYmxlbiA9ICV1XFxcXG5cXFwiLCBza2ItXFx1MDAzZWxlbik7XFxuMTY3MzpcXHRcXG4xNjc0OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmZfaDMyM19sb2NrKTtcXG4xNjc1OlxcdFxcbjE2NzY6XFx0XFx0LyogR2V0IFVEUCBkYXRhICovXFxuMTY3NzpcXHRcXHRkYXRhID0gZ2V0X3VkcF9kYXRhKHNrYiwgcHJvdG9mZiwgXFx1MDAyNmRhdGFsZW4pO1xcbjE2Nzg6XFx0XFx0aWYgKGRhdGEgPT0gTlVMTClcXG4xNjc5OlxcdFxcdFxcdGdvdG8gYWNjZXB0O1xcbjE2ODA6XFx0XFx0cHJfZGVidWcoXFxcIm5mX2N0X3JhczogUkFTIG1lc3NhZ2UgbGVuPSVkIFxcXCIsIGRhdGFsZW4pO1xcbjE2ODE6XFx0XFx0bmZfY3RfZHVtcF90dXBsZShcXHUwMDI2Y3QtXFx1MDAzZXR1cGxlaGFzaFtDVElORk8yRElSKGN0aW5mbyldLnR1cGxlKTtcXG4xNjgyOlxcdFxcbjE2ODM6XFx0XFx0LyogRGVjb2RlIFJBUyBtZXNzYWdlICovXFxuMTY4NDpcXHRcXHRyZXQgPSBEZWNvZGVSYXNNZXNzYWdlKGRhdGEsIGRhdGFsZW4sIFxcdTAwMjZyYXMpO1xcbjE2ODU6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4xNjg2OlxcdFxcdFxcdHByX2RlYnVnKFxcXCJuZl9jdF9yYXM6IGRlY29kaW5nIGVycm9yOiAlc1xcXFxuXFxcIixcXG4xNjg3OlxcdFxcdFxcdFxcdCByZXQgPT0gSDMyM19FUlJPUl9CT1VORCA/XFxuMTY4ODpcXHRcXHRcXHRcXHQgXFxcIm91dCBvZiBib3VuZFxcXCIgOiBcXFwib3V0IG9mIHJhbmdlXFxcIik7XFxuMTY4OTpcXHRcXHRcXHRnb3RvIGFjY2VwdDtcXG4xNjkwOlxcdFxcdH1cXG4xNjkxOlxcdFxcbjE2OTI6XFx0XFx0LyogUHJvY2VzcyBSQVMgbWVzc2FnZSAqL1xcbjE2OTM6XFx0XFx0aWYgKHByb2Nlc3NfcmFzKHNrYiwgY3QsIGN0aW5mbywgcHJvdG9mZiwgXFx1MDAyNmRhdGEsIFxcdTAwMjZyYXMpIFxcdTAwM2MgMClcXG4xNjk0OlxcdFxcdFxcdGdvdG8gZHJvcDtcXG4xNjk1OlxcdFxcbjE2OTY6XFx0ICAgICAgYWNjZXB0OlxcbjE2OTc6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5mX2gzMjNfbG9jayk7XFxuMTY5ODpcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbjE2OTk6XFx0XFxuMTcwMDpcXHQgICAgICBkcm9wOlxcbjE3MDE6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5mX2gzMjNfbG9jayk7XFxuMTcwMjpcXHRcXHRuZl9jdF9oZWxwZXJfbG9nKHNrYiwgY3QsIFxcXCJjYW5ub3QgcHJvY2VzcyBSQVMgbWVzc2FnZVxcXCIpO1xcbjE3MDM6XFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuMTcwNDpcXHR9XFxuMTcwNTpcXHRcXG4xNzA2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgcmFzX2V4cF9wb2xpY3kgPSB7XFxuMTcwNzpcXHRcXHQubWF4X2V4cGVjdGVkXFx0XFx0PSAzMixcXG4xNzA4OlxcdFxcdC50aW1lb3V0XFx0XFx0PSAyNDAsXFxuMTcwOTpcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowNDo0NS41NzE3OTQ0NTFaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc2OTIzMjYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEZWNvZGluZyB0aGUgYHJhc2AgVmFyaWFibGU6IEEgUXVpY2sgRGl2ZSoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHJhc2AgdmFyaWFibGUgaXMgZGVjbGFyZWQgYW5kIHVzZWQgd2l0aGluIHRoaXMgY29udGV4dC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGByYXNfaGVscGAgZnVuY3Rpb24gYW5kIHRoZSBgRGVjb2RlUmFzTWVzc2FnZWAgZnVuY3Rpb24uIEkgd2FudCB0byBzZWUgZXhhY3RseSBob3cgaXQncyBkZWZpbmVkIGFuZCBob3cgaXQncyB1c2VkIHdpdGhpbiB0aG9zZSB0d28gZnVuY3Rpb25zIHNwZWNpZmljYWxseS4gR2V0dGluZyBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGRlY2xhcmF0aW9uIHdpbGwgaW5mb3JtIHRoZSByZXN0IG9mIG15IGFuYWx5c2lzLiBObyBuZWVkIHRvIGdvIHRvbyBkZWVwIGhlcmUsIGp1c3QgdGhlIGluaXRpYWwgZGVmaW5pdGlvbiBhbmQgbWF5YmUgdGhlIGZpcnN0IGZldyB1c2FnZXMgc2hvdWxkIHN1ZmZpY2UuIEkgd2FudCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHJlZCBmbGFncywgc3VjaCBhcyBhbWJpZ3VvdXMgdHlwaW5nIG9yIHBvdGVudGlhbCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgcmlnaHQgb2ZmIHRoZSBiYXQuIExldCdzIGdldCB0byBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTM3ODksIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjA0OjQ4LjM0MTAzMDM0MloiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjIwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY1MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTY1MDpcXHRcXHRjYXNlIGVSYXNNZXNzYWdlX2xvY2F0aW9uQ29uZmlybTpcXG4xNjUxOlxcdFxcdFxcdHJldHVybiBwcm9jZXNzX2xjZihza2IsIGN0LCBjdGluZm8sIHByb3RvZmYsIGRhdGEsXFxuMTY1MjpcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2cmFzLVxcdTAwM2Vsb2NhdGlvbkNvbmZpcm0pO1xcbjE2NTM6XFx0XFx0Y2FzZSBlUmFzTWVzc2FnZV9pbmZvUmVxdWVzdFJlc3BvbnNlOlxcbjE2NTQ6XFx0XFx0XFx0cmV0dXJuIHByb2Nlc3NfaXJyKHNrYiwgY3QsIGN0aW5mbywgcHJvdG9mZiwgZGF0YSxcXG4xNjU1OlxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZyYXMtXFx1MDAzZWluZm9SZXF1ZXN0UmVzcG9uc2UpO1xcbjE2NTY6XFx0XFx0ZGVmYXVsdDpcXG4xNjU3OlxcdFxcdFxcdHByX2RlYnVnKFxcXCJuZl9jdF9yYXM6IFJBUyBtZXNzYWdlICVkXFxcXG5cXFwiLCByYXMtXFx1MDAzZWNob2ljZSk7XFxuMTY1ODpcXHRcXHRcXHRicmVhaztcXG4xNjU5OlxcdFxcdH1cXG4xNjYwOlxcdFxcbjE2NjE6XFx0XFx0cmV0dXJuIDA7XFxuMTY2MjpcXHR9XFxuMTY2MzpcXHRcXG4xNjY0OlxcdHN0YXRpYyBpbnQgcmFzX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXFxuMTY2NTpcXHRcXHRcXHQgICAgc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbylcXG4xNjY2OlxcdHtcXG4xNjY3OlxcdFxcdHN0YXRpYyBSYXNNZXNzYWdlIHJhcztcXG4xNjY4OlxcdFxcdHVuc2lnbmVkIGNoYXIgKmRhdGE7XFxuMTY2OTpcXHRcXHRpbnQgZGF0YWxlbiA9IDA7XFxuMTY3MDpcXHRcXHRpbnQgcmV0O1xcbjE2NzE6XFx0XFxuMTY3MjpcXHRcXHRwcl9kZWJ1ZyhcXFwibmZfY3RfcmFzOiBza2JsZW4gPSAldVxcXFxuXFxcIiwgc2tiLVxcdTAwM2VsZW4pO1xcbjE2NzM6XFx0XFxuMTY3NDpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5mX2gzMjNfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjA0OjQ4LjM0MTE1NDM0MloiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTI0Nzk4NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRlY29kaW5nIHRoZSBILjMyMyBBU04uMSBNZXNzYWdlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYERlY29kZVJhc01lc3NhZ2VgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGhhbmRsZXMgSC4zMjMgc2lnbmFsaW5nLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCB0aGUgdHJhbnNsYXRpb24gb2YgdGhvc2UgQVNOLjEtZW5jb2RlZCBSQVMgbWVzc2FnZXMgaW50byBzb21ldGhpbmcgdGhlIGNvbm50cmFjayBtb2R1bGUgY2FuIGFjdHVhbGx5ICp1c2UqLiBJIGltYWdpbmUgaXQncyBwdWxsaW5nIGFwYXJ0IHRoZSBiaXRzdHJlYW0sIGludGVycHJldGluZyB0aGUgdGFncywgbGVuZ3RocywgYW5kIHZhbHVlcywgYWxsIGJhc2VkIG9uIHRoZSBILjIyNS4wIGFuZCBILjI0NSBzcGVjaWZpY2F0aW9ucy4gSSdtIGd1ZXNzaW5nIGl0IGhhbmRsZXMgdGhlIHZhcmlvdXMgbWVzc2FnZSB0eXBlcyDigJMgUmVnaXN0cmF0aW9uLCBBZG1pc3Npb24sIEJhbmR3aWR0aCwgYW5kIHRoZSByZXN0LiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcsIHRvby4gSSdtIGN1cmlvdXMgaG93IGl0IGRlYWxzIHdpdGggbWFsZm9ybWVkIG9yIGluY29tcGxldGUgcGFja2V0czsgZG9lcyBpdCBkcm9wIHRoZW0sIGxvZyB0aGVtLCBvciB0cnkgdG8gcmVjb3Zlcj8gSSdsbCBiZSBsb29raW5nIGZvciBtZW1vcnkgYWxsb2NhdGlvbiwgc3RydWN0dXJlIHBvcHVsYXRpb24sIGFuZCBhbnkgb3B0aW1pemF0aW9ucyB0aGV5J3ZlIGltcGxlbWVudGVkLCBhcyBlZmZpY2llbmN5IGlzIGtleSBpbiBhIG5ldHdvcmtpbmcgZW52aXJvbm1lbnQuIFRoaXMgaXMgZ29pbmcgdG8gYmUgYSBnb29kIG9uZSwgdGltZSB0byBnZXQgdG8gaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDA4LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowNDo1MC40NjU5NTYzNDFaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODIwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODIwOlxcdFxcbiA4MjE6XFx0aW50IERlY29kZVJhc01lc3NhZ2UodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3Qgc3osIFJhc01lc3NhZ2UgKnJhcylcXG4gODIyOlxcdHtcXG4gODIzOlxcdFxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmllbGRfdCByYXNfbWVzc2FnZSA9IHtcXG4gODI0OlxcdFxcdFxcdEZOQU1FKFxcXCJSYXNNZXNzYWdlXFxcIikgQ0hPSUNFLCA1LCAyNCwgMzIsIERFQ09ERSB8IEVYVCxcXG4gODI1OlxcdFxcdFxcdDAsIF9SYXNNZXNzYWdlXFxuIDgyNjpcXHRcXHR9O1xcbiA4Mjc6XFx0XFx0c3RydWN0IGJpdHN0ciBicztcXG4gODI4OlxcdFxcbiA4Mjk6XFx0XFx0YnMuYnVmID0gYnMuYmVnID0gYnMuY3VyID0gYnVmO1xcbiA4MzA6XFx0XFx0YnMuZW5kID0gYnVmICsgc3o7XFxuIDgzMTpcXHRcXHRicy5iaXQgPSAwO1xcbiA4MzI6XFx0XFxuIDgzMzpcXHRcXHRyZXR1cm4gZGVjb2RlX2Nob2ljZShcXHUwMDI2YnMsIFxcdTAwMjZyYXNfbWVzc2FnZSwgKGNoYXIgKikgcmFzLCAwKTtcXG4gODM0OlxcdH1cXG4gODM1OlxcdFxcbiA4MzY6XFx0c3RhdGljIGludCBEZWNvZGVIMzIzX1VzZXJJbmZvcm1hdGlvbih1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGNoYXIgKmJlZyxcXG4gODM3OlxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVfdCBzeiwgSDMyM19Vc2VySW5mb3JtYXRpb24gKnV1aWUpXFxuIDgzODpcXHR7XFxuIDgzOTpcXHRcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpZWxkX3QgaDMyM191c2VyaW5mb3JtYXRpb24gPSB7XFxuIDg0MDpcXHRcXHRcXHRGTkFNRShcXFwiSDMyMy1Vc2VySW5mb3JtYXRpb25cXFwiKSBTRVEsIDEsIDIsIDIsIERFQ09ERSB8IEVYVCxcXG4gODQxOlxcdFxcdFxcdDAsIF9IMzIzX1VzZXJJbmZvcm1hdGlvblxcbiA4NDI6XFx0XFx0fTtcXG4gODQzOlxcdFxcdHN0cnVjdCBiaXRzdHIgYnM7XFxuIDg0NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDQ6NTAuNDY2MDUzNjUxWiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMTkzOTYwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqRGVjb2RpbmcgU3RydWN0dXJlczogRGVlcCBEaXZlIFRpbWUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGN1cmlvdXMgYWJvdXQgdGhlIGJlaGF2aW9yIG9mIGBkZWNvZGVfc2VxYCB3aGVuIGl0J3MgZGVhbGluZyB3aXRoIGEgc3RydWN0LiBUaGUgY29yZSBxdWVzdGlvbiBJIGhhdmUgaXM6IERvZXMgdGhpcyBmdW5jdGlvbiBleGhpYml0IGEgY2VydGFpbiBsZXZlbCBvZiBoeWdpZW5lPyBEb2VzIGl0IGdvIHRocm91Z2ggdGhlIGVmZm9ydCBvZiBpbml0aWFsaXppbmcgdGhlIHN0cnVjdCdzIG1lbWJlcnMsIHNwZWNpZmljYWxseSBieSB1c2luZyBzb21ldGhpbmcgbGlrZSBgbWVtc2V0YCB0byB6ZXJvIHRoZW0gb3V0LCBvciBkb2VzIGl0IGxlYXZlIHRoZW0gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZD8gT3IsIGRvZXMgaXQgaGF2ZSBhIHdheSB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vICpyYXMqIChlLmcuLCByZWR1bmRhbnQgYWRkcmVzcyBzcGFjZSkgaGFuZ2luZyBhcm91bmQ/IFRoYXQgaW5pdGlhbGl6YXRpb24gYmVoYXZpb3IgY2FuIGJlIGNyaXRpY2FsIGZvciBzYWZldHkgYW5kIHByZWRpY3RhYmlsaXR5LCBzbyBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzIGhlcmUuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gdG8gdmVyaWZ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE0OSwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDQ6NTIuNjg1NDUyNjA3WiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUxMDpcXHRcXG4gNTExOlxcdHN0YXRpYyBpbnQgZGVjb2RlX3NlcShzdHJ1Y3QgYml0c3RyICpicywgY29uc3Qgc3RydWN0IGZpZWxkX3QgKmYsXFxuIDUxMjpcXHQgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYmFzZSwgaW50IGxldmVsKVxcbiA1MTM6XFx0e1xcbiA1MTQ6XFx0XFx0dW5zaWduZWQgaW50IGV4dCwgYm1wLCBpLCBvcHQsIGxlbiA9IDAsIGJtcDIsIGJtcDJfbGVuO1xcbiA1MTU6XFx0XFx0aW50IGVycjtcXG4gNTE2OlxcdFxcdGNvbnN0IHN0cnVjdCBmaWVsZF90ICpzb247XFxuIDUxNzpcXHRcXHR1bnNpZ25lZCBjaGFyICpiZWcgPSBOVUxMO1xcbiA1MTg6XFx0XFxuIDUxOTpcXHRcXHRQUklOVChcXFwiJSpzJXNcXFxcblxcXCIsIGxldmVsICogVEFCX1NJWkUsIFxcXCIgXFxcIiwgZi1cXHUwMDNlbmFtZSk7XFxuIDUyMDpcXHRcXG4gNTIxOlxcdFxcdC8qIERlY29kZT8gKi9cXG4gNTIyOlxcdFxcdGJhc2UgPSAoYmFzZSBcXHUwMDI2XFx1MDAyNiAoZi1cXHUwMDNlYXR0ciBcXHUwMDI2IERFQ09ERSkpID8gYmFzZSArIGYtXFx1MDAzZW9mZnNldCA6IE5VTEw7XFxuIDUyMzpcXHRcXG4gNTI0OlxcdFxcdC8qIEV4dGVuc2libGU/ICovXFxuIDUyNTpcXHRcXHRpZiAobmZfaDMyM19lcnJvcl9ib3VuZGFyeShicywgMCwgMSkpXFxuIDUyNjpcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gNTI3OlxcdFxcdGV4dCA9IChmLVxcdTAwM2VhdHRyIFxcdTAwMjYgRVhUKSA/IGdldF9iaXQoYnMpIDogMDtcXG4gNTI4OlxcdFxcbiA1Mjk6XFx0XFx0LyogR2V0IGZpZWxkcyBiaXRtYXAgKi9cXG4gNTMwOlxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCAwLCBmLVxcdTAwM2VzeikpXFxuIDUzMTpcXHRcXHRcXHRyZXR1cm4gSDMyM19FUlJPUl9CT1VORDtcXG4gNTMyOlxcdFxcdGlmIChmLVxcdTAwM2VzeiBcXHUwMDNlIDMyKVxcbiA1MzM6XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfUkFOR0U7XFxuIDUzNDpcXHRcXHRibXAgPSBnZXRfYml0bWFwKGJzLCBmLVxcdTAwM2Vzeik7XFxuIDUzNTpcXHRcXHRpZiAoYmFzZSlcXG4gNTM2OlxcdFxcdFxcdCoodW5zaWduZWQgaW50ICopYmFzZSA9IGJtcDtcXG4gNTM3OlxcdFxcbiA1Mzg6XFx0XFx0LyogRGVjb2RlIHRoZSByb290IGNvbXBvbmVudHMgKi9cXG4gNTM5OlxcdFxcdGZvciAoaSA9IG9wdCA9IDAsIHNvbiA9IGYtXFx1MDAzZWZpZWxkczsgaSBcXHUwMDNjIGYtXFx1MDAzZWxiOyBpKyssIHNvbisrKSB7XFxuIDU0MDpcXHRcXHRcXHRpZiAoc29uLVxcdTAwM2VhdHRyIFxcdTAwMjYgU1RPUCkge1xcbiA1NDE6XFx0XFx0XFx0XFx0UFJJTlQoXFxcIiUqcyVzXFxcXG5cXFwiLCAobGV2ZWwgKyAxKSAqIFRBQl9TSVpFLCBcXFwiIFxcXCIsXFxuIDU0MjpcXHRcXHRcXHRcXHQgICAgICBzb24tXFx1MDAzZW5hbWUpO1xcbiA1NDM6XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfU1RPUDtcXG4gNTQ0OlxcdFxcdFxcdH1cXG4gNTQ1OlxcdFxcbiA1NDY6XFx0XFx0XFx0aWYgKHNvbi1cXHUwMDNlYXR0ciBcXHUwMDI2IE9QVCkge1xcdC8qIE9wdGlvbmFsIGNvbXBvbmVudCAqL1xcbiA1NDc6XFx0XFx0XFx0XFx0aWYgKCEoKDB4ODAwMDAwMDBVIFxcdTAwM2VcXHUwMDNlIChvcHQrKykpIFxcdTAwMjYgYm1wKSlcXHQvKiBOb3QgZXhpc3QgKi9cXG4gNTQ4OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA1NDk6XFx0XFx0XFx0fVxcbiA1NTA6XFx0XFxuIDU1MTpcXHRcXHRcXHQvKiBEZWNvZGUgKi9cXG4gNTUyOlxcdFxcdFxcdGlmIChzb24tXFx1MDAzZWF0dHIgXFx1MDAyNiBPUEVOKSB7XFx0LyogT3BlbiBmaWVsZCAqL1xcbiA1NTM6XFx0XFx0XFx0XFx0aWYgKG5mX2gzMjNfZXJyb3JfYm91bmRhcnkoYnMsIDIsIDApKVxcbiA1NTQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDU1NTpcXHRcXHRcXHRcXHRsZW4gPSBnZXRfbGVuKGJzKTtcXG4gNTU2OlxcdFxcdFxcdFxcdGlmIChuZl9oMzIzX2Vycm9yX2JvdW5kYXJ5KGJzLCBsZW4sIDApKVxcbiA1NTc6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7XFxuIDU1ODpcXHRcXHRcXHRcXHRpZiAoIWJhc2UgfHwgIShzb24tXFx1MDAzZWF0dHIgXFx1MDAyNiBERUNPREUpKSB7XFxuIDU1OTpcXHRcXHRcXHRcXHRcXHRQUklOVChcXFwiJSpzJXNcXFxcblxcXCIsIChsZXZlbCArIDEpICogVEFCX1NJWkUsXFxuIDU2MDpcXHRcXHRcXHRcXHRcXHQgICAgICBcXFwiIFxcXCIsIHNvbi1cXHUwMDNlbmFtZSk7XFxuIDU2MTpcXHRcXHRcXHRcXHRcXHRicy1cXHUwMDNlY3VyICs9IGxlbjtcXG4gNTYyOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA1NjM6XFx0XFx0XFx0XFx0fVxcbiA1NjQ6XFx0XFx0XFx0XFx0YmVnID0gYnMtXFx1MDAzZWN1cjtcXG4gNTY1OlxcdFxcbiA1NjY6XFx0XFx0XFx0XFx0LyogRGVjb2RlICovXFxuIDU2NzpcXHRcXHRcXHRcXHRpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tXFx1MDAzZXR5cGVdKSAoYnMsIHNvbiwgYmFzZSxcXG4gNTY4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbGV2ZWwgKyAxKSkgXFx1MDAzY1xcbiA1Njk6XFx0XFx0XFx0XFx0ICAgIEgzMjNfRVJST1JfTk9ORSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6MDQ6NTIuNjg1NTQ1ODM3WiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc2NDQ5ODU5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIGBkZWNvZGVfaW50YCBDb3JyZWN0aW9uIGluIGBuZl9jb25udHJhY2tfaDMyM19hc24xLmNgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGRlY29kZV9pbnRgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYG5mX2Nvbm50cmFja19oMzIzX2FzbjEuY2AgbW9kdWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoYW5nZSBjb21wbGV0ZWx5LiBGaXJzdCwgSSdtIGdvaW5nIHRvIHNjYW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUgdG8gc2VlIGlmIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBlbHNld2hlcmUgYW5kIGlmIHRoaXMgZml4IGhhcyBhbnkgYnJvYWRlciBpbXBsaWNhdGlvbnMuXG5cbk5vdywgZm9jdXNpbmcgb24gYGRlY29kZV9pbnRgIGl0c2VsZiwgdGhlIGNvcmUgb2YgdGhlIGlzc3VlIGxpZXMgd2l0aGluIHRoZSBgY2FzZSBDT05TOmAgYmxvY2suIEkgc2VlIHRoYXQgYGdldF91aW50KGJzLCBsZW4pYCByZWFkcyBgbGVuYCBieXRlcyBmcm9tIHRoZSBiaXRzdHJlYW0gYGJzYCBhbmQgKmFsc28qIGFkdmFuY2VzIHRoZSBgYnMtXHUwMDNlY3VyYCBwb2ludGVyLiBUaGUgb3JpZ2luYWwgY29kZSB1bmNvbmRpdGlvbmFsbHkgYWR2YW5jZWQgYGJzLVx1MDAzZWN1cmAgYWdhaW4gYnkgYGxlbmAgYnl0ZXMgYWZ0ZXIgdGhlIGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQgdXNpbmcgYGdldF91aW50KClgLiBUaGlzIG1lYW50LCB3aGVuIHRoZSBjb25kaXRpb24gYChiYXNlIFx1MDAyNlx1MDAyNiAoZi1cdTAwM2VhdHRyIFx1MDAyNiBERUNPREUpKWAgd2FzIHRydWUsIHRoZSBwb2ludGVyIGBicy1cdTAwM2VjdXJgIGdvdCBpbmNyZW1lbnRlZCB0d2ljZSBieSBgbGVuYCwgZWZmZWN0aXZlbHkgc2tpcHBpbmcgb3ZlciBkYXRhLlxuXG5UaGUgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhlIHVuY29uZGl0aW9uYWwgYGJzLVx1MDAzZWN1ciArPSBsZW47YCBpcyBub3cgbW92ZWQgaW50byB0aGUgYGVsc2VgIGJyYW5jaC4gTm93LCBgYnMtXHUwMDNlY3VyYCBpcyBhZHZhbmNlZCBieSB0aGUgY29ycmVjdCBhbW91bnQsICpvbmx5KiBvbmNlLCBlaXRoZXIgYnkgYGdldF91aW50YCB3aXRoaW4gdGhlIGlmIGJsb2NrIG9yIGJ5IGluY3JlbWVudGluZyB3aXRoaW4gdGhlIGVsc2UgYmxvY2suXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgdGhpcyBjb3JyZWN0aW9uIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3M/IEkgbmVlZCB0byBhbmFseXplIHRoaXMgY2FyZWZ1bGx5LlxuXG5JJ2xsIGdvIHRocm91Z2ggdGhlIHN0YW5kYXJkIEtNU0FOL0tBU0FOIGNyaXRlcmlhOlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm8sIHRoaXMgaXMgY29ubnRyYWNrLCBwYXJzaW5nIHRoZSBuZXR3b3JrIHBhY2tldCBwYXlsb2FkICp3aXRoaW4qIHRoZSBrZXJuZWwuIFRoZXJlIGFyZSBubyBkaXJlY3QgY29waWVzIHRvIHVzZXJzcGFjZS5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBOby4gVGhlIHZhbHVlIGB2YCBpcyBkZXJpdmVkIGZyb20gYGdldF91aW50KClgIGFuZCBgZi1cdTAwM2VsYmAsIGBsZW5gIGZyb20gYGdldF9iaXRzKCkgKyAxYCwgYW5kIGBic2AgaXMgYSB2YWxpZCBiaXRzdHJlYW0gb3ZlciB0aGUgcmVjZWl2ZWQgcGFja2V0IGRhdGEuIE5vIGRlcGVuZGVuY2llcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS5cbjMuICAqKkRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gd2l0aCBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIG9yIGluaXRpYWxpemF0aW9uIGNoYW5nZXMgaGVyZS5cbjQuICAqKkJvdW5kcyBjaGVja3Mgb3IgbG9naWMgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBidWZmZXIgYnl0ZXM/KiogTm8uIFRoZSBgc2tiYCBkYXRhIGlzIHJlY2VpdmVkIHBhY2tldCBkYXRhLCBhbHJlYWR5IHBvcHVsYXRlZC4gVGhlIGJ1ZyB3YXMgYSBwb2ludGVyIG9mZnNldCBpc3N1ZSB3aXRoaW4gdGhlIHBhcnNpbmcsIG5vdCBhbiB1bmluaXRpYWxpemVkIHJlYWQuIFN0YW5kYXJkIG1lbW9yeSBzYWZldHkgZGV0ZWN0b3JzIChLQVNBTikgYW5kIHRoZSBwYXJzaW5nIGxvZ2ljIGl0c2VsZiBoYW5kbGUgYm91bmRzIGFuZCBvdXQtb2YtYm91bmRzIGlzc3Vlcy5cblxuVGhlcmVmb3JlLCB0aGlzIGlzIGEgcHVyZSBwYXJzZXIgc3RyZWFtIHBvc2l0aW9uIGJ1ZyBmaXggd2l0aGluIGBuZl9jb25udHJhY2tfaDMyM19hc24xYC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBjb3JyZWN0aW9uLiBTdGFuZGFyZCBLQVNBTiBhbmQgZXhpc3RpbmcgdGVzdCBzdWl0ZXMgYXJlIHN1ZmZpY2llbnQgdG8gdmFsaWRhdGUgdGhpcy5cblxuTXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBzYWZldHkgY29uY2VybnMgYW5kIGlzIHB1cmVseSBhIHBhcnNpbmcgY29ycmVjdG5lc3MgZml4LiBJIHdpbGwgc2V0IHRoZSByZXN1bHRzIHRvIGluZGljYXRlIHRoYXQgS01TQU4gaXMgbm90IG5lZWRlZCBmb3IgdGhpcyBjaGFuZ2UsIHdpdGggdGhlIHJlYXNvbmluZyBJIGhhdmUgb3V0bGluZWQgYWJvdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Mzk5LCJPdXRwdXRUb2tlbnMiOjI0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjowNTowMC4zMzA1MzQ3MDlaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG9pbnRlciBhZHZhbmNlbWVudCBidWcgaW4gYGRlY29kZV9pbnQoKWAgd2l0aGluIHRoZSBOZXRmaWx0ZXIgSC4zMjMgQVNOLjEgY29ubnRyYWNrIGhlbHBlciAoYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCkuIEluIGBjYXNlIENPTlM6YCwgYGdldF91aW50KGJzLCBsZW4pYCBhZHZhbmNlcyBgYnMtXFx1MDAzZWN1cmAgaW50ZXJuYWxseSBieSBgbGVuYCBieXRlczsgcHJldmlvdXNseSwgYGJzLVxcdTAwM2VjdXIgKz0gbGVuYCB3YXMgYWxzbyBleGVjdXRlZCB1bmNvbmRpdGlvbmFsbHkgYWZ0ZXJ3YXJkcywgYWR2YW5jaW5nIHRoZSBiaXRzdHJlYW0gY3Vyc29yIHR3aWNlIHdoZW4gZGVjb2RpbmcgaW50ZWdlcnMuIFRoZSBwYXRjaCBtb3ZlcyBgYnMtXFx1MDAzZWN1ciArPSBsZW5gIGludG8gdGhlIGBlbHNlYCBicmFuY2guXFxuXFxuVGhpcyBjaGFuZ2Ugc3RyaWN0bHkgYWRkcmVzc2VzIHN0cmVhbSBwYXJzaW5nIHBvaW50ZXIgbWFuaXB1bGF0aW9uIG9uIGluY29taW5nIG5ldHdvcmsgcGFja2V0IGJ1ZmZlcnMgKGBza2JgIGRhdGEpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gUG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMgcmVsYXRlZCB0byBzdHJlYW0gYm91bmRzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIGVycm9yIGJvdW5kYXJ5IGNoZWNrcyAoYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG9pbnRlciBhZHZhbmNlbWVudCBidWcgaW4gYGRlY29kZV9pbnQoKWAgd2l0aGluIHRoZSBOZXRmaWx0ZXIgSC4zMjMgQVNOLjEgY29ubnRyYWNrIGhlbHBlciAoYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jYCkuIEluIGBjYXNlIENPTlM6YCwgYGdldF91aW50KGJzLCBsZW4pYCBhZHZhbmNlcyBgYnMtXFx1MDAzZWN1cmAgaW50ZXJuYWxseSBieSBgbGVuYCBieXRlczsgcHJldmlvdXNseSwgYGJzLVxcdTAwM2VjdXIgKz0gbGVuYCB3YXMgYWxzbyBleGVjdXRlZCB1bmNvbmRpdGlvbmFsbHkgYWZ0ZXJ3YXJkcywgYWR2YW5jaW5nIHRoZSBiaXRzdHJlYW0gY3Vyc29yIHR3aWNlIHdoZW4gZGVjb2RpbmcgaW50ZWdlcnMuIFRoZSBwYXRjaCBtb3ZlcyBgYnMtXFx1MDAzZWN1ciArPSBsZW5gIGludG8gdGhlIGBlbHNlYCBicmFuY2guXFxuXFxuVGhpcyBjaGFuZ2Ugc3RyaWN0bHkgYWRkcmVzc2VzIHN0cmVhbSBwYXJzaW5nIHBvaW50ZXIgbWFuaXB1bGF0aW9uIG9uIGluY29taW5nIG5ldHdvcmsgcGFja2V0IGJ1ZmZlcnMgKGBza2JgIGRhdGEpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gUG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMgcmVsYXRlZCB0byBzdHJlYW0gYm91bmRzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIGVycm9yIGJvdW5kYXJ5IGNoZWNrcyAoYG5mX2gzMjNfZXJyb3JfYm91bmRhcnlgKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz8f66[1] Phase: Succeeded StartedAt: 2026-08-31 02:05:10 +0000 UTC FinishedAt: 2026-08-31 02:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8f66[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 02:05:10 +0000 UTC FinishedAt: 2026-08-31 02:05:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8f66[2] Phase: Succeeded StartedAt: 2026-08-31 02:05:10 +0000 UTC FinishedAt: 2026-08-31 03:42:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 02:05:10 +0000 UTC FinishedAt: 2026-08-31 03:42:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 02:05:10 +0000 UTC FinishedAt: 2026-08-31 02:05:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 02:05:10 +0000 UTC FinishedAt: 2026-08-31 02:05:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz8f66/series-workflowz8f66-convert-artifact-4269326465/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 02:05:21 +0000 UTC FinishedAt: 2026-08-31 02:21:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 02:05:21 +0000 UTC FinishedAt: 2026-08-31 02:21:49 +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:*5d4d1db3-2d64-48f0-86f4-23e40359eb06,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-workflowz8f66/series-workflowz8f66-convert-artifact-4269326465/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": "076f8d79-61e8-48e8-8bfb-3c376f843e9f", "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-workflowz8f66/series-workflowz8f66-build-action-1959796143/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 02:05:21 +0000 UTC FinishedAt: 2026-08-31 02:21:39 +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:*5d4d1db3-2d64-48f0-86f4-23e40359eb06,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-workflowz8f66/series-workflowz8f66-convert-artifact-4269326465/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": "076f8d79-61e8-48e8-8bfb-3c376f843e9f", "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-workflowz8f66/series-workflowz8f66-build-action-1959796143/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 02:21:49 +0000 UTC FinishedAt: 2026-08-31 02:21:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 02:21:49 +0000 UTC FinishedAt: 2026-08-31 02:21:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 02:21:49 +0000 UTC FinishedAt: 2026-08-31 02:21:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 02:21:49 +0000 UTC FinishedAt: 2026-08-31 02:21:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz8f66/series-workflowz8f66-convert-artifact-3481997140/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 02:21:59 +0000 UTC FinishedAt: 2026-08-31 02:24:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 02:21:59 +0000 UTC FinishedAt: 2026-08-31 02:23:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*076f8d79-61e8-48e8-8bfb-3c376f843e9f,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-workflowz8f66/series-workflowz8f66-build-action-1959796143/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-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 02:24:06 +0000 UTC FinishedAt: 2026-08-31 02:24:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 02:24:06 +0000 UTC FinishedAt: 2026-08-31 02:24:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 02:24:06 +0000 UTC FinishedAt: 2026-08-31 02:40:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 02:24:06 +0000 UTC FinishedAt: 2026-08-31 02:40:22 +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:*5d4d1db3-2d64-48f0-86f4-23e40359eb06,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-workflowz8f66/series-workflowz8f66-convert-artifact-3481997140/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": "c571ce38-e621-4e84-a682-664696f9a105", "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-workflowz8f66/series-workflowz8f66-build-action-3106112288/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 02:24:06 +0000 UTC FinishedAt: 2026-08-31 02:40:12 +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:*5d4d1db3-2d64-48f0-86f4-23e40359eb06,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-workflowz8f66/series-workflowz8f66-convert-artifact-3481997140/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": "c571ce38-e621-4e84-a682-664696f9a105", "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-workflowz8f66/series-workflowz8f66-build-action-3106112288/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 02:40:22 +0000 UTC FinishedAt: 2026-08-31 02:40:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 02:40:22 +0000 UTC FinishedAt: 2026-08-31 02:40:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 02:40:22 +0000 UTC FinishedAt: 2026-08-31 02:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 02:40:22 +0000 UTC FinishedAt: 2026-08-31 02:42:20 +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:*c571ce38-e621-4e84-a682-664696f9a105,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-workflowz8f66/series-workflowz8f66-build-action-3106112288/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-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 02:42:30 +0000 UTC FinishedAt: 2026-08-31 03:42:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 02:42:30 +0000 UTC FinishedAt: 2026-08-31 03:42:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"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:*076f8d79-61e8-48e8-8bfb-3c376f843e9f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c571ce38-e621-4e84-a682-664696f9a105,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-workflowz8f66/series-workflowz8f66-build-action-1959796143/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-workflowz8f66/series-workflowz8f66-build-action-3106112288/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 02:42:30 +0000 UTC FinishedAt: 2026-08-31 02:42:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 02:42:30 +0000 UTC FinishedAt: 2026-08-31 02:42:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"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-workflowz8f66/series-workflowz8f66-convert-artifact-487642749/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 02:42:30 +0000 UTC FinishedAt: 2026-08-31 02:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 02:42:30 +0000 UTC FinishedAt: 2026-08-31 02:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 02:42:30 +0000 UTC FinishedAt: 2026-08-31 02:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 02:42:40 +0000 UTC FinishedAt: 2026-08-31 03:42:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz8f66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["DecodeRasMessage","DecodeQ931","DecodeMultimediaSystemControlMessage","get_h225_addr","ras_help","q931_help","h245_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_H323","NF_CONNTRACK","NETFILTER","NETFILTER_ADVANCED"],"series_id":"30af3c0d-e2c6-4bdf-a3e8-01580a115d7f","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 02:42:40 +0000 UTC FinishedAt: 2026-08-31 03:42:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*076f8d79-61e8-48e8-8bfb-3c376f843e9f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c571ce38-e621-4e84-a682-664696f9a105,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-workflowz8f66/series-workflowz8f66-build-action-1959796143/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-workflowz8f66/series-workflowz8f66-build-action-3106112288/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-workflowz8f66/series-workflowz8f66-convert-artifact-487642749/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,}