Name: series-workflowjvkfz Phase: Succeeded StartedAt: 2026-08-04 18:36:29 +0000 UTC FinishedAt: 2026-08-04 22:30:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvkfz[0] Phase: Succeeded StartedAt: 2026-08-04 18:36:29 +0000 UTC FinishedAt: 2026-08-04 18:39:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvkfz[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 18:36:29 +0000 UTC FinishedAt: 2026-08-04 18:39:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "486855239e38a91d3eae26618ccb7845c1764625", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "486855239e38a91d3eae26618ccb7845c1764625", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING" ], "series_id": "deca0563-9bc8-4d7d-b56f-4aec949c58c1" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "allocinfo_ioctl", "allocinfo_compat_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE4OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY2luZm9faW9jdGwmIzM0OywKICAgICYjMzQ7YWxsb2NpbmZvX2NvbXBhdF9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVUFQSSBzdHJ1Y3QgbGF5b3V0IGZvciB0aGUgL3Byb2MvYWxsb2NpbmZvIGlvY3RsIGFuZCB1cGRhdGVzIHRoZSBjb3JyZXNwb25kaW5nIGZpbHRlciBtYXRjaGluZyBsb2dpYyBpbiB0aGUga2VybmVsLiBGdXp6aW5nIHRoZSBpb2N0bCBoYW5kbGVyIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIG5ldyBzdHJ1Y3QgbGF5b3V0IGFuZCBmaWx0ZXJpbmcgbG9naWMgYXJlIGhhbmRsZWQgY29ycmVjdGx5IHdpdGhvdXQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBsb2dpYyBlcnJvcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTg6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2MTFjM2NmYTljMTUxMDAwMTRiNjM0YmJmZjU0ZWVjMDVjYjk2NDJiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAxODozNzo0NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmhcbmluZGV4IDI3MGY2OTNiMTgyMjAuLmUzYWQ5NDQ0NDg2NGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9hbGxvY190YWcuaFxuQEAgLTMxLDggJiM0MzszMSw2IEBAIHN0cnVjdCBhbGxvY2luZm9fdGFnIHtcbiBcdGNoYXIgZnVuY3Rpb25bQUxMT0NJTkZPX1NUUl9TSVpFXTtcbiBcdGNoYXIgZmlsZW5hbWVbQUxMT0NJTkZPX1NUUl9TSVpFXTtcbiBcdF9fdTY0IGxpbmVubztcbi1cdC8qIGZpbHRlciBjcml0ZXJpYSBvbmx5OyBzZWUgYWxsb2NpbmZvX2NvdW50ZXIuYWNjdXJhdGUgZm9yIGFjdHVhbCBhY2N1cmFjeSAqL1xuLVx0X191NjQgaW5hY2N1cmF0ZTtcbiB9O1xuIFxuIC8qIFRoZSBhbGlnbm1lbnQgZW5zdXJlcyAzMi1iaXQgY29tcGF0aWJsZSBpbnRlcmZhY2VzIGFyZSBub3QgYnJva2VuICovXG5AQCAtNzQsNiAmIzQzOzcyLDggQEAgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIge1xuIFx0c3RydWN0IGFsbG9jaW5mb190YWcgZmllbGRzO1xuIFx0X191NjQgbWluX3NpemU7XG4gXHRfX3U2NCBtYXhfc2l6ZTtcbiYjNDM7XHQvKiBmaWx0ZXIgY3JpdGVyaWEgb25seTsgc2VlIGFsbG9jaW5mb19jb3VudGVyLmFjY3VyYXRlIGZvciBhY3R1YWwgYWNjdXJhY3kgKi9cbiYjNDM7XHRfX3U2NCBpbmFjY3VyYXRlO1xuIH07XG4gXG4gc3RydWN0IGFsbG9jaW5mb19nZXRfYXQge1xuZGlmZiAtLWdpdCBhL21tL2FsbG9jX3RhZy5jIGIvbW0vYWxsb2NfdGFnLmNcbmluZGV4IDUyYWVjZTI3YjAwZTAuLjg0YzVjMzc4M2NhNDYgMTAwNjQ0XG4tLS0gYS9tbS9hbGxvY190YWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vYWxsb2NfdGFnLmNcbkBAIC0yOTEsNyAmIzQzOzI5MSw3IEBAIHN0YXRpYyBib29sIG1hdGNoZXNfZmlsdGVyKHN0cnVjdCBjb2RldGFnICpjdCwgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcixcbiBcbiBcdGlmIChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0lOQUNDVVJBVEUpIHtcbiBcdFx0aW5hY2N1cmF0ZSA9ICEhKGN0LVx1MDAzZWZsYWdzIFx1MDAyNiBDT0RFVEFHX0ZMQUdfSU5BQ0NVUkFURSk7XG4tXHRcdGlmIChpbmFjY3VyYXRlICE9ICEhKGZpbHRlci1cdTAwM2VmaWVsZHMuaW5hY2N1cmF0ZSkpXG4mIzQzO1x0XHRpZiAoaW5hY2N1cmF0ZSAhPSAhIShmaWx0ZXItXHUwMDNlaW5hY2N1cmF0ZSkpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9hbGxvY2luZm9faW9jdGxfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL2FsbG9jaW5mb19pb2N0bF90ZXN0LmNcbmluZGV4IDdkOTRhYmI3ODVhMTQuLjc0ZmQ2NGIyMzcwY2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvYWxsb2NpbmZvX2lvY3RsX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL2FsbG9jaW5mb19pb2N0bF90ZXN0LmNcbkBAIC0xLDcgJiM0MzsxLDcgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gXG4gLyoga3NlbGZ0ZXN0IGZvciBhbGxvY2luZm8gaW9jdGxcbi0gKiBhbGxvY2luZm8gaW9jdGwgcmV0cml2ZXMgYWxsb2NpbmZvIGRhdGEgdGhyb3VnaCBpb2N0bFxuJiM0MzsgKiBhbGxvY2luZm8gaW9jdGwgcmV0cmlldmVzIGFsbG9jaW5mbyBkYXRhIHRocm91Z2ggaW9jdGxcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMjYgR29vZ2xlLCBJbmMuXG4gICovXG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTg6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY2luZm9faW9jdGwmIzM0OywKICAgICYjMzQ7YWxsb2NpbmZvX2NvbXBhdF9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVUFQSSBzdHJ1Y3QgbGF5b3V0IGZvciB0aGUgL3Byb2MvYWxsb2NpbmZvIGlvY3RsIGFuZCB1cGRhdGVzIHRoZSBjb3JyZXNwb25kaW5nIGZpbHRlciBtYXRjaGluZyBsb2dpYyBpbiB0aGUga2VybmVsLiBGdXp6aW5nIHRoZSBpb2N0bCBoYW5kbGVyIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIG5ldyBzdHJ1Y3QgbGF5b3V0IGFuZCBmaWx0ZXJpbmcgbG9naWMgYXJlIGhhbmRsZWQgY29ycmVjdGx5IHdpdGhvdXQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBsb2dpYyBlcnJvcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MTFjM2NmYTljMTUxMDAwMTRiNjM0YmJmZjU0ZWVjMDVjYjk2NDJiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgNCAxODozNzo0NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9hbGxvY190YWcuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9hbGxvY190YWcuaAppbmRleCAyNzBmNjkzYjE4MjIwLi5lM2FkOTQ0NDQ4NjRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oCkBAIC0zMSw4ICYjNDM7MzEsNiBAQCBzdHJ1Y3QgYWxsb2NpbmZvX3RhZyB7CiAJY2hhciBmdW5jdGlvbltBTExPQ0lORk9fU1RSX1NJWkVdOwogCWNoYXIgZmlsZW5hbWVbQUxMT0NJTkZPX1NUUl9TSVpFXTsKIAlfX3U2NCBsaW5lbm87Ci0JLyogZmlsdGVyIGNyaXRlcmlhIG9ubHk7IHNlZSBhbGxvY2luZm9fY291bnRlci5hY2N1cmF0ZSBmb3IgYWN0dWFsIGFjY3VyYWN5ICovCi0JX191NjQgaW5hY2N1cmF0ZTsKIH07CiAKIC8qIFRoZSBhbGlnbm1lbnQgZW5zdXJlcyAzMi1iaXQgY29tcGF0aWJsZSBpbnRlcmZhY2VzIGFyZSBub3QgYnJva2VuICovCkBAIC03NCw2ICYjNDM7NzIsOCBAQCBzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciB7CiAJc3RydWN0IGFsbG9jaW5mb190YWcgZmllbGRzOwogCV9fdTY0IG1pbl9zaXplOwogCV9fdTY0IG1heF9zaXplOwomIzQzOwkvKiBmaWx0ZXIgY3JpdGVyaWEgb25seTsgc2VlIGFsbG9jaW5mb19jb3VudGVyLmFjY3VyYXRlIGZvciBhY3R1YWwgYWNjdXJhY3kgKi8KJiM0MzsJX191NjQgaW5hY2N1cmF0ZTsKIH07CiAKIHN0cnVjdCBhbGxvY2luZm9fZ2V0X2F0IHsKZGlmZiAtLWdpdCBhL21tL2FsbG9jX3RhZy5jIGIvbW0vYWxsb2NfdGFnLmMKaW5kZXggNTJhZWNlMjdiMDBlMC4uODRjNWMzNzgzY2E0NiAxMDA2NDQKLS0tIGEvbW0vYWxsb2NfdGFnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vYWxsb2NfdGFnLmMKQEAgLTI5MSw3ICYjNDM7MjkxLDcgQEAgc3RhdGljIGJvb2wgbWF0Y2hlc19maWx0ZXIoc3RydWN0IGNvZGV0YWcgKmN0LCBzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciAqZmlsdGVyLAogCiAJaWYgKGZpbHRlci0mZ3Q7bWFzayAmYW1wOyBBTExPQ0lORk9fRklMVEVSX01BU0tfSU5BQ0NVUkFURSkgewogCQlpbmFjY3VyYXRlID0gISEoY3QtJmd0O2ZsYWdzICZhbXA7IENPREVUQUdfRkxBR19JTkFDQ1VSQVRFKTsKLQkJaWYgKGluYWNjdXJhdGUgIT0gISEoZmlsdGVyLSZndDtmaWVsZHMuaW5hY2N1cmF0ZSkpCiYjNDM7CQlpZiAoaW5hY2N1cmF0ZSAhPSAhIShmaWx0ZXItJmd0O2luYWNjdXJhdGUpKQogCQkJcmV0dXJuIGZhbHNlOwogCX0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL2FsbG9jaW5mb19pb2N0bF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvYWxsb2NpbmZvX2lvY3RsX3Rlc3QuYwppbmRleCA3ZDk0YWJiNzg1YTE0Li43NGZkNjRiMjM3MGNjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvYWxsb2NpbmZvX2lvY3RsX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvYWxsb2NpbmZvX2lvY3RsX3Rlc3QuYwpAQCAtMSw3ICYjNDM7MSw3IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiAKIC8qIGtzZWxmdGVzdCBmb3IgYWxsb2NpbmZvIGlvY3RsCi0gKiBhbGxvY2luZm8gaW9jdGwgcmV0cml2ZXMgYWxsb2NpbmZvIGRhdGEgdGhyb3VnaCBpb2N0bAomIzQzOyAqIGFsbG9jaW5mbyBpb2N0bCByZXRyaWV2ZXMgYWxsb2NpbmZvIGRhdGEgdGhyb3VnaCBpb2N0bAogICogQ29weXJpZ2h0IChDKSAyMDI2IEdvb2dsZSwgSW5jLgogICovCiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTg6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU2MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFsbG9jIFRhZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHRoZSBhbGxvYyB0YWcgaW5mcmFzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBhbGxvY2luZm9gIGZ1bmN0aW9uYWxpdHkuIEkgc2VlIGNoYW5nZXMgdG8gYGluY2x1ZGUvdWFwaS9saW51eC9hbGxvY190YWcuaGAsIGBtbS9hbGxvY190YWcuY2AsIGFuZCB0aGUgc2VsZi10ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL2FsbG9jaW5mb19pb2N0bF90ZXN0LmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgbW92aW5nIHRoZSBgaW5hY2N1cmF0ZWAgZmllbGQgZnJvbSB0aGUgYGFsbG9jaW5mb190YWdgIHN0cnVjdCB0byB0aGUgYGFsbG9jaW5mb19maWx0ZXJgIHN0cnVjdCBpbiB0aGUgdXNlci1zcGFjZSBoZWFkZXIuIFRoaXMgc2hpZnQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgaG93IHRoZSBmaWx0ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGlvY3RsIGNhbGxzLgoKSW4gYG1tL2FsbG9jX3RhZy5jYCwgdGhleSYjMzk7cmUgdXBkYXRpbmcgdGhlIGNvZGUgdG8gcmVmZXJlbmNlIGBmaWx0ZXItJmd0O2luYWNjdXJhdGVgIGluc3RlYWQgb2YgdGhlIG9sZCBgZmlsdGVyLSZndDtmaWVsZHMuaW5hY2N1cmF0ZWAgY29uc3RydWN0LiBUaGlzIGxpa2VseSBtZWFucyB0aGV5JiMzOTt2ZSByZXN0cnVjdHVyZWQgdGhlIHdheSB0aGUgZmlsdGVyIGRhdGEgaXMgcmVwcmVzZW50ZWQgaW50ZXJuYWxseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXkmIzM5O3ZlIGNob3NlbiB0byBtb3ZlIHRoaXMgZmllbGQuIFdhcyBpdCBmb3IgYWxpZ25tZW50PyBTcGFjZSBvcHRpbWl6YXRpb24/IEEgY2hhbmdlIGluIHRoZSBmaWx0ZXJpbmcgbG9naWMgaXRzZWxmPwoKR2l2ZW4gdGhlIGZvY3VzIG9uIHRoZSBpb2N0bCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBhbGxvY2luZm9fZmlsdGVyYCBpcyBiZWluZyB1c2VkIGFuZCB3aHkgaXQmIzM5O3Mgc3RydWN0dXJlZCB0aGlzIHdheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBvbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB1c2VyIHNwYWNlIGFuZCBrZXJuZWwgc3BhY2UuCgpJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ3JlcCB0aHJvdWdoIGBtbS9hbGxvY190YWcuY2AgdG8gc2VlIGFsbCB0aGUgcGxhY2VzIHdoZXJlIGBhbGxvY2luZm9fZmlsdGVyYCBpcyB1c2VkLiBUaGlzIHdpbGwgaGVscCBtZSB0cmFjZSB0aGUgZGF0YSBmbG93IGFuZCBob3cgdGhpcyAmIzM5O2luYWNjdXJhdGUmIzM5OyBmbGFnIGlzIGJlaW5nIGFjY2Vzc2VkIGFuZCBtYW5pcHVsYXRlZCB3aXRoaW4gdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxODozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY2luZm9fZmlsdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vYWxsb2NfdGFnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vYWxsb2NfdGFnLmM9NjE9c3RydWN0IGFsbG9jaW5mb19wcml2YXRlIHtcbi0tXG5tbS9hbGxvY190YWcuYy02NC1cdGJvb2wgcHJpbnRfaGVhZGVyO1xubW0vYWxsb2NfdGFnLmM6NjU6XHRzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciBmaWx0ZXI7XG5tbS9hbGxvY190YWcuYy02Ni1cdC8qIGlvY3RsIHVzZXMgYSBzZXBhcmF0ZSBpdGVyYXRvciBub3QgdG8gaW50ZXJmZXJlIHdpdGggcmVhZHMgKi9cbi0tXG5tbS9hbGxvY190YWcuYz0yNDQ9c3RhdGljIGludCBhbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkIF9fdXNlciAqYXJnKVxuLS1cbm1tL2FsbG9jX3RhZy5jLTI2MC0gKi9cbm1tL2FsbG9jX3RhZy5jOjI2MTpzdGF0aWMgYm9vbCBtYXRjaGVzX2ZpbHRlcihzdHJ1Y3QgY29kZXRhZyAqY3QsIHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyICpmaWx0ZXIsXG5tbS9hbGxvY190YWcuYy0yNjItXHRcdFx0ICAgc3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyAqY291bnRlcnMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTg6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM1NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIG1tL2FsbG9jXF90YWcuYyoqCgpPa2F5LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYSBzcGVjaWZpYyBhcmVhLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYG1tL2FsbG9jX3RhZy5jYCwgYW5kIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyNjEuIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLCB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgcGFydCBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gdGFnZ2luZyBwcm9jZXNzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGFuYWx5emluZyB0aGUgY29kZSBpbiB0aGF0IHZpY2luaXR5IGFuZCBzZWVpbmcgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRoZSBtb2R1bGUuIEtub3dpbmcgbXkgd2F5IGFyb3VuZCB0aGUga2VybmVsIHNvdXJjZSwgSSYjMzk7bGwgYmUgYWJsZSB0byBxdWlja2x5IGdyYXNwIHRoZSBjb250ZXh0LiBUaGUgc3BlY2lmaWMgbGluZSB3aWxsIGFjdCBhcyBteSBzdGFydGluZyBwb2ludCB0byBzZWUgd2hhdCBjbHVlcyBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE4OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vYWxsb2NfdGFnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHRcdGNvZGV0YWdfdW5sb2NrX21vZHVsZV9saXN0KGFsbG9jX3RhZ19jdHR5cGUpO1xuIDI1MTpcdFx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFx1MDAyNnBhcmFtcywgc2l6ZW9mKHBhcmFtcykpKVxuIDI1MjpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAyNTM6XHRcbiAyNTQ6XHRcdHJldHVybiAwO1xuIDI1NTpcdH1cbiAyNTY6XHRcbiAyNTc6XHQvKlxuIDI1ODpcdCAqIFZlcmlmaWVzIHdoZXRoZXIgYSBnaXZlbiBjb2RldGFnIHNhdGlzZmllcyB0aGUgYWN0aXZlIGZpbHRlcmluZyBjcml0ZXJpYSBieVxuIDI1OTpcdCAqIG1hdGNoaW5nIGl0cyBjaGFyYWN0ZXJpc3RpY3MgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGZpbHRlci5cbiAyNjA6XHQgKi9cbiAyNjE6XHRzdGF0aWMgYm9vbCBtYXRjaGVzX2ZpbHRlcihzdHJ1Y3QgY29kZXRhZyAqY3QsIHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyICpmaWx0ZXIsXG4gMjYyOlx0XHRcdFx0ICAgc3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyAqY291bnRlcnMsXG4gMjYzOlx0XHRcdFx0ICAgYm9vbCAqZmV0Y2hlZF9jb3VudGVycylcbiAyNjQ6XHR7XG4gMjY1Olx0XHRib29sIGluYWNjdXJhdGU7XG4gMjY2Olx0XG4gMjY3Olx0XHRpZiAoIWZpbHRlciB8fCAhZmlsdGVyLVx1MDAzZW1hc2spXG4gMjY4Olx0XHRcdHJldHVybiB0cnVlO1xuIDI2OTpcdFxuIDI3MDpcdFx0aWYgKGZpbHRlci1cdTAwM2VtYXNrIFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfTU9ETkFNRSkge1xuIDI3MTpcdFx0XHQvKiB1c2VyIHdhbnRzIHRvIGZpbHRlciBieSBtb2RuYW1lIGJ1dCBjdC1cdTAwM2Vtb2RuYW1lIGlzIE5VTEwgKi9cbiAyNzI6XHRcdFx0aWYgKCFjdC1cdTAwM2Vtb2RuYW1lKSB7XG4gMjczOlx0XHRcdFx0LyogdmFsaWRhdGUgaWYgdXNlciB3YXMgYXR0ZW1wdGluZyB0byBmaWx0ZXIgZm9yIGJ1aWx0LWluIGFsbG9jYXRpb25zICovXG4gMjc0Olx0XHRcdFx0aWYgKGZpbHRlci1cdTAwM2VmaWVsZHMubW9kbmFtZVswXSAhPSAmIzM5O1xcMCYjMzk7KVxuIDI3NTpcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDI3NjpcdFx0XHR9IGVsc2UgaWYgKGFsbG9jaW5mb19jbXBfc3RyKGN0LVx1MDAzZW1vZG5hbWUsIGZpbHRlci1cdTAwM2VmaWVsZHMubW9kbmFtZSkpXG4gMjc3Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDI3ODpcdFx0fVxuIDI3OTpcdFxuIDI4MDpcdFx0aWYgKChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZVTkNUSU9OKSBcdTAwMjZcdTAwMjZcbiAyODE6XHRcdCAgICBjdC1cdTAwM2VmdW5jdGlvbiBcdTAwMjZcdTAwMjYgYWxsb2NpbmZvX2NtcF9zdHIoY3QtXHUwMDNlZnVuY3Rpb24sIGZpbHRlci1cdTAwM2VmaWVsZHMuZnVuY3Rpb24pKVxuIDI4MjpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMjgzOlx0XG4gMjg0Olx0XHRpZiAoKGZpbHRlci1cdTAwM2VtYXNrIFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfRklMRU5BTUUpIFx1MDAyNlx1MDAyNlxuIDI4NTpcdFx0ICAgIGN0LVx1MDAzZWZpbGVuYW1lIFx1MDAyNlx1MDAyNiBhbGxvY2luZm9fY21wX3N0cihjdC1cdTAwM2VmaWxlbmFtZSwgZmlsdGVyLVx1MDAzZWZpZWxkcy5maWxlbmFtZSkpXG4gMjg2Olx0XHRcdHJldHVybiBmYWxzZTtcbiAyODc6XHRcbiAyODg6XHRcdGlmICgoZmlsdGVyLVx1MDAzZW1hc2sgXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19MSU5FTk8pIFx1MDAyNlx1MDAyNlxuIDI4OTpcdFx0ICAgIGN0LVx1MDAzZWxpbmVubyAhPSBmaWx0ZXItXHUwMDNlZmllbGRzLmxpbmVubylcbiAyOTA6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDI5MTpcdFxuIDI5MjpcdFx0aWYgKGZpbHRlci1cdTAwM2VtYXNrIFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfSU5BQ0NVUkFURSkge1xuIDI5MzpcdFx0XHRpbmFjY3VyYXRlID0gISEoY3QtXHUwMDNlZmxhZ3MgXHUwMDI2IENPREVUQUdfRkxBR19JTkFDQ1VSQVRFKTtcbiAyOTQ6XHRcdFx0aWYgKGluYWNjdXJhdGUgIT0gISEoZmlsdGVyLVx1MDAzZWluYWNjdXJhdGUpKVxuIDI5NTpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiAyOTY6XHRcdH1cbiAyOTc6XHRcbiAyOTg6XHRcdGlmIChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgKEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSB8IEFMTE9DSU5GT19GSUxURVJfTUFTS19NQVhfU0laRSkpIHtcbiAyOTk6XHRcdFx0aWYgKCEqZmV0Y2hlZF9jb3VudGVycykge1xuIDMwMDpcdFx0XHRcdCpjb3VudGVycyA9IGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhjdCk7XG4gMzAxOlx0XHRcdFx0KmZldGNoZWRfY291bnRlcnMgPSB0cnVlO1xuIDMwMjpcdFx0XHR9XG4gMzAzOlx0XHRcdGlmICgoZmlsdGVyLVx1MDAzZW1hc2sgXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSkgXHUwMDI2XHUwMDI2XG4gMzA0Olx0XHRcdCAgICBjb3VudGVycy1cdTAwM2VieXRlcyBcdTAwM2MgZmlsdGVyLVx1MDAzZW1pbl9zaXplKVxuIDMwNTpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiAzMDY6XHRcdFx0aWYgKChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01BWF9TSVpFKSBcdTAwMjZcdTAwMjZcbiAzMDc6XHRcdFx0ICAgIGNvdW50ZXJzLVx1MDAzZWJ5dGVzIFx1MDAzZSBmaWx0ZXItXHUwMDNlbWF4X3NpemUpXG4gMzA4Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDMwOTpcdFx0fVxuIDMxMDpcdFxuIDMxMTpcdFx0cmV0dXJuIHRydWU7XG4gMzEyOlx0fVxuIDMxMzpcdFxuIDMxNDpcdC8qXG4gMzE1Olx0ICogU2Vla3MgdGhlIGlvY3RsIGl0ZXJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgMC1pbmRleGVkIHRhZyBwb3NpdGlvbiwgcmVhZHMgaXRzXG4gMzE2Olx0ICogcHJvZmlsaW5nIGRhdGEgYW5kIHJldHVybnMgaXQgdG8gdXNlcnNwYWNlLlxuIDMxNzpcdCAqL1xuIDMxODpcdHN0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9hdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXG4gMzE5Olx0e1xuIDMyMDpcdFx0c3RydWN0IGFsbG9jaW5mb19wcml2YXRlICpwcml2O1xuIDMyMTpcdFx0c3RydWN0IGNvZGV0YWcgKmN0O1xuIDMyMjpcdFx0c3RydWN0IGFsbG9jaW5mb19nZXRfYXQgcGFyYW1zID0gezB9O1xuIDMyMzpcdFx0X191NjQgc2tpcF9jb3VudDtcbiAzMjQ6XHRcdHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgY291bnRlcnM7XG4gMzI1Olx0XHRib29sIGZldGNoZWRfY291bnRlcnM7XG4gMzI2Olx0XG4gMzI3Olx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2cGFyYW1zLCBhcmcsIHNpemVvZihwYXJhbXMpKSlcbiAzMjg6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gMzI5Olx0XG4gMzMwOlx0XHRpZiAocGFyYW1zLmZpbHRlci5tYXNrIFx1MDAyNiB+QUxMT0NJTkZPX0ZJTFRFUl9NQVNLUylcbiAzMzE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzMyOlx0XG4gMzMzOlx0XHRpZiAoKHBhcmFtcy5maWx0ZXIubWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01JTl9TSVpFKSBcdTAwMjZcdTAwMjZcbiAzMzQ6XHRcdCAgICAocGFyYW1zLmZpbHRlci5tYXNrIFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfTUFYX1NJWkUpIFx1MDAyNlx1MDAyNlxuIDMzNTpcdFx0ICAgIHBhcmFtcy5maWx0ZXIubWluX3NpemUgXHUwMDNlIHBhcmFtcy5maWx0ZXIubWF4X3NpemUpXG4gMzM2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDMzNzpcdFxuIDMzODpcdFx0cHJpdiA9IG0tXHUwMDNlcHJpdmF0ZTtcbiAzMzk6XHRcbiAzNDA6XHRcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2Vpb2N0bF9sb2NrKTtcbiAzNDE6XHRcdGNvZGV0YWdfbG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTtcbiAzNDI6XHRcbiAzNDM6XHRcdGlmIChwYXJhbXMucG9zIFx1MDAzZT0gY29kZXRhZ19nZXRfY291bnQoYWxsb2NfdGFnX2N0dHlwZSkpIHtcbiAzNDQ6XHRcdFx0Y29kZXRhZ191bmxvY2tfbW9kdWxlX2xpc3QoYWxsb2NfdGFnX2N0dHlwZSk7XG4gMzQ1Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWlvY3RsX2xvY2spO1xuIDM0NjpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiAzNDc6XHRcdH1cbiAzNDg6XHRcbiAzNDk6XHRcdHNraXBfY291bnQgPSBwYXJhbXMucG9zO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE4OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwOTkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBGdW5jdGlvbmFsIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsIOKAkyBpdCYjMzk7cyBhbHRlcmluZyB0aGUgY29kZSYjMzk7cyBiZWhhdmlvci4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgZm9jdXNlZCBjaGFuZ2U7IHNwZWNpZmljYWxseSwgaXQmIzM5O3MgbW9kaWZ5aW5nIGEgZmllbGQgY2FsbGVkIGBpbmFjY3VyYXRlYCB3aXRoaW4gYSBgZmlsdGVyYCBzdHJ1Y3R1cmUuIEkgc2VlIHRoZSBvbGQgdmVyc2lvbiB1c2VkIGBmaWx0ZXItJmd0O2ZpZWxkcy5pbmFjY3VyYXRlYCwgYW5kIG5vdyBpdCYjMzk7cyBqdXN0IGBmaWx0ZXItJmd0O2luYWNjdXJhdGVgLiBJdCBhbHNvIG1lbnRpb25zIHRoYXQgdGhpcyBmaWVsZCBpcyBtb3Zpbmcgd2l0aGluIHRoZSBVQVBJIHN0cnVjdC4gSGFuZyBvbi4uLiBgc3RydWN0IGFsbG9jaW5mb19maWx0ZXJgIGlzIHBhcnQgb2YgVUFQST8gVGhhdCYjMzk7cyBrZXkuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIGltcGxpY2F0aW9ucyBoZXJlLiBHb3R0YSB2ZXJpZnkgdGhpcyBpbiB0aGUgVUFQSSBoZWFkZXIuIExldCBtZSBxdWlja2x5IGNoZWNrIGBpbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmhgIHRvIHNlZSBleGFjdGx5IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIFVBUEkgc3RydWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB1c2VyIHNwYWNlIGludGVyYWN0cyB3aXRoIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgV0lUSCBMaW51eC1zeXNjYWxsLW5vdGUgKi9cbiAgIDI6XHQvKlxuICAgMzpcdCAqIGFsbG9jX3RhZyBJT0NUTCBBUEkgZGVmaW5pdGlvblxuICAgNDpcdCAqXG4gICA1Olx0ICogQ29weXJpZ2h0IChDKSAyMDI2IEdvb2dsZSwgTExDLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAgIDY6XHQgKlxuICAgNzpcdCAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gICA4Olx0ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXNcbiAgIDk6XHQgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi5cbiAgMTA6XHQgKi9cbiAgMTE6XHRcbiAgMTI6XHQjaWZuZGVmIF9VQVBJX0FMTE9DX1RBR19IXG4gIDEzOlx0I2RlZmluZSBfVUFQSV9BTExPQ19UQUdfSFxuICAxNDpcdFxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiAgMTY6XHRcbiAgMTc6XHQvKlxuICAxODpcdCAqIEZ1bmN0aW9uLCBmaWxlIGFuZCBtb2R1bGUgbmFtZXMgb2Z0ZW4gaGF2ZSB0aGUgc2FtZSBwcmVmaXhlcywgdGhlcmVmb3JlXG4gIDE5Olx0ICogd2hlbiBmaWx0ZXJpbmcgYnkgdGhlc2UgY3JpdGVyaWEsIHdlIGNvbXBhcmUgdGhlIGxhc3QgNjQgY2hhcmFjdGVycyB0b1xuICAyMDpcdCAqIG1pbmltaXplIHRoZSBjaGFuY2VzIG9mIG5hbWUgY29sbGlzaW9uc1xuICAyMTpcdCAqL1xuICAyMjpcdCNkZWZpbmUgQUxMT0NJTkZPX1NUUl9TSVpFXHQ2NFxuICAyMzpcdFxuICAyNDpcdHN0cnVjdCBhbGxvY2luZm9fY29udGVudF9pZCB7XG4gIDI1Olx0XHRfX3U2NCBpZDtcbiAgMjY6XHR9O1xuICAyNzpcdFxuICAyODpcdHN0cnVjdCBhbGxvY2luZm9fdGFnIHtcbiAgMjk6XHRcdC8qIExvbmdlciBuYW1lcyBhcmUgdHJpbW1lZCAqL1xuICAzMDpcdFx0Y2hhciBtb2RuYW1lW0FMTE9DSU5GT19TVFJfU0laRV07XG4gIDMxOlx0XHRjaGFyIGZ1bmN0aW9uW0FMTE9DSU5GT19TVFJfU0laRV07XG4gIDMyOlx0XHRjaGFyIGZpbGVuYW1lW0FMTE9DSU5GT19TVFJfU0laRV07XG4gIDMzOlx0XHRfX3U2NCBsaW5lbm87XG4gIDM0Olx0fTtcbiAgMzU6XHRcbiAgMzY6XHQvKiBUaGUgYWxpZ25tZW50IGVuc3VyZXMgMzItYml0IGNvbXBhdGlibGUgaW50ZXJmYWNlcyBhcmUgbm90IGJyb2tlbiAqL1xuICAzNzpcdHN0cnVjdCBhbGxvY2luZm9fY291bnRlciB7XG4gIDM4Olx0XHRfX3U2NCBieXRlcztcbiAgMzk6XHRcdF9fdTY0IGNhbGxzO1xuICA0MDpcdFx0X191OCBhY2N1cmF0ZTtcbiAgNDE6XHR9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTtcbiAgNDI6XHRcbiAgNDM6XHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhIHtcbiAgNDQ6XHRcdHN0cnVjdCBhbGxvY2luZm9fdGFnIHRhZztcbiAgNDU6XHRcdHN0cnVjdCBhbGxvY2luZm9fY291bnRlciBjb3VudGVyO1xuICA0NjpcdH07XG4gIDQ3Olx0XG4gIDQ4Olx0ZW51bSB7XG4gIDQ5Olx0XHRBTExPQ0lORk9fRklMVEVSX01PRE5BTUUsXG4gIDUwOlx0XHRBTExPQ0lORk9fRklMVEVSX0ZVTkNUSU9OLFxuICA1MTpcdFx0QUxMT0NJTkZPX0ZJTFRFUl9GSUxFTkFNRSxcbiAgNTI6XHRcdEFMTE9DSU5GT19GSUxURVJfTElORU5PLFxuICA1MzpcdFx0QUxMT0NJTkZPX0ZJTFRFUl9JTkFDQ1VSQVRFLFxuICA1NDpcdFx0QUxMT0NJTkZPX0ZJTFRFUl9NSU5fU0laRSxcbiAgNTU6XHRcdEFMTE9DSU5GT19GSUxURVJfTUFYX1NJWkUsXG4gIDU2Olx0XHRfX0FMTE9DSU5GT19GSUxURVJfTEFTVCA9IEFMTE9DSU5GT19GSUxURVJfTUFYX1NJWkVcbiAgNTc6XHR9O1xuICA1ODpcdFxuICA1OTpcdCNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01PRE5BTUVcdFx0KDEgXHUwMDNjXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfTU9ETkFNRSlcbiAgNjA6XHQjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19GVU5DVElPTlx0XHQoMSBcdTAwM2NcdTAwM2MgQUxMT0NJTkZPX0ZJTFRFUl9GVU5DVElPTilcbiAgNjE6XHQjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19GSUxFTkFNRVx0XHQoMSBcdTAwM2NcdTAwM2MgQUxMT0NJTkZPX0ZJTFRFUl9GSUxFTkFNRSlcbiAgNjI6XHQjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19MSU5FTk9cdFx0KDEgXHUwMDNjXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfTElORU5PKVxuICA2MzpcdCNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0lOQUNDVVJBVEVcdCgxIFx1MDAzY1x1MDAzYyBBTExPQ0lORk9fRklMVEVSX0lOQUNDVVJBVEUpXG4gIDY0Olx0I2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tfTUlOX1NJWkVcdFx0KDEgXHUwMDNjXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfTUlOX1NJWkUpXG4gIDY1Olx0I2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tfTUFYX1NJWkVcdFx0KDEgXHUwMDNjXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfTUFYX1NJWkUpXG4gIDY2Olx0XG4gIDY3Olx0I2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tTIFxcXG4gIDY4Olx0XHQoKDEgXHUwMDNjXHUwMDNjIChfX0FMTE9DSU5GT19GSUxURVJfTEFTVCAmIzQzOyAxKSkgLSAxKVxuICA2OTpcdFxuICA3MDpcdHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIHtcbiAgNzE6XHRcdF9fdTY0IG1hc2s7IC8qIGJpdG1hc2sgb2YgdGhlIGZpbHRlciBmaWVsZHMgdXNlZCAqL1xuICA3MjpcdFx0c3RydWN0IGFsbG9jaW5mb190YWcgZmllbGRzO1xuICA3MzpcdFx0X191NjQgbWluX3NpemU7XG4gIDc0Olx0XHRfX3U2NCBtYXhfc2l6ZTtcbiAgNzU6XHRcdC8qIGZpbHRlciBjcml0ZXJpYSBvbmx5OyBzZWUgYWxsb2NpbmZvX2NvdW50ZXIuYWNjdXJhdGUgZm9yIGFjdHVhbCBhY2N1cmFjeSAqL1xuICA3NjpcdFx0X191NjQgaW5hY2N1cmF0ZTtcbiAgNzc6XHR9O1xuICA3ODpcdFxuICA3OTpcdHN0cnVjdCBhbGxvY2luZm9fZ2V0X2F0IHtcbiAgODA6XHRcdC8qIGlucHV0cyAqL1xuICA4MTpcdFx0X191NjQgcG9zO1xuICA4MjpcdFx0c3RydWN0IGFsbG9jaW5mb19maWx0ZXIgZmlsdGVyO1xuICA4MzpcdFx0Lyogb3V0cHV0ICovXG4gIDg0Olx0XHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhIGRhdGE7XG4gIDg1Olx0fTtcbiAgODY6XHRcbiAgODc6XHQjZGVmaW5lIF9BTExPQ0lORk9fSU9DX0NPTlRFTlRfSURcdDBcbiAgODg6XHQjZGVmaW5lIF9BTExPQ0lORk9fSU9DX0dFVF9BVFx0XHQxXG4gIDg5Olx0I2RlZmluZSBfQUxMT0NJTkZPX0lPQ19HRVRfTkVYVFx0XHQyXG4gIDkwOlx0XG4gIDkxOlx0I2RlZmluZSBBTExPQ0lORk9fSU9DX0JBU0VcdFx0MHhBNlxuICA5MjpcdCNkZWZpbmUgQUxMT0NJTkZPX0lPQ19DT05URU5UX0lEXHRfSU9SKEFMTE9DSU5GT19JT0NfQkFTRSwgX0FMTE9DSU5GT19JT0NfQ09OVEVOVF9JRCxcdFxcXG4gIDkzOlx0XHRcdFx0XHRcdCAgICAgc3RydWN0IGFsbG9jaW5mb19jb250ZW50X2lkKVxuICA5NDpcdCNkZWZpbmUgQUxMT0NJTkZPX0lPQ19HRVRfQVRcdFx0X0lPV1IoQUxMT0NJTkZPX0lPQ19CQVNFLCBfQUxMT0NJTkZPX0lPQ19HRVRfQVQsXHRcXFxuICA5NTpcdFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgYWxsb2NpbmZvX2dldF9hdClcbiAgOTY6XHQjZGVmaW5lIEFMTE9DSU5GT19JT0NfR0VUX05FWFRcdFx0X0lPUihBTExPQ0lORk9fSU9DX0JBU0UsIF9BTExPQ0lORk9fSU9DX0dFVF9ORVhULFx0XFxcbiAgOTc6XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhKVxuICA5ODpcdFxuICA5OTpcdCNlbmRpZiAvKiBfVUFQSV9BTExPQ19UQUdfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4ODIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgYWxsb2NpbmZvX3RhZ2AgU3RydWN0dXJlIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgVUFQSSBjaGFuZ2UsIHNwZWNpZmljYWxseSBhbHRlcmluZyB0aGUgYGFsbG9jaW5mb190YWcuaGAgaGVhZGVyIGZpbGUuIEl0JiMzOTtzIG1vdmluZyB0aGUgYGluYWNjdXJhdGVgIGZpZWxkIGZyb20gdGhlIGBzdHJ1Y3QgYWxsb2NpbmZvX3RhZ2Agc3RydWN0dXJlIGludG8gdGhlIGBzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlcmAgc3RydWN0dXJlLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGlzIHdpbGwgaW1wYWN0IHRoZSBVQVBJIGNvbnRyYWN0LCB3aGljaCBtZWFucyBleGlzdGluZyB1c2VycyBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGNvdWxkIGJyZWFrIGlmIHRoZXkgaGF2ZW4mIzM5O3QgYmVlbiB1cGRhdGVkLiBBIGNyaXRpY2FsIHBvaW50IHRvIGNvbnNpZGVyIGlzIGhvdyBpdCBhZmZlY3RzIGBhbGxvY2luZm9faW9jdGxfZ2V0X2F0YCwgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uIHVzZXMgdGhlIGBtYXRjaGVzX2ZpbHRlcmAgZnVuY3Rpb24uIFdlIG5lZWQgdG8gbWV0aWN1bG91c2x5IHRyYWNlIHdoZXJlIGFuZCBob3cgYG1hdGNoZXNfZmlsdGVyYCBpcyB1c2VkIHdpdGggdGhlIHN0cnVjdCBtb2RpZmljYXRpb25zLiBJIGtub3cgdGhhdCBpb2N0bCBgQUxMT0NJTkZPX0lPQ19HRVRfQVRgIGlzIGhhbmRsZWQgaW4gYG1tL2FsbG9jX3RhZy5jYCwgYnV0IGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgYG1hdGNoZXNfZmlsdGVyYCBjYWxscywgbGV0IG1lIGZpcnN0IHZlcmlmeSBob3cgYGFsbG9jaW5mb19pb2N0bGAgaXRzZWxmIGlzIHJlZ2lzdGVyZWQuIFRoaXMgZ2l2ZXMgbWUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NpbmZvX2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vYWxsb2NfdGFnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vYWxsb2NfdGFnLmM9MjI0PXN0YXRpYyB2b2lkIGFsbG9jaW5mb190b19wYXJhbXMoc3RydWN0IGNvZGV0YWcgKmN0LFxuLS1cbm1tL2FsbG9jX3RhZy5jLTI0My0gKi9cbm1tL2FsbG9jX3RhZy5jOjI0NDpzdGF0aWMgaW50IGFsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXG5tbS9hbGxvY190YWcuYy0yNDUte1xuLS1cbm1tL2FsbG9jX3RhZy5jPTI2MT1zdGF0aWMgYm9vbCBtYXRjaGVzX2ZpbHRlcihzdHJ1Y3QgY29kZXRhZyAqY3QsIHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyICpmaWx0ZXIsXG4tLVxubW0vYWxsb2NfdGFnLmMtMzE3LSAqL1xubW0vYWxsb2NfdGFnLmM6MzE4OnN0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9hdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXG5tbS9hbGxvY190YWcuYy0zMTkte1xuLS1cbm1tL2FsbG9jX3RhZy5jLTM5Mi0gKi9cbm1tL2FsbG9jX3RhZy5jOjM5MzpzdGF0aWMgaW50IGFsbG9jaW5mb19pb2N0bF9nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXG5tbS9hbGxvY190YWcuYy0zOTQte1xuLS1cbm1tL2FsbG9jX3RhZy5jLTQ0My0gKi9cbm1tL2FsbG9jX3RhZy5jOjQ0NDpzdGF0aWMgbG9uZyBhbGxvY2luZm9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG5tbS9hbGxvY190YWcuYy00NDUtXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgX19hcmcpXG4tLVxubW0vYWxsb2NfdGFnLmMtNDUxLVx0Y2FzZSBBTExPQ0lORk9fSU9DX0NPTlRFTlRfSUQ6XG5tbS9hbGxvY190YWcuYzo0NTI6XHRcdHJldCA9IGFsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZChmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSwgYXJnKTtcbm1tL2FsbG9jX3RhZy5jLTQ1My1cdFx0YnJlYWs7XG5tbS9hbGxvY190YWcuYy00NTQtXHRjYXNlIEFMTE9DSU5GT19JT0NfR0VUX0FUOlxubW0vYWxsb2NfdGFnLmM6NDU1Olx0XHRyZXQgPSBhbGxvY2luZm9faW9jdGxfZ2V0X2F0KGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhLCBhcmcpO1xubW0vYWxsb2NfdGFnLmMtNDU2LVx0XHRicmVhaztcbm1tL2FsbG9jX3RhZy5jLTQ1Ny1cdGNhc2UgQUxMT0NJTkZPX0lPQ19HRVRfTkVYVDpcbm1tL2FsbG9jX3RhZy5jOjQ1ODpcdFx0cmV0ID0gYWxsb2NpbmZvX2lvY3RsX2dldF9uZXh0KGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhLCBhcmcpO1xubW0vYWxsb2NfdGFnLmMtNDU5LVx0XHRicmVhaztcbi0tXG5tbS9hbGxvY190YWcuYz00Njk9c3RhdGljIGxvbmcgYWxsb2NpbmZvX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5tbS9hbGxvY190YWcuYy00NzEte1xubW0vYWxsb2NfdGFnLmM6NDcyOlx0cmV0dXJuIGFsbG9jaW5mb19pb2N0bChmaWxlLCBjbWQsICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIoYXJnKSk7XG5tbS9hbGxvY190YWcuYy00NzMtfVxuLS1cbm1tL2FsbG9jX3RhZy5jPTQ3Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIGFsbG9jaW5mb19wcm9jX29wcyA9IHtcbi0tXG5tbS9hbGxvY190YWcuYy00ODAtXHQucHJvY19yZWxlYXNlXHRcdD0gYWxsb2NpbmZvX3JlbGVhc2UsXG5tbS9hbGxvY190YWcuYzo0ODE6XHQucHJvY19pb2N0bFx0XHQ9IGFsbG9jaW5mb19pb2N0bCxcbm1tL2FsbG9jX3RhZy5jLTQ4Mi0jaWZkZWYgQ09ORklHX0NPTVBBVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxODozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDEzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBgL3Byb2MvYWxsb2NpbmZvYCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYC9wcm9jL2FsbG9jaW5mb2AuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYGlvY3RsYCBhcyB0aGUga2V5IHBvaW50IG9mIGludGVyYWN0aW9uIGZvciB0aGlzLiBXZSYjMzk7cmUgb2J2aW91c2x5IHRyeWluZyB0byBhY2Nlc3Mgc29tZSBtZW1vcnkgYWxsb2NhdGlvbiBzdGF0aXN0aWNzIG9yIHBvdGVudGlhbGx5IG1hbmlwdWxhdGUgaG93IHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgaGFuZGxlcyB0YWdzIG9yIHJlbGF0ZWQgaW5mb3JtYXRpb24sIGxpa2VseSBmb3Igc29tZSBkZWJ1Z2dpbmcgb3IgcHJvZmlsaW5nIHB1cnBvc2UuIFdoZXJlIHdvdWxkIHRoZSBpbXBsZW1lbnRhdGlvbiBsaXZlPyBUaGUga2VybmVsJiMzOTtzIGAvcHJvY2AgZmlsZXN5c3RlbSBoYW5kbGVycyBhcmUgb2Z0ZW4gZm91bmQgaW4gdGhlIHJlbGV2YW50IHN1YnN5c3RlbSYjMzk7cyBjb2RlLCBzbyBsZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbW0vYWxsb2NfdGFnLmNgLiBHaXZlbiB0aGUgY29udGV4dCBvZiBgL3Byb2MvYWxsb2NpbmZvYCwgYGFsbG9jaW5mb19wcm9jX29wc2AgaXMgdGhlIGxpa2VseSBjYW5kaWRhdGUgZm9yIHRoZSBmaWxlIG9wZXJhdGlvbnMgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIGBpb2N0bGAgaGFuZGxlci4gSXQgd291bGQgYmUgYSBzdGFydGluZyBwb2ludCB0byBzZWUgaG93IHRoZSBpb2N0bCBjYWxscyBhcmUgZGVmaW5lZCBhbmQgd2hhdCBwYXJhbWV0ZXJzIGl0IGFjY2VwdHMuIEZyb20gdGhlcmUgSSBjYW4gZXhwbG9yZSB0aGUgaW1wbGVtZW50YXRpb24gYW5kIGxvZ2ljIGZsb3cgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiBpbmZvcm1hdGlvbiBhbmQgaG93IHRoZSBwcm9jZXNzIGludGVyYWN0cyB3aXRoIHRoYXQgZGF0YS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9hbGxvY190YWcuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDcwOlx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFyZylcbiA0NzE6XHR7XG4gNDcyOlx0XHRyZXR1cm4gYWxsb2NpbmZvX2lvY3RsKGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpKTtcbiA0NzM6XHR9XG4gNDc0Olx0I2VuZGlmXG4gNDc1Olx0XG4gNDc2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBhbGxvY2luZm9fcHJvY19vcHMgPSB7XG4gNDc3Olx0XHQucHJvY19vcGVuXHRcdD0gYWxsb2NpbmZvX29wZW4sXG4gNDc4Olx0XHQucHJvY19yZWFkX2l0ZXJcdFx0PSBzZXFfcmVhZF9pdGVyLFxuIDQ3OTpcdFx0LnByb2NfbHNlZWtcdFx0PSBzZXFfbHNlZWssXG4gNDgwOlx0XHQucHJvY19yZWxlYXNlXHRcdD0gYWxsb2NpbmZvX3JlbGVhc2UsXG4gNDgxOlx0XHQucHJvY19pb2N0bFx0XHQ9IGFsbG9jaW5mb19pb2N0bCxcbiA0ODI6XHQjaWZkZWYgQ09ORklHX0NPTVBBVFxuIDQ4MzpcdFx0LnByb2NfY29tcGF0X2lvY3RsXHQ9IGFsbG9jaW5mb19jb21wYXRfaW9jdGwsXG4gNDg0Olx0I2VuZGlmXG4gNDg1Olx0fTtcbiA0ODY6XHRcbiA0ODc6XHRzaXplX3QgYWxsb2NfdGFnX3RvcF91c2VycyhzdHJ1Y3QgY29kZXRhZ19ieXRlcyAqdGFncywgc2l6ZV90IGNvdW50LCBib29sIGNhbl9zbGVlcClcbiA0ODg6XHR7XG4gNDg5Olx0XHRzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBpdGVyO1xuIDQ5MDpcdFx0c3RydWN0IGNvZGV0YWcgKmN0O1xuIDQ5MTpcdFx0c3RydWN0IGNvZGV0YWdfYnl0ZXMgbjtcbiA0OTI6XHRcdHVuc2lnbmVkIGludCBpLCBuciA9IDA7XG4gNDkzOlx0XG4gNDk0Olx0XHRpZiAoSVNfRVJSX09SX05VTEwoYWxsb2NfdGFnX2N0dHlwZSkpXG4gNDk1Olx0XHRcdHJldHVybiAwO1xuIDQ5NjpcdFxuIDQ5NzpcdFx0aWYgKGNhbl9zbGVlcClcbiA0OTg6XHRcdFx0Y29kZXRhZ19sb2NrX21vZHVsZV9saXN0KGFsbG9jX3RhZ19jdHR5cGUpO1xuIDQ5OTpcdFx0ZWxzZSBpZiAoIWNvZGV0YWdfdHJ5bG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKSlcbiA1MDA6XHRcdFx0cmV0dXJuIDA7XG4gNTAxOlx0XG4gNTAyOlx0XHRpdGVyID0gY29kZXRhZ19nZXRfY3RfaXRlcihhbGxvY190YWdfY3R0eXBlKTtcbiA1MDM6XHRcdHdoaWxlICgoY3QgPSBjb2RldGFnX25leHRfY3QoXHUwMDI2aXRlcikpKSB7XG4gNTA0Olx0XHRcdHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgY291bnRlciA9IGFsbG9jX3RhZ19yZWFkKGN0X3RvX2FsbG9jX3RhZyhjdCkpO1xuIDUwNTpcdFxuIDUwNjpcdFx0XHRuLmN0XHQ9IGN0O1xuIDUwNzpcdFx0XHRuLmJ5dGVzID0gY291bnRlci5ieXRlcztcbiA1MDg6XHRcbiA1MDk6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnI7IGkmIzQzOyYjNDM7KVxuIDUxMDpcdFx0XHRcdGlmIChuLmJ5dGVzIFx1MDAzZSB0YWdzW2ldLmJ5dGVzKVxuIDUxMTpcdFx0XHRcdFx0YnJlYWs7XG4gNTEyOlx0XG4gNTEzOlx0XHRcdGlmIChpIFx1MDAzYyBjb3VudCkge1xuIDUxNDpcdFx0XHRcdG5yIC09IG5yID09IGNvdW50O1xuIDUxNTpcdFx0XHRcdG1lbW1vdmUoXHUwMDI2dGFnc1tpICYjNDM7IDFdLFxuIDUxNjpcdFx0XHRcdFx0XHUwMDI2dGFnc1tpXSxcbiA1MTc6XHRcdFx0XHRcdHNpemVvZih0YWdzWzBdKSAqIChuciAtIGkpKTtcbiA1MTg6XHRcdFx0XHRuciYjNDM7JiM0Mzs7XG4gNTE5Olx0XHRcdFx0dGFnc1tpXSA9IG47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIGAvcHJvYy9hbGxvY2luZm9gJiMzOTtzIGBpb2N0bGAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGlvY3RsYCByb3V0aW5lLCBhbmQgaXQmIzM5O3MgcGFydCBvZiB0aGUgYC9wcm9jL2FsbG9jaW5mb2AgaW50ZXJmYWNlLiBUaGF0JiMzOTtzIGRlZmluaXRlbHkgd2l0aGluIGNvcmUga2VybmVsIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBtZWNoYW5pc21zLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgYSB3b3J0aHdoaWxlIHRhcmdldCBmb3IgZnV6emluZz8gQWJzb2x1dGVseSwgaXQgbG9va3MgbGlrZSBhIGdvb2QgY2FuZGlkYXRlLiBUaGUgZmFjdCB0aGF0IGl0IG1hbmlwdWxhdGVzIHRoZSBVQVBJIHN0cnVjdCBsYXlvdXQgYW5kIHRoZSBpb2N0bCBoYW5kbGluZyBpdHNlbGYgaXMgYSBrZXkgcG9pbnQuIFRoaXMgc3VnZ2VzdHMgcG90ZW50aWFsIGZvciBtZW1vcnkgY29ycnVwdGlvbiBvciBvdGhlciBpc3N1ZXMgaWYgbWFsZm9ybWVkIGRhdGEgaXMgcHJvdmlkZWQuIExldCYjMzk7cyBzZWUuLi5JIHNlZSB0aGF0IGBBTExPQ0lORk9fSU9DX0dFVF9BVGAgdXNlcyBgbWF0Y2hlc19maWx0ZXJgLiBUaW1lIHRvIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGBDT05GSUdfYCBvcHRpb25zIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkIHRvIGFsbG93IHRoaXMgdG8gZXZlbiBiZSBleHBvc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY2luZm9fcHJvY19vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9hbGxvY190YWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9hbGxvY190YWcuYz00Njk9c3RhdGljIGxvbmcgYWxsb2NpbmZvX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5tbS9hbGxvY190YWcuYy00NzUtXG5tbS9hbGxvY190YWcuYzo0NzY6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBhbGxvY2luZm9fcHJvY19vcHMgPSB7XG5tbS9hbGxvY190YWcuYy00NzctXHQucHJvY19vcGVuXHRcdD0gYWxsb2NpbmZvX29wZW4sXG4tLVxubW0vYWxsb2NfdGFnLmM9MTMxNj1zdGF0aWMgaW50IF9faW5pdCBhbGxvY190YWdfaW5pdCh2b2lkKVxuLS1cbm1tL2FsbG9jX3RhZy5jLTEzMzctXG5tbS9hbGxvY190YWcuYzoxMzM4Olx0aWYgKCFwcm9jX2NyZWF0ZShBTExPQ0lORk9fRklMRV9OQU1FLCAwNDAwLCBOVUxMLCBcdTAwMjZhbGxvY2luZm9fcHJvY19vcHMpKSB7XG5tbS9hbGxvY190YWcuYy0xMzM5LVx0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSAlcyBmaWxlXFxuXCYjMzQ7LCBBTExPQ0lORk9fRklMRV9OQU1FKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTg6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU5MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipGaW5kaW5nIHRoZSBLY29uZmlnIE9wdGlvbiBmb3IgYG1tL2FsbG9jX3RhZy5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgS2NvbmZpZyBvcHRpb24gdGhhdCBjb250cm9scyB0aGUgYnVpbGQgYW5kIGluY2x1c2lvbiBvZiBgbW0vYWxsb2NfdGFnLmNgLiBUaGlzIGlzbiYjMzk7dCBhIHBhcnRpY3VsYXJseSBjb21wbGV4IHRhc2ssIGJ1dCBJIG5lZWQgdG8gYXBwcm9hY2ggaXQgbWV0aG9kaWNhbGx5LiBJIGNvdWxkIGp1c3QgZ3JlcCB0aHJvdWdoIHRoZSBrZXJuZWwgc291cmNlIGZvciBpdCwgYnV0IHRoYXQmIzM5O3MgYSBicnV0ZS1mb3JjZSBtZXRob2QuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIHN5c3RlbSwgdGhlcmUmIzM5O3MgbGlrZWx5IGEgbW9yZSBlbGVnYW50IGFuZCBlZmZpY2llbnQgd2F5IHRvIGFjaGlldmUgdGhpcywgYXZvaWRpbmcgZmFsc2UgcG9zaXRpdmVzLgoKRmlyc3QsIEkmIzM5O2xsIGNvbnNpZGVyIGhvdyB0aGlzIGZpbGUgZml0cyBpbnRvIHRoZSBsYXJnZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBgbW0vYWxsb2NfdGFnLmNgIGlzIHByZXR0eSBleHBsaWNpdC4gVGhlIGZpbGVuYW1lIGl0c2VsZiBsaWtlbHkgZ2l2ZXMgYSBzdHJvbmcgaGludC4gSSB3b3VsZCBzdGFydCBieSBleHBsb3JpbmcgS2NvbmZpZyBmaWxlcyB3aXRoaW4gdGhlIGBtbWAgZGlyZWN0b3J5LiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgYEtjb25maWdgIGZpbGVzIGxvY2F0ZWQgY2xvc2VzdCB0byB0aGUgZmlsZSBpdHNlbGYsIHRoZW4gZXhwYW5kaW5nIHRoZSBzZWFyY2ggaWYgbmVlZGVkLCB0byB1bmRlcnN0YW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgYW5kIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgYSBLY29uZmlnIG9wdGlvbiB0aGF0IGRpcmVjdGx5IHJlZmVyZW5jZXMgb3IgY29udHJvbHMgdGhlIGluY2x1c2lvbiBvZiB0aGlzIHNwZWNpZmljIGZpbGUgb3IsIHBlcmhhcHMsIGEgbGFyZ2VyIGZlYXR1cmUgaXQmIzM5O3MgcGFydCBvZi4KCklmIEkmIzM5O20gdW5hYmxlIHRvIGZpbmQgYSBkZWZpbml0aXZlIEtjb25maWcgb3B0aW9uLCBJJiMzOTtsbCB0aGVuIG1vdmUgaW50byBjcm9zcy1yZWZlcmVuY2luZy4gSSBjb3VsZCBsZXZlcmFnZSBhIHN5bWJvbCBzZWFyY2ggdG8gZmluZCBhbGwgcmVmZXJlbmNlcyB0byBgYWxsb2NfdGFnYCAob3Igd2hhdGV2ZXIgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBpcykuIEkmIzM5O2xsIGNyb3NzLXJlZmVyZW5jZSB3aGF0IG9wdGlvbnMgcmVmZXJlbmNlIHRoZSBzeW1ib2wuIFRoaXMgc2hvdWxkIGxlYWQgbWUgdG8gdGhlIG1vc3QgZGlyZWN0IGNvbnRyb2wgcG9pbnQgZm9yIHRoZSBmZWF0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGFjY291bnQgZm9yIHBvdGVudGlhbCBpbmRpcmVjdCBkZXBlbmRlbmNpZXMg4oCTIHBlcmhhcHMgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIG9ubHkgZW5hYmxlZCBhcyBwYXJ0IG9mIGEgbGFyZ2VyIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUgc2V0LgoKVWx0aW1hdGVseSwgSSBleHBlY3QgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGFsbG93aW5nIG1lIHRvIHRhaWxvciBteSBrZXJuZWwgY29uZmlndXJhdGlvbiBhY2NvcmRpbmdseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfdGFnLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xNDg9b2JqLSQoQ09ORklHX0xBWllfTU1VX01PREVfS1VOSVRfVEVTVCkgJiM0Mzs9IHRlc3RzL2xhenlfbW11X21vZGVfa3VuaXQub1xubW0vTWFrZWZpbGU6MTQ5Om9iai0kKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HKSAmIzQzOz0gYWxsb2NfdGFnLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTg6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMDIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBBbGxvY2F0aW9uIFByb2ZpbGluZyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRoZSBrZXkgaGVyZSBzZWVtcyB0byBiZSBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpcyBjb25maWd1cmVkIGFuZCB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIExldCBtZSBzZWUuLi4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJJiMzOTtsbCBmaW5kIGl0IGRlZmluZWQgaW4gc29tZXRoaW5nIGxpa2UgYGxpYi9LY29uZmlnLmRlYnVnYCwgb3IgbWF5YmUgYGtlcm5lbC9LY29uZmlnLmRlYnVnYCwgb3IgcG90ZW50aWFsbHkgc29tZXdoZXJlIGVsc2Ugd2hlcmUgZGVidWdnaW5nIGZlYXR1cmVzIGFyZSBkZXNjcmliZWQuIExldCBtZSBnbyBjaGVjayB0aGF0IG91dCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz0zMTE9Y29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xuLS1cbm1tL0tjb25maWcuZGVidWctMzIzLVxubW0vS2NvbmZpZy5kZWJ1ZzozMjQ6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcbm1tL0tjb25maWcuZGVidWctMzI1LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0zMzctXG5tbS9LY29uZmlnLmRlYnVnOjMzODpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcbm1tL0tjb25maWcuZGVidWctMzM5LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTM0Mi1cbm1tL0tjb25maWcuZGVidWc6MzQzOmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXG5tbS9LY29uZmlnLmRlYnVnLTM0NC1cdGJvb2wgXCYjMzQ7TWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsZXIgZGVidWdnaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTE3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEZWJ1Z2dpbmcgS2NvbmZpZyBpbiBtbSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBCYXNlZCBvbiB3aGF0IEkmIzM5O20gc2VlaW5nLCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGxvb2sgaW50byB0aGUgZGVidWcgS2NvbmZpZyBzZXR0aW5ncywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG1tYCBzdWJzeXN0ZW0uIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byB0aGUgZmlsZSBgbW0vS2NvbmZpZy5kZWJ1Z2AsIGFuZCBJIHRoaW5rIGxpbmUgMzI0IGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gVGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBzcG90IGZvciB0aGUgdHlwZSBvZiBjb25maWd1cmF0aW9uIEkmIzM5O20gc3VzcGVjdGluZyBpcyBjYXVzaW5nIHRoZSBiZWhhdmlvciBJJiMzOTttIHdpdG5lc3NpbmcuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMxNTpcdFx0ICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzdWNjZXNzLCByZXRyeSBhbmQgZmFpbHVyZSBjb3VudGVycyBvZiBwYWdlXG4gMzE2Olx0XHQgIGZhdWx0cyBoYW5kbGVkIHVuZGVyIHByb3RlY3Rpb24gb2YgcGVyLXZtYSBsb2Nrcy4gV2hlbiBlbmFibGVkLCB0aGVcbiAzMTc6XHRcdCAgY291bnRlcnMgYXJlIGV4cG9zZWQgaW4gL3Byb2Mvdm1zdGF0LiBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWZ1bCBmb3JcbiAzMTg6XHRcdCAga2VybmVsIGRldmVsb3BlcnMgdG8gZXZhbHVhdGUgZWZmZWN0aXZlbmVzcyBvZiBwZXItdm1hIGxvY2tzIGFuZCB0b1xuIDMxOTpcdFx0ICBpZGVudGlmeSBwYXRob2xvZ2ljYWwgY2FzZXMuIENvdW50aW5nIHRoZXNlIGV2ZW50cyBpbnRyb2R1Y2VzIGEgc21hbGxcbiAzMjA6XHRcdCAgb3ZlcmhlYWQgaW4gdGhlIHBhZ2UgZmF1bHQgcGF0aC5cbiAzMjE6XHRcbiAzMjI6XHRcdCAgSWYgaW4gZG91YnQsIHNheSBOLlxuIDMyMzpcdFxuIDMyNDpcdGNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HXG4gMzI1Olx0XHRib29sIFwmIzM0O0VuYWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmdcJiMzNDtcbiAzMjY6XHRcdGRlZmF1bHQgblxuIDMyNzpcdFx0ZGVwZW5kcyBvbiBNTVVcbiAzMjg6XHRcdGRlcGVuZHMgb24gUFJPQ19GU1xuIDMyOTpcdFx0ZGVwZW5kcyBvbiAhREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVXG4gMzMwOlx0XHRzZWxlY3QgQ09ERV9UQUdHSU5HXG4gMzMxOlx0XHRzZWxlY3QgUEFHRV9FWFRFTlNJT05cbiAzMzI6XHRcdHNlbGVjdCBTTEFCX09CSl9FWFRcbiAzMzM6XHRcdGhlbHBcbiAzMzQ6XHRcdCAgVHJhY2sgYWxsb2NhdGlvbiBzb3VyY2UgY29kZSBhbmQgcmVjb3JkIHRvdGFsIGFsbG9jYXRpb24gc2l6ZVxuIDMzNTpcdFx0ICBpbml0aWF0ZWQgYXQgdGhhdCBjb2RlIGxvY2F0aW9uLiBUaGUgbWVjaGFuaXNtIGNhbiBiZSB1c2VkIHRvIHRyYWNrXG4gMzM2Olx0XHQgIG1lbW9yeSBsZWFrcyB3aXRoIGEgbG93IHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgaW1wYWN0LlxuIDMzNzpcdFxuIDMzODpcdGNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxuIDMzOTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGJ5IGRlZmF1bHRcJiMzNDtcbiAzNDA6XHRcdGRlZmF1bHQgeVxuIDM0MTpcdFx0ZGVwZW5kcyBvbiBNRU1fQUxMT0NfUFJPRklMSU5HXG4gMzQyOlx0XG4gMzQzOlx0Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcbiAzNDQ6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsZXIgZGVidWdnaW5nXCYjMzQ7XG4gMzQ1Olx0XHRkZWZhdWx0IG5cbiAzNDY6XHRcdGRlcGVuZHMgb24gTUVNX0FMTE9DX1BST0ZJTElOR1xuIDM0NzpcdFx0c2VsZWN0IE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXG4gMzQ4Olx0XHRoZWxwXG4gMzQ5Olx0XHQgIEFkZHMgd2FybmluZ3Mgd2l0aCBoZWxwZnVsIGVycm9yIG1lc3NhZ2VzIGZvciBtZW1vcnkgYWxsb2NhdGlvblxuIDM1MDpcdFx0ICBwcm9maWxpbmcuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjM0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgYWxsb2NpbmZvX2lvY3RsYCBGdW5jdGlvbiBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBgTUVNX0FMTE9DX1BST0ZJTElOR2AgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIHRvIGNvbnNpZGVyIGhlcmUuIFJpZ2h0LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgaW9jdGwgZnVuY3Rpb25zIOKAkyB3ZSYjMzk7dmUgZ290IGBhbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWRgLCBgYWxsb2NpbmZvX2lvY3RsX2dldF9hdGAsIGBhbGxvY2luZm9faW9jdGxfZ2V0X25leHRgLCBgYWxsb2NpbmZvX2lvY3RsYCwgYW5kIGBhbGxvY2luZm9fY29tcGF0X2lvY3RsYC4gR2l2ZW4gdGhlIGxhbmRzY2FwZSwgYGFsbG9jaW5mb19pb2N0bGAgaXMgdGhlIHByaW1hcnkgdGFyZ2V0IGZvciBmdXp6aW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBxdWlja2x5IHZlcmlmeSB3aGV0aGVyIGBhbGxvY2luZm9faW9jdGxgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBZZXMsIGl0IGlzOiBgc3RhdGljIGxvbmcgYWxsb2NpbmZvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIF9fYXJnKWAuIFdhaXQgYSBtaW51dGUsIHN0YXRpYyBmdW5jdGlvbnMgYXJlICpvZnRlbiogaW5saW5lZCwgYnV0IHRoYXQmIzM5O3Mgbm90IGhhcHBlbmluZyBoZXJlLiBTaW5jZSBpdHMgYWRkcmVzcyBpcyBiZWluZyBhc3NpZ25lZCB0byBgYWxsb2NpbmZvX3Byb2Nfb3BzLnByb2NfaW9jdGxgLCB0aGUgY29tcGlsZXIgKmNhbiYjMzk7dCogaW5saW5lIGl0LiBJbnRlcmVzdGluZy4gT24gdGhlIG90aGVyIGhhbmQsIGBhbGxvY2luZm9faW9jdGxfZ2V0X2F0YCBpcyBhbHNvIHN0YXRpYywgYnV0IHRoYXQgZnVuY3Rpb24gKmlzKiBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgYWxsb2NpbmZvX2lvY3RsYC4KCkxldCYjMzk7cyBjb25maXJtIHRoYXQgYGFsbG9jaW5mb19pb2N0bGAgaXMgdGhlIHJpZ2h0IGZ1bmN0aW9uIHRvIGZvY3VzIG9uLiBZZXAsIGl0IHNlZW1zIHRvIGJlIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgaW9jdGwgY2FsbHMsIGFuZCB0aGF0IG1ha2VzIGl0IGFuIGV4Y2VsbGVudCBmb2NhbCBwb2ludC4gSSBzaG91bGQgYWxzbyBpbmNsdWRlIGBhbGxvY2luZm9fY29tcGF0X2lvY3RsYCBpbiB0aGUgbGlzdC4KCk9rYXksIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYG1tL2FsbG9jX3RhZy5jYCB0byBlbnN1cmUgSSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY2luZm9faW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9hbGxvY190YWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9hbGxvY190YWcuYz0yMjQ9c3RhdGljIHZvaWQgYWxsb2NpbmZvX3RvX3BhcmFtcyhzdHJ1Y3QgY29kZXRhZyAqY3QsXG4tLVxubW0vYWxsb2NfdGFnLmMtMjQzLSAqL1xubW0vYWxsb2NfdGFnLmM6MjQ0OnN0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9jb250ZW50X2lkKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCBfX3VzZXIgKmFyZylcbm1tL2FsbG9jX3RhZy5jLTI0NS17XG4tLVxubW0vYWxsb2NfdGFnLmM9MjYxPXN0YXRpYyBib29sIG1hdGNoZXNfZmlsdGVyKHN0cnVjdCBjb2RldGFnICpjdCwgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcixcbi0tXG5tbS9hbGxvY190YWcuYy0zMTctICovXG5tbS9hbGxvY190YWcuYzozMTg6c3RhdGljIGludCBhbGxvY2luZm9faW9jdGxfZ2V0X2F0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCBfX3VzZXIgKmFyZylcbm1tL2FsbG9jX3RhZy5jLTMxOS17XG4tLVxubW0vYWxsb2NfdGFnLmMtMzkyLSAqL1xubW0vYWxsb2NfdGFnLmM6MzkzOnN0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCBfX3VzZXIgKmFyZylcbm1tL2FsbG9jX3RhZy5jLTM5NC17XG4tLVxubW0vYWxsb2NfdGFnLmMtNDQzLSAqL1xubW0vYWxsb2NfdGFnLmM6NDQ0OnN0YXRpYyBsb25nIGFsbG9jaW5mb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbm1tL2FsbG9jX3RhZy5jLTQ0NS1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyBfX2FyZylcbi0tXG5tbS9hbGxvY190YWcuYy00NTEtXHRjYXNlIEFMTE9DSU5GT19JT0NfQ09OVEVOVF9JRDpcbm1tL2FsbG9jX3RhZy5jOjQ1MjpcdFx0cmV0ID0gYWxsb2NpbmZvX2lvY3RsX2dldF9jb250ZW50X2lkKGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhLCBhcmcpO1xubW0vYWxsb2NfdGFnLmMtNDUzLVx0XHRicmVhaztcbm1tL2FsbG9jX3RhZy5jLTQ1NC1cdGNhc2UgQUxMT0NJTkZPX0lPQ19HRVRfQVQ6XG5tbS9hbGxvY190YWcuYzo0NTU6XHRcdHJldCA9IGFsbG9jaW5mb19pb2N0bF9nZXRfYXQoZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEsIGFyZyk7XG5tbS9hbGxvY190YWcuYy00NTYtXHRcdGJyZWFrO1xubW0vYWxsb2NfdGFnLmMtNDU3LVx0Y2FzZSBBTExPQ0lORk9fSU9DX0dFVF9ORVhUOlxubW0vYWxsb2NfdGFnLmM6NDU4Olx0XHRyZXQgPSBhbGxvY2luZm9faW9jdGxfZ2V0X25leHQoZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEsIGFyZyk7XG5tbS9hbGxvY190YWcuYy00NTktXHRcdGJyZWFrO1xuLS1cbm1tL2FsbG9jX3RhZy5jPTQ2OT1zdGF0aWMgbG9uZyBhbGxvY2luZm9fY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbm1tL2FsbG9jX3RhZy5jLTQ3MS17XG5tbS9hbGxvY190YWcuYzo0NzI6XHRyZXR1cm4gYWxsb2NpbmZvX2lvY3RsKGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpKTtcbm1tL2FsbG9jX3RhZy5jLTQ3My19XG4tLVxubW0vYWxsb2NfdGFnLmM9NDc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgYWxsb2NpbmZvX3Byb2Nfb3BzID0ge1xuLS1cbm1tL2FsbG9jX3RhZy5jLTQ4MC1cdC5wcm9jX3JlbGVhc2VcdFx0PSBhbGxvY2luZm9fcmVsZWFzZSxcbm1tL2FsbG9jX3RhZy5jOjQ4MTpcdC5wcm9jX2lvY3RsXHRcdD0gYWxsb2NpbmZvX2lvY3RsLFxubW0vYWxsb2NfdGFnLmMtNDgyLSNpZmRlZiBDT05GSUdfQ09NUEFUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjQzCgkJCQkJCQlvdXRwdXQ6IDExNQoJCQkJCQkJdGhvdWdodHM6IDQ3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGhpZ2hsaWdodCBmdW5jdGlvbnMgbGlrZSBgYWxsb2NpbmZvX2lvY3RsYCwgYGFsbG9jaW5mb19jb21wYXRfaW9jdGxgLCBhbmQgdGhlIG90aGVycyBhcyBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBIb3dldmVyLCB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSBhc2tzIG1lIHRvIGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhhdCBtYWtlcyBzZW5zZTsgaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIGFyZSBsZXNzIGxpa2VseSB0byBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgYW5kIHRoZXJlZm9yZSBoYXJkZXIgdG8gdGFyZ2V0IGRpcmVjdGx5LgoKU2luY2UgYm90aCBgYWxsb2NpbmZvX2lvY3RsYCBhbmQgYGFsbG9jaW5mb19jb21wYXRfaW9jdGxgIGFyZSBzdGF0aWMsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhleSBhcmUgbm90IGlubGluZWQuIFRoZWlyIGFkZHJlc3MgaXMgdGFrZW4sIHNvIEkmIzM5O20gcmVhc29uYWJseSBjb25maWRlbnQgdGhleSB3b24mIzM5O3QgYmUgaW5saW5lZC4gSSBjYW4gdXNlIHRob3NlIGFzIGZvY3VzIHN5bWJvbHMuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBhbnkgYWRkaXRpb25hbCBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkLiBgTUVNX0FMTE9DX1BST0ZJTElOR2Agc2VlbXMgdG8gYmUgdGhlIGtleSwgZGVwZW5kaW5nIG9uIGBNTVVgLCBgUFJPQ19GU2AsIGFuZCBgIURFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVWAuICBgUFJPQ19GU2AgaXMgcHJldHR5IHN0YW5kYXJkLCBzbyBgTUVNX0FMTE9DX1BST0ZJTElOR2AgaXMgdGhlIGltcG9ydGFudCBjb25maWcuCgpMb29raW5nIGF0IHRoZSBwYXRjaCBpdHNlbGYsIGl0JiMzOTtzIG1vZGlmeWluZyBgc3RydWN0IGFsbG9jaW5mb190YWdgIGFuZCBgc3RydWN0IGFsbG9jaW5mb19maWx0ZXJgIGluIGBpbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmhgLiBJdCBhbHNvIHVwZGF0ZXMgYG1hdGNoZXNfZmlsdGVyYCBpbiBgbW0vYWxsb2NfdGFnLmNgLCBhbmQgYSBjb21tZW50IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvYWxsb2NpbmZvX2lvY3RsX3Rlc3QuY2AuICBUaGlzIGlzIGEgVUFQSSBjaGFuZ2UgaW1wYWN0aW5nIHRoZSBgL3Byb2MvYWxsb2NpbmZvYCBpb2N0bHMgZGlyZWN0bHksIHdoaWNoIG1lYW5zIGl0IGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZy4KCk15IGNvbmNsdXNpb24gaXMgY2xlYXI6CgoqICAgKipXb3J0aEZ1enppbmc6IHRydWUqKgoqICAgKipGb2N1c1N5bWJvbHM6KiogYGFsbG9jaW5mb19pb2N0bGAsIGBhbGxvY2luZm9fY29tcGF0X2lvY3RsYAoqICAgKipFbmFibGVDb25maWdzOioqIGBNRU1fQUxMT0NfUFJPRklMSU5HYAoKKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBVQVBJIHN0cnVjdCBsYXlvdXQgZm9yIHRoZSBgL3Byb2MvYWxsb2NpbmZvYCBpb2N0bCBhbmQgdXBkYXRlcyB0aGUgY29ycmVzcG9uZGluZyBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMgaW4gdGhlIGtlcm5lbC4gRnV6emluZyB0aGUgaW9jdGwgaGFuZGxlciBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBuZXcgc3RydWN0IGxheW91dCBhbmQgZmlsdGVyaW5nIGxvZ2ljIGFyZSBoYW5kbGVkIGNvcnJlY3RseSB3aXRob3V0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbG9naWMgZXJyb3JzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNX0FMTE9DX1BST0ZJTElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jaW5mb19pb2N0bCYjMzQ7LAogICAgJiMzNDthbGxvY2luZm9fY29tcGF0X2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBVQVBJIHN0cnVjdCBsYXlvdXQgZm9yIHRoZSAvcHJvYy9hbGxvY2luZm8gaW9jdGwgYW5kIHVwZGF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGluIHRoZSBrZXJuZWwuIEZ1enppbmcgdGhlIGlvY3RsIGhhbmRsZXIgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgbmV3IHN0cnVjdCBsYXlvdXQgYW5kIGZpbHRlcmluZyBsb2dpYyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgd2l0aG91dCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGxvZ2ljIGVycm9ycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNX0FMTE9DX1BST0ZJTElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jaW5mb19pb2N0bCYjMzQ7LAogICAgJiMzNDthbGxvY2luZm9fY29tcGF0X2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBVQVBJIHN0cnVjdCBsYXlvdXQgZm9yIHRoZSAvcHJvYy9hbGxvY2luZm8gaW9jdGwgYW5kIHVwZGF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGluIHRoZSBrZXJuZWwuIEZ1enppbmcgdGhlIGlvY3RsIGhhbmRsZXIgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgbmV3IHN0cnVjdCBsYXlvdXQgYW5kIGZpbHRlcmluZyBsb2dpYyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgd2l0aG91dCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGxvZ2ljIGVycm9ycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE4OjM3OjQ4LjIyOTA2MzgyNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NjE4ODk2MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTV9BTExPQ19QUk9GSUxJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY2luZm9faW9jdGxcIixcbiAgICBcImFsbG9jaW5mb19jb21wYXRfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVUFQSSBzdHJ1Y3QgbGF5b3V0IGZvciB0aGUgL3Byb2MvYWxsb2NpbmZvIGlvY3RsIGFuZCB1cGRhdGVzIHRoZSBjb3JyZXNwb25kaW5nIGZpbHRlciBtYXRjaGluZyBsb2dpYyBpbiB0aGUga2VybmVsLiBGdXp6aW5nIHRoZSBpb2N0bCBoYW5kbGVyIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIG5ldyBzdHJ1Y3QgbGF5b3V0IGFuZCBmaWx0ZXJpbmcgbG9naWMgYXJlIGhhbmRsZWQgY29ycmVjdGx5IHdpdGhvdXQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBsb2dpYyBlcnJvcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE4OjM3OjQ4LjIyOTA3MDY4NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxNzk0MTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjExYzNjZmE5YzE1MTAwMDE0YjYzNGJiZmY1NGVlYzA1Y2I5NjQyYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyA0IDE4OjM3OjQ3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9hbGxvY190YWcuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9hbGxvY190YWcuaFxcbmluZGV4IDI3MGY2OTNiMTgyMjAuLmUzYWQ5NDQ0NDg2NGQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oXFxuQEAgLTMxLDggKzMxLDYgQEAgc3RydWN0IGFsbG9jaW5mb190YWcge1xcbiBcXHRjaGFyIGZ1bmN0aW9uW0FMTE9DSU5GT19TVFJfU0laRV07XFxuIFxcdGNoYXIgZmlsZW5hbWVbQUxMT0NJTkZPX1NUUl9TSVpFXTtcXG4gXFx0X191NjQgbGluZW5vO1xcbi1cXHQvKiBmaWx0ZXIgY3JpdGVyaWEgb25seTsgc2VlIGFsbG9jaW5mb19jb3VudGVyLmFjY3VyYXRlIGZvciBhY3R1YWwgYWNjdXJhY3kgKi9cXG4tXFx0X191NjQgaW5hY2N1cmF0ZTtcXG4gfTtcXG4gXFxuIC8qIFRoZSBhbGlnbm1lbnQgZW5zdXJlcyAzMi1iaXQgY29tcGF0aWJsZSBpbnRlcmZhY2VzIGFyZSBub3QgYnJva2VuICovXFxuQEAgLTc0LDYgKzcyLDggQEAgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIge1xcbiBcXHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZyBmaWVsZHM7XFxuIFxcdF9fdTY0IG1pbl9zaXplO1xcbiBcXHRfX3U2NCBtYXhfc2l6ZTtcXG4rXFx0LyogZmlsdGVyIGNyaXRlcmlhIG9ubHk7IHNlZSBhbGxvY2luZm9fY291bnRlci5hY2N1cmF0ZSBmb3IgYWN0dWFsIGFjY3VyYWN5ICovXFxuK1xcdF9fdTY0IGluYWNjdXJhdGU7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgYWxsb2NpbmZvX2dldF9hdCB7XFxuZGlmZiAtLWdpdCBhL21tL2FsbG9jX3RhZy5jIGIvbW0vYWxsb2NfdGFnLmNcXG5pbmRleCA1MmFlY2UyN2IwMGUwLi44NGM1YzM3ODNjYTQ2IDEwMDY0NFxcbi0tLSBhL21tL2FsbG9jX3RhZy5jXFxuKysrIGIvbW0vYWxsb2NfdGFnLmNcXG5AQCAtMjkxLDcgKzI5MSw3IEBAIHN0YXRpYyBib29sIG1hdGNoZXNfZmlsdGVyKHN0cnVjdCBjb2RldGFnICpjdCwgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcixcXG4gXFxuIFxcdGlmIChmaWx0ZXItXFx1MDAzZW1hc2sgXFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfSU5BQ0NVUkFURSkge1xcbiBcXHRcXHRpbmFjY3VyYXRlID0gISEoY3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQ09ERVRBR19GTEFHX0lOQUNDVVJBVEUpO1xcbi1cXHRcXHRpZiAoaW5hY2N1cmF0ZSAhPSAhIShmaWx0ZXItXFx1MDAzZWZpZWxkcy5pbmFjY3VyYXRlKSlcXG4rXFx0XFx0aWYgKGluYWNjdXJhdGUgIT0gISEoZmlsdGVyLVxcdTAwM2VpbmFjY3VyYXRlKSlcXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvYWxsb2NpbmZvX2lvY3RsX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9hbGxvY2luZm9faW9jdGxfdGVzdC5jXFxuaW5kZXggN2Q5NGFiYjc4NWExNC4uNzRmZDY0YjIzNzBjYyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvYWxsb2NpbmZvX2lvY3RsX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9hbGxvY2luZm9faW9jdGxfdGVzdC5jXFxuQEAgLTEsNyArMSw3IEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gXFxuIC8qIGtzZWxmdGVzdCBmb3IgYWxsb2NpbmZvIGlvY3RsXFxuLSAqIGFsbG9jaW5mbyBpb2N0bCByZXRyaXZlcyBhbGxvY2luZm8gZGF0YSB0aHJvdWdoIGlvY3RsXFxuKyAqIGFsbG9jaW5mbyBpb2N0bCByZXRyaWV2ZXMgYWxsb2NpbmZvIGRhdGEgdGhyb3VnaCBpb2N0bFxcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMjYgR29vZ2xlLCBJbmMuXFxuICAqL1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTg6Mzc6NDguNjUxNDU5NjkyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTgxOTY0OTA4MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNX0FMTE9DX1BST0ZJTElOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jaW5mb19pb2N0bFwiLFxuICAgIFwiYWxsb2NpbmZvX2NvbXBhdF9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBVQVBJIHN0cnVjdCBsYXlvdXQgZm9yIHRoZSAvcHJvYy9hbGxvY2luZm8gaW9jdGwgYW5kIHVwZGF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGluIHRoZSBrZXJuZWwuIEZ1enppbmcgdGhlIGlvY3RsIGhhbmRsZXIgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgbmV3IHN0cnVjdCBsYXlvdXQgYW5kIGZpbHRlcmluZyBsb2dpYyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgd2l0aG91dCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGxvZ2ljIGVycm9ycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjExYzNjZmE5YzE1MTAwMDE0YjYzNGJiZmY1NGVlYzA1Y2I5NjQyYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDQgMTg6Mzc6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmhcbmluZGV4IDI3MGY2OTNiMTgyMjAuLmUzYWQ5NDQ0NDg2NGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9hbGxvY190YWcuaFxuQEAgLTMxLDggKzMxLDYgQEAgc3RydWN0IGFsbG9jaW5mb190YWcge1xuIFx0Y2hhciBmdW5jdGlvbltBTExPQ0lORk9fU1RSX1NJWkVdO1xuIFx0Y2hhciBmaWxlbmFtZVtBTExPQ0lORk9fU1RSX1NJWkVdO1xuIFx0X191NjQgbGluZW5vO1xuLVx0LyogZmlsdGVyIGNyaXRlcmlhIG9ubHk7IHNlZSBhbGxvY2luZm9fY291bnRlci5hY2N1cmF0ZSBmb3IgYWN0dWFsIGFjY3VyYWN5ICovXG4tXHRfX3U2NCBpbmFjY3VyYXRlO1xuIH07XG4gXG4gLyogVGhlIGFsaWdubWVudCBlbnN1cmVzIDMyLWJpdCBjb21wYXRpYmxlIGludGVyZmFjZXMgYXJlIG5vdCBicm9rZW4gKi9cbkBAIC03NCw2ICs3Miw4IEBAIHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIHtcbiBcdHN0cnVjdCBhbGxvY2luZm9fdGFnIGZpZWxkcztcbiBcdF9fdTY0IG1pbl9zaXplO1xuIFx0X191NjQgbWF4X3NpemU7XG4rXHQvKiBmaWx0ZXIgY3JpdGVyaWEgb25seTsgc2VlIGFsbG9jaW5mb19jb3VudGVyLmFjY3VyYXRlIGZvciBhY3R1YWwgYWNjdXJhY3kgKi9cbitcdF9fdTY0IGluYWNjdXJhdGU7XG4gfTtcbiBcbiBzdHJ1Y3QgYWxsb2NpbmZvX2dldF9hdCB7XG5kaWZmIC0tZ2l0IGEvbW0vYWxsb2NfdGFnLmMgYi9tbS9hbGxvY190YWcuY1xuaW5kZXggNTJhZWNlMjdiMDBlMC4uODRjNWMzNzgzY2E0NiAxMDA2NDRcbi0tLSBhL21tL2FsbG9jX3RhZy5jXG4rKysgYi9tbS9hbGxvY190YWcuY1xuQEAgLTI5MSw3ICsyOTEsNyBAQCBzdGF0aWMgYm9vbCBtYXRjaGVzX2ZpbHRlcihzdHJ1Y3QgY29kZXRhZyAqY3QsIHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyICpmaWx0ZXIsXG4gXG4gXHRpZiAoZmlsdGVyLVx1MDAzZW1hc2sgXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19JTkFDQ1VSQVRFKSB7XG4gXHRcdGluYWNjdXJhdGUgPSAhIShjdC1cdTAwM2VmbGFncyBcdTAwMjYgQ09ERVRBR19GTEFHX0lOQUNDVVJBVEUpO1xuLVx0XHRpZiAoaW5hY2N1cmF0ZSAhPSAhIShmaWx0ZXItXHUwMDNlZmllbGRzLmluYWNjdXJhdGUpKVxuK1x0XHRpZiAoaW5hY2N1cmF0ZSAhPSAhIShmaWx0ZXItXHUwMDNlaW5hY2N1cmF0ZSkpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9hbGxvY2luZm9faW9jdGxfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL2FsbG9jaW5mb19pb2N0bF90ZXN0LmNcbmluZGV4IDdkOTRhYmI3ODVhMTQuLjc0ZmQ2NGIyMzcwY2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvYWxsb2NpbmZvX2lvY3RsX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL2FsbG9jaW5mb19pb2N0bF90ZXN0LmNcbkBAIC0xLDcgKzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiBcbiAvKiBrc2VsZnRlc3QgZm9yIGFsbG9jaW5mbyBpb2N0bFxuLSAqIGFsbG9jaW5mbyBpb2N0bCByZXRyaXZlcyBhbGxvY2luZm8gZGF0YSB0aHJvdWdoIGlvY3RsXG4rICogYWxsb2NpbmZvIGlvY3RsIHJldHJpZXZlcyBhbGxvY2luZm8gZGF0YSB0aHJvdWdoIGlvY3RsXG4gICogQ29weXJpZ2h0IChDKSAyMDI2IEdvb2dsZSwgSW5jLlxuICAqL1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTg6Mzc6NDguNjUxNDYxMTQzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE3MzcyMjY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFsbG9jIFRhZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgYWxsb2MgdGFnIGluZnJhc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgYWxsb2NpbmZvYCBmdW5jdGlvbmFsaXR5LiBJIHNlZSBjaGFuZ2VzIHRvIGBpbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmhgLCBgbW0vYWxsb2NfdGFnLmNgLCBhbmQgdGhlIHNlbGYtdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9hbGxvY2luZm9faW9jdGxfdGVzdC5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIG1vdmluZyB0aGUgYGluYWNjdXJhdGVgIGZpZWxkIGZyb20gdGhlIGBhbGxvY2luZm9fdGFnYCBzdHJ1Y3QgdG8gdGhlIGBhbGxvY2luZm9fZmlsdGVyYCBzdHJ1Y3QgaW4gdGhlIHVzZXItc3BhY2UgaGVhZGVyLiBUaGlzIHNoaWZ0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGhvdyB0aGUgZmlsdGVyIGludGVyYWN0cyB3aXRoIHRoZSBpb2N0bCBjYWxscy5cblxuSW4gYG1tL2FsbG9jX3RhZy5jYCwgdGhleSdyZSB1cGRhdGluZyB0aGUgY29kZSB0byByZWZlcmVuY2UgYGZpbHRlci1cdTAwM2VpbmFjY3VyYXRlYCBpbnN0ZWFkIG9mIHRoZSBvbGQgYGZpbHRlci1cdTAwM2VmaWVsZHMuaW5hY2N1cmF0ZWAgY29uc3RydWN0LiBUaGlzIGxpa2VseSBtZWFucyB0aGV5J3ZlIHJlc3RydWN0dXJlZCB0aGUgd2F5IHRoZSBmaWx0ZXIgZGF0YSBpcyByZXByZXNlbnRlZCBpbnRlcm5hbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhleSd2ZSBjaG9zZW4gdG8gbW92ZSB0aGlzIGZpZWxkLiBXYXMgaXQgZm9yIGFsaWdubWVudD8gU3BhY2Ugb3B0aW1pemF0aW9uPyBBIGNoYW5nZSBpbiB0aGUgZmlsdGVyaW5nIGxvZ2ljIGl0c2VsZj9cblxuR2l2ZW4gdGhlIGZvY3VzIG9uIHRoZSBpb2N0bCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBhbGxvY2luZm9fZmlsdGVyYCBpcyBiZWluZyB1c2VkIGFuZCB3aHkgaXQncyBzdHJ1Y3R1cmVkIHRoaXMgd2F5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIG9uIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHVzZXIgc3BhY2UgYW5kIGtlcm5lbCBzcGFjZS5cblxuSSdtIGdvaW5nIHRvIHF1aWNrbHkgZ3JlcCB0aHJvdWdoIGBtbS9hbGxvY190YWcuY2AgdG8gc2VlIGFsbCB0aGUgcGxhY2VzIHdoZXJlIGBhbGxvY2luZm9fZmlsdGVyYCBpcyB1c2VkLiBUaGlzIHdpbGwgaGVscCBtZSB0cmFjZSB0aGUgZGF0YSBmbG93IGFuZCBob3cgdGhpcyAnaW5hY2N1cmF0ZScgZmxhZyBpcyBiZWluZyBhY2Nlc3NlZCBhbmQgbWFuaXB1bGF0ZWQgd2l0aGluIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NjEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxODozNzo1My44MjUxODYwMjZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxMzAxMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NpbmZvX2ZpbHRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9hbGxvY190YWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9hbGxvY190YWcuYz02MT1zdHJ1Y3QgYWxsb2NpbmZvX3ByaXZhdGUge1xcbi0tXFxubW0vYWxsb2NfdGFnLmMtNjQtXFx0Ym9vbCBwcmludF9oZWFkZXI7XFxubW0vYWxsb2NfdGFnLmM6NjU6XFx0c3RydWN0IGFsbG9jaW5mb19maWx0ZXIgZmlsdGVyO1xcbm1tL2FsbG9jX3RhZy5jLTY2LVxcdC8qIGlvY3RsIHVzZXMgYSBzZXBhcmF0ZSBpdGVyYXRvciBub3QgdG8gaW50ZXJmZXJlIHdpdGggcmVhZHMgKi9cXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTI0ND1zdGF0aWMgaW50IGFsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5tbS9hbGxvY190YWcuYy0yNjAtICovXFxubW0vYWxsb2NfdGFnLmM6MjYxOnN0YXRpYyBib29sIG1hdGNoZXNfZmlsdGVyKHN0cnVjdCBjb2RldGFnICpjdCwgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcixcXG5tbS9hbGxvY190YWcuYy0yNjItXFx0XFx0XFx0ICAgc3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyAqY291bnRlcnMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE4OjM3OjUzLjg3MjMyMDM4NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMDg5MTAzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIG1tL2FsbG9jXFxfdGFnLmMqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYSBzcGVjaWZpYyBhcmVhLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYG1tL2FsbG9jX3RhZy5jYCwgYW5kIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyNjEuIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUsIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBwYXJ0IG9mIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiB0YWdnaW5nIHByb2Nlc3MuIEknbSBnb2luZyB0byBzdGFydCBieSBhbmFseXppbmcgdGhlIGNvZGUgaW4gdGhhdCB2aWNpbml0eSBhbmQgc2VlaW5nIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgbW9kdWxlLiBLbm93aW5nIG15IHdheSBhcm91bmQgdGhlIGtlcm5lbCBzb3VyY2UsIEknbGwgYmUgYWJsZSB0byBxdWlja2x5IGdyYXNwIHRoZSBjb250ZXh0LiBUaGUgc3BlY2lmaWMgbGluZSB3aWxsIGFjdCBhcyBteSBzdGFydGluZyBwb2ludCB0byBzZWUgd2hhdCBjbHVlcyBJIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzU1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTg6Mzc6NTkuMDgxMjMyNzU2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2FsbG9jX3RhZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTA6XFx0XFx0Y29kZXRhZ191bmxvY2tfbW9kdWxlX2xpc3QoYWxsb2NfdGFnX2N0dHlwZSk7XFxuIDI1MTpcXHRcXHRpZiAoY29weV90b191c2VyKGFyZywgXFx1MDAyNnBhcmFtcywgc2l6ZW9mKHBhcmFtcykpKVxcbiAyNTI6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDI1MzpcXHRcXG4gMjU0OlxcdFxcdHJldHVybiAwO1xcbiAyNTU6XFx0fVxcbiAyNTY6XFx0XFxuIDI1NzpcXHQvKlxcbiAyNTg6XFx0ICogVmVyaWZpZXMgd2hldGhlciBhIGdpdmVuIGNvZGV0YWcgc2F0aXNmaWVzIHRoZSBhY3RpdmUgZmlsdGVyaW5nIGNyaXRlcmlhIGJ5XFxuIDI1OTpcXHQgKiBtYXRjaGluZyBpdHMgY2hhcmFjdGVyaXN0aWNzIGFnYWluc3QgdGhlIHNwZWNpZmllZCBmaWx0ZXIuXFxuIDI2MDpcXHQgKi9cXG4gMjYxOlxcdHN0YXRpYyBib29sIG1hdGNoZXNfZmlsdGVyKHN0cnVjdCBjb2RldGFnICpjdCwgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcixcXG4gMjYyOlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgKmNvdW50ZXJzLFxcbiAyNjM6XFx0XFx0XFx0XFx0ICAgYm9vbCAqZmV0Y2hlZF9jb3VudGVycylcXG4gMjY0OlxcdHtcXG4gMjY1OlxcdFxcdGJvb2wgaW5hY2N1cmF0ZTtcXG4gMjY2OlxcdFxcbiAyNjc6XFx0XFx0aWYgKCFmaWx0ZXIgfHwgIWZpbHRlci1cXHUwMDNlbWFzaylcXG4gMjY4OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAyNjk6XFx0XFxuIDI3MDpcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2VtYXNrIFxcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01PRE5BTUUpIHtcXG4gMjcxOlxcdFxcdFxcdC8qIHVzZXIgd2FudHMgdG8gZmlsdGVyIGJ5IG1vZG5hbWUgYnV0IGN0LVxcdTAwM2Vtb2RuYW1lIGlzIE5VTEwgKi9cXG4gMjcyOlxcdFxcdFxcdGlmICghY3QtXFx1MDAzZW1vZG5hbWUpIHtcXG4gMjczOlxcdFxcdFxcdFxcdC8qIHZhbGlkYXRlIGlmIHVzZXIgd2FzIGF0dGVtcHRpbmcgdG8gZmlsdGVyIGZvciBidWlsdC1pbiBhbGxvY2F0aW9ucyAqL1xcbiAyNzQ6XFx0XFx0XFx0XFx0aWYgKGZpbHRlci1cXHUwMDNlZmllbGRzLm1vZG5hbWVbMF0gIT0gJ1xcXFwwJylcXG4gMjc1OlxcdFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjc2OlxcdFxcdFxcdH0gZWxzZSBpZiAoYWxsb2NpbmZvX2NtcF9zdHIoY3QtXFx1MDAzZW1vZG5hbWUsIGZpbHRlci1cXHUwMDNlZmllbGRzLm1vZG5hbWUpKVxcbiAyNzc6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyNzg6XFx0XFx0fVxcbiAyNzk6XFx0XFxuIDI4MDpcXHRcXHRpZiAoKGZpbHRlci1cXHUwMDNlbWFzayBcXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19GVU5DVElPTikgXFx1MDAyNlxcdTAwMjZcXG4gMjgxOlxcdFxcdCAgICBjdC1cXHUwMDNlZnVuY3Rpb24gXFx1MDAyNlxcdTAwMjYgYWxsb2NpbmZvX2NtcF9zdHIoY3QtXFx1MDAzZWZ1bmN0aW9uLCBmaWx0ZXItXFx1MDAzZWZpZWxkcy5mdW5jdGlvbikpXFxuIDI4MjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDI4MzpcXHRcXG4gMjg0OlxcdFxcdGlmICgoZmlsdGVyLVxcdTAwM2VtYXNrIFxcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZJTEVOQU1FKSBcXHUwMDI2XFx1MDAyNlxcbiAyODU6XFx0XFx0ICAgIGN0LVxcdTAwM2VmaWxlbmFtZSBcXHUwMDI2XFx1MDAyNiBhbGxvY2luZm9fY21wX3N0cihjdC1cXHUwMDNlZmlsZW5hbWUsIGZpbHRlci1cXHUwMDNlZmllbGRzLmZpbGVuYW1lKSlcXG4gMjg2OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjg3OlxcdFxcbiAyODg6XFx0XFx0aWYgKChmaWx0ZXItXFx1MDAzZW1hc2sgXFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfTElORU5PKSBcXHUwMDI2XFx1MDAyNlxcbiAyODk6XFx0XFx0ICAgIGN0LVxcdTAwM2VsaW5lbm8gIT0gZmlsdGVyLVxcdTAwM2VmaWVsZHMubGluZW5vKVxcbiAyOTA6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyOTE6XFx0XFxuIDI5MjpcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2VtYXNrIFxcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0lOQUNDVVJBVEUpIHtcXG4gMjkzOlxcdFxcdFxcdGluYWNjdXJhdGUgPSAhIShjdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBDT0RFVEFHX0ZMQUdfSU5BQ0NVUkFURSk7XFxuIDI5NDpcXHRcXHRcXHRpZiAoaW5hY2N1cmF0ZSAhPSAhIShmaWx0ZXItXFx1MDAzZWluYWNjdXJhdGUpKVxcbiAyOTU6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyOTY6XFx0XFx0fVxcbiAyOTc6XFx0XFxuIDI5ODpcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2VtYXNrIFxcdTAwMjYgKEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSB8IEFMTE9DSU5GT19GSUxURVJfTUFTS19NQVhfU0laRSkpIHtcXG4gMjk5OlxcdFxcdFxcdGlmICghKmZldGNoZWRfY291bnRlcnMpIHtcXG4gMzAwOlxcdFxcdFxcdFxcdCpjb3VudGVycyA9IGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhjdCk7XFxuIDMwMTpcXHRcXHRcXHRcXHQqZmV0Y2hlZF9jb3VudGVycyA9IHRydWU7XFxuIDMwMjpcXHRcXHRcXHR9XFxuIDMwMzpcXHRcXHRcXHRpZiAoKGZpbHRlci1cXHUwMDNlbWFzayBcXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSkgXFx1MDAyNlxcdTAwMjZcXG4gMzA0OlxcdFxcdFxcdCAgICBjb3VudGVycy1cXHUwMDNlYnl0ZXMgXFx1MDAzYyBmaWx0ZXItXFx1MDAzZW1pbl9zaXplKVxcbiAzMDU6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAzMDY6XFx0XFx0XFx0aWYgKChmaWx0ZXItXFx1MDAzZW1hc2sgXFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfTUFYX1NJWkUpIFxcdTAwMjZcXHUwMDI2XFxuIDMwNzpcXHRcXHRcXHQgICAgY291bnRlcnMtXFx1MDAzZWJ5dGVzIFxcdTAwM2UgZmlsdGVyLVxcdTAwM2VtYXhfc2l6ZSlcXG4gMzA4OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMzA5OlxcdFxcdH1cXG4gMzEwOlxcdFxcbiAzMTE6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDMxMjpcXHR9XFxuIDMxMzpcXHRcXG4gMzE0OlxcdC8qXFxuIDMxNTpcXHQgKiBTZWVrcyB0aGUgaW9jdGwgaXRlcmF0b3IgdG8gdGhlIHNwZWNpZmllZCAwLWluZGV4ZWQgdGFnIHBvc2l0aW9uLCByZWFkcyBpdHNcXG4gMzE2OlxcdCAqIHByb2ZpbGluZyBkYXRhIGFuZCByZXR1cm5zIGl0IHRvIHVzZXJzcGFjZS5cXG4gMzE3OlxcdCAqL1xcbiAzMTg6XFx0c3RhdGljIGludCBhbGxvY2luZm9faW9jdGxfZ2V0X2F0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCBfX3VzZXIgKmFyZylcXG4gMzE5OlxcdHtcXG4gMzIwOlxcdFxcdHN0cnVjdCBhbGxvY2luZm9fcHJpdmF0ZSAqcHJpdjtcXG4gMzIxOlxcdFxcdHN0cnVjdCBjb2RldGFnICpjdDtcXG4gMzIyOlxcdFxcdHN0cnVjdCBhbGxvY2luZm9fZ2V0X2F0IHBhcmFtcyA9IHswfTtcXG4gMzIzOlxcdFxcdF9fdTY0IHNraXBfY291bnQ7XFxuIDMyNDpcXHRcXHRzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGNvdW50ZXJzO1xcbiAzMjU6XFx0XFx0Ym9vbCBmZXRjaGVkX2NvdW50ZXJzO1xcbiAzMjY6XFx0XFxuIDMyNzpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNnBhcmFtcywgYXJnLCBzaXplb2YocGFyYW1zKSkpXFxuIDMyODpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gMzI5OlxcdFxcbiAzMzA6XFx0XFx0aWYgKHBhcmFtcy5maWx0ZXIubWFzayBcXHUwMDI2IH5BTExPQ0lORk9fRklMVEVSX01BU0tTKVxcbiAzMzE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDMzMjpcXHRcXG4gMzMzOlxcdFxcdGlmICgocGFyYW1zLmZpbHRlci5tYXNrIFxcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01JTl9TSVpFKSBcXHUwMDI2XFx1MDAyNlxcbiAzMzQ6XFx0XFx0ICAgIChwYXJhbXMuZmlsdGVyLm1hc2sgXFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfTUFYX1NJWkUpIFxcdTAwMjZcXHUwMDI2XFxuIDMzNTpcXHRcXHQgICAgcGFyYW1zLmZpbHRlci5taW5fc2l6ZSBcXHUwMDNlIHBhcmFtcy5maWx0ZXIubWF4X3NpemUpXFxuIDMzNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzM3OlxcdFxcbiAzMzg6XFx0XFx0cHJpdiA9IG0tXFx1MDAzZXByaXZhdGU7XFxuIDMzOTpcXHRcXG4gMzQwOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZWlvY3RsX2xvY2spO1xcbiAzNDE6XFx0XFx0Y29kZXRhZ19sb2NrX21vZHVsZV9saXN0KGFsbG9jX3RhZ19jdHR5cGUpO1xcbiAzNDI6XFx0XFxuIDM0MzpcXHRcXHRpZiAocGFyYW1zLnBvcyBcXHUwMDNlPSBjb2RldGFnX2dldF9jb3VudChhbGxvY190YWdfY3R0eXBlKSkge1xcbiAzNDQ6XFx0XFx0XFx0Y29kZXRhZ191bmxvY2tfbW9kdWxlX2xpc3QoYWxsb2NfdGFnX2N0dHlwZSk7XFxuIDM0NTpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZWlvY3RsX2xvY2spO1xcbiAzNDY6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDM0NzpcXHRcXHR9XFxuIDM0ODpcXHRcXG4gMzQ5OlxcdFxcdHNraXBfY291bnQgPSBwYXJhbXMucG9zO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxODozNzo1OS4wODEzNDc0ODZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzE1MDUxMTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEZ1bmN0aW9uYWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCDigJMgaXQncyBhbHRlcmluZyB0aGUgY29kZSdzIGJlaGF2aW9yLiBJdCBsb29rcyBsaWtlIGl0J3MgYSByZWxhdGl2ZWx5IGZvY3VzZWQgY2hhbmdlOyBzcGVjaWZpY2FsbHksIGl0J3MgbW9kaWZ5aW5nIGEgZmllbGQgY2FsbGVkIGBpbmFjY3VyYXRlYCB3aXRoaW4gYSBgZmlsdGVyYCBzdHJ1Y3R1cmUuIEkgc2VlIHRoZSBvbGQgdmVyc2lvbiB1c2VkIGBmaWx0ZXItXHUwMDNlZmllbGRzLmluYWNjdXJhdGVgLCBhbmQgbm93IGl0J3MganVzdCBgZmlsdGVyLVx1MDAzZWluYWNjdXJhdGVgLiBJdCBhbHNvIG1lbnRpb25zIHRoYXQgdGhpcyBmaWVsZCBpcyBtb3Zpbmcgd2l0aGluIHRoZSBVQVBJIHN0cnVjdC4gSGFuZyBvbi4uLiBgc3RydWN0IGFsbG9jaW5mb19maWx0ZXJgIGlzIHBhcnQgb2YgVUFQST8gVGhhdCdzIGtleS4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgaW1wbGljYXRpb25zIGhlcmUuIEdvdHRhIHZlcmlmeSB0aGlzIGluIHRoZSBVQVBJIGhlYWRlci4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgYGluY2x1ZGUvdWFwaS9saW51eC9hbGxvY190YWcuaGAgdG8gc2VlIGV4YWN0bHkgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBVQVBJIHN0cnVjdHVyZS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB1c2VyIHNwYWNlIGludGVyYWN0cyB3aXRoIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwOTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE4OjM4OjAyLjc5NjQwMDc0M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgV0lUSCBMaW51eC1zeXNjYWxsLW5vdGUgKi9cXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBhbGxvY190YWcgSU9DVEwgQVBJIGRlZmluaXRpb25cXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMjYgR29vZ2xlLCBMTEMuICBBbGwgcmlnaHRzIHJlc2VydmVkLlxcbiAgIDY6XFx0ICpcXG4gICA3OlxcdCAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XFxuICAgODpcXHQgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhc1xcbiAgIDk6XFx0ICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uXFxuICAxMDpcXHQgKi9cXG4gIDExOlxcdFxcbiAgMTI6XFx0I2lmbmRlZiBfVUFQSV9BTExPQ19UQUdfSFxcbiAgMTM6XFx0I2RlZmluZSBfVUFQSV9BTExPQ19UQUdfSFxcbiAgMTQ6XFx0XFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gIDE2OlxcdFxcbiAgMTc6XFx0LypcXG4gIDE4OlxcdCAqIEZ1bmN0aW9uLCBmaWxlIGFuZCBtb2R1bGUgbmFtZXMgb2Z0ZW4gaGF2ZSB0aGUgc2FtZSBwcmVmaXhlcywgdGhlcmVmb3JlXFxuICAxOTpcXHQgKiB3aGVuIGZpbHRlcmluZyBieSB0aGVzZSBjcml0ZXJpYSwgd2UgY29tcGFyZSB0aGUgbGFzdCA2NCBjaGFyYWN0ZXJzIHRvXFxuICAyMDpcXHQgKiBtaW5pbWl6ZSB0aGUgY2hhbmNlcyBvZiBuYW1lIGNvbGxpc2lvbnNcXG4gIDIxOlxcdCAqL1xcbiAgMjI6XFx0I2RlZmluZSBBTExPQ0lORk9fU1RSX1NJWkVcXHQ2NFxcbiAgMjM6XFx0XFxuICAyNDpcXHRzdHJ1Y3QgYWxsb2NpbmZvX2NvbnRlbnRfaWQge1xcbiAgMjU6XFx0XFx0X191NjQgaWQ7XFxuICAyNjpcXHR9O1xcbiAgMjc6XFx0XFxuICAyODpcXHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZyB7XFxuICAyOTpcXHRcXHQvKiBMb25nZXIgbmFtZXMgYXJlIHRyaW1tZWQgKi9cXG4gIDMwOlxcdFxcdGNoYXIgbW9kbmFtZVtBTExPQ0lORk9fU1RSX1NJWkVdO1xcbiAgMzE6XFx0XFx0Y2hhciBmdW5jdGlvbltBTExPQ0lORk9fU1RSX1NJWkVdO1xcbiAgMzI6XFx0XFx0Y2hhciBmaWxlbmFtZVtBTExPQ0lORk9fU1RSX1NJWkVdO1xcbiAgMzM6XFx0XFx0X191NjQgbGluZW5vO1xcbiAgMzQ6XFx0fTtcXG4gIDM1OlxcdFxcbiAgMzY6XFx0LyogVGhlIGFsaWdubWVudCBlbnN1cmVzIDMyLWJpdCBjb21wYXRpYmxlIGludGVyZmFjZXMgYXJlIG5vdCBicm9rZW4gKi9cXG4gIDM3OlxcdHN0cnVjdCBhbGxvY2luZm9fY291bnRlciB7XFxuICAzODpcXHRcXHRfX3U2NCBieXRlcztcXG4gIDM5OlxcdFxcdF9fdTY0IGNhbGxzO1xcbiAgNDA6XFx0XFx0X191OCBhY2N1cmF0ZTtcXG4gIDQxOlxcdH0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpO1xcbiAgNDI6XFx0XFxuICA0MzpcXHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhIHtcXG4gIDQ0OlxcdFxcdHN0cnVjdCBhbGxvY2luZm9fdGFnIHRhZztcXG4gIDQ1OlxcdFxcdHN0cnVjdCBhbGxvY2luZm9fY291bnRlciBjb3VudGVyO1xcbiAgNDY6XFx0fTtcXG4gIDQ3OlxcdFxcbiAgNDg6XFx0ZW51bSB7XFxuICA0OTpcXHRcXHRBTExPQ0lORk9fRklMVEVSX01PRE5BTUUsXFxuICA1MDpcXHRcXHRBTExPQ0lORk9fRklMVEVSX0ZVTkNUSU9OLFxcbiAgNTE6XFx0XFx0QUxMT0NJTkZPX0ZJTFRFUl9GSUxFTkFNRSxcXG4gIDUyOlxcdFxcdEFMTE9DSU5GT19GSUxURVJfTElORU5PLFxcbiAgNTM6XFx0XFx0QUxMT0NJTkZPX0ZJTFRFUl9JTkFDQ1VSQVRFLFxcbiAgNTQ6XFx0XFx0QUxMT0NJTkZPX0ZJTFRFUl9NSU5fU0laRSxcXG4gIDU1OlxcdFxcdEFMTE9DSU5GT19GSUxURVJfTUFYX1NJWkUsXFxuICA1NjpcXHRcXHRfX0FMTE9DSU5GT19GSUxURVJfTEFTVCA9IEFMTE9DSU5GT19GSUxURVJfTUFYX1NJWkVcXG4gIDU3OlxcdH07XFxuICA1ODpcXHRcXG4gIDU5OlxcdCNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01PRE5BTUVcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyBBTExPQ0lORk9fRklMVEVSX01PRE5BTUUpXFxuICA2MDpcXHQjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19GVU5DVElPTlxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfRlVOQ1RJT04pXFxuICA2MTpcXHQjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19GSUxFTkFNRVxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfRklMRU5BTUUpXFxuICA2MjpcXHQjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19MSU5FTk9cXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyBBTExPQ0lORk9fRklMVEVSX0xJTkVOTylcXG4gIDYzOlxcdCNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0lOQUNDVVJBVEVcXHQoMSBcXHUwMDNjXFx1MDAzYyBBTExPQ0lORk9fRklMVEVSX0lOQUNDVVJBVEUpXFxuICA2NDpcXHQjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRVxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfTUlOX1NJWkUpXFxuICA2NTpcXHQjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19NQVhfU0laRVxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfTUFYX1NJWkUpXFxuICA2NjpcXHRcXG4gIDY3OlxcdCNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLUyBcXFxcXFxuICA2ODpcXHRcXHQoKDEgXFx1MDAzY1xcdTAwM2MgKF9fQUxMT0NJTkZPX0ZJTFRFUl9MQVNUICsgMSkpIC0gMSlcXG4gIDY5OlxcdFxcbiAgNzA6XFx0c3RydWN0IGFsbG9jaW5mb19maWx0ZXIge1xcbiAgNzE6XFx0XFx0X191NjQgbWFzazsgLyogYml0bWFzayBvZiB0aGUgZmlsdGVyIGZpZWxkcyB1c2VkICovXFxuICA3MjpcXHRcXHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZyBmaWVsZHM7XFxuICA3MzpcXHRcXHRfX3U2NCBtaW5fc2l6ZTtcXG4gIDc0OlxcdFxcdF9fdTY0IG1heF9zaXplO1xcbiAgNzU6XFx0XFx0LyogZmlsdGVyIGNyaXRlcmlhIG9ubHk7IHNlZSBhbGxvY2luZm9fY291bnRlci5hY2N1cmF0ZSBmb3IgYWN0dWFsIGFjY3VyYWN5ICovXFxuICA3NjpcXHRcXHRfX3U2NCBpbmFjY3VyYXRlO1xcbiAgNzc6XFx0fTtcXG4gIDc4OlxcdFxcbiAgNzk6XFx0c3RydWN0IGFsbG9jaW5mb19nZXRfYXQge1xcbiAgODA6XFx0XFx0LyogaW5wdXRzICovXFxuICA4MTpcXHRcXHRfX3U2NCBwb3M7XFxuICA4MjpcXHRcXHRzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciBmaWx0ZXI7XFxuICA4MzpcXHRcXHQvKiBvdXRwdXQgKi9cXG4gIDg0OlxcdFxcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEgZGF0YTtcXG4gIDg1OlxcdH07XFxuICA4NjpcXHRcXG4gIDg3OlxcdCNkZWZpbmUgX0FMTE9DSU5GT19JT0NfQ09OVEVOVF9JRFxcdDBcXG4gIDg4OlxcdCNkZWZpbmUgX0FMTE9DSU5GT19JT0NfR0VUX0FUXFx0XFx0MVxcbiAgODk6XFx0I2RlZmluZSBfQUxMT0NJTkZPX0lPQ19HRVRfTkVYVFxcdFxcdDJcXG4gIDkwOlxcdFxcbiAgOTE6XFx0I2RlZmluZSBBTExPQ0lORk9fSU9DX0JBU0VcXHRcXHQweEE2XFxuICA5MjpcXHQjZGVmaW5lIEFMTE9DSU5GT19JT0NfQ09OVEVOVF9JRFxcdF9JT1IoQUxMT0NJTkZPX0lPQ19CQVNFLCBfQUxMT0NJTkZPX0lPQ19DT05URU5UX0lELFxcdFxcXFxcXG4gIDkzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGFsbG9jaW5mb19jb250ZW50X2lkKVxcbiAgOTQ6XFx0I2RlZmluZSBBTExPQ0lORk9fSU9DX0dFVF9BVFxcdFxcdF9JT1dSKEFMTE9DSU5GT19JT0NfQkFTRSwgX0FMTE9DSU5GT19JT0NfR0VUX0FULFxcdFxcXFxcXG4gIDk1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBhbGxvY2luZm9fZ2V0X2F0KVxcbiAgOTY6XFx0I2RlZmluZSBBTExPQ0lORk9fSU9DX0dFVF9ORVhUXFx0XFx0X0lPUihBTExPQ0lORk9fSU9DX0JBU0UsIF9BTExPQ0lORk9fSU9DX0dFVF9ORVhULFxcdFxcXFxcXG4gIDk3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSlcXG4gIDk4OlxcdFxcbiAgOTk6XFx0I2VuZGlmIC8qIF9VQVBJX0FMTE9DX1RBR19IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE4OjM4OjAyLjc5NjUwMjY5M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTg3MTE0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgYWxsb2NpbmZvX3RhZ2AgU3RydWN0dXJlIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBVQVBJIGNoYW5nZSwgc3BlY2lmaWNhbGx5IGFsdGVyaW5nIHRoZSBgYWxsb2NpbmZvX3RhZy5oYCBoZWFkZXIgZmlsZS4gSXQncyBtb3ZpbmcgdGhlIGBpbmFjY3VyYXRlYCBmaWVsZCBmcm9tIHRoZSBgc3RydWN0IGFsbG9jaW5mb190YWdgIHN0cnVjdHVyZSBpbnRvIHRoZSBgc3RydWN0IGFsbG9jaW5mb19maWx0ZXJgIHN0cnVjdHVyZS4gSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhpcyB3aWxsIGltcGFjdCB0aGUgVUFQSSBjb250cmFjdCwgd2hpY2ggbWVhbnMgZXhpc3RpbmcgdXNlcnMgb2YgdGhlc2Ugc3RydWN0dXJlcyBjb3VsZCBicmVhayBpZiB0aGV5IGhhdmVuJ3QgYmVlbiB1cGRhdGVkLiBBIGNyaXRpY2FsIHBvaW50IHRvIGNvbnNpZGVyIGlzIGhvdyBpdCBhZmZlY3RzIGBhbGxvY2luZm9faW9jdGxfZ2V0X2F0YCwgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uIHVzZXMgdGhlIGBtYXRjaGVzX2ZpbHRlcmAgZnVuY3Rpb24uIFdlIG5lZWQgdG8gbWV0aWN1bG91c2x5IHRyYWNlIHdoZXJlIGFuZCBob3cgYG1hdGNoZXNfZmlsdGVyYCBpcyB1c2VkIHdpdGggdGhlIHN0cnVjdCBtb2RpZmljYXRpb25zLiBJIGtub3cgdGhhdCBpb2N0bCBgQUxMT0NJTkZPX0lPQ19HRVRfQVRgIGlzIGhhbmRsZWQgaW4gYG1tL2FsbG9jX3RhZy5jYCwgYnV0IGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgYG1hdGNoZXNfZmlsdGVyYCBjYWxscywgbGV0IG1lIGZpcnN0IHZlcmlmeSBob3cgYGFsbG9jaW5mb19pb2N0bGAgaXRzZWxmIGlzIHJlZ2lzdGVyZWQuIFRoaXMgZ2l2ZXMgbWUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg4MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE4OjM4OjA3LjAxNTIxNjk4NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk1NTM2ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NpbmZvX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2FsbG9jX3RhZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2FsbG9jX3RhZy5jPTIyND1zdGF0aWMgdm9pZCBhbGxvY2luZm9fdG9fcGFyYW1zKHN0cnVjdCBjb2RldGFnICpjdCxcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTI0My0gKi9cXG5tbS9hbGxvY190YWcuYzoyNDQ6c3RhdGljIGludCBhbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkIF9fdXNlciAqYXJnKVxcbm1tL2FsbG9jX3RhZy5jLTI0NS17XFxuLS1cXG5tbS9hbGxvY190YWcuYz0yNjE9c3RhdGljIGJvb2wgbWF0Y2hlc19maWx0ZXIoc3RydWN0IGNvZGV0YWcgKmN0LCBzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciAqZmlsdGVyLFxcbi0tXFxubW0vYWxsb2NfdGFnLmMtMzE3LSAqL1xcbm1tL2FsbG9jX3RhZy5jOjMxODpzdGF0aWMgaW50IGFsbG9jaW5mb19pb2N0bF9nZXRfYXQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkIF9fdXNlciAqYXJnKVxcbm1tL2FsbG9jX3RhZy5jLTMxOS17XFxuLS1cXG5tbS9hbGxvY190YWcuYy0zOTItICovXFxubW0vYWxsb2NfdGFnLmM6MzkzOnN0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCBfX3VzZXIgKmFyZylcXG5tbS9hbGxvY190YWcuYy0zOTQte1xcbi0tXFxubW0vYWxsb2NfdGFnLmMtNDQzLSAqL1xcbm1tL2FsbG9jX3RhZy5jOjQ0NDpzdGF0aWMgbG9uZyBhbGxvY2luZm9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxubW0vYWxsb2NfdGFnLmMtNDQ1LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIF9fYXJnKVxcbi0tXFxubW0vYWxsb2NfdGFnLmMtNDUxLVxcdGNhc2UgQUxMT0NJTkZPX0lPQ19DT05URU5UX0lEOlxcbm1tL2FsbG9jX3RhZy5jOjQ1MjpcXHRcXHRyZXQgPSBhbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWQoZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBhcmcpO1xcbm1tL2FsbG9jX3RhZy5jLTQ1My1cXHRcXHRicmVhaztcXG5tbS9hbGxvY190YWcuYy00NTQtXFx0Y2FzZSBBTExPQ0lORk9fSU9DX0dFVF9BVDpcXG5tbS9hbGxvY190YWcuYzo0NTU6XFx0XFx0cmV0ID0gYWxsb2NpbmZvX2lvY3RsX2dldF9hdChmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEsIGFyZyk7XFxubW0vYWxsb2NfdGFnLmMtNDU2LVxcdFxcdGJyZWFrO1xcbm1tL2FsbG9jX3RhZy5jLTQ1Ny1cXHRjYXNlIEFMTE9DSU5GT19JT0NfR0VUX05FWFQ6XFxubW0vYWxsb2NfdGFnLmM6NDU4OlxcdFxcdHJldCA9IGFsbG9jaW5mb19pb2N0bF9nZXRfbmV4dChmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEsIGFyZyk7XFxubW0vYWxsb2NfdGFnLmMtNDU5LVxcdFxcdGJyZWFrO1xcbi0tXFxubW0vYWxsb2NfdGFnLmM9NDY5PXN0YXRpYyBsb25nIGFsbG9jaW5mb19jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5tbS9hbGxvY190YWcuYy00NzEte1xcbm1tL2FsbG9jX3RhZy5jOjQ3MjpcXHRyZXR1cm4gYWxsb2NpbmZvX2lvY3RsKGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpKTtcXG5tbS9hbGxvY190YWcuYy00NzMtfVxcbi0tXFxubW0vYWxsb2NfdGFnLmM9NDc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgYWxsb2NpbmZvX3Byb2Nfb3BzID0ge1xcbi0tXFxubW0vYWxsb2NfdGFnLmMtNDgwLVxcdC5wcm9jX3JlbGVhc2VcXHRcXHQ9IGFsbG9jaW5mb19yZWxlYXNlLFxcbm1tL2FsbG9jX3RhZy5jOjQ4MTpcXHQucHJvY19pb2N0bFxcdFxcdD0gYWxsb2NpbmZvX2lvY3RsLFxcbm1tL2FsbG9jX3RhZy5jLTQ4Mi0jaWZkZWYgQ09ORklHX0NPTVBBVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxODozODowNy4wNzQ3Nzc2ODNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwNDE3NzA3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIGAvcHJvYy9hbGxvY2luZm9gKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYC9wcm9jL2FsbG9jaW5mb2AuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYGlvY3RsYCBhcyB0aGUga2V5IHBvaW50IG9mIGludGVyYWN0aW9uIGZvciB0aGlzLiBXZSdyZSBvYnZpb3VzbHkgdHJ5aW5nIHRvIGFjY2VzcyBzb21lIG1lbW9yeSBhbGxvY2F0aW9uIHN0YXRpc3RpY3Mgb3IgcG90ZW50aWFsbHkgbWFuaXB1bGF0ZSBob3cgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IGhhbmRsZXMgdGFncyBvciByZWxhdGVkIGluZm9ybWF0aW9uLCBsaWtlbHkgZm9yIHNvbWUgZGVidWdnaW5nIG9yIHByb2ZpbGluZyBwdXJwb3NlLiBXaGVyZSB3b3VsZCB0aGUgaW1wbGVtZW50YXRpb24gbGl2ZT8gVGhlIGtlcm5lbCdzIGAvcHJvY2AgZmlsZXN5c3RlbSBoYW5kbGVycyBhcmUgb2Z0ZW4gZm91bmQgaW4gdGhlIHJlbGV2YW50IHN1YnN5c3RlbSdzIGNvZGUsIHNvIGxldCdzIHN0YXJ0IHdpdGggYG1tL2FsbG9jX3RhZy5jYC4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgYC9wcm9jL2FsbG9jaW5mb2AsIGBhbGxvY2luZm9fcHJvY19vcHNgIGlzIHRoZSBsaWtlbHkgY2FuZGlkYXRlIGZvciB0aGUgZmlsZSBvcGVyYXRpb25zIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBgaW9jdGxgIGhhbmRsZXIuIEl0IHdvdWxkIGJlIGEgc3RhcnRpbmcgcG9pbnQgdG8gc2VlIGhvdyB0aGUgaW9jdGwgY2FsbHMgYXJlIGRlZmluZWQgYW5kIHdoYXQgcGFyYW1ldGVycyBpdCBhY2NlcHRzLiBGcm9tIHRoZXJlIEkgY2FuIGV4cGxvcmUgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBsb2dpYyBmbG93IHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gaW5mb3JtYXRpb24gYW5kIGhvdyB0aGUgcHJvY2VzcyBpbnRlcmFjdHMgd2l0aCB0aGF0IGRhdGEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxODozODoxMC44Nzg5NTcwNzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2FsbG9jX3RhZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ3MDpcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGFyZylcXG4gNDcxOlxcdHtcXG4gNDcyOlxcdFxcdHJldHVybiBhbGxvY2luZm9faW9jdGwoZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZyljb21wYXRfcHRyKGFyZykpO1xcbiA0NzM6XFx0fVxcbiA0NzQ6XFx0I2VuZGlmXFxuIDQ3NTpcXHRcXG4gNDc2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgYWxsb2NpbmZvX3Byb2Nfb3BzID0ge1xcbiA0Nzc6XFx0XFx0LnByb2Nfb3BlblxcdFxcdD0gYWxsb2NpbmZvX29wZW4sXFxuIDQ3ODpcXHRcXHQucHJvY19yZWFkX2l0ZXJcXHRcXHQ9IHNlcV9yZWFkX2l0ZXIsXFxuIDQ3OTpcXHRcXHQucHJvY19sc2Vla1xcdFxcdD0gc2VxX2xzZWVrLFxcbiA0ODA6XFx0XFx0LnByb2NfcmVsZWFzZVxcdFxcdD0gYWxsb2NpbmZvX3JlbGVhc2UsXFxuIDQ4MTpcXHRcXHQucHJvY19pb2N0bFxcdFxcdD0gYWxsb2NpbmZvX2lvY3RsLFxcbiA0ODI6XFx0I2lmZGVmIENPTkZJR19DT01QQVRcXG4gNDgzOlxcdFxcdC5wcm9jX2NvbXBhdF9pb2N0bFxcdD0gYWxsb2NpbmZvX2NvbXBhdF9pb2N0bCxcXG4gNDg0OlxcdCNlbmRpZlxcbiA0ODU6XFx0fTtcXG4gNDg2OlxcdFxcbiA0ODc6XFx0c2l6ZV90IGFsbG9jX3RhZ190b3BfdXNlcnMoc3RydWN0IGNvZGV0YWdfYnl0ZXMgKnRhZ3MsIHNpemVfdCBjb3VudCwgYm9vbCBjYW5fc2xlZXApXFxuIDQ4ODpcXHR7XFxuIDQ4OTpcXHRcXHRzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBpdGVyO1xcbiA0OTA6XFx0XFx0c3RydWN0IGNvZGV0YWcgKmN0O1xcbiA0OTE6XFx0XFx0c3RydWN0IGNvZGV0YWdfYnl0ZXMgbjtcXG4gNDkyOlxcdFxcdHVuc2lnbmVkIGludCBpLCBuciA9IDA7XFxuIDQ5MzpcXHRcXG4gNDk0OlxcdFxcdGlmIChJU19FUlJfT1JfTlVMTChhbGxvY190YWdfY3R0eXBlKSlcXG4gNDk1OlxcdFxcdFxcdHJldHVybiAwO1xcbiA0OTY6XFx0XFxuIDQ5NzpcXHRcXHRpZiAoY2FuX3NsZWVwKVxcbiA0OTg6XFx0XFx0XFx0Y29kZXRhZ19sb2NrX21vZHVsZV9saXN0KGFsbG9jX3RhZ19jdHR5cGUpO1xcbiA0OTk6XFx0XFx0ZWxzZSBpZiAoIWNvZGV0YWdfdHJ5bG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKSlcXG4gNTAwOlxcdFxcdFxcdHJldHVybiAwO1xcbiA1MDE6XFx0XFxuIDUwMjpcXHRcXHRpdGVyID0gY29kZXRhZ19nZXRfY3RfaXRlcihhbGxvY190YWdfY3R0eXBlKTtcXG4gNTAzOlxcdFxcdHdoaWxlICgoY3QgPSBjb2RldGFnX25leHRfY3QoXFx1MDAyNml0ZXIpKSkge1xcbiA1MDQ6XFx0XFx0XFx0c3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyBjb3VudGVyID0gYWxsb2NfdGFnX3JlYWQoY3RfdG9fYWxsb2NfdGFnKGN0KSk7XFxuIDUwNTpcXHRcXG4gNTA2OlxcdFxcdFxcdG4uY3RcXHQ9IGN0O1xcbiA1MDc6XFx0XFx0XFx0bi5ieXRlcyA9IGNvdW50ZXIuYnl0ZXM7XFxuIDUwODpcXHRcXG4gNTA5OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucjsgaSsrKVxcbiA1MTA6XFx0XFx0XFx0XFx0aWYgKG4uYnl0ZXMgXFx1MDAzZSB0YWdzW2ldLmJ5dGVzKVxcbiA1MTE6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDUxMjpcXHRcXG4gNTEzOlxcdFxcdFxcdGlmIChpIFxcdTAwM2MgY291bnQpIHtcXG4gNTE0OlxcdFxcdFxcdFxcdG5yIC09IG5yID09IGNvdW50O1xcbiA1MTU6XFx0XFx0XFx0XFx0bWVtbW92ZShcXHUwMDI2dGFnc1tpICsgMV0sXFxuIDUxNjpcXHRcXHRcXHRcXHRcXHRcXHUwMDI2dGFnc1tpXSxcXG4gNTE3OlxcdFxcdFxcdFxcdFxcdHNpemVvZih0YWdzWzBdKSAqIChuciAtIGkpKTtcXG4gNTE4OlxcdFxcdFxcdFxcdG5yKys7XFxuIDUxOTpcXHRcXHRcXHRcXHR0YWdzW2ldID0gbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTg6Mzg6MTAuODc5MDkyMDg3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2OTIyNzEwOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBgL3Byb2MvYWxsb2NpbmZvYCdzIGBpb2N0bGAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBpb2N0bGAgcm91dGluZSwgYW5kIGl0J3MgcGFydCBvZiB0aGUgYC9wcm9jL2FsbG9jaW5mb2AgaW50ZXJmYWNlLiBUaGF0J3MgZGVmaW5pdGVseSB3aXRoaW4gY29yZSBrZXJuZWwgbG9naWMsIHNwZWNpZmljYWxseSB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIG1lY2hhbmlzbXMuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXp6aW5nPyBBYnNvbHV0ZWx5LCBpdCBsb29rcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUuIFRoZSBmYWN0IHRoYXQgaXQgbWFuaXB1bGF0ZXMgdGhlIFVBUEkgc3RydWN0IGxheW91dCBhbmQgdGhlIGlvY3RsIGhhbmRsaW5nIGl0c2VsZiBpcyBhIGtleSBwb2ludC4gVGhpcyBzdWdnZXN0cyBwb3RlbnRpYWwgZm9yIG1lbW9yeSBjb3JydXB0aW9uIG9yIG90aGVyIGlzc3VlcyBpZiBtYWxmb3JtZWQgZGF0YSBpcyBwcm92aWRlZC4gTGV0J3Mgc2VlLi4uSSBzZWUgdGhhdCBgQUxMT0NJTkZPX0lPQ19HRVRfQVRgIHVzZXMgYG1hdGNoZXNfZmlsdGVyYC4gVGltZSB0byBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBgQ09ORklHX2Agb3B0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCB0byBhbGxvdyB0aGlzIHRvIGV2ZW4gYmUgZXhwb3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA2MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTg6Mzg6MTUuNTcxMzY2NzM0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODIyMDYzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY2luZm9fcHJvY19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vYWxsb2NfdGFnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vYWxsb2NfdGFnLmM9NDY5PXN0YXRpYyBsb25nIGFsbG9jaW5mb19jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5tbS9hbGxvY190YWcuYy00NzUtXFxubW0vYWxsb2NfdGFnLmM6NDc2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgYWxsb2NpbmZvX3Byb2Nfb3BzID0ge1xcbm1tL2FsbG9jX3RhZy5jLTQ3Ny1cXHQucHJvY19vcGVuXFx0XFx0PSBhbGxvY2luZm9fb3BlbixcXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTEzMTY9c3RhdGljIGludCBfX2luaXQgYWxsb2NfdGFnX2luaXQodm9pZClcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTEzMzctXFxubW0vYWxsb2NfdGFnLmM6MTMzODpcXHRpZiAoIXByb2NfY3JlYXRlKEFMTE9DSU5GT19GSUxFX05BTUUsIDA0MDAsIE5VTEwsIFxcdTAwMjZhbGxvY2luZm9fcHJvY19vcHMpKSB7XFxubW0vYWxsb2NfdGFnLmMtMTMzOS1cXHRcXHRwcl9lcnIoXFxcIkZhaWxlZCB0byBjcmVhdGUgJXMgZmlsZVxcXFxuXFxcIiwgQUxMT0NJTkZPX0ZJTEVfTkFNRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE4OjM4OjE1LjYxOTU5MjExM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTg4MTcyNzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRmluZGluZyB0aGUgS2NvbmZpZyBPcHRpb24gZm9yIGBtbS9hbGxvY190YWcuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgS2NvbmZpZyBvcHRpb24gdGhhdCBjb250cm9scyB0aGUgYnVpbGQgYW5kIGluY2x1c2lvbiBvZiBgbW0vYWxsb2NfdGFnLmNgLiBUaGlzIGlzbid0IGEgcGFydGljdWxhcmx5IGNvbXBsZXggdGFzaywgYnV0IEkgbmVlZCB0byBhcHByb2FjaCBpdCBtZXRob2RpY2FsbHkuIEkgY291bGQganVzdCBncmVwIHRocm91Z2ggdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGl0LCBidXQgdGhhdCdzIGEgYnJ1dGUtZm9yY2UgbWV0aG9kLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIHN5c3RlbSwgdGhlcmUncyBsaWtlbHkgYSBtb3JlIGVsZWdhbnQgYW5kIGVmZmljaWVudCB3YXkgdG8gYWNoaWV2ZSB0aGlzLCBhdm9pZGluZyBmYWxzZSBwb3NpdGl2ZXMuXG5cbkZpcnN0LCBJJ2xsIGNvbnNpZGVyIGhvdyB0aGlzIGZpbGUgZml0cyBpbnRvIHRoZSBsYXJnZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBgbW0vYWxsb2NfdGFnLmNgIGlzIHByZXR0eSBleHBsaWNpdC4gVGhlIGZpbGVuYW1lIGl0c2VsZiBsaWtlbHkgZ2l2ZXMgYSBzdHJvbmcgaGludC4gSSB3b3VsZCBzdGFydCBieSBleHBsb3JpbmcgS2NvbmZpZyBmaWxlcyB3aXRoaW4gdGhlIGBtbWAgZGlyZWN0b3J5LiBJJ2xsIGZvY3VzIG9uIHRoZSBgS2NvbmZpZ2AgZmlsZXMgbG9jYXRlZCBjbG9zZXN0IHRvIHRoZSBmaWxlIGl0c2VsZiwgdGhlbiBleHBhbmRpbmcgdGhlIHNlYXJjaCBpZiBuZWVkZWQsIHRvIHVuZGVyc3RhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSBhIEtjb25maWcgb3B0aW9uIHRoYXQgZGlyZWN0bHkgcmVmZXJlbmNlcyBvciBjb250cm9scyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgc3BlY2lmaWMgZmlsZSBvciwgcGVyaGFwcywgYSBsYXJnZXIgZmVhdHVyZSBpdCdzIHBhcnQgb2YuXG5cbklmIEknbSB1bmFibGUgdG8gZmluZCBhIGRlZmluaXRpdmUgS2NvbmZpZyBvcHRpb24sIEknbGwgdGhlbiBtb3ZlIGludG8gY3Jvc3MtcmVmZXJlbmNpbmcuIEkgY291bGQgbGV2ZXJhZ2UgYSBzeW1ib2wgc2VhcmNoIHRvIGZpbmQgYWxsIHJlZmVyZW5jZXMgdG8gYGFsbG9jX3RhZ2AgKG9yIHdoYXRldmVyIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgaXMpLiBJJ2xsIGNyb3NzLXJlZmVyZW5jZSB3aGF0IG9wdGlvbnMgcmVmZXJlbmNlIHRoZSBzeW1ib2wuIFRoaXMgc2hvdWxkIGxlYWQgbWUgdG8gdGhlIG1vc3QgZGlyZWN0IGNvbnRyb2wgcG9pbnQgZm9yIHRoZSBmZWF0dXJlLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gYWNjb3VudCBmb3IgcG90ZW50aWFsIGluZGlyZWN0IGRlcGVuZGVuY2llcyDigJMgcGVyaGFwcyB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgb25seSBlbmFibGVkIGFzIHBhcnQgb2YgYSBsYXJnZXIgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZSBzZXQuXG5cblVsdGltYXRlbHksIEkgZXhwZWN0IHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbiBhbmQgdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLCBhbGxvd2luZyBtZSB0byB0YWlsb3IgbXkga2VybmVsIGNvbmZpZ3VyYXRpb24gYWNjb3JkaW5nbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1OTEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxODozODoyMC42MDc3Njc5OTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjUxNjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3RhZy5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTE0OD1vYmotJChDT05GSUdfTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUKSArPSB0ZXN0cy9sYXp5X21tdV9tb2RlX2t1bml0Lm9cXG5tbS9NYWtlZmlsZToxNDk6b2JqLSQoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcpICs9IGFsbG9jX3RhZy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE4OjM4OjIwLjY1MTAyNzQ3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNTI2NzQzODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IEFsbG9jYXRpb24gUHJvZmlsaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aGUga2V5IGhlcmUgc2VlbXMgdG8gYmUgYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgY29uZmlndXJlZCBhbmQgd2hlcmUgaXQncyBkZWZpbmVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIExldCBtZSBzZWUuLi4gSSdtIHByZXR0eSBzdXJlIEknbGwgZmluZCBpdCBkZWZpbmVkIGluIHNvbWV0aGluZyBsaWtlIGBsaWIvS2NvbmZpZy5kZWJ1Z2AsIG9yIG1heWJlIGBrZXJuZWwvS2NvbmZpZy5kZWJ1Z2AsIG9yIHBvdGVudGlhbGx5IHNvbWV3aGVyZSBlbHNlIHdoZXJlIGRlYnVnZ2luZyBmZWF0dXJlcyBhcmUgZGVzY3JpYmVkLiBMZXQgbWUgZ28gY2hlY2sgdGhhdCBvdXQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTAyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTg6Mzg6MjUuODAzNzA0Mzc0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQwOTIzNjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnLmRlYnVnPTMxMT1jb25maWcgUEVSX1ZNQV9MT0NLX1NUQVRTXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTMyMy1cXG5tbS9LY29uZmlnLmRlYnVnOjMyNDpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1xcbm1tL0tjb25maWcuZGVidWctMzI1LVxcdGJvb2wgXFxcIkVuYWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTMzNy1cXG5tbS9LY29uZmlnLmRlYnVnOjMzODpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcXG5tbS9LY29uZmlnLmRlYnVnLTMzOS1cXHRib29sIFxcXCJFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTM0Mi1cXG5tbS9LY29uZmlnLmRlYnVnOjM0Mzpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xcbm1tL0tjb25maWcuZGVidWctMzQ0LVxcdGJvb2wgXFxcIk1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGVyIGRlYnVnZ2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTg6Mzg6MjcuNDQ0NjM2NDA0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTY0MzUyMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGVidWdnaW5nIEtjb25maWcgaW4gbW0qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBCYXNlZCBvbiB3aGF0IEknbSBzZWVpbmcsIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gbG9vayBpbnRvIHRoZSBkZWJ1ZyBLY29uZmlnIHNldHRpbmdzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbW1gIHN1YnN5c3RlbS4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gdGhlIGZpbGUgYG1tL0tjb25maWcuZGVidWdgLCBhbmQgSSB0aGluayBsaW5lIDMyNCBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgc3BvdCBmb3IgdGhlIHR5cGUgb2YgY29uZmlndXJhdGlvbiBJJ20gc3VzcGVjdGluZyBpcyBjYXVzaW5nIHRoZSBiZWhhdmlvciBJJ20gd2l0bmVzc2luZy4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxODozODozMC43NDEwNzQyMDRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTU6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzdWNjZXNzLCByZXRyeSBhbmQgZmFpbHVyZSBjb3VudGVycyBvZiBwYWdlXFxuIDMxNjpcXHRcXHQgIGZhdWx0cyBoYW5kbGVkIHVuZGVyIHByb3RlY3Rpb24gb2YgcGVyLXZtYSBsb2Nrcy4gV2hlbiBlbmFibGVkLCB0aGVcXG4gMzE3OlxcdFxcdCAgY291bnRlcnMgYXJlIGV4cG9zZWQgaW4gL3Byb2Mvdm1zdGF0LiBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWZ1bCBmb3JcXG4gMzE4OlxcdFxcdCAga2VybmVsIGRldmVsb3BlcnMgdG8gZXZhbHVhdGUgZWZmZWN0aXZlbmVzcyBvZiBwZXItdm1hIGxvY2tzIGFuZCB0b1xcbiAzMTk6XFx0XFx0ICBpZGVudGlmeSBwYXRob2xvZ2ljYWwgY2FzZXMuIENvdW50aW5nIHRoZXNlIGV2ZW50cyBpbnRyb2R1Y2VzIGEgc21hbGxcXG4gMzIwOlxcdFxcdCAgb3ZlcmhlYWQgaW4gdGhlIHBhZ2UgZmF1bHQgcGF0aC5cXG4gMzIxOlxcdFxcbiAzMjI6XFx0XFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXFxuIDMyMzpcXHRcXG4gMzI0OlxcdGNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HXFxuIDMyNTpcXHRcXHRib29sIFxcXCJFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXFxcIlxcbiAzMjY6XFx0XFx0ZGVmYXVsdCBuXFxuIDMyNzpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbiAzMjg6XFx0XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxuIDMyOTpcXHRcXHRkZXBlbmRzIG9uICFERUJVR19GT1JDRV9XRUFLX1BFUl9DUFVcXG4gMzMwOlxcdFxcdHNlbGVjdCBDT0RFX1RBR0dJTkdcXG4gMzMxOlxcdFxcdHNlbGVjdCBQQUdFX0VYVEVOU0lPTlxcbiAzMzI6XFx0XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbiAzMzM6XFx0XFx0aGVscFxcbiAzMzQ6XFx0XFx0ICBUcmFjayBhbGxvY2F0aW9uIHNvdXJjZSBjb2RlIGFuZCByZWNvcmQgdG90YWwgYWxsb2NhdGlvbiBzaXplXFxuIDMzNTpcXHRcXHQgIGluaXRpYXRlZCBhdCB0aGF0IGNvZGUgbG9jYXRpb24uIFRoZSBtZWNoYW5pc20gY2FuIGJlIHVzZWQgdG8gdHJhY2tcXG4gMzM2OlxcdFxcdCAgbWVtb3J5IGxlYWtzIHdpdGggYSBsb3cgcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSBpbXBhY3QuXFxuIDMzNzpcXHRcXG4gMzM4OlxcdGNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxcbiAzMzk6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBieSBkZWZhdWx0XFxcIlxcbiAzNDA6XFx0XFx0ZGVmYXVsdCB5XFxuIDM0MTpcXHRcXHRkZXBlbmRzIG9uIE1FTV9BTExPQ19QUk9GSUxJTkdcXG4gMzQyOlxcdFxcbiAzNDM6XFx0Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcXG4gMzQ0OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGVyIGRlYnVnZ2luZ1xcXCJcXG4gMzQ1OlxcdFxcdGRlZmF1bHQgblxcbiAzNDY6XFx0XFx0ZGVwZW5kcyBvbiBNRU1fQUxMT0NfUFJPRklMSU5HXFxuIDM0NzpcXHRcXHRzZWxlY3QgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcXG4gMzQ4OlxcdFxcdGhlbHBcXG4gMzQ5OlxcdFxcdCAgQWRkcyB3YXJuaW5ncyB3aXRoIGhlbHBmdWwgZXJyb3IgbWVzc2FnZXMgZm9yIG1lbW9yeSBhbGxvY2F0aW9uXFxuIDM1MDpcXHRcXHQgIHByb2ZpbGluZy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTg6Mzg6MzAuNzQxMTUxMTY0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4Mzg5ODAzMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBhbGxvY2luZm9faW9jdGxgIEZ1bmN0aW9uIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gYE1FTV9BTExPQ19QUk9GSUxJTkdgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiB0byBjb25zaWRlciBoZXJlLiBSaWdodCwgbGV0J3MgbG9vayBhdCB0aGUgaW9jdGwgZnVuY3Rpb25zIOKAkyB3ZSd2ZSBnb3QgYGFsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZGAsIGBhbGxvY2luZm9faW9jdGxfZ2V0X2F0YCwgYGFsbG9jaW5mb19pb2N0bF9nZXRfbmV4dGAsIGBhbGxvY2luZm9faW9jdGxgLCBhbmQgYGFsbG9jaW5mb19jb21wYXRfaW9jdGxgLiBHaXZlbiB0aGUgbGFuZHNjYXBlLCBgYWxsb2NpbmZvX2lvY3RsYCBpcyB0aGUgcHJpbWFyeSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gcXVpY2tseSB2ZXJpZnkgd2hldGhlciBgYWxsb2NpbmZvX2lvY3RsYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gWWVzLCBpdCBpczogYHN0YXRpYyBsb25nIGFsbG9jaW5mb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBfX2FyZylgLiBXYWl0IGEgbWludXRlLCBzdGF0aWMgZnVuY3Rpb25zIGFyZSAqb2Z0ZW4qIGlubGluZWQsIGJ1dCB0aGF0J3Mgbm90IGhhcHBlbmluZyBoZXJlLiBTaW5jZSBpdHMgYWRkcmVzcyBpcyBiZWluZyBhc3NpZ25lZCB0byBgYWxsb2NpbmZvX3Byb2Nfb3BzLnByb2NfaW9jdGxgLCB0aGUgY29tcGlsZXIgKmNhbid0KiBpbmxpbmUgaXQuIEludGVyZXN0aW5nLiBPbiB0aGUgb3RoZXIgaGFuZCwgYGFsbG9jaW5mb19pb2N0bF9nZXRfYXRgIGlzIGFsc28gc3RhdGljLCBidXQgdGhhdCBmdW5jdGlvbiAqaXMqIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBhbGxvY2luZm9faW9jdGxgLlxuXG5MZXQncyBjb25maXJtIHRoYXQgYGFsbG9jaW5mb19pb2N0bGAgaXMgdGhlIHJpZ2h0IGZ1bmN0aW9uIHRvIGZvY3VzIG9uLiBZZXAsIGl0IHNlZW1zIHRvIGJlIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgaW9jdGwgY2FsbHMsIGFuZCB0aGF0IG1ha2VzIGl0IGFuIGV4Y2VsbGVudCBmb2NhbCBwb2ludC4gSSBzaG91bGQgYWxzbyBpbmNsdWRlIGBhbGxvY2luZm9fY29tcGF0X2lvY3RsYCBpbiB0aGUgbGlzdC5cblxuT2theSwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBgbW0vYWxsb2NfdGFnLmNgIHRvIGVuc3VyZSBJIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBhbnkgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMzQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxODozODozNy41ODAxMzQ1MzZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTIzNjY3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY2luZm9faW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vYWxsb2NfdGFnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vYWxsb2NfdGFnLmM9MjI0PXN0YXRpYyB2b2lkIGFsbG9jaW5mb190b19wYXJhbXMoc3RydWN0IGNvZGV0YWcgKmN0LFxcbi0tXFxubW0vYWxsb2NfdGFnLmMtMjQzLSAqL1xcbm1tL2FsbG9jX3RhZy5jOjI0NDpzdGF0aWMgaW50IGFsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXFxubW0vYWxsb2NfdGFnLmMtMjQ1LXtcXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTI2MT1zdGF0aWMgYm9vbCBtYXRjaGVzX2ZpbHRlcihzdHJ1Y3QgY29kZXRhZyAqY3QsIHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyICpmaWx0ZXIsXFxuLS1cXG5tbS9hbGxvY190YWcuYy0zMTctICovXFxubW0vYWxsb2NfdGFnLmM6MzE4OnN0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9hdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXFxubW0vYWxsb2NfdGFnLmMtMzE5LXtcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTM5Mi0gKi9cXG5tbS9hbGxvY190YWcuYzozOTM6c3RhdGljIGludCBhbGxvY2luZm9faW9jdGxfZ2V0X25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkIF9fdXNlciAqYXJnKVxcbm1tL2FsbG9jX3RhZy5jLTM5NC17XFxuLS1cXG5tbS9hbGxvY190YWcuYy00NDMtICovXFxubW0vYWxsb2NfdGFnLmM6NDQ0OnN0YXRpYyBsb25nIGFsbG9jaW5mb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcXG5tbS9hbGxvY190YWcuYy00NDUtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgX19hcmcpXFxuLS1cXG5tbS9hbGxvY190YWcuYy00NTEtXFx0Y2FzZSBBTExPQ0lORk9fSU9DX0NPTlRFTlRfSUQ6XFxubW0vYWxsb2NfdGFnLmM6NDUyOlxcdFxcdHJldCA9IGFsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZChmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEsIGFyZyk7XFxubW0vYWxsb2NfdGFnLmMtNDUzLVxcdFxcdGJyZWFrO1xcbm1tL2FsbG9jX3RhZy5jLTQ1NC1cXHRjYXNlIEFMTE9DSU5GT19JT0NfR0VUX0FUOlxcbm1tL2FsbG9jX3RhZy5jOjQ1NTpcXHRcXHRyZXQgPSBhbGxvY2luZm9faW9jdGxfZ2V0X2F0KGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YSwgYXJnKTtcXG5tbS9hbGxvY190YWcuYy00NTYtXFx0XFx0YnJlYWs7XFxubW0vYWxsb2NfdGFnLmMtNDU3LVxcdGNhc2UgQUxMT0NJTkZPX0lPQ19HRVRfTkVYVDpcXG5tbS9hbGxvY190YWcuYzo0NTg6XFx0XFx0cmV0ID0gYWxsb2NpbmZvX2lvY3RsX2dldF9uZXh0KGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YSwgYXJnKTtcXG5tbS9hbGxvY190YWcuYy00NTktXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9hbGxvY190YWcuYz00Njk9c3RhdGljIGxvbmcgYWxsb2NpbmZvX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTQ3MS17XFxubW0vYWxsb2NfdGFnLmM6NDcyOlxcdHJldHVybiBhbGxvY2luZm9faW9jdGwoZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZyljb21wYXRfcHRyKGFyZykpO1xcbm1tL2FsbG9jX3RhZy5jLTQ3My19XFxuLS1cXG5tbS9hbGxvY190YWcuYz00NzY9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBhbGxvY2luZm9fcHJvY19vcHMgPSB7XFxuLS1cXG5tbS9hbGxvY190YWcuYy00ODAtXFx0LnByb2NfcmVsZWFzZVxcdFxcdD0gYWxsb2NpbmZvX3JlbGVhc2UsXFxubW0vYWxsb2NfdGFnLmM6NDgxOlxcdC5wcm9jX2lvY3RsXFx0XFx0PSBhbGxvY2luZm9faW9jdGwsXFxubW0vYWxsb2NfdGFnLmMtNDgyLSNpZmRlZiBDT05GSUdfQ09NUEFUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE4OjM4OjM3LjgyOTM3NzIwOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTM3MDgzMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gaGlnaGxpZ2h0IGZ1bmN0aW9ucyBsaWtlIGBhbGxvY2luZm9faW9jdGxgLCBgYWxsb2NpbmZvX2NvbXBhdF9pb2N0bGAsIGFuZCB0aGUgb3RoZXJzIGFzIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcuIEhvd2V2ZXIsIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGFza3MgbWUgdG8gZmF2b3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IG1ha2VzIHNlbnNlOyBpbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGxlc3MgbGlrZWx5IHRvIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBhbmQgdGhlcmVmb3JlIGhhcmRlciB0byB0YXJnZXQgZGlyZWN0bHkuXG5cblNpbmNlIGJvdGggYGFsbG9jaW5mb19pb2N0bGAgYW5kIGBhbGxvY2luZm9fY29tcGF0X2lvY3RsYCBhcmUgc3RhdGljLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXkgYXJlIG5vdCBpbmxpbmVkLiBUaGVpciBhZGRyZXNzIGlzIHRha2VuLCBzbyBJJ20gcmVhc29uYWJseSBjb25maWRlbnQgdGhleSB3b24ndCBiZSBpbmxpbmVkLiBJIGNhbiB1c2UgdGhvc2UgYXMgZm9jdXMgc3ltYm9scy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgYW55IGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZC4gYE1FTV9BTExPQ19QUk9GSUxJTkdgIHNlZW1zIHRvIGJlIHRoZSBrZXksIGRlcGVuZGluZyBvbiBgTU1VYCwgYFBST0NfRlNgLCBhbmQgYCFERUJVR19GT1JDRV9XRUFLX1BFUl9DUFVgLiAgYFBST0NfRlNgIGlzIHByZXR0eSBzdGFuZGFyZCwgc28gYE1FTV9BTExPQ19QUk9GSUxJTkdgIGlzIHRoZSBpbXBvcnRhbnQgY29uZmlnLlxuXG5Mb29raW5nIGF0IHRoZSBwYXRjaCBpdHNlbGYsIGl0J3MgbW9kaWZ5aW5nIGBzdHJ1Y3QgYWxsb2NpbmZvX3RhZ2AgYW5kIGBzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlcmAgaW4gYGluY2x1ZGUvdWFwaS9saW51eC9hbGxvY190YWcuaGAuIEl0IGFsc28gdXBkYXRlcyBgbWF0Y2hlc19maWx0ZXJgIGluIGBtbS9hbGxvY190YWcuY2AsIGFuZCBhIGNvbW1lbnQgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9hbGxvY2luZm9faW9jdGxfdGVzdC5jYC4gIFRoaXMgaXMgYSBVQVBJIGNoYW5nZSBpbXBhY3RpbmcgdGhlIGAvcHJvYy9hbGxvY2luZm9gIGlvY3RscyBkaXJlY3RseSwgd2hpY2ggbWVhbnMgaXQgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLlxuXG5NeSBjb25jbHVzaW9uIGlzIGNsZWFyOlxuXG4qICAgKipXb3J0aEZ1enppbmc6IHRydWUqKlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBhbGxvY2luZm9faW9jdGxgLCBgYWxsb2NpbmZvX2NvbXBhdF9pb2N0bGBcbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYE1FTV9BTExPQ19QUk9GSUxJTkdgXG5cbioqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVUFQSSBzdHJ1Y3QgbGF5b3V0IGZvciB0aGUgYC9wcm9jL2FsbG9jaW5mb2AgaW9jdGwgYW5kIHVwZGF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGluIHRoZSBrZXJuZWwuIEZ1enppbmcgdGhlIGlvY3RsIGhhbmRsZXIgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgbmV3IHN0cnVjdCBsYXlvdXQgYW5kIGZpbHRlcmluZyBsb2dpYyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgd2l0aG91dCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGxvZ2ljIGVycm9ycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NDMsIk91dHB1dFRva2VucyI6MTE1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE4OjM4OjQ2Ljc2NjQ2MzQxNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNDg0MTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NpbmZvX2lvY3RsXCIsXG4gICAgXCJhbGxvY2luZm9fY29tcGF0X2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFVBUEkgc3RydWN0IGxheW91dCBmb3IgdGhlIC9wcm9jL2FsbG9jaW5mbyBpb2N0bCBhbmQgdXBkYXRlcyB0aGUgY29ycmVzcG9uZGluZyBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMgaW4gdGhlIGtlcm5lbC4gRnV6emluZyB0aGUgaW9jdGwgaGFuZGxlciBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBuZXcgc3RydWN0IGxheW91dCBhbmQgZmlsdGVyaW5nIGxvZ2ljIGFyZSBoYW5kbGVkIGNvcnJlY3RseSB3aXRob3V0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbG9naWMgZXJyb3JzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTV9BTExPQ19QUk9GSUxJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY2luZm9faW9jdGxcIixcbiAgICBcImFsbG9jaW5mb19jb21wYXRfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVUFQSSBzdHJ1Y3QgbGF5b3V0IGZvciB0aGUgL3Byb2MvYWxsb2NpbmZvIGlvY3RsIGFuZCB1cGRhdGVzIHRoZSBjb3JyZXNwb25kaW5nIGZpbHRlciBtYXRjaGluZyBsb2dpYyBpbiB0aGUga2VybmVsLiBGdXp6aW5nIHRoZSBpb2N0bCBoYW5kbGVyIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIG5ldyBzdHJ1Y3QgbGF5b3V0IGFuZCBmaWx0ZXJpbmcgbG9naWMgYXJlIGhhbmRsZWQgY29ycmVjdGx5IHdpdGhvdXQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBsb2dpYyBlcnJvcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowjvkfz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 18:36:29 +0000 UTC FinishedAt: 2026-08-04 18:38:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "486855239e38a91d3eae26618ccb7845c1764625", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "486855239e38a91d3eae26618ccb7845c1764625", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING" ], "series_id": "deca0563-9bc8-4d7d-b56f-4aec949c58c1" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "allocinfo_ioctl", "allocinfo_compat_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE4OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY2luZm9faW9jdGwmIzM0OywKICAgICYjMzQ7YWxsb2NpbmZvX2NvbXBhdF9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVUFQSSBzdHJ1Y3QgbGF5b3V0IGZvciB0aGUgL3Byb2MvYWxsb2NpbmZvIGlvY3RsIGFuZCB1cGRhdGVzIHRoZSBjb3JyZXNwb25kaW5nIGZpbHRlciBtYXRjaGluZyBsb2dpYyBpbiB0aGUga2VybmVsLiBGdXp6aW5nIHRoZSBpb2N0bCBoYW5kbGVyIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIG5ldyBzdHJ1Y3QgbGF5b3V0IGFuZCBmaWx0ZXJpbmcgbG9naWMgYXJlIGhhbmRsZWQgY29ycmVjdGx5IHdpdGhvdXQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBsb2dpYyBlcnJvcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTg6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2MTFjM2NmYTljMTUxMDAwMTRiNjM0YmJmZjU0ZWVjMDVjYjk2NDJiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAxODozNzo0NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmhcbmluZGV4IDI3MGY2OTNiMTgyMjAuLmUzYWQ5NDQ0NDg2NGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9hbGxvY190YWcuaFxuQEAgLTMxLDggJiM0MzszMSw2IEBAIHN0cnVjdCBhbGxvY2luZm9fdGFnIHtcbiBcdGNoYXIgZnVuY3Rpb25bQUxMT0NJTkZPX1NUUl9TSVpFXTtcbiBcdGNoYXIgZmlsZW5hbWVbQUxMT0NJTkZPX1NUUl9TSVpFXTtcbiBcdF9fdTY0IGxpbmVubztcbi1cdC8qIGZpbHRlciBjcml0ZXJpYSBvbmx5OyBzZWUgYWxsb2NpbmZvX2NvdW50ZXIuYWNjdXJhdGUgZm9yIGFjdHVhbCBhY2N1cmFjeSAqL1xuLVx0X191NjQgaW5hY2N1cmF0ZTtcbiB9O1xuIFxuIC8qIFRoZSBhbGlnbm1lbnQgZW5zdXJlcyAzMi1iaXQgY29tcGF0aWJsZSBpbnRlcmZhY2VzIGFyZSBub3QgYnJva2VuICovXG5AQCAtNzQsNiAmIzQzOzcyLDggQEAgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIge1xuIFx0c3RydWN0IGFsbG9jaW5mb190YWcgZmllbGRzO1xuIFx0X191NjQgbWluX3NpemU7XG4gXHRfX3U2NCBtYXhfc2l6ZTtcbiYjNDM7XHQvKiBmaWx0ZXIgY3JpdGVyaWEgb25seTsgc2VlIGFsbG9jaW5mb19jb3VudGVyLmFjY3VyYXRlIGZvciBhY3R1YWwgYWNjdXJhY3kgKi9cbiYjNDM7XHRfX3U2NCBpbmFjY3VyYXRlO1xuIH07XG4gXG4gc3RydWN0IGFsbG9jaW5mb19nZXRfYXQge1xuZGlmZiAtLWdpdCBhL21tL2FsbG9jX3RhZy5jIGIvbW0vYWxsb2NfdGFnLmNcbmluZGV4IDUyYWVjZTI3YjAwZTAuLjg0YzVjMzc4M2NhNDYgMTAwNjQ0XG4tLS0gYS9tbS9hbGxvY190YWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vYWxsb2NfdGFnLmNcbkBAIC0yOTEsNyAmIzQzOzI5MSw3IEBAIHN0YXRpYyBib29sIG1hdGNoZXNfZmlsdGVyKHN0cnVjdCBjb2RldGFnICpjdCwgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcixcbiBcbiBcdGlmIChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0lOQUNDVVJBVEUpIHtcbiBcdFx0aW5hY2N1cmF0ZSA9ICEhKGN0LVx1MDAzZWZsYWdzIFx1MDAyNiBDT0RFVEFHX0ZMQUdfSU5BQ0NVUkFURSk7XG4tXHRcdGlmIChpbmFjY3VyYXRlICE9ICEhKGZpbHRlci1cdTAwM2VmaWVsZHMuaW5hY2N1cmF0ZSkpXG4mIzQzO1x0XHRpZiAoaW5hY2N1cmF0ZSAhPSAhIShmaWx0ZXItXHUwMDNlaW5hY2N1cmF0ZSkpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9hbGxvY2luZm9faW9jdGxfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL2FsbG9jaW5mb19pb2N0bF90ZXN0LmNcbmluZGV4IDdkOTRhYmI3ODVhMTQuLjc0ZmQ2NGIyMzcwY2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvYWxsb2NpbmZvX2lvY3RsX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL2FsbG9jaW5mb19pb2N0bF90ZXN0LmNcbkBAIC0xLDcgJiM0MzsxLDcgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gXG4gLyoga3NlbGZ0ZXN0IGZvciBhbGxvY2luZm8gaW9jdGxcbi0gKiBhbGxvY2luZm8gaW9jdGwgcmV0cml2ZXMgYWxsb2NpbmZvIGRhdGEgdGhyb3VnaCBpb2N0bFxuJiM0MzsgKiBhbGxvY2luZm8gaW9jdGwgcmV0cmlldmVzIGFsbG9jaW5mbyBkYXRhIHRocm91Z2ggaW9jdGxcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMjYgR29vZ2xlLCBJbmMuXG4gICovXG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTg6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY2luZm9faW9jdGwmIzM0OywKICAgICYjMzQ7YWxsb2NpbmZvX2NvbXBhdF9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVUFQSSBzdHJ1Y3QgbGF5b3V0IGZvciB0aGUgL3Byb2MvYWxsb2NpbmZvIGlvY3RsIGFuZCB1cGRhdGVzIHRoZSBjb3JyZXNwb25kaW5nIGZpbHRlciBtYXRjaGluZyBsb2dpYyBpbiB0aGUga2VybmVsLiBGdXp6aW5nIHRoZSBpb2N0bCBoYW5kbGVyIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIG5ldyBzdHJ1Y3QgbGF5b3V0IGFuZCBmaWx0ZXJpbmcgbG9naWMgYXJlIGhhbmRsZWQgY29ycmVjdGx5IHdpdGhvdXQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBsb2dpYyBlcnJvcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MTFjM2NmYTljMTUxMDAwMTRiNjM0YmJmZjU0ZWVjMDVjYjk2NDJiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgNCAxODozNzo0NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9hbGxvY190YWcuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9hbGxvY190YWcuaAppbmRleCAyNzBmNjkzYjE4MjIwLi5lM2FkOTQ0NDQ4NjRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oCkBAIC0zMSw4ICYjNDM7MzEsNiBAQCBzdHJ1Y3QgYWxsb2NpbmZvX3RhZyB7CiAJY2hhciBmdW5jdGlvbltBTExPQ0lORk9fU1RSX1NJWkVdOwogCWNoYXIgZmlsZW5hbWVbQUxMT0NJTkZPX1NUUl9TSVpFXTsKIAlfX3U2NCBsaW5lbm87Ci0JLyogZmlsdGVyIGNyaXRlcmlhIG9ubHk7IHNlZSBhbGxvY2luZm9fY291bnRlci5hY2N1cmF0ZSBmb3IgYWN0dWFsIGFjY3VyYWN5ICovCi0JX191NjQgaW5hY2N1cmF0ZTsKIH07CiAKIC8qIFRoZSBhbGlnbm1lbnQgZW5zdXJlcyAzMi1iaXQgY29tcGF0aWJsZSBpbnRlcmZhY2VzIGFyZSBub3QgYnJva2VuICovCkBAIC03NCw2ICYjNDM7NzIsOCBAQCBzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciB7CiAJc3RydWN0IGFsbG9jaW5mb190YWcgZmllbGRzOwogCV9fdTY0IG1pbl9zaXplOwogCV9fdTY0IG1heF9zaXplOwomIzQzOwkvKiBmaWx0ZXIgY3JpdGVyaWEgb25seTsgc2VlIGFsbG9jaW5mb19jb3VudGVyLmFjY3VyYXRlIGZvciBhY3R1YWwgYWNjdXJhY3kgKi8KJiM0MzsJX191NjQgaW5hY2N1cmF0ZTsKIH07CiAKIHN0cnVjdCBhbGxvY2luZm9fZ2V0X2F0IHsKZGlmZiAtLWdpdCBhL21tL2FsbG9jX3RhZy5jIGIvbW0vYWxsb2NfdGFnLmMKaW5kZXggNTJhZWNlMjdiMDBlMC4uODRjNWMzNzgzY2E0NiAxMDA2NDQKLS0tIGEvbW0vYWxsb2NfdGFnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vYWxsb2NfdGFnLmMKQEAgLTI5MSw3ICYjNDM7MjkxLDcgQEAgc3RhdGljIGJvb2wgbWF0Y2hlc19maWx0ZXIoc3RydWN0IGNvZGV0YWcgKmN0LCBzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciAqZmlsdGVyLAogCiAJaWYgKGZpbHRlci0mZ3Q7bWFzayAmYW1wOyBBTExPQ0lORk9fRklMVEVSX01BU0tfSU5BQ0NVUkFURSkgewogCQlpbmFjY3VyYXRlID0gISEoY3QtJmd0O2ZsYWdzICZhbXA7IENPREVUQUdfRkxBR19JTkFDQ1VSQVRFKTsKLQkJaWYgKGluYWNjdXJhdGUgIT0gISEoZmlsdGVyLSZndDtmaWVsZHMuaW5hY2N1cmF0ZSkpCiYjNDM7CQlpZiAoaW5hY2N1cmF0ZSAhPSAhIShmaWx0ZXItJmd0O2luYWNjdXJhdGUpKQogCQkJcmV0dXJuIGZhbHNlOwogCX0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL2FsbG9jaW5mb19pb2N0bF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvYWxsb2NpbmZvX2lvY3RsX3Rlc3QuYwppbmRleCA3ZDk0YWJiNzg1YTE0Li43NGZkNjRiMjM3MGNjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvYWxsb2NpbmZvX2lvY3RsX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvYWxsb2NpbmZvX2lvY3RsX3Rlc3QuYwpAQCAtMSw3ICYjNDM7MSw3IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiAKIC8qIGtzZWxmdGVzdCBmb3IgYWxsb2NpbmZvIGlvY3RsCi0gKiBhbGxvY2luZm8gaW9jdGwgcmV0cml2ZXMgYWxsb2NpbmZvIGRhdGEgdGhyb3VnaCBpb2N0bAomIzQzOyAqIGFsbG9jaW5mbyBpb2N0bCByZXRyaWV2ZXMgYWxsb2NpbmZvIGRhdGEgdGhyb3VnaCBpb2N0bAogICogQ29weXJpZ2h0IChDKSAyMDI2IEdvb2dsZSwgSW5jLgogICovCiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTg6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU2MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFsbG9jIFRhZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHRoZSBhbGxvYyB0YWcgaW5mcmFzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBhbGxvY2luZm9gIGZ1bmN0aW9uYWxpdHkuIEkgc2VlIGNoYW5nZXMgdG8gYGluY2x1ZGUvdWFwaS9saW51eC9hbGxvY190YWcuaGAsIGBtbS9hbGxvY190YWcuY2AsIGFuZCB0aGUgc2VsZi10ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL2FsbG9jaW5mb19pb2N0bF90ZXN0LmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgbW92aW5nIHRoZSBgaW5hY2N1cmF0ZWAgZmllbGQgZnJvbSB0aGUgYGFsbG9jaW5mb190YWdgIHN0cnVjdCB0byB0aGUgYGFsbG9jaW5mb19maWx0ZXJgIHN0cnVjdCBpbiB0aGUgdXNlci1zcGFjZSBoZWFkZXIuIFRoaXMgc2hpZnQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgaG93IHRoZSBmaWx0ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGlvY3RsIGNhbGxzLgoKSW4gYG1tL2FsbG9jX3RhZy5jYCwgdGhleSYjMzk7cmUgdXBkYXRpbmcgdGhlIGNvZGUgdG8gcmVmZXJlbmNlIGBmaWx0ZXItJmd0O2luYWNjdXJhdGVgIGluc3RlYWQgb2YgdGhlIG9sZCBgZmlsdGVyLSZndDtmaWVsZHMuaW5hY2N1cmF0ZWAgY29uc3RydWN0LiBUaGlzIGxpa2VseSBtZWFucyB0aGV5JiMzOTt2ZSByZXN0cnVjdHVyZWQgdGhlIHdheSB0aGUgZmlsdGVyIGRhdGEgaXMgcmVwcmVzZW50ZWQgaW50ZXJuYWxseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXkmIzM5O3ZlIGNob3NlbiB0byBtb3ZlIHRoaXMgZmllbGQuIFdhcyBpdCBmb3IgYWxpZ25tZW50PyBTcGFjZSBvcHRpbWl6YXRpb24/IEEgY2hhbmdlIGluIHRoZSBmaWx0ZXJpbmcgbG9naWMgaXRzZWxmPwoKR2l2ZW4gdGhlIGZvY3VzIG9uIHRoZSBpb2N0bCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBhbGxvY2luZm9fZmlsdGVyYCBpcyBiZWluZyB1c2VkIGFuZCB3aHkgaXQmIzM5O3Mgc3RydWN0dXJlZCB0aGlzIHdheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBvbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB1c2VyIHNwYWNlIGFuZCBrZXJuZWwgc3BhY2UuCgpJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ3JlcCB0aHJvdWdoIGBtbS9hbGxvY190YWcuY2AgdG8gc2VlIGFsbCB0aGUgcGxhY2VzIHdoZXJlIGBhbGxvY2luZm9fZmlsdGVyYCBpcyB1c2VkLiBUaGlzIHdpbGwgaGVscCBtZSB0cmFjZSB0aGUgZGF0YSBmbG93IGFuZCBob3cgdGhpcyAmIzM5O2luYWNjdXJhdGUmIzM5OyBmbGFnIGlzIGJlaW5nIGFjY2Vzc2VkIGFuZCBtYW5pcHVsYXRlZCB3aXRoaW4gdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxODozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY2luZm9fZmlsdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vYWxsb2NfdGFnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vYWxsb2NfdGFnLmM9NjE9c3RydWN0IGFsbG9jaW5mb19wcml2YXRlIHtcbi0tXG5tbS9hbGxvY190YWcuYy02NC1cdGJvb2wgcHJpbnRfaGVhZGVyO1xubW0vYWxsb2NfdGFnLmM6NjU6XHRzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciBmaWx0ZXI7XG5tbS9hbGxvY190YWcuYy02Ni1cdC8qIGlvY3RsIHVzZXMgYSBzZXBhcmF0ZSBpdGVyYXRvciBub3QgdG8gaW50ZXJmZXJlIHdpdGggcmVhZHMgKi9cbi0tXG5tbS9hbGxvY190YWcuYz0yNDQ9c3RhdGljIGludCBhbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkIF9fdXNlciAqYXJnKVxuLS1cbm1tL2FsbG9jX3RhZy5jLTI2MC0gKi9cbm1tL2FsbG9jX3RhZy5jOjI2MTpzdGF0aWMgYm9vbCBtYXRjaGVzX2ZpbHRlcihzdHJ1Y3QgY29kZXRhZyAqY3QsIHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyICpmaWx0ZXIsXG5tbS9hbGxvY190YWcuYy0yNjItXHRcdFx0ICAgc3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyAqY291bnRlcnMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTg6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM1NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIG1tL2FsbG9jXF90YWcuYyoqCgpPa2F5LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYSBzcGVjaWZpYyBhcmVhLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYG1tL2FsbG9jX3RhZy5jYCwgYW5kIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyNjEuIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLCB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgcGFydCBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gdGFnZ2luZyBwcm9jZXNzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGFuYWx5emluZyB0aGUgY29kZSBpbiB0aGF0IHZpY2luaXR5IGFuZCBzZWVpbmcgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRoZSBtb2R1bGUuIEtub3dpbmcgbXkgd2F5IGFyb3VuZCB0aGUga2VybmVsIHNvdXJjZSwgSSYjMzk7bGwgYmUgYWJsZSB0byBxdWlja2x5IGdyYXNwIHRoZSBjb250ZXh0LiBUaGUgc3BlY2lmaWMgbGluZSB3aWxsIGFjdCBhcyBteSBzdGFydGluZyBwb2ludCB0byBzZWUgd2hhdCBjbHVlcyBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE4OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vYWxsb2NfdGFnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHRcdGNvZGV0YWdfdW5sb2NrX21vZHVsZV9saXN0KGFsbG9jX3RhZ19jdHR5cGUpO1xuIDI1MTpcdFx0aWYgKGNvcHlfdG9fdXNlcihhcmcsIFx1MDAyNnBhcmFtcywgc2l6ZW9mKHBhcmFtcykpKVxuIDI1MjpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAyNTM6XHRcbiAyNTQ6XHRcdHJldHVybiAwO1xuIDI1NTpcdH1cbiAyNTY6XHRcbiAyNTc6XHQvKlxuIDI1ODpcdCAqIFZlcmlmaWVzIHdoZXRoZXIgYSBnaXZlbiBjb2RldGFnIHNhdGlzZmllcyB0aGUgYWN0aXZlIGZpbHRlcmluZyBjcml0ZXJpYSBieVxuIDI1OTpcdCAqIG1hdGNoaW5nIGl0cyBjaGFyYWN0ZXJpc3RpY3MgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGZpbHRlci5cbiAyNjA6XHQgKi9cbiAyNjE6XHRzdGF0aWMgYm9vbCBtYXRjaGVzX2ZpbHRlcihzdHJ1Y3QgY29kZXRhZyAqY3QsIHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyICpmaWx0ZXIsXG4gMjYyOlx0XHRcdFx0ICAgc3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyAqY291bnRlcnMsXG4gMjYzOlx0XHRcdFx0ICAgYm9vbCAqZmV0Y2hlZF9jb3VudGVycylcbiAyNjQ6XHR7XG4gMjY1Olx0XHRib29sIGluYWNjdXJhdGU7XG4gMjY2Olx0XG4gMjY3Olx0XHRpZiAoIWZpbHRlciB8fCAhZmlsdGVyLVx1MDAzZW1hc2spXG4gMjY4Olx0XHRcdHJldHVybiB0cnVlO1xuIDI2OTpcdFxuIDI3MDpcdFx0aWYgKGZpbHRlci1cdTAwM2VtYXNrIFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfTU9ETkFNRSkge1xuIDI3MTpcdFx0XHQvKiB1c2VyIHdhbnRzIHRvIGZpbHRlciBieSBtb2RuYW1lIGJ1dCBjdC1cdTAwM2Vtb2RuYW1lIGlzIE5VTEwgKi9cbiAyNzI6XHRcdFx0aWYgKCFjdC1cdTAwM2Vtb2RuYW1lKSB7XG4gMjczOlx0XHRcdFx0LyogdmFsaWRhdGUgaWYgdXNlciB3YXMgYXR0ZW1wdGluZyB0byBmaWx0ZXIgZm9yIGJ1aWx0LWluIGFsbG9jYXRpb25zICovXG4gMjc0Olx0XHRcdFx0aWYgKGZpbHRlci1cdTAwM2VmaWVsZHMubW9kbmFtZVswXSAhPSAmIzM5O1xcMCYjMzk7KVxuIDI3NTpcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDI3NjpcdFx0XHR9IGVsc2UgaWYgKGFsbG9jaW5mb19jbXBfc3RyKGN0LVx1MDAzZW1vZG5hbWUsIGZpbHRlci1cdTAwM2VmaWVsZHMubW9kbmFtZSkpXG4gMjc3Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDI3ODpcdFx0fVxuIDI3OTpcdFxuIDI4MDpcdFx0aWYgKChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZVTkNUSU9OKSBcdTAwMjZcdTAwMjZcbiAyODE6XHRcdCAgICBjdC1cdTAwM2VmdW5jdGlvbiBcdTAwMjZcdTAwMjYgYWxsb2NpbmZvX2NtcF9zdHIoY3QtXHUwMDNlZnVuY3Rpb24sIGZpbHRlci1cdTAwM2VmaWVsZHMuZnVuY3Rpb24pKVxuIDI4MjpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMjgzOlx0XG4gMjg0Olx0XHRpZiAoKGZpbHRlci1cdTAwM2VtYXNrIFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfRklMRU5BTUUpIFx1MDAyNlx1MDAyNlxuIDI4NTpcdFx0ICAgIGN0LVx1MDAzZWZpbGVuYW1lIFx1MDAyNlx1MDAyNiBhbGxvY2luZm9fY21wX3N0cihjdC1cdTAwM2VmaWxlbmFtZSwgZmlsdGVyLVx1MDAzZWZpZWxkcy5maWxlbmFtZSkpXG4gMjg2Olx0XHRcdHJldHVybiBmYWxzZTtcbiAyODc6XHRcbiAyODg6XHRcdGlmICgoZmlsdGVyLVx1MDAzZW1hc2sgXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19MSU5FTk8pIFx1MDAyNlx1MDAyNlxuIDI4OTpcdFx0ICAgIGN0LVx1MDAzZWxpbmVubyAhPSBmaWx0ZXItXHUwMDNlZmllbGRzLmxpbmVubylcbiAyOTA6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDI5MTpcdFxuIDI5MjpcdFx0aWYgKGZpbHRlci1cdTAwM2VtYXNrIFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfSU5BQ0NVUkFURSkge1xuIDI5MzpcdFx0XHRpbmFjY3VyYXRlID0gISEoY3QtXHUwMDNlZmxhZ3MgXHUwMDI2IENPREVUQUdfRkxBR19JTkFDQ1VSQVRFKTtcbiAyOTQ6XHRcdFx0aWYgKGluYWNjdXJhdGUgIT0gISEoZmlsdGVyLVx1MDAzZWluYWNjdXJhdGUpKVxuIDI5NTpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiAyOTY6XHRcdH1cbiAyOTc6XHRcbiAyOTg6XHRcdGlmIChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgKEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSB8IEFMTE9DSU5GT19GSUxURVJfTUFTS19NQVhfU0laRSkpIHtcbiAyOTk6XHRcdFx0aWYgKCEqZmV0Y2hlZF9jb3VudGVycykge1xuIDMwMDpcdFx0XHRcdCpjb3VudGVycyA9IGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhjdCk7XG4gMzAxOlx0XHRcdFx0KmZldGNoZWRfY291bnRlcnMgPSB0cnVlO1xuIDMwMjpcdFx0XHR9XG4gMzAzOlx0XHRcdGlmICgoZmlsdGVyLVx1MDAzZW1hc2sgXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSkgXHUwMDI2XHUwMDI2XG4gMzA0Olx0XHRcdCAgICBjb3VudGVycy1cdTAwM2VieXRlcyBcdTAwM2MgZmlsdGVyLVx1MDAzZW1pbl9zaXplKVxuIDMwNTpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiAzMDY6XHRcdFx0aWYgKChmaWx0ZXItXHUwMDNlbWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01BWF9TSVpFKSBcdTAwMjZcdTAwMjZcbiAzMDc6XHRcdFx0ICAgIGNvdW50ZXJzLVx1MDAzZWJ5dGVzIFx1MDAzZSBmaWx0ZXItXHUwMDNlbWF4X3NpemUpXG4gMzA4Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDMwOTpcdFx0fVxuIDMxMDpcdFxuIDMxMTpcdFx0cmV0dXJuIHRydWU7XG4gMzEyOlx0fVxuIDMxMzpcdFxuIDMxNDpcdC8qXG4gMzE1Olx0ICogU2Vla3MgdGhlIGlvY3RsIGl0ZXJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgMC1pbmRleGVkIHRhZyBwb3NpdGlvbiwgcmVhZHMgaXRzXG4gMzE2Olx0ICogcHJvZmlsaW5nIGRhdGEgYW5kIHJldHVybnMgaXQgdG8gdXNlcnNwYWNlLlxuIDMxNzpcdCAqL1xuIDMxODpcdHN0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9hdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXG4gMzE5Olx0e1xuIDMyMDpcdFx0c3RydWN0IGFsbG9jaW5mb19wcml2YXRlICpwcml2O1xuIDMyMTpcdFx0c3RydWN0IGNvZGV0YWcgKmN0O1xuIDMyMjpcdFx0c3RydWN0IGFsbG9jaW5mb19nZXRfYXQgcGFyYW1zID0gezB9O1xuIDMyMzpcdFx0X191NjQgc2tpcF9jb3VudDtcbiAzMjQ6XHRcdHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgY291bnRlcnM7XG4gMzI1Olx0XHRib29sIGZldGNoZWRfY291bnRlcnM7XG4gMzI2Olx0XG4gMzI3Olx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2cGFyYW1zLCBhcmcsIHNpemVvZihwYXJhbXMpKSlcbiAzMjg6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gMzI5Olx0XG4gMzMwOlx0XHRpZiAocGFyYW1zLmZpbHRlci5tYXNrIFx1MDAyNiB+QUxMT0NJTkZPX0ZJTFRFUl9NQVNLUylcbiAzMzE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzMyOlx0XG4gMzMzOlx0XHRpZiAoKHBhcmFtcy5maWx0ZXIubWFzayBcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01JTl9TSVpFKSBcdTAwMjZcdTAwMjZcbiAzMzQ6XHRcdCAgICAocGFyYW1zLmZpbHRlci5tYXNrIFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfTUFYX1NJWkUpIFx1MDAyNlx1MDAyNlxuIDMzNTpcdFx0ICAgIHBhcmFtcy5maWx0ZXIubWluX3NpemUgXHUwMDNlIHBhcmFtcy5maWx0ZXIubWF4X3NpemUpXG4gMzM2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDMzNzpcdFxuIDMzODpcdFx0cHJpdiA9IG0tXHUwMDNlcHJpdmF0ZTtcbiAzMzk6XHRcbiAzNDA6XHRcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2Vpb2N0bF9sb2NrKTtcbiAzNDE6XHRcdGNvZGV0YWdfbG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKTtcbiAzNDI6XHRcbiAzNDM6XHRcdGlmIChwYXJhbXMucG9zIFx1MDAzZT0gY29kZXRhZ19nZXRfY291bnQoYWxsb2NfdGFnX2N0dHlwZSkpIHtcbiAzNDQ6XHRcdFx0Y29kZXRhZ191bmxvY2tfbW9kdWxlX2xpc3QoYWxsb2NfdGFnX2N0dHlwZSk7XG4gMzQ1Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWlvY3RsX2xvY2spO1xuIDM0NjpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiAzNDc6XHRcdH1cbiAzNDg6XHRcbiAzNDk6XHRcdHNraXBfY291bnQgPSBwYXJhbXMucG9zO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE4OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwOTkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBGdW5jdGlvbmFsIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsIOKAkyBpdCYjMzk7cyBhbHRlcmluZyB0aGUgY29kZSYjMzk7cyBiZWhhdmlvci4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgZm9jdXNlZCBjaGFuZ2U7IHNwZWNpZmljYWxseSwgaXQmIzM5O3MgbW9kaWZ5aW5nIGEgZmllbGQgY2FsbGVkIGBpbmFjY3VyYXRlYCB3aXRoaW4gYSBgZmlsdGVyYCBzdHJ1Y3R1cmUuIEkgc2VlIHRoZSBvbGQgdmVyc2lvbiB1c2VkIGBmaWx0ZXItJmd0O2ZpZWxkcy5pbmFjY3VyYXRlYCwgYW5kIG5vdyBpdCYjMzk7cyBqdXN0IGBmaWx0ZXItJmd0O2luYWNjdXJhdGVgLiBJdCBhbHNvIG1lbnRpb25zIHRoYXQgdGhpcyBmaWVsZCBpcyBtb3Zpbmcgd2l0aGluIHRoZSBVQVBJIHN0cnVjdC4gSGFuZyBvbi4uLiBgc3RydWN0IGFsbG9jaW5mb19maWx0ZXJgIGlzIHBhcnQgb2YgVUFQST8gVGhhdCYjMzk7cyBrZXkuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIGltcGxpY2F0aW9ucyBoZXJlLiBHb3R0YSB2ZXJpZnkgdGhpcyBpbiB0aGUgVUFQSSBoZWFkZXIuIExldCBtZSBxdWlja2x5IGNoZWNrIGBpbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmhgIHRvIHNlZSBleGFjdGx5IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIFVBUEkgc3RydWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB1c2VyIHNwYWNlIGludGVyYWN0cyB3aXRoIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgV0lUSCBMaW51eC1zeXNjYWxsLW5vdGUgKi9cbiAgIDI6XHQvKlxuICAgMzpcdCAqIGFsbG9jX3RhZyBJT0NUTCBBUEkgZGVmaW5pdGlvblxuICAgNDpcdCAqXG4gICA1Olx0ICogQ29weXJpZ2h0IChDKSAyMDI2IEdvb2dsZSwgTExDLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAgIDY6XHQgKlxuICAgNzpcdCAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gICA4Olx0ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXNcbiAgIDk6XHQgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi5cbiAgMTA6XHQgKi9cbiAgMTE6XHRcbiAgMTI6XHQjaWZuZGVmIF9VQVBJX0FMTE9DX1RBR19IXG4gIDEzOlx0I2RlZmluZSBfVUFQSV9BTExPQ19UQUdfSFxuICAxNDpcdFxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiAgMTY6XHRcbiAgMTc6XHQvKlxuICAxODpcdCAqIEZ1bmN0aW9uLCBmaWxlIGFuZCBtb2R1bGUgbmFtZXMgb2Z0ZW4gaGF2ZSB0aGUgc2FtZSBwcmVmaXhlcywgdGhlcmVmb3JlXG4gIDE5Olx0ICogd2hlbiBmaWx0ZXJpbmcgYnkgdGhlc2UgY3JpdGVyaWEsIHdlIGNvbXBhcmUgdGhlIGxhc3QgNjQgY2hhcmFjdGVycyB0b1xuICAyMDpcdCAqIG1pbmltaXplIHRoZSBjaGFuY2VzIG9mIG5hbWUgY29sbGlzaW9uc1xuICAyMTpcdCAqL1xuICAyMjpcdCNkZWZpbmUgQUxMT0NJTkZPX1NUUl9TSVpFXHQ2NFxuICAyMzpcdFxuICAyNDpcdHN0cnVjdCBhbGxvY2luZm9fY29udGVudF9pZCB7XG4gIDI1Olx0XHRfX3U2NCBpZDtcbiAgMjY6XHR9O1xuICAyNzpcdFxuICAyODpcdHN0cnVjdCBhbGxvY2luZm9fdGFnIHtcbiAgMjk6XHRcdC8qIExvbmdlciBuYW1lcyBhcmUgdHJpbW1lZCAqL1xuICAzMDpcdFx0Y2hhciBtb2RuYW1lW0FMTE9DSU5GT19TVFJfU0laRV07XG4gIDMxOlx0XHRjaGFyIGZ1bmN0aW9uW0FMTE9DSU5GT19TVFJfU0laRV07XG4gIDMyOlx0XHRjaGFyIGZpbGVuYW1lW0FMTE9DSU5GT19TVFJfU0laRV07XG4gIDMzOlx0XHRfX3U2NCBsaW5lbm87XG4gIDM0Olx0fTtcbiAgMzU6XHRcbiAgMzY6XHQvKiBUaGUgYWxpZ25tZW50IGVuc3VyZXMgMzItYml0IGNvbXBhdGlibGUgaW50ZXJmYWNlcyBhcmUgbm90IGJyb2tlbiAqL1xuICAzNzpcdHN0cnVjdCBhbGxvY2luZm9fY291bnRlciB7XG4gIDM4Olx0XHRfX3U2NCBieXRlcztcbiAgMzk6XHRcdF9fdTY0IGNhbGxzO1xuICA0MDpcdFx0X191OCBhY2N1cmF0ZTtcbiAgNDE6XHR9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTtcbiAgNDI6XHRcbiAgNDM6XHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhIHtcbiAgNDQ6XHRcdHN0cnVjdCBhbGxvY2luZm9fdGFnIHRhZztcbiAgNDU6XHRcdHN0cnVjdCBhbGxvY2luZm9fY291bnRlciBjb3VudGVyO1xuICA0NjpcdH07XG4gIDQ3Olx0XG4gIDQ4Olx0ZW51bSB7XG4gIDQ5Olx0XHRBTExPQ0lORk9fRklMVEVSX01PRE5BTUUsXG4gIDUwOlx0XHRBTExPQ0lORk9fRklMVEVSX0ZVTkNUSU9OLFxuICA1MTpcdFx0QUxMT0NJTkZPX0ZJTFRFUl9GSUxFTkFNRSxcbiAgNTI6XHRcdEFMTE9DSU5GT19GSUxURVJfTElORU5PLFxuICA1MzpcdFx0QUxMT0NJTkZPX0ZJTFRFUl9JTkFDQ1VSQVRFLFxuICA1NDpcdFx0QUxMT0NJTkZPX0ZJTFRFUl9NSU5fU0laRSxcbiAgNTU6XHRcdEFMTE9DSU5GT19GSUxURVJfTUFYX1NJWkUsXG4gIDU2Olx0XHRfX0FMTE9DSU5GT19GSUxURVJfTEFTVCA9IEFMTE9DSU5GT19GSUxURVJfTUFYX1NJWkVcbiAgNTc6XHR9O1xuICA1ODpcdFxuICA1OTpcdCNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01PRE5BTUVcdFx0KDEgXHUwMDNjXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfTU9ETkFNRSlcbiAgNjA6XHQjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19GVU5DVElPTlx0XHQoMSBcdTAwM2NcdTAwM2MgQUxMT0NJTkZPX0ZJTFRFUl9GVU5DVElPTilcbiAgNjE6XHQjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19GSUxFTkFNRVx0XHQoMSBcdTAwM2NcdTAwM2MgQUxMT0NJTkZPX0ZJTFRFUl9GSUxFTkFNRSlcbiAgNjI6XHQjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19MSU5FTk9cdFx0KDEgXHUwMDNjXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfTElORU5PKVxuICA2MzpcdCNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0lOQUNDVVJBVEVcdCgxIFx1MDAzY1x1MDAzYyBBTExPQ0lORk9fRklMVEVSX0lOQUNDVVJBVEUpXG4gIDY0Olx0I2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tfTUlOX1NJWkVcdFx0KDEgXHUwMDNjXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfTUlOX1NJWkUpXG4gIDY1Olx0I2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tfTUFYX1NJWkVcdFx0KDEgXHUwMDNjXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfTUFYX1NJWkUpXG4gIDY2Olx0XG4gIDY3Olx0I2RlZmluZSBBTExPQ0lORk9fRklMVEVSX01BU0tTIFxcXG4gIDY4Olx0XHQoKDEgXHUwMDNjXHUwMDNjIChfX0FMTE9DSU5GT19GSUxURVJfTEFTVCAmIzQzOyAxKSkgLSAxKVxuICA2OTpcdFxuICA3MDpcdHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIHtcbiAgNzE6XHRcdF9fdTY0IG1hc2s7IC8qIGJpdG1hc2sgb2YgdGhlIGZpbHRlciBmaWVsZHMgdXNlZCAqL1xuICA3MjpcdFx0c3RydWN0IGFsbG9jaW5mb190YWcgZmllbGRzO1xuICA3MzpcdFx0X191NjQgbWluX3NpemU7XG4gIDc0Olx0XHRfX3U2NCBtYXhfc2l6ZTtcbiAgNzU6XHRcdC8qIGZpbHRlciBjcml0ZXJpYSBvbmx5OyBzZWUgYWxsb2NpbmZvX2NvdW50ZXIuYWNjdXJhdGUgZm9yIGFjdHVhbCBhY2N1cmFjeSAqL1xuICA3NjpcdFx0X191NjQgaW5hY2N1cmF0ZTtcbiAgNzc6XHR9O1xuICA3ODpcdFxuICA3OTpcdHN0cnVjdCBhbGxvY2luZm9fZ2V0X2F0IHtcbiAgODA6XHRcdC8qIGlucHV0cyAqL1xuICA4MTpcdFx0X191NjQgcG9zO1xuICA4MjpcdFx0c3RydWN0IGFsbG9jaW5mb19maWx0ZXIgZmlsdGVyO1xuICA4MzpcdFx0Lyogb3V0cHV0ICovXG4gIDg0Olx0XHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhIGRhdGE7XG4gIDg1Olx0fTtcbiAgODY6XHRcbiAgODc6XHQjZGVmaW5lIF9BTExPQ0lORk9fSU9DX0NPTlRFTlRfSURcdDBcbiAgODg6XHQjZGVmaW5lIF9BTExPQ0lORk9fSU9DX0dFVF9BVFx0XHQxXG4gIDg5Olx0I2RlZmluZSBfQUxMT0NJTkZPX0lPQ19HRVRfTkVYVFx0XHQyXG4gIDkwOlx0XG4gIDkxOlx0I2RlZmluZSBBTExPQ0lORk9fSU9DX0JBU0VcdFx0MHhBNlxuICA5MjpcdCNkZWZpbmUgQUxMT0NJTkZPX0lPQ19DT05URU5UX0lEXHRfSU9SKEFMTE9DSU5GT19JT0NfQkFTRSwgX0FMTE9DSU5GT19JT0NfQ09OVEVOVF9JRCxcdFxcXG4gIDkzOlx0XHRcdFx0XHRcdCAgICAgc3RydWN0IGFsbG9jaW5mb19jb250ZW50X2lkKVxuICA5NDpcdCNkZWZpbmUgQUxMT0NJTkZPX0lPQ19HRVRfQVRcdFx0X0lPV1IoQUxMT0NJTkZPX0lPQ19CQVNFLCBfQUxMT0NJTkZPX0lPQ19HRVRfQVQsXHRcXFxuICA5NTpcdFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgYWxsb2NpbmZvX2dldF9hdClcbiAgOTY6XHQjZGVmaW5lIEFMTE9DSU5GT19JT0NfR0VUX05FWFRcdFx0X0lPUihBTExPQ0lORk9fSU9DX0JBU0UsIF9BTExPQ0lORk9fSU9DX0dFVF9ORVhULFx0XFxcbiAgOTc6XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhKVxuICA5ODpcdFxuICA5OTpcdCNlbmRpZiAvKiBfVUFQSV9BTExPQ19UQUdfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4ODIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgYWxsb2NpbmZvX3RhZ2AgU3RydWN0dXJlIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgVUFQSSBjaGFuZ2UsIHNwZWNpZmljYWxseSBhbHRlcmluZyB0aGUgYGFsbG9jaW5mb190YWcuaGAgaGVhZGVyIGZpbGUuIEl0JiMzOTtzIG1vdmluZyB0aGUgYGluYWNjdXJhdGVgIGZpZWxkIGZyb20gdGhlIGBzdHJ1Y3QgYWxsb2NpbmZvX3RhZ2Agc3RydWN0dXJlIGludG8gdGhlIGBzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlcmAgc3RydWN0dXJlLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGlzIHdpbGwgaW1wYWN0IHRoZSBVQVBJIGNvbnRyYWN0LCB3aGljaCBtZWFucyBleGlzdGluZyB1c2VycyBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGNvdWxkIGJyZWFrIGlmIHRoZXkgaGF2ZW4mIzM5O3QgYmVlbiB1cGRhdGVkLiBBIGNyaXRpY2FsIHBvaW50IHRvIGNvbnNpZGVyIGlzIGhvdyBpdCBhZmZlY3RzIGBhbGxvY2luZm9faW9jdGxfZ2V0X2F0YCwgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uIHVzZXMgdGhlIGBtYXRjaGVzX2ZpbHRlcmAgZnVuY3Rpb24uIFdlIG5lZWQgdG8gbWV0aWN1bG91c2x5IHRyYWNlIHdoZXJlIGFuZCBob3cgYG1hdGNoZXNfZmlsdGVyYCBpcyB1c2VkIHdpdGggdGhlIHN0cnVjdCBtb2RpZmljYXRpb25zLiBJIGtub3cgdGhhdCBpb2N0bCBgQUxMT0NJTkZPX0lPQ19HRVRfQVRgIGlzIGhhbmRsZWQgaW4gYG1tL2FsbG9jX3RhZy5jYCwgYnV0IGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgYG1hdGNoZXNfZmlsdGVyYCBjYWxscywgbGV0IG1lIGZpcnN0IHZlcmlmeSBob3cgYGFsbG9jaW5mb19pb2N0bGAgaXRzZWxmIGlzIHJlZ2lzdGVyZWQuIFRoaXMgZ2l2ZXMgbWUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NpbmZvX2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vYWxsb2NfdGFnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vYWxsb2NfdGFnLmM9MjI0PXN0YXRpYyB2b2lkIGFsbG9jaW5mb190b19wYXJhbXMoc3RydWN0IGNvZGV0YWcgKmN0LFxuLS1cbm1tL2FsbG9jX3RhZy5jLTI0My0gKi9cbm1tL2FsbG9jX3RhZy5jOjI0NDpzdGF0aWMgaW50IGFsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXG5tbS9hbGxvY190YWcuYy0yNDUte1xuLS1cbm1tL2FsbG9jX3RhZy5jPTI2MT1zdGF0aWMgYm9vbCBtYXRjaGVzX2ZpbHRlcihzdHJ1Y3QgY29kZXRhZyAqY3QsIHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyICpmaWx0ZXIsXG4tLVxubW0vYWxsb2NfdGFnLmMtMzE3LSAqL1xubW0vYWxsb2NfdGFnLmM6MzE4OnN0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9hdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXG5tbS9hbGxvY190YWcuYy0zMTkte1xuLS1cbm1tL2FsbG9jX3RhZy5jLTM5Mi0gKi9cbm1tL2FsbG9jX3RhZy5jOjM5MzpzdGF0aWMgaW50IGFsbG9jaW5mb19pb2N0bF9nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXG5tbS9hbGxvY190YWcuYy0zOTQte1xuLS1cbm1tL2FsbG9jX3RhZy5jLTQ0My0gKi9cbm1tL2FsbG9jX3RhZy5jOjQ0NDpzdGF0aWMgbG9uZyBhbGxvY2luZm9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG5tbS9hbGxvY190YWcuYy00NDUtXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgX19hcmcpXG4tLVxubW0vYWxsb2NfdGFnLmMtNDUxLVx0Y2FzZSBBTExPQ0lORk9fSU9DX0NPTlRFTlRfSUQ6XG5tbS9hbGxvY190YWcuYzo0NTI6XHRcdHJldCA9IGFsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZChmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSwgYXJnKTtcbm1tL2FsbG9jX3RhZy5jLTQ1My1cdFx0YnJlYWs7XG5tbS9hbGxvY190YWcuYy00NTQtXHRjYXNlIEFMTE9DSU5GT19JT0NfR0VUX0FUOlxubW0vYWxsb2NfdGFnLmM6NDU1Olx0XHRyZXQgPSBhbGxvY2luZm9faW9jdGxfZ2V0X2F0KGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhLCBhcmcpO1xubW0vYWxsb2NfdGFnLmMtNDU2LVx0XHRicmVhaztcbm1tL2FsbG9jX3RhZy5jLTQ1Ny1cdGNhc2UgQUxMT0NJTkZPX0lPQ19HRVRfTkVYVDpcbm1tL2FsbG9jX3RhZy5jOjQ1ODpcdFx0cmV0ID0gYWxsb2NpbmZvX2lvY3RsX2dldF9uZXh0KGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhLCBhcmcpO1xubW0vYWxsb2NfdGFnLmMtNDU5LVx0XHRicmVhaztcbi0tXG5tbS9hbGxvY190YWcuYz00Njk9c3RhdGljIGxvbmcgYWxsb2NpbmZvX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5tbS9hbGxvY190YWcuYy00NzEte1xubW0vYWxsb2NfdGFnLmM6NDcyOlx0cmV0dXJuIGFsbG9jaW5mb19pb2N0bChmaWxlLCBjbWQsICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIoYXJnKSk7XG5tbS9hbGxvY190YWcuYy00NzMtfVxuLS1cbm1tL2FsbG9jX3RhZy5jPTQ3Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIGFsbG9jaW5mb19wcm9jX29wcyA9IHtcbi0tXG5tbS9hbGxvY190YWcuYy00ODAtXHQucHJvY19yZWxlYXNlXHRcdD0gYWxsb2NpbmZvX3JlbGVhc2UsXG5tbS9hbGxvY190YWcuYzo0ODE6XHQucHJvY19pb2N0bFx0XHQ9IGFsbG9jaW5mb19pb2N0bCxcbm1tL2FsbG9jX3RhZy5jLTQ4Mi0jaWZkZWYgQ09ORklHX0NPTVBBVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxODozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDEzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBgL3Byb2MvYWxsb2NpbmZvYCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYC9wcm9jL2FsbG9jaW5mb2AuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYGlvY3RsYCBhcyB0aGUga2V5IHBvaW50IG9mIGludGVyYWN0aW9uIGZvciB0aGlzLiBXZSYjMzk7cmUgb2J2aW91c2x5IHRyeWluZyB0byBhY2Nlc3Mgc29tZSBtZW1vcnkgYWxsb2NhdGlvbiBzdGF0aXN0aWNzIG9yIHBvdGVudGlhbGx5IG1hbmlwdWxhdGUgaG93IHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgaGFuZGxlcyB0YWdzIG9yIHJlbGF0ZWQgaW5mb3JtYXRpb24sIGxpa2VseSBmb3Igc29tZSBkZWJ1Z2dpbmcgb3IgcHJvZmlsaW5nIHB1cnBvc2UuIFdoZXJlIHdvdWxkIHRoZSBpbXBsZW1lbnRhdGlvbiBsaXZlPyBUaGUga2VybmVsJiMzOTtzIGAvcHJvY2AgZmlsZXN5c3RlbSBoYW5kbGVycyBhcmUgb2Z0ZW4gZm91bmQgaW4gdGhlIHJlbGV2YW50IHN1YnN5c3RlbSYjMzk7cyBjb2RlLCBzbyBsZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbW0vYWxsb2NfdGFnLmNgLiBHaXZlbiB0aGUgY29udGV4dCBvZiBgL3Byb2MvYWxsb2NpbmZvYCwgYGFsbG9jaW5mb19wcm9jX29wc2AgaXMgdGhlIGxpa2VseSBjYW5kaWRhdGUgZm9yIHRoZSBmaWxlIG9wZXJhdGlvbnMgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIGBpb2N0bGAgaGFuZGxlci4gSXQgd291bGQgYmUgYSBzdGFydGluZyBwb2ludCB0byBzZWUgaG93IHRoZSBpb2N0bCBjYWxscyBhcmUgZGVmaW5lZCBhbmQgd2hhdCBwYXJhbWV0ZXJzIGl0IGFjY2VwdHMuIEZyb20gdGhlcmUgSSBjYW4gZXhwbG9yZSB0aGUgaW1wbGVtZW50YXRpb24gYW5kIGxvZ2ljIGZsb3cgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiBpbmZvcm1hdGlvbiBhbmQgaG93IHRoZSBwcm9jZXNzIGludGVyYWN0cyB3aXRoIHRoYXQgZGF0YS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9hbGxvY190YWcuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDcwOlx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFyZylcbiA0NzE6XHR7XG4gNDcyOlx0XHRyZXR1cm4gYWxsb2NpbmZvX2lvY3RsKGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpKTtcbiA0NzM6XHR9XG4gNDc0Olx0I2VuZGlmXG4gNDc1Olx0XG4gNDc2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBhbGxvY2luZm9fcHJvY19vcHMgPSB7XG4gNDc3Olx0XHQucHJvY19vcGVuXHRcdD0gYWxsb2NpbmZvX29wZW4sXG4gNDc4Olx0XHQucHJvY19yZWFkX2l0ZXJcdFx0PSBzZXFfcmVhZF9pdGVyLFxuIDQ3OTpcdFx0LnByb2NfbHNlZWtcdFx0PSBzZXFfbHNlZWssXG4gNDgwOlx0XHQucHJvY19yZWxlYXNlXHRcdD0gYWxsb2NpbmZvX3JlbGVhc2UsXG4gNDgxOlx0XHQucHJvY19pb2N0bFx0XHQ9IGFsbG9jaW5mb19pb2N0bCxcbiA0ODI6XHQjaWZkZWYgQ09ORklHX0NPTVBBVFxuIDQ4MzpcdFx0LnByb2NfY29tcGF0X2lvY3RsXHQ9IGFsbG9jaW5mb19jb21wYXRfaW9jdGwsXG4gNDg0Olx0I2VuZGlmXG4gNDg1Olx0fTtcbiA0ODY6XHRcbiA0ODc6XHRzaXplX3QgYWxsb2NfdGFnX3RvcF91c2VycyhzdHJ1Y3QgY29kZXRhZ19ieXRlcyAqdGFncywgc2l6ZV90IGNvdW50LCBib29sIGNhbl9zbGVlcClcbiA0ODg6XHR7XG4gNDg5Olx0XHRzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBpdGVyO1xuIDQ5MDpcdFx0c3RydWN0IGNvZGV0YWcgKmN0O1xuIDQ5MTpcdFx0c3RydWN0IGNvZGV0YWdfYnl0ZXMgbjtcbiA0OTI6XHRcdHVuc2lnbmVkIGludCBpLCBuciA9IDA7XG4gNDkzOlx0XG4gNDk0Olx0XHRpZiAoSVNfRVJSX09SX05VTEwoYWxsb2NfdGFnX2N0dHlwZSkpXG4gNDk1Olx0XHRcdHJldHVybiAwO1xuIDQ5NjpcdFxuIDQ5NzpcdFx0aWYgKGNhbl9zbGVlcClcbiA0OTg6XHRcdFx0Y29kZXRhZ19sb2NrX21vZHVsZV9saXN0KGFsbG9jX3RhZ19jdHR5cGUpO1xuIDQ5OTpcdFx0ZWxzZSBpZiAoIWNvZGV0YWdfdHJ5bG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKSlcbiA1MDA6XHRcdFx0cmV0dXJuIDA7XG4gNTAxOlx0XG4gNTAyOlx0XHRpdGVyID0gY29kZXRhZ19nZXRfY3RfaXRlcihhbGxvY190YWdfY3R0eXBlKTtcbiA1MDM6XHRcdHdoaWxlICgoY3QgPSBjb2RldGFnX25leHRfY3QoXHUwMDI2aXRlcikpKSB7XG4gNTA0Olx0XHRcdHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgY291bnRlciA9IGFsbG9jX3RhZ19yZWFkKGN0X3RvX2FsbG9jX3RhZyhjdCkpO1xuIDUwNTpcdFxuIDUwNjpcdFx0XHRuLmN0XHQ9IGN0O1xuIDUwNzpcdFx0XHRuLmJ5dGVzID0gY291bnRlci5ieXRlcztcbiA1MDg6XHRcbiA1MDk6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnI7IGkmIzQzOyYjNDM7KVxuIDUxMDpcdFx0XHRcdGlmIChuLmJ5dGVzIFx1MDAzZSB0YWdzW2ldLmJ5dGVzKVxuIDUxMTpcdFx0XHRcdFx0YnJlYWs7XG4gNTEyOlx0XG4gNTEzOlx0XHRcdGlmIChpIFx1MDAzYyBjb3VudCkge1xuIDUxNDpcdFx0XHRcdG5yIC09IG5yID09IGNvdW50O1xuIDUxNTpcdFx0XHRcdG1lbW1vdmUoXHUwMDI2dGFnc1tpICYjNDM7IDFdLFxuIDUxNjpcdFx0XHRcdFx0XHUwMDI2dGFnc1tpXSxcbiA1MTc6XHRcdFx0XHRcdHNpemVvZih0YWdzWzBdKSAqIChuciAtIGkpKTtcbiA1MTg6XHRcdFx0XHRuciYjNDM7JiM0Mzs7XG4gNTE5Olx0XHRcdFx0dGFnc1tpXSA9IG47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIGAvcHJvYy9hbGxvY2luZm9gJiMzOTtzIGBpb2N0bGAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGlvY3RsYCByb3V0aW5lLCBhbmQgaXQmIzM5O3MgcGFydCBvZiB0aGUgYC9wcm9jL2FsbG9jaW5mb2AgaW50ZXJmYWNlLiBUaGF0JiMzOTtzIGRlZmluaXRlbHkgd2l0aGluIGNvcmUga2VybmVsIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBtZWNoYW5pc21zLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgYSB3b3J0aHdoaWxlIHRhcmdldCBmb3IgZnV6emluZz8gQWJzb2x1dGVseSwgaXQgbG9va3MgbGlrZSBhIGdvb2QgY2FuZGlkYXRlLiBUaGUgZmFjdCB0aGF0IGl0IG1hbmlwdWxhdGVzIHRoZSBVQVBJIHN0cnVjdCBsYXlvdXQgYW5kIHRoZSBpb2N0bCBoYW5kbGluZyBpdHNlbGYgaXMgYSBrZXkgcG9pbnQuIFRoaXMgc3VnZ2VzdHMgcG90ZW50aWFsIGZvciBtZW1vcnkgY29ycnVwdGlvbiBvciBvdGhlciBpc3N1ZXMgaWYgbWFsZm9ybWVkIGRhdGEgaXMgcHJvdmlkZWQuIExldCYjMzk7cyBzZWUuLi5JIHNlZSB0aGF0IGBBTExPQ0lORk9fSU9DX0dFVF9BVGAgdXNlcyBgbWF0Y2hlc19maWx0ZXJgLiBUaW1lIHRvIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGBDT05GSUdfYCBvcHRpb25zIHRoYXQgbmVlZCB0byBiZSBlbmFibGVkIHRvIGFsbG93IHRoaXMgdG8gZXZlbiBiZSBleHBvc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY2luZm9fcHJvY19vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9hbGxvY190YWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9hbGxvY190YWcuYz00Njk9c3RhdGljIGxvbmcgYWxsb2NpbmZvX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5tbS9hbGxvY190YWcuYy00NzUtXG5tbS9hbGxvY190YWcuYzo0NzY6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBhbGxvY2luZm9fcHJvY19vcHMgPSB7XG5tbS9hbGxvY190YWcuYy00NzctXHQucHJvY19vcGVuXHRcdD0gYWxsb2NpbmZvX29wZW4sXG4tLVxubW0vYWxsb2NfdGFnLmM9MTMxNj1zdGF0aWMgaW50IF9faW5pdCBhbGxvY190YWdfaW5pdCh2b2lkKVxuLS1cbm1tL2FsbG9jX3RhZy5jLTEzMzctXG5tbS9hbGxvY190YWcuYzoxMzM4Olx0aWYgKCFwcm9jX2NyZWF0ZShBTExPQ0lORk9fRklMRV9OQU1FLCAwNDAwLCBOVUxMLCBcdTAwMjZhbGxvY2luZm9fcHJvY19vcHMpKSB7XG5tbS9hbGxvY190YWcuYy0xMzM5LVx0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSAlcyBmaWxlXFxuXCYjMzQ7LCBBTExPQ0lORk9fRklMRV9OQU1FKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTg6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU5MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipGaW5kaW5nIHRoZSBLY29uZmlnIE9wdGlvbiBmb3IgYG1tL2FsbG9jX3RhZy5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgS2NvbmZpZyBvcHRpb24gdGhhdCBjb250cm9scyB0aGUgYnVpbGQgYW5kIGluY2x1c2lvbiBvZiBgbW0vYWxsb2NfdGFnLmNgLiBUaGlzIGlzbiYjMzk7dCBhIHBhcnRpY3VsYXJseSBjb21wbGV4IHRhc2ssIGJ1dCBJIG5lZWQgdG8gYXBwcm9hY2ggaXQgbWV0aG9kaWNhbGx5LiBJIGNvdWxkIGp1c3QgZ3JlcCB0aHJvdWdoIHRoZSBrZXJuZWwgc291cmNlIGZvciBpdCwgYnV0IHRoYXQmIzM5O3MgYSBicnV0ZS1mb3JjZSBtZXRob2QuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIHN5c3RlbSwgdGhlcmUmIzM5O3MgbGlrZWx5IGEgbW9yZSBlbGVnYW50IGFuZCBlZmZpY2llbnQgd2F5IHRvIGFjaGlldmUgdGhpcywgYXZvaWRpbmcgZmFsc2UgcG9zaXRpdmVzLgoKRmlyc3QsIEkmIzM5O2xsIGNvbnNpZGVyIGhvdyB0aGlzIGZpbGUgZml0cyBpbnRvIHRoZSBsYXJnZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBgbW0vYWxsb2NfdGFnLmNgIGlzIHByZXR0eSBleHBsaWNpdC4gVGhlIGZpbGVuYW1lIGl0c2VsZiBsaWtlbHkgZ2l2ZXMgYSBzdHJvbmcgaGludC4gSSB3b3VsZCBzdGFydCBieSBleHBsb3JpbmcgS2NvbmZpZyBmaWxlcyB3aXRoaW4gdGhlIGBtbWAgZGlyZWN0b3J5LiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgYEtjb25maWdgIGZpbGVzIGxvY2F0ZWQgY2xvc2VzdCB0byB0aGUgZmlsZSBpdHNlbGYsIHRoZW4gZXhwYW5kaW5nIHRoZSBzZWFyY2ggaWYgbmVlZGVkLCB0byB1bmRlcnN0YW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgYW5kIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgYSBLY29uZmlnIG9wdGlvbiB0aGF0IGRpcmVjdGx5IHJlZmVyZW5jZXMgb3IgY29udHJvbHMgdGhlIGluY2x1c2lvbiBvZiB0aGlzIHNwZWNpZmljIGZpbGUgb3IsIHBlcmhhcHMsIGEgbGFyZ2VyIGZlYXR1cmUgaXQmIzM5O3MgcGFydCBvZi4KCklmIEkmIzM5O20gdW5hYmxlIHRvIGZpbmQgYSBkZWZpbml0aXZlIEtjb25maWcgb3B0aW9uLCBJJiMzOTtsbCB0aGVuIG1vdmUgaW50byBjcm9zcy1yZWZlcmVuY2luZy4gSSBjb3VsZCBsZXZlcmFnZSBhIHN5bWJvbCBzZWFyY2ggdG8gZmluZCBhbGwgcmVmZXJlbmNlcyB0byBgYWxsb2NfdGFnYCAob3Igd2hhdGV2ZXIgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBpcykuIEkmIzM5O2xsIGNyb3NzLXJlZmVyZW5jZSB3aGF0IG9wdGlvbnMgcmVmZXJlbmNlIHRoZSBzeW1ib2wuIFRoaXMgc2hvdWxkIGxlYWQgbWUgdG8gdGhlIG1vc3QgZGlyZWN0IGNvbnRyb2wgcG9pbnQgZm9yIHRoZSBmZWF0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGFjY291bnQgZm9yIHBvdGVudGlhbCBpbmRpcmVjdCBkZXBlbmRlbmNpZXMg4oCTIHBlcmhhcHMgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIG9ubHkgZW5hYmxlZCBhcyBwYXJ0IG9mIGEgbGFyZ2VyIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUgc2V0LgoKVWx0aW1hdGVseSwgSSBleHBlY3QgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGFsbG93aW5nIG1lIHRvIHRhaWxvciBteSBrZXJuZWwgY29uZmlndXJhdGlvbiBhY2NvcmRpbmdseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfdGFnLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xNDg9b2JqLSQoQ09ORklHX0xBWllfTU1VX01PREVfS1VOSVRfVEVTVCkgJiM0Mzs9IHRlc3RzL2xhenlfbW11X21vZGVfa3VuaXQub1xubW0vTWFrZWZpbGU6MTQ5Om9iai0kKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HKSAmIzQzOz0gYWxsb2NfdGFnLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTg6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMDIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBBbGxvY2F0aW9uIFByb2ZpbGluZyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRoZSBrZXkgaGVyZSBzZWVtcyB0byBiZSBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBpcyBjb25maWd1cmVkIGFuZCB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIExldCBtZSBzZWUuLi4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJJiMzOTtsbCBmaW5kIGl0IGRlZmluZWQgaW4gc29tZXRoaW5nIGxpa2UgYGxpYi9LY29uZmlnLmRlYnVnYCwgb3IgbWF5YmUgYGtlcm5lbC9LY29uZmlnLmRlYnVnYCwgb3IgcG90ZW50aWFsbHkgc29tZXdoZXJlIGVsc2Ugd2hlcmUgZGVidWdnaW5nIGZlYXR1cmVzIGFyZSBkZXNjcmliZWQuIExldCBtZSBnbyBjaGVjayB0aGF0IG91dCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz0zMTE9Y29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xuLS1cbm1tL0tjb25maWcuZGVidWctMzIzLVxubW0vS2NvbmZpZy5kZWJ1ZzozMjQ6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcbm1tL0tjb25maWcuZGVidWctMzI1LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0zMzctXG5tbS9LY29uZmlnLmRlYnVnOjMzODpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcbm1tL0tjb25maWcuZGVidWctMzM5LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTM0Mi1cbm1tL0tjb25maWcuZGVidWc6MzQzOmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXG5tbS9LY29uZmlnLmRlYnVnLTM0NC1cdGJvb2wgXCYjMzQ7TWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsZXIgZGVidWdnaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTE3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEZWJ1Z2dpbmcgS2NvbmZpZyBpbiBtbSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBCYXNlZCBvbiB3aGF0IEkmIzM5O20gc2VlaW5nLCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGxvb2sgaW50byB0aGUgZGVidWcgS2NvbmZpZyBzZXR0aW5ncywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG1tYCBzdWJzeXN0ZW0uIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byB0aGUgZmlsZSBgbW0vS2NvbmZpZy5kZWJ1Z2AsIGFuZCBJIHRoaW5rIGxpbmUgMzI0IGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gVGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBzcG90IGZvciB0aGUgdHlwZSBvZiBjb25maWd1cmF0aW9uIEkmIzM5O20gc3VzcGVjdGluZyBpcyBjYXVzaW5nIHRoZSBiZWhhdmlvciBJJiMzOTttIHdpdG5lc3NpbmcuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMxNTpcdFx0ICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzdWNjZXNzLCByZXRyeSBhbmQgZmFpbHVyZSBjb3VudGVycyBvZiBwYWdlXG4gMzE2Olx0XHQgIGZhdWx0cyBoYW5kbGVkIHVuZGVyIHByb3RlY3Rpb24gb2YgcGVyLXZtYSBsb2Nrcy4gV2hlbiBlbmFibGVkLCB0aGVcbiAzMTc6XHRcdCAgY291bnRlcnMgYXJlIGV4cG9zZWQgaW4gL3Byb2Mvdm1zdGF0LiBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWZ1bCBmb3JcbiAzMTg6XHRcdCAga2VybmVsIGRldmVsb3BlcnMgdG8gZXZhbHVhdGUgZWZmZWN0aXZlbmVzcyBvZiBwZXItdm1hIGxvY2tzIGFuZCB0b1xuIDMxOTpcdFx0ICBpZGVudGlmeSBwYXRob2xvZ2ljYWwgY2FzZXMuIENvdW50aW5nIHRoZXNlIGV2ZW50cyBpbnRyb2R1Y2VzIGEgc21hbGxcbiAzMjA6XHRcdCAgb3ZlcmhlYWQgaW4gdGhlIHBhZ2UgZmF1bHQgcGF0aC5cbiAzMjE6XHRcbiAzMjI6XHRcdCAgSWYgaW4gZG91YnQsIHNheSBOLlxuIDMyMzpcdFxuIDMyNDpcdGNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HXG4gMzI1Olx0XHRib29sIFwmIzM0O0VuYWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmdcJiMzNDtcbiAzMjY6XHRcdGRlZmF1bHQgblxuIDMyNzpcdFx0ZGVwZW5kcyBvbiBNTVVcbiAzMjg6XHRcdGRlcGVuZHMgb24gUFJPQ19GU1xuIDMyOTpcdFx0ZGVwZW5kcyBvbiAhREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVXG4gMzMwOlx0XHRzZWxlY3QgQ09ERV9UQUdHSU5HXG4gMzMxOlx0XHRzZWxlY3QgUEFHRV9FWFRFTlNJT05cbiAzMzI6XHRcdHNlbGVjdCBTTEFCX09CSl9FWFRcbiAzMzM6XHRcdGhlbHBcbiAzMzQ6XHRcdCAgVHJhY2sgYWxsb2NhdGlvbiBzb3VyY2UgY29kZSBhbmQgcmVjb3JkIHRvdGFsIGFsbG9jYXRpb24gc2l6ZVxuIDMzNTpcdFx0ICBpbml0aWF0ZWQgYXQgdGhhdCBjb2RlIGxvY2F0aW9uLiBUaGUgbWVjaGFuaXNtIGNhbiBiZSB1c2VkIHRvIHRyYWNrXG4gMzM2Olx0XHQgIG1lbW9yeSBsZWFrcyB3aXRoIGEgbG93IHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgaW1wYWN0LlxuIDMzNzpcdFxuIDMzODpcdGNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxuIDMzOTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGJ5IGRlZmF1bHRcJiMzNDtcbiAzNDA6XHRcdGRlZmF1bHQgeVxuIDM0MTpcdFx0ZGVwZW5kcyBvbiBNRU1fQUxMT0NfUFJPRklMSU5HXG4gMzQyOlx0XG4gMzQzOlx0Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcbiAzNDQ6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsZXIgZGVidWdnaW5nXCYjMzQ7XG4gMzQ1Olx0XHRkZWZhdWx0IG5cbiAzNDY6XHRcdGRlcGVuZHMgb24gTUVNX0FMTE9DX1BST0ZJTElOR1xuIDM0NzpcdFx0c2VsZWN0IE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXG4gMzQ4Olx0XHRoZWxwXG4gMzQ5Olx0XHQgIEFkZHMgd2FybmluZ3Mgd2l0aCBoZWxwZnVsIGVycm9yIG1lc3NhZ2VzIGZvciBtZW1vcnkgYWxsb2NhdGlvblxuIDM1MDpcdFx0ICBwcm9maWxpbmcuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjM0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgYWxsb2NpbmZvX2lvY3RsYCBGdW5jdGlvbiBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBgTUVNX0FMTE9DX1BST0ZJTElOR2AgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIHRvIGNvbnNpZGVyIGhlcmUuIFJpZ2h0LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgaW9jdGwgZnVuY3Rpb25zIOKAkyB3ZSYjMzk7dmUgZ290IGBhbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWRgLCBgYWxsb2NpbmZvX2lvY3RsX2dldF9hdGAsIGBhbGxvY2luZm9faW9jdGxfZ2V0X25leHRgLCBgYWxsb2NpbmZvX2lvY3RsYCwgYW5kIGBhbGxvY2luZm9fY29tcGF0X2lvY3RsYC4gR2l2ZW4gdGhlIGxhbmRzY2FwZSwgYGFsbG9jaW5mb19pb2N0bGAgaXMgdGhlIHByaW1hcnkgdGFyZ2V0IGZvciBmdXp6aW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBxdWlja2x5IHZlcmlmeSB3aGV0aGVyIGBhbGxvY2luZm9faW9jdGxgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBZZXMsIGl0IGlzOiBgc3RhdGljIGxvbmcgYWxsb2NpbmZvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIF9fYXJnKWAuIFdhaXQgYSBtaW51dGUsIHN0YXRpYyBmdW5jdGlvbnMgYXJlICpvZnRlbiogaW5saW5lZCwgYnV0IHRoYXQmIzM5O3Mgbm90IGhhcHBlbmluZyBoZXJlLiBTaW5jZSBpdHMgYWRkcmVzcyBpcyBiZWluZyBhc3NpZ25lZCB0byBgYWxsb2NpbmZvX3Byb2Nfb3BzLnByb2NfaW9jdGxgLCB0aGUgY29tcGlsZXIgKmNhbiYjMzk7dCogaW5saW5lIGl0LiBJbnRlcmVzdGluZy4gT24gdGhlIG90aGVyIGhhbmQsIGBhbGxvY2luZm9faW9jdGxfZ2V0X2F0YCBpcyBhbHNvIHN0YXRpYywgYnV0IHRoYXQgZnVuY3Rpb24gKmlzKiBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgYWxsb2NpbmZvX2lvY3RsYC4KCkxldCYjMzk7cyBjb25maXJtIHRoYXQgYGFsbG9jaW5mb19pb2N0bGAgaXMgdGhlIHJpZ2h0IGZ1bmN0aW9uIHRvIGZvY3VzIG9uLiBZZXAsIGl0IHNlZW1zIHRvIGJlIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgaW9jdGwgY2FsbHMsIGFuZCB0aGF0IG1ha2VzIGl0IGFuIGV4Y2VsbGVudCBmb2NhbCBwb2ludC4gSSBzaG91bGQgYWxzbyBpbmNsdWRlIGBhbGxvY2luZm9fY29tcGF0X2lvY3RsYCBpbiB0aGUgbGlzdC4KCk9rYXksIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYG1tL2FsbG9jX3RhZy5jYCB0byBlbnN1cmUgSSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY2luZm9faW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9hbGxvY190YWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9hbGxvY190YWcuYz0yMjQ9c3RhdGljIHZvaWQgYWxsb2NpbmZvX3RvX3BhcmFtcyhzdHJ1Y3QgY29kZXRhZyAqY3QsXG4tLVxubW0vYWxsb2NfdGFnLmMtMjQzLSAqL1xubW0vYWxsb2NfdGFnLmM6MjQ0OnN0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9jb250ZW50X2lkKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCBfX3VzZXIgKmFyZylcbm1tL2FsbG9jX3RhZy5jLTI0NS17XG4tLVxubW0vYWxsb2NfdGFnLmM9MjYxPXN0YXRpYyBib29sIG1hdGNoZXNfZmlsdGVyKHN0cnVjdCBjb2RldGFnICpjdCwgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcixcbi0tXG5tbS9hbGxvY190YWcuYy0zMTctICovXG5tbS9hbGxvY190YWcuYzozMTg6c3RhdGljIGludCBhbGxvY2luZm9faW9jdGxfZ2V0X2F0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCBfX3VzZXIgKmFyZylcbm1tL2FsbG9jX3RhZy5jLTMxOS17XG4tLVxubW0vYWxsb2NfdGFnLmMtMzkyLSAqL1xubW0vYWxsb2NfdGFnLmM6MzkzOnN0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCBfX3VzZXIgKmFyZylcbm1tL2FsbG9jX3RhZy5jLTM5NC17XG4tLVxubW0vYWxsb2NfdGFnLmMtNDQzLSAqL1xubW0vYWxsb2NfdGFnLmM6NDQ0OnN0YXRpYyBsb25nIGFsbG9jaW5mb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbm1tL2FsbG9jX3RhZy5jLTQ0NS1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyBfX2FyZylcbi0tXG5tbS9hbGxvY190YWcuYy00NTEtXHRjYXNlIEFMTE9DSU5GT19JT0NfQ09OVEVOVF9JRDpcbm1tL2FsbG9jX3RhZy5jOjQ1MjpcdFx0cmV0ID0gYWxsb2NpbmZvX2lvY3RsX2dldF9jb250ZW50X2lkKGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhLCBhcmcpO1xubW0vYWxsb2NfdGFnLmMtNDUzLVx0XHRicmVhaztcbm1tL2FsbG9jX3RhZy5jLTQ1NC1cdGNhc2UgQUxMT0NJTkZPX0lPQ19HRVRfQVQ6XG5tbS9hbGxvY190YWcuYzo0NTU6XHRcdHJldCA9IGFsbG9jaW5mb19pb2N0bF9nZXRfYXQoZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEsIGFyZyk7XG5tbS9hbGxvY190YWcuYy00NTYtXHRcdGJyZWFrO1xubW0vYWxsb2NfdGFnLmMtNDU3LVx0Y2FzZSBBTExPQ0lORk9fSU9DX0dFVF9ORVhUOlxubW0vYWxsb2NfdGFnLmM6NDU4Olx0XHRyZXQgPSBhbGxvY2luZm9faW9jdGxfZ2V0X25leHQoZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEsIGFyZyk7XG5tbS9hbGxvY190YWcuYy00NTktXHRcdGJyZWFrO1xuLS1cbm1tL2FsbG9jX3RhZy5jPTQ2OT1zdGF0aWMgbG9uZyBhbGxvY2luZm9fY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbm1tL2FsbG9jX3RhZy5jLTQ3MS17XG5tbS9hbGxvY190YWcuYzo0NzI6XHRyZXR1cm4gYWxsb2NpbmZvX2lvY3RsKGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpKTtcbm1tL2FsbG9jX3RhZy5jLTQ3My19XG4tLVxubW0vYWxsb2NfdGFnLmM9NDc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgYWxsb2NpbmZvX3Byb2Nfb3BzID0ge1xuLS1cbm1tL2FsbG9jX3RhZy5jLTQ4MC1cdC5wcm9jX3JlbGVhc2VcdFx0PSBhbGxvY2luZm9fcmVsZWFzZSxcbm1tL2FsbG9jX3RhZy5jOjQ4MTpcdC5wcm9jX2lvY3RsXHRcdD0gYWxsb2NpbmZvX2lvY3RsLFxubW0vYWxsb2NfdGFnLmMtNDgyLSNpZmRlZiBDT05GSUdfQ09NUEFUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjQzCgkJCQkJCQlvdXRwdXQ6IDExNQoJCQkJCQkJdGhvdWdodHM6IDQ3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGhpZ2hsaWdodCBmdW5jdGlvbnMgbGlrZSBgYWxsb2NpbmZvX2lvY3RsYCwgYGFsbG9jaW5mb19jb21wYXRfaW9jdGxgLCBhbmQgdGhlIG90aGVycyBhcyBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBIb3dldmVyLCB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSBhc2tzIG1lIHRvIGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhhdCBtYWtlcyBzZW5zZTsgaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIGFyZSBsZXNzIGxpa2VseSB0byBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgYW5kIHRoZXJlZm9yZSBoYXJkZXIgdG8gdGFyZ2V0IGRpcmVjdGx5LgoKU2luY2UgYm90aCBgYWxsb2NpbmZvX2lvY3RsYCBhbmQgYGFsbG9jaW5mb19jb21wYXRfaW9jdGxgIGFyZSBzdGF0aWMsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhleSBhcmUgbm90IGlubGluZWQuIFRoZWlyIGFkZHJlc3MgaXMgdGFrZW4sIHNvIEkmIzM5O20gcmVhc29uYWJseSBjb25maWRlbnQgdGhleSB3b24mIzM5O3QgYmUgaW5saW5lZC4gSSBjYW4gdXNlIHRob3NlIGFzIGZvY3VzIHN5bWJvbHMuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBhbnkgYWRkaXRpb25hbCBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkLiBgTUVNX0FMTE9DX1BST0ZJTElOR2Agc2VlbXMgdG8gYmUgdGhlIGtleSwgZGVwZW5kaW5nIG9uIGBNTVVgLCBgUFJPQ19GU2AsIGFuZCBgIURFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVWAuICBgUFJPQ19GU2AgaXMgcHJldHR5IHN0YW5kYXJkLCBzbyBgTUVNX0FMTE9DX1BST0ZJTElOR2AgaXMgdGhlIGltcG9ydGFudCBjb25maWcuCgpMb29raW5nIGF0IHRoZSBwYXRjaCBpdHNlbGYsIGl0JiMzOTtzIG1vZGlmeWluZyBgc3RydWN0IGFsbG9jaW5mb190YWdgIGFuZCBgc3RydWN0IGFsbG9jaW5mb19maWx0ZXJgIGluIGBpbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmhgLiBJdCBhbHNvIHVwZGF0ZXMgYG1hdGNoZXNfZmlsdGVyYCBpbiBgbW0vYWxsb2NfdGFnLmNgLCBhbmQgYSBjb21tZW50IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvYWxsb2NpbmZvX2lvY3RsX3Rlc3QuY2AuICBUaGlzIGlzIGEgVUFQSSBjaGFuZ2UgaW1wYWN0aW5nIHRoZSBgL3Byb2MvYWxsb2NpbmZvYCBpb2N0bHMgZGlyZWN0bHksIHdoaWNoIG1lYW5zIGl0IGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZy4KCk15IGNvbmNsdXNpb24gaXMgY2xlYXI6CgoqICAgKipXb3J0aEZ1enppbmc6IHRydWUqKgoqICAgKipGb2N1c1N5bWJvbHM6KiogYGFsbG9jaW5mb19pb2N0bGAsIGBhbGxvY2luZm9fY29tcGF0X2lvY3RsYAoqICAgKipFbmFibGVDb25maWdzOioqIGBNRU1fQUxMT0NfUFJPRklMSU5HYAoKKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBVQVBJIHN0cnVjdCBsYXlvdXQgZm9yIHRoZSBgL3Byb2MvYWxsb2NpbmZvYCBpb2N0bCBhbmQgdXBkYXRlcyB0aGUgY29ycmVzcG9uZGluZyBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMgaW4gdGhlIGtlcm5lbC4gRnV6emluZyB0aGUgaW9jdGwgaGFuZGxlciBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBuZXcgc3RydWN0IGxheW91dCBhbmQgZmlsdGVyaW5nIGxvZ2ljIGFyZSBoYW5kbGVkIGNvcnJlY3RseSB3aXRob3V0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbG9naWMgZXJyb3JzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNX0FMTE9DX1BST0ZJTElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jaW5mb19pb2N0bCYjMzQ7LAogICAgJiMzNDthbGxvY2luZm9fY29tcGF0X2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBVQVBJIHN0cnVjdCBsYXlvdXQgZm9yIHRoZSAvcHJvYy9hbGxvY2luZm8gaW9jdGwgYW5kIHVwZGF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGluIHRoZSBrZXJuZWwuIEZ1enppbmcgdGhlIGlvY3RsIGhhbmRsZXIgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgbmV3IHN0cnVjdCBsYXlvdXQgYW5kIGZpbHRlcmluZyBsb2dpYyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgd2l0aG91dCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGxvZ2ljIGVycm9ycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNX0FMTE9DX1BST0ZJTElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jaW5mb19pb2N0bCYjMzQ7LAogICAgJiMzNDthbGxvY2luZm9fY29tcGF0X2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBVQVBJIHN0cnVjdCBsYXlvdXQgZm9yIHRoZSAvcHJvYy9hbGxvY2luZm8gaW9jdGwgYW5kIHVwZGF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGluIHRoZSBrZXJuZWwuIEZ1enppbmcgdGhlIGlvY3RsIGhhbmRsZXIgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgbmV3IHN0cnVjdCBsYXlvdXQgYW5kIGZpbHRlcmluZyBsb2dpYyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgd2l0aG91dCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGxvZ2ljIGVycm9ycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE4OjM3OjQ4LjIyOTA2MzgyNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NjE4ODk2MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTV9BTExPQ19QUk9GSUxJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY2luZm9faW9jdGxcIixcbiAgICBcImFsbG9jaW5mb19jb21wYXRfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVUFQSSBzdHJ1Y3QgbGF5b3V0IGZvciB0aGUgL3Byb2MvYWxsb2NpbmZvIGlvY3RsIGFuZCB1cGRhdGVzIHRoZSBjb3JyZXNwb25kaW5nIGZpbHRlciBtYXRjaGluZyBsb2dpYyBpbiB0aGUga2VybmVsLiBGdXp6aW5nIHRoZSBpb2N0bCBoYW5kbGVyIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIG5ldyBzdHJ1Y3QgbGF5b3V0IGFuZCBmaWx0ZXJpbmcgbG9naWMgYXJlIGhhbmRsZWQgY29ycmVjdGx5IHdpdGhvdXQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBsb2dpYyBlcnJvcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE4OjM3OjQ4LjIyOTA3MDY4NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxNzk0MTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjExYzNjZmE5YzE1MTAwMDE0YjYzNGJiZmY1NGVlYzA1Y2I5NjQyYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyA0IDE4OjM3OjQ3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9hbGxvY190YWcuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9hbGxvY190YWcuaFxcbmluZGV4IDI3MGY2OTNiMTgyMjAuLmUzYWQ5NDQ0NDg2NGQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2FsbG9jX3RhZy5oXFxuQEAgLTMxLDggKzMxLDYgQEAgc3RydWN0IGFsbG9jaW5mb190YWcge1xcbiBcXHRjaGFyIGZ1bmN0aW9uW0FMTE9DSU5GT19TVFJfU0laRV07XFxuIFxcdGNoYXIgZmlsZW5hbWVbQUxMT0NJTkZPX1NUUl9TSVpFXTtcXG4gXFx0X191NjQgbGluZW5vO1xcbi1cXHQvKiBmaWx0ZXIgY3JpdGVyaWEgb25seTsgc2VlIGFsbG9jaW5mb19jb3VudGVyLmFjY3VyYXRlIGZvciBhY3R1YWwgYWNjdXJhY3kgKi9cXG4tXFx0X191NjQgaW5hY2N1cmF0ZTtcXG4gfTtcXG4gXFxuIC8qIFRoZSBhbGlnbm1lbnQgZW5zdXJlcyAzMi1iaXQgY29tcGF0aWJsZSBpbnRlcmZhY2VzIGFyZSBub3QgYnJva2VuICovXFxuQEAgLTc0LDYgKzcyLDggQEAgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIge1xcbiBcXHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZyBmaWVsZHM7XFxuIFxcdF9fdTY0IG1pbl9zaXplO1xcbiBcXHRfX3U2NCBtYXhfc2l6ZTtcXG4rXFx0LyogZmlsdGVyIGNyaXRlcmlhIG9ubHk7IHNlZSBhbGxvY2luZm9fY291bnRlci5hY2N1cmF0ZSBmb3IgYWN0dWFsIGFjY3VyYWN5ICovXFxuK1xcdF9fdTY0IGluYWNjdXJhdGU7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgYWxsb2NpbmZvX2dldF9hdCB7XFxuZGlmZiAtLWdpdCBhL21tL2FsbG9jX3RhZy5jIGIvbW0vYWxsb2NfdGFnLmNcXG5pbmRleCA1MmFlY2UyN2IwMGUwLi44NGM1YzM3ODNjYTQ2IDEwMDY0NFxcbi0tLSBhL21tL2FsbG9jX3RhZy5jXFxuKysrIGIvbW0vYWxsb2NfdGFnLmNcXG5AQCAtMjkxLDcgKzI5MSw3IEBAIHN0YXRpYyBib29sIG1hdGNoZXNfZmlsdGVyKHN0cnVjdCBjb2RldGFnICpjdCwgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcixcXG4gXFxuIFxcdGlmIChmaWx0ZXItXFx1MDAzZW1hc2sgXFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfSU5BQ0NVUkFURSkge1xcbiBcXHRcXHRpbmFjY3VyYXRlID0gISEoY3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQ09ERVRBR19GTEFHX0lOQUNDVVJBVEUpO1xcbi1cXHRcXHRpZiAoaW5hY2N1cmF0ZSAhPSAhIShmaWx0ZXItXFx1MDAzZWZpZWxkcy5pbmFjY3VyYXRlKSlcXG4rXFx0XFx0aWYgKGluYWNjdXJhdGUgIT0gISEoZmlsdGVyLVxcdTAwM2VpbmFjY3VyYXRlKSlcXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvYWxsb2NpbmZvX2lvY3RsX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9hbGxvY2luZm9faW9jdGxfdGVzdC5jXFxuaW5kZXggN2Q5NGFiYjc4NWExNC4uNzRmZDY0YjIzNzBjYyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvYWxsb2NpbmZvX2lvY3RsX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9hbGxvY2luZm9faW9jdGxfdGVzdC5jXFxuQEAgLTEsNyArMSw3IEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gXFxuIC8qIGtzZWxmdGVzdCBmb3IgYWxsb2NpbmZvIGlvY3RsXFxuLSAqIGFsbG9jaW5mbyBpb2N0bCByZXRyaXZlcyBhbGxvY2luZm8gZGF0YSB0aHJvdWdoIGlvY3RsXFxuKyAqIGFsbG9jaW5mbyBpb2N0bCByZXRyaWV2ZXMgYWxsb2NpbmZvIGRhdGEgdGhyb3VnaCBpb2N0bFxcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMjYgR29vZ2xlLCBJbmMuXFxuICAqL1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTg6Mzc6NDguNjUxNDU5NjkyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTgxOTY0OTA4MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNX0FMTE9DX1BST0ZJTElOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jaW5mb19pb2N0bFwiLFxuICAgIFwiYWxsb2NpbmZvX2NvbXBhdF9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBVQVBJIHN0cnVjdCBsYXlvdXQgZm9yIHRoZSAvcHJvYy9hbGxvY2luZm8gaW9jdGwgYW5kIHVwZGF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGluIHRoZSBrZXJuZWwuIEZ1enppbmcgdGhlIGlvY3RsIGhhbmRsZXIgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgbmV3IHN0cnVjdCBsYXlvdXQgYW5kIGZpbHRlcmluZyBsb2dpYyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgd2l0aG91dCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGxvZ2ljIGVycm9ycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjExYzNjZmE5YzE1MTAwMDE0YjYzNGJiZmY1NGVlYzA1Y2I5NjQyYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDQgMTg6Mzc6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmhcbmluZGV4IDI3MGY2OTNiMTgyMjAuLmUzYWQ5NDQ0NDg2NGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9hbGxvY190YWcuaFxuQEAgLTMxLDggKzMxLDYgQEAgc3RydWN0IGFsbG9jaW5mb190YWcge1xuIFx0Y2hhciBmdW5jdGlvbltBTExPQ0lORk9fU1RSX1NJWkVdO1xuIFx0Y2hhciBmaWxlbmFtZVtBTExPQ0lORk9fU1RSX1NJWkVdO1xuIFx0X191NjQgbGluZW5vO1xuLVx0LyogZmlsdGVyIGNyaXRlcmlhIG9ubHk7IHNlZSBhbGxvY2luZm9fY291bnRlci5hY2N1cmF0ZSBmb3IgYWN0dWFsIGFjY3VyYWN5ICovXG4tXHRfX3U2NCBpbmFjY3VyYXRlO1xuIH07XG4gXG4gLyogVGhlIGFsaWdubWVudCBlbnN1cmVzIDMyLWJpdCBjb21wYXRpYmxlIGludGVyZmFjZXMgYXJlIG5vdCBicm9rZW4gKi9cbkBAIC03NCw2ICs3Miw4IEBAIHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyIHtcbiBcdHN0cnVjdCBhbGxvY2luZm9fdGFnIGZpZWxkcztcbiBcdF9fdTY0IG1pbl9zaXplO1xuIFx0X191NjQgbWF4X3NpemU7XG4rXHQvKiBmaWx0ZXIgY3JpdGVyaWEgb25seTsgc2VlIGFsbG9jaW5mb19jb3VudGVyLmFjY3VyYXRlIGZvciBhY3R1YWwgYWNjdXJhY3kgKi9cbitcdF9fdTY0IGluYWNjdXJhdGU7XG4gfTtcbiBcbiBzdHJ1Y3QgYWxsb2NpbmZvX2dldF9hdCB7XG5kaWZmIC0tZ2l0IGEvbW0vYWxsb2NfdGFnLmMgYi9tbS9hbGxvY190YWcuY1xuaW5kZXggNTJhZWNlMjdiMDBlMC4uODRjNWMzNzgzY2E0NiAxMDA2NDRcbi0tLSBhL21tL2FsbG9jX3RhZy5jXG4rKysgYi9tbS9hbGxvY190YWcuY1xuQEAgLTI5MSw3ICsyOTEsNyBAQCBzdGF0aWMgYm9vbCBtYXRjaGVzX2ZpbHRlcihzdHJ1Y3QgY29kZXRhZyAqY3QsIHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyICpmaWx0ZXIsXG4gXG4gXHRpZiAoZmlsdGVyLVx1MDAzZW1hc2sgXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19JTkFDQ1VSQVRFKSB7XG4gXHRcdGluYWNjdXJhdGUgPSAhIShjdC1cdTAwM2VmbGFncyBcdTAwMjYgQ09ERVRBR19GTEFHX0lOQUNDVVJBVEUpO1xuLVx0XHRpZiAoaW5hY2N1cmF0ZSAhPSAhIShmaWx0ZXItXHUwMDNlZmllbGRzLmluYWNjdXJhdGUpKVxuK1x0XHRpZiAoaW5hY2N1cmF0ZSAhPSAhIShmaWx0ZXItXHUwMDNlaW5hY2N1cmF0ZSkpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9hbGxvY2luZm9faW9jdGxfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL2FsbG9jaW5mb19pb2N0bF90ZXN0LmNcbmluZGV4IDdkOTRhYmI3ODVhMTQuLjc0ZmQ2NGIyMzcwY2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9hbGxvY190YWcvYWxsb2NpbmZvX2lvY3RsX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYWxsb2NfdGFnL2FsbG9jaW5mb19pb2N0bF90ZXN0LmNcbkBAIC0xLDcgKzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiBcbiAvKiBrc2VsZnRlc3QgZm9yIGFsbG9jaW5mbyBpb2N0bFxuLSAqIGFsbG9jaW5mbyBpb2N0bCByZXRyaXZlcyBhbGxvY2luZm8gZGF0YSB0aHJvdWdoIGlvY3RsXG4rICogYWxsb2NpbmZvIGlvY3RsIHJldHJpZXZlcyBhbGxvY2luZm8gZGF0YSB0aHJvdWdoIGlvY3RsXG4gICogQ29weXJpZ2h0IChDKSAyMDI2IEdvb2dsZSwgSW5jLlxuICAqL1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTg6Mzc6NDguNjUxNDYxMTQzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE3MzcyMjY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFsbG9jIFRhZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgYWxsb2MgdGFnIGluZnJhc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgYWxsb2NpbmZvYCBmdW5jdGlvbmFsaXR5LiBJIHNlZSBjaGFuZ2VzIHRvIGBpbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmhgLCBgbW0vYWxsb2NfdGFnLmNgLCBhbmQgdGhlIHNlbGYtdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9hbGxvY2luZm9faW9jdGxfdGVzdC5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIG1vdmluZyB0aGUgYGluYWNjdXJhdGVgIGZpZWxkIGZyb20gdGhlIGBhbGxvY2luZm9fdGFnYCBzdHJ1Y3QgdG8gdGhlIGBhbGxvY2luZm9fZmlsdGVyYCBzdHJ1Y3QgaW4gdGhlIHVzZXItc3BhY2UgaGVhZGVyLiBUaGlzIHNoaWZ0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGhvdyB0aGUgZmlsdGVyIGludGVyYWN0cyB3aXRoIHRoZSBpb2N0bCBjYWxscy5cblxuSW4gYG1tL2FsbG9jX3RhZy5jYCwgdGhleSdyZSB1cGRhdGluZyB0aGUgY29kZSB0byByZWZlcmVuY2UgYGZpbHRlci1cdTAwM2VpbmFjY3VyYXRlYCBpbnN0ZWFkIG9mIHRoZSBvbGQgYGZpbHRlci1cdTAwM2VmaWVsZHMuaW5hY2N1cmF0ZWAgY29uc3RydWN0LiBUaGlzIGxpa2VseSBtZWFucyB0aGV5J3ZlIHJlc3RydWN0dXJlZCB0aGUgd2F5IHRoZSBmaWx0ZXIgZGF0YSBpcyByZXByZXNlbnRlZCBpbnRlcm5hbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhleSd2ZSBjaG9zZW4gdG8gbW92ZSB0aGlzIGZpZWxkLiBXYXMgaXQgZm9yIGFsaWdubWVudD8gU3BhY2Ugb3B0aW1pemF0aW9uPyBBIGNoYW5nZSBpbiB0aGUgZmlsdGVyaW5nIGxvZ2ljIGl0c2VsZj9cblxuR2l2ZW4gdGhlIGZvY3VzIG9uIHRoZSBpb2N0bCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBhbGxvY2luZm9fZmlsdGVyYCBpcyBiZWluZyB1c2VkIGFuZCB3aHkgaXQncyBzdHJ1Y3R1cmVkIHRoaXMgd2F5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIG9uIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHVzZXIgc3BhY2UgYW5kIGtlcm5lbCBzcGFjZS5cblxuSSdtIGdvaW5nIHRvIHF1aWNrbHkgZ3JlcCB0aHJvdWdoIGBtbS9hbGxvY190YWcuY2AgdG8gc2VlIGFsbCB0aGUgcGxhY2VzIHdoZXJlIGBhbGxvY2luZm9fZmlsdGVyYCBpcyB1c2VkLiBUaGlzIHdpbGwgaGVscCBtZSB0cmFjZSB0aGUgZGF0YSBmbG93IGFuZCBob3cgdGhpcyAnaW5hY2N1cmF0ZScgZmxhZyBpcyBiZWluZyBhY2Nlc3NlZCBhbmQgbWFuaXB1bGF0ZWQgd2l0aGluIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NjEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxODozNzo1My44MjUxODYwMjZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxMzAxMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NpbmZvX2ZpbHRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9hbGxvY190YWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9hbGxvY190YWcuYz02MT1zdHJ1Y3QgYWxsb2NpbmZvX3ByaXZhdGUge1xcbi0tXFxubW0vYWxsb2NfdGFnLmMtNjQtXFx0Ym9vbCBwcmludF9oZWFkZXI7XFxubW0vYWxsb2NfdGFnLmM6NjU6XFx0c3RydWN0IGFsbG9jaW5mb19maWx0ZXIgZmlsdGVyO1xcbm1tL2FsbG9jX3RhZy5jLTY2LVxcdC8qIGlvY3RsIHVzZXMgYSBzZXBhcmF0ZSBpdGVyYXRvciBub3QgdG8gaW50ZXJmZXJlIHdpdGggcmVhZHMgKi9cXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTI0ND1zdGF0aWMgaW50IGFsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5tbS9hbGxvY190YWcuYy0yNjAtICovXFxubW0vYWxsb2NfdGFnLmM6MjYxOnN0YXRpYyBib29sIG1hdGNoZXNfZmlsdGVyKHN0cnVjdCBjb2RldGFnICpjdCwgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcixcXG5tbS9hbGxvY190YWcuYy0yNjItXFx0XFx0XFx0ICAgc3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyAqY291bnRlcnMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE4OjM3OjUzLjg3MjMyMDM4NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMDg5MTAzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIG1tL2FsbG9jXFxfdGFnLmMqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYSBzcGVjaWZpYyBhcmVhLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYG1tL2FsbG9jX3RhZy5jYCwgYW5kIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyNjEuIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUsIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBwYXJ0IG9mIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiB0YWdnaW5nIHByb2Nlc3MuIEknbSBnb2luZyB0byBzdGFydCBieSBhbmFseXppbmcgdGhlIGNvZGUgaW4gdGhhdCB2aWNpbml0eSBhbmQgc2VlaW5nIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgbW9kdWxlLiBLbm93aW5nIG15IHdheSBhcm91bmQgdGhlIGtlcm5lbCBzb3VyY2UsIEknbGwgYmUgYWJsZSB0byBxdWlja2x5IGdyYXNwIHRoZSBjb250ZXh0LiBUaGUgc3BlY2lmaWMgbGluZSB3aWxsIGFjdCBhcyBteSBzdGFydGluZyBwb2ludCB0byBzZWUgd2hhdCBjbHVlcyBJIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzU1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTg6Mzc6NTkuMDgxMjMyNzU2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2FsbG9jX3RhZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTA6XFx0XFx0Y29kZXRhZ191bmxvY2tfbW9kdWxlX2xpc3QoYWxsb2NfdGFnX2N0dHlwZSk7XFxuIDI1MTpcXHRcXHRpZiAoY29weV90b191c2VyKGFyZywgXFx1MDAyNnBhcmFtcywgc2l6ZW9mKHBhcmFtcykpKVxcbiAyNTI6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDI1MzpcXHRcXG4gMjU0OlxcdFxcdHJldHVybiAwO1xcbiAyNTU6XFx0fVxcbiAyNTY6XFx0XFxuIDI1NzpcXHQvKlxcbiAyNTg6XFx0ICogVmVyaWZpZXMgd2hldGhlciBhIGdpdmVuIGNvZGV0YWcgc2F0aXNmaWVzIHRoZSBhY3RpdmUgZmlsdGVyaW5nIGNyaXRlcmlhIGJ5XFxuIDI1OTpcXHQgKiBtYXRjaGluZyBpdHMgY2hhcmFjdGVyaXN0aWNzIGFnYWluc3QgdGhlIHNwZWNpZmllZCBmaWx0ZXIuXFxuIDI2MDpcXHQgKi9cXG4gMjYxOlxcdHN0YXRpYyBib29sIG1hdGNoZXNfZmlsdGVyKHN0cnVjdCBjb2RldGFnICpjdCwgc3RydWN0IGFsbG9jaW5mb19maWx0ZXIgKmZpbHRlcixcXG4gMjYyOlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgKmNvdW50ZXJzLFxcbiAyNjM6XFx0XFx0XFx0XFx0ICAgYm9vbCAqZmV0Y2hlZF9jb3VudGVycylcXG4gMjY0OlxcdHtcXG4gMjY1OlxcdFxcdGJvb2wgaW5hY2N1cmF0ZTtcXG4gMjY2OlxcdFxcbiAyNjc6XFx0XFx0aWYgKCFmaWx0ZXIgfHwgIWZpbHRlci1cXHUwMDNlbWFzaylcXG4gMjY4OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAyNjk6XFx0XFxuIDI3MDpcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2VtYXNrIFxcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01PRE5BTUUpIHtcXG4gMjcxOlxcdFxcdFxcdC8qIHVzZXIgd2FudHMgdG8gZmlsdGVyIGJ5IG1vZG5hbWUgYnV0IGN0LVxcdTAwM2Vtb2RuYW1lIGlzIE5VTEwgKi9cXG4gMjcyOlxcdFxcdFxcdGlmICghY3QtXFx1MDAzZW1vZG5hbWUpIHtcXG4gMjczOlxcdFxcdFxcdFxcdC8qIHZhbGlkYXRlIGlmIHVzZXIgd2FzIGF0dGVtcHRpbmcgdG8gZmlsdGVyIGZvciBidWlsdC1pbiBhbGxvY2F0aW9ucyAqL1xcbiAyNzQ6XFx0XFx0XFx0XFx0aWYgKGZpbHRlci1cXHUwMDNlZmllbGRzLm1vZG5hbWVbMF0gIT0gJ1xcXFwwJylcXG4gMjc1OlxcdFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjc2OlxcdFxcdFxcdH0gZWxzZSBpZiAoYWxsb2NpbmZvX2NtcF9zdHIoY3QtXFx1MDAzZW1vZG5hbWUsIGZpbHRlci1cXHUwMDNlZmllbGRzLm1vZG5hbWUpKVxcbiAyNzc6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyNzg6XFx0XFx0fVxcbiAyNzk6XFx0XFxuIDI4MDpcXHRcXHRpZiAoKGZpbHRlci1cXHUwMDNlbWFzayBcXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19GVU5DVElPTikgXFx1MDAyNlxcdTAwMjZcXG4gMjgxOlxcdFxcdCAgICBjdC1cXHUwMDNlZnVuY3Rpb24gXFx1MDAyNlxcdTAwMjYgYWxsb2NpbmZvX2NtcF9zdHIoY3QtXFx1MDAzZWZ1bmN0aW9uLCBmaWx0ZXItXFx1MDAzZWZpZWxkcy5mdW5jdGlvbikpXFxuIDI4MjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDI4MzpcXHRcXG4gMjg0OlxcdFxcdGlmICgoZmlsdGVyLVxcdTAwM2VtYXNrIFxcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0ZJTEVOQU1FKSBcXHUwMDI2XFx1MDAyNlxcbiAyODU6XFx0XFx0ICAgIGN0LVxcdTAwM2VmaWxlbmFtZSBcXHUwMDI2XFx1MDAyNiBhbGxvY2luZm9fY21wX3N0cihjdC1cXHUwMDNlZmlsZW5hbWUsIGZpbHRlci1cXHUwMDNlZmllbGRzLmZpbGVuYW1lKSlcXG4gMjg2OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjg3OlxcdFxcbiAyODg6XFx0XFx0aWYgKChmaWx0ZXItXFx1MDAzZW1hc2sgXFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfTElORU5PKSBcXHUwMDI2XFx1MDAyNlxcbiAyODk6XFx0XFx0ICAgIGN0LVxcdTAwM2VsaW5lbm8gIT0gZmlsdGVyLVxcdTAwM2VmaWVsZHMubGluZW5vKVxcbiAyOTA6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyOTE6XFx0XFxuIDI5MjpcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2VtYXNrIFxcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0lOQUNDVVJBVEUpIHtcXG4gMjkzOlxcdFxcdFxcdGluYWNjdXJhdGUgPSAhIShjdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBDT0RFVEFHX0ZMQUdfSU5BQ0NVUkFURSk7XFxuIDI5NDpcXHRcXHRcXHRpZiAoaW5hY2N1cmF0ZSAhPSAhIShmaWx0ZXItXFx1MDAzZWluYWNjdXJhdGUpKVxcbiAyOTU6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyOTY6XFx0XFx0fVxcbiAyOTc6XFx0XFxuIDI5ODpcXHRcXHRpZiAoZmlsdGVyLVxcdTAwM2VtYXNrIFxcdTAwMjYgKEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSB8IEFMTE9DSU5GT19GSUxURVJfTUFTS19NQVhfU0laRSkpIHtcXG4gMjk5OlxcdFxcdFxcdGlmICghKmZldGNoZWRfY291bnRlcnMpIHtcXG4gMzAwOlxcdFxcdFxcdFxcdCpjb3VudGVycyA9IGFsbG9jaW5mb19wcmVmZXRjaF9jb3VudGVycyhjdCk7XFxuIDMwMTpcXHRcXHRcXHRcXHQqZmV0Y2hlZF9jb3VudGVycyA9IHRydWU7XFxuIDMwMjpcXHRcXHRcXHR9XFxuIDMwMzpcXHRcXHRcXHRpZiAoKGZpbHRlci1cXHUwMDNlbWFzayBcXHUwMDI2IEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRSkgXFx1MDAyNlxcdTAwMjZcXG4gMzA0OlxcdFxcdFxcdCAgICBjb3VudGVycy1cXHUwMDNlYnl0ZXMgXFx1MDAzYyBmaWx0ZXItXFx1MDAzZW1pbl9zaXplKVxcbiAzMDU6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAzMDY6XFx0XFx0XFx0aWYgKChmaWx0ZXItXFx1MDAzZW1hc2sgXFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfTUFYX1NJWkUpIFxcdTAwMjZcXHUwMDI2XFxuIDMwNzpcXHRcXHRcXHQgICAgY291bnRlcnMtXFx1MDAzZWJ5dGVzIFxcdTAwM2UgZmlsdGVyLVxcdTAwM2VtYXhfc2l6ZSlcXG4gMzA4OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMzA5OlxcdFxcdH1cXG4gMzEwOlxcdFxcbiAzMTE6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDMxMjpcXHR9XFxuIDMxMzpcXHRcXG4gMzE0OlxcdC8qXFxuIDMxNTpcXHQgKiBTZWVrcyB0aGUgaW9jdGwgaXRlcmF0b3IgdG8gdGhlIHNwZWNpZmllZCAwLWluZGV4ZWQgdGFnIHBvc2l0aW9uLCByZWFkcyBpdHNcXG4gMzE2OlxcdCAqIHByb2ZpbGluZyBkYXRhIGFuZCByZXR1cm5zIGl0IHRvIHVzZXJzcGFjZS5cXG4gMzE3OlxcdCAqL1xcbiAzMTg6XFx0c3RhdGljIGludCBhbGxvY2luZm9faW9jdGxfZ2V0X2F0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCBfX3VzZXIgKmFyZylcXG4gMzE5OlxcdHtcXG4gMzIwOlxcdFxcdHN0cnVjdCBhbGxvY2luZm9fcHJpdmF0ZSAqcHJpdjtcXG4gMzIxOlxcdFxcdHN0cnVjdCBjb2RldGFnICpjdDtcXG4gMzIyOlxcdFxcdHN0cnVjdCBhbGxvY2luZm9fZ2V0X2F0IHBhcmFtcyA9IHswfTtcXG4gMzIzOlxcdFxcdF9fdTY0IHNraXBfY291bnQ7XFxuIDMyNDpcXHRcXHRzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGNvdW50ZXJzO1xcbiAzMjU6XFx0XFx0Ym9vbCBmZXRjaGVkX2NvdW50ZXJzO1xcbiAzMjY6XFx0XFxuIDMyNzpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNnBhcmFtcywgYXJnLCBzaXplb2YocGFyYW1zKSkpXFxuIDMyODpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gMzI5OlxcdFxcbiAzMzA6XFx0XFx0aWYgKHBhcmFtcy5maWx0ZXIubWFzayBcXHUwMDI2IH5BTExPQ0lORk9fRklMVEVSX01BU0tTKVxcbiAzMzE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDMzMjpcXHRcXG4gMzMzOlxcdFxcdGlmICgocGFyYW1zLmZpbHRlci5tYXNrIFxcdTAwMjYgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01JTl9TSVpFKSBcXHUwMDI2XFx1MDAyNlxcbiAzMzQ6XFx0XFx0ICAgIChwYXJhbXMuZmlsdGVyLm1hc2sgXFx1MDAyNiBBTExPQ0lORk9fRklMVEVSX01BU0tfTUFYX1NJWkUpIFxcdTAwMjZcXHUwMDI2XFxuIDMzNTpcXHRcXHQgICAgcGFyYW1zLmZpbHRlci5taW5fc2l6ZSBcXHUwMDNlIHBhcmFtcy5maWx0ZXIubWF4X3NpemUpXFxuIDMzNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzM3OlxcdFxcbiAzMzg6XFx0XFx0cHJpdiA9IG0tXFx1MDAzZXByaXZhdGU7XFxuIDMzOTpcXHRcXG4gMzQwOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZWlvY3RsX2xvY2spO1xcbiAzNDE6XFx0XFx0Y29kZXRhZ19sb2NrX21vZHVsZV9saXN0KGFsbG9jX3RhZ19jdHR5cGUpO1xcbiAzNDI6XFx0XFxuIDM0MzpcXHRcXHRpZiAocGFyYW1zLnBvcyBcXHUwMDNlPSBjb2RldGFnX2dldF9jb3VudChhbGxvY190YWdfY3R0eXBlKSkge1xcbiAzNDQ6XFx0XFx0XFx0Y29kZXRhZ191bmxvY2tfbW9kdWxlX2xpc3QoYWxsb2NfdGFnX2N0dHlwZSk7XFxuIDM0NTpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZWlvY3RsX2xvY2spO1xcbiAzNDY6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDM0NzpcXHRcXHR9XFxuIDM0ODpcXHRcXG4gMzQ5OlxcdFxcdHNraXBfY291bnQgPSBwYXJhbXMucG9zO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxODozNzo1OS4wODEzNDc0ODZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzE1MDUxMTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEZ1bmN0aW9uYWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCDigJMgaXQncyBhbHRlcmluZyB0aGUgY29kZSdzIGJlaGF2aW9yLiBJdCBsb29rcyBsaWtlIGl0J3MgYSByZWxhdGl2ZWx5IGZvY3VzZWQgY2hhbmdlOyBzcGVjaWZpY2FsbHksIGl0J3MgbW9kaWZ5aW5nIGEgZmllbGQgY2FsbGVkIGBpbmFjY3VyYXRlYCB3aXRoaW4gYSBgZmlsdGVyYCBzdHJ1Y3R1cmUuIEkgc2VlIHRoZSBvbGQgdmVyc2lvbiB1c2VkIGBmaWx0ZXItXHUwMDNlZmllbGRzLmluYWNjdXJhdGVgLCBhbmQgbm93IGl0J3MganVzdCBgZmlsdGVyLVx1MDAzZWluYWNjdXJhdGVgLiBJdCBhbHNvIG1lbnRpb25zIHRoYXQgdGhpcyBmaWVsZCBpcyBtb3Zpbmcgd2l0aGluIHRoZSBVQVBJIHN0cnVjdC4gSGFuZyBvbi4uLiBgc3RydWN0IGFsbG9jaW5mb19maWx0ZXJgIGlzIHBhcnQgb2YgVUFQST8gVGhhdCdzIGtleS4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgaW1wbGljYXRpb25zIGhlcmUuIEdvdHRhIHZlcmlmeSB0aGlzIGluIHRoZSBVQVBJIGhlYWRlci4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgYGluY2x1ZGUvdWFwaS9saW51eC9hbGxvY190YWcuaGAgdG8gc2VlIGV4YWN0bHkgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBVQVBJIHN0cnVjdHVyZS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB1c2VyIHNwYWNlIGludGVyYWN0cyB3aXRoIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwOTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE4OjM4OjAyLjc5NjQwMDc0M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvYWxsb2NfdGFnLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgV0lUSCBMaW51eC1zeXNjYWxsLW5vdGUgKi9cXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBhbGxvY190YWcgSU9DVEwgQVBJIGRlZmluaXRpb25cXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMjYgR29vZ2xlLCBMTEMuICBBbGwgcmlnaHRzIHJlc2VydmVkLlxcbiAgIDY6XFx0ICpcXG4gICA3OlxcdCAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XFxuICAgODpcXHQgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhc1xcbiAgIDk6XFx0ICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uXFxuICAxMDpcXHQgKi9cXG4gIDExOlxcdFxcbiAgMTI6XFx0I2lmbmRlZiBfVUFQSV9BTExPQ19UQUdfSFxcbiAgMTM6XFx0I2RlZmluZSBfVUFQSV9BTExPQ19UQUdfSFxcbiAgMTQ6XFx0XFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gIDE2OlxcdFxcbiAgMTc6XFx0LypcXG4gIDE4OlxcdCAqIEZ1bmN0aW9uLCBmaWxlIGFuZCBtb2R1bGUgbmFtZXMgb2Z0ZW4gaGF2ZSB0aGUgc2FtZSBwcmVmaXhlcywgdGhlcmVmb3JlXFxuICAxOTpcXHQgKiB3aGVuIGZpbHRlcmluZyBieSB0aGVzZSBjcml0ZXJpYSwgd2UgY29tcGFyZSB0aGUgbGFzdCA2NCBjaGFyYWN0ZXJzIHRvXFxuICAyMDpcXHQgKiBtaW5pbWl6ZSB0aGUgY2hhbmNlcyBvZiBuYW1lIGNvbGxpc2lvbnNcXG4gIDIxOlxcdCAqL1xcbiAgMjI6XFx0I2RlZmluZSBBTExPQ0lORk9fU1RSX1NJWkVcXHQ2NFxcbiAgMjM6XFx0XFxuICAyNDpcXHRzdHJ1Y3QgYWxsb2NpbmZvX2NvbnRlbnRfaWQge1xcbiAgMjU6XFx0XFx0X191NjQgaWQ7XFxuICAyNjpcXHR9O1xcbiAgMjc6XFx0XFxuICAyODpcXHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZyB7XFxuICAyOTpcXHRcXHQvKiBMb25nZXIgbmFtZXMgYXJlIHRyaW1tZWQgKi9cXG4gIDMwOlxcdFxcdGNoYXIgbW9kbmFtZVtBTExPQ0lORk9fU1RSX1NJWkVdO1xcbiAgMzE6XFx0XFx0Y2hhciBmdW5jdGlvbltBTExPQ0lORk9fU1RSX1NJWkVdO1xcbiAgMzI6XFx0XFx0Y2hhciBmaWxlbmFtZVtBTExPQ0lORk9fU1RSX1NJWkVdO1xcbiAgMzM6XFx0XFx0X191NjQgbGluZW5vO1xcbiAgMzQ6XFx0fTtcXG4gIDM1OlxcdFxcbiAgMzY6XFx0LyogVGhlIGFsaWdubWVudCBlbnN1cmVzIDMyLWJpdCBjb21wYXRpYmxlIGludGVyZmFjZXMgYXJlIG5vdCBicm9rZW4gKi9cXG4gIDM3OlxcdHN0cnVjdCBhbGxvY2luZm9fY291bnRlciB7XFxuICAzODpcXHRcXHRfX3U2NCBieXRlcztcXG4gIDM5OlxcdFxcdF9fdTY0IGNhbGxzO1xcbiAgNDA6XFx0XFx0X191OCBhY2N1cmF0ZTtcXG4gIDQxOlxcdH0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpO1xcbiAgNDI6XFx0XFxuICA0MzpcXHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZ19kYXRhIHtcXG4gIDQ0OlxcdFxcdHN0cnVjdCBhbGxvY2luZm9fdGFnIHRhZztcXG4gIDQ1OlxcdFxcdHN0cnVjdCBhbGxvY2luZm9fY291bnRlciBjb3VudGVyO1xcbiAgNDY6XFx0fTtcXG4gIDQ3OlxcdFxcbiAgNDg6XFx0ZW51bSB7XFxuICA0OTpcXHRcXHRBTExPQ0lORk9fRklMVEVSX01PRE5BTUUsXFxuICA1MDpcXHRcXHRBTExPQ0lORk9fRklMVEVSX0ZVTkNUSU9OLFxcbiAgNTE6XFx0XFx0QUxMT0NJTkZPX0ZJTFRFUl9GSUxFTkFNRSxcXG4gIDUyOlxcdFxcdEFMTE9DSU5GT19GSUxURVJfTElORU5PLFxcbiAgNTM6XFx0XFx0QUxMT0NJTkZPX0ZJTFRFUl9JTkFDQ1VSQVRFLFxcbiAgNTQ6XFx0XFx0QUxMT0NJTkZPX0ZJTFRFUl9NSU5fU0laRSxcXG4gIDU1OlxcdFxcdEFMTE9DSU5GT19GSUxURVJfTUFYX1NJWkUsXFxuICA1NjpcXHRcXHRfX0FMTE9DSU5GT19GSUxURVJfTEFTVCA9IEFMTE9DSU5GT19GSUxURVJfTUFYX1NJWkVcXG4gIDU3OlxcdH07XFxuICA1ODpcXHRcXG4gIDU5OlxcdCNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX01PRE5BTUVcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyBBTExPQ0lORk9fRklMVEVSX01PRE5BTUUpXFxuICA2MDpcXHQjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19GVU5DVElPTlxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfRlVOQ1RJT04pXFxuICA2MTpcXHQjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19GSUxFTkFNRVxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfRklMRU5BTUUpXFxuICA2MjpcXHQjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19MSU5FTk9cXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyBBTExPQ0lORk9fRklMVEVSX0xJTkVOTylcXG4gIDYzOlxcdCNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLX0lOQUNDVVJBVEVcXHQoMSBcXHUwMDNjXFx1MDAzYyBBTExPQ0lORk9fRklMVEVSX0lOQUNDVVJBVEUpXFxuICA2NDpcXHQjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19NSU5fU0laRVxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfTUlOX1NJWkUpXFxuICA2NTpcXHQjZGVmaW5lIEFMTE9DSU5GT19GSUxURVJfTUFTS19NQVhfU0laRVxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEFMTE9DSU5GT19GSUxURVJfTUFYX1NJWkUpXFxuICA2NjpcXHRcXG4gIDY3OlxcdCNkZWZpbmUgQUxMT0NJTkZPX0ZJTFRFUl9NQVNLUyBcXFxcXFxuICA2ODpcXHRcXHQoKDEgXFx1MDAzY1xcdTAwM2MgKF9fQUxMT0NJTkZPX0ZJTFRFUl9MQVNUICsgMSkpIC0gMSlcXG4gIDY5OlxcdFxcbiAgNzA6XFx0c3RydWN0IGFsbG9jaW5mb19maWx0ZXIge1xcbiAgNzE6XFx0XFx0X191NjQgbWFzazsgLyogYml0bWFzayBvZiB0aGUgZmlsdGVyIGZpZWxkcyB1c2VkICovXFxuICA3MjpcXHRcXHRzdHJ1Y3QgYWxsb2NpbmZvX3RhZyBmaWVsZHM7XFxuICA3MzpcXHRcXHRfX3U2NCBtaW5fc2l6ZTtcXG4gIDc0OlxcdFxcdF9fdTY0IG1heF9zaXplO1xcbiAgNzU6XFx0XFx0LyogZmlsdGVyIGNyaXRlcmlhIG9ubHk7IHNlZSBhbGxvY2luZm9fY291bnRlci5hY2N1cmF0ZSBmb3IgYWN0dWFsIGFjY3VyYWN5ICovXFxuICA3NjpcXHRcXHRfX3U2NCBpbmFjY3VyYXRlO1xcbiAgNzc6XFx0fTtcXG4gIDc4OlxcdFxcbiAgNzk6XFx0c3RydWN0IGFsbG9jaW5mb19nZXRfYXQge1xcbiAgODA6XFx0XFx0LyogaW5wdXRzICovXFxuICA4MTpcXHRcXHRfX3U2NCBwb3M7XFxuICA4MjpcXHRcXHRzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciBmaWx0ZXI7XFxuICA4MzpcXHRcXHQvKiBvdXRwdXQgKi9cXG4gIDg0OlxcdFxcdHN0cnVjdCBhbGxvY2luZm9fdGFnX2RhdGEgZGF0YTtcXG4gIDg1OlxcdH07XFxuICA4NjpcXHRcXG4gIDg3OlxcdCNkZWZpbmUgX0FMTE9DSU5GT19JT0NfQ09OVEVOVF9JRFxcdDBcXG4gIDg4OlxcdCNkZWZpbmUgX0FMTE9DSU5GT19JT0NfR0VUX0FUXFx0XFx0MVxcbiAgODk6XFx0I2RlZmluZSBfQUxMT0NJTkZPX0lPQ19HRVRfTkVYVFxcdFxcdDJcXG4gIDkwOlxcdFxcbiAgOTE6XFx0I2RlZmluZSBBTExPQ0lORk9fSU9DX0JBU0VcXHRcXHQweEE2XFxuICA5MjpcXHQjZGVmaW5lIEFMTE9DSU5GT19JT0NfQ09OVEVOVF9JRFxcdF9JT1IoQUxMT0NJTkZPX0lPQ19CQVNFLCBfQUxMT0NJTkZPX0lPQ19DT05URU5UX0lELFxcdFxcXFxcXG4gIDkzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGFsbG9jaW5mb19jb250ZW50X2lkKVxcbiAgOTQ6XFx0I2RlZmluZSBBTExPQ0lORk9fSU9DX0dFVF9BVFxcdFxcdF9JT1dSKEFMTE9DSU5GT19JT0NfQkFTRSwgX0FMTE9DSU5GT19JT0NfR0VUX0FULFxcdFxcXFxcXG4gIDk1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBhbGxvY2luZm9fZ2V0X2F0KVxcbiAgOTY6XFx0I2RlZmluZSBBTExPQ0lORk9fSU9DX0dFVF9ORVhUXFx0XFx0X0lPUihBTExPQ0lORk9fSU9DX0JBU0UsIF9BTExPQ0lORk9fSU9DX0dFVF9ORVhULFxcdFxcXFxcXG4gIDk3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGFsbG9jaW5mb190YWdfZGF0YSlcXG4gIDk4OlxcdFxcbiAgOTk6XFx0I2VuZGlmIC8qIF9VQVBJX0FMTE9DX1RBR19IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE4OjM4OjAyLjc5NjUwMjY5M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTg3MTE0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgYWxsb2NpbmZvX3RhZ2AgU3RydWN0dXJlIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBVQVBJIGNoYW5nZSwgc3BlY2lmaWNhbGx5IGFsdGVyaW5nIHRoZSBgYWxsb2NpbmZvX3RhZy5oYCBoZWFkZXIgZmlsZS4gSXQncyBtb3ZpbmcgdGhlIGBpbmFjY3VyYXRlYCBmaWVsZCBmcm9tIHRoZSBgc3RydWN0IGFsbG9jaW5mb190YWdgIHN0cnVjdHVyZSBpbnRvIHRoZSBgc3RydWN0IGFsbG9jaW5mb19maWx0ZXJgIHN0cnVjdHVyZS4gSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhpcyB3aWxsIGltcGFjdCB0aGUgVUFQSSBjb250cmFjdCwgd2hpY2ggbWVhbnMgZXhpc3RpbmcgdXNlcnMgb2YgdGhlc2Ugc3RydWN0dXJlcyBjb3VsZCBicmVhayBpZiB0aGV5IGhhdmVuJ3QgYmVlbiB1cGRhdGVkLiBBIGNyaXRpY2FsIHBvaW50IHRvIGNvbnNpZGVyIGlzIGhvdyBpdCBhZmZlY3RzIGBhbGxvY2luZm9faW9jdGxfZ2V0X2F0YCwgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uIHVzZXMgdGhlIGBtYXRjaGVzX2ZpbHRlcmAgZnVuY3Rpb24uIFdlIG5lZWQgdG8gbWV0aWN1bG91c2x5IHRyYWNlIHdoZXJlIGFuZCBob3cgYG1hdGNoZXNfZmlsdGVyYCBpcyB1c2VkIHdpdGggdGhlIHN0cnVjdCBtb2RpZmljYXRpb25zLiBJIGtub3cgdGhhdCBpb2N0bCBgQUxMT0NJTkZPX0lPQ19HRVRfQVRgIGlzIGhhbmRsZWQgaW4gYG1tL2FsbG9jX3RhZy5jYCwgYnV0IGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgYG1hdGNoZXNfZmlsdGVyYCBjYWxscywgbGV0IG1lIGZpcnN0IHZlcmlmeSBob3cgYGFsbG9jaW5mb19pb2N0bGAgaXRzZWxmIGlzIHJlZ2lzdGVyZWQuIFRoaXMgZ2l2ZXMgbWUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg4MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE4OjM4OjA3LjAxNTIxNjk4NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk1NTM2ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NpbmZvX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2FsbG9jX3RhZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2FsbG9jX3RhZy5jPTIyND1zdGF0aWMgdm9pZCBhbGxvY2luZm9fdG9fcGFyYW1zKHN0cnVjdCBjb2RldGFnICpjdCxcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTI0My0gKi9cXG5tbS9hbGxvY190YWcuYzoyNDQ6c3RhdGljIGludCBhbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkIF9fdXNlciAqYXJnKVxcbm1tL2FsbG9jX3RhZy5jLTI0NS17XFxuLS1cXG5tbS9hbGxvY190YWcuYz0yNjE9c3RhdGljIGJvb2wgbWF0Y2hlc19maWx0ZXIoc3RydWN0IGNvZGV0YWcgKmN0LCBzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlciAqZmlsdGVyLFxcbi0tXFxubW0vYWxsb2NfdGFnLmMtMzE3LSAqL1xcbm1tL2FsbG9jX3RhZy5jOjMxODpzdGF0aWMgaW50IGFsbG9jaW5mb19pb2N0bF9nZXRfYXQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkIF9fdXNlciAqYXJnKVxcbm1tL2FsbG9jX3RhZy5jLTMxOS17XFxuLS1cXG5tbS9hbGxvY190YWcuYy0zOTItICovXFxubW0vYWxsb2NfdGFnLmM6MzkzOnN0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCBfX3VzZXIgKmFyZylcXG5tbS9hbGxvY190YWcuYy0zOTQte1xcbi0tXFxubW0vYWxsb2NfdGFnLmMtNDQzLSAqL1xcbm1tL2FsbG9jX3RhZy5jOjQ0NDpzdGF0aWMgbG9uZyBhbGxvY2luZm9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxubW0vYWxsb2NfdGFnLmMtNDQ1LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIF9fYXJnKVxcbi0tXFxubW0vYWxsb2NfdGFnLmMtNDUxLVxcdGNhc2UgQUxMT0NJTkZPX0lPQ19DT05URU5UX0lEOlxcbm1tL2FsbG9jX3RhZy5jOjQ1MjpcXHRcXHRyZXQgPSBhbGxvY2luZm9faW9jdGxfZ2V0X2NvbnRlbnRfaWQoZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhLCBhcmcpO1xcbm1tL2FsbG9jX3RhZy5jLTQ1My1cXHRcXHRicmVhaztcXG5tbS9hbGxvY190YWcuYy00NTQtXFx0Y2FzZSBBTExPQ0lORk9fSU9DX0dFVF9BVDpcXG5tbS9hbGxvY190YWcuYzo0NTU6XFx0XFx0cmV0ID0gYWxsb2NpbmZvX2lvY3RsX2dldF9hdChmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEsIGFyZyk7XFxubW0vYWxsb2NfdGFnLmMtNDU2LVxcdFxcdGJyZWFrO1xcbm1tL2FsbG9jX3RhZy5jLTQ1Ny1cXHRjYXNlIEFMTE9DSU5GT19JT0NfR0VUX05FWFQ6XFxubW0vYWxsb2NfdGFnLmM6NDU4OlxcdFxcdHJldCA9IGFsbG9jaW5mb19pb2N0bF9nZXRfbmV4dChmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEsIGFyZyk7XFxubW0vYWxsb2NfdGFnLmMtNDU5LVxcdFxcdGJyZWFrO1xcbi0tXFxubW0vYWxsb2NfdGFnLmM9NDY5PXN0YXRpYyBsb25nIGFsbG9jaW5mb19jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5tbS9hbGxvY190YWcuYy00NzEte1xcbm1tL2FsbG9jX3RhZy5jOjQ3MjpcXHRyZXR1cm4gYWxsb2NpbmZvX2lvY3RsKGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpKTtcXG5tbS9hbGxvY190YWcuYy00NzMtfVxcbi0tXFxubW0vYWxsb2NfdGFnLmM9NDc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgYWxsb2NpbmZvX3Byb2Nfb3BzID0ge1xcbi0tXFxubW0vYWxsb2NfdGFnLmMtNDgwLVxcdC5wcm9jX3JlbGVhc2VcXHRcXHQ9IGFsbG9jaW5mb19yZWxlYXNlLFxcbm1tL2FsbG9jX3RhZy5jOjQ4MTpcXHQucHJvY19pb2N0bFxcdFxcdD0gYWxsb2NpbmZvX2lvY3RsLFxcbm1tL2FsbG9jX3RhZy5jLTQ4Mi0jaWZkZWYgQ09ORklHX0NPTVBBVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxODozODowNy4wNzQ3Nzc2ODNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwNDE3NzA3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIGAvcHJvYy9hbGxvY2luZm9gKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYC9wcm9jL2FsbG9jaW5mb2AuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYGlvY3RsYCBhcyB0aGUga2V5IHBvaW50IG9mIGludGVyYWN0aW9uIGZvciB0aGlzLiBXZSdyZSBvYnZpb3VzbHkgdHJ5aW5nIHRvIGFjY2VzcyBzb21lIG1lbW9yeSBhbGxvY2F0aW9uIHN0YXRpc3RpY3Mgb3IgcG90ZW50aWFsbHkgbWFuaXB1bGF0ZSBob3cgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IGhhbmRsZXMgdGFncyBvciByZWxhdGVkIGluZm9ybWF0aW9uLCBsaWtlbHkgZm9yIHNvbWUgZGVidWdnaW5nIG9yIHByb2ZpbGluZyBwdXJwb3NlLiBXaGVyZSB3b3VsZCB0aGUgaW1wbGVtZW50YXRpb24gbGl2ZT8gVGhlIGtlcm5lbCdzIGAvcHJvY2AgZmlsZXN5c3RlbSBoYW5kbGVycyBhcmUgb2Z0ZW4gZm91bmQgaW4gdGhlIHJlbGV2YW50IHN1YnN5c3RlbSdzIGNvZGUsIHNvIGxldCdzIHN0YXJ0IHdpdGggYG1tL2FsbG9jX3RhZy5jYC4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgYC9wcm9jL2FsbG9jaW5mb2AsIGBhbGxvY2luZm9fcHJvY19vcHNgIGlzIHRoZSBsaWtlbHkgY2FuZGlkYXRlIGZvciB0aGUgZmlsZSBvcGVyYXRpb25zIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBgaW9jdGxgIGhhbmRsZXIuIEl0IHdvdWxkIGJlIGEgc3RhcnRpbmcgcG9pbnQgdG8gc2VlIGhvdyB0aGUgaW9jdGwgY2FsbHMgYXJlIGRlZmluZWQgYW5kIHdoYXQgcGFyYW1ldGVycyBpdCBhY2NlcHRzLiBGcm9tIHRoZXJlIEkgY2FuIGV4cGxvcmUgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBsb2dpYyBmbG93IHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gaW5mb3JtYXRpb24gYW5kIGhvdyB0aGUgcHJvY2VzcyBpbnRlcmFjdHMgd2l0aCB0aGF0IGRhdGEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxODozODoxMC44Nzg5NTcwNzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2FsbG9jX3RhZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ3MDpcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGFyZylcXG4gNDcxOlxcdHtcXG4gNDcyOlxcdFxcdHJldHVybiBhbGxvY2luZm9faW9jdGwoZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZyljb21wYXRfcHRyKGFyZykpO1xcbiA0NzM6XFx0fVxcbiA0NzQ6XFx0I2VuZGlmXFxuIDQ3NTpcXHRcXG4gNDc2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgYWxsb2NpbmZvX3Byb2Nfb3BzID0ge1xcbiA0Nzc6XFx0XFx0LnByb2Nfb3BlblxcdFxcdD0gYWxsb2NpbmZvX29wZW4sXFxuIDQ3ODpcXHRcXHQucHJvY19yZWFkX2l0ZXJcXHRcXHQ9IHNlcV9yZWFkX2l0ZXIsXFxuIDQ3OTpcXHRcXHQucHJvY19sc2Vla1xcdFxcdD0gc2VxX2xzZWVrLFxcbiA0ODA6XFx0XFx0LnByb2NfcmVsZWFzZVxcdFxcdD0gYWxsb2NpbmZvX3JlbGVhc2UsXFxuIDQ4MTpcXHRcXHQucHJvY19pb2N0bFxcdFxcdD0gYWxsb2NpbmZvX2lvY3RsLFxcbiA0ODI6XFx0I2lmZGVmIENPTkZJR19DT01QQVRcXG4gNDgzOlxcdFxcdC5wcm9jX2NvbXBhdF9pb2N0bFxcdD0gYWxsb2NpbmZvX2NvbXBhdF9pb2N0bCxcXG4gNDg0OlxcdCNlbmRpZlxcbiA0ODU6XFx0fTtcXG4gNDg2OlxcdFxcbiA0ODc6XFx0c2l6ZV90IGFsbG9jX3RhZ190b3BfdXNlcnMoc3RydWN0IGNvZGV0YWdfYnl0ZXMgKnRhZ3MsIHNpemVfdCBjb3VudCwgYm9vbCBjYW5fc2xlZXApXFxuIDQ4ODpcXHR7XFxuIDQ4OTpcXHRcXHRzdHJ1Y3QgY29kZXRhZ19pdGVyYXRvciBpdGVyO1xcbiA0OTA6XFx0XFx0c3RydWN0IGNvZGV0YWcgKmN0O1xcbiA0OTE6XFx0XFx0c3RydWN0IGNvZGV0YWdfYnl0ZXMgbjtcXG4gNDkyOlxcdFxcdHVuc2lnbmVkIGludCBpLCBuciA9IDA7XFxuIDQ5MzpcXHRcXG4gNDk0OlxcdFxcdGlmIChJU19FUlJfT1JfTlVMTChhbGxvY190YWdfY3R0eXBlKSlcXG4gNDk1OlxcdFxcdFxcdHJldHVybiAwO1xcbiA0OTY6XFx0XFxuIDQ5NzpcXHRcXHRpZiAoY2FuX3NsZWVwKVxcbiA0OTg6XFx0XFx0XFx0Y29kZXRhZ19sb2NrX21vZHVsZV9saXN0KGFsbG9jX3RhZ19jdHR5cGUpO1xcbiA0OTk6XFx0XFx0ZWxzZSBpZiAoIWNvZGV0YWdfdHJ5bG9ja19tb2R1bGVfbGlzdChhbGxvY190YWdfY3R0eXBlKSlcXG4gNTAwOlxcdFxcdFxcdHJldHVybiAwO1xcbiA1MDE6XFx0XFxuIDUwMjpcXHRcXHRpdGVyID0gY29kZXRhZ19nZXRfY3RfaXRlcihhbGxvY190YWdfY3R0eXBlKTtcXG4gNTAzOlxcdFxcdHdoaWxlICgoY3QgPSBjb2RldGFnX25leHRfY3QoXFx1MDAyNml0ZXIpKSkge1xcbiA1MDQ6XFx0XFx0XFx0c3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyBjb3VudGVyID0gYWxsb2NfdGFnX3JlYWQoY3RfdG9fYWxsb2NfdGFnKGN0KSk7XFxuIDUwNTpcXHRcXG4gNTA2OlxcdFxcdFxcdG4uY3RcXHQ9IGN0O1xcbiA1MDc6XFx0XFx0XFx0bi5ieXRlcyA9IGNvdW50ZXIuYnl0ZXM7XFxuIDUwODpcXHRcXG4gNTA5OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucjsgaSsrKVxcbiA1MTA6XFx0XFx0XFx0XFx0aWYgKG4uYnl0ZXMgXFx1MDAzZSB0YWdzW2ldLmJ5dGVzKVxcbiA1MTE6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDUxMjpcXHRcXG4gNTEzOlxcdFxcdFxcdGlmIChpIFxcdTAwM2MgY291bnQpIHtcXG4gNTE0OlxcdFxcdFxcdFxcdG5yIC09IG5yID09IGNvdW50O1xcbiA1MTU6XFx0XFx0XFx0XFx0bWVtbW92ZShcXHUwMDI2dGFnc1tpICsgMV0sXFxuIDUxNjpcXHRcXHRcXHRcXHRcXHRcXHUwMDI2dGFnc1tpXSxcXG4gNTE3OlxcdFxcdFxcdFxcdFxcdHNpemVvZih0YWdzWzBdKSAqIChuciAtIGkpKTtcXG4gNTE4OlxcdFxcdFxcdFxcdG5yKys7XFxuIDUxOTpcXHRcXHRcXHRcXHR0YWdzW2ldID0gbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTg6Mzg6MTAuODc5MDkyMDg3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2OTIyNzEwOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBgL3Byb2MvYWxsb2NpbmZvYCdzIGBpb2N0bGAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBpb2N0bGAgcm91dGluZSwgYW5kIGl0J3MgcGFydCBvZiB0aGUgYC9wcm9jL2FsbG9jaW5mb2AgaW50ZXJmYWNlLiBUaGF0J3MgZGVmaW5pdGVseSB3aXRoaW4gY29yZSBrZXJuZWwgbG9naWMsIHNwZWNpZmljYWxseSB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIG1lY2hhbmlzbXMuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXp6aW5nPyBBYnNvbHV0ZWx5LCBpdCBsb29rcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUuIFRoZSBmYWN0IHRoYXQgaXQgbWFuaXB1bGF0ZXMgdGhlIFVBUEkgc3RydWN0IGxheW91dCBhbmQgdGhlIGlvY3RsIGhhbmRsaW5nIGl0c2VsZiBpcyBhIGtleSBwb2ludC4gVGhpcyBzdWdnZXN0cyBwb3RlbnRpYWwgZm9yIG1lbW9yeSBjb3JydXB0aW9uIG9yIG90aGVyIGlzc3VlcyBpZiBtYWxmb3JtZWQgZGF0YSBpcyBwcm92aWRlZC4gTGV0J3Mgc2VlLi4uSSBzZWUgdGhhdCBgQUxMT0NJTkZPX0lPQ19HRVRfQVRgIHVzZXMgYG1hdGNoZXNfZmlsdGVyYC4gVGltZSB0byBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBgQ09ORklHX2Agb3B0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZCB0byBhbGxvdyB0aGlzIHRvIGV2ZW4gYmUgZXhwb3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA2MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTg6Mzg6MTUuNTcxMzY2NzM0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODIyMDYzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY2luZm9fcHJvY19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vYWxsb2NfdGFnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vYWxsb2NfdGFnLmM9NDY5PXN0YXRpYyBsb25nIGFsbG9jaW5mb19jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5tbS9hbGxvY190YWcuYy00NzUtXFxubW0vYWxsb2NfdGFnLmM6NDc2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgYWxsb2NpbmZvX3Byb2Nfb3BzID0ge1xcbm1tL2FsbG9jX3RhZy5jLTQ3Ny1cXHQucHJvY19vcGVuXFx0XFx0PSBhbGxvY2luZm9fb3BlbixcXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTEzMTY9c3RhdGljIGludCBfX2luaXQgYWxsb2NfdGFnX2luaXQodm9pZClcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTEzMzctXFxubW0vYWxsb2NfdGFnLmM6MTMzODpcXHRpZiAoIXByb2NfY3JlYXRlKEFMTE9DSU5GT19GSUxFX05BTUUsIDA0MDAsIE5VTEwsIFxcdTAwMjZhbGxvY2luZm9fcHJvY19vcHMpKSB7XFxubW0vYWxsb2NfdGFnLmMtMTMzOS1cXHRcXHRwcl9lcnIoXFxcIkZhaWxlZCB0byBjcmVhdGUgJXMgZmlsZVxcXFxuXFxcIiwgQUxMT0NJTkZPX0ZJTEVfTkFNRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE4OjM4OjE1LjYxOTU5MjExM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTg4MTcyNzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRmluZGluZyB0aGUgS2NvbmZpZyBPcHRpb24gZm9yIGBtbS9hbGxvY190YWcuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgS2NvbmZpZyBvcHRpb24gdGhhdCBjb250cm9scyB0aGUgYnVpbGQgYW5kIGluY2x1c2lvbiBvZiBgbW0vYWxsb2NfdGFnLmNgLiBUaGlzIGlzbid0IGEgcGFydGljdWxhcmx5IGNvbXBsZXggdGFzaywgYnV0IEkgbmVlZCB0byBhcHByb2FjaCBpdCBtZXRob2RpY2FsbHkuIEkgY291bGQganVzdCBncmVwIHRocm91Z2ggdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGl0LCBidXQgdGhhdCdzIGEgYnJ1dGUtZm9yY2UgbWV0aG9kLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIHN5c3RlbSwgdGhlcmUncyBsaWtlbHkgYSBtb3JlIGVsZWdhbnQgYW5kIGVmZmljaWVudCB3YXkgdG8gYWNoaWV2ZSB0aGlzLCBhdm9pZGluZyBmYWxzZSBwb3NpdGl2ZXMuXG5cbkZpcnN0LCBJJ2xsIGNvbnNpZGVyIGhvdyB0aGlzIGZpbGUgZml0cyBpbnRvIHRoZSBsYXJnZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBgbW0vYWxsb2NfdGFnLmNgIGlzIHByZXR0eSBleHBsaWNpdC4gVGhlIGZpbGVuYW1lIGl0c2VsZiBsaWtlbHkgZ2l2ZXMgYSBzdHJvbmcgaGludC4gSSB3b3VsZCBzdGFydCBieSBleHBsb3JpbmcgS2NvbmZpZyBmaWxlcyB3aXRoaW4gdGhlIGBtbWAgZGlyZWN0b3J5LiBJJ2xsIGZvY3VzIG9uIHRoZSBgS2NvbmZpZ2AgZmlsZXMgbG9jYXRlZCBjbG9zZXN0IHRvIHRoZSBmaWxlIGl0c2VsZiwgdGhlbiBleHBhbmRpbmcgdGhlIHNlYXJjaCBpZiBuZWVkZWQsIHRvIHVuZGVyc3RhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSBhIEtjb25maWcgb3B0aW9uIHRoYXQgZGlyZWN0bHkgcmVmZXJlbmNlcyBvciBjb250cm9scyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgc3BlY2lmaWMgZmlsZSBvciwgcGVyaGFwcywgYSBsYXJnZXIgZmVhdHVyZSBpdCdzIHBhcnQgb2YuXG5cbklmIEknbSB1bmFibGUgdG8gZmluZCBhIGRlZmluaXRpdmUgS2NvbmZpZyBvcHRpb24sIEknbGwgdGhlbiBtb3ZlIGludG8gY3Jvc3MtcmVmZXJlbmNpbmcuIEkgY291bGQgbGV2ZXJhZ2UgYSBzeW1ib2wgc2VhcmNoIHRvIGZpbmQgYWxsIHJlZmVyZW5jZXMgdG8gYGFsbG9jX3RhZ2AgKG9yIHdoYXRldmVyIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgaXMpLiBJJ2xsIGNyb3NzLXJlZmVyZW5jZSB3aGF0IG9wdGlvbnMgcmVmZXJlbmNlIHRoZSBzeW1ib2wuIFRoaXMgc2hvdWxkIGxlYWQgbWUgdG8gdGhlIG1vc3QgZGlyZWN0IGNvbnRyb2wgcG9pbnQgZm9yIHRoZSBmZWF0dXJlLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gYWNjb3VudCBmb3IgcG90ZW50aWFsIGluZGlyZWN0IGRlcGVuZGVuY2llcyDigJMgcGVyaGFwcyB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgb25seSBlbmFibGVkIGFzIHBhcnQgb2YgYSBsYXJnZXIgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZSBzZXQuXG5cblVsdGltYXRlbHksIEkgZXhwZWN0IHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbiBhbmQgdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLCBhbGxvd2luZyBtZSB0byB0YWlsb3IgbXkga2VybmVsIGNvbmZpZ3VyYXRpb24gYWNjb3JkaW5nbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1OTEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxODozODoyMC42MDc3Njc5OTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjUxNjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3RhZy5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTE0OD1vYmotJChDT05GSUdfTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUKSArPSB0ZXN0cy9sYXp5X21tdV9tb2RlX2t1bml0Lm9cXG5tbS9NYWtlZmlsZToxNDk6b2JqLSQoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcpICs9IGFsbG9jX3RhZy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE4OjM4OjIwLjY1MTAyNzQ3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNTI2NzQzODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IEFsbG9jYXRpb24gUHJvZmlsaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aGUga2V5IGhlcmUgc2VlbXMgdG8gYmUgYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgY29uZmlndXJlZCBhbmQgd2hlcmUgaXQncyBkZWZpbmVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIExldCBtZSBzZWUuLi4gSSdtIHByZXR0eSBzdXJlIEknbGwgZmluZCBpdCBkZWZpbmVkIGluIHNvbWV0aGluZyBsaWtlIGBsaWIvS2NvbmZpZy5kZWJ1Z2AsIG9yIG1heWJlIGBrZXJuZWwvS2NvbmZpZy5kZWJ1Z2AsIG9yIHBvdGVudGlhbGx5IHNvbWV3aGVyZSBlbHNlIHdoZXJlIGRlYnVnZ2luZyBmZWF0dXJlcyBhcmUgZGVzY3JpYmVkLiBMZXQgbWUgZ28gY2hlY2sgdGhhdCBvdXQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTAyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTg6Mzg6MjUuODAzNzA0Mzc0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQwOTIzNjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnLmRlYnVnPTMxMT1jb25maWcgUEVSX1ZNQV9MT0NLX1NUQVRTXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTMyMy1cXG5tbS9LY29uZmlnLmRlYnVnOjMyNDpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1xcbm1tL0tjb25maWcuZGVidWctMzI1LVxcdGJvb2wgXFxcIkVuYWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTMzNy1cXG5tbS9LY29uZmlnLmRlYnVnOjMzODpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcXG5tbS9LY29uZmlnLmRlYnVnLTMzOS1cXHRib29sIFxcXCJFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTM0Mi1cXG5tbS9LY29uZmlnLmRlYnVnOjM0Mzpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xcbm1tL0tjb25maWcuZGVidWctMzQ0LVxcdGJvb2wgXFxcIk1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGVyIGRlYnVnZ2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTg6Mzg6MjcuNDQ0NjM2NDA0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTY0MzUyMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGVidWdnaW5nIEtjb25maWcgaW4gbW0qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBCYXNlZCBvbiB3aGF0IEknbSBzZWVpbmcsIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gbG9vayBpbnRvIHRoZSBkZWJ1ZyBLY29uZmlnIHNldHRpbmdzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbW1gIHN1YnN5c3RlbS4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gdGhlIGZpbGUgYG1tL0tjb25maWcuZGVidWdgLCBhbmQgSSB0aGluayBsaW5lIDMyNCBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgc3BvdCBmb3IgdGhlIHR5cGUgb2YgY29uZmlndXJhdGlvbiBJJ20gc3VzcGVjdGluZyBpcyBjYXVzaW5nIHRoZSBiZWhhdmlvciBJJ20gd2l0bmVzc2luZy4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxODozODozMC43NDEwNzQyMDRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTU6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzdWNjZXNzLCByZXRyeSBhbmQgZmFpbHVyZSBjb3VudGVycyBvZiBwYWdlXFxuIDMxNjpcXHRcXHQgIGZhdWx0cyBoYW5kbGVkIHVuZGVyIHByb3RlY3Rpb24gb2YgcGVyLXZtYSBsb2Nrcy4gV2hlbiBlbmFibGVkLCB0aGVcXG4gMzE3OlxcdFxcdCAgY291bnRlcnMgYXJlIGV4cG9zZWQgaW4gL3Byb2Mvdm1zdGF0LiBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWZ1bCBmb3JcXG4gMzE4OlxcdFxcdCAga2VybmVsIGRldmVsb3BlcnMgdG8gZXZhbHVhdGUgZWZmZWN0aXZlbmVzcyBvZiBwZXItdm1hIGxvY2tzIGFuZCB0b1xcbiAzMTk6XFx0XFx0ICBpZGVudGlmeSBwYXRob2xvZ2ljYWwgY2FzZXMuIENvdW50aW5nIHRoZXNlIGV2ZW50cyBpbnRyb2R1Y2VzIGEgc21hbGxcXG4gMzIwOlxcdFxcdCAgb3ZlcmhlYWQgaW4gdGhlIHBhZ2UgZmF1bHQgcGF0aC5cXG4gMzIxOlxcdFxcbiAzMjI6XFx0XFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXFxuIDMyMzpcXHRcXG4gMzI0OlxcdGNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HXFxuIDMyNTpcXHRcXHRib29sIFxcXCJFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXFxcIlxcbiAzMjY6XFx0XFx0ZGVmYXVsdCBuXFxuIDMyNzpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbiAzMjg6XFx0XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxuIDMyOTpcXHRcXHRkZXBlbmRzIG9uICFERUJVR19GT1JDRV9XRUFLX1BFUl9DUFVcXG4gMzMwOlxcdFxcdHNlbGVjdCBDT0RFX1RBR0dJTkdcXG4gMzMxOlxcdFxcdHNlbGVjdCBQQUdFX0VYVEVOU0lPTlxcbiAzMzI6XFx0XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbiAzMzM6XFx0XFx0aGVscFxcbiAzMzQ6XFx0XFx0ICBUcmFjayBhbGxvY2F0aW9uIHNvdXJjZSBjb2RlIGFuZCByZWNvcmQgdG90YWwgYWxsb2NhdGlvbiBzaXplXFxuIDMzNTpcXHRcXHQgIGluaXRpYXRlZCBhdCB0aGF0IGNvZGUgbG9jYXRpb24uIFRoZSBtZWNoYW5pc20gY2FuIGJlIHVzZWQgdG8gdHJhY2tcXG4gMzM2OlxcdFxcdCAgbWVtb3J5IGxlYWtzIHdpdGggYSBsb3cgcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSBpbXBhY3QuXFxuIDMzNzpcXHRcXG4gMzM4OlxcdGNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxcbiAzMzk6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBieSBkZWZhdWx0XFxcIlxcbiAzNDA6XFx0XFx0ZGVmYXVsdCB5XFxuIDM0MTpcXHRcXHRkZXBlbmRzIG9uIE1FTV9BTExPQ19QUk9GSUxJTkdcXG4gMzQyOlxcdFxcbiAzNDM6XFx0Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcXG4gMzQ0OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGVyIGRlYnVnZ2luZ1xcXCJcXG4gMzQ1OlxcdFxcdGRlZmF1bHQgblxcbiAzNDY6XFx0XFx0ZGVwZW5kcyBvbiBNRU1fQUxMT0NfUFJPRklMSU5HXFxuIDM0NzpcXHRcXHRzZWxlY3QgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcXG4gMzQ4OlxcdFxcdGhlbHBcXG4gMzQ5OlxcdFxcdCAgQWRkcyB3YXJuaW5ncyB3aXRoIGhlbHBmdWwgZXJyb3IgbWVzc2FnZXMgZm9yIG1lbW9yeSBhbGxvY2F0aW9uXFxuIDM1MDpcXHRcXHQgIHByb2ZpbGluZy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTg6Mzg6MzAuNzQxMTUxMTY0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4Mzg5ODAzMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBhbGxvY2luZm9faW9jdGxgIEZ1bmN0aW9uIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gYE1FTV9BTExPQ19QUk9GSUxJTkdgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiB0byBjb25zaWRlciBoZXJlLiBSaWdodCwgbGV0J3MgbG9vayBhdCB0aGUgaW9jdGwgZnVuY3Rpb25zIOKAkyB3ZSd2ZSBnb3QgYGFsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZGAsIGBhbGxvY2luZm9faW9jdGxfZ2V0X2F0YCwgYGFsbG9jaW5mb19pb2N0bF9nZXRfbmV4dGAsIGBhbGxvY2luZm9faW9jdGxgLCBhbmQgYGFsbG9jaW5mb19jb21wYXRfaW9jdGxgLiBHaXZlbiB0aGUgbGFuZHNjYXBlLCBgYWxsb2NpbmZvX2lvY3RsYCBpcyB0aGUgcHJpbWFyeSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gcXVpY2tseSB2ZXJpZnkgd2hldGhlciBgYWxsb2NpbmZvX2lvY3RsYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gWWVzLCBpdCBpczogYHN0YXRpYyBsb25nIGFsbG9jaW5mb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBfX2FyZylgLiBXYWl0IGEgbWludXRlLCBzdGF0aWMgZnVuY3Rpb25zIGFyZSAqb2Z0ZW4qIGlubGluZWQsIGJ1dCB0aGF0J3Mgbm90IGhhcHBlbmluZyBoZXJlLiBTaW5jZSBpdHMgYWRkcmVzcyBpcyBiZWluZyBhc3NpZ25lZCB0byBgYWxsb2NpbmZvX3Byb2Nfb3BzLnByb2NfaW9jdGxgLCB0aGUgY29tcGlsZXIgKmNhbid0KiBpbmxpbmUgaXQuIEludGVyZXN0aW5nLiBPbiB0aGUgb3RoZXIgaGFuZCwgYGFsbG9jaW5mb19pb2N0bF9nZXRfYXRgIGlzIGFsc28gc3RhdGljLCBidXQgdGhhdCBmdW5jdGlvbiAqaXMqIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBhbGxvY2luZm9faW9jdGxgLlxuXG5MZXQncyBjb25maXJtIHRoYXQgYGFsbG9jaW5mb19pb2N0bGAgaXMgdGhlIHJpZ2h0IGZ1bmN0aW9uIHRvIGZvY3VzIG9uLiBZZXAsIGl0IHNlZW1zIHRvIGJlIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgaW9jdGwgY2FsbHMsIGFuZCB0aGF0IG1ha2VzIGl0IGFuIGV4Y2VsbGVudCBmb2NhbCBwb2ludC4gSSBzaG91bGQgYWxzbyBpbmNsdWRlIGBhbGxvY2luZm9fY29tcGF0X2lvY3RsYCBpbiB0aGUgbGlzdC5cblxuT2theSwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBgbW0vYWxsb2NfdGFnLmNgIHRvIGVuc3VyZSBJIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBhbnkgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMzQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxODozODozNy41ODAxMzQ1MzZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTIzNjY3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY2luZm9faW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vYWxsb2NfdGFnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vYWxsb2NfdGFnLmM9MjI0PXN0YXRpYyB2b2lkIGFsbG9jaW5mb190b19wYXJhbXMoc3RydWN0IGNvZGV0YWcgKmN0LFxcbi0tXFxubW0vYWxsb2NfdGFnLmMtMjQzLSAqL1xcbm1tL2FsbG9jX3RhZy5jOjI0NDpzdGF0aWMgaW50IGFsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXFxubW0vYWxsb2NfdGFnLmMtMjQ1LXtcXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTI2MT1zdGF0aWMgYm9vbCBtYXRjaGVzX2ZpbHRlcihzdHJ1Y3QgY29kZXRhZyAqY3QsIHN0cnVjdCBhbGxvY2luZm9fZmlsdGVyICpmaWx0ZXIsXFxuLS1cXG5tbS9hbGxvY190YWcuYy0zMTctICovXFxubW0vYWxsb2NfdGFnLmM6MzE4OnN0YXRpYyBpbnQgYWxsb2NpbmZvX2lvY3RsX2dldF9hdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgX191c2VyICphcmcpXFxubW0vYWxsb2NfdGFnLmMtMzE5LXtcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTM5Mi0gKi9cXG5tbS9hbGxvY190YWcuYzozOTM6c3RhdGljIGludCBhbGxvY2luZm9faW9jdGxfZ2V0X25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkIF9fdXNlciAqYXJnKVxcbm1tL2FsbG9jX3RhZy5jLTM5NC17XFxuLS1cXG5tbS9hbGxvY190YWcuYy00NDMtICovXFxubW0vYWxsb2NfdGFnLmM6NDQ0OnN0YXRpYyBsb25nIGFsbG9jaW5mb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcXG5tbS9hbGxvY190YWcuYy00NDUtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgX19hcmcpXFxuLS1cXG5tbS9hbGxvY190YWcuYy00NTEtXFx0Y2FzZSBBTExPQ0lORk9fSU9DX0NPTlRFTlRfSUQ6XFxubW0vYWxsb2NfdGFnLmM6NDUyOlxcdFxcdHJldCA9IGFsbG9jaW5mb19pb2N0bF9nZXRfY29udGVudF9pZChmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEsIGFyZyk7XFxubW0vYWxsb2NfdGFnLmMtNDUzLVxcdFxcdGJyZWFrO1xcbm1tL2FsbG9jX3RhZy5jLTQ1NC1cXHRjYXNlIEFMTE9DSU5GT19JT0NfR0VUX0FUOlxcbm1tL2FsbG9jX3RhZy5jOjQ1NTpcXHRcXHRyZXQgPSBhbGxvY2luZm9faW9jdGxfZ2V0X2F0KGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YSwgYXJnKTtcXG5tbS9hbGxvY190YWcuYy00NTYtXFx0XFx0YnJlYWs7XFxubW0vYWxsb2NfdGFnLmMtNDU3LVxcdGNhc2UgQUxMT0NJTkZPX0lPQ19HRVRfTkVYVDpcXG5tbS9hbGxvY190YWcuYzo0NTg6XFx0XFx0cmV0ID0gYWxsb2NpbmZvX2lvY3RsX2dldF9uZXh0KGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YSwgYXJnKTtcXG5tbS9hbGxvY190YWcuYy00NTktXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9hbGxvY190YWcuYz00Njk9c3RhdGljIGxvbmcgYWxsb2NpbmZvX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTQ3MS17XFxubW0vYWxsb2NfdGFnLmM6NDcyOlxcdHJldHVybiBhbGxvY2luZm9faW9jdGwoZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZyljb21wYXRfcHRyKGFyZykpO1xcbm1tL2FsbG9jX3RhZy5jLTQ3My19XFxuLS1cXG5tbS9hbGxvY190YWcuYz00NzY9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBhbGxvY2luZm9fcHJvY19vcHMgPSB7XFxuLS1cXG5tbS9hbGxvY190YWcuYy00ODAtXFx0LnByb2NfcmVsZWFzZVxcdFxcdD0gYWxsb2NpbmZvX3JlbGVhc2UsXFxubW0vYWxsb2NfdGFnLmM6NDgxOlxcdC5wcm9jX2lvY3RsXFx0XFx0PSBhbGxvY2luZm9faW9jdGwsXFxubW0vYWxsb2NfdGFnLmMtNDgyLSNpZmRlZiBDT05GSUdfQ09NUEFUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE4OjM4OjM3LjgyOTM3NzIwOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTM3MDgzMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gaGlnaGxpZ2h0IGZ1bmN0aW9ucyBsaWtlIGBhbGxvY2luZm9faW9jdGxgLCBgYWxsb2NpbmZvX2NvbXBhdF9pb2N0bGAsIGFuZCB0aGUgb3RoZXJzIGFzIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcuIEhvd2V2ZXIsIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IGFza3MgbWUgdG8gZmF2b3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IG1ha2VzIHNlbnNlOyBpbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGxlc3MgbGlrZWx5IHRvIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBhbmQgdGhlcmVmb3JlIGhhcmRlciB0byB0YXJnZXQgZGlyZWN0bHkuXG5cblNpbmNlIGJvdGggYGFsbG9jaW5mb19pb2N0bGAgYW5kIGBhbGxvY2luZm9fY29tcGF0X2lvY3RsYCBhcmUgc3RhdGljLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXkgYXJlIG5vdCBpbmxpbmVkLiBUaGVpciBhZGRyZXNzIGlzIHRha2VuLCBzbyBJJ20gcmVhc29uYWJseSBjb25maWRlbnQgdGhleSB3b24ndCBiZSBpbmxpbmVkLiBJIGNhbiB1c2UgdGhvc2UgYXMgZm9jdXMgc3ltYm9scy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgYW55IGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZC4gYE1FTV9BTExPQ19QUk9GSUxJTkdgIHNlZW1zIHRvIGJlIHRoZSBrZXksIGRlcGVuZGluZyBvbiBgTU1VYCwgYFBST0NfRlNgLCBhbmQgYCFERUJVR19GT1JDRV9XRUFLX1BFUl9DUFVgLiAgYFBST0NfRlNgIGlzIHByZXR0eSBzdGFuZGFyZCwgc28gYE1FTV9BTExPQ19QUk9GSUxJTkdgIGlzIHRoZSBpbXBvcnRhbnQgY29uZmlnLlxuXG5Mb29raW5nIGF0IHRoZSBwYXRjaCBpdHNlbGYsIGl0J3MgbW9kaWZ5aW5nIGBzdHJ1Y3QgYWxsb2NpbmZvX3RhZ2AgYW5kIGBzdHJ1Y3QgYWxsb2NpbmZvX2ZpbHRlcmAgaW4gYGluY2x1ZGUvdWFwaS9saW51eC9hbGxvY190YWcuaGAuIEl0IGFsc28gdXBkYXRlcyBgbWF0Y2hlc19maWx0ZXJgIGluIGBtbS9hbGxvY190YWcuY2AsIGFuZCBhIGNvbW1lbnQgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2FsbG9jX3RhZy9hbGxvY2luZm9faW9jdGxfdGVzdC5jYC4gIFRoaXMgaXMgYSBVQVBJIGNoYW5nZSBpbXBhY3RpbmcgdGhlIGAvcHJvYy9hbGxvY2luZm9gIGlvY3RscyBkaXJlY3RseSwgd2hpY2ggbWVhbnMgaXQgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLlxuXG5NeSBjb25jbHVzaW9uIGlzIGNsZWFyOlxuXG4qICAgKipXb3J0aEZ1enppbmc6IHRydWUqKlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBhbGxvY2luZm9faW9jdGxgLCBgYWxsb2NpbmZvX2NvbXBhdF9pb2N0bGBcbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYE1FTV9BTExPQ19QUk9GSUxJTkdgXG5cbioqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVUFQSSBzdHJ1Y3QgbGF5b3V0IGZvciB0aGUgYC9wcm9jL2FsbG9jaW5mb2AgaW9jdGwgYW5kIHVwZGF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgZmlsdGVyIG1hdGNoaW5nIGxvZ2ljIGluIHRoZSBrZXJuZWwuIEZ1enppbmcgdGhlIGlvY3RsIGhhbmRsZXIgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgbmV3IHN0cnVjdCBsYXlvdXQgYW5kIGZpbHRlcmluZyBsb2dpYyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkgd2l0aG91dCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGxvZ2ljIGVycm9ycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NDMsIk91dHB1dFRva2VucyI6MTE1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE4OjM4OjQ2Ljc2NjQ2MzQxNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNDg0MTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NpbmZvX2lvY3RsXCIsXG4gICAgXCJhbGxvY2luZm9fY29tcGF0X2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFVBUEkgc3RydWN0IGxheW91dCBmb3IgdGhlIC9wcm9jL2FsbG9jaW5mbyBpb2N0bCBhbmQgdXBkYXRlcyB0aGUgY29ycmVzcG9uZGluZyBmaWx0ZXIgbWF0Y2hpbmcgbG9naWMgaW4gdGhlIGtlcm5lbC4gRnV6emluZyB0aGUgaW9jdGwgaGFuZGxlciBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBuZXcgc3RydWN0IGxheW91dCBhbmQgZmlsdGVyaW5nIGxvZ2ljIGFyZSBoYW5kbGVkIGNvcnJlY3RseSB3aXRob3V0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbG9naWMgZXJyb3JzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTV9BTExPQ19QUk9GSUxJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY2luZm9faW9jdGxcIixcbiAgICBcImFsbG9jaW5mb19jb21wYXRfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVUFQSSBzdHJ1Y3QgbGF5b3V0IGZvciB0aGUgL3Byb2MvYWxsb2NpbmZvIGlvY3RsIGFuZCB1cGRhdGVzIHRoZSBjb3JyZXNwb25kaW5nIGZpbHRlciBtYXRjaGluZyBsb2dpYyBpbiB0aGUga2VybmVsLiBGdXp6aW5nIHRoZSBpb2N0bCBoYW5kbGVyIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIG5ldyBzdHJ1Y3QgbGF5b3V0IGFuZCBmaWx0ZXJpbmcgbG9naWMgYXJlIGhhbmRsZWQgY29ycmVjdGx5IHdpdGhvdXQgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciBsb2dpYyBlcnJvcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowjvkfz[1] Phase: Succeeded StartedAt: 2026-08-04 18:39:10 +0000 UTC FinishedAt: 2026-08-04 18:39:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvkfz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-04 18:39:10 +0000 UTC FinishedAt: 2026-08-04 18:39:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvkfz[2] Phase: Succeeded StartedAt: 2026-08-04 18:39:10 +0000 UTC FinishedAt: 2026-08-04 22:30:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-04 18:39:10 +0000 UTC FinishedAt: 2026-08-04 22:30:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-04 18:39:10 +0000 UTC FinishedAt: 2026-08-04 18:39:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-04 18:39:10 +0000 UTC FinishedAt: 2026-08-04 18:39:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowjvkfz/series-workflowjvkfz-convert-artifact-280035549/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-04 18:39:20 +0000 UTC FinishedAt: 2026-08-04 18:57:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-04 18:39:20 +0000 UTC FinishedAt: 2026-08-04 18:57:16 +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:*67401436-081e-4115-b381-b91f0fc127d7,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-workflowjvkfz/series-workflowjvkfz-convert-artifact-280035549/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": "e30b64e2-1570-4dda-9c03-5c7ff23d7883", "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-workflowjvkfz/series-workflowjvkfz-build-action-489935891/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-04 18:39:20 +0000 UTC FinishedAt: 2026-08-04 18:57:06 +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:*67401436-081e-4115-b381-b91f0fc127d7,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-workflowjvkfz/series-workflowjvkfz-convert-artifact-280035549/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": "e30b64e2-1570-4dda-9c03-5c7ff23d7883", "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-workflowjvkfz/series-workflowjvkfz-build-action-489935891/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-04 18:57:16 +0000 UTC FinishedAt: 2026-08-04 18:57:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-04 18:57:16 +0000 UTC FinishedAt: 2026-08-04 18:57:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-04 18:57:16 +0000 UTC FinishedAt: 2026-08-04 18:57:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-04 18:57:16 +0000 UTC FinishedAt: 2026-08-04 18:57:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowjvkfz/series-workflowjvkfz-convert-artifact-3082095288/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-04 18:57:26 +0000 UTC FinishedAt: 2026-08-04 18:59:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-04 18:57:26 +0000 UTC FinishedAt: 2026-08-04 18:59:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e30b64e2-1570-4dda-9c03-5c7ff23d7883,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-workflowjvkfz/series-workflowjvkfz-build-action-489935891/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-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-04 18:59:27 +0000 UTC FinishedAt: 2026-08-04 18:59:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-04 18:59:27 +0000 UTC FinishedAt: 2026-08-04 18:59:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-04 18:59:27 +0000 UTC FinishedAt: 2026-08-04 19:16:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-04 18:59:27 +0000 UTC FinishedAt: 2026-08-04 19:16:10 +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:*67401436-081e-4115-b381-b91f0fc127d7,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-workflowjvkfz/series-workflowjvkfz-convert-artifact-3082095288/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": "e54256ce-bca3-4b45-9789-f1b1311863b4", "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-workflowjvkfz/series-workflowjvkfz-build-action-1707680676/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-04 18:59:27 +0000 UTC FinishedAt: 2026-08-04 19:16:00 +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:*67401436-081e-4115-b381-b91f0fc127d7,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-workflowjvkfz/series-workflowjvkfz-convert-artifact-3082095288/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": "e54256ce-bca3-4b45-9789-f1b1311863b4", "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-workflowjvkfz/series-workflowjvkfz-build-action-1707680676/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-04 19:16:10 +0000 UTC FinishedAt: 2026-08-04 19:16:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-04 19:16:10 +0000 UTC FinishedAt: 2026-08-04 19:16:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-04 19:16:10 +0000 UTC FinishedAt: 2026-08-04 19:18:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-04 19:16:10 +0000 UTC FinishedAt: 2026-08-04 19:17:52 +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:*e54256ce-bca3-4b45-9789-f1b1311863b4,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-workflowjvkfz/series-workflowjvkfz-build-action-1707680676/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-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-04 19:18:02 +0000 UTC FinishedAt: 2026-08-04 22:30:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-04 19:18:02 +0000 UTC FinishedAt: 2026-08-04 22:30:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*e30b64e2-1570-4dda-9c03-5c7ff23d7883,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e54256ce-bca3-4b45-9789-f1b1311863b4,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-workflowjvkfz/series-workflowjvkfz-build-action-489935891/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-workflowjvkfz/series-workflowjvkfz-build-action-1707680676/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-04 19:18:02 +0000 UTC FinishedAt: 2026-08-04 19:18:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-04 19:18:02 +0000 UTC FinishedAt: 2026-08-04 19:18:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjvkfz/series-workflowjvkfz-convert-artifact-864161809/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-04 19:18:02 +0000 UTC FinishedAt: 2026-08-04 19:18:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-04 19:18:02 +0000 UTC FinishedAt: 2026-08-04 19:18:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-04 19:18:03 +0000 UTC FinishedAt: 2026-08-04 19:18:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-04 19:18:13 +0000 UTC FinishedAt: 2026-08-04 22:30:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvkfz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["allocinfo_ioctl","allocinfo_compat_ioctl"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486855239e38a91d3eae26618ccb7845c1764625","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"deca0563-9bc8-4d7d-b56f-4aec949c58c1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-04 19:18:13 +0000 UTC FinishedAt: 2026-08-04 22:30:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e30b64e2-1570-4dda-9c03-5c7ff23d7883,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e54256ce-bca3-4b45-9789-f1b1311863b4,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-workflowjvkfz/series-workflowjvkfz-build-action-489935891/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-workflowjvkfz/series-workflowjvkfz-build-action-1707680676/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-workflowjvkfz/series-workflowjvkfz-convert-artifact-864161809/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,}