Name: series-workflowj9gjh Phase: Succeeded StartedAt: 2026-07-24 17:28:30 +0000 UTC FinishedAt: 2026-07-24 19:29:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9gjh[0] Phase: Succeeded StartedAt: 2026-07-24 17:28:30 +0000 UTC FinishedAt: 2026-07-24 18:05:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9gjh[0].run-triage Phase: Succeeded StartedAt: 2026-07-24 17:28:30 +0000 UTC FinishedAt: 2026-07-24 18:05:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "series_id": "7a4a0a50-b419-4eea-91e0-674c59645e82" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "emit_ldx", "emit_stx", "bpf_jit_probe_load_pre", "bpf_jit_probe_store_pre", "bpf_jit_supports_insn" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZW1pdF9sZHgmIzM0OywKICAgICYjMzQ7ZW1pdF9zdHgmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9wcm9iZV9sb2FkX3ByZSYjMzQ7LAogICAgJiMzNDticGZfaml0X3Byb2JlX3N0b3JlX3ByZSYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1cHBvcnRzX2luc24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBzdXBwb3J0IGZvciBCUEZfUFJPQkVfQVRPTUlDLCBCUEZfTE9BRF9BQ1EsIGFuZCBCUEZfU1RPUkVfUkVMIGluc3RydWN0aW9ucyBpbiB0aGUgczM5MCBCUEYgSklUIGNvbXBpbGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIEpJVCBsb2dpYyBvbiBzMzkwIGFyY2hpdGVjdHVyZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyODlkMTFkNGNmNjc2OGQwMWUxYTA5NDFlN2Y0MzU3ZDMwOGU5MjJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMjQgMTg6MDQ6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IDMxNzQ5YzAzNjJjYTIzLi5jOThhYjJlZWNlNTdmNSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC03NDMsMTAgJiM0Mzs3NDMsMTIgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9iZV9sb2FkX3ByZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4ge1xuIFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTSBcdTAwMjZcdTAwMjZcbiBcdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU1TWCBcdTAwMjZcdTAwMjZcbi1cdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU0zMilcbiYjNDM7XHQgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfTUVNMzIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX0FUT01JQylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyKSB7XG4mIzQzO1x0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyIHx8XG4mIzQzO1x0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX0FUT01JQykge1xuIFx0XHQvKiBsZ3JsICVyMSxrZXJuX2FyZW5hICovXG4gXHRcdEVNSVQ2X1BDUkVMX1JJTEIoMHhjNDA4MDAwMCwgUkVHX1cxLCBqaXQtXHUwMDNla2Vybl9hcmVuYSk7XG4gXHRcdHByb2JlLVx1MDAzZWFyZW5hX3JlZyA9IFJFR19XMTtcbkBAIC03NTgsNyAmIzQzOzc2MCw4IEBAIHN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIHN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpXG4ge1xuLVx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTTMyKVxuJiM0MztcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU0zMiBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfQVRPTUlDKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvKiBsZ3JsICVyMSxrZXJuX2FyZW5hICovXG5AQCAtODMwLDYgJiM0Mzs4MzMsNzIgQEAgc3RhdGljIGludCBicGZfaml0X3Byb2JlX3Bvc3Qoc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBlbWl0X2xkeChzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2ppdF9wcm9iZSBwcm9iZTtcbiYjNDM7XG4mIzQzO1x0YnBmX2ppdF9wcm9iZV9pbml0KFx1MDAyNnByb2JlKTtcbiYjNDM7XHRicGZfaml0X3Byb2JlX2xvYWRfcHJlKGppdCwgaW5zbiwgXHUwMDI2cHJvYmUpO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkpIHtcbiYjNDM7XHRjYXNlIEJQRl9COiAvKiBkc3QgPSAqKHU4ICopKHVsKSAoc3JjICYjNDM7IG9mZikgKi9cbiYjNDM7XHRcdC8qIGxsZ2MgJWRzdCxvZmYoJXNyYywlYXJlbmEpICovXG4mIzQzO1x0XHRFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDA5MCwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZXNyY19yZWcsXG4mIzQzO1x0XHRcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfSDogLyogZHN0ID0gKih1MTYgKikodWwpIChzcmMgJiM0Mzsgb2ZmKSAqL1xuJiM0MztcdFx0LyogbGxnaCAlZHN0LG9mZiglc3JjLCVhcmVuYSkgKi9cbiYjNDM7XHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDkxLCBpbnNuLVx1MDAzZWRzdF9yZWcsIGluc24tXHUwMDNlc3JjX3JlZyxcbiYjNDM7XHRcdFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBpbnNuLVx1MDAzZW9mZik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9XOiAvKiBkc3QgPSAqKHUzMiAqKSh1bCkgKHNyYyAmIzQzOyBvZmYpICovXG4mIzQzO1x0XHQvKiBsbGdmICVkc3Qsb2ZmKCVzcmMsJWFyZW5hKSAqL1xuJiM0MztcdFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwMTYsIGluc24tXHUwMDNlZHN0X3JlZywgaW5zbi1cdTAwM2VzcmNfcmVnLFxuJiM0MztcdFx0XHQgICAgICBwcm9iZS5hcmVuYV9yZWcsIGluc24tXHUwMDNlb2ZmKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQlBGX0RXOiAvKiBkc3QgPSAqKHU2NCAqKSh1bCkgKHNyYyAmIzQzOyBvZmYpICovXG4mIzQzO1x0XHQvKiBsZyAlZHN0LG9mZiglc3JjLCVhcmVuYSkgKi9cbiYjNDM7XHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDA0LCBpbnNuLVx1MDAzZWRzdF9yZWcsIGluc24tXHUwMDNlc3JjX3JlZyxcbiYjNDM7XHRcdFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBpbnNuLVx1MDAzZW9mZik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXHUwMDI2cHJvYmUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVtaXRfc3R4KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfaml0X3Byb2JlIHByb2JlO1xuJiM0MztcbiYjNDM7XHRicGZfaml0X3Byb2JlX2luaXQoXHUwMDI2cHJvYmUpO1xuJiM0MztcdGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKGppdCwgaW5zbiwgXHUwMDI2cHJvYmUpO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkpIHtcbiYjNDM7XHRjYXNlIEJQRl9COiAvKiAqKHU4ICopKGRzdCAmIzQzOyBvZmYpID0gc3JjX3JlZyAqL1xuJiM0MztcdFx0Lyogc3RjeSAlc3JjLG9mZiglZHN0LCVhcmVuYSkgKi9cbiYjNDM7XHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDcyLCBpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlZHN0X3JlZyxcbiYjNDM7XHRcdFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBpbnNuLVx1MDAzZW9mZik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9IOiAvKiAodTE2ICopKGRzdCAmIzQzOyBvZmYpID0gc3JjICovXG4mIzQzO1x0XHQvKiBzdGh5ICVzcmMsb2ZmKCVkc3QsJWFyZW5hKSAqL1xuJiM0MztcdFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwNzAsIGluc24tXHUwMDNlc3JjX3JlZywgaW5zbi1cdTAwM2Vkc3RfcmVnLFxuJiM0MztcdFx0XHQgICAgICBwcm9iZS5hcmVuYV9yZWcsIGluc24tXHUwMDNlb2ZmKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQlBGX1c6IC8qICoodTMyICopKGRzdCAmIzQzOyBvZmYpID0gc3JjICovXG4mIzQzO1x0XHQvKiBzdHkgJXNyYyxvZmYoJWRzdCwlYXJlbmEpICovXG4mIzQzO1x0XHRFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDA1MCwgaW5zbi1cdTAwM2VzcmNfcmVnLCBpbnNuLVx1MDAzZWRzdF9yZWcsXG4mIzQzO1x0XHRcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfRFc6IC8qICh1NjQgKikoZHN0ICYjNDM7IG9mZikgPSBzcmMgKi9cbiYjNDM7XHRcdC8qIHN0ZyAlc3JjLG9mZiglZHN0LCVhcmVuYSkgKi9cbiYjNDM7XHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDI0LCBpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlZHN0X3JlZyxcbiYjNDM7XHRcdFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBpbnNuLVx1MDAzZW9mZik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXHUwMDI2cHJvYmUpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogU2lnbi0gb3IgemVyby1leHRlbmQgdGhlIHJlZ2lzdGVyIGlmIG5lY2Vzc2FyeVxuICAqL1xuQEAgLTE0NzcsNDQgJiM0MzsxNTQ2LDEzIEBAIHN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4gXHQgKi9cbiBcdGNhc2UgQlBGX1NUWCB8IEJQRl9NRU0gfCBCUEZfQjogLyogKih1OCAqKShkc3QgJiM0Mzsgb2ZmKSA9IHNyY19yZWcgKi9cbiBcdGNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9COlxuLVx0XHRicGZfaml0X3Byb2JlX3N0b3JlX3ByZShqaXQsIGluc24sIFx1MDAyNnByb2JlKTtcbi1cdFx0Lyogc3RjeSAlc3JjLG9mZiglZHN0LCVhcmVuYSkgKi9cbi1cdFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwNzIsIHNyY19yZWcsIGRzdF9yZWcsXG4tXHRcdFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpO1xuLVx0XHRlcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXHUwMDI2cHJvYmUpO1xuLVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiBlcnI7XG4tXHRcdGppdC1cdTAwM2VzZWVuIHw9IFNFRU5fTUVNO1xuLVx0XHRicmVhaztcbiBcdGNhc2UgQlBGX1NUWCB8IEJQRl9NRU0gfCBCUEZfSDogLyogKHUxNiAqKShkc3QgJiM0Mzsgb2ZmKSA9IHNyYyAqL1xuIFx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0g6XG4tXHRcdGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKGppdCwgaW5zbiwgXHUwMDI2cHJvYmUpO1xuLVx0XHQvKiBzdGh5ICVzcmMsb2ZmKCVkc3QsJWFyZW5hKSAqL1xuLVx0XHRFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDA3MCwgc3JjX3JlZywgZHN0X3JlZyxcbi1cdFx0XHQgICAgICBwcm9iZS5hcmVuYV9yZWcsIG9mZik7XG4tXHRcdGVyciA9IGJwZl9qaXRfcHJvYmVfcG9zdChqaXQsIGZwLCBcdTAwMjZwcm9iZSk7XG4tXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIGVycjtcbi1cdFx0aml0LVx1MDAzZXNlZW4gfD0gU0VFTl9NRU07XG4tXHRcdGJyZWFrO1xuIFx0Y2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9XOiAvKiAqKHUzMiAqKShkc3QgJiM0Mzsgb2ZmKSA9IHNyYyAqL1xuIFx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX1c6XG4tXHRcdGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKGppdCwgaW5zbiwgXHUwMDI2cHJvYmUpO1xuLVx0XHQvKiBzdHkgJXNyYyxvZmYoJWRzdCwlYXJlbmEpICovXG4tXHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDUwLCBzcmNfcmVnLCBkc3RfcmVnLFxuLVx0XHRcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgb2ZmKTtcbi1cdFx0ZXJyID0gYnBmX2ppdF9wcm9iZV9wb3N0KGppdCwgZnAsIFx1MDAyNnByb2JlKTtcbi1cdFx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gZXJyO1xuLVx0XHRqaXQtXHUwMDNlc2VlbiB8PSBTRUVOX01FTTtcbi1cdFx0YnJlYWs7XG4gXHRjYXNlIEJQRl9TVFggfCBCUEZfTUVNIHwgQlBGX0RXOiAvKiAodTY0ICopKGRzdCAmIzQzOyBvZmYpID0gc3JjICovXG4gXHRjYXNlIEJQRl9TVFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfRFc6XG4tXHRcdGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKGppdCwgaW5zbiwgXHUwMDI2cHJvYmUpO1xuLVx0XHQvKiBzdGcgJXNyYyxvZmYoJWRzdCwlYXJlbmEpICovXG4tXHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDI0LCBzcmNfcmVnLCBkc3RfcmVnLFxuLVx0XHRcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgb2ZmKTtcbi1cdFx0ZXJyID0gYnBmX2ppdF9wcm9iZV9wb3N0KGppdCwgZnAsIFx1MDAyNnByb2JlKTtcbiYjNDM7XHRcdGVyciA9IGVtaXRfc3R4KGppdCwgZnAsIGluc24pO1xuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdGppdC1cdTAwM2VzZWVuIHw9IFNFRU5fTUVNO1xuQEAgLTE1NzQsMTkgJiM0MzsxNjEyLDIzIEBAIHN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4gXHQvKlxuIFx0ICogQlBGX0FUT01JQ1xuIFx0ICovXG4mIzQzO1x0Y2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9COlxuJiM0MztcdGNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfSDpcbiBcdGNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfRFc6XG4gXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX1c6XG4mIzQzO1x0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX0FUT01JQyB8IEJQRl9COlxuJiM0MztcdGNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9BVE9NSUMgfCBCUEZfSDpcbiBcdGNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9BVE9NSUMgfCBCUEZfRFc6XG4gXHRjYXNlIEJQRl9TVFggfCBCUEZfUFJPQkVfQVRPTUlDIHwgQlBGX1c6XG4gXHR7XG4gXHRcdGJvb2wgaXMzMiA9IEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1c7XG4gXG4gXHRcdC8qXG4tXHRcdCAqIFVubGlrZSBsb2FkcyBhbmQgc3RvcmVzLCBhdG9taWNzIGhhdmUgb25seSBhIGJhc2UgcmVnaXN0ZXIsXG4tXHRcdCAqIGJ1dCBubyBpbmRleCByZWdpc3Rlci4gRm9yIHRoZSBub24tYXJlbmEgY2FzZSwgc2ltcGx5IHVzZVxuLVx0XHQgKiAlZHN0IGFzIGEgYmFzZS4gRm9yIHRoZSBhcmVuYSBjYXNlLCB1c2UgdGhlIHdvcmsgcmVnaXN0ZXJcbi1cdFx0ICogJXIxOiBmaXJzdCwgbG9hZCB0aGUgYXJlbmEgYmFzZSBpbnRvIGl0LCBhbmQgdGhlbiBhZGQgJWRzdFxuLVx0XHQgKiB0byBpdC5cbiYjNDM7XHRcdCAqIFVubGlrZSBsb2FkcyBhbmQgc3RvcmVzLCBzMzkwIGF0b21pY3MgaGF2ZSBvbmx5IGEgYmFzZVxuJiM0MztcdFx0ICogcmVnaXN0ZXIsIGJ1dCBubyBpbmRleCByZWdpc3Rlci4gRm9yIHRoZSBub24tYXJlbmEgY2FzZSxcbiYjNDM7XHRcdCAqIHNpbXBseSB1c2UgJWRzdCBhcyBhIGJhc2UuIEZvciB0aGUgYXJlbmEgY2FzZSwgdXNlIHRoZVxuJiM0MztcdFx0ICogd29yayByZWdpc3RlciAlcjE6IGZpcnN0LCBsb2FkIHRoZSBhcmVuYSBiYXNlIGludG8gaXQsXG4mIzQzO1x0XHQgKiBhbmQgdGhlbiBhZGQgJWRzdCB0byBpdC5cbiBcdFx0ICovXG4gXHRcdHByb2JlLmFyZW5hX3JlZyA9IGRzdF9yZWc7XG4gXG5AQCAtMTY3Myw2ICYjNDM7MTcxNSwxOCBAQCBzdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxuIFx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBCUEZfTE9BRF9BQ1E6XG4mIzQzO1x0XHRcdC8qIHMzOTAgaGFzIHN0cm9uZyBvcmRlcmluZywganVzdCB1c2UgbG9hZCAqL1xuJiM0MztcdFx0XHRlcnIgPSBlbWl0X2xkeChqaXQsIGZwLCBpbnNuKTtcbiYjNDM7XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgQlBGX1NUT1JFX1JFTDpcbiYjNDM7XHRcdFx0LyogczM5MCBoYXMgc3Ryb25nIG9yZGVyaW5nLCBqdXN0IHVzZSBzdG9yZSAqL1xuJiM0MztcdFx0XHRlcnIgPSBlbWl0X3N0eChqaXQsIGZwLCBpbnNuKTtcbiYjNDM7XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRwcl9lcnIoXCYjMzQ7VW5rbm93biBhdG9taWMgb3BlcmF0aW9uICUwMnhcXG5cJiMzNDssIGluc24tXHUwMDNlaW1tKTtcbiBcdFx0XHRyZXR1cm4gLTE7XG5AQCAtMTY4NywxNSAmIzQzOzE3NDEsMjAgQEAgc3RhdGljIG5vaW5saW5lIGludCBicGZfaml0X2luc24oc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcbiBcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfQjogLyogZHN0ID0gKih1OCAqKSh1bCkgKHNyYyAmIzQzOyBvZmYpICovXG4gXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX0I6XG4gXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfQjpcbi1cdFx0YnBmX2ppdF9wcm9iZV9sb2FkX3ByZShqaXQsIGluc24sIFx1MDAyNnByb2JlKTtcbi1cdFx0LyogbGxnYyAlZHN0LG9mZiglc3JjLCVhcmVuYSkgKi9cbi1cdFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwOTAsIGRzdF9yZWcsIHNyY19yZWcsXG4tXHRcdFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpO1xuLVx0XHRlcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXHUwMDI2cHJvYmUpO1xuJiM0MztcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfSDogLyogZHN0ID0gKih1MTYgKikodWwpIChzcmMgJiM0Mzsgb2ZmKSAqL1xuJiM0MztcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0gfCBCUEZfSDpcbiYjNDM7XHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfSDpcbiYjNDM7XHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX1c6IC8qIGRzdCA9ICoodTMyICopKHVsKSAoc3JjICYjNDM7IG9mZikgKi9cbiYjNDM7XHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX1c6XG4mIzQzO1x0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX1c6XG4mIzQzO1x0Y2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9EVzogLyogZHN0ID0gKih1NjQgKikodWwpIChzcmMgJiM0Mzsgb2ZmKSAqL1xuJiM0MztcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0gfCBCUEZfRFc6XG4mIzQzO1x0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0RXOlxuJiM0MztcdFx0ZXJyID0gZW1pdF9sZHgoaml0LCBmcCwgaW5zbik7XG4gXHRcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0aml0LVx1MDAzZXNlZW4gfD0gU0VFTl9NRU07XG4tXHRcdGlmIChpbnNuX2lzX3pleHQoXHUwMDI2aW5zblsxXSkpXG4mIzQzO1x0XHRpZiAoQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfRFcgXHUwMDI2XHUwMDI2IGluc25faXNfemV4dChcdTAwMjZpbnNuWzFdKSlcbiBcdFx0XHRpbnNuX2NvdW50ID0gMjtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfQjogLyogZHN0ID0gKihzOCAqKSh1bCkgKHNyYyAmIzQzOyBvZmYpICovXG5AQCAtMTcwOCwyMCAmIzQzOzE3NjcsNiBAQCBzdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdGppdC1cdTAwM2VzZWVuIHw9IFNFRU5fTUVNO1xuIFx0XHRicmVhaztcbi1cdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfSDogLyogZHN0ID0gKih1MTYgKikodWwpIChzcmMgJiM0Mzsgb2ZmKSAqL1xuLVx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTSB8IEJQRl9IOlxuLVx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0g6XG4tXHRcdGJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoaml0LCBpbnNuLCBcdTAwMjZwcm9iZSk7XG4tXHRcdC8qIGxsZ2ggJWRzdCxvZmYoJXNyYywlYXJlbmEpICovXG4tXHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDkxLCBkc3RfcmVnLCBzcmNfcmVnLFxuLVx0XHRcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgb2ZmKTtcbi1cdFx0ZXJyID0gYnBmX2ppdF9wcm9iZV9wb3N0KGppdCwgZnAsIFx1MDAyNnByb2JlKTtcbi1cdFx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gZXJyO1xuLVx0XHRqaXQtXHUwMDNlc2VlbiB8PSBTRUVOX01FTTtcbi1cdFx0aWYgKGluc25faXNfemV4dChcdTAwMjZpbnNuWzFdKSlcbi1cdFx0XHRpbnNuX2NvdW50ID0gMjtcbi1cdFx0YnJlYWs7XG4gXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfSDogLyogZHN0ID0gKihzMTYgKikodWwpIChzcmMgJiM0Mzsgb2ZmKSAqL1xuIFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTVNYIHwgQlBGX0g6XG4gXHRcdGJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoaml0LCBpbnNuLCBcdTAwMjZwcm9iZSk7XG5AQCAtMTczMiwyMCAmIzQzOzE3NzcsNiBAQCBzdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdGppdC1cdTAwM2VzZWVuIHw9IFNFRU5fTUVNO1xuIFx0XHRicmVhaztcbi1cdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfVzogLyogZHN0ID0gKih1MzIgKikodWwpIChzcmMgJiM0Mzsgb2ZmKSAqL1xuLVx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTSB8IEJQRl9XOlxuLVx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX1c6XG4tXHRcdGJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoaml0LCBpbnNuLCBcdTAwMjZwcm9iZSk7XG4tXHRcdC8qIGxsZ2YgJWRzdCxvZmYoJXNyYykgKi9cbi1cdFx0aml0LVx1MDAzZXNlZW4gfD0gU0VFTl9NRU07XG4tXHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDE2LCBkc3RfcmVnLCBzcmNfcmVnLFxuLVx0XHRcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgb2ZmKTtcbi1cdFx0ZXJyID0gYnBmX2ppdF9wcm9iZV9wb3N0KGppdCwgZnAsIFx1MDAyNnByb2JlKTtcbi1cdFx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gZXJyO1xuLVx0XHRpZiAoaW5zbl9pc196ZXh0KFx1MDAyNmluc25bMV0pKVxuLVx0XHRcdGluc25fY291bnQgPSAyO1xuLVx0XHRicmVhaztcbiBcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9XOiAvKiBkc3QgPSAqKHMzMiAqKSh1bCkgKHNyYyAmIzQzOyBvZmYpICovXG4gXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNU1ggfCBCUEZfVzpcbiBcdFx0YnBmX2ppdF9wcm9iZV9sb2FkX3ByZShqaXQsIGluc24sIFx1MDAyNnByb2JlKTtcbkBAIC0xNzU2LDE4ICYjNDM7MTc4Nyw2IEBAIHN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4gXHRcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0YnJlYWs7XG4tXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX0RXOiAvKiBkc3QgPSAqKHU2NCAqKSh1bCkgKHNyYyAmIzQzOyBvZmYpICovXG4tXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX0RXOlxuLVx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0RXOlxuLVx0XHRicGZfaml0X3Byb2JlX2xvYWRfcHJlKGppdCwgaW5zbiwgXHUwMDI2cHJvYmUpO1xuLVx0XHQvKiBsZyAlZHN0LG9mZiglc3JjLCVhcmVuYSkgKi9cbi1cdFx0aml0LVx1MDAzZXNlZW4gfD0gU0VFTl9NRU07XG4tXHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDA0LCBkc3RfcmVnLCBzcmNfcmVnLFxuLVx0XHRcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgb2ZmKTtcbi1cdFx0ZXJyID0gYnBmX2ppdF9wcm9iZV9wb3N0KGppdCwgZnAsIFx1MDAyNnByb2JlKTtcbi1cdFx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gZXJyO1xuLVx0XHRicmVhaztcbiBcdC8qXG4gXHQgKiBCUEZfSk1QIC8gQ0FMTFxuIFx0ICovXG5AQCAtMzAyOCwxMyAmIzQzOzMwNDcsNiBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGJvb2wgaW5fYXJlbmEpXG4gXHRpZiAoIWluX2FyZW5hKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdHN3aXRjaCAoaW5zbi1cdTAwM2Vjb2RlKSB7XG4tXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0I6XG4tXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0g6XG4tXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX1c6XG4tXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0RXOlxuLVx0XHRpZiAoYnBmX2F0b21pY19pc19sb2FkX3N0b3JlKGluc24pKVxuLVx0XHRcdHJldHVybiBmYWxzZTtcbi1cdFx0YnJlYWs7XG4gXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfQjpcbiBcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9IOlxuIFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX1c6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9hdG9taWNzLmNcbmluZGV4IDJlNzc1MWE4NTM5OTliLi43M2JjMmI4MzVmM2ZlNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9hdG9taWNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9hdG9taWNzLmNcbkBAIC0yOCw4ICYjNDM7MjgsMTAgQEAgYm9vbCBza2lwX2FsbF90ZXN0cyA9IHRydWU7XG4gXG4gI2lmIGRlZmluZWQoRU5BQkxFX0FUT01JQ1NfVEVTVFMpIFx1MDAyNlx1MDAyNlx0XHQgIFxcXG4gXHRkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcdTAwMjZcdTAwMjYgXFxcbi1cdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFxcXG4tXHQgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgXHUwMDI2XHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkpXG4mIzQzO1x0KGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHwgXFxcbiYjNDM7XHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikgfHwgXFxcbiYjNDM7XHQgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgXHUwMDI2XHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkgfHwgXFxcbiYjNDM7XHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3MzOTApKVxuIGJvb2wgc2tpcF9sYWNxX3NyZWxfdGVzdHMgX19hdHRyaWJ1dGUoKF9fc2VjdGlvbl9fKFwmIzM0Oy5kYXRhXCYjMzQ7KSkpID0gZmFsc2U7XG4gI2Vsc2VcbiBib29sIHNraXBfbGFjcV9zcmVsX3Rlc3RzID0gdHJ1ZTtcbkBAIC0zMTUsOCAmIzQzOzMxNywxMCBAQCBpbnQgbG9hZF9hY3F1aXJlKGNvbnN0IHZvaWQgKmN0eClcbiB7XG4gI2lmIGRlZmluZWQoRU5BQkxFX0FUT01JQ1NfVEVTVFMpIFx1MDAyNlx1MDAyNlx0XHQgIFxcXG4gXHRkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcdTAwMjZcdTAwMjYgXFxcbi1cdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFxcXG4tXHQgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgXHUwMDI2XHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkpXG4mIzQzO1x0KGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHwgXFxcbiYjNDM7XHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikgfHwgXFxcbiYjNDM7XHQgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgXHUwMDI2XHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkgfHwgXFxcbiYjNDM7XHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3MzOTApKVxuIFxuICNkZWZpbmUgTE9BRF9BQ1FVSVJFX0FSRU5BKFNJWkVPUCwgU0laRSwgU1JDLCBEU1QpXHRcXFxuIFx0eyBhc20gdm9sYXRpbGUgKFx0XHRcdFx0XFxcbkBAIC0zNjcsOCAmIzQzOzM3MSwxMCBAQCBpbnQgc3RvcmVfcmVsZWFzZShjb25zdCB2b2lkICpjdHgpXG4ge1xuICNpZiBkZWZpbmVkKEVOQUJMRV9BVE9NSUNTX1RFU1RTKSBcdTAwMjZcdTAwMjZcdFx0ICBcXFxuIFx0ZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkgXHUwMDI2XHUwMDI2IFxcXG4tXHQoZGVmaW5lZChfX1RBUkdFVF9BUkNIX2FybTY0KSB8fCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfeDg2KSB8fCBcXFxuLVx0IChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpIFx1MDAyNlx1MDAyNiBfX3Jpc2N2X3hsZW4gPT0gNjQpKVxuJiM0MztcdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IFxcXG4mIzQzO1x0IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFxcXG4mIzQzO1x0IChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpIFx1MDAyNlx1MDAyNiBfX3Jpc2N2X3hsZW4gPT0gNjQpIHx8IFxcXG4mIzQzO1x0IGRlZmluZWQoX19UQVJHRVRfQVJDSF9zMzkwKSlcbiBcbiAjZGVmaW5lIFNUT1JFX1JFTEVBU0VfQVJFTkEoU0laRU9QLCBEU1QsIFZBTClcdFxcXG4gXHR7IGFzbSB2b2xhdGlsZSAoXHRcdFx0XFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXG5pbmRleCBiMGM0NDEzODRmMjA2Ni4uNWVhY2YxYjQzMjUyMTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbkBAIC0yNjQsOSAmIzQzOzI2NCwxMiBAQFxuICNlbmRpZlxuIFxuICNpZiBfX2NsYW5nX21ham9yX18gXHUwMDNlPSAxOCBcdTAwMjZcdTAwMjYgZGVmaW5lZChFTkFCTEVfQVRPTUlDU19URVNUUykgXHUwMDI2XHUwMDI2XHRcdFxcXG4tXHQoZGVmaW5lZChfX1RBUkdFVF9BUkNIX2FybTY0KSB8fCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfeDg2KSB8fFx0XFxcbi1cdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpIFx1MDAyNlx1MDAyNiBfX3Jpc2N2X3hsZW4gPT0gNjQpIHx8IFxcXG4tXHRkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcG93ZXJwYykgfHwgZGVmaW5lZChfX1RBUkdFVF9BUkNIX2xvb25nYXJjaCkpXG4mIzQzO1x0KGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHxcdFx0XHRcdFxcXG4mIzQzO1x0IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8XHRcdFx0XHRcdFxcXG4mIzQzO1x0IChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpIFx1MDAyNlx1MDAyNiBfX3Jpc2N2X3hsZW4gPT0gNjQpIHx8XHRcXFxuJiM0MztcdCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfczM5MCkgfHxcdFx0XHRcdFx0XFxcbiYjNDM7XHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3Bvd2VycGMpIHx8XHRcdFx0XHRcXFxuJiM0MztcdCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfbG9vbmdhcmNoKSlcbiAjZGVmaW5lIENBTl9VU0VfTE9BRF9BQ1FfU1RPUkVfUkVMXG4gI2VuZGlmXG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZW1pdF9sZHgmIzM0OywKICAgICYjMzQ7ZW1pdF9zdHgmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9wcm9iZV9sb2FkX3ByZSYjMzQ7LAogICAgJiMzNDticGZfaml0X3Byb2JlX3N0b3JlX3ByZSYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1cHBvcnRzX2luc24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBzdXBwb3J0IGZvciBCUEZfUFJPQkVfQVRPTUlDLCBCUEZfTE9BRF9BQ1EsIGFuZCBCUEZfU1RPUkVfUkVMIGluc3RydWN0aW9ucyBpbiB0aGUgczM5MCBCUEYgSklUIGNvbXBpbGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIEpJVCBsb2dpYyBvbiBzMzkwIGFyY2hpdGVjdHVyZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI4OWQxMWQ0Y2Y2NzY4ZDAxZTFhMDk0MWU3ZjQzNTdkMzA4ZTkyMmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAyNCAxODowNDowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IDMxNzQ5YzAzNjJjYTIzLi5jOThhYjJlZWNlNTdmNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jCkBAIC03NDMsMTAgJiM0Mzs3NDMsMTIgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9iZV9sb2FkX3ByZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiB7CiAJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpICE9IEJQRl9QUk9CRV9NRU0gJmFtcDsmYW1wOwogCSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfUFJPQkVfTUVNU1ggJmFtcDsmYW1wOwotCSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfUFJPQkVfTUVNMzIpCiYjNDM7CSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfUFJPQkVfTUVNMzIgJmFtcDsmYW1wOwomIzQzOwkgICAgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX1BST0JFX0FUT01JQykKIAkJcmV0dXJuOwogCi0JaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9NRU0zMikgewomIzQzOwlpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1BST0JFX01FTTMyIHx8CiYjNDM7CSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfQVRPTUlDKSB7CiAJCS8qIGxncmwgJXIxLGtlcm5fYXJlbmEgKi8KIAkJRU1JVDZfUENSRUxfUklMQigweGM0MDgwMDAwLCBSRUdfVzEsIGppdC0mZ3Q7a2Vybl9hcmVuYSk7CiAJCXByb2JlLSZndDthcmVuYV9yZWcgPSBSRUdfVzE7CkBAIC03NTgsNyAmIzQzOzc2MCw4IEBAIHN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9iZV9zdG9yZV9wcmUoc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQkJCSAgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpCiB7Ci0JaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpICE9IEJQRl9QUk9CRV9NRU0zMikKJiM0MzsJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpICE9IEJQRl9QUk9CRV9NRU0zMiAmYW1wOyZhbXA7CiYjNDM7CSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfUFJPQkVfQVRPTUlDKQogCQlyZXR1cm47CiAKIAkvKiBsZ3JsICVyMSxrZXJuX2FyZW5hICovCkBAIC04MzAsNiAmIzQzOzgzMyw3MiBAQCBzdGF0aWMgaW50IGJwZl9qaXRfcHJvYmVfcG9zdChzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBlbWl0X2xkeChzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2ppdF9wcm9iZSBwcm9iZTsKJiM0MzsKJiM0MzsJYnBmX2ppdF9wcm9iZV9pbml0KCZhbXA7cHJvYmUpOwomIzQzOwlicGZfaml0X3Byb2JlX2xvYWRfcHJlKGppdCwgaW5zbiwgJmFtcDtwcm9iZSk7CiYjNDM7CiYjNDM7CXN3aXRjaCAoQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSkpIHsKJiM0MzsJY2FzZSBCUEZfQjogLyogZHN0ID0gKih1OCAqKSh1bCkgKHNyYyAmIzQzOyBvZmYpICovCiYjNDM7CQkvKiBsbGdjICVkc3Qsb2ZmKCVzcmMsJWFyZW5hKSAqLwomIzQzOwkJRU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwOTAsIGluc24tJmd0O2RzdF9yZWcsIGluc24tJmd0O3NyY19yZWcsCiYjNDM7CQkJICAgICAgcHJvYmUuYXJlbmFfcmVnLCBpbnNuLSZndDtvZmYpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0g6IC8qIGRzdCA9ICoodTE2ICopKHVsKSAoc3JjICYjNDM7IG9mZikgKi8KJiM0MzsJCS8qIGxsZ2ggJWRzdCxvZmYoJXNyYywlYXJlbmEpICovCiYjNDM7CQlFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDA5MSwgaW5zbi0mZ3Q7ZHN0X3JlZywgaW5zbi0mZ3Q7c3JjX3JlZywKJiM0MzsJCQkgICAgICBwcm9iZS5hcmVuYV9yZWcsIGluc24tJmd0O29mZik7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfVzogLyogZHN0ID0gKih1MzIgKikodWwpIChzcmMgJiM0Mzsgb2ZmKSAqLwomIzQzOwkJLyogbGxnZiAlZHN0LG9mZiglc3JjLCVhcmVuYSkgKi8KJiM0MzsJCUVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDE2LCBpbnNuLSZndDtkc3RfcmVnLCBpbnNuLSZndDtzcmNfcmVnLAomIzQzOwkJCSAgICAgIHByb2JlLmFyZW5hX3JlZywgaW5zbi0mZ3Q7b2ZmKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9EVzogLyogZHN0ID0gKih1NjQgKikodWwpIChzcmMgJiM0Mzsgb2ZmKSAqLwomIzQzOwkJLyogbGcgJWRzdCxvZmYoJXNyYywlYXJlbmEpICovCiYjNDM7CQlFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDAwNCwgaW5zbi0mZ3Q7ZHN0X3JlZywgaW5zbi0mZ3Q7c3JjX3JlZywKJiM0MzsJCQkgICAgICBwcm9iZS5hcmVuYV9yZWcsIGluc24tJmd0O29mZik7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gYnBmX2ppdF9wcm9iZV9wb3N0KGppdCwgZnAsICZhbXA7cHJvYmUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVtaXRfc3R4KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfaml0X3Byb2JlIHByb2JlOwomIzQzOwomIzQzOwlicGZfaml0X3Byb2JlX2luaXQoJmFtcDtwcm9iZSk7CiYjNDM7CWJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKGppdCwgaW5zbiwgJmFtcDtwcm9iZSk7CiYjNDM7CiYjNDM7CXN3aXRjaCAoQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSkpIHsKJiM0MzsJY2FzZSBCUEZfQjogLyogKih1OCAqKShkc3QgJiM0Mzsgb2ZmKSA9IHNyY19yZWcgKi8KJiM0MzsJCS8qIHN0Y3kgJXNyYyxvZmYoJWRzdCwlYXJlbmEpICovCiYjNDM7CQlFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDA3MiwgaW5zbi0mZ3Q7c3JjX3JlZywgaW5zbi0mZ3Q7ZHN0X3JlZywKJiM0MzsJCQkgICAgICBwcm9iZS5hcmVuYV9yZWcsIGluc24tJmd0O29mZik7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfSDogLyogKHUxNiAqKShkc3QgJiM0Mzsgb2ZmKSA9IHNyYyAqLwomIzQzOwkJLyogc3RoeSAlc3JjLG9mZiglZHN0LCVhcmVuYSkgKi8KJiM0MzsJCUVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDcwLCBpbnNuLSZndDtzcmNfcmVnLCBpbnNuLSZndDtkc3RfcmVnLAomIzQzOwkJCSAgICAgIHByb2JlLmFyZW5hX3JlZywgaW5zbi0mZ3Q7b2ZmKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9XOiAvKiAqKHUzMiAqKShkc3QgJiM0Mzsgb2ZmKSA9IHNyYyAqLwomIzQzOwkJLyogc3R5ICVzcmMsb2ZmKCVkc3QsJWFyZW5hKSAqLwomIzQzOwkJRU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwNTAsIGluc24tJmd0O3NyY19yZWcsIGluc24tJmd0O2RzdF9yZWcsCiYjNDM7CQkJICAgICAgcHJvYmUuYXJlbmFfcmVnLCBpbnNuLSZndDtvZmYpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0RXOiAvKiAodTY0ICopKGRzdCAmIzQzOyBvZmYpID0gc3JjICovCiYjNDM7CQkvKiBzdGcgJXNyYyxvZmYoJWRzdCwlYXJlbmEpICovCiYjNDM7CQlFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDAyNCwgaW5zbi0mZ3Q7c3JjX3JlZywgaW5zbi0mZ3Q7ZHN0X3JlZywKJiM0MzsJCQkgICAgICBwcm9iZS5hcmVuYV9yZWcsIGluc24tJmd0O29mZik7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gYnBmX2ppdF9wcm9iZV9wb3N0KGppdCwgZnAsICZhbXA7cHJvYmUpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBTaWduLSBvciB6ZXJvLWV4dGVuZCB0aGUgcmVnaXN0ZXIgaWYgbmVjZXNzYXJ5CiAgKi8KQEAgLTE0NzcsNDQgJiM0MzsxNTQ2LDEzIEBAIHN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsCiAJICovCiAJY2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9COiAvKiAqKHU4ICopKGRzdCAmIzQzOyBvZmYpID0gc3JjX3JlZyAqLwogCWNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9COgotCQlicGZfaml0X3Byb2JlX3N0b3JlX3ByZShqaXQsIGluc24sICZhbXA7cHJvYmUpOwotCQkvKiBzdGN5ICVzcmMsb2ZmKCVkc3QsJWFyZW5hKSAqLwotCQlFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDA3Miwgc3JjX3JlZywgZHN0X3JlZywKLQkJCSAgICAgIHByb2JlLmFyZW5hX3JlZywgb2ZmKTsKLQkJZXJyID0gYnBmX2ppdF9wcm9iZV9wb3N0KGppdCwgZnAsICZhbXA7cHJvYmUpOwotCQlpZiAoZXJyICZsdDsgMCkKLQkJCXJldHVybiBlcnI7Ci0JCWppdC0mZ3Q7c2VlbiB8PSBTRUVOX01FTTsKLQkJYnJlYWs7CiAJY2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9IOiAvKiAodTE2ICopKGRzdCAmIzQzOyBvZmYpID0gc3JjICovCiAJY2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0g6Ci0JCWJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKGppdCwgaW5zbiwgJmFtcDtwcm9iZSk7Ci0JCS8qIHN0aHkgJXNyYyxvZmYoJWRzdCwlYXJlbmEpICovCi0JCUVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDcwLCBzcmNfcmVnLCBkc3RfcmVnLAotCQkJICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpOwotCQllcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgJmFtcDtwcm9iZSk7Ci0JCWlmIChlcnIgJmx0OyAwKQotCQkJcmV0dXJuIGVycjsKLQkJaml0LSZndDtzZWVuIHw9IFNFRU5fTUVNOwotCQlicmVhazsKIAljYXNlIEJQRl9TVFggfCBCUEZfTUVNIHwgQlBGX1c6IC8qICoodTMyICopKGRzdCAmIzQzOyBvZmYpID0gc3JjICovCiAJY2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX1c6Ci0JCWJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKGppdCwgaW5zbiwgJmFtcDtwcm9iZSk7Ci0JCS8qIHN0eSAlc3JjLG9mZiglZHN0LCVhcmVuYSkgKi8KLQkJRU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwNTAsIHNyY19yZWcsIGRzdF9yZWcsCi0JCQkgICAgICBwcm9iZS5hcmVuYV9yZWcsIG9mZik7Ci0JCWVyciA9IGJwZl9qaXRfcHJvYmVfcG9zdChqaXQsIGZwLCAmYW1wO3Byb2JlKTsKLQkJaWYgKGVyciAmbHQ7IDApCi0JCQlyZXR1cm4gZXJyOwotCQlqaXQtJmd0O3NlZW4gfD0gU0VFTl9NRU07Ci0JCWJyZWFrOwogCWNhc2UgQlBGX1NUWCB8IEJQRl9NRU0gfCBCUEZfRFc6IC8qICh1NjQgKikoZHN0ICYjNDM7IG9mZikgPSBzcmMgKi8KIAljYXNlIEJQRl9TVFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfRFc6Ci0JCWJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKGppdCwgaW5zbiwgJmFtcDtwcm9iZSk7Ci0JCS8qIHN0ZyAlc3JjLG9mZiglZHN0LCVhcmVuYSkgKi8KLQkJRU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwMjQsIHNyY19yZWcsIGRzdF9yZWcsCi0JCQkgICAgICBwcm9iZS5hcmVuYV9yZWcsIG9mZik7Ci0JCWVyciA9IGJwZl9qaXRfcHJvYmVfcG9zdChqaXQsIGZwLCAmYW1wO3Byb2JlKTsKJiM0MzsJCWVyciA9IGVtaXRfc3R4KGppdCwgZnAsIGluc24pOwogCQlpZiAoZXJyICZsdDsgMCkKIAkJCXJldHVybiBlcnI7CiAJCWppdC0mZ3Q7c2VlbiB8PSBTRUVOX01FTTsKQEAgLTE1NzQsMTkgJiM0MzsxNjEyLDIzIEBAIHN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsCiAJLyoKIAkgKiBCUEZfQVRPTUlDCiAJICovCiYjNDM7CWNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfQjoKJiM0MzsJY2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9IOgogCWNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfRFc6CiAJY2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9XOgomIzQzOwljYXNlIEJQRl9TVFggfCBCUEZfUFJPQkVfQVRPTUlDIHwgQlBGX0I6CiYjNDM7CWNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9BVE9NSUMgfCBCUEZfSDoKIAljYXNlIEJQRl9TVFggfCBCUEZfUFJPQkVfQVRPTUlDIHwgQlBGX0RXOgogCWNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9BVE9NSUMgfCBCUEZfVzoKIAl7CiAJCWJvb2wgaXMzMiA9IEJQRl9TSVpFKGluc24tJmd0O2NvZGUpID09IEJQRl9XOwogCiAJCS8qCi0JCSAqIFVubGlrZSBsb2FkcyBhbmQgc3RvcmVzLCBhdG9taWNzIGhhdmUgb25seSBhIGJhc2UgcmVnaXN0ZXIsCi0JCSAqIGJ1dCBubyBpbmRleCByZWdpc3Rlci4gRm9yIHRoZSBub24tYXJlbmEgY2FzZSwgc2ltcGx5IHVzZQotCQkgKiAlZHN0IGFzIGEgYmFzZS4gRm9yIHRoZSBhcmVuYSBjYXNlLCB1c2UgdGhlIHdvcmsgcmVnaXN0ZXIKLQkJICogJXIxOiBmaXJzdCwgbG9hZCB0aGUgYXJlbmEgYmFzZSBpbnRvIGl0LCBhbmQgdGhlbiBhZGQgJWRzdAotCQkgKiB0byBpdC4KJiM0MzsJCSAqIFVubGlrZSBsb2FkcyBhbmQgc3RvcmVzLCBzMzkwIGF0b21pY3MgaGF2ZSBvbmx5IGEgYmFzZQomIzQzOwkJICogcmVnaXN0ZXIsIGJ1dCBubyBpbmRleCByZWdpc3Rlci4gRm9yIHRoZSBub24tYXJlbmEgY2FzZSwKJiM0MzsJCSAqIHNpbXBseSB1c2UgJWRzdCBhcyBhIGJhc2UuIEZvciB0aGUgYXJlbmEgY2FzZSwgdXNlIHRoZQomIzQzOwkJICogd29yayByZWdpc3RlciAlcjE6IGZpcnN0LCBsb2FkIHRoZSBhcmVuYSBiYXNlIGludG8gaXQsCiYjNDM7CQkgKiBhbmQgdGhlbiBhZGQgJWRzdCB0byBpdC4KIAkJICovCiAJCXByb2JlLmFyZW5hX3JlZyA9IGRzdF9yZWc7CiAKQEAgLTE2NzMsNiAmIzQzOzE3MTUsMTggQEAgc3RhdGljIG5vaW5saW5lIGludCBicGZfaml0X2luc24oc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCwKIAkJCWlmIChlcnIgJmx0OyAwKQogCQkJCXJldHVybiBlcnI7CiAJCQlicmVhazsKJiM0MzsJCWNhc2UgQlBGX0xPQURfQUNROgomIzQzOwkJCS8qIHMzOTAgaGFzIHN0cm9uZyBvcmRlcmluZywganVzdCB1c2UgbG9hZCAqLwomIzQzOwkJCWVyciA9IGVtaXRfbGR4KGppdCwgZnAsIGluc24pOwomIzQzOwkJCWlmIChlcnIgJmx0OyAwKQomIzQzOwkJCQlyZXR1cm4gZXJyOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBCUEZfU1RPUkVfUkVMOgomIzQzOwkJCS8qIHMzOTAgaGFzIHN0cm9uZyBvcmRlcmluZywganVzdCB1c2Ugc3RvcmUgKi8KJiM0MzsJCQllcnIgPSBlbWl0X3N0eChqaXQsIGZwLCBpbnNuKTsKJiM0MzsJCQlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCQkJcmV0dXJuIGVycjsKJiM0MzsJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXByX2VycigmIzM0O1Vua25vd24gYXRvbWljIG9wZXJhdGlvbiAlMDJ4XG4mIzM0OywgaW5zbi0mZ3Q7aW1tKTsKIAkJCXJldHVybiAtMTsKQEAgLTE2ODcsMTUgJiM0MzsxNzQxLDIwIEBAIHN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsCiAJY2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9COiAvKiBkc3QgPSAqKHU4ICopKHVsKSAoc3JjICYjNDM7IG9mZikgKi8KIAljYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX0I6CiAJY2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0I6Ci0JCWJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoaml0LCBpbnNuLCAmYW1wO3Byb2JlKTsKLQkJLyogbGxnYyAlZHN0LG9mZiglc3JjLCVhcmVuYSkgKi8KLQkJRU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwOTAsIGRzdF9yZWcsIHNyY19yZWcsCi0JCQkgICAgICBwcm9iZS5hcmVuYV9yZWcsIG9mZik7Ci0JCWVyciA9IGJwZl9qaXRfcHJvYmVfcG9zdChqaXQsIGZwLCAmYW1wO3Byb2JlKTsKJiM0MzsJY2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9IOiAvKiBkc3QgPSAqKHUxNiAqKSh1bCkgKHNyYyAmIzQzOyBvZmYpICovCiYjNDM7CWNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0gfCBCUEZfSDoKJiM0MzsJY2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0g6CiYjNDM7CWNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfVzogLyogZHN0ID0gKih1MzIgKikodWwpIChzcmMgJiM0Mzsgb2ZmKSAqLwomIzQzOwljYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX1c6CiYjNDM7CWNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9XOgomIzQzOwljYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX0RXOiAvKiBkc3QgPSAqKHU2NCAqKSh1bCkgKHNyYyAmIzQzOyBvZmYpICovCiYjNDM7CWNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0gfCBCUEZfRFc6CiYjNDM7CWNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9EVzoKJiM0MzsJCWVyciA9IGVtaXRfbGR4KGppdCwgZnAsIGluc24pOwogCQlpZiAoZXJyICZsdDsgMCkKIAkJCXJldHVybiBlcnI7CiAJCWppdC0mZ3Q7c2VlbiB8PSBTRUVOX01FTTsKLQkJaWYgKGluc25faXNfemV4dCgmYW1wO2luc25bMV0pKQomIzQzOwkJaWYgKEJQRl9TSVpFKGluc24tJmd0O2NvZGUpICE9IEJQRl9EVyAmYW1wOyZhbXA7IGluc25faXNfemV4dCgmYW1wO2luc25bMV0pKQogCQkJaW5zbl9jb3VudCA9IDI7CiAJCWJyZWFrOwogCWNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9COiAvKiBkc3QgPSAqKHM4ICopKHVsKSAoc3JjICYjNDM7IG9mZikgKi8KQEAgLTE3MDgsMjAgJiM0MzsxNzY3LDYgQEAgc3RhdGljIG5vaW5saW5lIGludCBicGZfaml0X2luc24oc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCwKIAkJCXJldHVybiBlcnI7CiAJCWppdC0mZ3Q7c2VlbiB8PSBTRUVOX01FTTsKIAkJYnJlYWs7Ci0JY2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9IOiAvKiBkc3QgPSAqKHUxNiAqKSh1bCkgKHNyYyAmIzQzOyBvZmYpICovCi0JY2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTSB8IEJQRl9IOgotCWNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9IOgotCQlicGZfaml0X3Byb2JlX2xvYWRfcHJlKGppdCwgaW5zbiwgJmFtcDtwcm9iZSk7Ci0JCS8qIGxsZ2ggJWRzdCxvZmYoJXNyYywlYXJlbmEpICovCi0JCUVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDkxLCBkc3RfcmVnLCBzcmNfcmVnLAotCQkJICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpOwotCQllcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgJmFtcDtwcm9iZSk7Ci0JCWlmIChlcnIgJmx0OyAwKQotCQkJcmV0dXJuIGVycjsKLQkJaml0LSZndDtzZWVuIHw9IFNFRU5fTUVNOwotCQlpZiAoaW5zbl9pc196ZXh0KCZhbXA7aW5zblsxXSkpCi0JCQlpbnNuX2NvdW50ID0gMjsKLQkJYnJlYWs7CiAJY2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX0g6IC8qIGRzdCA9ICooczE2ICopKHVsKSAoc3JjICYjNDM7IG9mZikgKi8KIAljYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNU1ggfCBCUEZfSDoKIAkJYnBmX2ppdF9wcm9iZV9sb2FkX3ByZShqaXQsIGluc24sICZhbXA7cHJvYmUpOwpAQCAtMTczMiwyMCAmIzQzOzE3NzcsNiBAQCBzdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLAogCQkJcmV0dXJuIGVycjsKIAkJaml0LSZndDtzZWVuIHw9IFNFRU5fTUVNOwogCQlicmVhazsKLQljYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX1c6IC8qIGRzdCA9ICoodTMyICopKHVsKSAoc3JjICYjNDM7IG9mZikgKi8KLQljYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX1c6Ci0JY2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX1c6Ci0JCWJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoaml0LCBpbnNuLCAmYW1wO3Byb2JlKTsKLQkJLyogbGxnZiAlZHN0LG9mZiglc3JjKSAqLwotCQlqaXQtJmd0O3NlZW4gfD0gU0VFTl9NRU07Ci0JCUVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDE2LCBkc3RfcmVnLCBzcmNfcmVnLAotCQkJICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpOwotCQllcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgJmFtcDtwcm9iZSk7Ci0JCWlmIChlcnIgJmx0OyAwKQotCQkJcmV0dXJuIGVycjsKLQkJaWYgKGluc25faXNfemV4dCgmYW1wO2luc25bMV0pKQotCQkJaW5zbl9jb3VudCA9IDI7Ci0JCWJyZWFrOwogCWNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9XOiAvKiBkc3QgPSAqKHMzMiAqKSh1bCkgKHNyYyAmIzQzOyBvZmYpICovCiAJY2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTVNYIHwgQlBGX1c6CiAJCWJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoaml0LCBpbnNuLCAmYW1wO3Byb2JlKTsKQEAgLTE3NTYsMTggJiM0MzsxNzg3LDYgQEAgc3RhdGljIG5vaW5saW5lIGludCBicGZfaml0X2luc24oc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCwKIAkJaWYgKGVyciAmbHQ7IDApCiAJCQlyZXR1cm4gZXJyOwogCQlicmVhazsKLQljYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX0RXOiAvKiBkc3QgPSAqKHU2NCAqKSh1bCkgKHNyYyAmIzQzOyBvZmYpICovCi0JY2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTSB8IEJQRl9EVzoKLQljYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfRFc6Ci0JCWJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoaml0LCBpbnNuLCAmYW1wO3Byb2JlKTsKLQkJLyogbGcgJWRzdCxvZmYoJXNyYywlYXJlbmEpICovCi0JCWppdC0mZ3Q7c2VlbiB8PSBTRUVOX01FTTsKLQkJRU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwMDQsIGRzdF9yZWcsIHNyY19yZWcsCi0JCQkgICAgICBwcm9iZS5hcmVuYV9yZWcsIG9mZik7Ci0JCWVyciA9IGJwZl9qaXRfcHJvYmVfcG9zdChqaXQsIGZwLCAmYW1wO3Byb2JlKTsKLQkJaWYgKGVyciAmbHQ7IDApCi0JCQlyZXR1cm4gZXJyOwotCQlicmVhazsKIAkvKgogCSAqIEJQRl9KTVAgLyBDQUxMCiAJICovCkBAIC0zMDI4LDEzICYjNDM7MzA0Nyw2IEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSkKIAlpZiAoIWluX2FyZW5hKQogCQlyZXR1cm4gdHJ1ZTsKIAlzd2l0Y2ggKGluc24tJmd0O2NvZGUpIHsKLQljYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0I6Ci0JY2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9IOgotCWNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfVzoKLQljYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0RXOgotCQlpZiAoYnBmX2F0b21pY19pc19sb2FkX3N0b3JlKGluc24pKQotCQkJcmV0dXJuIGZhbHNlOwotCQlicmVhazsKIAljYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfQjoKIAljYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfSDoKIAljYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfVzoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9hdG9taWNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jCmluZGV4IDJlNzc1MWE4NTM5OTliLi43M2JjMmI4MzVmM2ZlNCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jCkBAIC0yOCw4ICYjNDM7MjgsMTAgQEAgYm9vbCBza2lwX2FsbF90ZXN0cyA9IHRydWU7CiAKICNpZiBkZWZpbmVkKEVOQUJMRV9BVE9NSUNTX1RFU1RTKSAmYW1wOyZhbXA7CQkgIFwKIAlkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSAmYW1wOyZhbXA7IFwKLQkoZGVmaW5lZChfX1RBUkdFVF9BUkNIX2FybTY0KSB8fCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfeDg2KSB8fCBcCi0JIChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpICZhbXA7JmFtcDsgX19yaXNjdl94bGVuID09IDY0KSkKJiM0MzsJKGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHwgXAomIzQzOwkgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikgfHwgXAomIzQzOwkgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgJmFtcDsmYW1wOyBfX3Jpc2N2X3hsZW4gPT0gNjQpIHx8IFwKJiM0MzsJIGRlZmluZWQoX19UQVJHRVRfQVJDSF9zMzkwKSkKIGJvb2wgc2tpcF9sYWNxX3NyZWxfdGVzdHMgX19hdHRyaWJ1dGUoKF9fc2VjdGlvbl9fKCYjMzQ7LmRhdGEmIzM0OykpKSA9IGZhbHNlOwogI2Vsc2UKIGJvb2wgc2tpcF9sYWNxX3NyZWxfdGVzdHMgPSB0cnVlOwpAQCAtMzE1LDggJiM0MzszMTcsMTAgQEAgaW50IGxvYWRfYWNxdWlyZShjb25zdCB2b2lkICpjdHgpCiB7CiAjaWYgZGVmaW5lZChFTkFCTEVfQVRPTUlDU19URVNUUykgJmFtcDsmYW1wOwkJICBcCiAJZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkgJmFtcDsmYW1wOyBcCi0JKGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHwgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikgfHwgXAotCSAoZGVmaW5lZChfX1RBUkdFVF9BUkNIX3Jpc2N2KSAmYW1wOyZhbXA7IF9fcmlzY3ZfeGxlbiA9PSA2NCkpCiYjNDM7CShkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IFwKJiM0MzsJIGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFwKJiM0MzsJIChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpICZhbXA7JmFtcDsgX19yaXNjdl94bGVuID09IDY0KSB8fCBcCiYjNDM7CSBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfczM5MCkpCiAKICNkZWZpbmUgTE9BRF9BQ1FVSVJFX0FSRU5BKFNJWkVPUCwgU0laRSwgU1JDLCBEU1QpCVwKIAl7IGFzbSB2b2xhdGlsZSAoCQkJCVwKQEAgLTM2Nyw4ICYjNDM7MzcxLDEwIEBAIGludCBzdG9yZV9yZWxlYXNlKGNvbnN0IHZvaWQgKmN0eCkKIHsKICNpZiBkZWZpbmVkKEVOQUJMRV9BVE9NSUNTX1RFU1RTKSAmYW1wOyZhbXA7CQkgIFwKIAlkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSAmYW1wOyZhbXA7IFwKLQkoZGVmaW5lZChfX1RBUkdFVF9BUkNIX2FybTY0KSB8fCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfeDg2KSB8fCBcCi0JIChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpICZhbXA7JmFtcDsgX19yaXNjdl94bGVuID09IDY0KSkKJiM0MzsJKGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHwgXAomIzQzOwkgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikgfHwgXAomIzQzOwkgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgJmFtcDsmYW1wOyBfX3Jpc2N2X3hsZW4gPT0gNjQpIHx8IFwKJiM0MzsJIGRlZmluZWQoX19UQVJHRVRfQVJDSF9zMzkwKSkKIAogI2RlZmluZSBTVE9SRV9SRUxFQVNFX0FSRU5BKFNJWkVPUCwgRFNULCBWQUwpCVwKIAl7IGFzbSB2b2xhdGlsZSAoCQkJXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaAppbmRleCBiMGM0NDEzODRmMjA2Ni4uNWVhY2YxYjQzMjUyMTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oCkBAIC0yNjQsOSAmIzQzOzI2NCwxMiBAQAogI2VuZGlmCiAKICNpZiBfX2NsYW5nX21ham9yX18gJmd0Oz0gMTggJmFtcDsmYW1wOyBkZWZpbmVkKEVOQUJMRV9BVE9NSUNTX1RFU1RTKSAmYW1wOyZhbXA7CQlcCi0JKGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHwgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikgfHwJXAotCShkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpICZhbXA7JmFtcDsgX19yaXNjdl94bGVuID09IDY0KSB8fCBcCi0JZGVmaW5lZChfX1RBUkdFVF9BUkNIX3Bvd2VycGMpIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF9sb29uZ2FyY2gpKQomIzQzOwkoZGVmaW5lZChfX1RBUkdFVF9BUkNIX2FybTY0KSB8fAkJCQlcCiYjNDM7CSBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfeDg2KSB8fAkJCQkJXAomIzQzOwkgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgJmFtcDsmYW1wOyBfX3Jpc2N2X3hsZW4gPT0gNjQpIHx8CVwKJiM0MzsJIGRlZmluZWQoX19UQVJHRVRfQVJDSF9zMzkwKSB8fAkJCQkJXAomIzQzOwkgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3Bvd2VycGMpIHx8CQkJCVwKJiM0MzsJIGRlZmluZWQoX19UQVJHRVRfQVJDSF9sb29uZ2FyY2gpKQogI2RlZmluZSBDQU5fVVNFX0xPQURfQUNRX1NUT1JFX1JFTAogI2VuZGlmCiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI0NAoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDQxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBzMzkwIEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2gg4oCTIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgYGFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNgLCBhbmQgc29tZSBzZWxmdGVzdHMsIGFuZCBhZGRzIHN1cHBvcnQgZm9yIGBCUEZfUFJPQkVfQVRPTUlDYCBhbmQgdGhlIGFjcXVpcmUvcmVsZWFzZSBpbnN0cnVjdGlvbnMgaW4gdGhlIHMzOTAgQlBGIEpJVCBjb21waWxlci4gSXQmIzM5O3MgYWxzbyByZWZhY3RvcmluZyB0aGUgbG9hZC9zdG9yZSBlbWl0IGZ1bmN0aW9ucyB0byBkZWFsIHdpdGggbWVtb3J5IHByb2JpbmcgYW5kIGF0b21pY3MuIEhtbSwgc2hvdWxkIHRoaXMgYmUgZnV6emVkPyBBYnNvbHV0ZWx5LCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCB3aXRoaW4gdGhlIHMzOTAgQlBGIEpJVCwgc28gaXQmIzM5O3MgYSBnb29kIHRhcmdldC4KCldhaXQsIGRvZXNuJiMzOTt0IHN5emthbGxlciBjb3ZlciBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzPyBJJiMzOTttIHByZXR0eSBzdXJlIGl0IGRvZXMsIGluY2x1ZGluZyBzMzkweC4uLnllcywgSSBrbm93IGl0IGRvZXMuIE9rYXksIHdlIHNob3VsZCBjaGVjayBpZiB3ZSBjYW4gaWRlbnRpZnkgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLgoKTGV0JiMzOTtzIHNlZS4uLiB0aGUgcHJpbWFyeSBmdW5jdGlvbnMgdGhhdCBhcmUgYWx0ZXJlZCBhcmU6CgotICAgYGJwZl9qaXRfcHJvYmVfbG9hZF9wcmVgCi0gICBgYnBmX2ppdF9wcm9iZV9zdG9yZV9wcmVgCi0gICBgZW1pdF9sZHhgIChuZXcpCi0gICBgZW1pdF9zdHhgIChuZXcpCi0gICBgYnBmX2ppdF9pbnNuYAotICAgYGJwZl9qaXRfc3VwcG9ydHNfaW5zbmAKCkkgc2hvdWxkIGNoZWNrIHRoZSBzb3VyY2UgZmlsZSB0byB2ZXJpZnkuIE9rYXksIGdvdCBpdC4gTm93LCBgYnBmX2ppdF9pbnNuYCBpcyBwcm9iYWJseSBhIGdvb2QgZm9jdXMgc3ltYm9sLCBidXQgdGhhdCYjMzk7cyBnb2luZyB0byBiZSBhIGhvdCBwYXRoIGluIHRoZSBKSVQgY29tcGlsZXIsIHJpZ2h0PyBJdCBtaWdodCBnZW5lcmF0ZSB0b28gbXVjaCBub2lzZS4KClNvIHBlcmhhcHMgYGJwZl9qaXRfcHJvYmVfbG9hZF9wcmVgLCBgYnBmX2ppdF9wcm9iZV9zdG9yZV9wcmVgLCBgZW1pdF9sZHhgLCBgZW1pdF9zdHhgLCBhbmQgYGJwZl9qaXRfc3VwcG9ydHNfaW5zbmAgd291bGQgYmUgYmV0dGVyIHN0YXJ0aW5nIHBvaW50cz8gTGV0IG1lIGNoZWNrIHRob3NlIGRlZmluaXRpb25zIHVzaW5nIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgY29tZXMgYmFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpY3x2b2lkfGludCkuKmJwZl9qaXRfLiomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9NTYyPWFzbShcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTU3NC1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6NTc1OnN0YXRpYyB2b2lkIGJwZl9qaXRfcGx0KHN0cnVjdCBicGZfcGx0ICpwbHQsIHZvaWQgKnJldCwgdm9pZCAqdGFyZ2V0KVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy01NzYte1xuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtNTk1LSAqL1xuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzo1OTY6c3RhdGljIHZvaWQgYnBmX2ppdF9wcm9sb2d1ZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy01OTcte1xuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtNjc5LSAqL1xuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzo2ODA6c3RhdGljIHZvaWQgYnBmX2ppdF9lcGlsb2d1ZShzdHJ1Y3QgYnBmX2ppdCAqaml0KVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy02ODEte1xuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9NzA4PXN0cnVjdCBicGZfaml0X3Byb2JlIHtcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTcxNC1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6NzE1OnN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfaW5pdChzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTcxNi17XG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy03MjgtICovXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjcyOTpzdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX2VtaXRfbm9wKHN0cnVjdCBicGZfaml0ICpqaXQsXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTczMC1cdFx0XHRcdCAgIHN0cnVjdCBicGZfaml0X3Byb2JlICpwcm9iZSlcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTc0MC1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6NzQxOnN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy03NDItXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy03NTktXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjc2MDpzdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX3N0b3JlX3ByZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTc2MS1cdFx0XHRcdCAgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy03NzItXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjc3MzpzdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX2F0b21pY19wcmUoc3RydWN0IGJwZl9qaXQgKmppdCxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtNzc0LVx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy03ODctXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjc4ODpzdGF0aWMgaW50IGJwZl9qaXRfcHJvYmVfcG9zdChzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy03ODktXHRcdFx0ICAgICAgc3RydWN0IGJwZl9qaXRfcHJvYmUgKnByb2JlKVxuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9OTA1PXN0YXRpYyBpbnQgc2lnbl96ZXJvX2V4dGVuZChzdHJ1Y3QgYnBmX2ppdCAqaml0LCBpbnQgciwgdTggc2l6ZSwgdTggZmxhZ3MpXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy05NDQtICovXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjk0NTpzdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy05NDYtXHRcdFx0XHQgaW50IGksIGJvb2wgZXh0cmFfcGFzcylcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTIyMzQ9c3RhdGljIGludCBicGZfc2V0X2FkZHIoc3RydWN0IGJwZl9qaXQgKmppdCwgaW50IGkpXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yMjUxLSAqL1xuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoyMjUyOnN0YXRpYyBpbnQgYnBmX2ppdF9wcm9nKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTIyNTMtXHRcdFx0Ym9vbCBleHRyYV9wYXNzKVxuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9MjMxMT1zdHJ1Y3QgczM5MF9qaXRfZGF0YSB7XG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yMzE2LVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoyMzE3OnN0YXRpYyBzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKmJwZl9qaXRfYWxsb2Moc3RydWN0IGJwZl9qaXQgKmppdCxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjMxOC1cdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqZnApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1OTAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIE5ldyBBc3NlbWJseSBGdW5jdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgdGhlIGNvbW1pdCBpbmNsdWRlcyBgZW1pdF9sZHhgIGFuZCBgZW1pdF9zdHhgLiBUaGUgZmFjdCB0aGF0IHRoZXkmIzM5O3JlIGBzdGF0aWNgIGlzIGEgZGV0YWlsIHdvcnRoIG5vdGluZzsgaXQgaW1wbGllcyB0aGV5JiMzOTtyZSBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiB0aGlzIG1vZHVsZS4gR2l2ZW4gdGhlIG5hbWVzLCBJJiMzOTttIGFzc3VtaW5nIHRoZXNlIGFyZSBsb3ctbGV2ZWwgaW5zdHJ1Y3Rpb25zIHJlbGF0ZWQgdG8gbG9hZGluZyBhbmQgc3RvcmluZyB0aGUgWCByZWdpc3RlciwgbGlrZWx5IHRhcmdldGVkIGZvciBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZSBvciBhc3NlbWJsZXIuIEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5ICpwcmVzZW50KiBpbiB0aGUgZmlsZS4gTm8gcG9pbnQgaW4gc3BlY3VsYXRpbmcgZnVydGhlciB1bnRpbCBJIHZlcmlmeSB0aGF0LiBJdCYjMzk7cyBzdGFuZGFyZCBwcmFjdGljZSB0byB2ZXJpZnkgdGhlaXIgZXhpc3RlbmNlIGZpcnN0IGJlZm9yZSBkZWx2aW5nIGludG8gdGhlIHJlc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW1pdF8uKngmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9Nzg4PXN0YXRpYyBpbnQgYnBmX2ppdF9wcm9iZV9wb3N0KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy04MzUtXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjgzNjpzdGF0aWMgaW50IGVtaXRfbGR4KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtODM3LXtcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTg2OC1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6ODY5OnN0YXRpYyBpbnQgZW1pdF9zdHgoc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy04NzAte1xuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9OTQ1PXN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0xNTU0LVx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0RXOlxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoxNTU1Olx0XHRlcnIgPSBlbWl0X3N0eChqaXQsIGZwLCBpbnNuKTtcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMTU1Ni1cdFx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE3MTktXHRcdFx0LyogczM5MCBoYXMgc3Ryb25nIG9yZGVyaW5nLCBqdXN0IHVzZSBsb2FkICovXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjE3MjA6XHRcdFx0ZXJyID0gZW1pdF9sZHgoaml0LCBmcCwgaW5zbik7XG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE3MjEtXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE3MjUtXHRcdFx0LyogczM5MCBoYXMgc3Ryb25nIG9yZGVyaW5nLCBqdXN0IHVzZSBzdG9yZSAqL1xuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoxNzI2Olx0XHRcdGVyciA9IGVtaXRfc3R4KGppdCwgZnAsIGluc24pO1xuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0xNzI3LVx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0xNzUyLVx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0RXOlxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoxNzUzOlx0XHRlcnIgPSBlbWl0X2xkeChqaXQsIGZwLCBpbnNuKTtcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMTc1NC1cdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYwNAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBjdXJyZW50IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBKSVQgQ29tcGlsYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIHRoZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIHRoZSBKSVQgY29tcGlsYXRpb24gcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGFyb3VuZCBsb2FkIGFuZCBzdG9yZSBvcGVyYXRpb25zLiBJdCBzZWVtcyBsaWtlIGBlbWl0X2xkeGAgYW5kIGBlbWl0X3N0eGAgYXJlIGdvb2QgY2FuZGlkYXRlcyB0byBleGFtaW5lIG1vcmUgY2xvc2VseTsgdGhleSBsaWtlbHkgcmVwcmVzZW50IHRoZSBjb3JlIGxvZ2ljIGZvciBnZW5lcmF0aW5nIGNvZGUgcmVsYXRlZCB0byB0aGVzZSBpbnN0cnVjdGlvbnMuIFRoYXQgZmVlbHMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcy4KCkkgYWxzbyBzZWUgdGhhdCBgYnBmX2ppdF9wcm9iZV9sb2FkX3ByZWAgYW5kIGBicGZfaml0X3Byb2JlX3N0b3JlX3ByZWAgaGF2ZSBiZWVuIG1vZGlmaWVkLiBUaGlzIHN1Z2dlc3RzIHRoZXJlIGlzIGEgbmV3IGZlYXR1cmUgb3Igb3B0aW1pemF0aW9uIGZvciB0aGUgcHJvYmVzLiBMZXQgbWUgZGlnIGRlZXBlciBpbnRvIHRob3NlIGJlY2F1c2UgdGhleSBhcmUgb2Z0ZW4gaW52b2x2ZWQgaW4gaW5zdHJ1bWVudGF0aW9uIG9mIHByb2JlcyB3aGljaCBjYW4gYmUgdmVyeSBpbnNpZ2h0ZnVsIGZvciBwZXJmb3JtYW5jZSB0dW5pbmcuCgpOb3csIGxldCYjMzk7cyBwaXZvdCB0byBpbnZlc3RpZ2F0ZSB0aGUgYnJvYWRlciBjYXBhYmlsaXRpZXMgb2YgdGhpcyBKSVQgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQgKmNhbiogaGFuZGxlLiBUbyBkbyB0aGlzLCBsZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGJwZl9qaXRfc3VwcG9ydHNfaW5zbmAuIFVuZGVyc3RhbmRpbmcgdGhpcyBjaGVjayB3aWxsIGxldCBtZSBkZXRlcm1pbmUgd2hhdCBpbnN0cnVjdGlvbnMgdGhlIEpJVCBlbmdpbmUgbmF0aXZlbHkgc3VwcG9ydHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ppdF9zdXBwb3J0c19pbnNuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTMwNDA9Ym9vbCBicGZfaml0X3N1cHBvcnRzX2ZzZXNzaW9uKHZvaWQpXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0zMDQ0LVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzozMDQ1OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMzA0Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMDYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQlBGIEpJVCBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgQlBGIEpJVCBjb21wb25lbnQgZm9yIGZ1enppbmcuIEkgdGhpbmsgYGJwZl9qaXRfc3VwcG9ydHNfaW5zbmAgaXMgYSBrZXkgc3ltYm9sIHRvIHRhcmdldCwgaXQgcHJvdmlkZXMgYSBjcnVjaWFsIGluaXRpYWwgY2hlY2suIFdhaXQgYSBzZWNvbmQsIHRoZSBgZW1pdF9sZHhgIGFuZCBgZW1pdF9zdHhgIGZ1bmN0aW9ucywgdGhvc2UgYXJlIHN0YXRpYywgcmlnaHQ/IElmIHRoZXkmIzM5O3JlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBpbWFnZSwgU3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IGZ1enogdGhvc2UuIFRoZW4gdGhlcmXigJlzIHRoZSBiZWhlbW90aCwgYGJwZl9qaXRfaW5zbmAsIHRoZSBjb3JlIEpJVCBsb29wIGl0c2VsZi4gTWF5YmUgdGhhdOKAmXMgdG9vIG11Y2ggYXQgdGhpcyBzdGFnZS4KCkxldCYjMzk7cyByZWZpbmUgdGhlIGFwcHJvYWNoLiBGb2N1cyBvbiBgZW1pdF9sZHhgLCBgZW1pdF9zdHhgLCBhcyB3ZWxsIGFzIGBicGZfaml0X3Byb2JlX2xvYWRfcHJlYCwgYW5kIGBicGZfaml0X3Byb2JlX3N0b3JlX3ByZWAgLCBhbG9uZ3NpZGUgYGJwZl9qaXRfc3VwcG9ydHNfaW5zbmAuIE9oLCBob2xkIG9u4oCmIGBicGZfaml0X3Byb2JlX2xvYWRfcHJlYCBhbmQgYGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlYCBhcmUgc3RhdGljIHRvby4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgb3IgYnVpbGQgb3B0aW9ucyByZXF1aXJlZCB0byBlbmFibGUgdGhlbS4KClJpZ2h0LCBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgdGhlIGNvZGUgaXMgbG9jYXRlZC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBpbiBgYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY2AuIE9rYXksIHRoYXQgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNob3VsZCB2ZXJpZnkgdGhhdCB0aGlzIGNvZGUgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JQRl9KSVRgIGlzIGVuYWJsZWQuIFRpbWUgdG8gY2hlY2sgdGhlIE1ha2VmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaml0X2NvbXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvbmV0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9uZXQvTWFrZWZpbGUtNC0jXG5hcmNoL3MzOTAvbmV0L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSBicGZfaml0X2NvbXAubyBicGZfdGltZWRfbWF5X2dvdG8ub1xuYXJjaC9zMzkwL25ldC9NYWtlZmlsZS02LW9iai0kKENPTkZJR19IQVZFX1BORVRJRCkgJiM0Mzs9IHBuZXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgwMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBKSVQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGl0ZW0gaGVyZSBpcyBgQlBGX0pJVGAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgZW5hYmxlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwuIEFyZSB0aGVyZSBhbnkgKm90aGVyKiByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gVGhpcyBwYXRjaCBpcyBzcGVjaWZpY2FsbHkgYWJvdXQgc3VwcG9ydGluZyBgQlBGX1BST0JFX0FUT01JQ2AgYW5kIGBCUEZfTE9BRF9BQ1FgL2BCUEZfU1RPUkVfUkVMYCB3aXRoaW4gdGhlIHMzOTAgQlBGIEpJVCBjb21waWxlci4gVGhlc2UgYXJlIGZhaXJseSBzaWduaWZpY2FudCBCUEYgZmVhdHVyZXMsIHNvIGl0IHdhcnJhbnRzIGEgdGhvcm91Z2ggcmV2aWV3IG9mIHRoZSBjb25maWd1cmF0aW9uLgoKSSBzZWUgdGhlIHNlbGZ0ZXN0cyBhcmUgdXNpbmcgYEVOQUJMRV9BVE9NSUNTX1RFU1RTYCBhbmQgYF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEhvd2V2ZXIsIG9uIHRoZSBrZXJuZWwgc2lkZSwgaXQgc2VlbXMgbGlrZSBqdXN0IGBCUEZfSklUYCBhbG9uZSBpcyBzdWZmaWNpZW50IGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkgdG8gYmUgcHJvcGVybHkgZW5hYmxlZC4gSSBzdGlsbCB3YW50IHRvIGJlIGNlcnRhaW4sIHRob3VnaC4gVG8gYmUgY29tcGxldGVseSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgYW5kIGNyb3NzLXJlZmVyZW5jZSB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgYXNzb2NpYXRlZCBjb2RlIHRvIHZlcmlmeSB0aGF0IHRoZXJlIGFyZSBubyBoaWRkZW4gZGVwZW5kZW5jaWVzIG9yIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucyBJIGhhdmVuJiMzOTt0IGFjY291bnRlZCBmb3IuIEkgYWx3YXlzIHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIGFueXRoaW5nIGNyaXRpY2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19CUEZfSklUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzIzNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRoYXQgYEJQRl9KSVRgLi4uIHRoYXQmIzM5O3MgYSAqZ2VuZXJpYyogY29uZmlndXJhdGlvbiBvcHRpb24sIHJpZ2h0PyBJdCYjMzk7cyBub3QgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCBhdCBsZWFzdCBub3QgZGlyZWN0bHkuIEJ1dCBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBob29rcyBvciBkZXBlbmRlbmNpZXMuIFNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS2NvbmZpZyBmaWxlcywgc3RhcnRpbmcgd2l0aCBgYXJjaC9zMzkwL0tjb25maWdgIGJlY2F1c2UgdGhhdCYjMzk7cyB0aGUgY3VycmVudCBhcmVhIG9mIGZvY3VzLCBhbmQgY2hlY2tpbmcgZm9yIEJQRi1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoZXJlLiBUaGF0IHNob3VsZCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIHNpdHVhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL0tjb25maWc9NzU9Y29uZmlnIFMzOTBcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy0xNTctXHRzZWxlY3QgQVJDSF9XQU5UU19OT19JTlNUUlxuYXJjaC9zMzkwL0tjb25maWc6MTU4Olx0c2VsZWN0IEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVRcbmFyY2gvczM5MC9LY29uZmlnLTE1OS1cdHNlbGVjdCBBUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT05cbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy0yMDUtXHRzZWxlY3QgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1NcbmFyY2gvczM5MC9LY29uZmlnOjIwNjpcdHNlbGVjdCBIQVZFX0VCUEZfSklUIGlmIEhBVkVfTUFSQ0hfWjE5Nl9GRUFUVVJFU1xuYXJjaC9zMzkwL0tjb25maWctMjA3LVx0c2VsZWN0IEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1NcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MzMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBKSVQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgYEJQRl9KSVRgIG9wdGlvbiBzZWVtcyB0byBiZSBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgaWYgYEhBVkVfRUJQRl9KSVRgIGlzIGNob3Nlbiwgd2hpY2ggaW4gdHVybiByZWxpZXMgb24gYEhBVkVfTUFSQ0hfWjE5Nl9GRUFUVVJFU2AuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBUaGUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IHdlIGRvbiYjMzk7dCBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0IGBCUEZfSklUYCBhcyBhIGNvbmZpZyBvcHRpb247IGl0IHNob3VsZCBiZSBoYW5kbGVkIGJhc2VkIG9uIHRob3NlIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgYSBmYWlybHkgZ2VuZXJpYyBjb25maWcgb3B0aW9uLgoKTm93LCBob2xkIG9uLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBvbmx5IGxpc3QgY29uZmlncyB0aGF0ICpzcGVjaWZpY2FsbHkqIHJlbGF0ZSB0byB0aGUgbW9kaWZpZWQgY29kZSwgYW5kIHRvIGxlYXZlIG91dCB0aGUgbW9yZSBnZW5lcmFsIG9wdGlvbnMgc2luY2UgdGhvc2UgYXJlIGxpa2VseSBhbHJlYWR5IGVuYWJsZWQuIEdpdmVuIHRoYXQsIGxpc3RpbmcgYEJQRl9KSVRgIGl0c2VsZiBtaWdodCBiZSByZWR1bmRhbnQuCgpIbW0sIGJ1dCB3aGF0IGFib3V0IG1vcmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBkZWFsIHdpdGggQlBGIGFyZW5hIGFsbG9jYXRpb25zIG9yIGF0b21pYyBvcGVyYXRpb25zPyBBcmUgdGhlcmUgYW55IHRoYXQgc3BlY2lmaWNhbGx5IHBlcnRhaW4gdG8gb3VyIGNoYW5nZXM/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlIG9yIHNvbWV0aGluZyBzaW1pbGFyIHRvIHNlZSBpZiBhbnkgb2YgdGhvc2UgbW9yZSBzcGVjaWFsaXplZCBjb25maWdzIG5lZWQgdG8gYmUgY2FsbGVkIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBUkVOQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDY5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgcmVmbGVjdGluZyB0aGUgZGVzY3JpYmVkIHRob3VnaHQgcHJvY2VzczoKCioqQlBGIENvbmZpZ3VyYXRpb24gSHVudCoqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gQmVya2VsZXkgUGFja2V0IEZpbHRlciAoQlBGKSB3aXRoaW4gdGhpcyBrZXJuZWwgYnVpbGQgc3lzdGVtLiBHaXZlbiB0aGUgY29tbW9uIHByYWN0aWNlIGFuZCBteSBleHBlcmllbmNlLCB0aGUgZmlyc3QgcGxhY2UgSSYjMzk7bSBnb2luZyB0byBjaGVjayBpcyBsaWtlbHkgdGhlIG1haW4gY29uZmlndXJhdGlvbiBmaWxlLCBgaW5pdC9LY29uZmlnYC4gSXQmIzM5O3MgdGhlIHVzdWFsIHN0YXJ0aW5nIHBvaW50IGZvciB0b3AtbGV2ZWwgZmVhdHVyZSBzZWxlY3Rpb25zLiBJZiB0aGF0IGRvZXNuJiMzOTt0IGltbWVkaWF0ZWx5IHlpZWxkIHRoZSBzcGVjaWZpYyBCUEYgc2V0dGluZ3MsIG15IG5leHQgcG9ydCBvZiBjYWxsIGlzIHByYWN0aWNhbGx5IGd1YXJhbnRlZWQgdG8gYmUgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRoYXQgZGlyZWN0b3J5IGlzIHRoZSBsb2dpY2FsIGhvbWUgZm9yIEJQRi1zcGVjaWZpYyBjb25maWd1cmF0aW9ucywgZ2l2ZW4gaXRzIGNvcmUgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bGwgZm9jdXMgbXkgc2VhcmNoIHRoZXJlIGlmIGBpbml0L0tjb25maWdgIGRvZXNuJiMzOTt0IHByb3ZpZGUgd2hhdCBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWctMi1cbmtlcm5lbC9icGYvS2NvbmZpZzozOiMgQlBGIGludGVycHJldGVyIHRoYXQsIGZvciBleGFtcGxlLCBjbGFzc2ljIHNvY2tldCBmaWx0ZXJzIGRlcGVuZCBvbi5cbmtlcm5lbC9icGYvS2NvbmZpZzo0OmNvbmZpZyBCUEZcbmtlcm5lbC9icGYvS2NvbmZpZy01LVx0Ym9vbFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy03LVxua2VybmVsL2JwZi9LY29uZmlnOjg6IyBVc2VkIGJ5IGFyY2hzIHRvIHRlbGwgdGhhdCB0aGV5IHN1cHBvcnQgQlBGIEpJVCBjb21waWxlciBwbHVzIHdoaWNoXG5rZXJuZWwvYnBmL0tjb25maWctOS0jIGZsYXZvdXIuIE9ubHkgb25lIG9mIHRoZSB0d28gY2FuIGJlIHNlbGVjdGVkIGZvciBhIHNwZWNpZmljIGFyY2ggc2luY2Vcbmtlcm5lbC9icGYvS2NvbmZpZzoxMDojIGVCUEYgSklUIHN1cGVyc2VkZXMgdGhlIGNCUEYgSklULlxua2VybmVsL2JwZi9LY29uZmlnLTExLVxua2VybmVsL2JwZi9LY29uZmlnOjEyOiMgQ2xhc3NpYyBCUEYgSklUIChjQlBGKVxua2VybmVsL2JwZi9LY29uZmlnOjEzOmNvbmZpZyBIQVZFX0NCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctMTQtXHRib29sXG5rZXJuZWwvYnBmL0tjb25maWctMTUtXG5rZXJuZWwvYnBmL0tjb25maWc6MTY6IyBFeHRlbmRlZCBCUEYgSklUIChlQlBGKVxua2VybmVsL2JwZi9LY29uZmlnOjE3OmNvbmZpZyBIQVZFX0VCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctMTgtXHRib29sXG5rZXJuZWwvYnBmL0tjb25maWctMTktXG5rZXJuZWwvYnBmL0tjb25maWc6MjA6IyBVc2VkIGJ5IGFyY2hzIHRvIHRlbGwgdGhhdCB0aGV5IHdhbnQgdGhlIEJQRiBKSVQgY29tcGlsZXIgZW5hYmxlZCBieVxua2VybmVsL2JwZi9LY29uZmlnOjIxOiMgZGVmYXVsdCBmb3Iga2VybmVscyB0aGF0IHdlcmUgY29tcGlsZWQgd2l0aCBCUEYgSklUIHN1cHBvcnQuXG5rZXJuZWwvYnBmL0tjb25maWc6MjI6Y29uZmlnIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVRcbmtlcm5lbC9icGYvS2NvbmZpZy0yMy1cdGJvb2xcbmtlcm5lbC9icGYvS2NvbmZpZy0yNC1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNTptZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWc6Mjk6XHRzZWxlY3QgQlBGXG5rZXJuZWwvYnBmL0tjb25maWctMzAtXHRzZWxlY3QgSVJRX1dPUktcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctMzgtXHRoZWxwXG5rZXJuZWwvYnBmL0tjb25maWc6Mzk6XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbmtlcm5lbC9icGYvS2NvbmZpZy00MC1cdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXG5rZXJuZWwvYnBmL0tjb25maWc6NDI6Y29uZmlnIEJQRl9KSVRcbmtlcm5lbC9icGYvS2NvbmZpZzo0MzpcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZzo0NDpcdGRlcGVuZHMgb24gQlBGXG5rZXJuZWwvYnBmL0tjb25maWc6NDU6XHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTQ2LVx0c2VsZWN0IEVYRUNNRU1cbmtlcm5lbC9icGYvS2NvbmZpZy00Ny1cdGhlbHBcbmtlcm5lbC9icGYvS2NvbmZpZzo0ODpcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxua2VybmVsL2JwZi9LY29uZmlnLTQ5LVx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcbmtlcm5lbC9icGYvS2NvbmZpZzo1MDpcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxua2VybmVsL2JwZi9LY29uZmlnLTUxLVx0ICBwcm9ncmFtcy5cbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNTctXG5rZXJuZWwvYnBmL0tjb25maWc6NTg6Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG5rZXJuZWwvYnBmL0tjb25maWc6NTk6XHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWc6NjA6XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFx1MDAyNlx1MDAyNiBIQVZFX0VCUEZfSklUIFx1MDAyNlx1MDAyNiBCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctNjEtXHRoZWxwXG5rZXJuZWwvYnBmL0tjb25maWc6NjI6XHQgIEVuYWJsZXMgQlBGIEpJVCBhbmQgcmVtb3ZlcyBCUEYgaW50ZXJwcmV0ZXIgdG8gYXZvaWQgc3BlY3VsYXRpdmVcbmtlcm5lbC9icGYvS2NvbmZpZzo2MzpcdCAgZXhlY3V0aW9uIG9mIEJQRiBpbnN0cnVjdGlvbnMgYnkgdGhlIGludGVycHJldGVyLlxua2VybmVsL2JwZi9LY29uZmlnLTY0LVxua2VybmVsL2JwZi9LY29uZmlnOjY1Olx0ICBXaGVuIENPTkZJR19CUEZfSklUX0FMV0FZU19PTiBpcyBlbmFibGVkLCAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcbmtlcm5lbC9icGYvS2NvbmZpZy02Ni1cdCAgaXMgcGVybWFuZW50bHkgc2V0IHRvIDEgYW5kIHNldHRpbmcgYW55IG90aGVyIHZhbHVlIHRoYW4gdGhhdCB3aWxsXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTY4LVxua2VybmVsL2JwZi9LY29uZmlnOjY5OmNvbmZpZyBCUEZfSklUX0RFRkFVTFRfT05cbmtlcm5lbC9icGYvS2NvbmZpZzo3MDpcdGRlZl9ib29sIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQgfHwgQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvS2NvbmZpZzo3MTpcdGRlcGVuZHMgb24gSEFWRV9FQlBGX0pJVCBcdTAwMjZcdTAwMjYgQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTcyLVxua2VybmVsL2JwZi9LY29uZmlnOjczOmNvbmZpZyBCUEZfVU5QUklWX0RFRkFVTFRfT0ZGXG5rZXJuZWwvYnBmL0tjb25maWc6NzQ6XHRib29sIFwmIzM0O0Rpc2FibGUgdW5wcml2aWxlZ2VkIEJQRiBieSBkZWZhdWx0XCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctNzUtXHRkZWZhdWx0IHlcbmtlcm5lbC9icGYvS2NvbmZpZzo3NjpcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy03Ny1cdGhlbHBcbmtlcm5lbC9icGYvS2NvbmZpZzo3ODpcdCAgRGlzYWJsZXMgdW5wcml2aWxlZ2VkIEJQRiBieSBkZWZhdWx0IGJ5IHNldHRpbmcgdGhlIGNvcnJlc3BvbmRpbmdcbmtlcm5lbC9icGYvS2NvbmZpZy03OS1cdCAgL3Byb2Mvc3lzL2tlcm5lbC91bnByaXZpbGVnZWRfYnBmX2Rpc2FibGVkIGtub2IgdG8gMi4gQW4gYWRtaW4gY2FuXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTgzLVxua2VybmVsL2JwZi9LY29uZmlnOjg0Olx0ICBVbnByaXZpbGVnZWQgQlBGIGNvdWxkIGJlIHVzZWQgdG8gZXhwbG9pdCBjZXJ0YWluIHBvdGVudGlhbFxua2VybmVsL2JwZi9LY29uZmlnLTg1LVx0ICBzcGVjdWxhdGl2ZSBleGVjdXRpb24gc2lkZS1jaGFubmVsIHZ1bG5lcmFiaWxpdGllcyBvbiB1bm1pdGlnYXRlZFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZz05MD1zb3VyY2UgXCYjMzQ7a2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy05MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo5Mjpjb25maWcgQlBGX0xTTVxua2VybmVsL2JwZi9LY29uZmlnOjkzOlx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZzo5NDpcdGRlcGVuZHMgb24gQlBGX0VWRU5UU1xua2VybmVsL2JwZi9LY29uZmlnOjk1Olx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTk2LVx0ZGVwZW5kcyBvbiBTRUNVUklUWVxua2VybmVsL2JwZi9LY29uZmlnOjk3Olx0ZGVwZW5kcyBvbiBCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctOTgtXHRoZWxwXG5rZXJuZWwvYnBmL0tjb25maWc6OTk6XHQgIEVuYWJsZXMgaW5zdHJ1bWVudGF0aW9uIG9mIHRoZSBzZWN1cml0eSBob29rcyB3aXRoIEJQRiBwcm9ncmFtcyBmb3Jcbmtlcm5lbC9icGYvS2NvbmZpZy0xMDAtXHQgIGltcGxlbWVudGluZyBkeW5hbWljIE1BQyBhbmQgQXVkaXQgUG9saWNpZXMuXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTEwMy1cbmtlcm5lbC9icGYvS2NvbmZpZzoxMDQ6ZW5kbWVudSAjIFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NTgKCQkJCQkJCW91dHB1dDogMTU2CgkJCQkJCQl0aG91Z2h0czogMjY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEJQRiBKSVQgQ29uZmlndXJhdGlvbiBhbmQgS2V5IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBCUEYgSklUIGNvbmZpZ3VyYXRpb24uIEZyb20gYSBoaWdoIGxldmVsLCBgQlBGX0pJVGAgaXMgdGhlIGNvcmUgY29uZmlndXJhdGlvbiB0byBjb25zaWRlciwgd2hpY2ggaXMgZ2VuZXJpYy4gTm8gbmVlZCB0byBsaXN0IHNwZWNpZmljIGNvbmZpZyBkZXRhaWxzIHNpbmNlIGBCUEZfSklUYCBpcyB0aGUgbWFpbiBlbmFibGVyLCBhbmQgaXQmIzM5O3MgYWxyZWFkeSBlbmFibGVkIGluIG15IHNldHVwLiBJJiMzOTttIGdvaW5nIHRvIGNvbnNpZGVyIGl0IGFzIGEgZ2l2ZW4uCgpOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3Qgb3Zlcmxvb2sgYW55IHJlbGV2YW50IGRldGFpbHMuIEhtbSwgbm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBgQlBGX1BST0JFX0FUT01JQ2AgZXhpc3Q7IGl0IGxvb2tzIGxpa2UgdGhhdCYjMzk7cyBqdXN0IHBhcnQgb2YgdGhlIEJQRiBpbnN0cnVjdGlvbiBzZXQgaXRzZWxmLiBHb29kIHRvIGtub3cuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIHN5bWJvbHMuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlc2UgZnVuY3Rpb25zOiBgZW1pdF9sZHhgLCBgZW1pdF9zdHhgLCBgYnBmX2ppdF9wcm9iZV9sb2FkX3ByZWAsIGBicGZfaml0X3Byb2JlX3N0b3JlX3ByZWAsIGFuZCBgYnBmX2ppdF9zdXBwb3J0c19pbnNuYC4KCkl0IHNlZW1zIGxpa2UgYGVtaXRfbGR4YCBhbmQgYGVtaXRfc3R4YCBhcmUgdGhlIGtleSBsb2FkL3N0b3JlIGZ1bmN0aW9ucy4gTGV0IG1lIGRvdWJsZS1jaGVjay4gWWVzLCB0aGV5JiMzOTtyZSB0aGUgcHJpbWFyeSBvbmVzLCBhcyBJIHN1c3BlY3RlZC4gSW50ZXJlc3RpbmdseSwgSSBzZWUgdGhhdCB0aGV5IGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMgZnVuY3Rpb25zLiBBcmUgdGhleSBhY2Nlc3NpYmxlPyBZZXMsIHRoZXkmIzM5O3JlIGNhbGxlZCBmcm9tIGBicGZfaml0X2luc25gLiBBbmQgYXJlIHRoZXJlIG90aGVyIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byBjb25zaWRlcj8KCkkgc2VlIHRoYXQgYGJwZl9qaXRfcHJvYmVfbG9hZF9wcmVgIGFuZCBgYnBmX2ppdF9wcm9iZV9zdG9yZV9wcmVgIGFyZSBhbHNvIHN0YXRpYywgYW5kIHRoZXkmIzM5O3JlIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBlbWl0X2xkeGAgYW5kIGBlbWl0X3N0eGAuIEl0JiMzOTtzIGltcG9ydGFudCB0byBkb2N1bWVudCB0aGVzZSByZWxhdGlvbnNoaXBzLgoKUmlnaHQsIHNvIEkgd2lsbCBub3cgbGlzdCB0aG9zZSBrZXkgZnVuY3Rpb25zIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIHRvIGNvbmNsdWRlIHRoZSBhc3Nlc3NtZW50IHVzaW5nIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbWl0X2xkeCYjMzQ7LAogICAgJiMzNDtlbWl0X3N0eCYjMzQ7LAogICAgJiMzNDticGZfaml0X3Byb2JlX2xvYWRfcHJlJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfcHJvYmVfc3RvcmVfcHJlJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfaW5zbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIEJQRl9QUk9CRV9BVE9NSUMsIEJQRl9MT0FEX0FDUSwgYW5kIEJQRl9TVE9SRV9SRUwgaW5zdHJ1Y3Rpb25zIGluIHRoZSBzMzkwIEJQRiBKSVQgY29tcGlsZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBCUEYgSklUIGxvZ2ljIG9uIHMzOTAgYXJjaGl0ZWN0dXJlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbWl0X2xkeCYjMzQ7LAogICAgJiMzNDtlbWl0X3N0eCYjMzQ7LAogICAgJiMzNDticGZfaml0X3Byb2JlX2xvYWRfcHJlJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfcHJvYmVfc3RvcmVfcHJlJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfaW5zbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIEJQRl9QUk9CRV9BVE9NSUMsIEJQRl9MT0FEX0FDUSwgYW5kIEJQRl9TVE9SRV9SRUwgaW5zdHJ1Y3Rpb25zIGluIHRoZSBzMzkwIEJQRiBKSVQgY29tcGlsZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBCUEYgSklUIGxvZ2ljIG9uIHMzOTAgYXJjaGl0ZWN0dXJlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjA0OjA1LjQzODY5ODA5NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzI5ODAwNDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVtaXRfbGR4XCIsXG4gICAgXCJlbWl0X3N0eFwiLFxuICAgIFwiYnBmX2ppdF9wcm9iZV9sb2FkX3ByZVwiLFxuICAgIFwiYnBmX2ppdF9wcm9iZV9zdG9yZV9wcmVcIixcbiAgICBcImJwZl9qaXRfc3VwcG9ydHNfaW5zblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgQlBGX1BST0JFX0FUT01JQywgQlBGX0xPQURfQUNRLCBhbmQgQlBGX1NUT1JFX1JFTCBpbnN0cnVjdGlvbnMgaW4gdGhlIHMzOTAgQlBGIEpJVCBjb21waWxlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIEJQRiBKSVQgbG9naWMgb24gczM5MCBhcmNoaXRlY3R1cmUgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODowNDowNS40Mzg3MDU4OTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1OTU0MDE0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI4OWQxMWQ0Y2Y2NzY4ZDAxZTFhMDk0MWU3ZjQzNTdkMzA4ZTkyMmRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMjQgMTg6MDQ6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNcXG5pbmRleCAzMTc0OWMwMzYyY2EyMy4uYzk4YWIyZWVjZTU3ZjUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1xcbisrKyBiL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNcXG5AQCAtNzQzLDEwICs3NDMsMTIgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9iZV9sb2FkX3ByZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIHtcXG4gXFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU0gXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU1TWCBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTTMyKVxcbitcXHQgICAgQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTTMyIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfQVRPTUlDKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyKSB7XFxuK1xcdGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIgfHxcXG4rXFx0ICAgIEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9BVE9NSUMpIHtcXG4gXFx0XFx0LyogbGdybCAlcjEsa2Vybl9hcmVuYSAqL1xcbiBcXHRcXHRFTUlUNl9QQ1JFTF9SSUxCKDB4YzQwODAwMDAsIFJFR19XMSwgaml0LVxcdTAwM2VrZXJuX2FyZW5hKTtcXG4gXFx0XFx0cHJvYmUtXFx1MDAzZWFyZW5hX3JlZyA9IFJFR19XMTtcXG5AQCAtNzU4LDcgKzc2MCw4IEBAIHN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBzdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX3N0b3JlX3ByZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpXFxuIHtcXG4tXFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU0zMilcXG4rXFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU0zMiBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX0FUT01JQylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0LyogbGdybCAlcjEsa2Vybl9hcmVuYSAqL1xcbkBAIC04MzAsNiArODMzLDcyIEBAIHN0YXRpYyBpbnQgYnBmX2ppdF9wcm9iZV9wb3N0KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGVtaXRfbGR4KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2ppdF9wcm9iZSBwcm9iZTtcXG4rXFxuK1xcdGJwZl9qaXRfcHJvYmVfaW5pdChcXHUwMDI2cHJvYmUpO1xcbitcXHRicGZfaml0X3Byb2JlX2xvYWRfcHJlKGppdCwgaW5zbiwgXFx1MDAyNnByb2JlKTtcXG4rXFxuK1xcdHN3aXRjaCAoQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkpIHtcXG4rXFx0Y2FzZSBCUEZfQjogLyogZHN0ID0gKih1OCAqKSh1bCkgKHNyYyArIG9mZikgKi9cXG4rXFx0XFx0LyogbGxnYyAlZHN0LG9mZiglc3JjLCVhcmVuYSkgKi9cXG4rXFx0XFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwOTAsIGluc24tXFx1MDAzZWRzdF9yZWcsIGluc24tXFx1MDAzZXNyY19yZWcsXFxuK1xcdFxcdFxcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgaW5zbi1cXHUwMDNlb2ZmKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX0g6IC8qIGRzdCA9ICoodTE2ICopKHVsKSAoc3JjICsgb2ZmKSAqL1xcbitcXHRcXHQvKiBsbGdoICVkc3Qsb2ZmKCVzcmMsJWFyZW5hKSAqL1xcbitcXHRcXHRFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDA5MSwgaW5zbi1cXHUwMDNlZHN0X3JlZywgaW5zbi1cXHUwMDNlc3JjX3JlZyxcXG4rXFx0XFx0XFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBpbnNuLVxcdTAwM2VvZmYpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfVzogLyogZHN0ID0gKih1MzIgKikodWwpIChzcmMgKyBvZmYpICovXFxuK1xcdFxcdC8qIGxsZ2YgJWRzdCxvZmYoJXNyYywlYXJlbmEpICovXFxuK1xcdFxcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDE2LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBpbnNuLVxcdTAwM2VzcmNfcmVnLFxcbitcXHRcXHRcXHQgICAgICBwcm9iZS5hcmVuYV9yZWcsIGluc24tXFx1MDAzZW9mZik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9EVzogLyogZHN0ID0gKih1NjQgKikodWwpIChzcmMgKyBvZmYpICovXFxuK1xcdFxcdC8qIGxnICVkc3Qsb2ZmKCVzcmMsJWFyZW5hKSAqL1xcbitcXHRcXHRFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDAwNCwgaW5zbi1cXHUwMDNlZHN0X3JlZywgaW5zbi1cXHUwMDNlc3JjX3JlZyxcXG4rXFx0XFx0XFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBpbnNuLVxcdTAwM2VvZmYpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGJwZl9qaXRfcHJvYmVfcG9zdChqaXQsIGZwLCBcXHUwMDI2cHJvYmUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGVtaXRfc3R4KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2ppdF9wcm9iZSBwcm9iZTtcXG4rXFxuK1xcdGJwZl9qaXRfcHJvYmVfaW5pdChcXHUwMDI2cHJvYmUpO1xcbitcXHRicGZfaml0X3Byb2JlX3N0b3JlX3ByZShqaXQsIGluc24sIFxcdTAwMjZwcm9iZSk7XFxuK1xcbitcXHRzd2l0Y2ggKEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpKSB7XFxuK1xcdGNhc2UgQlBGX0I6IC8qICoodTggKikoZHN0ICsgb2ZmKSA9IHNyY19yZWcgKi9cXG4rXFx0XFx0Lyogc3RjeSAlc3JjLG9mZiglZHN0LCVhcmVuYSkgKi9cXG4rXFx0XFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwNzIsIGluc24tXFx1MDAzZXNyY19yZWcsIGluc24tXFx1MDAzZWRzdF9yZWcsXFxuK1xcdFxcdFxcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgaW5zbi1cXHUwMDNlb2ZmKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX0g6IC8qICh1MTYgKikoZHN0ICsgb2ZmKSA9IHNyYyAqL1xcbitcXHRcXHQvKiBzdGh5ICVzcmMsb2ZmKCVkc3QsJWFyZW5hKSAqL1xcbitcXHRcXHRFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDA3MCwgaW5zbi1cXHUwMDNlc3JjX3JlZywgaW5zbi1cXHUwMDNlZHN0X3JlZyxcXG4rXFx0XFx0XFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBpbnNuLVxcdTAwM2VvZmYpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfVzogLyogKih1MzIgKikoZHN0ICsgb2ZmKSA9IHNyYyAqL1xcbitcXHRcXHQvKiBzdHkgJXNyYyxvZmYoJWRzdCwlYXJlbmEpICovXFxuK1xcdFxcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDUwLCBpbnNuLVxcdTAwM2VzcmNfcmVnLCBpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbitcXHRcXHRcXHQgICAgICBwcm9iZS5hcmVuYV9yZWcsIGluc24tXFx1MDAzZW9mZik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9EVzogLyogKHU2NCAqKShkc3QgKyBvZmYpID0gc3JjICovXFxuK1xcdFxcdC8qIHN0ZyAlc3JjLG9mZiglZHN0LCVhcmVuYSkgKi9cXG4rXFx0XFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwMjQsIGluc24tXFx1MDAzZXNyY19yZWcsIGluc24tXFx1MDAzZWRzdF9yZWcsXFxuK1xcdFxcdFxcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgaW5zbi1cXHUwMDNlb2ZmKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXFx1MDAyNnByb2JlKTtcXG4rfVxcbitcXG4gLypcXG4gICogU2lnbi0gb3IgemVyby1leHRlbmQgdGhlIHJlZ2lzdGVyIGlmIG5lY2Vzc2FyeVxcbiAgKi9cXG5AQCAtMTQ3Nyw0NCArMTU0NiwxMyBAQCBzdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxcbiBcXHQgKi9cXG4gXFx0Y2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9COiAvKiAqKHU4ICopKGRzdCArIG9mZikgPSBzcmNfcmVnICovXFxuIFxcdGNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9COlxcbi1cXHRcXHRicGZfaml0X3Byb2JlX3N0b3JlX3ByZShqaXQsIGluc24sIFxcdTAwMjZwcm9iZSk7XFxuLVxcdFxcdC8qIHN0Y3kgJXNyYyxvZmYoJWRzdCwlYXJlbmEpICovXFxuLVxcdFxcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDcyLCBzcmNfcmVnLCBkc3RfcmVnLFxcbi1cXHRcXHRcXHQgICAgICBwcm9iZS5hcmVuYV9yZWcsIG9mZik7XFxuLVxcdFxcdGVyciA9IGJwZl9qaXRfcHJvYmVfcG9zdChqaXQsIGZwLCBcXHUwMDI2cHJvYmUpO1xcbi1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0XFx0aml0LVxcdTAwM2VzZWVuIHw9IFNFRU5fTUVNO1xcbi1cXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9IOiAvKiAodTE2ICopKGRzdCArIG9mZikgPSBzcmMgKi9cXG4gXFx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0g6XFxuLVxcdFxcdGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKGppdCwgaW5zbiwgXFx1MDAyNnByb2JlKTtcXG4tXFx0XFx0Lyogc3RoeSAlc3JjLG9mZiglZHN0LCVhcmVuYSkgKi9cXG4tXFx0XFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwNzAsIHNyY19yZWcsIGRzdF9yZWcsXFxuLVxcdFxcdFxcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgb2ZmKTtcXG4tXFx0XFx0ZXJyID0gYnBmX2ppdF9wcm9iZV9wb3N0KGppdCwgZnAsIFxcdTAwMjZwcm9iZSk7XFxuLVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRyZXR1cm4gZXJyO1xcbi1cXHRcXHRqaXQtXFx1MDAzZXNlZW4gfD0gU0VFTl9NRU07XFxuLVxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEJQRl9TVFggfCBCUEZfTUVNIHwgQlBGX1c6IC8qICoodTMyICopKGRzdCArIG9mZikgPSBzcmMgKi9cXG4gXFx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX1c6XFxuLVxcdFxcdGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKGppdCwgaW5zbiwgXFx1MDAyNnByb2JlKTtcXG4tXFx0XFx0Lyogc3R5ICVzcmMsb2ZmKCVkc3QsJWFyZW5hKSAqL1xcbi1cXHRcXHRFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDA1MCwgc3JjX3JlZywgZHN0X3JlZyxcXG4tXFx0XFx0XFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpO1xcbi1cXHRcXHRlcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXFx1MDAyNnByb2JlKTtcXG4tXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuLVxcdFxcdGppdC1cXHUwMDNlc2VlbiB8PSBTRUVOX01FTTtcXG4tXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgQlBGX1NUWCB8IEJQRl9NRU0gfCBCUEZfRFc6IC8qICh1NjQgKikoZHN0ICsgb2ZmKSA9IHNyYyAqL1xcbiBcXHRjYXNlIEJQRl9TVFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfRFc6XFxuLVxcdFxcdGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKGppdCwgaW5zbiwgXFx1MDAyNnByb2JlKTtcXG4tXFx0XFx0Lyogc3RnICVzcmMsb2ZmKCVkc3QsJWFyZW5hKSAqL1xcbi1cXHRcXHRFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDAyNCwgc3JjX3JlZywgZHN0X3JlZyxcXG4tXFx0XFx0XFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpO1xcbi1cXHRcXHRlcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXFx1MDAyNnByb2JlKTtcXG4rXFx0XFx0ZXJyID0gZW1pdF9zdHgoaml0LCBmcCwgaW5zbik7XFxuIFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHRqaXQtXFx1MDAzZXNlZW4gfD0gU0VFTl9NRU07XFxuQEAgLTE1NzQsMTkgKzE2MTIsMjMgQEAgc3RhdGljIG5vaW5saW5lIGludCBicGZfaml0X2luc24oc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcXG4gXFx0LypcXG4gXFx0ICogQlBGX0FUT01JQ1xcbiBcXHQgKi9cXG4rXFx0Y2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9COlxcbitcXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0g6XFxuIFxcdGNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfRFc6XFxuIFxcdGNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfVzpcXG4rXFx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX0FUT01JQyB8IEJQRl9COlxcbitcXHRjYXNlIEJQRl9TVFggfCBCUEZfUFJPQkVfQVRPTUlDIHwgQlBGX0g6XFxuIFxcdGNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9BVE9NSUMgfCBCUEZfRFc6XFxuIFxcdGNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9BVE9NSUMgfCBCUEZfVzpcXG4gXFx0e1xcbiBcXHRcXHRib29sIGlzMzIgPSBCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfVztcXG4gXFxuIFxcdFxcdC8qXFxuLVxcdFxcdCAqIFVubGlrZSBsb2FkcyBhbmQgc3RvcmVzLCBhdG9taWNzIGhhdmUgb25seSBhIGJhc2UgcmVnaXN0ZXIsXFxuLVxcdFxcdCAqIGJ1dCBubyBpbmRleCByZWdpc3Rlci4gRm9yIHRoZSBub24tYXJlbmEgY2FzZSwgc2ltcGx5IHVzZVxcbi1cXHRcXHQgKiAlZHN0IGFzIGEgYmFzZS4gRm9yIHRoZSBhcmVuYSBjYXNlLCB1c2UgdGhlIHdvcmsgcmVnaXN0ZXJcXG4tXFx0XFx0ICogJXIxOiBmaXJzdCwgbG9hZCB0aGUgYXJlbmEgYmFzZSBpbnRvIGl0LCBhbmQgdGhlbiBhZGQgJWRzdFxcbi1cXHRcXHQgKiB0byBpdC5cXG4rXFx0XFx0ICogVW5saWtlIGxvYWRzIGFuZCBzdG9yZXMsIHMzOTAgYXRvbWljcyBoYXZlIG9ubHkgYSBiYXNlXFxuK1xcdFxcdCAqIHJlZ2lzdGVyLCBidXQgbm8gaW5kZXggcmVnaXN0ZXIuIEZvciB0aGUgbm9uLWFyZW5hIGNhc2UsXFxuK1xcdFxcdCAqIHNpbXBseSB1c2UgJWRzdCBhcyBhIGJhc2UuIEZvciB0aGUgYXJlbmEgY2FzZSwgdXNlIHRoZVxcbitcXHRcXHQgKiB3b3JrIHJlZ2lzdGVyICVyMTogZmlyc3QsIGxvYWQgdGhlIGFyZW5hIGJhc2UgaW50byBpdCxcXG4rXFx0XFx0ICogYW5kIHRoZW4gYWRkICVkc3QgdG8gaXQuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRwcm9iZS5hcmVuYV9yZWcgPSBkc3RfcmVnO1xcbiBcXG5AQCAtMTY3Myw2ICsxNzE1LDE4IEBAIHN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXFxuIFxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBCUEZfTE9BRF9BQ1E6XFxuK1xcdFxcdFxcdC8qIHMzOTAgaGFzIHN0cm9uZyBvcmRlcmluZywganVzdCB1c2UgbG9hZCAqL1xcbitcXHRcXHRcXHRlcnIgPSBlbWl0X2xkeChqaXQsIGZwLCBpbnNuKTtcXG4rXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIEJQRl9TVE9SRV9SRUw6XFxuK1xcdFxcdFxcdC8qIHMzOTAgaGFzIHN0cm9uZyBvcmRlcmluZywganVzdCB1c2Ugc3RvcmUgKi9cXG4rXFx0XFx0XFx0ZXJyID0gZW1pdF9zdHgoaml0LCBmcCwgaW5zbik7XFxuK1xcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0cHJfZXJyKFxcXCJVbmtub3duIGF0b21pYyBvcGVyYXRpb24gJTAyeFxcXFxuXFxcIiwgaW5zbi1cXHUwMDNlaW1tKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC0xO1xcbkBAIC0xNjg3LDE1ICsxNzQxLDIwIEBAIHN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXFxuIFxcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfQjogLyogZHN0ID0gKih1OCAqKSh1bCkgKHNyYyArIG9mZikgKi9cXG4gXFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTSB8IEJQRl9COlxcbiBcXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfQjpcXG4tXFx0XFx0YnBmX2ppdF9wcm9iZV9sb2FkX3ByZShqaXQsIGluc24sIFxcdTAwMjZwcm9iZSk7XFxuLVxcdFxcdC8qIGxsZ2MgJWRzdCxvZmYoJXNyYywlYXJlbmEpICovXFxuLVxcdFxcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDkwLCBkc3RfcmVnLCBzcmNfcmVnLFxcbi1cXHRcXHRcXHQgICAgICBwcm9iZS5hcmVuYV9yZWcsIG9mZik7XFxuLVxcdFxcdGVyciA9IGJwZl9qaXRfcHJvYmVfcG9zdChqaXQsIGZwLCBcXHUwMDI2cHJvYmUpO1xcbitcXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX0g6IC8qIGRzdCA9ICoodTE2ICopKHVsKSAoc3JjICsgb2ZmKSAqL1xcbitcXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX0g6XFxuK1xcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9IOlxcbitcXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX1c6IC8qIGRzdCA9ICoodTMyICopKHVsKSAoc3JjICsgb2ZmKSAqL1xcbitcXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX1c6XFxuK1xcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9XOlxcbitcXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX0RXOiAvKiBkc3QgPSAqKHU2NCAqKSh1bCkgKHNyYyArIG9mZikgKi9cXG4rXFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTSB8IEJQRl9EVzpcXG4rXFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0RXOlxcbitcXHRcXHRlcnIgPSBlbWl0X2xkeChqaXQsIGZwLCBpbnNuKTtcXG4gXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdFxcdGppdC1cXHUwMDNlc2VlbiB8PSBTRUVOX01FTTtcXG4tXFx0XFx0aWYgKGluc25faXNfemV4dChcXHUwMDI2aW5zblsxXSkpXFxuK1xcdFxcdGlmIChCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSAhPSBCUEZfRFcgXFx1MDAyNlxcdTAwMjYgaW5zbl9pc196ZXh0KFxcdTAwMjZpbnNuWzFdKSlcXG4gXFx0XFx0XFx0aW5zbl9jb3VudCA9IDI7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfQjogLyogZHN0ID0gKihzOCAqKSh1bCkgKHNyYyArIG9mZikgKi9cXG5AQCAtMTcwOCwyMCArMTc2Nyw2IEBAIHN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdFxcdGppdC1cXHUwMDNlc2VlbiB8PSBTRUVOX01FTTtcXG4gXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfSDogLyogZHN0ID0gKih1MTYgKikodWwpIChzcmMgKyBvZmYpICovXFxuLVxcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0gfCBCUEZfSDpcXG4tXFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0g6XFxuLVxcdFxcdGJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoaml0LCBpbnNuLCBcXHUwMDI2cHJvYmUpO1xcbi1cXHRcXHQvKiBsbGdoICVkc3Qsb2ZmKCVzcmMsJWFyZW5hKSAqL1xcbi1cXHRcXHRFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDA5MSwgZHN0X3JlZywgc3JjX3JlZyxcXG4tXFx0XFx0XFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpO1xcbi1cXHRcXHRlcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXFx1MDAyNnByb2JlKTtcXG4tXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuLVxcdFxcdGppdC1cXHUwMDNlc2VlbiB8PSBTRUVOX01FTTtcXG4tXFx0XFx0aWYgKGluc25faXNfemV4dChcXHUwMDI2aW5zblsxXSkpXFxuLVxcdFxcdFxcdGluc25fY291bnQgPSAyO1xcbi1cXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX0g6IC8qIGRzdCA9ICooczE2ICopKHVsKSAoc3JjICsgb2ZmKSAqL1xcbiBcXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNU1ggfCBCUEZfSDpcXG4gXFx0XFx0YnBmX2ppdF9wcm9iZV9sb2FkX3ByZShqaXQsIGluc24sIFxcdTAwMjZwcm9iZSk7XFxuQEAgLTE3MzIsMjAgKzE3NzcsNiBAQCBzdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHRqaXQtXFx1MDAzZXNlZW4gfD0gU0VFTl9NRU07XFxuIFxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX1c6IC8qIGRzdCA9ICoodTMyICopKHVsKSAoc3JjICsgb2ZmKSAqL1xcbi1cXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX1c6XFxuLVxcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9XOlxcbi1cXHRcXHRicGZfaml0X3Byb2JlX2xvYWRfcHJlKGppdCwgaW5zbiwgXFx1MDAyNnByb2JlKTtcXG4tXFx0XFx0LyogbGxnZiAlZHN0LG9mZiglc3JjKSAqL1xcbi1cXHRcXHRqaXQtXFx1MDAzZXNlZW4gfD0gU0VFTl9NRU07XFxuLVxcdFxcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDE2LCBkc3RfcmVnLCBzcmNfcmVnLFxcbi1cXHRcXHRcXHQgICAgICBwcm9iZS5hcmVuYV9yZWcsIG9mZik7XFxuLVxcdFxcdGVyciA9IGJwZl9qaXRfcHJvYmVfcG9zdChqaXQsIGZwLCBcXHUwMDI2cHJvYmUpO1xcbi1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0XFx0aWYgKGluc25faXNfemV4dChcXHUwMDI2aW5zblsxXSkpXFxuLVxcdFxcdFxcdGluc25fY291bnQgPSAyO1xcbi1cXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX1c6IC8qIGRzdCA9ICooczMyICopKHVsKSAoc3JjICsgb2ZmKSAqL1xcbiBcXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNU1ggfCBCUEZfVzpcXG4gXFx0XFx0YnBmX2ppdF9wcm9iZV9sb2FkX3ByZShqaXQsIGluc24sIFxcdTAwMjZwcm9iZSk7XFxuQEAgLTE3NTYsMTggKzE3ODcsNiBAQCBzdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfRFc6IC8qIGRzdCA9ICoodTY0ICopKHVsKSAoc3JjICsgb2ZmKSAqL1xcbi1cXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX0RXOlxcbi1cXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfRFc6XFxuLVxcdFxcdGJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoaml0LCBpbnNuLCBcXHUwMDI2cHJvYmUpO1xcbi1cXHRcXHQvKiBsZyAlZHN0LG9mZiglc3JjLCVhcmVuYSkgKi9cXG4tXFx0XFx0aml0LVxcdTAwM2VzZWVuIHw9IFNFRU5fTUVNO1xcbi1cXHRcXHRFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDAwNCwgZHN0X3JlZywgc3JjX3JlZyxcXG4tXFx0XFx0XFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpO1xcbi1cXHRcXHRlcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXFx1MDAyNnByb2JlKTtcXG4tXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuLVxcdFxcdGJyZWFrO1xcbiBcXHQvKlxcbiBcXHQgKiBCUEZfSk1QIC8gQ0FMTFxcbiBcXHQgKi9cXG5AQCAtMzAyOCwxMyArMzA0Nyw2IEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcXG4gXFx0aWYgKCFpbl9hcmVuYSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdHN3aXRjaCAoaW5zbi1cXHUwMDNlY29kZSkge1xcbi1cXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0I6XFxuLVxcdGNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfSDpcXG4tXFx0Y2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9XOlxcbi1cXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0RXOlxcbi1cXHRcXHRpZiAoYnBmX2F0b21pY19pc19sb2FkX3N0b3JlKGluc24pKVxcbi1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfQjpcXG4gXFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX0g6XFxuIFxcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9XOlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuY1xcbmluZGV4IDJlNzc1MWE4NTM5OTliLi43M2JjMmI4MzVmM2ZlNCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuY1xcbkBAIC0yOCw4ICsyOCwxMCBAQCBib29sIHNraXBfYWxsX3Rlc3RzID0gdHJ1ZTtcXG4gXFxuICNpZiBkZWZpbmVkKEVOQUJMRV9BVE9NSUNTX1RFU1RTKSBcXHUwMDI2XFx1MDAyNlxcdFxcdCAgXFxcXFxcbiBcXHRkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuLVxcdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFxcXFxcXG4tXFx0IChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpIFxcdTAwMjZcXHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkpXFxuK1xcdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IFxcXFxcXG4rXFx0IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFxcXFxcXG4rXFx0IChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpIFxcdTAwMjZcXHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkgfHwgXFxcXFxcbitcXHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3MzOTApKVxcbiBib29sIHNraXBfbGFjcV9zcmVsX3Rlc3RzIF9fYXR0cmlidXRlKChfX3NlY3Rpb25fXyhcXFwiLmRhdGFcXFwiKSkpID0gZmFsc2U7XFxuICNlbHNlXFxuIGJvb2wgc2tpcF9sYWNxX3NyZWxfdGVzdHMgPSB0cnVlO1xcbkBAIC0zMTUsOCArMzE3LDEwIEBAIGludCBsb2FkX2FjcXVpcmUoY29uc3Qgdm9pZCAqY3R4KVxcbiB7XFxuICNpZiBkZWZpbmVkKEVOQUJMRV9BVE9NSUNTX1RFU1RTKSBcXHUwMDI2XFx1MDAyNlxcdFxcdCAgXFxcXFxcbiBcXHRkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuLVxcdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFxcXFxcXG4tXFx0IChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpIFxcdTAwMjZcXHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkpXFxuK1xcdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IFxcXFxcXG4rXFx0IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFxcXFxcXG4rXFx0IChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpIFxcdTAwMjZcXHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkgfHwgXFxcXFxcbitcXHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3MzOTApKVxcbiBcXG4gI2RlZmluZSBMT0FEX0FDUVVJUkVfQVJFTkEoU0laRU9QLCBTSVpFLCBTUkMsIERTVClcXHRcXFxcXFxuIFxcdHsgYXNtIHZvbGF0aWxlIChcXHRcXHRcXHRcXHRcXFxcXFxuQEAgLTM2Nyw4ICszNzEsMTAgQEAgaW50IHN0b3JlX3JlbGVhc2UoY29uc3Qgdm9pZCAqY3R4KVxcbiB7XFxuICNpZiBkZWZpbmVkKEVOQUJMRV9BVE9NSUNTX1RFU1RTKSBcXHUwMDI2XFx1MDAyNlxcdFxcdCAgXFxcXFxcbiBcXHRkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuLVxcdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFxcXFxcXG4tXFx0IChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpIFxcdTAwMjZcXHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkpXFxuK1xcdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IFxcXFxcXG4rXFx0IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFxcXFxcXG4rXFx0IChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpIFxcdTAwMjZcXHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkgfHwgXFxcXFxcbitcXHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3MzOTApKVxcbiBcXG4gI2RlZmluZSBTVE9SRV9SRUxFQVNFX0FSRU5BKFNJWkVPUCwgRFNULCBWQUwpXFx0XFxcXFxcbiBcXHR7IGFzbSB2b2xhdGlsZSAoXFx0XFx0XFx0XFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXFxuaW5kZXggYjBjNDQxMzg0ZjIwNjYuLjVlYWNmMWI0MzI1MjEyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcXG5AQCAtMjY0LDkgKzI2NCwxMiBAQFxcbiAjZW5kaWZcXG4gXFxuICNpZiBfX2NsYW5nX21ham9yX18gXFx1MDAzZT0gMTggXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChFTkFCTEVfQVRPTUlDU19URVNUUykgXFx1MDAyNlxcdTAwMjZcXHRcXHRcXFxcXFxuLVxcdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8XFx0XFxcXFxcbi1cXHQoZGVmaW5lZChfX1RBUkdFVF9BUkNIX3Jpc2N2KSBcXHUwMDI2XFx1MDAyNiBfX3Jpc2N2X3hsZW4gPT0gNjQpIHx8IFxcXFxcXG4tXFx0ZGVmaW5lZChfX1RBUkdFVF9BUkNIX3Bvd2VycGMpIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF9sb29uZ2FyY2gpKVxcbitcXHQoZGVmaW5lZChfX1RBUkdFVF9BUkNIX2FybTY0KSB8fFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgXFx1MDAyNlxcdTAwMjYgX19yaXNjdl94bGVuID09IDY0KSB8fFxcdFxcXFxcXG4rXFx0IGRlZmluZWQoX19UQVJHRVRfQVJDSF9zMzkwKSB8fFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0IGRlZmluZWQoX19UQVJHRVRfQVJDSF9wb3dlcnBjKSB8fFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0IGRlZmluZWQoX19UQVJHRVRfQVJDSF9sb29uZ2FyY2gpKVxcbiAjZGVmaW5lIENBTl9VU0VfTE9BRF9BQ1FfU1RPUkVfUkVMXFxuICNlbmRpZlxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6MDQ6MDYuMjk5NDc0NzEzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDU4NjkwMTA5MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZW1pdF9sZHhcIixcbiAgICBcImVtaXRfc3R4XCIsXG4gICAgXCJicGZfaml0X3Byb2JlX2xvYWRfcHJlXCIsXG4gICAgXCJicGZfaml0X3Byb2JlX3N0b3JlX3ByZVwiLFxuICAgIFwiYnBmX2ppdF9zdXBwb3J0c19pbnNuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBzdXBwb3J0IGZvciBCUEZfUFJPQkVfQVRPTUlDLCBCUEZfTE9BRF9BQ1EsIGFuZCBCUEZfU1RPUkVfUkVMIGluc3RydWN0aW9ucyBpbiB0aGUgczM5MCBCUEYgSklUIGNvbXBpbGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIEpJVCBsb2dpYyBvbiBzMzkwIGFyY2hpdGVjdHVyZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjg5ZDExZDRjZjY3NjhkMDFlMWEwOTQxZTdmNDM1N2QzMDhlOTIyZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDE4OjA0OjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IDMxNzQ5YzAzNjJjYTIzLi5jOThhYjJlZWNlNTdmNSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNcbisrKyBiL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC03NDMsMTAgKzc0MywxMiBAQCBzdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX2xvYWRfcHJlKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiB7XG4gXHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfTUVNIFx1MDAyNlx1MDAyNlxuIFx0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTVNYIFx1MDAyNlx1MDAyNlxuLVx0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTTMyKVxuK1x0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTTMyIFx1MDAyNlx1MDAyNlxuK1x0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX0FUT01JQylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyKSB7XG4rXHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIgfHxcbitcdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9BVE9NSUMpIHtcbiBcdFx0LyogbGdybCAlcjEsa2Vybl9hcmVuYSAqL1xuIFx0XHRFTUlUNl9QQ1JFTF9SSUxCKDB4YzQwODAwMDAsIFJFR19XMSwgaml0LVx1MDAzZWtlcm5fYXJlbmEpO1xuIFx0XHRwcm9iZS1cdTAwM2VhcmVuYV9yZWcgPSBSRUdfVzE7XG5AQCAtNzU4LDcgKzc2MCw4IEBAIHN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIHN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpXG4ge1xuLVx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTTMyKVxuK1x0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTTMyIFx1MDAyNlx1MDAyNlxuK1x0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX0FUT01JQylcbiBcdFx0cmV0dXJuO1xuIFxuIFx0LyogbGdybCAlcjEsa2Vybl9hcmVuYSAqL1xuQEAgLTgzMCw2ICs4MzMsNzIgQEAgc3RhdGljIGludCBicGZfaml0X3Byb2JlX3Bvc3Qoc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGVtaXRfbGR4KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbit7XG4rXHRzdHJ1Y3QgYnBmX2ppdF9wcm9iZSBwcm9iZTtcbitcbitcdGJwZl9qaXRfcHJvYmVfaW5pdChcdTAwMjZwcm9iZSk7XG4rXHRicGZfaml0X3Byb2JlX2xvYWRfcHJlKGppdCwgaW5zbiwgXHUwMDI2cHJvYmUpO1xuK1xuK1x0c3dpdGNoIChCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpKSB7XG4rXHRjYXNlIEJQRl9COiAvKiBkc3QgPSAqKHU4ICopKHVsKSAoc3JjICsgb2ZmKSAqL1xuK1x0XHQvKiBsbGdjICVkc3Qsb2ZmKCVzcmMsJWFyZW5hKSAqL1xuK1x0XHRFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDA5MCwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZXNyY19yZWcsXG4rXHRcdFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBpbnNuLVx1MDAzZW9mZik7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfSDogLyogZHN0ID0gKih1MTYgKikodWwpIChzcmMgKyBvZmYpICovXG4rXHRcdC8qIGxsZ2ggJWRzdCxvZmYoJXNyYywlYXJlbmEpICovXG4rXHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDkxLCBpbnNuLVx1MDAzZWRzdF9yZWcsIGluc24tXHUwMDNlc3JjX3JlZyxcbitcdFx0XHQgICAgICBwcm9iZS5hcmVuYV9yZWcsIGluc24tXHUwMDNlb2ZmKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9XOiAvKiBkc3QgPSAqKHUzMiAqKSh1bCkgKHNyYyArIG9mZikgKi9cbitcdFx0LyogbGxnZiAlZHN0LG9mZiglc3JjLCVhcmVuYSkgKi9cbitcdFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwMTYsIGluc24tXHUwMDNlZHN0X3JlZywgaW5zbi1cdTAwM2VzcmNfcmVnLFxuK1x0XHRcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX0RXOiAvKiBkc3QgPSAqKHU2NCAqKSh1bCkgKHNyYyArIG9mZikgKi9cbitcdFx0LyogbGcgJWRzdCxvZmYoJXNyYywlYXJlbmEpICovXG4rXHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDA0LCBpbnNuLVx1MDAzZWRzdF9yZWcsIGluc24tXHUwMDNlc3JjX3JlZyxcbitcdFx0XHQgICAgICBwcm9iZS5hcmVuYV9yZWcsIGluc24tXHUwMDNlb2ZmKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRyZXR1cm4gYnBmX2ppdF9wcm9iZV9wb3N0KGppdCwgZnAsIFx1MDAyNnByb2JlKTtcbit9XG4rXG4rc3RhdGljIGludCBlbWl0X3N0eChzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4re1xuK1x0c3RydWN0IGJwZl9qaXRfcHJvYmUgcHJvYmU7XG4rXG4rXHRicGZfaml0X3Byb2JlX2luaXQoXHUwMDI2cHJvYmUpO1xuK1x0YnBmX2ppdF9wcm9iZV9zdG9yZV9wcmUoaml0LCBpbnNuLCBcdTAwMjZwcm9iZSk7XG4rXG4rXHRzd2l0Y2ggKEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkpIHtcbitcdGNhc2UgQlBGX0I6IC8qICoodTggKikoZHN0ICsgb2ZmKSA9IHNyY19yZWcgKi9cbitcdFx0Lyogc3RjeSAlc3JjLG9mZiglZHN0LCVhcmVuYSkgKi9cbitcdFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwNzIsIGluc24tXHUwMDNlc3JjX3JlZywgaW5zbi1cdTAwM2Vkc3RfcmVnLFxuK1x0XHRcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX0g6IC8qICh1MTYgKikoZHN0ICsgb2ZmKSA9IHNyYyAqL1xuK1x0XHQvKiBzdGh5ICVzcmMsb2ZmKCVkc3QsJWFyZW5hKSAqL1xuK1x0XHRFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDA3MCwgaW5zbi1cdTAwM2VzcmNfcmVnLCBpbnNuLVx1MDAzZWRzdF9yZWcsXG4rXHRcdFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBpbnNuLVx1MDAzZW9mZik7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfVzogLyogKih1MzIgKikoZHN0ICsgb2ZmKSA9IHNyYyAqL1xuK1x0XHQvKiBzdHkgJXNyYyxvZmYoJWRzdCwlYXJlbmEpICovXG4rXHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDUwLCBpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlZHN0X3JlZyxcbitcdFx0XHQgICAgICBwcm9iZS5hcmVuYV9yZWcsIGluc24tXHUwMDNlb2ZmKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9EVzogLyogKHU2NCAqKShkc3QgKyBvZmYpID0gc3JjICovXG4rXHRcdC8qIHN0ZyAlc3JjLG9mZiglZHN0LCVhcmVuYSkgKi9cbitcdFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwMjQsIGluc24tXHUwMDNlc3JjX3JlZywgaW5zbi1cdTAwM2Vkc3RfcmVnLFxuK1x0XHRcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdHJldHVybiBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXHUwMDI2cHJvYmUpO1xuK31cbitcbiAvKlxuICAqIFNpZ24tIG9yIHplcm8tZXh0ZW5kIHRoZSByZWdpc3RlciBpZiBuZWNlc3NhcnlcbiAgKi9cbkBAIC0xNDc3LDQ0ICsxNTQ2LDEzIEBAIHN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4gXHQgKi9cbiBcdGNhc2UgQlBGX1NUWCB8IEJQRl9NRU0gfCBCUEZfQjogLyogKih1OCAqKShkc3QgKyBvZmYpID0gc3JjX3JlZyAqL1xuIFx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0I6XG4tXHRcdGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKGppdCwgaW5zbiwgXHUwMDI2cHJvYmUpO1xuLVx0XHQvKiBzdGN5ICVzcmMsb2ZmKCVkc3QsJWFyZW5hKSAqL1xuLVx0XHRFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDA3Miwgc3JjX3JlZywgZHN0X3JlZyxcbi1cdFx0XHQgICAgICBwcm9iZS5hcmVuYV9yZWcsIG9mZik7XG4tXHRcdGVyciA9IGJwZl9qaXRfcHJvYmVfcG9zdChqaXQsIGZwLCBcdTAwMjZwcm9iZSk7XG4tXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIGVycjtcbi1cdFx0aml0LVx1MDAzZXNlZW4gfD0gU0VFTl9NRU07XG4tXHRcdGJyZWFrO1xuIFx0Y2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9IOiAvKiAodTE2ICopKGRzdCArIG9mZikgPSBzcmMgKi9cbiBcdGNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9IOlxuLVx0XHRicGZfaml0X3Byb2JlX3N0b3JlX3ByZShqaXQsIGluc24sIFx1MDAyNnByb2JlKTtcbi1cdFx0Lyogc3RoeSAlc3JjLG9mZiglZHN0LCVhcmVuYSkgKi9cbi1cdFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwNzAsIHNyY19yZWcsIGRzdF9yZWcsXG4tXHRcdFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpO1xuLVx0XHRlcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXHUwMDI2cHJvYmUpO1xuLVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiBlcnI7XG4tXHRcdGppdC1cdTAwM2VzZWVuIHw9IFNFRU5fTUVNO1xuLVx0XHRicmVhaztcbiBcdGNhc2UgQlBGX1NUWCB8IEJQRl9NRU0gfCBCUEZfVzogLyogKih1MzIgKikoZHN0ICsgb2ZmKSA9IHNyYyAqL1xuIFx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX1c6XG4tXHRcdGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKGppdCwgaW5zbiwgXHUwMDI2cHJvYmUpO1xuLVx0XHQvKiBzdHkgJXNyYyxvZmYoJWRzdCwlYXJlbmEpICovXG4tXHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDUwLCBzcmNfcmVnLCBkc3RfcmVnLFxuLVx0XHRcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgb2ZmKTtcbi1cdFx0ZXJyID0gYnBmX2ppdF9wcm9iZV9wb3N0KGppdCwgZnAsIFx1MDAyNnByb2JlKTtcbi1cdFx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gZXJyO1xuLVx0XHRqaXQtXHUwMDNlc2VlbiB8PSBTRUVOX01FTTtcbi1cdFx0YnJlYWs7XG4gXHRjYXNlIEJQRl9TVFggfCBCUEZfTUVNIHwgQlBGX0RXOiAvKiAodTY0ICopKGRzdCArIG9mZikgPSBzcmMgKi9cbiBcdGNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9EVzpcbi1cdFx0YnBmX2ppdF9wcm9iZV9zdG9yZV9wcmUoaml0LCBpbnNuLCBcdTAwMjZwcm9iZSk7XG4tXHRcdC8qIHN0ZyAlc3JjLG9mZiglZHN0LCVhcmVuYSkgKi9cbi1cdFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwMjQsIHNyY19yZWcsIGRzdF9yZWcsXG4tXHRcdFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpO1xuLVx0XHRlcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXHUwMDI2cHJvYmUpO1xuK1x0XHRlcnIgPSBlbWl0X3N0eChqaXQsIGZwLCBpbnNuKTtcbiBcdFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRqaXQtXHUwMDNlc2VlbiB8PSBTRUVOX01FTTtcbkBAIC0xNTc0LDE5ICsxNjEyLDIzIEBAIHN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4gXHQvKlxuIFx0ICogQlBGX0FUT01JQ1xuIFx0ICovXG4rXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0I6XG4rXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0g6XG4gXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0RXOlxuIFx0Y2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9XOlxuK1x0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX0FUT01JQyB8IEJQRl9COlxuK1x0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX0FUT01JQyB8IEJQRl9IOlxuIFx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX0FUT01JQyB8IEJQRl9EVzpcbiBcdGNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9BVE9NSUMgfCBCUEZfVzpcbiBcdHtcbiBcdFx0Ym9vbCBpczMyID0gQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfVztcbiBcbiBcdFx0Lypcbi1cdFx0ICogVW5saWtlIGxvYWRzIGFuZCBzdG9yZXMsIGF0b21pY3MgaGF2ZSBvbmx5IGEgYmFzZSByZWdpc3Rlcixcbi1cdFx0ICogYnV0IG5vIGluZGV4IHJlZ2lzdGVyLiBGb3IgdGhlIG5vbi1hcmVuYSBjYXNlLCBzaW1wbHkgdXNlXG4tXHRcdCAqICVkc3QgYXMgYSBiYXNlLiBGb3IgdGhlIGFyZW5hIGNhc2UsIHVzZSB0aGUgd29yayByZWdpc3RlclxuLVx0XHQgKiAlcjE6IGZpcnN0LCBsb2FkIHRoZSBhcmVuYSBiYXNlIGludG8gaXQsIGFuZCB0aGVuIGFkZCAlZHN0XG4tXHRcdCAqIHRvIGl0LlxuK1x0XHQgKiBVbmxpa2UgbG9hZHMgYW5kIHN0b3JlcywgczM5MCBhdG9taWNzIGhhdmUgb25seSBhIGJhc2VcbitcdFx0ICogcmVnaXN0ZXIsIGJ1dCBubyBpbmRleCByZWdpc3Rlci4gRm9yIHRoZSBub24tYXJlbmEgY2FzZSxcbitcdFx0ICogc2ltcGx5IHVzZSAlZHN0IGFzIGEgYmFzZS4gRm9yIHRoZSBhcmVuYSBjYXNlLCB1c2UgdGhlXG4rXHRcdCAqIHdvcmsgcmVnaXN0ZXIgJXIxOiBmaXJzdCwgbG9hZCB0aGUgYXJlbmEgYmFzZSBpbnRvIGl0LFxuK1x0XHQgKiBhbmQgdGhlbiBhZGQgJWRzdCB0byBpdC5cbiBcdFx0ICovXG4gXHRcdHByb2JlLmFyZW5hX3JlZyA9IGRzdF9yZWc7XG4gXG5AQCAtMTY3Myw2ICsxNzE1LDE4IEBAIHN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4gXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgQlBGX0xPQURfQUNROlxuK1x0XHRcdC8qIHMzOTAgaGFzIHN0cm9uZyBvcmRlcmluZywganVzdCB1c2UgbG9hZCAqL1xuK1x0XHRcdGVyciA9IGVtaXRfbGR4KGppdCwgZnAsIGluc24pO1xuK1x0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIEJQRl9TVE9SRV9SRUw6XG4rXHRcdFx0LyogczM5MCBoYXMgc3Ryb25nIG9yZGVyaW5nLCBqdXN0IHVzZSBzdG9yZSAqL1xuK1x0XHRcdGVyciA9IGVtaXRfc3R4KGppdCwgZnAsIGluc24pO1xuK1x0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdHByX2VycihcIlVua25vd24gYXRvbWljIG9wZXJhdGlvbiAlMDJ4XFxuXCIsIGluc24tXHUwMDNlaW1tKTtcbiBcdFx0XHRyZXR1cm4gLTE7XG5AQCAtMTY4NywxNSArMTc0MSwyMCBAQCBzdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxuIFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9COiAvKiBkc3QgPSAqKHU4ICopKHVsKSAoc3JjICsgb2ZmKSAqL1xuIFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTSB8IEJQRl9COlxuIFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0I6XG4tXHRcdGJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoaml0LCBpbnNuLCBcdTAwMjZwcm9iZSk7XG4tXHRcdC8qIGxsZ2MgJWRzdCxvZmYoJXNyYywlYXJlbmEpICovXG4tXHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDkwLCBkc3RfcmVnLCBzcmNfcmVnLFxuLVx0XHRcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgb2ZmKTtcbi1cdFx0ZXJyID0gYnBmX2ppdF9wcm9iZV9wb3N0KGppdCwgZnAsIFx1MDAyNnByb2JlKTtcbitcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfSDogLyogZHN0ID0gKih1MTYgKikodWwpIChzcmMgKyBvZmYpICovXG4rXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX0g6XG4rXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfSDpcbitcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfVzogLyogZHN0ID0gKih1MzIgKikodWwpIChzcmMgKyBvZmYpICovXG4rXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX1c6XG4rXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfVzpcbitcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfRFc6IC8qIGRzdCA9ICoodTY0ICopKHVsKSAoc3JjICsgb2ZmKSAqL1xuK1x0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTSB8IEJQRl9EVzpcbitcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9EVzpcbitcdFx0ZXJyID0gZW1pdF9sZHgoaml0LCBmcCwgaW5zbik7XG4gXHRcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0aml0LVx1MDAzZXNlZW4gfD0gU0VFTl9NRU07XG4tXHRcdGlmIChpbnNuX2lzX3pleHQoXHUwMDI2aW5zblsxXSkpXG4rXHRcdGlmIChCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9EVyBcdTAwMjZcdTAwMjYgaW5zbl9pc196ZXh0KFx1MDAyNmluc25bMV0pKVxuIFx0XHRcdGluc25fY291bnQgPSAyO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9COiAvKiBkc3QgPSAqKHM4ICopKHVsKSAoc3JjICsgb2ZmKSAqL1xuQEAgLTE3MDgsMjAgKzE3NjcsNiBAQCBzdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdGppdC1cdTAwM2VzZWVuIHw9IFNFRU5fTUVNO1xuIFx0XHRicmVhaztcbi1cdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfSDogLyogZHN0ID0gKih1MTYgKikodWwpIChzcmMgKyBvZmYpICovXG4tXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX0g6XG4tXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfSDpcbi1cdFx0YnBmX2ppdF9wcm9iZV9sb2FkX3ByZShqaXQsIGluc24sIFx1MDAyNnByb2JlKTtcbi1cdFx0LyogbGxnaCAlZHN0LG9mZiglc3JjLCVhcmVuYSkgKi9cbi1cdFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwOTEsIGRzdF9yZWcsIHNyY19yZWcsXG4tXHRcdFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpO1xuLVx0XHRlcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXHUwMDI2cHJvYmUpO1xuLVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiBlcnI7XG4tXHRcdGppdC1cdTAwM2VzZWVuIHw9IFNFRU5fTUVNO1xuLVx0XHRpZiAoaW5zbl9pc196ZXh0KFx1MDAyNmluc25bMV0pKVxuLVx0XHRcdGluc25fY291bnQgPSAyO1xuLVx0XHRicmVhaztcbiBcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9IOiAvKiBkc3QgPSAqKHMxNiAqKSh1bCkgKHNyYyArIG9mZikgKi9cbiBcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU1TWCB8IEJQRl9IOlxuIFx0XHRicGZfaml0X3Byb2JlX2xvYWRfcHJlKGppdCwgaW5zbiwgXHUwMDI2cHJvYmUpO1xuQEAgLTE3MzIsMjAgKzE3NzcsNiBAQCBzdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdGppdC1cdTAwM2VzZWVuIHw9IFNFRU5fTUVNO1xuIFx0XHRicmVhaztcbi1cdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfVzogLyogZHN0ID0gKih1MzIgKikodWwpIChzcmMgKyBvZmYpICovXG4tXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX1c6XG4tXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfVzpcbi1cdFx0YnBmX2ppdF9wcm9iZV9sb2FkX3ByZShqaXQsIGluc24sIFx1MDAyNnByb2JlKTtcbi1cdFx0LyogbGxnZiAlZHN0LG9mZiglc3JjKSAqL1xuLVx0XHRqaXQtXHUwMDNlc2VlbiB8PSBTRUVOX01FTTtcbi1cdFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwMTYsIGRzdF9yZWcsIHNyY19yZWcsXG4tXHRcdFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpO1xuLVx0XHRlcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXHUwMDI2cHJvYmUpO1xuLVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiBlcnI7XG4tXHRcdGlmIChpbnNuX2lzX3pleHQoXHUwMDI2aW5zblsxXSkpXG4tXHRcdFx0aW5zbl9jb3VudCA9IDI7XG4tXHRcdGJyZWFrO1xuIFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX1c6IC8qIGRzdCA9ICooczMyICopKHVsKSAoc3JjICsgb2ZmKSAqL1xuIFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTVNYIHwgQlBGX1c6XG4gXHRcdGJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoaml0LCBpbnNuLCBcdTAwMjZwcm9iZSk7XG5AQCAtMTc1NiwxOCArMTc4Nyw2IEBAIHN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4gXHRcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0YnJlYWs7XG4tXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX0RXOiAvKiBkc3QgPSAqKHU2NCAqKSh1bCkgKHNyYyArIG9mZikgKi9cbi1cdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0gfCBCUEZfRFc6XG4tXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfRFc6XG4tXHRcdGJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoaml0LCBpbnNuLCBcdTAwMjZwcm9iZSk7XG4tXHRcdC8qIGxnICVkc3Qsb2ZmKCVzcmMsJWFyZW5hKSAqL1xuLVx0XHRqaXQtXHUwMDNlc2VlbiB8PSBTRUVOX01FTTtcbi1cdFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwMDQsIGRzdF9yZWcsIHNyY19yZWcsXG4tXHRcdFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpO1xuLVx0XHRlcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXHUwMDI2cHJvYmUpO1xuLVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiBlcnI7XG4tXHRcdGJyZWFrO1xuIFx0LypcbiBcdCAqIEJQRl9KTVAgLyBDQUxMXG4gXHQgKi9cbkBAIC0zMDI4LDEzICszMDQ3LDYgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuLCBib29sIGluX2FyZW5hKVxuIFx0aWYgKCFpbl9hcmVuYSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRzd2l0Y2ggKGluc24tXHUwMDNlY29kZSkge1xuLVx0Y2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9COlxuLVx0Y2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9IOlxuLVx0Y2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9XOlxuLVx0Y2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9EVzpcbi1cdFx0aWYgKGJwZl9hdG9taWNfaXNfbG9hZF9zdG9yZShpbnNuKSlcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdGJyZWFrO1xuIFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX0I6XG4gXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfSDpcbiBcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9XOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9hdG9taWNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jXG5pbmRleCAyZTc3NTFhODUzOTk5Yi4uNzNiYzJiODM1ZjNmZTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jXG5AQCAtMjgsOCArMjgsMTAgQEAgYm9vbCBza2lwX2FsbF90ZXN0cyA9IHRydWU7XG4gXG4gI2lmIGRlZmluZWQoRU5BQkxFX0FUT01JQ1NfVEVTVFMpIFx1MDAyNlx1MDAyNlx0XHQgIFxcXG4gXHRkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcdTAwMjZcdTAwMjYgXFxcbi1cdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFxcXG4tXHQgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgXHUwMDI2XHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkpXG4rXHQoZGVmaW5lZChfX1RBUkdFVF9BUkNIX2FybTY0KSB8fCBcXFxuK1x0IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFxcXG4rXHQgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgXHUwMDI2XHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkgfHwgXFxcbitcdCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfczM5MCkpXG4gYm9vbCBza2lwX2xhY3Ffc3JlbF90ZXN0cyBfX2F0dHJpYnV0ZSgoX19zZWN0aW9uX18oXCIuZGF0YVwiKSkpID0gZmFsc2U7XG4gI2Vsc2VcbiBib29sIHNraXBfbGFjcV9zcmVsX3Rlc3RzID0gdHJ1ZTtcbkBAIC0zMTUsOCArMzE3LDEwIEBAIGludCBsb2FkX2FjcXVpcmUoY29uc3Qgdm9pZCAqY3R4KVxuIHtcbiAjaWYgZGVmaW5lZChFTkFCTEVfQVRPTUlDU19URVNUUykgXHUwMDI2XHUwMDI2XHRcdCAgXFxcbiBcdGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpIFx1MDAyNlx1MDAyNiBcXFxuLVx0KGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHwgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikgfHwgXFxcbi1cdCAoZGVmaW5lZChfX1RBUkdFVF9BUkNIX3Jpc2N2KSBcdTAwMjZcdTAwMjYgX19yaXNjdl94bGVuID09IDY0KSlcbitcdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IFxcXG4rXHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikgfHwgXFxcbitcdCAoZGVmaW5lZChfX1RBUkdFVF9BUkNIX3Jpc2N2KSBcdTAwMjZcdTAwMjYgX19yaXNjdl94bGVuID09IDY0KSB8fCBcXFxuK1x0IGRlZmluZWQoX19UQVJHRVRfQVJDSF9zMzkwKSlcbiBcbiAjZGVmaW5lIExPQURfQUNRVUlSRV9BUkVOQShTSVpFT1AsIFNJWkUsIFNSQywgRFNUKVx0XFxcbiBcdHsgYXNtIHZvbGF0aWxlIChcdFx0XHRcdFxcXG5AQCAtMzY3LDggKzM3MSwxMCBAQCBpbnQgc3RvcmVfcmVsZWFzZShjb25zdCB2b2lkICpjdHgpXG4ge1xuICNpZiBkZWZpbmVkKEVOQUJMRV9BVE9NSUNTX1RFU1RTKSBcdTAwMjZcdTAwMjZcdFx0ICBcXFxuIFx0ZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkgXHUwMDI2XHUwMDI2IFxcXG4tXHQoZGVmaW5lZChfX1RBUkdFVF9BUkNIX2FybTY0KSB8fCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfeDg2KSB8fCBcXFxuLVx0IChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpIFx1MDAyNlx1MDAyNiBfX3Jpc2N2X3hsZW4gPT0gNjQpKVxuK1x0KGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHwgXFxcbitcdCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfeDg2KSB8fCBcXFxuK1x0IChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpIFx1MDAyNlx1MDAyNiBfX3Jpc2N2X3hsZW4gPT0gNjQpIHx8IFxcXG4rXHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3MzOTApKVxuIFxuICNkZWZpbmUgU1RPUkVfUkVMRUFTRV9BUkVOQShTSVpFT1AsIERTVCwgVkFMKVx0XFxcbiBcdHsgYXNtIHZvbGF0aWxlIChcdFx0XHRcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbmluZGV4IGIwYzQ0MTM4NGYyMDY2Li41ZWFjZjFiNDMyNTIxMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaFxuQEAgLTI2NCw5ICsyNjQsMTIgQEBcbiAjZW5kaWZcbiBcbiAjaWYgX19jbGFuZ19tYWpvcl9fIFx1MDAzZT0gMTggXHUwMDI2XHUwMDI2IGRlZmluZWQoRU5BQkxFX0FUT01JQ1NfVEVTVFMpIFx1MDAyNlx1MDAyNlx0XHRcXFxuLVx0KGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHwgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikgfHxcdFxcXG4tXHQoZGVmaW5lZChfX1RBUkdFVF9BUkNIX3Jpc2N2KSBcdTAwMjZcdTAwMjYgX19yaXNjdl94bGVuID09IDY0KSB8fCBcXFxuLVx0ZGVmaW5lZChfX1RBUkdFVF9BUkNIX3Bvd2VycGMpIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF9sb29uZ2FyY2gpKVxuK1x0KGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHxcdFx0XHRcdFxcXG4rXHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikgfHxcdFx0XHRcdFx0XFxcbitcdCAoZGVmaW5lZChfX1RBUkdFVF9BUkNIX3Jpc2N2KSBcdTAwMjZcdTAwMjYgX19yaXNjdl94bGVuID09IDY0KSB8fFx0XFxcbitcdCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfczM5MCkgfHxcdFx0XHRcdFx0XFxcbitcdCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcG93ZXJwYykgfHxcdFx0XHRcdFxcXG4rXHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX2xvb25nYXJjaCkpXG4gI2RlZmluZSBDQU5fVVNFX0xPQURfQUNRX1NUT1JFX1JFTFxuICNlbmRpZlxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6MDQ6MDYuMjk5NDc3MDIzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA1MDIzNzMxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBzMzkwIEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBpdCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgYGFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNgLCBhbmQgc29tZSBzZWxmdGVzdHMsIGFuZCBhZGRzIHN1cHBvcnQgZm9yIGBCUEZfUFJPQkVfQVRPTUlDYCBhbmQgdGhlIGFjcXVpcmUvcmVsZWFzZSBpbnN0cnVjdGlvbnMgaW4gdGhlIHMzOTAgQlBGIEpJVCBjb21waWxlci4gSXQncyBhbHNvIHJlZmFjdG9yaW5nIHRoZSBsb2FkL3N0b3JlIGVtaXQgZnVuY3Rpb25zIHRvIGRlYWwgd2l0aCBtZW1vcnkgcHJvYmluZyBhbmQgYXRvbWljcy4gSG1tLCBzaG91bGQgdGhpcyBiZSBmdXp6ZWQ/IEFic29sdXRlbHksIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBkZWVwIHdpdGhpbiB0aGUgczM5MCBCUEYgSklULCBzbyBpdCdzIGEgZ29vZCB0YXJnZXQuXG5cbldhaXQsIGRvZXNuJ3Qgc3l6a2FsbGVyIGNvdmVyIG11bHRpcGxlIGFyY2hpdGVjdHVyZXM/IEknbSBwcmV0dHkgc3VyZSBpdCBkb2VzLCBpbmNsdWRpbmcgczM5MHguLi55ZXMsIEkga25vdyBpdCBkb2VzLiBPa2F5LCB3ZSBzaG91bGQgY2hlY2sgaWYgd2UgY2FuIGlkZW50aWZ5IHNwZWNpZmljIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgZnV6emluZy5cblxuTGV0J3Mgc2VlLi4uIHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyB0aGF0IGFyZSBhbHRlcmVkIGFyZTpcblxuLSAgIGBicGZfaml0X3Byb2JlX2xvYWRfcHJlYFxuLSAgIGBicGZfaml0X3Byb2JlX3N0b3JlX3ByZWBcbi0gICBgZW1pdF9sZHhgIChuZXcpXG4tICAgYGVtaXRfc3R4YCAobmV3KVxuLSAgIGBicGZfaml0X2luc25gXG4tICAgYGJwZl9qaXRfc3VwcG9ydHNfaW5zbmBcblxuSSBzaG91bGQgY2hlY2sgdGhlIHNvdXJjZSBmaWxlIHRvIHZlcmlmeS4gT2theSwgZ290IGl0LiBOb3csIGBicGZfaml0X2luc25gIGlzIHByb2JhYmx5IGEgZ29vZCBmb2N1cyBzeW1ib2wsIGJ1dCB0aGF0J3MgZ29pbmcgdG8gYmUgYSBob3QgcGF0aCBpbiB0aGUgSklUIGNvbXBpbGVyLCByaWdodD8gSXQgbWlnaHQgZ2VuZXJhdGUgdG9vIG11Y2ggbm9pc2UuXG5cblNvIHBlcmhhcHMgYGJwZl9qaXRfcHJvYmVfbG9hZF9wcmVgLCBgYnBmX2ppdF9wcm9iZV9zdG9yZV9wcmVgLCBgZW1pdF9sZHhgLCBgZW1pdF9zdHhgLCBhbmQgYGJwZl9qaXRfc3VwcG9ydHNfaW5zbmAgd291bGQgYmUgYmV0dGVyIHN0YXJ0aW5nIHBvaW50cz8gTGV0IG1lIGNoZWNrIHRob3NlIGRlZmluaXRpb25zIHVzaW5nIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgY29tZXMgYmFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI0NCwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjA0OjEzLjM0OTcxODM3M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzg2NjQ2NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWN8dm9pZHxpbnQpLipicGZfaml0Xy4qXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz01NjI9YXNtKFxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy01NzQtXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzo1NzU6c3RhdGljIHZvaWQgYnBmX2ppdF9wbHQoc3RydWN0IGJwZl9wbHQgKnBsdCwgdm9pZCAqcmV0LCB2b2lkICp0YXJnZXQpXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy01NzYte1xcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy01OTUtICovXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzo1OTY6c3RhdGljIHZvaWQgYnBmX2ppdF9wcm9sb2d1ZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtNTk3LXtcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtNjc5LSAqL1xcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6NjgwOnN0YXRpYyB2b2lkIGJwZl9qaXRfZXBpbG9ndWUoc3RydWN0IGJwZl9qaXQgKmppdClcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTY4MS17XFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTcwOD1zdHJ1Y3QgYnBmX2ppdF9wcm9iZSB7XFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTcxNC1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjcxNTpzdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX2luaXQoc3RydWN0IGJwZl9qaXRfcHJvYmUgKnByb2JlKVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtNzE2LXtcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtNzI4LSAqL1xcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6NzI5OnN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfZW1pdF9ub3Aoc3RydWN0IGJwZl9qaXQgKmppdCxcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTczMC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTc0MC1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjc0MTpzdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX2xvYWRfcHJlKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTc0Mi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTc1OS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjc2MDpzdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX3N0b3JlX3ByZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy03NjEtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfaml0X3Byb2JlICpwcm9iZSlcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtNzcyLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6NzczOnN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfYXRvbWljX3ByZShzdHJ1Y3QgYnBmX2ppdCAqaml0LFxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtNzc0LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy03ODctXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzo3ODg6c3RhdGljIGludCBicGZfaml0X3Byb2JlX3Bvc3Qoc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTc4OS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTkwNT1zdGF0aWMgaW50IHNpZ25femVyb19leHRlbmQoc3RydWN0IGJwZl9qaXQgKmppdCwgaW50IHIsIHU4IHNpemUsIHU4IGZsYWdzKVxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy05NDQtICovXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzo5NDU6c3RhdGljIG5vaW5saW5lIGludCBicGZfaml0X2luc24oc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTk0Ni1cXHRcXHRcXHRcXHQgaW50IGksIGJvb2wgZXh0cmFfcGFzcylcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9MjIzND1zdGF0aWMgaW50IGJwZl9zZXRfYWRkcihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBpbnQgaSlcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjI1MS0gKi9cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjIyNTI6c3RhdGljIGludCBicGZfaml0X3Byb2coc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTIyNTMtXFx0XFx0XFx0Ym9vbCBleHRyYV9wYXNzKVxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz0yMzExPXN0cnVjdCBzMzkwX2ppdF9kYXRhIHtcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjMxNi1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjIzMTc6c3RhdGljIHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqYnBmX2ppdF9hbGxvYyhzdHJ1Y3QgYnBmX2ppdCAqaml0LFxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjMxOC1cXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9wcm9nICpmcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6MDQ6MTMuNTI4MzkwNjg5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQxNTUxNjY1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBOZXcgQXNzZW1ibHkgRnVuY3Rpb25zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCB0aGUgY29tbWl0IGluY2x1ZGVzIGBlbWl0X2xkeGAgYW5kIGBlbWl0X3N0eGAuIFRoZSBmYWN0IHRoYXQgdGhleSdyZSBgc3RhdGljYCBpcyBhIGRldGFpbCB3b3J0aCBub3Rpbmc7IGl0IGltcGxpZXMgdGhleSdyZSBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiB0aGlzIG1vZHVsZS4gR2l2ZW4gdGhlIG5hbWVzLCBJJ20gYXNzdW1pbmcgdGhlc2UgYXJlIGxvdy1sZXZlbCBpbnN0cnVjdGlvbnMgcmVsYXRlZCB0byBsb2FkaW5nIGFuZCBzdG9yaW5nIHRoZSBYIHJlZ2lzdGVyLCBsaWtlbHkgdGFyZ2V0ZWQgZm9yIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIG9yIGFzc2VtYmxlci4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgKnByZXNlbnQqIGluIHRoZSBmaWxlLiBObyBwb2ludCBpbiBzcGVjdWxhdGluZyBmdXJ0aGVyIHVudGlsIEkgdmVyaWZ5IHRoYXQuIEl0J3Mgc3RhbmRhcmQgcHJhY3RpY2UgdG8gdmVyaWZ5IHRoZWlyIGV4aXN0ZW5jZSBmaXJzdCBiZWZvcmUgZGVsdmluZyBpbnRvIHRoZSByZXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU5MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjA0OjE5Ljk0MzkxMTE3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MzIwMDMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbWl0Xy4qeFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9Nzg4PXN0YXRpYyBpbnQgYnBmX2ppdF9wcm9iZV9wb3N0KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTgzNS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjgzNjpzdGF0aWMgaW50IGVtaXRfbGR4KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTgzNy17XFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTg2OC1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjg2OTpzdGF0aWMgaW50IGVtaXRfc3R4KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTg3MC17XFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTk0NT1zdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0xNTU0LVxcdGNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9EVzpcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjE1NTU6XFx0XFx0ZXJyID0gZW1pdF9zdHgoaml0LCBmcCwgaW5zbik7XFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0xNTU2LVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0xNzE5LVxcdFxcdFxcdC8qIHMzOTAgaGFzIHN0cm9uZyBvcmRlcmluZywganVzdCB1c2UgbG9hZCAqL1xcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MTcyMDpcXHRcXHRcXHRlcnIgPSBlbWl0X2xkeChqaXQsIGZwLCBpbnNuKTtcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE3MjEtXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE3MjUtXFx0XFx0XFx0LyogczM5MCBoYXMgc3Ryb25nIG9yZGVyaW5nLCBqdXN0IHVzZSBzdG9yZSAqL1xcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MTcyNjpcXHRcXHRcXHRlcnIgPSBlbWl0X3N0eChqaXQsIGZwLCBpbnNuKTtcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE3MjctXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE3NTItXFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0RXOlxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MTc1MzpcXHRcXHRlcnIgPSBlbWl0X2xkeChqaXQsIGZwLCBpbnNuKTtcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE3NTQtXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjA0OjIwLjE4NzExOTc0MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTE0OTY2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgY3VycmVudCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBKSVQgQ29tcGlsYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUga2V5IHN5bWJvbHMgcmVsYXRlZCB0byB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MsIHNwZWNpZmljYWxseSBhcm91bmQgbG9hZCBhbmQgc3RvcmUgb3BlcmF0aW9ucy4gSXQgc2VlbXMgbGlrZSBgZW1pdF9sZHhgIGFuZCBgZW1pdF9zdHhgIGFyZSBnb29kIGNhbmRpZGF0ZXMgdG8gZXhhbWluZSBtb3JlIGNsb3NlbHk7IHRoZXkgbGlrZWx5IHJlcHJlc2VudCB0aGUgY29yZSBsb2dpYyBmb3IgZ2VuZXJhdGluZyBjb2RlIHJlbGF0ZWQgdG8gdGhlc2UgaW5zdHJ1Y3Rpb25zLiBUaGF0IGZlZWxzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3MuXG5cbkkgYWxzbyBzZWUgdGhhdCBgYnBmX2ppdF9wcm9iZV9sb2FkX3ByZWAgYW5kIGBicGZfaml0X3Byb2JlX3N0b3JlX3ByZWAgaGF2ZSBiZWVuIG1vZGlmaWVkLiBUaGlzIHN1Z2dlc3RzIHRoZXJlIGlzIGEgbmV3IGZlYXR1cmUgb3Igb3B0aW1pemF0aW9uIGZvciB0aGUgcHJvYmVzLiBMZXQgbWUgZGlnIGRlZXBlciBpbnRvIHRob3NlIGJlY2F1c2UgdGhleSBhcmUgb2Z0ZW4gaW52b2x2ZWQgaW4gaW5zdHJ1bWVudGF0aW9uIG9mIHByb2JlcyB3aGljaCBjYW4gYmUgdmVyeSBpbnNpZ2h0ZnVsIGZvciBwZXJmb3JtYW5jZSB0dW5pbmcuXG5cbk5vdywgbGV0J3MgcGl2b3QgdG8gaW52ZXN0aWdhdGUgdGhlIGJyb2FkZXIgY2FwYWJpbGl0aWVzIG9mIHRoaXMgSklUIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0ICpjYW4qIGhhbmRsZS4gVG8gZG8gdGhpcywgbGV0J3MgcXVpY2tseSBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGJwZl9qaXRfc3VwcG9ydHNfaW5zbmAuIFVuZGVyc3RhbmRpbmcgdGhpcyBjaGVjayB3aWxsIGxldCBtZSBkZXRlcm1pbmUgd2hhdCBpbnN0cnVjdGlvbnMgdGhlIEpJVCBlbmdpbmUgbmF0aXZlbHkgc3VwcG9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjA0LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6MDQ6MjMuODc4NjIxNDg2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODM1OTk2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X3N1cHBvcnRzX2luc25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTMwNDA9Ym9vbCBicGZfaml0X3N1cHBvcnRzX2ZzZXNzaW9uKHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTMwNDQtXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzozMDQ1OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTMwNDYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODowNDoyNC4wOTY5ODgxMTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDg4OTI3ODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEJQRiBKSVQgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBCUEYgSklUIGNvbXBvbmVudCBmb3IgZnV6emluZy4gSSB0aGluayBgYnBmX2ppdF9zdXBwb3J0c19pbnNuYCBpcyBhIGtleSBzeW1ib2wgdG8gdGFyZ2V0LCBpdCBwcm92aWRlcyBhIGNydWNpYWwgaW5pdGlhbCBjaGVjay4gV2FpdCBhIHNlY29uZCwgdGhlIGBlbWl0X2xkeGAgYW5kIGBlbWl0X3N0eGAgZnVuY3Rpb25zLCB0aG9zZSBhcmUgc3RhdGljLCByaWdodD8gSWYgdGhleSdyZSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UsIFN5emthbGxlciBjYW4gZGVmaW5pdGVseSBmdXp6IHRob3NlLiBUaGVuIHRoZXJl4oCZcyB0aGUgYmVoZW1vdGgsIGBicGZfaml0X2luc25gLCB0aGUgY29yZSBKSVQgbG9vcCBpdHNlbGYuIE1heWJlIHRoYXTigJlzIHRvbyBtdWNoIGF0IHRoaXMgc3RhZ2UuXG5cbkxldCdzIHJlZmluZSB0aGUgYXBwcm9hY2guIEZvY3VzIG9uIGBlbWl0X2xkeGAsIGBlbWl0X3N0eGAsIGFzIHdlbGwgYXMgYGJwZl9qaXRfcHJvYmVfbG9hZF9wcmVgLCBhbmQgYGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlYCAsIGFsb25nc2lkZSBgYnBmX2ppdF9zdXBwb3J0c19pbnNuYC4gT2gsIGhvbGQgb27igKYgYGJwZl9qaXRfcHJvYmVfbG9hZF9wcmVgIGFuZCBgYnBmX2ppdF9wcm9iZV9zdG9yZV9wcmVgIGFyZSBzdGF0aWMgdG9vLiBJJ2xsIHRha2UgYSBsb29rIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIG9yIGJ1aWxkIG9wdGlvbnMgcmVxdWlyZWQgdG8gZW5hYmxlIHRoZW0uXG5cblJpZ2h0LCBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgdGhlIGNvZGUgaXMgbG9jYXRlZC4gSXQgbG9va3MgbGlrZSBpdCdzIGluIGBhcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jYC4gT2theSwgdGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgc2hvdWxkIHZlcmlmeSB0aGF0IHRoaXMgY29kZSBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfQlBGX0pJVGAgaXMgZW5hYmxlZC4gVGltZSB0byBjaGVjayB0aGUgTWFrZWZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTA2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjA0OjI5LjE4NTkyMDY4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzcxNTA2MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ppdF9jb21wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9uZXQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL25ldC9NYWtlZmlsZS00LSNcXG5hcmNoL3MzOTAvbmV0L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGJwZl9qaXRfY29tcC5vIGJwZl90aW1lZF9tYXlfZ290by5vXFxuYXJjaC9zMzkwL25ldC9NYWtlZmlsZS02LW9iai0kKENPTkZJR19IQVZFX1BORVRJRCkgKz0gcG5ldC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjA0OjI5LjM2MzA3OTk5NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDgyNzY1NDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEpJVCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBpdGVtIGhlcmUgaXMgYEJQRl9KSVRgLiBUaGF0J3MgdGhlIGNvcmUgZW5hYmxlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbC4gQXJlIHRoZXJlIGFueSAqb3RoZXIqIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBUaGlzIHBhdGNoIGlzIHNwZWNpZmljYWxseSBhYm91dCBzdXBwb3J0aW5nIGBCUEZfUFJPQkVfQVRPTUlDYCBhbmQgYEJQRl9MT0FEX0FDUWAvYEJQRl9TVE9SRV9SRUxgIHdpdGhpbiB0aGUgczM5MCBCUEYgSklUIGNvbXBpbGVyLiBUaGVzZSBhcmUgZmFpcmx5IHNpZ25pZmljYW50IEJQRiBmZWF0dXJlcywgc28gaXQgd2FycmFudHMgYSB0aG9yb3VnaCByZXZpZXcgb2YgdGhlIGNvbmZpZ3VyYXRpb24uXG5cbkkgc2VlIHRoZSBzZWxmdGVzdHMgYXJlIHVzaW5nIGBFTkFCTEVfQVRPTUlDU19URVNUU2AgYW5kIGBfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBIb3dldmVyLCBvbiB0aGUga2VybmVsIHNpZGUsIGl0IHNlZW1zIGxpa2UganVzdCBgQlBGX0pJVGAgYWxvbmUgaXMgc3VmZmljaWVudCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IHRvIGJlIHByb3Blcmx5IGVuYWJsZWQuIEkgc3RpbGwgd2FudCB0byBiZSBjZXJ0YWluLCB0aG91Z2guIFRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2gsIEknbSBnb2luZyB0byBkb3VibGUtY2hlY2sgYW5kIGNyb3NzLXJlZmVyZW5jZSB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgYXNzb2NpYXRlZCBjb2RlIHRvIHZlcmlmeSB0aGF0IHRoZXJlIGFyZSBubyBoaWRkZW4gZGVwZW5kZW5jaWVzIG9yIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucyBJIGhhdmVuJ3QgYWNjb3VudGVkIGZvci4gSSBhbHdheXMgd2FudCB0byBtYWtlIHN1cmUgSSdtIG5vdCBvdmVybG9va2luZyBhbnl0aGluZyBjcml0aWNhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MDAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6MDQ6MzMuNDQ1ODQ4Nzc5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTc4MDY5NjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19CUEZfSklUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODowNDozMy43NDM2NjYxOTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1MTE0NDIyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRoYXQgYEJQRl9KSVRgLi4uIHRoYXQncyBhICpnZW5lcmljKiBjb25maWd1cmF0aW9uIG9wdGlvbiwgcmlnaHQ/IEl0J3Mgbm90IGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgYXQgbGVhc3Qgbm90IGRpcmVjdGx5LiBCdXQgSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaG9va3Mgb3IgZGVwZW5kZW5jaWVzLiBTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEtjb25maWcgZmlsZXMsIHN0YXJ0aW5nIHdpdGggYGFyY2gvczM5MC9LY29uZmlnYCBiZWNhdXNlIHRoYXQncyB0aGUgY3VycmVudCBhcmVhIG9mIGZvY3VzLCBhbmQgY2hlY2tpbmcgZm9yIEJQRi1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoZXJlLiBUaGF0IHNob3VsZCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIHNpdHVhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMzcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODowNDozNi45OTQ4MjEzNjdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjMxMDA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL0tjb25maWc9NzU9Y29uZmlnIFMzOTBcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTE1Ny1cXHRzZWxlY3QgQVJDSF9XQU5UU19OT19JTlNUUlxcbmFyY2gvczM5MC9LY29uZmlnOjE1ODpcXHRzZWxlY3QgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVFxcbmFyY2gvczM5MC9LY29uZmlnLTE1OS1cXHRzZWxlY3QgQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy0yMDUtXFx0c2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTXFxuYXJjaC9zMzkwL0tjb25maWc6MjA2OlxcdHNlbGVjdCBIQVZFX0VCUEZfSklUIGlmIEhBVkVfTUFSQ0hfWjE5Nl9GRUFUVVJFU1xcbmFyY2gvczM5MC9LY29uZmlnLTIwNy1cXHRzZWxlY3QgSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODowNDozNy4yNjExNDYzMTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQxODgyMzE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIEpJVCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGBCUEZfSklUYCBvcHRpb24gc2VlbXMgdG8gYmUgYXV0b21hdGljYWxseSBlbmFibGVkIGlmIGBIQVZFX0VCUEZfSklUYCBpcyBjaG9zZW4sIHdoaWNoIGluIHR1cm4gcmVsaWVzIG9uIGBIQVZFX01BUkNIX1oxOTZfRkVBVFVSRVNgLiBUaGF0J3MgZ29vZCB0byBrbm93LiBUaGUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gZXhwbGljaXRseSBzZXQgYEJQRl9KSVRgIGFzIGEgY29uZmlnIG9wdGlvbjsgaXQgc2hvdWxkIGJlIGhhbmRsZWQgYmFzZWQgb24gdGhvc2UgZGVwZW5kZW5jaWVzLiBJdCdzIGEgZmFpcmx5IGdlbmVyaWMgY29uZmlnIG9wdGlvbi5cblxuTm93LCBob2xkIG9uLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBvbmx5IGxpc3QgY29uZmlncyB0aGF0ICpzcGVjaWZpY2FsbHkqIHJlbGF0ZSB0byB0aGUgbW9kaWZpZWQgY29kZSwgYW5kIHRvIGxlYXZlIG91dCB0aGUgbW9yZSBnZW5lcmFsIG9wdGlvbnMgc2luY2UgdGhvc2UgYXJlIGxpa2VseSBhbHJlYWR5IGVuYWJsZWQuIEdpdmVuIHRoYXQsIGxpc3RpbmcgYEJQRl9KSVRgIGl0c2VsZiBtaWdodCBiZSByZWR1bmRhbnQuXG5cbkhtbSwgYnV0IHdoYXQgYWJvdXQgbW9yZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IGRlYWwgd2l0aCBCUEYgYXJlbmEgYWxsb2NhdGlvbnMgb3IgYXRvbWljIG9wZXJhdGlvbnM/IEFyZSB0aGVyZSBhbnkgdGhhdCBzcGVjaWZpY2FsbHkgcGVydGFpbiB0byBvdXIgY2hhbmdlcz8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUgb3Igc29tZXRoaW5nIHNpbWlsYXIgdG8gc2VlIGlmIGFueSBvZiB0aG9zZSBtb3JlIHNwZWNpYWxpemVkIGNvbmZpZ3MgbmVlZCB0byBiZSBjYWxsZWQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYzMywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODowNDo0MS42Nzk5NzQzNTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5Njk3NjEyNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQVJFTkFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODowNDo0MS45NzY5NTkyOTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxNzY2ODE5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGluIHRoZSBmaXJzdCBwZXJzb24sIHJlZmxlY3RpbmcgdGhlIGRlc2NyaWJlZCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqQlBGIENvbmZpZ3VyYXRpb24gSHVudCoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBCZXJrZWxleSBQYWNrZXQgRmlsdGVyIChCUEYpIHdpdGhpbiB0aGlzIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEdpdmVuIHRoZSBjb21tb24gcHJhY3RpY2UgYW5kIG15IGV4cGVyaWVuY2UsIHRoZSBmaXJzdCBwbGFjZSBJJ20gZ29pbmcgdG8gY2hlY2sgaXMgbGlrZWx5IHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gZmlsZSwgYGluaXQvS2NvbmZpZ2AuIEl0J3MgdGhlIHVzdWFsIHN0YXJ0aW5nIHBvaW50IGZvciB0b3AtbGV2ZWwgZmVhdHVyZSBzZWxlY3Rpb25zLiBJZiB0aGF0IGRvZXNuJ3QgaW1tZWRpYXRlbHkgeWllbGQgdGhlIHNwZWNpZmljIEJQRiBzZXR0aW5ncywgbXkgbmV4dCBwb3J0IG9mIGNhbGwgaXMgcHJhY3RpY2FsbHkgZ3VhcmFudGVlZCB0byBiZSBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhhdCBkaXJlY3RvcnkgaXMgdGhlIGxvZ2ljYWwgaG9tZSBmb3IgQlBGLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLCBnaXZlbiBpdHMgY29yZSBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUga2VybmVsLiBJJ2xsIGZvY3VzIG15IHNlYXJjaCB0aGVyZSBpZiBgaW5pdC9LY29uZmlnYCBkb2Vzbid0IHByb3ZpZGUgd2hhdCBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDY5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6MDQ6NDUuMjk0NjMxODQ0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE0NDUzNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWctMi1cXG5rZXJuZWwvYnBmL0tjb25maWc6MzojIEJQRiBpbnRlcnByZXRlciB0aGF0LCBmb3IgZXhhbXBsZSwgY2xhc3NpYyBzb2NrZXQgZmlsdGVycyBkZXBlbmQgb24uXFxua2VybmVsL2JwZi9LY29uZmlnOjQ6Y29uZmlnIEJQRlxcbmtlcm5lbC9icGYvS2NvbmZpZy01LVxcdGJvb2xcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy03LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo4OiMgVXNlZCBieSBhcmNocyB0byB0ZWxsIHRoYXQgdGhleSBzdXBwb3J0IEJQRiBKSVQgY29tcGlsZXIgcGx1cyB3aGljaFxcbmtlcm5lbC9icGYvS2NvbmZpZy05LSMgZmxhdm91ci4gT25seSBvbmUgb2YgdGhlIHR3byBjYW4gYmUgc2VsZWN0ZWQgZm9yIGEgc3BlY2lmaWMgYXJjaCBzaW5jZVxcbmtlcm5lbC9icGYvS2NvbmZpZzoxMDojIGVCUEYgSklUIHN1cGVyc2VkZXMgdGhlIGNCUEYgSklULlxcbmtlcm5lbC9icGYvS2NvbmZpZy0xMS1cXG5rZXJuZWwvYnBmL0tjb25maWc6MTI6IyBDbGFzc2ljIEJQRiBKSVQgKGNCUEYpXFxua2VybmVsL2JwZi9LY29uZmlnOjEzOmNvbmZpZyBIQVZFX0NCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTE0LVxcdGJvb2xcXG5rZXJuZWwvYnBmL0tjb25maWctMTUtXFxua2VybmVsL2JwZi9LY29uZmlnOjE2OiMgRXh0ZW5kZWQgQlBGIEpJVCAoZUJQRilcXG5rZXJuZWwvYnBmL0tjb25maWc6MTc6Y29uZmlnIEhBVkVfRUJQRl9KSVRcXG5rZXJuZWwvYnBmL0tjb25maWctMTgtXFx0Ym9vbFxcbmtlcm5lbC9icGYvS2NvbmZpZy0xOS1cXG5rZXJuZWwvYnBmL0tjb25maWc6MjA6IyBVc2VkIGJ5IGFyY2hzIHRvIHRlbGwgdGhhdCB0aGV5IHdhbnQgdGhlIEJQRiBKSVQgY29tcGlsZXIgZW5hYmxlZCBieVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyMTojIGRlZmF1bHQgZm9yIGtlcm5lbHMgdGhhdCB3ZXJlIGNvbXBpbGVkIHdpdGggQlBGIEpJVCBzdXBwb3J0Llxcbmtlcm5lbC9icGYvS2NvbmZpZzoyMjpjb25maWcgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yMy1cXHRib29sXFxua2VybmVsL2JwZi9LY29uZmlnLTI0LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNTptZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWc6Mjk6XFx0c2VsZWN0IEJQRlxcbmtlcm5lbC9icGYvS2NvbmZpZy0zMC1cXHRzZWxlY3QgSVJRX1dPUktcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy0zOC1cXHRoZWxwXFxua2VybmVsL2JwZi9LY29uZmlnOjM5OlxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbmtlcm5lbC9icGYvS2NvbmZpZy00MC1cXHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxcbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cXG5rZXJuZWwvYnBmL0tjb25maWc6NDI6Y29uZmlnIEJQRl9KSVRcXG5rZXJuZWwvYnBmL0tjb25maWc6NDM6XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxua2VybmVsL2JwZi9LY29uZmlnOjQ0OlxcdGRlcGVuZHMgb24gQlBGXFxua2VybmVsL2JwZi9LY29uZmlnOjQ1OlxcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTQ2LVxcdHNlbGVjdCBFWEVDTUVNXFxua2VybmVsL2JwZi9LY29uZmlnLTQ3LVxcdGhlbHBcXG5rZXJuZWwvYnBmL0tjb25maWc6NDg6XFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXFxua2VybmVsL2JwZi9LY29uZmlnLTQ5LVxcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXFxua2VybmVsL2JwZi9LY29uZmlnOjUwOlxcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxcbmtlcm5lbC9icGYvS2NvbmZpZy01MS1cXHQgIHByb2dyYW1zLlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL0tjb25maWc6NTk6XFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxua2VybmVsL2JwZi9LY29uZmlnOjYwOlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXFx1MDAyNlxcdTAwMjYgSEFWRV9FQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTYxLVxcdGhlbHBcXG5rZXJuZWwvYnBmL0tjb25maWc6NjI6XFx0ICBFbmFibGVzIEJQRiBKSVQgYW5kIHJlbW92ZXMgQlBGIGludGVycHJldGVyIHRvIGF2b2lkIHNwZWN1bGF0aXZlXFxua2VybmVsL2JwZi9LY29uZmlnOjYzOlxcdCAgZXhlY3V0aW9uIG9mIEJQRiBpbnN0cnVjdGlvbnMgYnkgdGhlIGludGVycHJldGVyLlxcbmtlcm5lbC9icGYvS2NvbmZpZy02NC1cXG5rZXJuZWwvYnBmL0tjb25maWc6NjU6XFx0ICBXaGVuIENPTkZJR19CUEZfSklUX0FMV0FZU19PTiBpcyBlbmFibGVkLCAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcXG5rZXJuZWwvYnBmL0tjb25maWctNjYtXFx0ICBpcyBwZXJtYW5lbnRseSBzZXQgdG8gMSBhbmQgc2V0dGluZyBhbnkgb3RoZXIgdmFsdWUgdGhhbiB0aGF0IHdpbGxcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxcbmtlcm5lbC9icGYvS2NvbmZpZzo3MDpcXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXFxua2VybmVsL2JwZi9LY29uZmlnOjcxOlxcdGRlcGVuZHMgb24gSEFWRV9FQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTcyLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo3Mzpjb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxcbmtlcm5lbC9icGYvS2NvbmZpZzo3NDpcXHRib29sIFxcXCJEaXNhYmxlIHVucHJpdmlsZWdlZCBCUEYgYnkgZGVmYXVsdFxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctNzUtXFx0ZGVmYXVsdCB5XFxua2VybmVsL2JwZi9LY29uZmlnOjc2OlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctNzctXFx0aGVscFxcbmtlcm5lbC9icGYvS2NvbmZpZzo3ODpcXHQgIERpc2FibGVzIHVucHJpdmlsZWdlZCBCUEYgYnkgZGVmYXVsdCBieSBzZXR0aW5nIHRoZSBjb3JyZXNwb25kaW5nXFxua2VybmVsL2JwZi9LY29uZmlnLTc5LVxcdCAgL3Byb2Mvc3lzL2tlcm5lbC91bnByaXZpbGVnZWRfYnBmX2Rpc2FibGVkIGtub2IgdG8gMi4gQW4gYWRtaW4gY2FuXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctODMtXFxua2VybmVsL2JwZi9LY29uZmlnOjg0OlxcdCAgVW5wcml2aWxlZ2VkIEJQRiBjb3VsZCBiZSB1c2VkIHRvIGV4cGxvaXQgY2VydGFpbiBwb3RlbnRpYWxcXG5rZXJuZWwvYnBmL0tjb25maWctODUtXFx0ICBzcGVjdWxhdGl2ZSBleGVjdXRpb24gc2lkZS1jaGFubmVsIHZ1bG5lcmFiaWxpdGllcyBvbiB1bm1pdGlnYXRlZFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnPTkwPXNvdXJjZSBcXFwia2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTkxLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo5Mjpjb25maWcgQlBGX0xTTVxcbmtlcm5lbC9icGYvS2NvbmZpZzo5MzpcXHRib29sIFxcXCJFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnOjk0OlxcdGRlcGVuZHMgb24gQlBGX0VWRU5UU1xcbmtlcm5lbC9icGYvS2NvbmZpZzo5NTpcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTk2LVxcdGRlcGVuZHMgb24gU0VDVVJJVFlcXG5rZXJuZWwvYnBmL0tjb25maWc6OTc6XFx0ZGVwZW5kcyBvbiBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTk4LVxcdGhlbHBcXG5rZXJuZWwvYnBmL0tjb25maWc6OTk6XFx0ICBFbmFibGVzIGluc3RydW1lbnRhdGlvbiBvZiB0aGUgc2VjdXJpdHkgaG9va3Mgd2l0aCBCUEYgcHJvZ3JhbXMgZm9yXFxua2VybmVsL2JwZi9LY29uZmlnLTEwMC1cXHQgIGltcGxlbWVudGluZyBkeW5hbWljIE1BQyBhbmQgQXVkaXQgUG9saWNpZXMuXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctMTAzLVxcbmtlcm5lbC9icGYvS2NvbmZpZzoxMDQ6ZW5kbWVudSAjIFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODowNDo0NS41MDYwOTEyOTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY2MjMwOTgwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBCUEYgSklUIENvbmZpZ3VyYXRpb24gYW5kIEtleSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIEJQRiBKSVQgY29uZmlndXJhdGlvbi4gRnJvbSBhIGhpZ2ggbGV2ZWwsIGBCUEZfSklUYCBpcyB0aGUgY29yZSBjb25maWd1cmF0aW9uIHRvIGNvbnNpZGVyLCB3aGljaCBpcyBnZW5lcmljLiBObyBuZWVkIHRvIGxpc3Qgc3BlY2lmaWMgY29uZmlnIGRldGFpbHMgc2luY2UgYEJQRl9KSVRgIGlzIHRoZSBtYWluIGVuYWJsZXIsIGFuZCBpdCdzIGFscmVhZHkgZW5hYmxlZCBpbiBteSBzZXR1cC4gSSdtIGdvaW5nIHRvIGNvbnNpZGVyIGl0IGFzIGEgZ2l2ZW4uXG5cbk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG92ZXJsb29rIGFueSByZWxldmFudCBkZXRhaWxzLiBIbW0sIG5vIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gYEJQRl9QUk9CRV9BVE9NSUNgIGV4aXN0OyBpdCBsb29rcyBsaWtlIHRoYXQncyBqdXN0IHBhcnQgb2YgdGhlIEJQRiBpbnN0cnVjdGlvbiBzZXQgaXRzZWxmLiBHb29kIHRvIGtub3cuXG5cbkxldCdzIGRpdmUgaW50byB0aGUgY29yZSBzeW1ib2xzLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlc2UgZnVuY3Rpb25zOiBgZW1pdF9sZHhgLCBgZW1pdF9zdHhgLCBgYnBmX2ppdF9wcm9iZV9sb2FkX3ByZWAsIGBicGZfaml0X3Byb2JlX3N0b3JlX3ByZWAsIGFuZCBgYnBmX2ppdF9zdXBwb3J0c19pbnNuYC5cblxuSXQgc2VlbXMgbGlrZSBgZW1pdF9sZHhgIGFuZCBgZW1pdF9zdHhgIGFyZSB0aGUga2V5IGxvYWQvc3RvcmUgZnVuY3Rpb25zLiBMZXQgbWUgZG91YmxlLWNoZWNrLiBZZXMsIHRoZXkncmUgdGhlIHByaW1hcnkgb25lcywgYXMgSSBzdXNwZWN0ZWQuIEludGVyZXN0aW5nbHksIEkgc2VlIHRoYXQgdGhleSBhcmUgZGVjbGFyZWQgYXMgc3RhdGljIGZ1bmN0aW9ucy4gQXJlIHRoZXkgYWNjZXNzaWJsZT8gWWVzLCB0aGV5J3JlIGNhbGxlZCBmcm9tIGBicGZfaml0X2luc25gLiBBbmQgYXJlIHRoZXJlIG90aGVyIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byBjb25zaWRlcj9cblxuSSBzZWUgdGhhdCBgYnBmX2ppdF9wcm9iZV9sb2FkX3ByZWAgYW5kIGBicGZfaml0X3Byb2JlX3N0b3JlX3ByZWAgYXJlIGFsc28gc3RhdGljLCBhbmQgdGhleSdyZSBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgZW1pdF9sZHhgIGFuZCBgZW1pdF9zdHhgLiBJdCdzIGltcG9ydGFudCB0byBkb2N1bWVudCB0aGVzZSByZWxhdGlvbnNoaXBzLlxuXG5SaWdodCwgc28gSSB3aWxsIG5vdyBsaXN0IHRob3NlIGtleSBmdW5jdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgdG8gY29uY2x1ZGUgdGhlIGFzc2Vzc21lbnQgdXNpbmcgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5NTgsIk91dHB1dFRva2VucyI6MTU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjA0OjUyLjE2ODQwNDg1OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZW1pdF9sZHhcIixcbiAgICBcImVtaXRfc3R4XCIsXG4gICAgXCJicGZfaml0X3Byb2JlX2xvYWRfcHJlXCIsXG4gICAgXCJicGZfaml0X3Byb2JlX3N0b3JlX3ByZVwiLFxuICAgIFwiYnBmX2ppdF9zdXBwb3J0c19pbnNuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBzdXBwb3J0IGZvciBCUEZfUFJPQkVfQVRPTUlDLCBCUEZfTE9BRF9BQ1EsIGFuZCBCUEZfU1RPUkVfUkVMIGluc3RydWN0aW9ucyBpbiB0aGUgczM5MCBCUEYgSklUIGNvbXBpbGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIEpJVCBsb2dpYyBvbiBzMzkwIGFyY2hpdGVjdHVyZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZW1pdF9sZHhcIixcbiAgICBcImVtaXRfc3R4XCIsXG4gICAgXCJicGZfaml0X3Byb2JlX2xvYWRfcHJlXCIsXG4gICAgXCJicGZfaml0X3Byb2JlX3N0b3JlX3ByZVwiLFxuICAgIFwiYnBmX2ppdF9zdXBwb3J0c19pbnNuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBzdXBwb3J0IGZvciBCUEZfUFJPQkVfQVRPTUlDLCBCUEZfTE9BRF9BQ1EsIGFuZCBCUEZfU1RPUkVfUkVMIGluc3RydWN0aW9ucyBpbiB0aGUgczM5MCBCUEYgSklUIGNvbXBpbGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIEpJVCBsb2dpYyBvbiBzMzkwIGFyY2hpdGVjdHVyZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowj9gjh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-24 17:28:30 +0000 UTC FinishedAt: 2026-07-24 18:04:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "series_id": "7a4a0a50-b419-4eea-91e0-674c59645e82" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "emit_ldx", "emit_stx", "bpf_jit_probe_load_pre", "bpf_jit_probe_store_pre", "bpf_jit_supports_insn" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZW1pdF9sZHgmIzM0OywKICAgICYjMzQ7ZW1pdF9zdHgmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9wcm9iZV9sb2FkX3ByZSYjMzQ7LAogICAgJiMzNDticGZfaml0X3Byb2JlX3N0b3JlX3ByZSYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1cHBvcnRzX2luc24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBzdXBwb3J0IGZvciBCUEZfUFJPQkVfQVRPTUlDLCBCUEZfTE9BRF9BQ1EsIGFuZCBCUEZfU1RPUkVfUkVMIGluc3RydWN0aW9ucyBpbiB0aGUgczM5MCBCUEYgSklUIGNvbXBpbGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIEpJVCBsb2dpYyBvbiBzMzkwIGFyY2hpdGVjdHVyZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyODlkMTFkNGNmNjc2OGQwMWUxYTA5NDFlN2Y0MzU3ZDMwOGU5MjJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMjQgMTg6MDQ6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IDMxNzQ5YzAzNjJjYTIzLi5jOThhYjJlZWNlNTdmNSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC03NDMsMTAgJiM0Mzs3NDMsMTIgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9iZV9sb2FkX3ByZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4ge1xuIFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTSBcdTAwMjZcdTAwMjZcbiBcdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU1TWCBcdTAwMjZcdTAwMjZcbi1cdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU0zMilcbiYjNDM7XHQgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfTUVNMzIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX0FUT01JQylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyKSB7XG4mIzQzO1x0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyIHx8XG4mIzQzO1x0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX0FUT01JQykge1xuIFx0XHQvKiBsZ3JsICVyMSxrZXJuX2FyZW5hICovXG4gXHRcdEVNSVQ2X1BDUkVMX1JJTEIoMHhjNDA4MDAwMCwgUkVHX1cxLCBqaXQtXHUwMDNla2Vybl9hcmVuYSk7XG4gXHRcdHByb2JlLVx1MDAzZWFyZW5hX3JlZyA9IFJFR19XMTtcbkBAIC03NTgsNyAmIzQzOzc2MCw4IEBAIHN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIHN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpXG4ge1xuLVx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTTMyKVxuJiM0MztcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU0zMiBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfQVRPTUlDKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvKiBsZ3JsICVyMSxrZXJuX2FyZW5hICovXG5AQCAtODMwLDYgJiM0Mzs4MzMsNzIgQEAgc3RhdGljIGludCBicGZfaml0X3Byb2JlX3Bvc3Qoc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBlbWl0X2xkeChzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2ppdF9wcm9iZSBwcm9iZTtcbiYjNDM7XG4mIzQzO1x0YnBmX2ppdF9wcm9iZV9pbml0KFx1MDAyNnByb2JlKTtcbiYjNDM7XHRicGZfaml0X3Byb2JlX2xvYWRfcHJlKGppdCwgaW5zbiwgXHUwMDI2cHJvYmUpO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkpIHtcbiYjNDM7XHRjYXNlIEJQRl9COiAvKiBkc3QgPSAqKHU4ICopKHVsKSAoc3JjICYjNDM7IG9mZikgKi9cbiYjNDM7XHRcdC8qIGxsZ2MgJWRzdCxvZmYoJXNyYywlYXJlbmEpICovXG4mIzQzO1x0XHRFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDA5MCwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZXNyY19yZWcsXG4mIzQzO1x0XHRcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfSDogLyogZHN0ID0gKih1MTYgKikodWwpIChzcmMgJiM0Mzsgb2ZmKSAqL1xuJiM0MztcdFx0LyogbGxnaCAlZHN0LG9mZiglc3JjLCVhcmVuYSkgKi9cbiYjNDM7XHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDkxLCBpbnNuLVx1MDAzZWRzdF9yZWcsIGluc24tXHUwMDNlc3JjX3JlZyxcbiYjNDM7XHRcdFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBpbnNuLVx1MDAzZW9mZik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9XOiAvKiBkc3QgPSAqKHUzMiAqKSh1bCkgKHNyYyAmIzQzOyBvZmYpICovXG4mIzQzO1x0XHQvKiBsbGdmICVkc3Qsb2ZmKCVzcmMsJWFyZW5hKSAqL1xuJiM0MztcdFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwMTYsIGluc24tXHUwMDNlZHN0X3JlZywgaW5zbi1cdTAwM2VzcmNfcmVnLFxuJiM0MztcdFx0XHQgICAgICBwcm9iZS5hcmVuYV9yZWcsIGluc24tXHUwMDNlb2ZmKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQlBGX0RXOiAvKiBkc3QgPSAqKHU2NCAqKSh1bCkgKHNyYyAmIzQzOyBvZmYpICovXG4mIzQzO1x0XHQvKiBsZyAlZHN0LG9mZiglc3JjLCVhcmVuYSkgKi9cbiYjNDM7XHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDA0LCBpbnNuLVx1MDAzZWRzdF9yZWcsIGluc24tXHUwMDNlc3JjX3JlZyxcbiYjNDM7XHRcdFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBpbnNuLVx1MDAzZW9mZik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXHUwMDI2cHJvYmUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVtaXRfc3R4KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfaml0X3Byb2JlIHByb2JlO1xuJiM0MztcbiYjNDM7XHRicGZfaml0X3Byb2JlX2luaXQoXHUwMDI2cHJvYmUpO1xuJiM0MztcdGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKGppdCwgaW5zbiwgXHUwMDI2cHJvYmUpO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkpIHtcbiYjNDM7XHRjYXNlIEJQRl9COiAvKiAqKHU4ICopKGRzdCAmIzQzOyBvZmYpID0gc3JjX3JlZyAqL1xuJiM0MztcdFx0Lyogc3RjeSAlc3JjLG9mZiglZHN0LCVhcmVuYSkgKi9cbiYjNDM7XHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDcyLCBpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlZHN0X3JlZyxcbiYjNDM7XHRcdFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBpbnNuLVx1MDAzZW9mZik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9IOiAvKiAodTE2ICopKGRzdCAmIzQzOyBvZmYpID0gc3JjICovXG4mIzQzO1x0XHQvKiBzdGh5ICVzcmMsb2ZmKCVkc3QsJWFyZW5hKSAqL1xuJiM0MztcdFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwNzAsIGluc24tXHUwMDNlc3JjX3JlZywgaW5zbi1cdTAwM2Vkc3RfcmVnLFxuJiM0MztcdFx0XHQgICAgICBwcm9iZS5hcmVuYV9yZWcsIGluc24tXHUwMDNlb2ZmKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQlBGX1c6IC8qICoodTMyICopKGRzdCAmIzQzOyBvZmYpID0gc3JjICovXG4mIzQzO1x0XHQvKiBzdHkgJXNyYyxvZmYoJWRzdCwlYXJlbmEpICovXG4mIzQzO1x0XHRFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDA1MCwgaW5zbi1cdTAwM2VzcmNfcmVnLCBpbnNuLVx1MDAzZWRzdF9yZWcsXG4mIzQzO1x0XHRcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfRFc6IC8qICh1NjQgKikoZHN0ICYjNDM7IG9mZikgPSBzcmMgKi9cbiYjNDM7XHRcdC8qIHN0ZyAlc3JjLG9mZiglZHN0LCVhcmVuYSkgKi9cbiYjNDM7XHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDI0LCBpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlZHN0X3JlZyxcbiYjNDM7XHRcdFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBpbnNuLVx1MDAzZW9mZik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXHUwMDI2cHJvYmUpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogU2lnbi0gb3IgemVyby1leHRlbmQgdGhlIHJlZ2lzdGVyIGlmIG5lY2Vzc2FyeVxuICAqL1xuQEAgLTE0NzcsNDQgJiM0MzsxNTQ2LDEzIEBAIHN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4gXHQgKi9cbiBcdGNhc2UgQlBGX1NUWCB8IEJQRl9NRU0gfCBCUEZfQjogLyogKih1OCAqKShkc3QgJiM0Mzsgb2ZmKSA9IHNyY19yZWcgKi9cbiBcdGNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9COlxuLVx0XHRicGZfaml0X3Byb2JlX3N0b3JlX3ByZShqaXQsIGluc24sIFx1MDAyNnByb2JlKTtcbi1cdFx0Lyogc3RjeSAlc3JjLG9mZiglZHN0LCVhcmVuYSkgKi9cbi1cdFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwNzIsIHNyY19yZWcsIGRzdF9yZWcsXG4tXHRcdFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpO1xuLVx0XHRlcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXHUwMDI2cHJvYmUpO1xuLVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiBlcnI7XG4tXHRcdGppdC1cdTAwM2VzZWVuIHw9IFNFRU5fTUVNO1xuLVx0XHRicmVhaztcbiBcdGNhc2UgQlBGX1NUWCB8IEJQRl9NRU0gfCBCUEZfSDogLyogKHUxNiAqKShkc3QgJiM0Mzsgb2ZmKSA9IHNyYyAqL1xuIFx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0g6XG4tXHRcdGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKGppdCwgaW5zbiwgXHUwMDI2cHJvYmUpO1xuLVx0XHQvKiBzdGh5ICVzcmMsb2ZmKCVkc3QsJWFyZW5hKSAqL1xuLVx0XHRFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDA3MCwgc3JjX3JlZywgZHN0X3JlZyxcbi1cdFx0XHQgICAgICBwcm9iZS5hcmVuYV9yZWcsIG9mZik7XG4tXHRcdGVyciA9IGJwZl9qaXRfcHJvYmVfcG9zdChqaXQsIGZwLCBcdTAwMjZwcm9iZSk7XG4tXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIGVycjtcbi1cdFx0aml0LVx1MDAzZXNlZW4gfD0gU0VFTl9NRU07XG4tXHRcdGJyZWFrO1xuIFx0Y2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9XOiAvKiAqKHUzMiAqKShkc3QgJiM0Mzsgb2ZmKSA9IHNyYyAqL1xuIFx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX1c6XG4tXHRcdGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKGppdCwgaW5zbiwgXHUwMDI2cHJvYmUpO1xuLVx0XHQvKiBzdHkgJXNyYyxvZmYoJWRzdCwlYXJlbmEpICovXG4tXHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDUwLCBzcmNfcmVnLCBkc3RfcmVnLFxuLVx0XHRcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgb2ZmKTtcbi1cdFx0ZXJyID0gYnBmX2ppdF9wcm9iZV9wb3N0KGppdCwgZnAsIFx1MDAyNnByb2JlKTtcbi1cdFx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gZXJyO1xuLVx0XHRqaXQtXHUwMDNlc2VlbiB8PSBTRUVOX01FTTtcbi1cdFx0YnJlYWs7XG4gXHRjYXNlIEJQRl9TVFggfCBCUEZfTUVNIHwgQlBGX0RXOiAvKiAodTY0ICopKGRzdCAmIzQzOyBvZmYpID0gc3JjICovXG4gXHRjYXNlIEJQRl9TVFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfRFc6XG4tXHRcdGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKGppdCwgaW5zbiwgXHUwMDI2cHJvYmUpO1xuLVx0XHQvKiBzdGcgJXNyYyxvZmYoJWRzdCwlYXJlbmEpICovXG4tXHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDI0LCBzcmNfcmVnLCBkc3RfcmVnLFxuLVx0XHRcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgb2ZmKTtcbi1cdFx0ZXJyID0gYnBmX2ppdF9wcm9iZV9wb3N0KGppdCwgZnAsIFx1MDAyNnByb2JlKTtcbiYjNDM7XHRcdGVyciA9IGVtaXRfc3R4KGppdCwgZnAsIGluc24pO1xuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdGppdC1cdTAwM2VzZWVuIHw9IFNFRU5fTUVNO1xuQEAgLTE1NzQsMTkgJiM0MzsxNjEyLDIzIEBAIHN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4gXHQvKlxuIFx0ICogQlBGX0FUT01JQ1xuIFx0ICovXG4mIzQzO1x0Y2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9COlxuJiM0MztcdGNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfSDpcbiBcdGNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfRFc6XG4gXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX1c6XG4mIzQzO1x0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX0FUT01JQyB8IEJQRl9COlxuJiM0MztcdGNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9BVE9NSUMgfCBCUEZfSDpcbiBcdGNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9BVE9NSUMgfCBCUEZfRFc6XG4gXHRjYXNlIEJQRl9TVFggfCBCUEZfUFJPQkVfQVRPTUlDIHwgQlBGX1c6XG4gXHR7XG4gXHRcdGJvb2wgaXMzMiA9IEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1c7XG4gXG4gXHRcdC8qXG4tXHRcdCAqIFVubGlrZSBsb2FkcyBhbmQgc3RvcmVzLCBhdG9taWNzIGhhdmUgb25seSBhIGJhc2UgcmVnaXN0ZXIsXG4tXHRcdCAqIGJ1dCBubyBpbmRleCByZWdpc3Rlci4gRm9yIHRoZSBub24tYXJlbmEgY2FzZSwgc2ltcGx5IHVzZVxuLVx0XHQgKiAlZHN0IGFzIGEgYmFzZS4gRm9yIHRoZSBhcmVuYSBjYXNlLCB1c2UgdGhlIHdvcmsgcmVnaXN0ZXJcbi1cdFx0ICogJXIxOiBmaXJzdCwgbG9hZCB0aGUgYXJlbmEgYmFzZSBpbnRvIGl0LCBhbmQgdGhlbiBhZGQgJWRzdFxuLVx0XHQgKiB0byBpdC5cbiYjNDM7XHRcdCAqIFVubGlrZSBsb2FkcyBhbmQgc3RvcmVzLCBzMzkwIGF0b21pY3MgaGF2ZSBvbmx5IGEgYmFzZVxuJiM0MztcdFx0ICogcmVnaXN0ZXIsIGJ1dCBubyBpbmRleCByZWdpc3Rlci4gRm9yIHRoZSBub24tYXJlbmEgY2FzZSxcbiYjNDM7XHRcdCAqIHNpbXBseSB1c2UgJWRzdCBhcyBhIGJhc2UuIEZvciB0aGUgYXJlbmEgY2FzZSwgdXNlIHRoZVxuJiM0MztcdFx0ICogd29yayByZWdpc3RlciAlcjE6IGZpcnN0LCBsb2FkIHRoZSBhcmVuYSBiYXNlIGludG8gaXQsXG4mIzQzO1x0XHQgKiBhbmQgdGhlbiBhZGQgJWRzdCB0byBpdC5cbiBcdFx0ICovXG4gXHRcdHByb2JlLmFyZW5hX3JlZyA9IGRzdF9yZWc7XG4gXG5AQCAtMTY3Myw2ICYjNDM7MTcxNSwxOCBAQCBzdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxuIFx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBCUEZfTE9BRF9BQ1E6XG4mIzQzO1x0XHRcdC8qIHMzOTAgaGFzIHN0cm9uZyBvcmRlcmluZywganVzdCB1c2UgbG9hZCAqL1xuJiM0MztcdFx0XHRlcnIgPSBlbWl0X2xkeChqaXQsIGZwLCBpbnNuKTtcbiYjNDM7XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgQlBGX1NUT1JFX1JFTDpcbiYjNDM7XHRcdFx0LyogczM5MCBoYXMgc3Ryb25nIG9yZGVyaW5nLCBqdXN0IHVzZSBzdG9yZSAqL1xuJiM0MztcdFx0XHRlcnIgPSBlbWl0X3N0eChqaXQsIGZwLCBpbnNuKTtcbiYjNDM7XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRwcl9lcnIoXCYjMzQ7VW5rbm93biBhdG9taWMgb3BlcmF0aW9uICUwMnhcXG5cJiMzNDssIGluc24tXHUwMDNlaW1tKTtcbiBcdFx0XHRyZXR1cm4gLTE7XG5AQCAtMTY4NywxNSAmIzQzOzE3NDEsMjAgQEAgc3RhdGljIG5vaW5saW5lIGludCBicGZfaml0X2luc24oc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcbiBcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfQjogLyogZHN0ID0gKih1OCAqKSh1bCkgKHNyYyAmIzQzOyBvZmYpICovXG4gXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX0I6XG4gXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfQjpcbi1cdFx0YnBmX2ppdF9wcm9iZV9sb2FkX3ByZShqaXQsIGluc24sIFx1MDAyNnByb2JlKTtcbi1cdFx0LyogbGxnYyAlZHN0LG9mZiglc3JjLCVhcmVuYSkgKi9cbi1cdFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwOTAsIGRzdF9yZWcsIHNyY19yZWcsXG4tXHRcdFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpO1xuLVx0XHRlcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXHUwMDI2cHJvYmUpO1xuJiM0MztcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfSDogLyogZHN0ID0gKih1MTYgKikodWwpIChzcmMgJiM0Mzsgb2ZmKSAqL1xuJiM0MztcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0gfCBCUEZfSDpcbiYjNDM7XHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfSDpcbiYjNDM7XHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX1c6IC8qIGRzdCA9ICoodTMyICopKHVsKSAoc3JjICYjNDM7IG9mZikgKi9cbiYjNDM7XHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX1c6XG4mIzQzO1x0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX1c6XG4mIzQzO1x0Y2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9EVzogLyogZHN0ID0gKih1NjQgKikodWwpIChzcmMgJiM0Mzsgb2ZmKSAqL1xuJiM0MztcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0gfCBCUEZfRFc6XG4mIzQzO1x0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0RXOlxuJiM0MztcdFx0ZXJyID0gZW1pdF9sZHgoaml0LCBmcCwgaW5zbik7XG4gXHRcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0aml0LVx1MDAzZXNlZW4gfD0gU0VFTl9NRU07XG4tXHRcdGlmIChpbnNuX2lzX3pleHQoXHUwMDI2aW5zblsxXSkpXG4mIzQzO1x0XHRpZiAoQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfRFcgXHUwMDI2XHUwMDI2IGluc25faXNfemV4dChcdTAwMjZpbnNuWzFdKSlcbiBcdFx0XHRpbnNuX2NvdW50ID0gMjtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfQjogLyogZHN0ID0gKihzOCAqKSh1bCkgKHNyYyAmIzQzOyBvZmYpICovXG5AQCAtMTcwOCwyMCAmIzQzOzE3NjcsNiBAQCBzdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdGppdC1cdTAwM2VzZWVuIHw9IFNFRU5fTUVNO1xuIFx0XHRicmVhaztcbi1cdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfSDogLyogZHN0ID0gKih1MTYgKikodWwpIChzcmMgJiM0Mzsgb2ZmKSAqL1xuLVx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTSB8IEJQRl9IOlxuLVx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0g6XG4tXHRcdGJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoaml0LCBpbnNuLCBcdTAwMjZwcm9iZSk7XG4tXHRcdC8qIGxsZ2ggJWRzdCxvZmYoJXNyYywlYXJlbmEpICovXG4tXHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDkxLCBkc3RfcmVnLCBzcmNfcmVnLFxuLVx0XHRcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgb2ZmKTtcbi1cdFx0ZXJyID0gYnBmX2ppdF9wcm9iZV9wb3N0KGppdCwgZnAsIFx1MDAyNnByb2JlKTtcbi1cdFx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gZXJyO1xuLVx0XHRqaXQtXHUwMDNlc2VlbiB8PSBTRUVOX01FTTtcbi1cdFx0aWYgKGluc25faXNfemV4dChcdTAwMjZpbnNuWzFdKSlcbi1cdFx0XHRpbnNuX2NvdW50ID0gMjtcbi1cdFx0YnJlYWs7XG4gXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfSDogLyogZHN0ID0gKihzMTYgKikodWwpIChzcmMgJiM0Mzsgb2ZmKSAqL1xuIFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTVNYIHwgQlBGX0g6XG4gXHRcdGJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoaml0LCBpbnNuLCBcdTAwMjZwcm9iZSk7XG5AQCAtMTczMiwyMCAmIzQzOzE3NzcsNiBAQCBzdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdGppdC1cdTAwM2VzZWVuIHw9IFNFRU5fTUVNO1xuIFx0XHRicmVhaztcbi1cdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfVzogLyogZHN0ID0gKih1MzIgKikodWwpIChzcmMgJiM0Mzsgb2ZmKSAqL1xuLVx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTSB8IEJQRl9XOlxuLVx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX1c6XG4tXHRcdGJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoaml0LCBpbnNuLCBcdTAwMjZwcm9iZSk7XG4tXHRcdC8qIGxsZ2YgJWRzdCxvZmYoJXNyYykgKi9cbi1cdFx0aml0LVx1MDAzZXNlZW4gfD0gU0VFTl9NRU07XG4tXHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDE2LCBkc3RfcmVnLCBzcmNfcmVnLFxuLVx0XHRcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgb2ZmKTtcbi1cdFx0ZXJyID0gYnBmX2ppdF9wcm9iZV9wb3N0KGppdCwgZnAsIFx1MDAyNnByb2JlKTtcbi1cdFx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gZXJyO1xuLVx0XHRpZiAoaW5zbl9pc196ZXh0KFx1MDAyNmluc25bMV0pKVxuLVx0XHRcdGluc25fY291bnQgPSAyO1xuLVx0XHRicmVhaztcbiBcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9XOiAvKiBkc3QgPSAqKHMzMiAqKSh1bCkgKHNyYyAmIzQzOyBvZmYpICovXG4gXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNU1ggfCBCUEZfVzpcbiBcdFx0YnBmX2ppdF9wcm9iZV9sb2FkX3ByZShqaXQsIGluc24sIFx1MDAyNnByb2JlKTtcbkBAIC0xNzU2LDE4ICYjNDM7MTc4Nyw2IEBAIHN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4gXHRcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0YnJlYWs7XG4tXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX0RXOiAvKiBkc3QgPSAqKHU2NCAqKSh1bCkgKHNyYyAmIzQzOyBvZmYpICovXG4tXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX0RXOlxuLVx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0RXOlxuLVx0XHRicGZfaml0X3Byb2JlX2xvYWRfcHJlKGppdCwgaW5zbiwgXHUwMDI2cHJvYmUpO1xuLVx0XHQvKiBsZyAlZHN0LG9mZiglc3JjLCVhcmVuYSkgKi9cbi1cdFx0aml0LVx1MDAzZXNlZW4gfD0gU0VFTl9NRU07XG4tXHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDA0LCBkc3RfcmVnLCBzcmNfcmVnLFxuLVx0XHRcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgb2ZmKTtcbi1cdFx0ZXJyID0gYnBmX2ppdF9wcm9iZV9wb3N0KGppdCwgZnAsIFx1MDAyNnByb2JlKTtcbi1cdFx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gZXJyO1xuLVx0XHRicmVhaztcbiBcdC8qXG4gXHQgKiBCUEZfSk1QIC8gQ0FMTFxuIFx0ICovXG5AQCAtMzAyOCwxMyAmIzQzOzMwNDcsNiBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGJvb2wgaW5fYXJlbmEpXG4gXHRpZiAoIWluX2FyZW5hKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdHN3aXRjaCAoaW5zbi1cdTAwM2Vjb2RlKSB7XG4tXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0I6XG4tXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0g6XG4tXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX1c6XG4tXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0RXOlxuLVx0XHRpZiAoYnBmX2F0b21pY19pc19sb2FkX3N0b3JlKGluc24pKVxuLVx0XHRcdHJldHVybiBmYWxzZTtcbi1cdFx0YnJlYWs7XG4gXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfQjpcbiBcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9IOlxuIFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX1c6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9hdG9taWNzLmNcbmluZGV4IDJlNzc1MWE4NTM5OTliLi43M2JjMmI4MzVmM2ZlNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9hdG9taWNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9hdG9taWNzLmNcbkBAIC0yOCw4ICYjNDM7MjgsMTAgQEAgYm9vbCBza2lwX2FsbF90ZXN0cyA9IHRydWU7XG4gXG4gI2lmIGRlZmluZWQoRU5BQkxFX0FUT01JQ1NfVEVTVFMpIFx1MDAyNlx1MDAyNlx0XHQgIFxcXG4gXHRkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcdTAwMjZcdTAwMjYgXFxcbi1cdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFxcXG4tXHQgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgXHUwMDI2XHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkpXG4mIzQzO1x0KGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHwgXFxcbiYjNDM7XHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikgfHwgXFxcbiYjNDM7XHQgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgXHUwMDI2XHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkgfHwgXFxcbiYjNDM7XHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3MzOTApKVxuIGJvb2wgc2tpcF9sYWNxX3NyZWxfdGVzdHMgX19hdHRyaWJ1dGUoKF9fc2VjdGlvbl9fKFwmIzM0Oy5kYXRhXCYjMzQ7KSkpID0gZmFsc2U7XG4gI2Vsc2VcbiBib29sIHNraXBfbGFjcV9zcmVsX3Rlc3RzID0gdHJ1ZTtcbkBAIC0zMTUsOCAmIzQzOzMxNywxMCBAQCBpbnQgbG9hZF9hY3F1aXJlKGNvbnN0IHZvaWQgKmN0eClcbiB7XG4gI2lmIGRlZmluZWQoRU5BQkxFX0FUT01JQ1NfVEVTVFMpIFx1MDAyNlx1MDAyNlx0XHQgIFxcXG4gXHRkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcdTAwMjZcdTAwMjYgXFxcbi1cdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFxcXG4tXHQgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgXHUwMDI2XHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkpXG4mIzQzO1x0KGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHwgXFxcbiYjNDM7XHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikgfHwgXFxcbiYjNDM7XHQgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgXHUwMDI2XHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkgfHwgXFxcbiYjNDM7XHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3MzOTApKVxuIFxuICNkZWZpbmUgTE9BRF9BQ1FVSVJFX0FSRU5BKFNJWkVPUCwgU0laRSwgU1JDLCBEU1QpXHRcXFxuIFx0eyBhc20gdm9sYXRpbGUgKFx0XHRcdFx0XFxcbkBAIC0zNjcsOCAmIzQzOzM3MSwxMCBAQCBpbnQgc3RvcmVfcmVsZWFzZShjb25zdCB2b2lkICpjdHgpXG4ge1xuICNpZiBkZWZpbmVkKEVOQUJMRV9BVE9NSUNTX1RFU1RTKSBcdTAwMjZcdTAwMjZcdFx0ICBcXFxuIFx0ZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkgXHUwMDI2XHUwMDI2IFxcXG4tXHQoZGVmaW5lZChfX1RBUkdFVF9BUkNIX2FybTY0KSB8fCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfeDg2KSB8fCBcXFxuLVx0IChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpIFx1MDAyNlx1MDAyNiBfX3Jpc2N2X3hsZW4gPT0gNjQpKVxuJiM0MztcdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IFxcXG4mIzQzO1x0IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFxcXG4mIzQzO1x0IChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpIFx1MDAyNlx1MDAyNiBfX3Jpc2N2X3hsZW4gPT0gNjQpIHx8IFxcXG4mIzQzO1x0IGRlZmluZWQoX19UQVJHRVRfQVJDSF9zMzkwKSlcbiBcbiAjZGVmaW5lIFNUT1JFX1JFTEVBU0VfQVJFTkEoU0laRU9QLCBEU1QsIFZBTClcdFxcXG4gXHR7IGFzbSB2b2xhdGlsZSAoXHRcdFx0XFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXG5pbmRleCBiMGM0NDEzODRmMjA2Ni4uNWVhY2YxYjQzMjUyMTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbkBAIC0yNjQsOSAmIzQzOzI2NCwxMiBAQFxuICNlbmRpZlxuIFxuICNpZiBfX2NsYW5nX21ham9yX18gXHUwMDNlPSAxOCBcdTAwMjZcdTAwMjYgZGVmaW5lZChFTkFCTEVfQVRPTUlDU19URVNUUykgXHUwMDI2XHUwMDI2XHRcdFxcXG4tXHQoZGVmaW5lZChfX1RBUkdFVF9BUkNIX2FybTY0KSB8fCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfeDg2KSB8fFx0XFxcbi1cdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpIFx1MDAyNlx1MDAyNiBfX3Jpc2N2X3hsZW4gPT0gNjQpIHx8IFxcXG4tXHRkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcG93ZXJwYykgfHwgZGVmaW5lZChfX1RBUkdFVF9BUkNIX2xvb25nYXJjaCkpXG4mIzQzO1x0KGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHxcdFx0XHRcdFxcXG4mIzQzO1x0IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8XHRcdFx0XHRcdFxcXG4mIzQzO1x0IChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpIFx1MDAyNlx1MDAyNiBfX3Jpc2N2X3hsZW4gPT0gNjQpIHx8XHRcXFxuJiM0MztcdCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfczM5MCkgfHxcdFx0XHRcdFx0XFxcbiYjNDM7XHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3Bvd2VycGMpIHx8XHRcdFx0XHRcXFxuJiM0MztcdCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfbG9vbmdhcmNoKSlcbiAjZGVmaW5lIENBTl9VU0VfTE9BRF9BQ1FfU1RPUkVfUkVMXG4gI2VuZGlmXG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZW1pdF9sZHgmIzM0OywKICAgICYjMzQ7ZW1pdF9zdHgmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9wcm9iZV9sb2FkX3ByZSYjMzQ7LAogICAgJiMzNDticGZfaml0X3Byb2JlX3N0b3JlX3ByZSYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1cHBvcnRzX2luc24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBzdXBwb3J0IGZvciBCUEZfUFJPQkVfQVRPTUlDLCBCUEZfTE9BRF9BQ1EsIGFuZCBCUEZfU1RPUkVfUkVMIGluc3RydWN0aW9ucyBpbiB0aGUgczM5MCBCUEYgSklUIGNvbXBpbGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIEpJVCBsb2dpYyBvbiBzMzkwIGFyY2hpdGVjdHVyZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI4OWQxMWQ0Y2Y2NzY4ZDAxZTFhMDk0MWU3ZjQzNTdkMzA4ZTkyMmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAyNCAxODowNDowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IDMxNzQ5YzAzNjJjYTIzLi5jOThhYjJlZWNlNTdmNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jCkBAIC03NDMsMTAgJiM0Mzs3NDMsMTIgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9iZV9sb2FkX3ByZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiB7CiAJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpICE9IEJQRl9QUk9CRV9NRU0gJmFtcDsmYW1wOwogCSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfUFJPQkVfTUVNU1ggJmFtcDsmYW1wOwotCSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfUFJPQkVfTUVNMzIpCiYjNDM7CSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfUFJPQkVfTUVNMzIgJmFtcDsmYW1wOwomIzQzOwkgICAgQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX1BST0JFX0FUT01JQykKIAkJcmV0dXJuOwogCi0JaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9NRU0zMikgewomIzQzOwlpZiAoQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX1BST0JFX01FTTMyIHx8CiYjNDM7CSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfQVRPTUlDKSB7CiAJCS8qIGxncmwgJXIxLGtlcm5fYXJlbmEgKi8KIAkJRU1JVDZfUENSRUxfUklMQigweGM0MDgwMDAwLCBSRUdfVzEsIGppdC0mZ3Q7a2Vybl9hcmVuYSk7CiAJCXByb2JlLSZndDthcmVuYV9yZWcgPSBSRUdfVzE7CkBAIC03NTgsNyAmIzQzOzc2MCw4IEBAIHN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9iZV9zdG9yZV9wcmUoc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQkJCSAgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpCiB7Ci0JaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpICE9IEJQRl9QUk9CRV9NRU0zMikKJiM0MzsJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpICE9IEJQRl9QUk9CRV9NRU0zMiAmYW1wOyZhbXA7CiYjNDM7CSAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSAhPSBCUEZfUFJPQkVfQVRPTUlDKQogCQlyZXR1cm47CiAKIAkvKiBsZ3JsICVyMSxrZXJuX2FyZW5hICovCkBAIC04MzAsNiAmIzQzOzgzMyw3MiBAQCBzdGF0aWMgaW50IGJwZl9qaXRfcHJvYmVfcG9zdChzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBlbWl0X2xkeChzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2ppdF9wcm9iZSBwcm9iZTsKJiM0MzsKJiM0MzsJYnBmX2ppdF9wcm9iZV9pbml0KCZhbXA7cHJvYmUpOwomIzQzOwlicGZfaml0X3Byb2JlX2xvYWRfcHJlKGppdCwgaW5zbiwgJmFtcDtwcm9iZSk7CiYjNDM7CiYjNDM7CXN3aXRjaCAoQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSkpIHsKJiM0MzsJY2FzZSBCUEZfQjogLyogZHN0ID0gKih1OCAqKSh1bCkgKHNyYyAmIzQzOyBvZmYpICovCiYjNDM7CQkvKiBsbGdjICVkc3Qsb2ZmKCVzcmMsJWFyZW5hKSAqLwomIzQzOwkJRU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwOTAsIGluc24tJmd0O2RzdF9yZWcsIGluc24tJmd0O3NyY19yZWcsCiYjNDM7CQkJICAgICAgcHJvYmUuYXJlbmFfcmVnLCBpbnNuLSZndDtvZmYpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0g6IC8qIGRzdCA9ICoodTE2ICopKHVsKSAoc3JjICYjNDM7IG9mZikgKi8KJiM0MzsJCS8qIGxsZ2ggJWRzdCxvZmYoJXNyYywlYXJlbmEpICovCiYjNDM7CQlFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDA5MSwgaW5zbi0mZ3Q7ZHN0X3JlZywgaW5zbi0mZ3Q7c3JjX3JlZywKJiM0MzsJCQkgICAgICBwcm9iZS5hcmVuYV9yZWcsIGluc24tJmd0O29mZik7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfVzogLyogZHN0ID0gKih1MzIgKikodWwpIChzcmMgJiM0Mzsgb2ZmKSAqLwomIzQzOwkJLyogbGxnZiAlZHN0LG9mZiglc3JjLCVhcmVuYSkgKi8KJiM0MzsJCUVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDE2LCBpbnNuLSZndDtkc3RfcmVnLCBpbnNuLSZndDtzcmNfcmVnLAomIzQzOwkJCSAgICAgIHByb2JlLmFyZW5hX3JlZywgaW5zbi0mZ3Q7b2ZmKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9EVzogLyogZHN0ID0gKih1NjQgKikodWwpIChzcmMgJiM0Mzsgb2ZmKSAqLwomIzQzOwkJLyogbGcgJWRzdCxvZmYoJXNyYywlYXJlbmEpICovCiYjNDM7CQlFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDAwNCwgaW5zbi0mZ3Q7ZHN0X3JlZywgaW5zbi0mZ3Q7c3JjX3JlZywKJiM0MzsJCQkgICAgICBwcm9iZS5hcmVuYV9yZWcsIGluc24tJmd0O29mZik7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gYnBmX2ppdF9wcm9iZV9wb3N0KGppdCwgZnAsICZhbXA7cHJvYmUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVtaXRfc3R4KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfaml0X3Byb2JlIHByb2JlOwomIzQzOwomIzQzOwlicGZfaml0X3Byb2JlX2luaXQoJmFtcDtwcm9iZSk7CiYjNDM7CWJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKGppdCwgaW5zbiwgJmFtcDtwcm9iZSk7CiYjNDM7CiYjNDM7CXN3aXRjaCAoQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSkpIHsKJiM0MzsJY2FzZSBCUEZfQjogLyogKih1OCAqKShkc3QgJiM0Mzsgb2ZmKSA9IHNyY19yZWcgKi8KJiM0MzsJCS8qIHN0Y3kgJXNyYyxvZmYoJWRzdCwlYXJlbmEpICovCiYjNDM7CQlFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDA3MiwgaW5zbi0mZ3Q7c3JjX3JlZywgaW5zbi0mZ3Q7ZHN0X3JlZywKJiM0MzsJCQkgICAgICBwcm9iZS5hcmVuYV9yZWcsIGluc24tJmd0O29mZik7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfSDogLyogKHUxNiAqKShkc3QgJiM0Mzsgb2ZmKSA9IHNyYyAqLwomIzQzOwkJLyogc3RoeSAlc3JjLG9mZiglZHN0LCVhcmVuYSkgKi8KJiM0MzsJCUVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDcwLCBpbnNuLSZndDtzcmNfcmVnLCBpbnNuLSZndDtkc3RfcmVnLAomIzQzOwkJCSAgICAgIHByb2JlLmFyZW5hX3JlZywgaW5zbi0mZ3Q7b2ZmKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9XOiAvKiAqKHUzMiAqKShkc3QgJiM0Mzsgb2ZmKSA9IHNyYyAqLwomIzQzOwkJLyogc3R5ICVzcmMsb2ZmKCVkc3QsJWFyZW5hKSAqLwomIzQzOwkJRU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwNTAsIGluc24tJmd0O3NyY19yZWcsIGluc24tJmd0O2RzdF9yZWcsCiYjNDM7CQkJICAgICAgcHJvYmUuYXJlbmFfcmVnLCBpbnNuLSZndDtvZmYpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0RXOiAvKiAodTY0ICopKGRzdCAmIzQzOyBvZmYpID0gc3JjICovCiYjNDM7CQkvKiBzdGcgJXNyYyxvZmYoJWRzdCwlYXJlbmEpICovCiYjNDM7CQlFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDAyNCwgaW5zbi0mZ3Q7c3JjX3JlZywgaW5zbi0mZ3Q7ZHN0X3JlZywKJiM0MzsJCQkgICAgICBwcm9iZS5hcmVuYV9yZWcsIGluc24tJmd0O29mZik7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gYnBmX2ppdF9wcm9iZV9wb3N0KGppdCwgZnAsICZhbXA7cHJvYmUpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBTaWduLSBvciB6ZXJvLWV4dGVuZCB0aGUgcmVnaXN0ZXIgaWYgbmVjZXNzYXJ5CiAgKi8KQEAgLTE0NzcsNDQgJiM0MzsxNTQ2LDEzIEBAIHN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsCiAJICovCiAJY2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9COiAvKiAqKHU4ICopKGRzdCAmIzQzOyBvZmYpID0gc3JjX3JlZyAqLwogCWNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9COgotCQlicGZfaml0X3Byb2JlX3N0b3JlX3ByZShqaXQsIGluc24sICZhbXA7cHJvYmUpOwotCQkvKiBzdGN5ICVzcmMsb2ZmKCVkc3QsJWFyZW5hKSAqLwotCQlFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDA3Miwgc3JjX3JlZywgZHN0X3JlZywKLQkJCSAgICAgIHByb2JlLmFyZW5hX3JlZywgb2ZmKTsKLQkJZXJyID0gYnBmX2ppdF9wcm9iZV9wb3N0KGppdCwgZnAsICZhbXA7cHJvYmUpOwotCQlpZiAoZXJyICZsdDsgMCkKLQkJCXJldHVybiBlcnI7Ci0JCWppdC0mZ3Q7c2VlbiB8PSBTRUVOX01FTTsKLQkJYnJlYWs7CiAJY2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9IOiAvKiAodTE2ICopKGRzdCAmIzQzOyBvZmYpID0gc3JjICovCiAJY2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0g6Ci0JCWJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKGppdCwgaW5zbiwgJmFtcDtwcm9iZSk7Ci0JCS8qIHN0aHkgJXNyYyxvZmYoJWRzdCwlYXJlbmEpICovCi0JCUVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDcwLCBzcmNfcmVnLCBkc3RfcmVnLAotCQkJICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpOwotCQllcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgJmFtcDtwcm9iZSk7Ci0JCWlmIChlcnIgJmx0OyAwKQotCQkJcmV0dXJuIGVycjsKLQkJaml0LSZndDtzZWVuIHw9IFNFRU5fTUVNOwotCQlicmVhazsKIAljYXNlIEJQRl9TVFggfCBCUEZfTUVNIHwgQlBGX1c6IC8qICoodTMyICopKGRzdCAmIzQzOyBvZmYpID0gc3JjICovCiAJY2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX1c6Ci0JCWJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKGppdCwgaW5zbiwgJmFtcDtwcm9iZSk7Ci0JCS8qIHN0eSAlc3JjLG9mZiglZHN0LCVhcmVuYSkgKi8KLQkJRU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwNTAsIHNyY19yZWcsIGRzdF9yZWcsCi0JCQkgICAgICBwcm9iZS5hcmVuYV9yZWcsIG9mZik7Ci0JCWVyciA9IGJwZl9qaXRfcHJvYmVfcG9zdChqaXQsIGZwLCAmYW1wO3Byb2JlKTsKLQkJaWYgKGVyciAmbHQ7IDApCi0JCQlyZXR1cm4gZXJyOwotCQlqaXQtJmd0O3NlZW4gfD0gU0VFTl9NRU07Ci0JCWJyZWFrOwogCWNhc2UgQlBGX1NUWCB8IEJQRl9NRU0gfCBCUEZfRFc6IC8qICh1NjQgKikoZHN0ICYjNDM7IG9mZikgPSBzcmMgKi8KIAljYXNlIEJQRl9TVFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfRFc6Ci0JCWJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKGppdCwgaW5zbiwgJmFtcDtwcm9iZSk7Ci0JCS8qIHN0ZyAlc3JjLG9mZiglZHN0LCVhcmVuYSkgKi8KLQkJRU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwMjQsIHNyY19yZWcsIGRzdF9yZWcsCi0JCQkgICAgICBwcm9iZS5hcmVuYV9yZWcsIG9mZik7Ci0JCWVyciA9IGJwZl9qaXRfcHJvYmVfcG9zdChqaXQsIGZwLCAmYW1wO3Byb2JlKTsKJiM0MzsJCWVyciA9IGVtaXRfc3R4KGppdCwgZnAsIGluc24pOwogCQlpZiAoZXJyICZsdDsgMCkKIAkJCXJldHVybiBlcnI7CiAJCWppdC0mZ3Q7c2VlbiB8PSBTRUVOX01FTTsKQEAgLTE1NzQsMTkgJiM0MzsxNjEyLDIzIEBAIHN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsCiAJLyoKIAkgKiBCUEZfQVRPTUlDCiAJICovCiYjNDM7CWNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfQjoKJiM0MzsJY2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9IOgogCWNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfRFc6CiAJY2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9XOgomIzQzOwljYXNlIEJQRl9TVFggfCBCUEZfUFJPQkVfQVRPTUlDIHwgQlBGX0I6CiYjNDM7CWNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9BVE9NSUMgfCBCUEZfSDoKIAljYXNlIEJQRl9TVFggfCBCUEZfUFJPQkVfQVRPTUlDIHwgQlBGX0RXOgogCWNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9BVE9NSUMgfCBCUEZfVzoKIAl7CiAJCWJvb2wgaXMzMiA9IEJQRl9TSVpFKGluc24tJmd0O2NvZGUpID09IEJQRl9XOwogCiAJCS8qCi0JCSAqIFVubGlrZSBsb2FkcyBhbmQgc3RvcmVzLCBhdG9taWNzIGhhdmUgb25seSBhIGJhc2UgcmVnaXN0ZXIsCi0JCSAqIGJ1dCBubyBpbmRleCByZWdpc3Rlci4gRm9yIHRoZSBub24tYXJlbmEgY2FzZSwgc2ltcGx5IHVzZQotCQkgKiAlZHN0IGFzIGEgYmFzZS4gRm9yIHRoZSBhcmVuYSBjYXNlLCB1c2UgdGhlIHdvcmsgcmVnaXN0ZXIKLQkJICogJXIxOiBmaXJzdCwgbG9hZCB0aGUgYXJlbmEgYmFzZSBpbnRvIGl0LCBhbmQgdGhlbiBhZGQgJWRzdAotCQkgKiB0byBpdC4KJiM0MzsJCSAqIFVubGlrZSBsb2FkcyBhbmQgc3RvcmVzLCBzMzkwIGF0b21pY3MgaGF2ZSBvbmx5IGEgYmFzZQomIzQzOwkJICogcmVnaXN0ZXIsIGJ1dCBubyBpbmRleCByZWdpc3Rlci4gRm9yIHRoZSBub24tYXJlbmEgY2FzZSwKJiM0MzsJCSAqIHNpbXBseSB1c2UgJWRzdCBhcyBhIGJhc2UuIEZvciB0aGUgYXJlbmEgY2FzZSwgdXNlIHRoZQomIzQzOwkJICogd29yayByZWdpc3RlciAlcjE6IGZpcnN0LCBsb2FkIHRoZSBhcmVuYSBiYXNlIGludG8gaXQsCiYjNDM7CQkgKiBhbmQgdGhlbiBhZGQgJWRzdCB0byBpdC4KIAkJICovCiAJCXByb2JlLmFyZW5hX3JlZyA9IGRzdF9yZWc7CiAKQEAgLTE2NzMsNiAmIzQzOzE3MTUsMTggQEAgc3RhdGljIG5vaW5saW5lIGludCBicGZfaml0X2luc24oc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCwKIAkJCWlmIChlcnIgJmx0OyAwKQogCQkJCXJldHVybiBlcnI7CiAJCQlicmVhazsKJiM0MzsJCWNhc2UgQlBGX0xPQURfQUNROgomIzQzOwkJCS8qIHMzOTAgaGFzIHN0cm9uZyBvcmRlcmluZywganVzdCB1c2UgbG9hZCAqLwomIzQzOwkJCWVyciA9IGVtaXRfbGR4KGppdCwgZnAsIGluc24pOwomIzQzOwkJCWlmIChlcnIgJmx0OyAwKQomIzQzOwkJCQlyZXR1cm4gZXJyOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBCUEZfU1RPUkVfUkVMOgomIzQzOwkJCS8qIHMzOTAgaGFzIHN0cm9uZyBvcmRlcmluZywganVzdCB1c2Ugc3RvcmUgKi8KJiM0MzsJCQllcnIgPSBlbWl0X3N0eChqaXQsIGZwLCBpbnNuKTsKJiM0MzsJCQlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCQkJcmV0dXJuIGVycjsKJiM0MzsJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXByX2VycigmIzM0O1Vua25vd24gYXRvbWljIG9wZXJhdGlvbiAlMDJ4XG4mIzM0OywgaW5zbi0mZ3Q7aW1tKTsKIAkJCXJldHVybiAtMTsKQEAgLTE2ODcsMTUgJiM0MzsxNzQxLDIwIEBAIHN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsCiAJY2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9COiAvKiBkc3QgPSAqKHU4ICopKHVsKSAoc3JjICYjNDM7IG9mZikgKi8KIAljYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX0I6CiAJY2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0I6Ci0JCWJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoaml0LCBpbnNuLCAmYW1wO3Byb2JlKTsKLQkJLyogbGxnYyAlZHN0LG9mZiglc3JjLCVhcmVuYSkgKi8KLQkJRU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwOTAsIGRzdF9yZWcsIHNyY19yZWcsCi0JCQkgICAgICBwcm9iZS5hcmVuYV9yZWcsIG9mZik7Ci0JCWVyciA9IGJwZl9qaXRfcHJvYmVfcG9zdChqaXQsIGZwLCAmYW1wO3Byb2JlKTsKJiM0MzsJY2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9IOiAvKiBkc3QgPSAqKHUxNiAqKSh1bCkgKHNyYyAmIzQzOyBvZmYpICovCiYjNDM7CWNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0gfCBCUEZfSDoKJiM0MzsJY2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0g6CiYjNDM7CWNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfVzogLyogZHN0ID0gKih1MzIgKikodWwpIChzcmMgJiM0Mzsgb2ZmKSAqLwomIzQzOwljYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX1c6CiYjNDM7CWNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9XOgomIzQzOwljYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX0RXOiAvKiBkc3QgPSAqKHU2NCAqKSh1bCkgKHNyYyAmIzQzOyBvZmYpICovCiYjNDM7CWNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0gfCBCUEZfRFc6CiYjNDM7CWNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9EVzoKJiM0MzsJCWVyciA9IGVtaXRfbGR4KGppdCwgZnAsIGluc24pOwogCQlpZiAoZXJyICZsdDsgMCkKIAkJCXJldHVybiBlcnI7CiAJCWppdC0mZ3Q7c2VlbiB8PSBTRUVOX01FTTsKLQkJaWYgKGluc25faXNfemV4dCgmYW1wO2luc25bMV0pKQomIzQzOwkJaWYgKEJQRl9TSVpFKGluc24tJmd0O2NvZGUpICE9IEJQRl9EVyAmYW1wOyZhbXA7IGluc25faXNfemV4dCgmYW1wO2luc25bMV0pKQogCQkJaW5zbl9jb3VudCA9IDI7CiAJCWJyZWFrOwogCWNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9COiAvKiBkc3QgPSAqKHM4ICopKHVsKSAoc3JjICYjNDM7IG9mZikgKi8KQEAgLTE3MDgsMjAgJiM0MzsxNzY3LDYgQEAgc3RhdGljIG5vaW5saW5lIGludCBicGZfaml0X2luc24oc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCwKIAkJCXJldHVybiBlcnI7CiAJCWppdC0mZ3Q7c2VlbiB8PSBTRUVOX01FTTsKIAkJYnJlYWs7Ci0JY2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9IOiAvKiBkc3QgPSAqKHUxNiAqKSh1bCkgKHNyYyAmIzQzOyBvZmYpICovCi0JY2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTSB8IEJQRl9IOgotCWNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9IOgotCQlicGZfaml0X3Byb2JlX2xvYWRfcHJlKGppdCwgaW5zbiwgJmFtcDtwcm9iZSk7Ci0JCS8qIGxsZ2ggJWRzdCxvZmYoJXNyYywlYXJlbmEpICovCi0JCUVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDkxLCBkc3RfcmVnLCBzcmNfcmVnLAotCQkJICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpOwotCQllcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgJmFtcDtwcm9iZSk7Ci0JCWlmIChlcnIgJmx0OyAwKQotCQkJcmV0dXJuIGVycjsKLQkJaml0LSZndDtzZWVuIHw9IFNFRU5fTUVNOwotCQlpZiAoaW5zbl9pc196ZXh0KCZhbXA7aW5zblsxXSkpCi0JCQlpbnNuX2NvdW50ID0gMjsKLQkJYnJlYWs7CiAJY2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX0g6IC8qIGRzdCA9ICooczE2ICopKHVsKSAoc3JjICYjNDM7IG9mZikgKi8KIAljYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNU1ggfCBCUEZfSDoKIAkJYnBmX2ppdF9wcm9iZV9sb2FkX3ByZShqaXQsIGluc24sICZhbXA7cHJvYmUpOwpAQCAtMTczMiwyMCAmIzQzOzE3NzcsNiBAQCBzdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLAogCQkJcmV0dXJuIGVycjsKIAkJaml0LSZndDtzZWVuIHw9IFNFRU5fTUVNOwogCQlicmVhazsKLQljYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX1c6IC8qIGRzdCA9ICoodTMyICopKHVsKSAoc3JjICYjNDM7IG9mZikgKi8KLQljYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX1c6Ci0JY2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX1c6Ci0JCWJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoaml0LCBpbnNuLCAmYW1wO3Byb2JlKTsKLQkJLyogbGxnZiAlZHN0LG9mZiglc3JjKSAqLwotCQlqaXQtJmd0O3NlZW4gfD0gU0VFTl9NRU07Ci0JCUVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDE2LCBkc3RfcmVnLCBzcmNfcmVnLAotCQkJICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpOwotCQllcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgJmFtcDtwcm9iZSk7Ci0JCWlmIChlcnIgJmx0OyAwKQotCQkJcmV0dXJuIGVycjsKLQkJaWYgKGluc25faXNfemV4dCgmYW1wO2luc25bMV0pKQotCQkJaW5zbl9jb3VudCA9IDI7Ci0JCWJyZWFrOwogCWNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9XOiAvKiBkc3QgPSAqKHMzMiAqKSh1bCkgKHNyYyAmIzQzOyBvZmYpICovCiAJY2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTVNYIHwgQlBGX1c6CiAJCWJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoaml0LCBpbnNuLCAmYW1wO3Byb2JlKTsKQEAgLTE3NTYsMTggJiM0MzsxNzg3LDYgQEAgc3RhdGljIG5vaW5saW5lIGludCBicGZfaml0X2luc24oc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCwKIAkJaWYgKGVyciAmbHQ7IDApCiAJCQlyZXR1cm4gZXJyOwogCQlicmVhazsKLQljYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX0RXOiAvKiBkc3QgPSAqKHU2NCAqKSh1bCkgKHNyYyAmIzQzOyBvZmYpICovCi0JY2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTSB8IEJQRl9EVzoKLQljYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfRFc6Ci0JCWJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoaml0LCBpbnNuLCAmYW1wO3Byb2JlKTsKLQkJLyogbGcgJWRzdCxvZmYoJXNyYywlYXJlbmEpICovCi0JCWppdC0mZ3Q7c2VlbiB8PSBTRUVOX01FTTsKLQkJRU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwMDQsIGRzdF9yZWcsIHNyY19yZWcsCi0JCQkgICAgICBwcm9iZS5hcmVuYV9yZWcsIG9mZik7Ci0JCWVyciA9IGJwZl9qaXRfcHJvYmVfcG9zdChqaXQsIGZwLCAmYW1wO3Byb2JlKTsKLQkJaWYgKGVyciAmbHQ7IDApCi0JCQlyZXR1cm4gZXJyOwotCQlicmVhazsKIAkvKgogCSAqIEJQRl9KTVAgLyBDQUxMCiAJICovCkBAIC0zMDI4LDEzICYjNDM7MzA0Nyw2IEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSkKIAlpZiAoIWluX2FyZW5hKQogCQlyZXR1cm4gdHJ1ZTsKIAlzd2l0Y2ggKGluc24tJmd0O2NvZGUpIHsKLQljYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0I6Ci0JY2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9IOgotCWNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfVzoKLQljYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0RXOgotCQlpZiAoYnBmX2F0b21pY19pc19sb2FkX3N0b3JlKGluc24pKQotCQkJcmV0dXJuIGZhbHNlOwotCQlicmVhazsKIAljYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfQjoKIAljYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfSDoKIAljYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfVzoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9hdG9taWNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jCmluZGV4IDJlNzc1MWE4NTM5OTliLi43M2JjMmI4MzVmM2ZlNCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jCkBAIC0yOCw4ICYjNDM7MjgsMTAgQEAgYm9vbCBza2lwX2FsbF90ZXN0cyA9IHRydWU7CiAKICNpZiBkZWZpbmVkKEVOQUJMRV9BVE9NSUNTX1RFU1RTKSAmYW1wOyZhbXA7CQkgIFwKIAlkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSAmYW1wOyZhbXA7IFwKLQkoZGVmaW5lZChfX1RBUkdFVF9BUkNIX2FybTY0KSB8fCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfeDg2KSB8fCBcCi0JIChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpICZhbXA7JmFtcDsgX19yaXNjdl94bGVuID09IDY0KSkKJiM0MzsJKGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHwgXAomIzQzOwkgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikgfHwgXAomIzQzOwkgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgJmFtcDsmYW1wOyBfX3Jpc2N2X3hsZW4gPT0gNjQpIHx8IFwKJiM0MzsJIGRlZmluZWQoX19UQVJHRVRfQVJDSF9zMzkwKSkKIGJvb2wgc2tpcF9sYWNxX3NyZWxfdGVzdHMgX19hdHRyaWJ1dGUoKF9fc2VjdGlvbl9fKCYjMzQ7LmRhdGEmIzM0OykpKSA9IGZhbHNlOwogI2Vsc2UKIGJvb2wgc2tpcF9sYWNxX3NyZWxfdGVzdHMgPSB0cnVlOwpAQCAtMzE1LDggJiM0MzszMTcsMTAgQEAgaW50IGxvYWRfYWNxdWlyZShjb25zdCB2b2lkICpjdHgpCiB7CiAjaWYgZGVmaW5lZChFTkFCTEVfQVRPTUlDU19URVNUUykgJmFtcDsmYW1wOwkJICBcCiAJZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkgJmFtcDsmYW1wOyBcCi0JKGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHwgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikgfHwgXAotCSAoZGVmaW5lZChfX1RBUkdFVF9BUkNIX3Jpc2N2KSAmYW1wOyZhbXA7IF9fcmlzY3ZfeGxlbiA9PSA2NCkpCiYjNDM7CShkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IFwKJiM0MzsJIGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFwKJiM0MzsJIChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpICZhbXA7JmFtcDsgX19yaXNjdl94bGVuID09IDY0KSB8fCBcCiYjNDM7CSBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfczM5MCkpCiAKICNkZWZpbmUgTE9BRF9BQ1FVSVJFX0FSRU5BKFNJWkVPUCwgU0laRSwgU1JDLCBEU1QpCVwKIAl7IGFzbSB2b2xhdGlsZSAoCQkJCVwKQEAgLTM2Nyw4ICYjNDM7MzcxLDEwIEBAIGludCBzdG9yZV9yZWxlYXNlKGNvbnN0IHZvaWQgKmN0eCkKIHsKICNpZiBkZWZpbmVkKEVOQUJMRV9BVE9NSUNTX1RFU1RTKSAmYW1wOyZhbXA7CQkgIFwKIAlkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSAmYW1wOyZhbXA7IFwKLQkoZGVmaW5lZChfX1RBUkdFVF9BUkNIX2FybTY0KSB8fCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfeDg2KSB8fCBcCi0JIChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpICZhbXA7JmFtcDsgX19yaXNjdl94bGVuID09IDY0KSkKJiM0MzsJKGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHwgXAomIzQzOwkgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikgfHwgXAomIzQzOwkgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgJmFtcDsmYW1wOyBfX3Jpc2N2X3hsZW4gPT0gNjQpIHx8IFwKJiM0MzsJIGRlZmluZWQoX19UQVJHRVRfQVJDSF9zMzkwKSkKIAogI2RlZmluZSBTVE9SRV9SRUxFQVNFX0FSRU5BKFNJWkVPUCwgRFNULCBWQUwpCVwKIAl7IGFzbSB2b2xhdGlsZSAoCQkJXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaAppbmRleCBiMGM0NDEzODRmMjA2Ni4uNWVhY2YxYjQzMjUyMTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oCkBAIC0yNjQsOSAmIzQzOzI2NCwxMiBAQAogI2VuZGlmCiAKICNpZiBfX2NsYW5nX21ham9yX18gJmd0Oz0gMTggJmFtcDsmYW1wOyBkZWZpbmVkKEVOQUJMRV9BVE9NSUNTX1RFU1RTKSAmYW1wOyZhbXA7CQlcCi0JKGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHwgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikgfHwJXAotCShkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpICZhbXA7JmFtcDsgX19yaXNjdl94bGVuID09IDY0KSB8fCBcCi0JZGVmaW5lZChfX1RBUkdFVF9BUkNIX3Bvd2VycGMpIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF9sb29uZ2FyY2gpKQomIzQzOwkoZGVmaW5lZChfX1RBUkdFVF9BUkNIX2FybTY0KSB8fAkJCQlcCiYjNDM7CSBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfeDg2KSB8fAkJCQkJXAomIzQzOwkgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgJmFtcDsmYW1wOyBfX3Jpc2N2X3hsZW4gPT0gNjQpIHx8CVwKJiM0MzsJIGRlZmluZWQoX19UQVJHRVRfQVJDSF9zMzkwKSB8fAkJCQkJXAomIzQzOwkgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3Bvd2VycGMpIHx8CQkJCVwKJiM0MzsJIGRlZmluZWQoX19UQVJHRVRfQVJDSF9sb29uZ2FyY2gpKQogI2RlZmluZSBDQU5fVVNFX0xPQURfQUNRX1NUT1JFX1JFTAogI2VuZGlmCiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI0NAoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDQxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBzMzkwIEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2gg4oCTIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgYGFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNgLCBhbmQgc29tZSBzZWxmdGVzdHMsIGFuZCBhZGRzIHN1cHBvcnQgZm9yIGBCUEZfUFJPQkVfQVRPTUlDYCBhbmQgdGhlIGFjcXVpcmUvcmVsZWFzZSBpbnN0cnVjdGlvbnMgaW4gdGhlIHMzOTAgQlBGIEpJVCBjb21waWxlci4gSXQmIzM5O3MgYWxzbyByZWZhY3RvcmluZyB0aGUgbG9hZC9zdG9yZSBlbWl0IGZ1bmN0aW9ucyB0byBkZWFsIHdpdGggbWVtb3J5IHByb2JpbmcgYW5kIGF0b21pY3MuIEhtbSwgc2hvdWxkIHRoaXMgYmUgZnV6emVkPyBBYnNvbHV0ZWx5LCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCB3aXRoaW4gdGhlIHMzOTAgQlBGIEpJVCwgc28gaXQmIzM5O3MgYSBnb29kIHRhcmdldC4KCldhaXQsIGRvZXNuJiMzOTt0IHN5emthbGxlciBjb3ZlciBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzPyBJJiMzOTttIHByZXR0eSBzdXJlIGl0IGRvZXMsIGluY2x1ZGluZyBzMzkweC4uLnllcywgSSBrbm93IGl0IGRvZXMuIE9rYXksIHdlIHNob3VsZCBjaGVjayBpZiB3ZSBjYW4gaWRlbnRpZnkgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLgoKTGV0JiMzOTtzIHNlZS4uLiB0aGUgcHJpbWFyeSBmdW5jdGlvbnMgdGhhdCBhcmUgYWx0ZXJlZCBhcmU6CgotICAgYGJwZl9qaXRfcHJvYmVfbG9hZF9wcmVgCi0gICBgYnBmX2ppdF9wcm9iZV9zdG9yZV9wcmVgCi0gICBgZW1pdF9sZHhgIChuZXcpCi0gICBgZW1pdF9zdHhgIChuZXcpCi0gICBgYnBmX2ppdF9pbnNuYAotICAgYGJwZl9qaXRfc3VwcG9ydHNfaW5zbmAKCkkgc2hvdWxkIGNoZWNrIHRoZSBzb3VyY2UgZmlsZSB0byB2ZXJpZnkuIE9rYXksIGdvdCBpdC4gTm93LCBgYnBmX2ppdF9pbnNuYCBpcyBwcm9iYWJseSBhIGdvb2QgZm9jdXMgc3ltYm9sLCBidXQgdGhhdCYjMzk7cyBnb2luZyB0byBiZSBhIGhvdCBwYXRoIGluIHRoZSBKSVQgY29tcGlsZXIsIHJpZ2h0PyBJdCBtaWdodCBnZW5lcmF0ZSB0b28gbXVjaCBub2lzZS4KClNvIHBlcmhhcHMgYGJwZl9qaXRfcHJvYmVfbG9hZF9wcmVgLCBgYnBmX2ppdF9wcm9iZV9zdG9yZV9wcmVgLCBgZW1pdF9sZHhgLCBgZW1pdF9zdHhgLCBhbmQgYGJwZl9qaXRfc3VwcG9ydHNfaW5zbmAgd291bGQgYmUgYmV0dGVyIHN0YXJ0aW5nIHBvaW50cz8gTGV0IG1lIGNoZWNrIHRob3NlIGRlZmluaXRpb25zIHVzaW5nIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgY29tZXMgYmFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpY3x2b2lkfGludCkuKmJwZl9qaXRfLiomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9NTYyPWFzbShcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTU3NC1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6NTc1OnN0YXRpYyB2b2lkIGJwZl9qaXRfcGx0KHN0cnVjdCBicGZfcGx0ICpwbHQsIHZvaWQgKnJldCwgdm9pZCAqdGFyZ2V0KVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy01NzYte1xuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtNTk1LSAqL1xuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzo1OTY6c3RhdGljIHZvaWQgYnBmX2ppdF9wcm9sb2d1ZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy01OTcte1xuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtNjc5LSAqL1xuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzo2ODA6c3RhdGljIHZvaWQgYnBmX2ppdF9lcGlsb2d1ZShzdHJ1Y3QgYnBmX2ppdCAqaml0KVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy02ODEte1xuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9NzA4PXN0cnVjdCBicGZfaml0X3Byb2JlIHtcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTcxNC1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6NzE1OnN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfaW5pdChzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTcxNi17XG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy03MjgtICovXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjcyOTpzdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX2VtaXRfbm9wKHN0cnVjdCBicGZfaml0ICpqaXQsXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTczMC1cdFx0XHRcdCAgIHN0cnVjdCBicGZfaml0X3Byb2JlICpwcm9iZSlcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTc0MC1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6NzQxOnN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy03NDItXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy03NTktXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjc2MDpzdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX3N0b3JlX3ByZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTc2MS1cdFx0XHRcdCAgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy03NzItXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjc3MzpzdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX2F0b21pY19wcmUoc3RydWN0IGJwZl9qaXQgKmppdCxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtNzc0LVx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy03ODctXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjc4ODpzdGF0aWMgaW50IGJwZl9qaXRfcHJvYmVfcG9zdChzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy03ODktXHRcdFx0ICAgICAgc3RydWN0IGJwZl9qaXRfcHJvYmUgKnByb2JlKVxuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9OTA1PXN0YXRpYyBpbnQgc2lnbl96ZXJvX2V4dGVuZChzdHJ1Y3QgYnBmX2ppdCAqaml0LCBpbnQgciwgdTggc2l6ZSwgdTggZmxhZ3MpXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy05NDQtICovXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjk0NTpzdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy05NDYtXHRcdFx0XHQgaW50IGksIGJvb2wgZXh0cmFfcGFzcylcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTIyMzQ9c3RhdGljIGludCBicGZfc2V0X2FkZHIoc3RydWN0IGJwZl9qaXQgKmppdCwgaW50IGkpXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yMjUxLSAqL1xuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoyMjUyOnN0YXRpYyBpbnQgYnBmX2ppdF9wcm9nKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTIyNTMtXHRcdFx0Ym9vbCBleHRyYV9wYXNzKVxuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9MjMxMT1zdHJ1Y3QgczM5MF9qaXRfZGF0YSB7XG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yMzE2LVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoyMzE3OnN0YXRpYyBzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKmJwZl9qaXRfYWxsb2Moc3RydWN0IGJwZl9qaXQgKmppdCxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjMxOC1cdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqZnApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1OTAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIE5ldyBBc3NlbWJseSBGdW5jdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgdGhlIGNvbW1pdCBpbmNsdWRlcyBgZW1pdF9sZHhgIGFuZCBgZW1pdF9zdHhgLiBUaGUgZmFjdCB0aGF0IHRoZXkmIzM5O3JlIGBzdGF0aWNgIGlzIGEgZGV0YWlsIHdvcnRoIG5vdGluZzsgaXQgaW1wbGllcyB0aGV5JiMzOTtyZSBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiB0aGlzIG1vZHVsZS4gR2l2ZW4gdGhlIG5hbWVzLCBJJiMzOTttIGFzc3VtaW5nIHRoZXNlIGFyZSBsb3ctbGV2ZWwgaW5zdHJ1Y3Rpb25zIHJlbGF0ZWQgdG8gbG9hZGluZyBhbmQgc3RvcmluZyB0aGUgWCByZWdpc3RlciwgbGlrZWx5IHRhcmdldGVkIGZvciBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZSBvciBhc3NlbWJsZXIuIEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5ICpwcmVzZW50KiBpbiB0aGUgZmlsZS4gTm8gcG9pbnQgaW4gc3BlY3VsYXRpbmcgZnVydGhlciB1bnRpbCBJIHZlcmlmeSB0aGF0LiBJdCYjMzk7cyBzdGFuZGFyZCBwcmFjdGljZSB0byB2ZXJpZnkgdGhlaXIgZXhpc3RlbmNlIGZpcnN0IGJlZm9yZSBkZWx2aW5nIGludG8gdGhlIHJlc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW1pdF8uKngmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9Nzg4PXN0YXRpYyBpbnQgYnBmX2ppdF9wcm9iZV9wb3N0KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy04MzUtXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjgzNjpzdGF0aWMgaW50IGVtaXRfbGR4KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtODM3LXtcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTg2OC1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6ODY5OnN0YXRpYyBpbnQgZW1pdF9zdHgoc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy04NzAte1xuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9OTQ1PXN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0xNTU0LVx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0RXOlxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoxNTU1Olx0XHRlcnIgPSBlbWl0X3N0eChqaXQsIGZwLCBpbnNuKTtcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMTU1Ni1cdFx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE3MTktXHRcdFx0LyogczM5MCBoYXMgc3Ryb25nIG9yZGVyaW5nLCBqdXN0IHVzZSBsb2FkICovXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjE3MjA6XHRcdFx0ZXJyID0gZW1pdF9sZHgoaml0LCBmcCwgaW5zbik7XG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE3MjEtXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE3MjUtXHRcdFx0LyogczM5MCBoYXMgc3Ryb25nIG9yZGVyaW5nLCBqdXN0IHVzZSBzdG9yZSAqL1xuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoxNzI2Olx0XHRcdGVyciA9IGVtaXRfc3R4KGppdCwgZnAsIGluc24pO1xuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0xNzI3LVx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0xNzUyLVx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0RXOlxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoxNzUzOlx0XHRlcnIgPSBlbWl0X2xkeChqaXQsIGZwLCBpbnNuKTtcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMTc1NC1cdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYwNAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBjdXJyZW50IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBKSVQgQ29tcGlsYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIHRoZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIHRoZSBKSVQgY29tcGlsYXRpb24gcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGFyb3VuZCBsb2FkIGFuZCBzdG9yZSBvcGVyYXRpb25zLiBJdCBzZWVtcyBsaWtlIGBlbWl0X2xkeGAgYW5kIGBlbWl0X3N0eGAgYXJlIGdvb2QgY2FuZGlkYXRlcyB0byBleGFtaW5lIG1vcmUgY2xvc2VseTsgdGhleSBsaWtlbHkgcmVwcmVzZW50IHRoZSBjb3JlIGxvZ2ljIGZvciBnZW5lcmF0aW5nIGNvZGUgcmVsYXRlZCB0byB0aGVzZSBpbnN0cnVjdGlvbnMuIFRoYXQgZmVlbHMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcy4KCkkgYWxzbyBzZWUgdGhhdCBgYnBmX2ppdF9wcm9iZV9sb2FkX3ByZWAgYW5kIGBicGZfaml0X3Byb2JlX3N0b3JlX3ByZWAgaGF2ZSBiZWVuIG1vZGlmaWVkLiBUaGlzIHN1Z2dlc3RzIHRoZXJlIGlzIGEgbmV3IGZlYXR1cmUgb3Igb3B0aW1pemF0aW9uIGZvciB0aGUgcHJvYmVzLiBMZXQgbWUgZGlnIGRlZXBlciBpbnRvIHRob3NlIGJlY2F1c2UgdGhleSBhcmUgb2Z0ZW4gaW52b2x2ZWQgaW4gaW5zdHJ1bWVudGF0aW9uIG9mIHByb2JlcyB3aGljaCBjYW4gYmUgdmVyeSBpbnNpZ2h0ZnVsIGZvciBwZXJmb3JtYW5jZSB0dW5pbmcuCgpOb3csIGxldCYjMzk7cyBwaXZvdCB0byBpbnZlc3RpZ2F0ZSB0aGUgYnJvYWRlciBjYXBhYmlsaXRpZXMgb2YgdGhpcyBKSVQgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQgKmNhbiogaGFuZGxlLiBUbyBkbyB0aGlzLCBsZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGJwZl9qaXRfc3VwcG9ydHNfaW5zbmAuIFVuZGVyc3RhbmRpbmcgdGhpcyBjaGVjayB3aWxsIGxldCBtZSBkZXRlcm1pbmUgd2hhdCBpbnN0cnVjdGlvbnMgdGhlIEpJVCBlbmdpbmUgbmF0aXZlbHkgc3VwcG9ydHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ppdF9zdXBwb3J0c19pbnNuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTMwNDA9Ym9vbCBicGZfaml0X3N1cHBvcnRzX2ZzZXNzaW9uKHZvaWQpXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0zMDQ0LVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzozMDQ1OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMzA0Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMDYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQlBGIEpJVCBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgQlBGIEpJVCBjb21wb25lbnQgZm9yIGZ1enppbmcuIEkgdGhpbmsgYGJwZl9qaXRfc3VwcG9ydHNfaW5zbmAgaXMgYSBrZXkgc3ltYm9sIHRvIHRhcmdldCwgaXQgcHJvdmlkZXMgYSBjcnVjaWFsIGluaXRpYWwgY2hlY2suIFdhaXQgYSBzZWNvbmQsIHRoZSBgZW1pdF9sZHhgIGFuZCBgZW1pdF9zdHhgIGZ1bmN0aW9ucywgdGhvc2UgYXJlIHN0YXRpYywgcmlnaHQ/IElmIHRoZXkmIzM5O3JlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBpbWFnZSwgU3l6a2FsbGVyIGNhbiBkZWZpbml0ZWx5IGZ1enogdGhvc2UuIFRoZW4gdGhlcmXigJlzIHRoZSBiZWhlbW90aCwgYGJwZl9qaXRfaW5zbmAsIHRoZSBjb3JlIEpJVCBsb29wIGl0c2VsZi4gTWF5YmUgdGhhdOKAmXMgdG9vIG11Y2ggYXQgdGhpcyBzdGFnZS4KCkxldCYjMzk7cyByZWZpbmUgdGhlIGFwcHJvYWNoLiBGb2N1cyBvbiBgZW1pdF9sZHhgLCBgZW1pdF9zdHhgLCBhcyB3ZWxsIGFzIGBicGZfaml0X3Byb2JlX2xvYWRfcHJlYCwgYW5kIGBicGZfaml0X3Byb2JlX3N0b3JlX3ByZWAgLCBhbG9uZ3NpZGUgYGJwZl9qaXRfc3VwcG9ydHNfaW5zbmAuIE9oLCBob2xkIG9u4oCmIGBicGZfaml0X3Byb2JlX2xvYWRfcHJlYCBhbmQgYGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlYCBhcmUgc3RhdGljIHRvby4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgb3IgYnVpbGQgb3B0aW9ucyByZXF1aXJlZCB0byBlbmFibGUgdGhlbS4KClJpZ2h0LCBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgdGhlIGNvZGUgaXMgbG9jYXRlZC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBpbiBgYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY2AuIE9rYXksIHRoYXQgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNob3VsZCB2ZXJpZnkgdGhhdCB0aGlzIGNvZGUgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JQRl9KSVRgIGlzIGVuYWJsZWQuIFRpbWUgdG8gY2hlY2sgdGhlIE1ha2VmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaml0X2NvbXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3MzOTAvbmV0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9uZXQvTWFrZWZpbGUtNC0jXG5hcmNoL3MzOTAvbmV0L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSBicGZfaml0X2NvbXAubyBicGZfdGltZWRfbWF5X2dvdG8ub1xuYXJjaC9zMzkwL25ldC9NYWtlZmlsZS02LW9iai0kKENPTkZJR19IQVZFX1BORVRJRCkgJiM0Mzs9IHBuZXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgwMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBKSVQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGl0ZW0gaGVyZSBpcyBgQlBGX0pJVGAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgZW5hYmxlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwuIEFyZSB0aGVyZSBhbnkgKm90aGVyKiByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gVGhpcyBwYXRjaCBpcyBzcGVjaWZpY2FsbHkgYWJvdXQgc3VwcG9ydGluZyBgQlBGX1BST0JFX0FUT01JQ2AgYW5kIGBCUEZfTE9BRF9BQ1FgL2BCUEZfU1RPUkVfUkVMYCB3aXRoaW4gdGhlIHMzOTAgQlBGIEpJVCBjb21waWxlci4gVGhlc2UgYXJlIGZhaXJseSBzaWduaWZpY2FudCBCUEYgZmVhdHVyZXMsIHNvIGl0IHdhcnJhbnRzIGEgdGhvcm91Z2ggcmV2aWV3IG9mIHRoZSBjb25maWd1cmF0aW9uLgoKSSBzZWUgdGhlIHNlbGZ0ZXN0cyBhcmUgdXNpbmcgYEVOQUJMRV9BVE9NSUNTX1RFU1RTYCBhbmQgYF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEhvd2V2ZXIsIG9uIHRoZSBrZXJuZWwgc2lkZSwgaXQgc2VlbXMgbGlrZSBqdXN0IGBCUEZfSklUYCBhbG9uZSBpcyBzdWZmaWNpZW50IGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkgdG8gYmUgcHJvcGVybHkgZW5hYmxlZC4gSSBzdGlsbCB3YW50IHRvIGJlIGNlcnRhaW4sIHRob3VnaC4gVG8gYmUgY29tcGxldGVseSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgYW5kIGNyb3NzLXJlZmVyZW5jZSB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgYXNzb2NpYXRlZCBjb2RlIHRvIHZlcmlmeSB0aGF0IHRoZXJlIGFyZSBubyBoaWRkZW4gZGVwZW5kZW5jaWVzIG9yIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucyBJIGhhdmVuJiMzOTt0IGFjY291bnRlZCBmb3IuIEkgYWx3YXlzIHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIGFueXRoaW5nIGNyaXRpY2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19CUEZfSklUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzIzNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRoYXQgYEJQRl9KSVRgLi4uIHRoYXQmIzM5O3MgYSAqZ2VuZXJpYyogY29uZmlndXJhdGlvbiBvcHRpb24sIHJpZ2h0PyBJdCYjMzk7cyBub3QgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCBhdCBsZWFzdCBub3QgZGlyZWN0bHkuIEJ1dCBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBob29rcyBvciBkZXBlbmRlbmNpZXMuIFNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS2NvbmZpZyBmaWxlcywgc3RhcnRpbmcgd2l0aCBgYXJjaC9zMzkwL0tjb25maWdgIGJlY2F1c2UgdGhhdCYjMzk7cyB0aGUgY3VycmVudCBhcmVhIG9mIGZvY3VzLCBhbmQgY2hlY2tpbmcgZm9yIEJQRi1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoZXJlLiBUaGF0IHNob3VsZCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIHNpdHVhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL0tjb25maWc9NzU9Y29uZmlnIFMzOTBcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy0xNTctXHRzZWxlY3QgQVJDSF9XQU5UU19OT19JTlNUUlxuYXJjaC9zMzkwL0tjb25maWc6MTU4Olx0c2VsZWN0IEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVRcbmFyY2gvczM5MC9LY29uZmlnLTE1OS1cdHNlbGVjdCBBUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT05cbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy0yMDUtXHRzZWxlY3QgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1NcbmFyY2gvczM5MC9LY29uZmlnOjIwNjpcdHNlbGVjdCBIQVZFX0VCUEZfSklUIGlmIEhBVkVfTUFSQ0hfWjE5Nl9GRUFUVVJFU1xuYXJjaC9zMzkwL0tjb25maWctMjA3LVx0c2VsZWN0IEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1NcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MzMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBKSVQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgYEJQRl9KSVRgIG9wdGlvbiBzZWVtcyB0byBiZSBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgaWYgYEhBVkVfRUJQRl9KSVRgIGlzIGNob3Nlbiwgd2hpY2ggaW4gdHVybiByZWxpZXMgb24gYEhBVkVfTUFSQ0hfWjE5Nl9GRUFUVVJFU2AuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBUaGUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IHdlIGRvbiYjMzk7dCBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0IGBCUEZfSklUYCBhcyBhIGNvbmZpZyBvcHRpb247IGl0IHNob3VsZCBiZSBoYW5kbGVkIGJhc2VkIG9uIHRob3NlIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgYSBmYWlybHkgZ2VuZXJpYyBjb25maWcgb3B0aW9uLgoKTm93LCBob2xkIG9uLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBvbmx5IGxpc3QgY29uZmlncyB0aGF0ICpzcGVjaWZpY2FsbHkqIHJlbGF0ZSB0byB0aGUgbW9kaWZpZWQgY29kZSwgYW5kIHRvIGxlYXZlIG91dCB0aGUgbW9yZSBnZW5lcmFsIG9wdGlvbnMgc2luY2UgdGhvc2UgYXJlIGxpa2VseSBhbHJlYWR5IGVuYWJsZWQuIEdpdmVuIHRoYXQsIGxpc3RpbmcgYEJQRl9KSVRgIGl0c2VsZiBtaWdodCBiZSByZWR1bmRhbnQuCgpIbW0sIGJ1dCB3aGF0IGFib3V0IG1vcmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBkZWFsIHdpdGggQlBGIGFyZW5hIGFsbG9jYXRpb25zIG9yIGF0b21pYyBvcGVyYXRpb25zPyBBcmUgdGhlcmUgYW55IHRoYXQgc3BlY2lmaWNhbGx5IHBlcnRhaW4gdG8gb3VyIGNoYW5nZXM/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlIG9yIHNvbWV0aGluZyBzaW1pbGFyIHRvIHNlZSBpZiBhbnkgb2YgdGhvc2UgbW9yZSBzcGVjaWFsaXplZCBjb25maWdzIG5lZWQgdG8gYmUgY2FsbGVkIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBUkVOQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDY5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgcmVmbGVjdGluZyB0aGUgZGVzY3JpYmVkIHRob3VnaHQgcHJvY2VzczoKCioqQlBGIENvbmZpZ3VyYXRpb24gSHVudCoqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gQmVya2VsZXkgUGFja2V0IEZpbHRlciAoQlBGKSB3aXRoaW4gdGhpcyBrZXJuZWwgYnVpbGQgc3lzdGVtLiBHaXZlbiB0aGUgY29tbW9uIHByYWN0aWNlIGFuZCBteSBleHBlcmllbmNlLCB0aGUgZmlyc3QgcGxhY2UgSSYjMzk7bSBnb2luZyB0byBjaGVjayBpcyBsaWtlbHkgdGhlIG1haW4gY29uZmlndXJhdGlvbiBmaWxlLCBgaW5pdC9LY29uZmlnYC4gSXQmIzM5O3MgdGhlIHVzdWFsIHN0YXJ0aW5nIHBvaW50IGZvciB0b3AtbGV2ZWwgZmVhdHVyZSBzZWxlY3Rpb25zLiBJZiB0aGF0IGRvZXNuJiMzOTt0IGltbWVkaWF0ZWx5IHlpZWxkIHRoZSBzcGVjaWZpYyBCUEYgc2V0dGluZ3MsIG15IG5leHQgcG9ydCBvZiBjYWxsIGlzIHByYWN0aWNhbGx5IGd1YXJhbnRlZWQgdG8gYmUgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRoYXQgZGlyZWN0b3J5IGlzIHRoZSBsb2dpY2FsIGhvbWUgZm9yIEJQRi1zcGVjaWZpYyBjb25maWd1cmF0aW9ucywgZ2l2ZW4gaXRzIGNvcmUgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bGwgZm9jdXMgbXkgc2VhcmNoIHRoZXJlIGlmIGBpbml0L0tjb25maWdgIGRvZXNuJiMzOTt0IHByb3ZpZGUgd2hhdCBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWctMi1cbmtlcm5lbC9icGYvS2NvbmZpZzozOiMgQlBGIGludGVycHJldGVyIHRoYXQsIGZvciBleGFtcGxlLCBjbGFzc2ljIHNvY2tldCBmaWx0ZXJzIGRlcGVuZCBvbi5cbmtlcm5lbC9icGYvS2NvbmZpZzo0OmNvbmZpZyBCUEZcbmtlcm5lbC9icGYvS2NvbmZpZy01LVx0Ym9vbFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy03LVxua2VybmVsL2JwZi9LY29uZmlnOjg6IyBVc2VkIGJ5IGFyY2hzIHRvIHRlbGwgdGhhdCB0aGV5IHN1cHBvcnQgQlBGIEpJVCBjb21waWxlciBwbHVzIHdoaWNoXG5rZXJuZWwvYnBmL0tjb25maWctOS0jIGZsYXZvdXIuIE9ubHkgb25lIG9mIHRoZSB0d28gY2FuIGJlIHNlbGVjdGVkIGZvciBhIHNwZWNpZmljIGFyY2ggc2luY2Vcbmtlcm5lbC9icGYvS2NvbmZpZzoxMDojIGVCUEYgSklUIHN1cGVyc2VkZXMgdGhlIGNCUEYgSklULlxua2VybmVsL2JwZi9LY29uZmlnLTExLVxua2VybmVsL2JwZi9LY29uZmlnOjEyOiMgQ2xhc3NpYyBCUEYgSklUIChjQlBGKVxua2VybmVsL2JwZi9LY29uZmlnOjEzOmNvbmZpZyBIQVZFX0NCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctMTQtXHRib29sXG5rZXJuZWwvYnBmL0tjb25maWctMTUtXG5rZXJuZWwvYnBmL0tjb25maWc6MTY6IyBFeHRlbmRlZCBCUEYgSklUIChlQlBGKVxua2VybmVsL2JwZi9LY29uZmlnOjE3OmNvbmZpZyBIQVZFX0VCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctMTgtXHRib29sXG5rZXJuZWwvYnBmL0tjb25maWctMTktXG5rZXJuZWwvYnBmL0tjb25maWc6MjA6IyBVc2VkIGJ5IGFyY2hzIHRvIHRlbGwgdGhhdCB0aGV5IHdhbnQgdGhlIEJQRiBKSVQgY29tcGlsZXIgZW5hYmxlZCBieVxua2VybmVsL2JwZi9LY29uZmlnOjIxOiMgZGVmYXVsdCBmb3Iga2VybmVscyB0aGF0IHdlcmUgY29tcGlsZWQgd2l0aCBCUEYgSklUIHN1cHBvcnQuXG5rZXJuZWwvYnBmL0tjb25maWc6MjI6Y29uZmlnIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVRcbmtlcm5lbC9icGYvS2NvbmZpZy0yMy1cdGJvb2xcbmtlcm5lbC9icGYvS2NvbmZpZy0yNC1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNTptZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWc6Mjk6XHRzZWxlY3QgQlBGXG5rZXJuZWwvYnBmL0tjb25maWctMzAtXHRzZWxlY3QgSVJRX1dPUktcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctMzgtXHRoZWxwXG5rZXJuZWwvYnBmL0tjb25maWc6Mzk6XHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcbmtlcm5lbC9icGYvS2NvbmZpZy00MC1cdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXG5rZXJuZWwvYnBmL0tjb25maWc6NDI6Y29uZmlnIEJQRl9KSVRcbmtlcm5lbC9icGYvS2NvbmZpZzo0MzpcdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZzo0NDpcdGRlcGVuZHMgb24gQlBGXG5rZXJuZWwvYnBmL0tjb25maWc6NDU6XHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTQ2LVx0c2VsZWN0IEVYRUNNRU1cbmtlcm5lbC9icGYvS2NvbmZpZy00Ny1cdGhlbHBcbmtlcm5lbC9icGYvS2NvbmZpZzo0ODpcdCAgQlBGIHByb2dyYW1zIGFyZSBub3JtYWxseSBoYW5kbGVkIGJ5IGEgQlBGIGludGVycHJldGVyLiBUaGlzIG9wdGlvblxua2VybmVsL2JwZi9LY29uZmlnLTQ5LVx0ICBhbGxvd3MgdGhlIGtlcm5lbCB0byBnZW5lcmF0ZSBuYXRpdmUgY29kZSB3aGVuIGEgcHJvZ3JhbSBpcyBsb2FkZWRcbmtlcm5lbC9icGYvS2NvbmZpZzo1MDpcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxua2VybmVsL2JwZi9LY29uZmlnLTUxLVx0ICBwcm9ncmFtcy5cbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNTctXG5rZXJuZWwvYnBmL0tjb25maWc6NTg6Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG5rZXJuZWwvYnBmL0tjb25maWc6NTk6XHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWc6NjA6XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMIFx1MDAyNlx1MDAyNiBIQVZFX0VCUEZfSklUIFx1MDAyNlx1MDAyNiBCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctNjEtXHRoZWxwXG5rZXJuZWwvYnBmL0tjb25maWc6NjI6XHQgIEVuYWJsZXMgQlBGIEpJVCBhbmQgcmVtb3ZlcyBCUEYgaW50ZXJwcmV0ZXIgdG8gYXZvaWQgc3BlY3VsYXRpdmVcbmtlcm5lbC9icGYvS2NvbmZpZzo2MzpcdCAgZXhlY3V0aW9uIG9mIEJQRiBpbnN0cnVjdGlvbnMgYnkgdGhlIGludGVycHJldGVyLlxua2VybmVsL2JwZi9LY29uZmlnLTY0LVxua2VybmVsL2JwZi9LY29uZmlnOjY1Olx0ICBXaGVuIENPTkZJR19CUEZfSklUX0FMV0FZU19PTiBpcyBlbmFibGVkLCAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcbmtlcm5lbC9icGYvS2NvbmZpZy02Ni1cdCAgaXMgcGVybWFuZW50bHkgc2V0IHRvIDEgYW5kIHNldHRpbmcgYW55IG90aGVyIHZhbHVlIHRoYW4gdGhhdCB3aWxsXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTY4LVxua2VybmVsL2JwZi9LY29uZmlnOjY5OmNvbmZpZyBCUEZfSklUX0RFRkFVTFRfT05cbmtlcm5lbC9icGYvS2NvbmZpZzo3MDpcdGRlZl9ib29sIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQgfHwgQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvS2NvbmZpZzo3MTpcdGRlcGVuZHMgb24gSEFWRV9FQlBGX0pJVCBcdTAwMjZcdTAwMjYgQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTcyLVxua2VybmVsL2JwZi9LY29uZmlnOjczOmNvbmZpZyBCUEZfVU5QUklWX0RFRkFVTFRfT0ZGXG5rZXJuZWwvYnBmL0tjb25maWc6NzQ6XHRib29sIFwmIzM0O0Rpc2FibGUgdW5wcml2aWxlZ2VkIEJQRiBieSBkZWZhdWx0XCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctNzUtXHRkZWZhdWx0IHlcbmtlcm5lbC9icGYvS2NvbmZpZzo3NjpcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy03Ny1cdGhlbHBcbmtlcm5lbC9icGYvS2NvbmZpZzo3ODpcdCAgRGlzYWJsZXMgdW5wcml2aWxlZ2VkIEJQRiBieSBkZWZhdWx0IGJ5IHNldHRpbmcgdGhlIGNvcnJlc3BvbmRpbmdcbmtlcm5lbC9icGYvS2NvbmZpZy03OS1cdCAgL3Byb2Mvc3lzL2tlcm5lbC91bnByaXZpbGVnZWRfYnBmX2Rpc2FibGVkIGtub2IgdG8gMi4gQW4gYWRtaW4gY2FuXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTgzLVxua2VybmVsL2JwZi9LY29uZmlnOjg0Olx0ICBVbnByaXZpbGVnZWQgQlBGIGNvdWxkIGJlIHVzZWQgdG8gZXhwbG9pdCBjZXJ0YWluIHBvdGVudGlhbFxua2VybmVsL2JwZi9LY29uZmlnLTg1LVx0ICBzcGVjdWxhdGl2ZSBleGVjdXRpb24gc2lkZS1jaGFubmVsIHZ1bG5lcmFiaWxpdGllcyBvbiB1bm1pdGlnYXRlZFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZz05MD1zb3VyY2UgXCYjMzQ7a2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy05MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo5Mjpjb25maWcgQlBGX0xTTVxua2VybmVsL2JwZi9LY29uZmlnOjkzOlx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZzo5NDpcdGRlcGVuZHMgb24gQlBGX0VWRU5UU1xua2VybmVsL2JwZi9LY29uZmlnOjk1Olx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTk2LVx0ZGVwZW5kcyBvbiBTRUNVUklUWVxua2VybmVsL2JwZi9LY29uZmlnOjk3Olx0ZGVwZW5kcyBvbiBCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctOTgtXHRoZWxwXG5rZXJuZWwvYnBmL0tjb25maWc6OTk6XHQgIEVuYWJsZXMgaW5zdHJ1bWVudGF0aW9uIG9mIHRoZSBzZWN1cml0eSBob29rcyB3aXRoIEJQRiBwcm9ncmFtcyBmb3Jcbmtlcm5lbC9icGYvS2NvbmZpZy0xMDAtXHQgIGltcGxlbWVudGluZyBkeW5hbWljIE1BQyBhbmQgQXVkaXQgUG9saWNpZXMuXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTEwMy1cbmtlcm5lbC9icGYvS2NvbmZpZzoxMDQ6ZW5kbWVudSAjIFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NTgKCQkJCQkJCW91dHB1dDogMTU2CgkJCQkJCQl0aG91Z2h0czogMjY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEJQRiBKSVQgQ29uZmlndXJhdGlvbiBhbmQgS2V5IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBCUEYgSklUIGNvbmZpZ3VyYXRpb24uIEZyb20gYSBoaWdoIGxldmVsLCBgQlBGX0pJVGAgaXMgdGhlIGNvcmUgY29uZmlndXJhdGlvbiB0byBjb25zaWRlciwgd2hpY2ggaXMgZ2VuZXJpYy4gTm8gbmVlZCB0byBsaXN0IHNwZWNpZmljIGNvbmZpZyBkZXRhaWxzIHNpbmNlIGBCUEZfSklUYCBpcyB0aGUgbWFpbiBlbmFibGVyLCBhbmQgaXQmIzM5O3MgYWxyZWFkeSBlbmFibGVkIGluIG15IHNldHVwLiBJJiMzOTttIGdvaW5nIHRvIGNvbnNpZGVyIGl0IGFzIGEgZ2l2ZW4uCgpOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3Qgb3Zlcmxvb2sgYW55IHJlbGV2YW50IGRldGFpbHMuIEhtbSwgbm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBgQlBGX1BST0JFX0FUT01JQ2AgZXhpc3Q7IGl0IGxvb2tzIGxpa2UgdGhhdCYjMzk7cyBqdXN0IHBhcnQgb2YgdGhlIEJQRiBpbnN0cnVjdGlvbiBzZXQgaXRzZWxmLiBHb29kIHRvIGtub3cuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIHN5bWJvbHMuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlc2UgZnVuY3Rpb25zOiBgZW1pdF9sZHhgLCBgZW1pdF9zdHhgLCBgYnBmX2ppdF9wcm9iZV9sb2FkX3ByZWAsIGBicGZfaml0X3Byb2JlX3N0b3JlX3ByZWAsIGFuZCBgYnBmX2ppdF9zdXBwb3J0c19pbnNuYC4KCkl0IHNlZW1zIGxpa2UgYGVtaXRfbGR4YCBhbmQgYGVtaXRfc3R4YCBhcmUgdGhlIGtleSBsb2FkL3N0b3JlIGZ1bmN0aW9ucy4gTGV0IG1lIGRvdWJsZS1jaGVjay4gWWVzLCB0aGV5JiMzOTtyZSB0aGUgcHJpbWFyeSBvbmVzLCBhcyBJIHN1c3BlY3RlZC4gSW50ZXJlc3RpbmdseSwgSSBzZWUgdGhhdCB0aGV5IGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMgZnVuY3Rpb25zLiBBcmUgdGhleSBhY2Nlc3NpYmxlPyBZZXMsIHRoZXkmIzM5O3JlIGNhbGxlZCBmcm9tIGBicGZfaml0X2luc25gLiBBbmQgYXJlIHRoZXJlIG90aGVyIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byBjb25zaWRlcj8KCkkgc2VlIHRoYXQgYGJwZl9qaXRfcHJvYmVfbG9hZF9wcmVgIGFuZCBgYnBmX2ppdF9wcm9iZV9zdG9yZV9wcmVgIGFyZSBhbHNvIHN0YXRpYywgYW5kIHRoZXkmIzM5O3JlIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBlbWl0X2xkeGAgYW5kIGBlbWl0X3N0eGAuIEl0JiMzOTtzIGltcG9ydGFudCB0byBkb2N1bWVudCB0aGVzZSByZWxhdGlvbnNoaXBzLgoKUmlnaHQsIHNvIEkgd2lsbCBub3cgbGlzdCB0aG9zZSBrZXkgZnVuY3Rpb25zIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIHRvIGNvbmNsdWRlIHRoZSBhc3Nlc3NtZW50IHVzaW5nIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE4OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbWl0X2xkeCYjMzQ7LAogICAgJiMzNDtlbWl0X3N0eCYjMzQ7LAogICAgJiMzNDticGZfaml0X3Byb2JlX2xvYWRfcHJlJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfcHJvYmVfc3RvcmVfcHJlJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfaW5zbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIEJQRl9QUk9CRV9BVE9NSUMsIEJQRl9MT0FEX0FDUSwgYW5kIEJQRl9TVE9SRV9SRUwgaW5zdHJ1Y3Rpb25zIGluIHRoZSBzMzkwIEJQRiBKSVQgY29tcGlsZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBCUEYgSklUIGxvZ2ljIG9uIHMzOTAgYXJjaGl0ZWN0dXJlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbWl0X2xkeCYjMzQ7LAogICAgJiMzNDtlbWl0X3N0eCYjMzQ7LAogICAgJiMzNDticGZfaml0X3Byb2JlX2xvYWRfcHJlJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfcHJvYmVfc3RvcmVfcHJlJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfaW5zbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIEJQRl9QUk9CRV9BVE9NSUMsIEJQRl9MT0FEX0FDUSwgYW5kIEJQRl9TVE9SRV9SRUwgaW5zdHJ1Y3Rpb25zIGluIHRoZSBzMzkwIEJQRiBKSVQgY29tcGlsZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBCUEYgSklUIGxvZ2ljIG9uIHMzOTAgYXJjaGl0ZWN0dXJlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjA0OjA1LjQzODY5ODA5NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzI5ODAwNDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVtaXRfbGR4XCIsXG4gICAgXCJlbWl0X3N0eFwiLFxuICAgIFwiYnBmX2ppdF9wcm9iZV9sb2FkX3ByZVwiLFxuICAgIFwiYnBmX2ppdF9wcm9iZV9zdG9yZV9wcmVcIixcbiAgICBcImJwZl9qaXRfc3VwcG9ydHNfaW5zblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgQlBGX1BST0JFX0FUT01JQywgQlBGX0xPQURfQUNRLCBhbmQgQlBGX1NUT1JFX1JFTCBpbnN0cnVjdGlvbnMgaW4gdGhlIHMzOTAgQlBGIEpJVCBjb21waWxlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIEJQRiBKSVQgbG9naWMgb24gczM5MCBhcmNoaXRlY3R1cmUgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODowNDowNS40Mzg3MDU4OTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1OTU0MDE0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI4OWQxMWQ0Y2Y2NzY4ZDAxZTFhMDk0MWU3ZjQzNTdkMzA4ZTkyMmRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMjQgMTg6MDQ6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNcXG5pbmRleCAzMTc0OWMwMzYyY2EyMy4uYzk4YWIyZWVjZTU3ZjUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1xcbisrKyBiL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNcXG5AQCAtNzQzLDEwICs3NDMsMTIgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9iZV9sb2FkX3ByZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIHtcXG4gXFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU0gXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU1TWCBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTTMyKVxcbitcXHQgICAgQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTTMyIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfQVRPTUlDKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyKSB7XFxuK1xcdGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIgfHxcXG4rXFx0ICAgIEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9BVE9NSUMpIHtcXG4gXFx0XFx0LyogbGdybCAlcjEsa2Vybl9hcmVuYSAqL1xcbiBcXHRcXHRFTUlUNl9QQ1JFTF9SSUxCKDB4YzQwODAwMDAsIFJFR19XMSwgaml0LVxcdTAwM2VrZXJuX2FyZW5hKTtcXG4gXFx0XFx0cHJvYmUtXFx1MDAzZWFyZW5hX3JlZyA9IFJFR19XMTtcXG5AQCAtNzU4LDcgKzc2MCw4IEBAIHN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBzdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX3N0b3JlX3ByZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpXFxuIHtcXG4tXFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU0zMilcXG4rXFx0aWYgKEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9QUk9CRV9NRU0zMiBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX0FUT01JQylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0LyogbGdybCAlcjEsa2Vybl9hcmVuYSAqL1xcbkBAIC04MzAsNiArODMzLDcyIEBAIHN0YXRpYyBpbnQgYnBmX2ppdF9wcm9iZV9wb3N0KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGVtaXRfbGR4KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2ppdF9wcm9iZSBwcm9iZTtcXG4rXFxuK1xcdGJwZl9qaXRfcHJvYmVfaW5pdChcXHUwMDI2cHJvYmUpO1xcbitcXHRicGZfaml0X3Byb2JlX2xvYWRfcHJlKGppdCwgaW5zbiwgXFx1MDAyNnByb2JlKTtcXG4rXFxuK1xcdHN3aXRjaCAoQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkpIHtcXG4rXFx0Y2FzZSBCUEZfQjogLyogZHN0ID0gKih1OCAqKSh1bCkgKHNyYyArIG9mZikgKi9cXG4rXFx0XFx0LyogbGxnYyAlZHN0LG9mZiglc3JjLCVhcmVuYSkgKi9cXG4rXFx0XFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwOTAsIGluc24tXFx1MDAzZWRzdF9yZWcsIGluc24tXFx1MDAzZXNyY19yZWcsXFxuK1xcdFxcdFxcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgaW5zbi1cXHUwMDNlb2ZmKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX0g6IC8qIGRzdCA9ICoodTE2ICopKHVsKSAoc3JjICsgb2ZmKSAqL1xcbitcXHRcXHQvKiBsbGdoICVkc3Qsb2ZmKCVzcmMsJWFyZW5hKSAqL1xcbitcXHRcXHRFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDA5MSwgaW5zbi1cXHUwMDNlZHN0X3JlZywgaW5zbi1cXHUwMDNlc3JjX3JlZyxcXG4rXFx0XFx0XFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBpbnNuLVxcdTAwM2VvZmYpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfVzogLyogZHN0ID0gKih1MzIgKikodWwpIChzcmMgKyBvZmYpICovXFxuK1xcdFxcdC8qIGxsZ2YgJWRzdCxvZmYoJXNyYywlYXJlbmEpICovXFxuK1xcdFxcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDE2LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBpbnNuLVxcdTAwM2VzcmNfcmVnLFxcbitcXHRcXHRcXHQgICAgICBwcm9iZS5hcmVuYV9yZWcsIGluc24tXFx1MDAzZW9mZik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9EVzogLyogZHN0ID0gKih1NjQgKikodWwpIChzcmMgKyBvZmYpICovXFxuK1xcdFxcdC8qIGxnICVkc3Qsb2ZmKCVzcmMsJWFyZW5hKSAqL1xcbitcXHRcXHRFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDAwNCwgaW5zbi1cXHUwMDNlZHN0X3JlZywgaW5zbi1cXHUwMDNlc3JjX3JlZyxcXG4rXFx0XFx0XFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBpbnNuLVxcdTAwM2VvZmYpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGJwZl9qaXRfcHJvYmVfcG9zdChqaXQsIGZwLCBcXHUwMDI2cHJvYmUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGVtaXRfc3R4KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2ppdF9wcm9iZSBwcm9iZTtcXG4rXFxuK1xcdGJwZl9qaXRfcHJvYmVfaW5pdChcXHUwMDI2cHJvYmUpO1xcbitcXHRicGZfaml0X3Byb2JlX3N0b3JlX3ByZShqaXQsIGluc24sIFxcdTAwMjZwcm9iZSk7XFxuK1xcbitcXHRzd2l0Y2ggKEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpKSB7XFxuK1xcdGNhc2UgQlBGX0I6IC8qICoodTggKikoZHN0ICsgb2ZmKSA9IHNyY19yZWcgKi9cXG4rXFx0XFx0Lyogc3RjeSAlc3JjLG9mZiglZHN0LCVhcmVuYSkgKi9cXG4rXFx0XFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwNzIsIGluc24tXFx1MDAzZXNyY19yZWcsIGluc24tXFx1MDAzZWRzdF9yZWcsXFxuK1xcdFxcdFxcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgaW5zbi1cXHUwMDNlb2ZmKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX0g6IC8qICh1MTYgKikoZHN0ICsgb2ZmKSA9IHNyYyAqL1xcbitcXHRcXHQvKiBzdGh5ICVzcmMsb2ZmKCVkc3QsJWFyZW5hKSAqL1xcbitcXHRcXHRFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDA3MCwgaW5zbi1cXHUwMDNlc3JjX3JlZywgaW5zbi1cXHUwMDNlZHN0X3JlZyxcXG4rXFx0XFx0XFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBpbnNuLVxcdTAwM2VvZmYpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfVzogLyogKih1MzIgKikoZHN0ICsgb2ZmKSA9IHNyYyAqL1xcbitcXHRcXHQvKiBzdHkgJXNyYyxvZmYoJWRzdCwlYXJlbmEpICovXFxuK1xcdFxcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDUwLCBpbnNuLVxcdTAwM2VzcmNfcmVnLCBpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbitcXHRcXHRcXHQgICAgICBwcm9iZS5hcmVuYV9yZWcsIGluc24tXFx1MDAzZW9mZik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9EVzogLyogKHU2NCAqKShkc3QgKyBvZmYpID0gc3JjICovXFxuK1xcdFxcdC8qIHN0ZyAlc3JjLG9mZiglZHN0LCVhcmVuYSkgKi9cXG4rXFx0XFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwMjQsIGluc24tXFx1MDAzZXNyY19yZWcsIGluc24tXFx1MDAzZWRzdF9yZWcsXFxuK1xcdFxcdFxcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgaW5zbi1cXHUwMDNlb2ZmKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXFx1MDAyNnByb2JlKTtcXG4rfVxcbitcXG4gLypcXG4gICogU2lnbi0gb3IgemVyby1leHRlbmQgdGhlIHJlZ2lzdGVyIGlmIG5lY2Vzc2FyeVxcbiAgKi9cXG5AQCAtMTQ3Nyw0NCArMTU0NiwxMyBAQCBzdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxcbiBcXHQgKi9cXG4gXFx0Y2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9COiAvKiAqKHU4ICopKGRzdCArIG9mZikgPSBzcmNfcmVnICovXFxuIFxcdGNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9COlxcbi1cXHRcXHRicGZfaml0X3Byb2JlX3N0b3JlX3ByZShqaXQsIGluc24sIFxcdTAwMjZwcm9iZSk7XFxuLVxcdFxcdC8qIHN0Y3kgJXNyYyxvZmYoJWRzdCwlYXJlbmEpICovXFxuLVxcdFxcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDcyLCBzcmNfcmVnLCBkc3RfcmVnLFxcbi1cXHRcXHRcXHQgICAgICBwcm9iZS5hcmVuYV9yZWcsIG9mZik7XFxuLVxcdFxcdGVyciA9IGJwZl9qaXRfcHJvYmVfcG9zdChqaXQsIGZwLCBcXHUwMDI2cHJvYmUpO1xcbi1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0XFx0aml0LVxcdTAwM2VzZWVuIHw9IFNFRU5fTUVNO1xcbi1cXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9IOiAvKiAodTE2ICopKGRzdCArIG9mZikgPSBzcmMgKi9cXG4gXFx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0g6XFxuLVxcdFxcdGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKGppdCwgaW5zbiwgXFx1MDAyNnByb2JlKTtcXG4tXFx0XFx0Lyogc3RoeSAlc3JjLG9mZiglZHN0LCVhcmVuYSkgKi9cXG4tXFx0XFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwNzAsIHNyY19yZWcsIGRzdF9yZWcsXFxuLVxcdFxcdFxcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgb2ZmKTtcXG4tXFx0XFx0ZXJyID0gYnBmX2ppdF9wcm9iZV9wb3N0KGppdCwgZnAsIFxcdTAwMjZwcm9iZSk7XFxuLVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRyZXR1cm4gZXJyO1xcbi1cXHRcXHRqaXQtXFx1MDAzZXNlZW4gfD0gU0VFTl9NRU07XFxuLVxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEJQRl9TVFggfCBCUEZfTUVNIHwgQlBGX1c6IC8qICoodTMyICopKGRzdCArIG9mZikgPSBzcmMgKi9cXG4gXFx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX1c6XFxuLVxcdFxcdGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKGppdCwgaW5zbiwgXFx1MDAyNnByb2JlKTtcXG4tXFx0XFx0Lyogc3R5ICVzcmMsb2ZmKCVkc3QsJWFyZW5hKSAqL1xcbi1cXHRcXHRFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDA1MCwgc3JjX3JlZywgZHN0X3JlZyxcXG4tXFx0XFx0XFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpO1xcbi1cXHRcXHRlcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXFx1MDAyNnByb2JlKTtcXG4tXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuLVxcdFxcdGppdC1cXHUwMDNlc2VlbiB8PSBTRUVOX01FTTtcXG4tXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgQlBGX1NUWCB8IEJQRl9NRU0gfCBCUEZfRFc6IC8qICh1NjQgKikoZHN0ICsgb2ZmKSA9IHNyYyAqL1xcbiBcXHRjYXNlIEJQRl9TVFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfRFc6XFxuLVxcdFxcdGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKGppdCwgaW5zbiwgXFx1MDAyNnByb2JlKTtcXG4tXFx0XFx0Lyogc3RnICVzcmMsb2ZmKCVkc3QsJWFyZW5hKSAqL1xcbi1cXHRcXHRFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDAyNCwgc3JjX3JlZywgZHN0X3JlZyxcXG4tXFx0XFx0XFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpO1xcbi1cXHRcXHRlcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXFx1MDAyNnByb2JlKTtcXG4rXFx0XFx0ZXJyID0gZW1pdF9zdHgoaml0LCBmcCwgaW5zbik7XFxuIFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHRqaXQtXFx1MDAzZXNlZW4gfD0gU0VFTl9NRU07XFxuQEAgLTE1NzQsMTkgKzE2MTIsMjMgQEAgc3RhdGljIG5vaW5saW5lIGludCBicGZfaml0X2luc24oc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcXG4gXFx0LypcXG4gXFx0ICogQlBGX0FUT01JQ1xcbiBcXHQgKi9cXG4rXFx0Y2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9COlxcbitcXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0g6XFxuIFxcdGNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfRFc6XFxuIFxcdGNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfVzpcXG4rXFx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX0FUT01JQyB8IEJQRl9COlxcbitcXHRjYXNlIEJQRl9TVFggfCBCUEZfUFJPQkVfQVRPTUlDIHwgQlBGX0g6XFxuIFxcdGNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9BVE9NSUMgfCBCUEZfRFc6XFxuIFxcdGNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9BVE9NSUMgfCBCUEZfVzpcXG4gXFx0e1xcbiBcXHRcXHRib29sIGlzMzIgPSBCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfVztcXG4gXFxuIFxcdFxcdC8qXFxuLVxcdFxcdCAqIFVubGlrZSBsb2FkcyBhbmQgc3RvcmVzLCBhdG9taWNzIGhhdmUgb25seSBhIGJhc2UgcmVnaXN0ZXIsXFxuLVxcdFxcdCAqIGJ1dCBubyBpbmRleCByZWdpc3Rlci4gRm9yIHRoZSBub24tYXJlbmEgY2FzZSwgc2ltcGx5IHVzZVxcbi1cXHRcXHQgKiAlZHN0IGFzIGEgYmFzZS4gRm9yIHRoZSBhcmVuYSBjYXNlLCB1c2UgdGhlIHdvcmsgcmVnaXN0ZXJcXG4tXFx0XFx0ICogJXIxOiBmaXJzdCwgbG9hZCB0aGUgYXJlbmEgYmFzZSBpbnRvIGl0LCBhbmQgdGhlbiBhZGQgJWRzdFxcbi1cXHRcXHQgKiB0byBpdC5cXG4rXFx0XFx0ICogVW5saWtlIGxvYWRzIGFuZCBzdG9yZXMsIHMzOTAgYXRvbWljcyBoYXZlIG9ubHkgYSBiYXNlXFxuK1xcdFxcdCAqIHJlZ2lzdGVyLCBidXQgbm8gaW5kZXggcmVnaXN0ZXIuIEZvciB0aGUgbm9uLWFyZW5hIGNhc2UsXFxuK1xcdFxcdCAqIHNpbXBseSB1c2UgJWRzdCBhcyBhIGJhc2UuIEZvciB0aGUgYXJlbmEgY2FzZSwgdXNlIHRoZVxcbitcXHRcXHQgKiB3b3JrIHJlZ2lzdGVyICVyMTogZmlyc3QsIGxvYWQgdGhlIGFyZW5hIGJhc2UgaW50byBpdCxcXG4rXFx0XFx0ICogYW5kIHRoZW4gYWRkICVkc3QgdG8gaXQuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRwcm9iZS5hcmVuYV9yZWcgPSBkc3RfcmVnO1xcbiBcXG5AQCAtMTY3Myw2ICsxNzE1LDE4IEBAIHN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXFxuIFxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBCUEZfTE9BRF9BQ1E6XFxuK1xcdFxcdFxcdC8qIHMzOTAgaGFzIHN0cm9uZyBvcmRlcmluZywganVzdCB1c2UgbG9hZCAqL1xcbitcXHRcXHRcXHRlcnIgPSBlbWl0X2xkeChqaXQsIGZwLCBpbnNuKTtcXG4rXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIEJQRl9TVE9SRV9SRUw6XFxuK1xcdFxcdFxcdC8qIHMzOTAgaGFzIHN0cm9uZyBvcmRlcmluZywganVzdCB1c2Ugc3RvcmUgKi9cXG4rXFx0XFx0XFx0ZXJyID0gZW1pdF9zdHgoaml0LCBmcCwgaW5zbik7XFxuK1xcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0cHJfZXJyKFxcXCJVbmtub3duIGF0b21pYyBvcGVyYXRpb24gJTAyeFxcXFxuXFxcIiwgaW5zbi1cXHUwMDNlaW1tKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC0xO1xcbkBAIC0xNjg3LDE1ICsxNzQxLDIwIEBAIHN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXFxuIFxcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfQjogLyogZHN0ID0gKih1OCAqKSh1bCkgKHNyYyArIG9mZikgKi9cXG4gXFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTSB8IEJQRl9COlxcbiBcXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfQjpcXG4tXFx0XFx0YnBmX2ppdF9wcm9iZV9sb2FkX3ByZShqaXQsIGluc24sIFxcdTAwMjZwcm9iZSk7XFxuLVxcdFxcdC8qIGxsZ2MgJWRzdCxvZmYoJXNyYywlYXJlbmEpICovXFxuLVxcdFxcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDkwLCBkc3RfcmVnLCBzcmNfcmVnLFxcbi1cXHRcXHRcXHQgICAgICBwcm9iZS5hcmVuYV9yZWcsIG9mZik7XFxuLVxcdFxcdGVyciA9IGJwZl9qaXRfcHJvYmVfcG9zdChqaXQsIGZwLCBcXHUwMDI2cHJvYmUpO1xcbitcXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX0g6IC8qIGRzdCA9ICoodTE2ICopKHVsKSAoc3JjICsgb2ZmKSAqL1xcbitcXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX0g6XFxuK1xcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9IOlxcbitcXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX1c6IC8qIGRzdCA9ICoodTMyICopKHVsKSAoc3JjICsgb2ZmKSAqL1xcbitcXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX1c6XFxuK1xcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9XOlxcbitcXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX0RXOiAvKiBkc3QgPSAqKHU2NCAqKSh1bCkgKHNyYyArIG9mZikgKi9cXG4rXFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTSB8IEJQRl9EVzpcXG4rXFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0RXOlxcbitcXHRcXHRlcnIgPSBlbWl0X2xkeChqaXQsIGZwLCBpbnNuKTtcXG4gXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdFxcdGppdC1cXHUwMDNlc2VlbiB8PSBTRUVOX01FTTtcXG4tXFx0XFx0aWYgKGluc25faXNfemV4dChcXHUwMDI2aW5zblsxXSkpXFxuK1xcdFxcdGlmIChCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSAhPSBCUEZfRFcgXFx1MDAyNlxcdTAwMjYgaW5zbl9pc196ZXh0KFxcdTAwMjZpbnNuWzFdKSlcXG4gXFx0XFx0XFx0aW5zbl9jb3VudCA9IDI7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfQjogLyogZHN0ID0gKihzOCAqKSh1bCkgKHNyYyArIG9mZikgKi9cXG5AQCAtMTcwOCwyMCArMTc2Nyw2IEBAIHN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdFxcdGppdC1cXHUwMDNlc2VlbiB8PSBTRUVOX01FTTtcXG4gXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfSDogLyogZHN0ID0gKih1MTYgKikodWwpIChzcmMgKyBvZmYpICovXFxuLVxcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0gfCBCUEZfSDpcXG4tXFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0g6XFxuLVxcdFxcdGJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoaml0LCBpbnNuLCBcXHUwMDI2cHJvYmUpO1xcbi1cXHRcXHQvKiBsbGdoICVkc3Qsb2ZmKCVzcmMsJWFyZW5hKSAqL1xcbi1cXHRcXHRFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDA5MSwgZHN0X3JlZywgc3JjX3JlZyxcXG4tXFx0XFx0XFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpO1xcbi1cXHRcXHRlcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXFx1MDAyNnByb2JlKTtcXG4tXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuLVxcdFxcdGppdC1cXHUwMDNlc2VlbiB8PSBTRUVOX01FTTtcXG4tXFx0XFx0aWYgKGluc25faXNfemV4dChcXHUwMDI2aW5zblsxXSkpXFxuLVxcdFxcdFxcdGluc25fY291bnQgPSAyO1xcbi1cXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX0g6IC8qIGRzdCA9ICooczE2ICopKHVsKSAoc3JjICsgb2ZmKSAqL1xcbiBcXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNU1ggfCBCUEZfSDpcXG4gXFx0XFx0YnBmX2ppdF9wcm9iZV9sb2FkX3ByZShqaXQsIGluc24sIFxcdTAwMjZwcm9iZSk7XFxuQEAgLTE3MzIsMjAgKzE3NzcsNiBAQCBzdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHRqaXQtXFx1MDAzZXNlZW4gfD0gU0VFTl9NRU07XFxuIFxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX1c6IC8qIGRzdCA9ICoodTMyICopKHVsKSAoc3JjICsgb2ZmKSAqL1xcbi1cXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX1c6XFxuLVxcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9XOlxcbi1cXHRcXHRicGZfaml0X3Byb2JlX2xvYWRfcHJlKGppdCwgaW5zbiwgXFx1MDAyNnByb2JlKTtcXG4tXFx0XFx0LyogbGxnZiAlZHN0LG9mZiglc3JjKSAqL1xcbi1cXHRcXHRqaXQtXFx1MDAzZXNlZW4gfD0gU0VFTl9NRU07XFxuLVxcdFxcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDE2LCBkc3RfcmVnLCBzcmNfcmVnLFxcbi1cXHRcXHRcXHQgICAgICBwcm9iZS5hcmVuYV9yZWcsIG9mZik7XFxuLVxcdFxcdGVyciA9IGJwZl9qaXRfcHJvYmVfcG9zdChqaXQsIGZwLCBcXHUwMDI2cHJvYmUpO1xcbi1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0XFx0aWYgKGluc25faXNfemV4dChcXHUwMDI2aW5zblsxXSkpXFxuLVxcdFxcdFxcdGluc25fY291bnQgPSAyO1xcbi1cXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX1c6IC8qIGRzdCA9ICooczMyICopKHVsKSAoc3JjICsgb2ZmKSAqL1xcbiBcXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNU1ggfCBCUEZfVzpcXG4gXFx0XFx0YnBmX2ppdF9wcm9iZV9sb2FkX3ByZShqaXQsIGluc24sIFxcdTAwMjZwcm9iZSk7XFxuQEAgLTE3NTYsMTggKzE3ODcsNiBAQCBzdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfRFc6IC8qIGRzdCA9ICoodTY0ICopKHVsKSAoc3JjICsgb2ZmKSAqL1xcbi1cXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX0RXOlxcbi1cXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfRFc6XFxuLVxcdFxcdGJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoaml0LCBpbnNuLCBcXHUwMDI2cHJvYmUpO1xcbi1cXHRcXHQvKiBsZyAlZHN0LG9mZiglc3JjLCVhcmVuYSkgKi9cXG4tXFx0XFx0aml0LVxcdTAwM2VzZWVuIHw9IFNFRU5fTUVNO1xcbi1cXHRcXHRFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDAwNCwgZHN0X3JlZywgc3JjX3JlZyxcXG4tXFx0XFx0XFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpO1xcbi1cXHRcXHRlcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXFx1MDAyNnByb2JlKTtcXG4tXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuLVxcdFxcdGJyZWFrO1xcbiBcXHQvKlxcbiBcXHQgKiBCUEZfSk1QIC8gQ0FMTFxcbiBcXHQgKi9cXG5AQCAtMzAyOCwxMyArMzA0Nyw2IEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcXG4gXFx0aWYgKCFpbl9hcmVuYSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdHN3aXRjaCAoaW5zbi1cXHUwMDNlY29kZSkge1xcbi1cXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0I6XFxuLVxcdGNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfSDpcXG4tXFx0Y2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9XOlxcbi1cXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0RXOlxcbi1cXHRcXHRpZiAoYnBmX2F0b21pY19pc19sb2FkX3N0b3JlKGluc24pKVxcbi1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfQjpcXG4gXFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX0g6XFxuIFxcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9XOlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuY1xcbmluZGV4IDJlNzc1MWE4NTM5OTliLi43M2JjMmI4MzVmM2ZlNCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuY1xcbkBAIC0yOCw4ICsyOCwxMCBAQCBib29sIHNraXBfYWxsX3Rlc3RzID0gdHJ1ZTtcXG4gXFxuICNpZiBkZWZpbmVkKEVOQUJMRV9BVE9NSUNTX1RFU1RTKSBcXHUwMDI2XFx1MDAyNlxcdFxcdCAgXFxcXFxcbiBcXHRkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuLVxcdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFxcXFxcXG4tXFx0IChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpIFxcdTAwMjZcXHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkpXFxuK1xcdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IFxcXFxcXG4rXFx0IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFxcXFxcXG4rXFx0IChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpIFxcdTAwMjZcXHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkgfHwgXFxcXFxcbitcXHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3MzOTApKVxcbiBib29sIHNraXBfbGFjcV9zcmVsX3Rlc3RzIF9fYXR0cmlidXRlKChfX3NlY3Rpb25fXyhcXFwiLmRhdGFcXFwiKSkpID0gZmFsc2U7XFxuICNlbHNlXFxuIGJvb2wgc2tpcF9sYWNxX3NyZWxfdGVzdHMgPSB0cnVlO1xcbkBAIC0zMTUsOCArMzE3LDEwIEBAIGludCBsb2FkX2FjcXVpcmUoY29uc3Qgdm9pZCAqY3R4KVxcbiB7XFxuICNpZiBkZWZpbmVkKEVOQUJMRV9BVE9NSUNTX1RFU1RTKSBcXHUwMDI2XFx1MDAyNlxcdFxcdCAgXFxcXFxcbiBcXHRkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuLVxcdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFxcXFxcXG4tXFx0IChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpIFxcdTAwMjZcXHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkpXFxuK1xcdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IFxcXFxcXG4rXFx0IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFxcXFxcXG4rXFx0IChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpIFxcdTAwMjZcXHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkgfHwgXFxcXFxcbitcXHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3MzOTApKVxcbiBcXG4gI2RlZmluZSBMT0FEX0FDUVVJUkVfQVJFTkEoU0laRU9QLCBTSVpFLCBTUkMsIERTVClcXHRcXFxcXFxuIFxcdHsgYXNtIHZvbGF0aWxlIChcXHRcXHRcXHRcXHRcXFxcXFxuQEAgLTM2Nyw4ICszNzEsMTAgQEAgaW50IHN0b3JlX3JlbGVhc2UoY29uc3Qgdm9pZCAqY3R4KVxcbiB7XFxuICNpZiBkZWZpbmVkKEVOQUJMRV9BVE9NSUNTX1RFU1RTKSBcXHUwMDI2XFx1MDAyNlxcdFxcdCAgXFxcXFxcbiBcXHRkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuLVxcdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFxcXFxcXG4tXFx0IChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpIFxcdTAwMjZcXHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkpXFxuK1xcdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IFxcXFxcXG4rXFx0IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFxcXFxcXG4rXFx0IChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpIFxcdTAwMjZcXHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkgfHwgXFxcXFxcbitcXHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3MzOTApKVxcbiBcXG4gI2RlZmluZSBTVE9SRV9SRUxFQVNFX0FSRU5BKFNJWkVPUCwgRFNULCBWQUwpXFx0XFxcXFxcbiBcXHR7IGFzbSB2b2xhdGlsZSAoXFx0XFx0XFx0XFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXFxuaW5kZXggYjBjNDQxMzg0ZjIwNjYuLjVlYWNmMWI0MzI1MjEyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcXG5AQCAtMjY0LDkgKzI2NCwxMiBAQFxcbiAjZW5kaWZcXG4gXFxuICNpZiBfX2NsYW5nX21ham9yX18gXFx1MDAzZT0gMTggXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChFTkFCTEVfQVRPTUlDU19URVNUUykgXFx1MDAyNlxcdTAwMjZcXHRcXHRcXFxcXFxuLVxcdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8XFx0XFxcXFxcbi1cXHQoZGVmaW5lZChfX1RBUkdFVF9BUkNIX3Jpc2N2KSBcXHUwMDI2XFx1MDAyNiBfX3Jpc2N2X3hsZW4gPT0gNjQpIHx8IFxcXFxcXG4tXFx0ZGVmaW5lZChfX1RBUkdFVF9BUkNIX3Bvd2VycGMpIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF9sb29uZ2FyY2gpKVxcbitcXHQoZGVmaW5lZChfX1RBUkdFVF9BUkNIX2FybTY0KSB8fFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgXFx1MDAyNlxcdTAwMjYgX19yaXNjdl94bGVuID09IDY0KSB8fFxcdFxcXFxcXG4rXFx0IGRlZmluZWQoX19UQVJHRVRfQVJDSF9zMzkwKSB8fFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0IGRlZmluZWQoX19UQVJHRVRfQVJDSF9wb3dlcnBjKSB8fFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0IGRlZmluZWQoX19UQVJHRVRfQVJDSF9sb29uZ2FyY2gpKVxcbiAjZGVmaW5lIENBTl9VU0VfTE9BRF9BQ1FfU1RPUkVfUkVMXFxuICNlbmRpZlxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6MDQ6MDYuMjk5NDc0NzEzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDU4NjkwMTA5MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZW1pdF9sZHhcIixcbiAgICBcImVtaXRfc3R4XCIsXG4gICAgXCJicGZfaml0X3Byb2JlX2xvYWRfcHJlXCIsXG4gICAgXCJicGZfaml0X3Byb2JlX3N0b3JlX3ByZVwiLFxuICAgIFwiYnBmX2ppdF9zdXBwb3J0c19pbnNuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBzdXBwb3J0IGZvciBCUEZfUFJPQkVfQVRPTUlDLCBCUEZfTE9BRF9BQ1EsIGFuZCBCUEZfU1RPUkVfUkVMIGluc3RydWN0aW9ucyBpbiB0aGUgczM5MCBCUEYgSklUIGNvbXBpbGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIEpJVCBsb2dpYyBvbiBzMzkwIGFyY2hpdGVjdHVyZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjg5ZDExZDRjZjY3NjhkMDFlMWEwOTQxZTdmNDM1N2QzMDhlOTIyZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDE4OjA0OjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IDMxNzQ5YzAzNjJjYTIzLi5jOThhYjJlZWNlNTdmNSAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNcbisrKyBiL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC03NDMsMTAgKzc0MywxMiBAQCBzdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX2xvYWRfcHJlKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiB7XG4gXHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfUFJPQkVfTUVNIFx1MDAyNlx1MDAyNlxuIFx0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTVNYIFx1MDAyNlx1MDAyNlxuLVx0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTTMyKVxuK1x0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTTMyIFx1MDAyNlx1MDAyNlxuK1x0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX0FUT01JQylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTTMyKSB7XG4rXHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNMzIgfHxcbitcdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9BVE9NSUMpIHtcbiBcdFx0LyogbGdybCAlcjEsa2Vybl9hcmVuYSAqL1xuIFx0XHRFTUlUNl9QQ1JFTF9SSUxCKDB4YzQwODAwMDAsIFJFR19XMSwgaml0LVx1MDAzZWtlcm5fYXJlbmEpO1xuIFx0XHRwcm9iZS1cdTAwM2VhcmVuYV9yZWcgPSBSRUdfVzE7XG5AQCAtNzU4LDcgKzc2MCw4IEBAIHN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIHN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpXG4ge1xuLVx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTTMyKVxuK1x0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX01FTTMyIFx1MDAyNlx1MDAyNlxuK1x0ICAgIEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1BST0JFX0FUT01JQylcbiBcdFx0cmV0dXJuO1xuIFxuIFx0LyogbGdybCAlcjEsa2Vybl9hcmVuYSAqL1xuQEAgLTgzMCw2ICs4MzMsNzIgQEAgc3RhdGljIGludCBicGZfaml0X3Byb2JlX3Bvc3Qoc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGVtaXRfbGR4KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbit7XG4rXHRzdHJ1Y3QgYnBmX2ppdF9wcm9iZSBwcm9iZTtcbitcbitcdGJwZl9qaXRfcHJvYmVfaW5pdChcdTAwMjZwcm9iZSk7XG4rXHRicGZfaml0X3Byb2JlX2xvYWRfcHJlKGppdCwgaW5zbiwgXHUwMDI2cHJvYmUpO1xuK1xuK1x0c3dpdGNoIChCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpKSB7XG4rXHRjYXNlIEJQRl9COiAvKiBkc3QgPSAqKHU4ICopKHVsKSAoc3JjICsgb2ZmKSAqL1xuK1x0XHQvKiBsbGdjICVkc3Qsb2ZmKCVzcmMsJWFyZW5hKSAqL1xuK1x0XHRFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDA5MCwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZXNyY19yZWcsXG4rXHRcdFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBpbnNuLVx1MDAzZW9mZik7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfSDogLyogZHN0ID0gKih1MTYgKikodWwpIChzcmMgKyBvZmYpICovXG4rXHRcdC8qIGxsZ2ggJWRzdCxvZmYoJXNyYywlYXJlbmEpICovXG4rXHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDkxLCBpbnNuLVx1MDAzZWRzdF9yZWcsIGluc24tXHUwMDNlc3JjX3JlZyxcbitcdFx0XHQgICAgICBwcm9iZS5hcmVuYV9yZWcsIGluc24tXHUwMDNlb2ZmKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9XOiAvKiBkc3QgPSAqKHUzMiAqKSh1bCkgKHNyYyArIG9mZikgKi9cbitcdFx0LyogbGxnZiAlZHN0LG9mZiglc3JjLCVhcmVuYSkgKi9cbitcdFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwMTYsIGluc24tXHUwMDNlZHN0X3JlZywgaW5zbi1cdTAwM2VzcmNfcmVnLFxuK1x0XHRcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX0RXOiAvKiBkc3QgPSAqKHU2NCAqKSh1bCkgKHNyYyArIG9mZikgKi9cbitcdFx0LyogbGcgJWRzdCxvZmYoJXNyYywlYXJlbmEpICovXG4rXHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDA0LCBpbnNuLVx1MDAzZWRzdF9yZWcsIGluc24tXHUwMDNlc3JjX3JlZyxcbitcdFx0XHQgICAgICBwcm9iZS5hcmVuYV9yZWcsIGluc24tXHUwMDNlb2ZmKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRyZXR1cm4gYnBmX2ppdF9wcm9iZV9wb3N0KGppdCwgZnAsIFx1MDAyNnByb2JlKTtcbit9XG4rXG4rc3RhdGljIGludCBlbWl0X3N0eChzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4re1xuK1x0c3RydWN0IGJwZl9qaXRfcHJvYmUgcHJvYmU7XG4rXG4rXHRicGZfaml0X3Byb2JlX2luaXQoXHUwMDI2cHJvYmUpO1xuK1x0YnBmX2ppdF9wcm9iZV9zdG9yZV9wcmUoaml0LCBpbnNuLCBcdTAwMjZwcm9iZSk7XG4rXG4rXHRzd2l0Y2ggKEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkpIHtcbitcdGNhc2UgQlBGX0I6IC8qICoodTggKikoZHN0ICsgb2ZmKSA9IHNyY19yZWcgKi9cbitcdFx0Lyogc3RjeSAlc3JjLG9mZiglZHN0LCVhcmVuYSkgKi9cbitcdFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwNzIsIGluc24tXHUwMDNlc3JjX3JlZywgaW5zbi1cdTAwM2Vkc3RfcmVnLFxuK1x0XHRcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX0g6IC8qICh1MTYgKikoZHN0ICsgb2ZmKSA9IHNyYyAqL1xuK1x0XHQvKiBzdGh5ICVzcmMsb2ZmKCVkc3QsJWFyZW5hKSAqL1xuK1x0XHRFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDA3MCwgaW5zbi1cdTAwM2VzcmNfcmVnLCBpbnNuLVx1MDAzZWRzdF9yZWcsXG4rXHRcdFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBpbnNuLVx1MDAzZW9mZik7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfVzogLyogKih1MzIgKikoZHN0ICsgb2ZmKSA9IHNyYyAqL1xuK1x0XHQvKiBzdHkgJXNyYyxvZmYoJWRzdCwlYXJlbmEpICovXG4rXHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDUwLCBpbnNuLVx1MDAzZXNyY19yZWcsIGluc24tXHUwMDNlZHN0X3JlZyxcbitcdFx0XHQgICAgICBwcm9iZS5hcmVuYV9yZWcsIGluc24tXHUwMDNlb2ZmKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9EVzogLyogKHU2NCAqKShkc3QgKyBvZmYpID0gc3JjICovXG4rXHRcdC8qIHN0ZyAlc3JjLG9mZiglZHN0LCVhcmVuYSkgKi9cbitcdFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwMjQsIGluc24tXHUwMDNlc3JjX3JlZywgaW5zbi1cdTAwM2Vkc3RfcmVnLFxuK1x0XHRcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdHJldHVybiBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXHUwMDI2cHJvYmUpO1xuK31cbitcbiAvKlxuICAqIFNpZ24tIG9yIHplcm8tZXh0ZW5kIHRoZSByZWdpc3RlciBpZiBuZWNlc3NhcnlcbiAgKi9cbkBAIC0xNDc3LDQ0ICsxNTQ2LDEzIEBAIHN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4gXHQgKi9cbiBcdGNhc2UgQlBGX1NUWCB8IEJQRl9NRU0gfCBCUEZfQjogLyogKih1OCAqKShkc3QgKyBvZmYpID0gc3JjX3JlZyAqL1xuIFx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0I6XG4tXHRcdGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKGppdCwgaW5zbiwgXHUwMDI2cHJvYmUpO1xuLVx0XHQvKiBzdGN5ICVzcmMsb2ZmKCVkc3QsJWFyZW5hKSAqL1xuLVx0XHRFTUlUNl9ESVNQX0xIKDB4ZTMwMDAwMDAsIDB4MDA3Miwgc3JjX3JlZywgZHN0X3JlZyxcbi1cdFx0XHQgICAgICBwcm9iZS5hcmVuYV9yZWcsIG9mZik7XG4tXHRcdGVyciA9IGJwZl9qaXRfcHJvYmVfcG9zdChqaXQsIGZwLCBcdTAwMjZwcm9iZSk7XG4tXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIGVycjtcbi1cdFx0aml0LVx1MDAzZXNlZW4gfD0gU0VFTl9NRU07XG4tXHRcdGJyZWFrO1xuIFx0Y2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9IOiAvKiAodTE2ICopKGRzdCArIG9mZikgPSBzcmMgKi9cbiBcdGNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9IOlxuLVx0XHRicGZfaml0X3Byb2JlX3N0b3JlX3ByZShqaXQsIGluc24sIFx1MDAyNnByb2JlKTtcbi1cdFx0Lyogc3RoeSAlc3JjLG9mZiglZHN0LCVhcmVuYSkgKi9cbi1cdFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwNzAsIHNyY19yZWcsIGRzdF9yZWcsXG4tXHRcdFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpO1xuLVx0XHRlcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXHUwMDI2cHJvYmUpO1xuLVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiBlcnI7XG4tXHRcdGppdC1cdTAwM2VzZWVuIHw9IFNFRU5fTUVNO1xuLVx0XHRicmVhaztcbiBcdGNhc2UgQlBGX1NUWCB8IEJQRl9NRU0gfCBCUEZfVzogLyogKih1MzIgKikoZHN0ICsgb2ZmKSA9IHNyYyAqL1xuIFx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX1c6XG4tXHRcdGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlKGppdCwgaW5zbiwgXHUwMDI2cHJvYmUpO1xuLVx0XHQvKiBzdHkgJXNyYyxvZmYoJWRzdCwlYXJlbmEpICovXG4tXHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDUwLCBzcmNfcmVnLCBkc3RfcmVnLFxuLVx0XHRcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgb2ZmKTtcbi1cdFx0ZXJyID0gYnBmX2ppdF9wcm9iZV9wb3N0KGppdCwgZnAsIFx1MDAyNnByb2JlKTtcbi1cdFx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gZXJyO1xuLVx0XHRqaXQtXHUwMDNlc2VlbiB8PSBTRUVOX01FTTtcbi1cdFx0YnJlYWs7XG4gXHRjYXNlIEJQRl9TVFggfCBCUEZfTUVNIHwgQlBGX0RXOiAvKiAodTY0ICopKGRzdCArIG9mZikgPSBzcmMgKi9cbiBcdGNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9EVzpcbi1cdFx0YnBmX2ppdF9wcm9iZV9zdG9yZV9wcmUoaml0LCBpbnNuLCBcdTAwMjZwcm9iZSk7XG4tXHRcdC8qIHN0ZyAlc3JjLG9mZiglZHN0LCVhcmVuYSkgKi9cbi1cdFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwMjQsIHNyY19yZWcsIGRzdF9yZWcsXG4tXHRcdFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpO1xuLVx0XHRlcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXHUwMDI2cHJvYmUpO1xuK1x0XHRlcnIgPSBlbWl0X3N0eChqaXQsIGZwLCBpbnNuKTtcbiBcdFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRqaXQtXHUwMDNlc2VlbiB8PSBTRUVOX01FTTtcbkBAIC0xNTc0LDE5ICsxNjEyLDIzIEBAIHN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4gXHQvKlxuIFx0ICogQlBGX0FUT01JQ1xuIFx0ICovXG4rXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0I6XG4rXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0g6XG4gXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0RXOlxuIFx0Y2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9XOlxuK1x0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX0FUT01JQyB8IEJQRl9COlxuK1x0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX0FUT01JQyB8IEJQRl9IOlxuIFx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX0FUT01JQyB8IEJQRl9EVzpcbiBcdGNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9BVE9NSUMgfCBCUEZfVzpcbiBcdHtcbiBcdFx0Ym9vbCBpczMyID0gQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfVztcbiBcbiBcdFx0Lypcbi1cdFx0ICogVW5saWtlIGxvYWRzIGFuZCBzdG9yZXMsIGF0b21pY3MgaGF2ZSBvbmx5IGEgYmFzZSByZWdpc3Rlcixcbi1cdFx0ICogYnV0IG5vIGluZGV4IHJlZ2lzdGVyLiBGb3IgdGhlIG5vbi1hcmVuYSBjYXNlLCBzaW1wbHkgdXNlXG4tXHRcdCAqICVkc3QgYXMgYSBiYXNlLiBGb3IgdGhlIGFyZW5hIGNhc2UsIHVzZSB0aGUgd29yayByZWdpc3RlclxuLVx0XHQgKiAlcjE6IGZpcnN0LCBsb2FkIHRoZSBhcmVuYSBiYXNlIGludG8gaXQsIGFuZCB0aGVuIGFkZCAlZHN0XG4tXHRcdCAqIHRvIGl0LlxuK1x0XHQgKiBVbmxpa2UgbG9hZHMgYW5kIHN0b3JlcywgczM5MCBhdG9taWNzIGhhdmUgb25seSBhIGJhc2VcbitcdFx0ICogcmVnaXN0ZXIsIGJ1dCBubyBpbmRleCByZWdpc3Rlci4gRm9yIHRoZSBub24tYXJlbmEgY2FzZSxcbitcdFx0ICogc2ltcGx5IHVzZSAlZHN0IGFzIGEgYmFzZS4gRm9yIHRoZSBhcmVuYSBjYXNlLCB1c2UgdGhlXG4rXHRcdCAqIHdvcmsgcmVnaXN0ZXIgJXIxOiBmaXJzdCwgbG9hZCB0aGUgYXJlbmEgYmFzZSBpbnRvIGl0LFxuK1x0XHQgKiBhbmQgdGhlbiBhZGQgJWRzdCB0byBpdC5cbiBcdFx0ICovXG4gXHRcdHByb2JlLmFyZW5hX3JlZyA9IGRzdF9yZWc7XG4gXG5AQCAtMTY3Myw2ICsxNzE1LDE4IEBAIHN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4gXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgQlBGX0xPQURfQUNROlxuK1x0XHRcdC8qIHMzOTAgaGFzIHN0cm9uZyBvcmRlcmluZywganVzdCB1c2UgbG9hZCAqL1xuK1x0XHRcdGVyciA9IGVtaXRfbGR4KGppdCwgZnAsIGluc24pO1xuK1x0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIEJQRl9TVE9SRV9SRUw6XG4rXHRcdFx0LyogczM5MCBoYXMgc3Ryb25nIG9yZGVyaW5nLCBqdXN0IHVzZSBzdG9yZSAqL1xuK1x0XHRcdGVyciA9IGVtaXRfc3R4KGppdCwgZnAsIGluc24pO1xuK1x0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdHByX2VycihcIlVua25vd24gYXRvbWljIG9wZXJhdGlvbiAlMDJ4XFxuXCIsIGluc24tXHUwMDNlaW1tKTtcbiBcdFx0XHRyZXR1cm4gLTE7XG5AQCAtMTY4NywxNSArMTc0MSwyMCBAQCBzdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxuIFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTSB8IEJQRl9COiAvKiBkc3QgPSAqKHU4ICopKHVsKSAoc3JjICsgb2ZmKSAqL1xuIFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTSB8IEJQRl9COlxuIFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0I6XG4tXHRcdGJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoaml0LCBpbnNuLCBcdTAwMjZwcm9iZSk7XG4tXHRcdC8qIGxsZ2MgJWRzdCxvZmYoJXNyYywlYXJlbmEpICovXG4tXHRcdEVNSVQ2X0RJU1BfTEgoMHhlMzAwMDAwMCwgMHgwMDkwLCBkc3RfcmVnLCBzcmNfcmVnLFxuLVx0XHRcdCAgICAgIHByb2JlLmFyZW5hX3JlZywgb2ZmKTtcbi1cdFx0ZXJyID0gYnBmX2ppdF9wcm9iZV9wb3N0KGppdCwgZnAsIFx1MDAyNnByb2JlKTtcbitcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfSDogLyogZHN0ID0gKih1MTYgKikodWwpIChzcmMgKyBvZmYpICovXG4rXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX0g6XG4rXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfSDpcbitcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfVzogLyogZHN0ID0gKih1MzIgKikodWwpIChzcmMgKyBvZmYpICovXG4rXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX1c6XG4rXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfVzpcbitcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfRFc6IC8qIGRzdCA9ICoodTY0ICopKHVsKSAoc3JjICsgb2ZmKSAqL1xuK1x0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTSB8IEJQRl9EVzpcbitcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9EVzpcbitcdFx0ZXJyID0gZW1pdF9sZHgoaml0LCBmcCwgaW5zbik7XG4gXHRcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0aml0LVx1MDAzZXNlZW4gfD0gU0VFTl9NRU07XG4tXHRcdGlmIChpbnNuX2lzX3pleHQoXHUwMDI2aW5zblsxXSkpXG4rXHRcdGlmIChCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9EVyBcdTAwMjZcdTAwMjYgaW5zbl9pc196ZXh0KFx1MDAyNmluc25bMV0pKVxuIFx0XHRcdGluc25fY291bnQgPSAyO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9COiAvKiBkc3QgPSAqKHM4ICopKHVsKSAoc3JjICsgb2ZmKSAqL1xuQEAgLTE3MDgsMjAgKzE3NjcsNiBAQCBzdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdGppdC1cdTAwM2VzZWVuIHw9IFNFRU5fTUVNO1xuIFx0XHRicmVhaztcbi1cdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfSDogLyogZHN0ID0gKih1MTYgKikodWwpIChzcmMgKyBvZmYpICovXG4tXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX0g6XG4tXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfSDpcbi1cdFx0YnBmX2ppdF9wcm9iZV9sb2FkX3ByZShqaXQsIGluc24sIFx1MDAyNnByb2JlKTtcbi1cdFx0LyogbGxnaCAlZHN0LG9mZiglc3JjLCVhcmVuYSkgKi9cbi1cdFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwOTEsIGRzdF9yZWcsIHNyY19yZWcsXG4tXHRcdFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpO1xuLVx0XHRlcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXHUwMDI2cHJvYmUpO1xuLVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiBlcnI7XG4tXHRcdGppdC1cdTAwM2VzZWVuIHw9IFNFRU5fTUVNO1xuLVx0XHRpZiAoaW5zbl9pc196ZXh0KFx1MDAyNmluc25bMV0pKVxuLVx0XHRcdGluc25fY291bnQgPSAyO1xuLVx0XHRicmVhaztcbiBcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9IOiAvKiBkc3QgPSAqKHMxNiAqKSh1bCkgKHNyYyArIG9mZikgKi9cbiBcdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU1TWCB8IEJQRl9IOlxuIFx0XHRicGZfaml0X3Byb2JlX2xvYWRfcHJlKGppdCwgaW5zbiwgXHUwMDI2cHJvYmUpO1xuQEAgLTE3MzIsMjAgKzE3NzcsNiBAQCBzdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdGppdC1cdTAwM2VzZWVuIHw9IFNFRU5fTUVNO1xuIFx0XHRicmVhaztcbi1cdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU0gfCBCUEZfVzogLyogZHN0ID0gKih1MzIgKikodWwpIChzcmMgKyBvZmYpICovXG4tXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNIHwgQlBGX1c6XG4tXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfVzpcbi1cdFx0YnBmX2ppdF9wcm9iZV9sb2FkX3ByZShqaXQsIGluc24sIFx1MDAyNnByb2JlKTtcbi1cdFx0LyogbGxnZiAlZHN0LG9mZiglc3JjKSAqL1xuLVx0XHRqaXQtXHUwMDNlc2VlbiB8PSBTRUVOX01FTTtcbi1cdFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwMTYsIGRzdF9yZWcsIHNyY19yZWcsXG4tXHRcdFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpO1xuLVx0XHRlcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXHUwMDI2cHJvYmUpO1xuLVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiBlcnI7XG4tXHRcdGlmIChpbnNuX2lzX3pleHQoXHUwMDI2aW5zblsxXSkpXG4tXHRcdFx0aW5zbl9jb3VudCA9IDI7XG4tXHRcdGJyZWFrO1xuIFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX1c6IC8qIGRzdCA9ICooczMyICopKHVsKSAoc3JjICsgb2ZmKSAqL1xuIFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTVNYIHwgQlBGX1c6XG4gXHRcdGJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoaml0LCBpbnNuLCBcdTAwMjZwcm9iZSk7XG5AQCAtMTc1NiwxOCArMTc4Nyw2IEBAIHN0YXRpYyBub2lubGluZSBpbnQgYnBmX2ppdF9pbnNuKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4gXHRcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0YnJlYWs7XG4tXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNIHwgQlBGX0RXOiAvKiBkc3QgPSAqKHU2NCAqKSh1bCkgKHNyYyArIG9mZikgKi9cbi1cdGNhc2UgQlBGX0xEWCB8IEJQRl9QUk9CRV9NRU0gfCBCUEZfRFc6XG4tXHRjYXNlIEJQRl9MRFggfCBCUEZfUFJPQkVfTUVNMzIgfCBCUEZfRFc6XG4tXHRcdGJwZl9qaXRfcHJvYmVfbG9hZF9wcmUoaml0LCBpbnNuLCBcdTAwMjZwcm9iZSk7XG4tXHRcdC8qIGxnICVkc3Qsb2ZmKCVzcmMsJWFyZW5hKSAqL1xuLVx0XHRqaXQtXHUwMDNlc2VlbiB8PSBTRUVOX01FTTtcbi1cdFx0RU1JVDZfRElTUF9MSCgweGUzMDAwMDAwLCAweDAwMDQsIGRzdF9yZWcsIHNyY19yZWcsXG4tXHRcdFx0ICAgICAgcHJvYmUuYXJlbmFfcmVnLCBvZmYpO1xuLVx0XHRlcnIgPSBicGZfaml0X3Byb2JlX3Bvc3Qoaml0LCBmcCwgXHUwMDI2cHJvYmUpO1xuLVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiBlcnI7XG4tXHRcdGJyZWFrO1xuIFx0LypcbiBcdCAqIEJQRl9KTVAgLyBDQUxMXG4gXHQgKi9cbkBAIC0zMDI4LDEzICszMDQ3LDYgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuLCBib29sIGluX2FyZW5hKVxuIFx0aWYgKCFpbl9hcmVuYSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRzd2l0Y2ggKGluc24tXHUwMDNlY29kZSkge1xuLVx0Y2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9COlxuLVx0Y2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9IOlxuLVx0Y2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9XOlxuLVx0Y2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9EVzpcbi1cdFx0aWYgKGJwZl9hdG9taWNfaXNfbG9hZF9zdG9yZShpbnNuKSlcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdGJyZWFrO1xuIFx0Y2FzZSBCUEZfTERYIHwgQlBGX01FTVNYIHwgQlBGX0I6XG4gXHRjYXNlIEJQRl9MRFggfCBCUEZfTUVNU1ggfCBCUEZfSDpcbiBcdGNhc2UgQlBGX0xEWCB8IEJQRl9NRU1TWCB8IEJQRl9XOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9hdG9taWNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jXG5pbmRleCAyZTc3NTFhODUzOTk5Yi4uNzNiYzJiODM1ZjNmZTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jXG5AQCAtMjgsOCArMjgsMTAgQEAgYm9vbCBza2lwX2FsbF90ZXN0cyA9IHRydWU7XG4gXG4gI2lmIGRlZmluZWQoRU5BQkxFX0FUT01JQ1NfVEVTVFMpIFx1MDAyNlx1MDAyNlx0XHQgIFxcXG4gXHRkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcdTAwMjZcdTAwMjYgXFxcbi1cdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFxcXG4tXHQgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgXHUwMDI2XHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkpXG4rXHQoZGVmaW5lZChfX1RBUkdFVF9BUkNIX2FybTY0KSB8fCBcXFxuK1x0IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFxcXG4rXHQgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgXHUwMDI2XHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkgfHwgXFxcbitcdCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfczM5MCkpXG4gYm9vbCBza2lwX2xhY3Ffc3JlbF90ZXN0cyBfX2F0dHJpYnV0ZSgoX19zZWN0aW9uX18oXCIuZGF0YVwiKSkpID0gZmFsc2U7XG4gI2Vsc2VcbiBib29sIHNraXBfbGFjcV9zcmVsX3Rlc3RzID0gdHJ1ZTtcbkBAIC0zMTUsOCArMzE3LDEwIEBAIGludCBsb2FkX2FjcXVpcmUoY29uc3Qgdm9pZCAqY3R4KVxuIHtcbiAjaWYgZGVmaW5lZChFTkFCTEVfQVRPTUlDU19URVNUUykgXHUwMDI2XHUwMDI2XHRcdCAgXFxcbiBcdGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpIFx1MDAyNlx1MDAyNiBcXFxuLVx0KGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHwgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikgfHwgXFxcbi1cdCAoZGVmaW5lZChfX1RBUkdFVF9BUkNIX3Jpc2N2KSBcdTAwMjZcdTAwMjYgX19yaXNjdl94bGVuID09IDY0KSlcbitcdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IFxcXG4rXHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikgfHwgXFxcbitcdCAoZGVmaW5lZChfX1RBUkdFVF9BUkNIX3Jpc2N2KSBcdTAwMjZcdTAwMjYgX19yaXNjdl94bGVuID09IDY0KSB8fCBcXFxuK1x0IGRlZmluZWQoX19UQVJHRVRfQVJDSF9zMzkwKSlcbiBcbiAjZGVmaW5lIExPQURfQUNRVUlSRV9BUkVOQShTSVpFT1AsIFNJWkUsIFNSQywgRFNUKVx0XFxcbiBcdHsgYXNtIHZvbGF0aWxlIChcdFx0XHRcdFxcXG5AQCAtMzY3LDggKzM3MSwxMCBAQCBpbnQgc3RvcmVfcmVsZWFzZShjb25zdCB2b2lkICpjdHgpXG4ge1xuICNpZiBkZWZpbmVkKEVOQUJMRV9BVE9NSUNTX1RFU1RTKSBcdTAwMjZcdTAwMjZcdFx0ICBcXFxuIFx0ZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkgXHUwMDI2XHUwMDI2IFxcXG4tXHQoZGVmaW5lZChfX1RBUkdFVF9BUkNIX2FybTY0KSB8fCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfeDg2KSB8fCBcXFxuLVx0IChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpIFx1MDAyNlx1MDAyNiBfX3Jpc2N2X3hsZW4gPT0gNjQpKVxuK1x0KGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHwgXFxcbitcdCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfeDg2KSB8fCBcXFxuK1x0IChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpIFx1MDAyNlx1MDAyNiBfX3Jpc2N2X3hsZW4gPT0gNjQpIHx8IFxcXG4rXHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3MzOTApKVxuIFxuICNkZWZpbmUgU1RPUkVfUkVMRUFTRV9BUkVOQShTSVpFT1AsIERTVCwgVkFMKVx0XFxcbiBcdHsgYXNtIHZvbGF0aWxlIChcdFx0XHRcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9taXNjLmhcbmluZGV4IGIwYzQ0MTM4NGYyMDY2Li41ZWFjZjFiNDMyNTIxMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfbWlzYy5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX21pc2MuaFxuQEAgLTI2NCw5ICsyNjQsMTIgQEBcbiAjZW5kaWZcbiBcbiAjaWYgX19jbGFuZ19tYWpvcl9fIFx1MDAzZT0gMTggXHUwMDI2XHUwMDI2IGRlZmluZWQoRU5BQkxFX0FUT01JQ1NfVEVTVFMpIFx1MDAyNlx1MDAyNlx0XHRcXFxuLVx0KGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHwgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikgfHxcdFxcXG4tXHQoZGVmaW5lZChfX1RBUkdFVF9BUkNIX3Jpc2N2KSBcdTAwMjZcdTAwMjYgX19yaXNjdl94bGVuID09IDY0KSB8fCBcXFxuLVx0ZGVmaW5lZChfX1RBUkdFVF9BUkNIX3Bvd2VycGMpIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF9sb29uZ2FyY2gpKVxuK1x0KGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHxcdFx0XHRcdFxcXG4rXHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikgfHxcdFx0XHRcdFx0XFxcbitcdCAoZGVmaW5lZChfX1RBUkdFVF9BUkNIX3Jpc2N2KSBcdTAwMjZcdTAwMjYgX19yaXNjdl94bGVuID09IDY0KSB8fFx0XFxcbitcdCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfczM5MCkgfHxcdFx0XHRcdFx0XFxcbitcdCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcG93ZXJwYykgfHxcdFx0XHRcdFxcXG4rXHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX2xvb25nYXJjaCkpXG4gI2RlZmluZSBDQU5fVVNFX0xPQURfQUNRX1NUT1JFX1JFTFxuICNlbmRpZlxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6MDQ6MDYuMjk5NDc3MDIzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA1MDIzNzMxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBzMzkwIEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBpdCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgYGFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNgLCBhbmQgc29tZSBzZWxmdGVzdHMsIGFuZCBhZGRzIHN1cHBvcnQgZm9yIGBCUEZfUFJPQkVfQVRPTUlDYCBhbmQgdGhlIGFjcXVpcmUvcmVsZWFzZSBpbnN0cnVjdGlvbnMgaW4gdGhlIHMzOTAgQlBGIEpJVCBjb21waWxlci4gSXQncyBhbHNvIHJlZmFjdG9yaW5nIHRoZSBsb2FkL3N0b3JlIGVtaXQgZnVuY3Rpb25zIHRvIGRlYWwgd2l0aCBtZW1vcnkgcHJvYmluZyBhbmQgYXRvbWljcy4gSG1tLCBzaG91bGQgdGhpcyBiZSBmdXp6ZWQ/IEFic29sdXRlbHksIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBkZWVwIHdpdGhpbiB0aGUgczM5MCBCUEYgSklULCBzbyBpdCdzIGEgZ29vZCB0YXJnZXQuXG5cbldhaXQsIGRvZXNuJ3Qgc3l6a2FsbGVyIGNvdmVyIG11bHRpcGxlIGFyY2hpdGVjdHVyZXM/IEknbSBwcmV0dHkgc3VyZSBpdCBkb2VzLCBpbmNsdWRpbmcgczM5MHguLi55ZXMsIEkga25vdyBpdCBkb2VzLiBPa2F5LCB3ZSBzaG91bGQgY2hlY2sgaWYgd2UgY2FuIGlkZW50aWZ5IHNwZWNpZmljIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgZnV6emluZy5cblxuTGV0J3Mgc2VlLi4uIHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyB0aGF0IGFyZSBhbHRlcmVkIGFyZTpcblxuLSAgIGBicGZfaml0X3Byb2JlX2xvYWRfcHJlYFxuLSAgIGBicGZfaml0X3Byb2JlX3N0b3JlX3ByZWBcbi0gICBgZW1pdF9sZHhgIChuZXcpXG4tICAgYGVtaXRfc3R4YCAobmV3KVxuLSAgIGBicGZfaml0X2luc25gXG4tICAgYGJwZl9qaXRfc3VwcG9ydHNfaW5zbmBcblxuSSBzaG91bGQgY2hlY2sgdGhlIHNvdXJjZSBmaWxlIHRvIHZlcmlmeS4gT2theSwgZ290IGl0LiBOb3csIGBicGZfaml0X2luc25gIGlzIHByb2JhYmx5IGEgZ29vZCBmb2N1cyBzeW1ib2wsIGJ1dCB0aGF0J3MgZ29pbmcgdG8gYmUgYSBob3QgcGF0aCBpbiB0aGUgSklUIGNvbXBpbGVyLCByaWdodD8gSXQgbWlnaHQgZ2VuZXJhdGUgdG9vIG11Y2ggbm9pc2UuXG5cblNvIHBlcmhhcHMgYGJwZl9qaXRfcHJvYmVfbG9hZF9wcmVgLCBgYnBmX2ppdF9wcm9iZV9zdG9yZV9wcmVgLCBgZW1pdF9sZHhgLCBgZW1pdF9zdHhgLCBhbmQgYGJwZl9qaXRfc3VwcG9ydHNfaW5zbmAgd291bGQgYmUgYmV0dGVyIHN0YXJ0aW5nIHBvaW50cz8gTGV0IG1lIGNoZWNrIHRob3NlIGRlZmluaXRpb25zIHVzaW5nIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgY29tZXMgYmFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI0NCwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjA0OjEzLjM0OTcxODM3M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzg2NjQ2NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWN8dm9pZHxpbnQpLipicGZfaml0Xy4qXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz01NjI9YXNtKFxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy01NzQtXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzo1NzU6c3RhdGljIHZvaWQgYnBmX2ppdF9wbHQoc3RydWN0IGJwZl9wbHQgKnBsdCwgdm9pZCAqcmV0LCB2b2lkICp0YXJnZXQpXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy01NzYte1xcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy01OTUtICovXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzo1OTY6c3RhdGljIHZvaWQgYnBmX2ppdF9wcm9sb2d1ZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtNTk3LXtcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtNjc5LSAqL1xcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6NjgwOnN0YXRpYyB2b2lkIGJwZl9qaXRfZXBpbG9ndWUoc3RydWN0IGJwZl9qaXQgKmppdClcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTY4MS17XFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTcwOD1zdHJ1Y3QgYnBmX2ppdF9wcm9iZSB7XFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTcxNC1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjcxNTpzdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX2luaXQoc3RydWN0IGJwZl9qaXRfcHJvYmUgKnByb2JlKVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtNzE2LXtcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtNzI4LSAqL1xcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6NzI5OnN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfZW1pdF9ub3Aoc3RydWN0IGJwZl9qaXQgKmppdCxcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTczMC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTc0MC1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjc0MTpzdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX2xvYWRfcHJlKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTc0Mi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTc1OS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjc2MDpzdGF0aWMgdm9pZCBicGZfaml0X3Byb2JlX3N0b3JlX3ByZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy03NjEtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfaml0X3Byb2JlICpwcm9iZSlcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtNzcyLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6NzczOnN0YXRpYyB2b2lkIGJwZl9qaXRfcHJvYmVfYXRvbWljX3ByZShzdHJ1Y3QgYnBmX2ppdCAqaml0LFxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtNzc0LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy03ODctXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzo3ODg6c3RhdGljIGludCBicGZfaml0X3Byb2JlX3Bvc3Qoc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTc4OS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX2ppdF9wcm9iZSAqcHJvYmUpXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTkwNT1zdGF0aWMgaW50IHNpZ25femVyb19leHRlbmQoc3RydWN0IGJwZl9qaXQgKmppdCwgaW50IHIsIHU4IHNpemUsIHU4IGZsYWdzKVxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy05NDQtICovXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzo5NDU6c3RhdGljIG5vaW5saW5lIGludCBicGZfaml0X2luc24oc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTk0Ni1cXHRcXHRcXHRcXHQgaW50IGksIGJvb2wgZXh0cmFfcGFzcylcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9MjIzND1zdGF0aWMgaW50IGJwZl9zZXRfYWRkcihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBpbnQgaSlcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjI1MS0gKi9cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjIyNTI6c3RhdGljIGludCBicGZfaml0X3Byb2coc3RydWN0IGJwZl9qaXQgKmppdCwgc3RydWN0IGJwZl9wcm9nICpmcCxcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTIyNTMtXFx0XFx0XFx0Ym9vbCBleHRyYV9wYXNzKVxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz0yMzExPXN0cnVjdCBzMzkwX2ppdF9kYXRhIHtcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjMxNi1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjIzMTc6c3RhdGljIHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqYnBmX2ppdF9hbGxvYyhzdHJ1Y3QgYnBmX2ppdCAqaml0LFxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjMxOC1cXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9wcm9nICpmcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6MDQ6MTMuNTI4MzkwNjg5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQxNTUxNjY1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBOZXcgQXNzZW1ibHkgRnVuY3Rpb25zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCB0aGUgY29tbWl0IGluY2x1ZGVzIGBlbWl0X2xkeGAgYW5kIGBlbWl0X3N0eGAuIFRoZSBmYWN0IHRoYXQgdGhleSdyZSBgc3RhdGljYCBpcyBhIGRldGFpbCB3b3J0aCBub3Rpbmc7IGl0IGltcGxpZXMgdGhleSdyZSBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiB0aGlzIG1vZHVsZS4gR2l2ZW4gdGhlIG5hbWVzLCBJJ20gYXNzdW1pbmcgdGhlc2UgYXJlIGxvdy1sZXZlbCBpbnN0cnVjdGlvbnMgcmVsYXRlZCB0byBsb2FkaW5nIGFuZCBzdG9yaW5nIHRoZSBYIHJlZ2lzdGVyLCBsaWtlbHkgdGFyZ2V0ZWQgZm9yIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIG9yIGFzc2VtYmxlci4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgKnByZXNlbnQqIGluIHRoZSBmaWxlLiBObyBwb2ludCBpbiBzcGVjdWxhdGluZyBmdXJ0aGVyIHVudGlsIEkgdmVyaWZ5IHRoYXQuIEl0J3Mgc3RhbmRhcmQgcHJhY3RpY2UgdG8gdmVyaWZ5IHRoZWlyIGV4aXN0ZW5jZSBmaXJzdCBiZWZvcmUgZGVsdmluZyBpbnRvIHRoZSByZXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU5MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjA0OjE5Ljk0MzkxMTE3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MzIwMDMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbWl0Xy4qeFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9Nzg4PXN0YXRpYyBpbnQgYnBmX2ppdF9wcm9iZV9wb3N0KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTgzNS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjgzNjpzdGF0aWMgaW50IGVtaXRfbGR4KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTgzNy17XFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTg2OC1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjg2OTpzdGF0aWMgaW50IGVtaXRfc3R4KHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTg3MC17XFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTk0NT1zdGF0aWMgbm9pbmxpbmUgaW50IGJwZl9qaXRfaW5zbihzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0xNTU0LVxcdGNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9NRU0zMiB8IEJQRl9EVzpcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjE1NTU6XFx0XFx0ZXJyID0gZW1pdF9zdHgoaml0LCBmcCwgaW5zbik7XFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0xNTU2LVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0xNzE5LVxcdFxcdFxcdC8qIHMzOTAgaGFzIHN0cm9uZyBvcmRlcmluZywganVzdCB1c2UgbG9hZCAqL1xcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MTcyMDpcXHRcXHRcXHRlcnIgPSBlbWl0X2xkeChqaXQsIGZwLCBpbnNuKTtcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE3MjEtXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE3MjUtXFx0XFx0XFx0LyogczM5MCBoYXMgc3Ryb25nIG9yZGVyaW5nLCBqdXN0IHVzZSBzdG9yZSAqL1xcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MTcyNjpcXHRcXHRcXHRlcnIgPSBlbWl0X3N0eChqaXQsIGZwLCBpbnNuKTtcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE3MjctXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE3NTItXFx0Y2FzZSBCUEZfTERYIHwgQlBGX1BST0JFX01FTTMyIHwgQlBGX0RXOlxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MTc1MzpcXHRcXHRlcnIgPSBlbWl0X2xkeChqaXQsIGZwLCBpbnNuKTtcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTE3NTQtXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjA0OjIwLjE4NzExOTc0MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTE0OTY2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgY3VycmVudCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBKSVQgQ29tcGlsYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUga2V5IHN5bWJvbHMgcmVsYXRlZCB0byB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MsIHNwZWNpZmljYWxseSBhcm91bmQgbG9hZCBhbmQgc3RvcmUgb3BlcmF0aW9ucy4gSXQgc2VlbXMgbGlrZSBgZW1pdF9sZHhgIGFuZCBgZW1pdF9zdHhgIGFyZSBnb29kIGNhbmRpZGF0ZXMgdG8gZXhhbWluZSBtb3JlIGNsb3NlbHk7IHRoZXkgbGlrZWx5IHJlcHJlc2VudCB0aGUgY29yZSBsb2dpYyBmb3IgZ2VuZXJhdGluZyBjb2RlIHJlbGF0ZWQgdG8gdGhlc2UgaW5zdHJ1Y3Rpb25zLiBUaGF0IGZlZWxzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3MuXG5cbkkgYWxzbyBzZWUgdGhhdCBgYnBmX2ppdF9wcm9iZV9sb2FkX3ByZWAgYW5kIGBicGZfaml0X3Byb2JlX3N0b3JlX3ByZWAgaGF2ZSBiZWVuIG1vZGlmaWVkLiBUaGlzIHN1Z2dlc3RzIHRoZXJlIGlzIGEgbmV3IGZlYXR1cmUgb3Igb3B0aW1pemF0aW9uIGZvciB0aGUgcHJvYmVzLiBMZXQgbWUgZGlnIGRlZXBlciBpbnRvIHRob3NlIGJlY2F1c2UgdGhleSBhcmUgb2Z0ZW4gaW52b2x2ZWQgaW4gaW5zdHJ1bWVudGF0aW9uIG9mIHByb2JlcyB3aGljaCBjYW4gYmUgdmVyeSBpbnNpZ2h0ZnVsIGZvciBwZXJmb3JtYW5jZSB0dW5pbmcuXG5cbk5vdywgbGV0J3MgcGl2b3QgdG8gaW52ZXN0aWdhdGUgdGhlIGJyb2FkZXIgY2FwYWJpbGl0aWVzIG9mIHRoaXMgSklUIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0ICpjYW4qIGhhbmRsZS4gVG8gZG8gdGhpcywgbGV0J3MgcXVpY2tseSBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGJwZl9qaXRfc3VwcG9ydHNfaW5zbmAuIFVuZGVyc3RhbmRpbmcgdGhpcyBjaGVjayB3aWxsIGxldCBtZSBkZXRlcm1pbmUgd2hhdCBpbnN0cnVjdGlvbnMgdGhlIEpJVCBlbmdpbmUgbmF0aXZlbHkgc3VwcG9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjA0LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6MDQ6MjMuODc4NjIxNDg2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODM1OTk2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X3N1cHBvcnRzX2luc25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTMwNDA9Ym9vbCBicGZfaml0X3N1cHBvcnRzX2ZzZXNzaW9uKHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTMwNDQtXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzozMDQ1OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgYm9vbCBpbl9hcmVuYSlcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTMwNDYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODowNDoyNC4wOTY5ODgxMTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDg4OTI3ODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEJQRiBKSVQgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBCUEYgSklUIGNvbXBvbmVudCBmb3IgZnV6emluZy4gSSB0aGluayBgYnBmX2ppdF9zdXBwb3J0c19pbnNuYCBpcyBhIGtleSBzeW1ib2wgdG8gdGFyZ2V0LCBpdCBwcm92aWRlcyBhIGNydWNpYWwgaW5pdGlhbCBjaGVjay4gV2FpdCBhIHNlY29uZCwgdGhlIGBlbWl0X2xkeGAgYW5kIGBlbWl0X3N0eGAgZnVuY3Rpb25zLCB0aG9zZSBhcmUgc3RhdGljLCByaWdodD8gSWYgdGhleSdyZSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UsIFN5emthbGxlciBjYW4gZGVmaW5pdGVseSBmdXp6IHRob3NlLiBUaGVuIHRoZXJl4oCZcyB0aGUgYmVoZW1vdGgsIGBicGZfaml0X2luc25gLCB0aGUgY29yZSBKSVQgbG9vcCBpdHNlbGYuIE1heWJlIHRoYXTigJlzIHRvbyBtdWNoIGF0IHRoaXMgc3RhZ2UuXG5cbkxldCdzIHJlZmluZSB0aGUgYXBwcm9hY2guIEZvY3VzIG9uIGBlbWl0X2xkeGAsIGBlbWl0X3N0eGAsIGFzIHdlbGwgYXMgYGJwZl9qaXRfcHJvYmVfbG9hZF9wcmVgLCBhbmQgYGJwZl9qaXRfcHJvYmVfc3RvcmVfcHJlYCAsIGFsb25nc2lkZSBgYnBmX2ppdF9zdXBwb3J0c19pbnNuYC4gT2gsIGhvbGQgb27igKYgYGJwZl9qaXRfcHJvYmVfbG9hZF9wcmVgIGFuZCBgYnBmX2ppdF9wcm9iZV9zdG9yZV9wcmVgIGFyZSBzdGF0aWMgdG9vLiBJJ2xsIHRha2UgYSBsb29rIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIG9yIGJ1aWxkIG9wdGlvbnMgcmVxdWlyZWQgdG8gZW5hYmxlIHRoZW0uXG5cblJpZ2h0LCBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgdGhlIGNvZGUgaXMgbG9jYXRlZC4gSXQgbG9va3MgbGlrZSBpdCdzIGluIGBhcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jYC4gT2theSwgdGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgc2hvdWxkIHZlcmlmeSB0aGF0IHRoaXMgY29kZSBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfQlBGX0pJVGAgaXMgZW5hYmxlZC4gVGltZSB0byBjaGVjayB0aGUgTWFrZWZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTA2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjA0OjI5LjE4NTkyMDY4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzcxNTA2MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ppdF9jb21wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9uZXQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL25ldC9NYWtlZmlsZS00LSNcXG5hcmNoL3MzOTAvbmV0L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGJwZl9qaXRfY29tcC5vIGJwZl90aW1lZF9tYXlfZ290by5vXFxuYXJjaC9zMzkwL25ldC9NYWtlZmlsZS02LW9iai0kKENPTkZJR19IQVZFX1BORVRJRCkgKz0gcG5ldC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjA0OjI5LjM2MzA3OTk5NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDgyNzY1NDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEpJVCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBpdGVtIGhlcmUgaXMgYEJQRl9KSVRgLiBUaGF0J3MgdGhlIGNvcmUgZW5hYmxlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbC4gQXJlIHRoZXJlIGFueSAqb3RoZXIqIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBUaGlzIHBhdGNoIGlzIHNwZWNpZmljYWxseSBhYm91dCBzdXBwb3J0aW5nIGBCUEZfUFJPQkVfQVRPTUlDYCBhbmQgYEJQRl9MT0FEX0FDUWAvYEJQRl9TVE9SRV9SRUxgIHdpdGhpbiB0aGUgczM5MCBCUEYgSklUIGNvbXBpbGVyLiBUaGVzZSBhcmUgZmFpcmx5IHNpZ25pZmljYW50IEJQRiBmZWF0dXJlcywgc28gaXQgd2FycmFudHMgYSB0aG9yb3VnaCByZXZpZXcgb2YgdGhlIGNvbmZpZ3VyYXRpb24uXG5cbkkgc2VlIHRoZSBzZWxmdGVzdHMgYXJlIHVzaW5nIGBFTkFCTEVfQVRPTUlDU19URVNUU2AgYW5kIGBfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBIb3dldmVyLCBvbiB0aGUga2VybmVsIHNpZGUsIGl0IHNlZW1zIGxpa2UganVzdCBgQlBGX0pJVGAgYWxvbmUgaXMgc3VmZmljaWVudCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IHRvIGJlIHByb3Blcmx5IGVuYWJsZWQuIEkgc3RpbGwgd2FudCB0byBiZSBjZXJ0YWluLCB0aG91Z2guIFRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2gsIEknbSBnb2luZyB0byBkb3VibGUtY2hlY2sgYW5kIGNyb3NzLXJlZmVyZW5jZSB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgYXNzb2NpYXRlZCBjb2RlIHRvIHZlcmlmeSB0aGF0IHRoZXJlIGFyZSBubyBoaWRkZW4gZGVwZW5kZW5jaWVzIG9yIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucyBJIGhhdmVuJ3QgYWNjb3VudGVkIGZvci4gSSBhbHdheXMgd2FudCB0byBtYWtlIHN1cmUgSSdtIG5vdCBvdmVybG9va2luZyBhbnl0aGluZyBjcml0aWNhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MDAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6MDQ6MzMuNDQ1ODQ4Nzc5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTc4MDY5NjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19CUEZfSklUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODowNDozMy43NDM2NjYxOTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1MTE0NDIyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRoYXQgYEJQRl9KSVRgLi4uIHRoYXQncyBhICpnZW5lcmljKiBjb25maWd1cmF0aW9uIG9wdGlvbiwgcmlnaHQ/IEl0J3Mgbm90IGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgYXQgbGVhc3Qgbm90IGRpcmVjdGx5LiBCdXQgSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaG9va3Mgb3IgZGVwZW5kZW5jaWVzLiBTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEtjb25maWcgZmlsZXMsIHN0YXJ0aW5nIHdpdGggYGFyY2gvczM5MC9LY29uZmlnYCBiZWNhdXNlIHRoYXQncyB0aGUgY3VycmVudCBhcmVhIG9mIGZvY3VzLCBhbmQgY2hlY2tpbmcgZm9yIEJQRi1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoZXJlLiBUaGF0IHNob3VsZCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIHNpdHVhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMzcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODowNDozNi45OTQ4MjEzNjdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjMxMDA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL0tjb25maWc9NzU9Y29uZmlnIFMzOTBcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTE1Ny1cXHRzZWxlY3QgQVJDSF9XQU5UU19OT19JTlNUUlxcbmFyY2gvczM5MC9LY29uZmlnOjE1ODpcXHRzZWxlY3QgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVFxcbmFyY2gvczM5MC9LY29uZmlnLTE1OS1cXHRzZWxlY3QgQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy0yMDUtXFx0c2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTXFxuYXJjaC9zMzkwL0tjb25maWc6MjA2OlxcdHNlbGVjdCBIQVZFX0VCUEZfSklUIGlmIEhBVkVfTUFSQ0hfWjE5Nl9GRUFUVVJFU1xcbmFyY2gvczM5MC9LY29uZmlnLTIwNy1cXHRzZWxlY3QgSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODowNDozNy4yNjExNDYzMTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQxODgyMzE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIEpJVCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGBCUEZfSklUYCBvcHRpb24gc2VlbXMgdG8gYmUgYXV0b21hdGljYWxseSBlbmFibGVkIGlmIGBIQVZFX0VCUEZfSklUYCBpcyBjaG9zZW4sIHdoaWNoIGluIHR1cm4gcmVsaWVzIG9uIGBIQVZFX01BUkNIX1oxOTZfRkVBVFVSRVNgLiBUaGF0J3MgZ29vZCB0byBrbm93LiBUaGUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gZXhwbGljaXRseSBzZXQgYEJQRl9KSVRgIGFzIGEgY29uZmlnIG9wdGlvbjsgaXQgc2hvdWxkIGJlIGhhbmRsZWQgYmFzZWQgb24gdGhvc2UgZGVwZW5kZW5jaWVzLiBJdCdzIGEgZmFpcmx5IGdlbmVyaWMgY29uZmlnIG9wdGlvbi5cblxuTm93LCBob2xkIG9uLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBvbmx5IGxpc3QgY29uZmlncyB0aGF0ICpzcGVjaWZpY2FsbHkqIHJlbGF0ZSB0byB0aGUgbW9kaWZpZWQgY29kZSwgYW5kIHRvIGxlYXZlIG91dCB0aGUgbW9yZSBnZW5lcmFsIG9wdGlvbnMgc2luY2UgdGhvc2UgYXJlIGxpa2VseSBhbHJlYWR5IGVuYWJsZWQuIEdpdmVuIHRoYXQsIGxpc3RpbmcgYEJQRl9KSVRgIGl0c2VsZiBtaWdodCBiZSByZWR1bmRhbnQuXG5cbkhtbSwgYnV0IHdoYXQgYWJvdXQgbW9yZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IGRlYWwgd2l0aCBCUEYgYXJlbmEgYWxsb2NhdGlvbnMgb3IgYXRvbWljIG9wZXJhdGlvbnM/IEFyZSB0aGVyZSBhbnkgdGhhdCBzcGVjaWZpY2FsbHkgcGVydGFpbiB0byBvdXIgY2hhbmdlcz8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUgb3Igc29tZXRoaW5nIHNpbWlsYXIgdG8gc2VlIGlmIGFueSBvZiB0aG9zZSBtb3JlIHNwZWNpYWxpemVkIGNvbmZpZ3MgbmVlZCB0byBiZSBjYWxsZWQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYzMywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODowNDo0MS42Nzk5NzQzNTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5Njk3NjEyNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQVJFTkFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODowNDo0MS45NzY5NTkyOTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxNzY2ODE5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGluIHRoZSBmaXJzdCBwZXJzb24sIHJlZmxlY3RpbmcgdGhlIGRlc2NyaWJlZCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqQlBGIENvbmZpZ3VyYXRpb24gSHVudCoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBCZXJrZWxleSBQYWNrZXQgRmlsdGVyIChCUEYpIHdpdGhpbiB0aGlzIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEdpdmVuIHRoZSBjb21tb24gcHJhY3RpY2UgYW5kIG15IGV4cGVyaWVuY2UsIHRoZSBmaXJzdCBwbGFjZSBJJ20gZ29pbmcgdG8gY2hlY2sgaXMgbGlrZWx5IHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gZmlsZSwgYGluaXQvS2NvbmZpZ2AuIEl0J3MgdGhlIHVzdWFsIHN0YXJ0aW5nIHBvaW50IGZvciB0b3AtbGV2ZWwgZmVhdHVyZSBzZWxlY3Rpb25zLiBJZiB0aGF0IGRvZXNuJ3QgaW1tZWRpYXRlbHkgeWllbGQgdGhlIHNwZWNpZmljIEJQRiBzZXR0aW5ncywgbXkgbmV4dCBwb3J0IG9mIGNhbGwgaXMgcHJhY3RpY2FsbHkgZ3VhcmFudGVlZCB0byBiZSBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhhdCBkaXJlY3RvcnkgaXMgdGhlIGxvZ2ljYWwgaG9tZSBmb3IgQlBGLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLCBnaXZlbiBpdHMgY29yZSBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUga2VybmVsLiBJJ2xsIGZvY3VzIG15IHNlYXJjaCB0aGVyZSBpZiBgaW5pdC9LY29uZmlnYCBkb2Vzbid0IHByb3ZpZGUgd2hhdCBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDY5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTg6MDQ6NDUuMjk0NjMxODQ0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE0NDUzNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWctMi1cXG5rZXJuZWwvYnBmL0tjb25maWc6MzojIEJQRiBpbnRlcnByZXRlciB0aGF0LCBmb3IgZXhhbXBsZSwgY2xhc3NpYyBzb2NrZXQgZmlsdGVycyBkZXBlbmQgb24uXFxua2VybmVsL2JwZi9LY29uZmlnOjQ6Y29uZmlnIEJQRlxcbmtlcm5lbC9icGYvS2NvbmZpZy01LVxcdGJvb2xcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy03LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo4OiMgVXNlZCBieSBhcmNocyB0byB0ZWxsIHRoYXQgdGhleSBzdXBwb3J0IEJQRiBKSVQgY29tcGlsZXIgcGx1cyB3aGljaFxcbmtlcm5lbC9icGYvS2NvbmZpZy05LSMgZmxhdm91ci4gT25seSBvbmUgb2YgdGhlIHR3byBjYW4gYmUgc2VsZWN0ZWQgZm9yIGEgc3BlY2lmaWMgYXJjaCBzaW5jZVxcbmtlcm5lbC9icGYvS2NvbmZpZzoxMDojIGVCUEYgSklUIHN1cGVyc2VkZXMgdGhlIGNCUEYgSklULlxcbmtlcm5lbC9icGYvS2NvbmZpZy0xMS1cXG5rZXJuZWwvYnBmL0tjb25maWc6MTI6IyBDbGFzc2ljIEJQRiBKSVQgKGNCUEYpXFxua2VybmVsL2JwZi9LY29uZmlnOjEzOmNvbmZpZyBIQVZFX0NCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTE0LVxcdGJvb2xcXG5rZXJuZWwvYnBmL0tjb25maWctMTUtXFxua2VybmVsL2JwZi9LY29uZmlnOjE2OiMgRXh0ZW5kZWQgQlBGIEpJVCAoZUJQRilcXG5rZXJuZWwvYnBmL0tjb25maWc6MTc6Y29uZmlnIEhBVkVfRUJQRl9KSVRcXG5rZXJuZWwvYnBmL0tjb25maWctMTgtXFx0Ym9vbFxcbmtlcm5lbC9icGYvS2NvbmZpZy0xOS1cXG5rZXJuZWwvYnBmL0tjb25maWc6MjA6IyBVc2VkIGJ5IGFyY2hzIHRvIHRlbGwgdGhhdCB0aGV5IHdhbnQgdGhlIEJQRiBKSVQgY29tcGlsZXIgZW5hYmxlZCBieVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyMTojIGRlZmF1bHQgZm9yIGtlcm5lbHMgdGhhdCB3ZXJlIGNvbXBpbGVkIHdpdGggQlBGIEpJVCBzdXBwb3J0Llxcbmtlcm5lbC9icGYvS2NvbmZpZzoyMjpjb25maWcgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yMy1cXHRib29sXFxua2VybmVsL2JwZi9LY29uZmlnLTI0LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNTptZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWc6Mjk6XFx0c2VsZWN0IEJQRlxcbmtlcm5lbC9icGYvS2NvbmZpZy0zMC1cXHRzZWxlY3QgSVJRX1dPUktcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy0zOC1cXHRoZWxwXFxua2VybmVsL2JwZi9LY29uZmlnOjM5OlxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbmtlcm5lbC9icGYvS2NvbmZpZy00MC1cXHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxcbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cXG5rZXJuZWwvYnBmL0tjb25maWc6NDI6Y29uZmlnIEJQRl9KSVRcXG5rZXJuZWwvYnBmL0tjb25maWc6NDM6XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxua2VybmVsL2JwZi9LY29uZmlnOjQ0OlxcdGRlcGVuZHMgb24gQlBGXFxua2VybmVsL2JwZi9LY29uZmlnOjQ1OlxcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTQ2LVxcdHNlbGVjdCBFWEVDTUVNXFxua2VybmVsL2JwZi9LY29uZmlnLTQ3LVxcdGhlbHBcXG5rZXJuZWwvYnBmL0tjb25maWc6NDg6XFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXFxua2VybmVsL2JwZi9LY29uZmlnLTQ5LVxcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXFxua2VybmVsL2JwZi9LY29uZmlnOjUwOlxcdCAgaW50byB0aGUga2VybmVsLiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBzcGVlZC11cCBwcm9jZXNzaW5nIG9mIEJQRlxcbmtlcm5lbC9icGYvS2NvbmZpZy01MS1cXHQgIHByb2dyYW1zLlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL0tjb25maWc6NTk6XFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxua2VybmVsL2JwZi9LY29uZmlnOjYwOlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXFx1MDAyNlxcdTAwMjYgSEFWRV9FQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTYxLVxcdGhlbHBcXG5rZXJuZWwvYnBmL0tjb25maWc6NjI6XFx0ICBFbmFibGVzIEJQRiBKSVQgYW5kIHJlbW92ZXMgQlBGIGludGVycHJldGVyIHRvIGF2b2lkIHNwZWN1bGF0aXZlXFxua2VybmVsL2JwZi9LY29uZmlnOjYzOlxcdCAgZXhlY3V0aW9uIG9mIEJQRiBpbnN0cnVjdGlvbnMgYnkgdGhlIGludGVycHJldGVyLlxcbmtlcm5lbC9icGYvS2NvbmZpZy02NC1cXG5rZXJuZWwvYnBmL0tjb25maWc6NjU6XFx0ICBXaGVuIENPTkZJR19CUEZfSklUX0FMV0FZU19PTiBpcyBlbmFibGVkLCAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcXG5rZXJuZWwvYnBmL0tjb25maWctNjYtXFx0ICBpcyBwZXJtYW5lbnRseSBzZXQgdG8gMSBhbmQgc2V0dGluZyBhbnkgb3RoZXIgdmFsdWUgdGhhbiB0aGF0IHdpbGxcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxcbmtlcm5lbC9icGYvS2NvbmZpZzo3MDpcXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXFxua2VybmVsL2JwZi9LY29uZmlnOjcxOlxcdGRlcGVuZHMgb24gSEFWRV9FQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTcyLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo3Mzpjb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxcbmtlcm5lbC9icGYvS2NvbmZpZzo3NDpcXHRib29sIFxcXCJEaXNhYmxlIHVucHJpdmlsZWdlZCBCUEYgYnkgZGVmYXVsdFxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctNzUtXFx0ZGVmYXVsdCB5XFxua2VybmVsL2JwZi9LY29uZmlnOjc2OlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctNzctXFx0aGVscFxcbmtlcm5lbC9icGYvS2NvbmZpZzo3ODpcXHQgIERpc2FibGVzIHVucHJpdmlsZWdlZCBCUEYgYnkgZGVmYXVsdCBieSBzZXR0aW5nIHRoZSBjb3JyZXNwb25kaW5nXFxua2VybmVsL2JwZi9LY29uZmlnLTc5LVxcdCAgL3Byb2Mvc3lzL2tlcm5lbC91bnByaXZpbGVnZWRfYnBmX2Rpc2FibGVkIGtub2IgdG8gMi4gQW4gYWRtaW4gY2FuXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctODMtXFxua2VybmVsL2JwZi9LY29uZmlnOjg0OlxcdCAgVW5wcml2aWxlZ2VkIEJQRiBjb3VsZCBiZSB1c2VkIHRvIGV4cGxvaXQgY2VydGFpbiBwb3RlbnRpYWxcXG5rZXJuZWwvYnBmL0tjb25maWctODUtXFx0ICBzcGVjdWxhdGl2ZSBleGVjdXRpb24gc2lkZS1jaGFubmVsIHZ1bG5lcmFiaWxpdGllcyBvbiB1bm1pdGlnYXRlZFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnPTkwPXNvdXJjZSBcXFwia2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTkxLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo5Mjpjb25maWcgQlBGX0xTTVxcbmtlcm5lbC9icGYvS2NvbmZpZzo5MzpcXHRib29sIFxcXCJFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnOjk0OlxcdGRlcGVuZHMgb24gQlBGX0VWRU5UU1xcbmtlcm5lbC9icGYvS2NvbmZpZzo5NTpcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTk2LVxcdGRlcGVuZHMgb24gU0VDVVJJVFlcXG5rZXJuZWwvYnBmL0tjb25maWc6OTc6XFx0ZGVwZW5kcyBvbiBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTk4LVxcdGhlbHBcXG5rZXJuZWwvYnBmL0tjb25maWc6OTk6XFx0ICBFbmFibGVzIGluc3RydW1lbnRhdGlvbiBvZiB0aGUgc2VjdXJpdHkgaG9va3Mgd2l0aCBCUEYgcHJvZ3JhbXMgZm9yXFxua2VybmVsL2JwZi9LY29uZmlnLTEwMC1cXHQgIGltcGxlbWVudGluZyBkeW5hbWljIE1BQyBhbmQgQXVkaXQgUG9saWNpZXMuXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctMTAzLVxcbmtlcm5lbC9icGYvS2NvbmZpZzoxMDQ6ZW5kbWVudSAjIFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxODowNDo0NS41MDYwOTEyOTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY2MjMwOTgwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBCUEYgSklUIENvbmZpZ3VyYXRpb24gYW5kIEtleSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIEJQRiBKSVQgY29uZmlndXJhdGlvbi4gRnJvbSBhIGhpZ2ggbGV2ZWwsIGBCUEZfSklUYCBpcyB0aGUgY29yZSBjb25maWd1cmF0aW9uIHRvIGNvbnNpZGVyLCB3aGljaCBpcyBnZW5lcmljLiBObyBuZWVkIHRvIGxpc3Qgc3BlY2lmaWMgY29uZmlnIGRldGFpbHMgc2luY2UgYEJQRl9KSVRgIGlzIHRoZSBtYWluIGVuYWJsZXIsIGFuZCBpdCdzIGFscmVhZHkgZW5hYmxlZCBpbiBteSBzZXR1cC4gSSdtIGdvaW5nIHRvIGNvbnNpZGVyIGl0IGFzIGEgZ2l2ZW4uXG5cbk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG92ZXJsb29rIGFueSByZWxldmFudCBkZXRhaWxzLiBIbW0sIG5vIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gYEJQRl9QUk9CRV9BVE9NSUNgIGV4aXN0OyBpdCBsb29rcyBsaWtlIHRoYXQncyBqdXN0IHBhcnQgb2YgdGhlIEJQRiBpbnN0cnVjdGlvbiBzZXQgaXRzZWxmLiBHb29kIHRvIGtub3cuXG5cbkxldCdzIGRpdmUgaW50byB0aGUgY29yZSBzeW1ib2xzLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlc2UgZnVuY3Rpb25zOiBgZW1pdF9sZHhgLCBgZW1pdF9zdHhgLCBgYnBmX2ppdF9wcm9iZV9sb2FkX3ByZWAsIGBicGZfaml0X3Byb2JlX3N0b3JlX3ByZWAsIGFuZCBgYnBmX2ppdF9zdXBwb3J0c19pbnNuYC5cblxuSXQgc2VlbXMgbGlrZSBgZW1pdF9sZHhgIGFuZCBgZW1pdF9zdHhgIGFyZSB0aGUga2V5IGxvYWQvc3RvcmUgZnVuY3Rpb25zLiBMZXQgbWUgZG91YmxlLWNoZWNrLiBZZXMsIHRoZXkncmUgdGhlIHByaW1hcnkgb25lcywgYXMgSSBzdXNwZWN0ZWQuIEludGVyZXN0aW5nbHksIEkgc2VlIHRoYXQgdGhleSBhcmUgZGVjbGFyZWQgYXMgc3RhdGljIGZ1bmN0aW9ucy4gQXJlIHRoZXkgYWNjZXNzaWJsZT8gWWVzLCB0aGV5J3JlIGNhbGxlZCBmcm9tIGBicGZfaml0X2luc25gLiBBbmQgYXJlIHRoZXJlIG90aGVyIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byBjb25zaWRlcj9cblxuSSBzZWUgdGhhdCBgYnBmX2ppdF9wcm9iZV9sb2FkX3ByZWAgYW5kIGBicGZfaml0X3Byb2JlX3N0b3JlX3ByZWAgYXJlIGFsc28gc3RhdGljLCBhbmQgdGhleSdyZSBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgZW1pdF9sZHhgIGFuZCBgZW1pdF9zdHhgLiBJdCdzIGltcG9ydGFudCB0byBkb2N1bWVudCB0aGVzZSByZWxhdGlvbnNoaXBzLlxuXG5SaWdodCwgc28gSSB3aWxsIG5vdyBsaXN0IHRob3NlIGtleSBmdW5jdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgdG8gY29uY2x1ZGUgdGhlIGFzc2Vzc21lbnQgdXNpbmcgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5NTgsIk91dHB1dFRva2VucyI6MTU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE4OjA0OjUyLjE2ODQwNDg1OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZW1pdF9sZHhcIixcbiAgICBcImVtaXRfc3R4XCIsXG4gICAgXCJicGZfaml0X3Byb2JlX2xvYWRfcHJlXCIsXG4gICAgXCJicGZfaml0X3Byb2JlX3N0b3JlX3ByZVwiLFxuICAgIFwiYnBmX2ppdF9zdXBwb3J0c19pbnNuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBzdXBwb3J0IGZvciBCUEZfUFJPQkVfQVRPTUlDLCBCUEZfTE9BRF9BQ1EsIGFuZCBCUEZfU1RPUkVfUkVMIGluc3RydWN0aW9ucyBpbiB0aGUgczM5MCBCUEYgSklUIGNvbXBpbGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIEpJVCBsb2dpYyBvbiBzMzkwIGFyY2hpdGVjdHVyZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZW1pdF9sZHhcIixcbiAgICBcImVtaXRfc3R4XCIsXG4gICAgXCJicGZfaml0X3Byb2JlX2xvYWRfcHJlXCIsXG4gICAgXCJicGZfaml0X3Byb2JlX3N0b3JlX3ByZVwiLFxuICAgIFwiYnBmX2ppdF9zdXBwb3J0c19pbnNuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBzdXBwb3J0IGZvciBCUEZfUFJPQkVfQVRPTUlDLCBCUEZfTE9BRF9BQ1EsIGFuZCBCUEZfU1RPUkVfUkVMIGluc3RydWN0aW9ucyBpbiB0aGUgczM5MCBCUEYgSklUIGNvbXBpbGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIEpJVCBsb2dpYyBvbiBzMzkwIGFyY2hpdGVjdHVyZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowj9gjh[1] Phase: Succeeded StartedAt: 2026-07-24 18:05:04 +0000 UTC FinishedAt: 2026-07-24 18:05:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9gjh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-24 18:05:04 +0000 UTC FinishedAt: 2026-07-24 18:05:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9gjh[2] Phase: Succeeded StartedAt: 2026-07-24 18:05:04 +0000 UTC FinishedAt: 2026-07-24 19:29:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-24 18:05:04 +0000 UTC FinishedAt: 2026-07-24 19:29:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-24 18:05:04 +0000 UTC FinishedAt: 2026-07-24 18:05:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-24 18:05:04 +0000 UTC FinishedAt: 2026-07-24 18:05:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowj9gjh/series-workflowj9gjh-convert-artifact-1419946708/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-24 18:05:51 +0000 UTC FinishedAt: 2026-07-24 18:34:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-24 18:05:51 +0000 UTC FinishedAt: 2026-07-24 18:34:40 +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:*e2492a8d-dcb8-4e03-a97d-19fc8689db44,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-workflowj9gjh/series-workflowj9gjh-convert-artifact-1419946708/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": "1cb735ad-4fc8-423f-9a0b-ddf889cafcef", "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-workflowj9gjh/series-workflowj9gjh-build-action-3572164178/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-24 18:05:51 +0000 UTC FinishedAt: 2026-07-24 18:32:42 +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:*e2492a8d-dcb8-4e03-a97d-19fc8689db44,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-workflowj9gjh/series-workflowj9gjh-convert-artifact-1419946708/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": "1cb735ad-4fc8-423f-9a0b-ddf889cafcef", "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-workflowj9gjh/series-workflowj9gjh-build-action-3572164178/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-24 18:34:40 +0000 UTC FinishedAt: 2026-07-24 18:34:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-24 18:34:40 +0000 UTC FinishedAt: 2026-07-24 18:34:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-24 18:34:40 +0000 UTC FinishedAt: 2026-07-24 18:35:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-24 18:34:40 +0000 UTC FinishedAt: 2026-07-24 18:34:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowj9gjh/series-workflowj9gjh-convert-artifact-3280723603/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-24 18:35:01 +0000 UTC FinishedAt: 2026-07-24 18:36:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-24 18:35:01 +0000 UTC FinishedAt: 2026-07-24 18:36:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1cb735ad-4fc8-423f-9a0b-ddf889cafcef,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-workflowj9gjh/series-workflowj9gjh-build-action-3572164178/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-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-24 18:36:45 +0000 UTC FinishedAt: 2026-07-24 18:36:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-24 18:36:45 +0000 UTC FinishedAt: 2026-07-24 18:36:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-24 18:36:45 +0000 UTC FinishedAt: 2026-07-24 19:22:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-24 18:36:45 +0000 UTC FinishedAt: 2026-07-24 19:22:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e2492a8d-dcb8-4e03-a97d-19fc8689db44,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-workflowj9gjh/series-workflowj9gjh-convert-artifact-3280723603/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": "c2a6ded2-b4d1-46e8-9538-efe94b4d7605", "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-workflowj9gjh/series-workflowj9gjh-build-action-2641016007/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-24 18:36:45 +0000 UTC FinishedAt: 2026-07-24 19:22:02 +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:*e2492a8d-dcb8-4e03-a97d-19fc8689db44,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-workflowj9gjh/series-workflowj9gjh-convert-artifact-3280723603/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": "c2a6ded2-b4d1-46e8-9538-efe94b4d7605", "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-workflowj9gjh/series-workflowj9gjh-build-action-2641016007/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-24 19:22:13 +0000 UTC FinishedAt: 2026-07-24 19:22:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-24 19:22:13 +0000 UTC FinishedAt: 2026-07-24 19:22:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-24 19:22:13 +0000 UTC FinishedAt: 2026-07-24 19:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-24 19:22:13 +0000 UTC FinishedAt: 2026-07-24 19:24:08 +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:*c2a6ded2-b4d1-46e8-9538-efe94b4d7605,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-workflowj9gjh/series-workflowj9gjh-build-action-2641016007/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-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-24 19:24:19 +0000 UTC FinishedAt: 2026-07-24 19:24:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-24 19:24:20 +0000 UTC FinishedAt: 2026-07-24 19:29:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-24 19:24:20 +0000 UTC FinishedAt: 2026-07-24 19:29:02 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*1cb735ad-4fc8-423f-9a0b-ddf889cafcef,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c2a6ded2-b4d1-46e8-9538-efe94b4d7605,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-workflowj9gjh/series-workflowj9gjh-build-action-3572164178/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-workflowj9gjh/series-workflowj9gjh-build-action-2641016007/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-24 19:24:20 +0000 UTC FinishedAt: 2026-07-24 19:24:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-24 19:24:20 +0000 UTC FinishedAt: 2026-07-24 19:24:24 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowj9gjh/series-workflowj9gjh-convert-artifact-1867642636/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-24 19:24:20 +0000 UTC FinishedAt: 2026-07-24 19:24:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-24 19:24:20 +0000 UTC FinishedAt: 2026-07-24 19:24:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-24 19:24:32 +0000 UTC FinishedAt: 2026-07-24 19:29:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9gjh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["emit_ldx","emit_stx","bpf_jit_probe_load_pre","bpf_jit_probe_store_pre","bpf_jit_supports_insn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"7a4a0a50-b419-4eea-91e0-674c59645e82","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-24 19:24:32 +0000 UTC FinishedAt: 2026-07-24 19:28:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1cb735ad-4fc8-423f-9a0b-ddf889cafcef,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c2a6ded2-b4d1-46e8-9538-efe94b4d7605,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-workflowj9gjh/series-workflowj9gjh-build-action-3572164178/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-workflowj9gjh/series-workflowj9gjh-build-action-2641016007/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-workflowj9gjh/series-workflowj9gjh-convert-artifact-1867642636/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,}