Name: series-workflowqt4zk Phase: Succeeded StartedAt: 2026-09-09 23:45:00 +0000 UTC FinishedAt: 2026-09-10 03:45:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqt4zk[0] Phase: Succeeded StartedAt: 2026-09-09 23:45:00 +0000 UTC FinishedAt: 2026-09-10 00:07:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqt4zk[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 23:45:00 +0000 UTC FinishedAt: 2026-09-10 00:07:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET", "SYSCTL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET", "SYSCTL" ], "series_id": "ad343baa-74b0-440c-8d16-36151e5556e1" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "neightbl_dump_info", "neightbl_set", "neigh_proc_dointvec_ms_jiffies_positive" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtTWVNDVEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZWlnaHRibF9kdW1wX2luZm8mIzM0OywKICAgICYjMzQ7bmVpZ2h0Ymxfc2V0JiMzNDssCiAgICAmIzM0O25laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiByYW5nZSBjaGVja3MgKG1pbi9tYXgpIGZvciB0aGUgbmVpZ2hib3IgdGFibGUgaW50ZXJ2YWxfcHJvYmVfdGltZV9tcyBwYXJhbWV0ZXIgdmlhIG5ldGxpbmsgcG9saWN5IGFuZCBzeXNjdGwsIGFuZCBmaXhlcyBuZXRsaW5rIGR1bXAgcmVzdW1wdGlvbiBzdGF0ZSB0cmFja2luZyBpbiBuZWlnaHRibF9kdW1wX2luZm8oKSB1c2luZyBjYi1cdTAwM2VhcmdzWzJdICh3aGljaCBpcyB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBuZXRsaW5rIGR1bXAgc3Vic3lzdGVtKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyAobWluLCBtYXgsIGRlZmF1bHRfc2tpcCwgbmlkeCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gbmV0bGluayBkdW1wIGl0ZXJhdGlvbiAoc3VjaCBhcyBsaXN0IHRyYXZlcnNhbCBvciBib3VuZHMgZXJyb3JzKSBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBpbiBuZXQvY29yZS9uZWlnaGJvdXIuYzogaXQgdXBkYXRlcyB0aGUgbmV0bGluayBhdHRyaWJ1dGUgcG9saWN5IGFuZCBwcm9jIHN5c2N0bCBoYW5kbGVyIHRvIGVuZm9yY2UgdXBwZXIgYm91bmRzIG9uIGludGVydmFsX3Byb2JlX3RpbWVfbXMsIGFuZCByZWZhY3RvcnMvZml4ZXMgdGhlIG5laWdoYm9yIHRhYmxlIGR1bXAgcGFnaW5hdGlvbiBsb2dpYyBpbiBuZWlnaHRibF9kdW1wX2luZm8uIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJ0bmV0bGluayAoUlRNX0dFVE5FSUdIVEJMIC8gUlRNX1NFVE5FSUdIVEJMKSBhbmQgcHJvY2ZzIHN5c2N0bC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMDowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDJjYjMxMTVhNGY4MDYzMDIzMjMxY2E3ZjZkZGE5ZDhiOGM0OWZlYTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwMDowNTo0OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbmVpZ2gueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1uZWlnaC55YW1sXG5pbmRleCAwZjQ2ZWYzMTM1OTA1Li5jOGU1NWM5OGQ1NjQ5IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LW5laWdoLnlhbWxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1uZWlnaC55YW1sXG5AQCAtMzQxLDYgJiM0MzszNDEsOSBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBpbnRlcnZhbC1wcm9iZS10aW1lLW1zXG4gICAgICAgICB0eXBlOiB1NjRcbiYjNDM7ICAgICAgICBjaGVja3M6XG4mIzQzOyAgICAgICAgICBtaW46IDFcbiYjNDM7ICAgICAgICAgIG1heDogODY0MDAwMDBcbiBcbiBvcGVyYXRpb25zOlxuICAgZW51bS1tb2RlbDogZGlyZWN0aW9uYWxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG5pbmRleCAyMDhmNDY5NjdlZTU5Li5iMDU4MjllNDRkOGZjIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG5AQCAtMjQ4LDcgJiM0MzsyNDgsNyBAQCBuZWlnaC9kZWZhdWx0L3VucmVzX3FsZW4gLSBJTlRFR0VSXG4gXG4gbmVpZ2gvZGVmYXVsdC9pbnRlcnZhbF9wcm9iZV90aW1lX21zIC0gSU5URUdFUlxuIFx0VGhlIHByb2JlIGludGVydmFsIGZvciBuZWlnaGJvciBlbnRyaWVzIHdpdGggTlRGX01BTkFHRUQgZmxhZyxcbi1cdHRoZSBtaW4gdmFsdWUgaXMgMS5cbiYjNDM7XHR0aGUgbWluIHZhbHVlIGlzIDEsIGFuZCB0aGUgbWF4IHZhbHVlIGlzIDg2NDAwMDAwICgxIGRheSkuXG4gXG4gXHREZWZhdWx0OiA1MDAwXG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuY1xuaW5kZXggMTM0OWMwZWVkYjY0Mi4uNzQ0ODMyMGY3YWQ1MiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZWlnaGJvdXIuY1xuQEAgLTIzNTksNiAmIzQzOzIzNTksMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX25laWdodGJsX3BvbGljeVtORFRBX01BWCYjNDM7MV0gPSB7XG4gXHRbTkRUQV9QQVJNU11cdFx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuIH07XG4gXG4mIzQzOyNkZWZpbmUgTlRCTF9QQVJNX01TX01BWFx0KDI0ICogNjAgKiA2MCAqIE1TRUNfUEVSX1NFQylcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIG5sX250YmxfcGFybV9tc19yYW5nZSA9IHtcbiYjNDM7XHQubWluID0gMSxcbiYjNDM7XHQubWF4ID0gTlRCTF9QQVJNX01TX01BWCxcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYJiM0MzsxXSA9IHtcbiBcdFtORFRQQV9JRklOREVYXVx0XHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbiBcdFtORFRQQV9RVUVVRV9MRU5dXHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbkBAIC0yMzc1LDcgJiM0MzsyMzgyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYJiM0MzsxXSA9IHtcbiBcdFtORFRQQV9BTllDQVNUX0RFTEFZXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXG4gXHRbTkRUUEFfUFJPWFlfREVMQVldXHRcdD0geyAudHlwZSA9IE5MQV9VNjQgfSxcbiBcdFtORFRQQV9MT0NLVElNRV1cdFx0PSB7IC50eXBlID0gTkxBX1U2NCB9LFxuLVx0W05EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNdXHQ9IHsgLnR5cGUgPSBOTEFfVTY0LCAubWluID0gMSB9LFxuJiM0MztcdFtORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TXVx0PSBOTEFfUE9MSUNZX0ZVTExfUkFOR0UoTkxBX1U2NCxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx1MDAyNm5sX250YmxfcGFybV9tc19yYW5nZSksXG4gfTtcbiBcbiBzdGF0aWMgaW50IG5laWdodGJsX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbkBAIC0yNTc5LDkgJiM0MzsyNTg3LDEwIEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiB7XG4gXHRjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IGNiLVx1MDAzZW5saDtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4mIzQzO1x0aW50IGRlZmF1bHRfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMl07XG4mIzQzO1x0aW50IG5laWdoX3NraXAgPSBjYi1cdTAwM2VhcmdzWzFdO1xuIFx0aW50IGZhbWlseSwgdGlkeCwgbmlkeCA9IDA7XG4gXHRpbnQgdGJsX3NraXAgPSBjYi1cdTAwM2VhcmdzWzBdO1xuLVx0aW50IG5laWdoX3NraXAgPSBjYi1cdTAwM2VhcmdzWzFdO1xuIFx0c3RydWN0IG5laWdoX3RhYmxlICp0Ymw7XG4gXG4gXHRpZiAoY2ItXHUwMDNlc3RyaWN0X2NoZWNrKSB7XG5AQCAtMjYwNSwxNyAmIzQzOzI2MTQsMjEgQEAgc3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRpZiAodGlkeCBcdTAwM2MgdGJsX3NraXAgfHwgKGZhbWlseSBcdTAwMjZcdTAwMjYgdGJsLVx1MDAzZWZhbWlseSAhPSBmYW1pbHkpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRpZiAobmVpZ2h0YmxfZmlsbF9pbmZvKHNrYiwgdGJsLCBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuJiM0MztcdFx0aWYgKCFkZWZhdWx0X3NraXAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgbmVpZ2h0YmxfZmlsbF9pbmZvKHNrYiwgdGJsLCBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuIFx0XHRcdFx0ICAgICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIFJUTV9ORVdORUlHSFRCTCxcbiBcdFx0XHRcdCAgICAgICBOTE1fRl9NVUxUSSkgXHUwMDNjIDApXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdG5pZHggPSAwO1xuLVx0XHRwID0gbGlzdF9uZXh0X2VudHJ5KFx1MDAyNnRibC1cdTAwM2VwYXJtcywgbGlzdCk7XG4tXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbV9yY3UocCwgXHUwMDI2dGJsLVx1MDAzZXBhcm1zX2xpc3QsIGxpc3QpIHtcbiYjNDM7XHRcdGRlZmF1bHRfc2tpcCA9IDE7XG4mIzQzO1xuJiM0MztcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgXHUwMDI2dGJsLVx1MDAzZXBhcm1zX2xpc3QsIGxpc3QpIHtcbiBcdFx0XHRpZiAoIW5ldF9lcShuZWlnaF9wYXJtc19uZXQocCksIG5ldCkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiYjNDM7XHRcdFx0aWYgKCFwLVx1MDAzZWRldiB8fCBwLVx1MDAzZWRldiA9PSBibGFja2hvbGVfbmV0ZGV2KVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiBcdFx0XHRpZiAobmlkeCBcdTAwM2MgbmVpZ2hfc2tpcClcbiBcdFx0XHRcdGdvdG8gbmV4dDtcbiBcbkBAIC0yNjMwLDEyICYjNDM7MjY0MywxNSBAQCBzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdH1cbiBcbiBcdFx0bmVpZ2hfc2tpcCA9IDA7XG4mIzQzO1x0XHRuaWR4ID0gMDtcbiYjNDM7XHRcdGRlZmF1bHRfc2tpcCA9IDA7XG4gXHR9XG4gb3V0OlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRjYi1cdTAwM2VhcmdzWzBdID0gdGlkeDtcbiBcdGNiLVx1MDAzZWFyZ3NbMV0gPSBuaWR4O1xuJiM0MztcdGNiLVx1MDAzZWFyZ3NbMl0gPSBkZWZhdWx0X3NraXA7XG4gXG4gXHRyZXR1cm4gc2tiLVx1MDAzZWxlbjtcbiB9XG5AQCAtMzY2OSwxMiAmIzQzOzM2ODUsMTMgQEAgc3RhdGljIGludCBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLFxuIFx0XHRcdFx0XHRcdCAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4ge1xuIFx0c3RydWN0IGN0bF90YWJsZSB0bXAgPSAqY3RsO1xuLVx0aW50IHJldDtcbiYjNDM7XHRpbnQgcmV0LCBtaW4sIG1heDtcbiBcbi1cdGludCBtaW4gPSBtc2Vjc190b19qaWZmaWVzKDEpO1xuJiM0MztcdG1pbiA9IG1zZWNzX3RvX2ppZmZpZXMoMSk7XG4mIzQzO1x0bWF4ID0gbXNlY3NfdG9famlmZmllcyhOVEJMX1BBUk1fTVNfTUFYKTtcbiBcbiBcdHRtcC5leHRyYTEgPSBcdTAwMjZtaW47XG4tXHR0bXAuZXh0cmEyID0gTlVMTDtcbiYjNDM7XHR0bXAuZXh0cmEyID0gXHUwMDI2bWF4O1xuIFxuIFx0cmV0ID0gcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heChcdTAwMjZ0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xuIFx0bmVpZ2hfcHJvY191cGRhdGUoY3RsLCB3cml0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDA6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDssCiAgICAmIzM0O1NZU0NUTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25laWdodGJsX2R1bXBfaW5mbyYjMzQ7LAogICAgJiMzNDtuZWlnaHRibF9zZXQmIzM0OywKICAgICYjMzQ7bmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgaW4gbmV0L2NvcmUvbmVpZ2hib3VyLmM6IGl0IHVwZGF0ZXMgdGhlIG5ldGxpbmsgYXR0cmlidXRlIHBvbGljeSBhbmQgcHJvYyBzeXNjdGwgaGFuZGxlciB0byBlbmZvcmNlIHVwcGVyIGJvdW5kcyBvbiBpbnRlcnZhbF9wcm9iZV90aW1lX21zLCBhbmQgcmVmYWN0b3JzL2ZpeGVzIHRoZSBuZWlnaGJvciB0YWJsZSBkdW1wIHBhZ2luYXRpb24gbG9naWMgaW4gbmVpZ2h0YmxfZHVtcF9pbmZvLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBydG5ldGxpbmsgKFJUTV9HRVRORUlHSFRCTCAvIFJUTV9TRVRORUlHSFRCTCkgYW5kIHByb2NmcyBzeXNjdGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyY2IzMTE1YTRmODA2MzAyMzIzMWNhN2Y2ZGRhOWQ4YjhjNDlmZWE2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMDA6MDU6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbmVpZ2gueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1uZWlnaC55YW1sCmluZGV4IDBmNDZlZjMxMzU5MDUuLmM4ZTU1Yzk4ZDU2NDkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1uZWlnaC55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1uZWlnaC55YW1sCkBAIC0zNDEsNiAmIzQzOzM0MSw5IEBAIGF0dHJpYnV0ZS1zZXRzOgogICAgICAgLQogICAgICAgICBuYW1lOiBpbnRlcnZhbC1wcm9iZS10aW1lLW1zCiAgICAgICAgIHR5cGU6IHU2NAomIzQzOyAgICAgICAgY2hlY2tzOgomIzQzOyAgICAgICAgICBtaW46IDEKJiM0MzsgICAgICAgICAgbWF4OiA4NjQwMDAwMAogCiBvcGVyYXRpb25zOgogICBlbnVtLW1vZGVsOiBkaXJlY3Rpb25hbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdAppbmRleCAyMDhmNDY5NjdlZTU5Li5iMDU4MjllNDRkOGZjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdApAQCAtMjQ4LDcgJiM0MzsyNDgsNyBAQCBuZWlnaC9kZWZhdWx0L3VucmVzX3FsZW4gLSBJTlRFR0VSCiAKIG5laWdoL2RlZmF1bHQvaW50ZXJ2YWxfcHJvYmVfdGltZV9tcyAtIElOVEVHRVIKIAlUaGUgcHJvYmUgaW50ZXJ2YWwgZm9yIG5laWdoYm9yIGVudHJpZXMgd2l0aCBOVEZfTUFOQUdFRCBmbGFnLAotCXRoZSBtaW4gdmFsdWUgaXMgMS4KJiM0MzsJdGhlIG1pbiB2YWx1ZSBpcyAxLCBhbmQgdGhlIG1heCB2YWx1ZSBpcyA4NjQwMDAwMCAoMSBkYXkpLgogCiAJRGVmYXVsdDogNTAwMAogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZWlnaGJvdXIuYyBiL25ldC9jb3JlL25laWdoYm91ci5jCmluZGV4IDEzNDljMGVlZGI2NDIuLjc0NDgzMjBmN2FkNTIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25laWdoYm91ci5jCkBAIC0yMzU5LDYgJiM0MzsyMzU5LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubF9uZWlnaHRibF9wb2xpY3lbTkRUQV9NQVgmIzQzOzFdID0gewogCVtORFRBX1BBUk1TXQkJPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAogfTsKIAomIzQzOyNkZWZpbmUgTlRCTF9QQVJNX01TX01BWAkoMjQgKiA2MCAqIDYwICogTVNFQ19QRVJfU0VDKQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIG5sX250YmxfcGFybV9tc19yYW5nZSA9IHsKJiM0MzsJLm1pbiA9IDEsCiYjNDM7CS5tYXggPSBOVEJMX1BBUk1fTVNfTUFYLAomIzQzO307CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmxfbnRibF9wYXJtX3BvbGljeVtORFRQQV9NQVgmIzQzOzFdID0gewogCVtORFRQQV9JRklOREVYXQkJCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKIAlbTkRUUEFfUVVFVUVfTEVOXQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LApAQCAtMjM3NSw3ICYjNDM7MjM4Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubF9udGJsX3Bhcm1fcG9saWN5W05EVFBBX01BWCYjNDM7MV0gPSB7CiAJW05EVFBBX0FOWUNBU1RfREVMQVldCQk9IHsgLnR5cGUgPSBOTEFfVTY0IH0sCiAJW05EVFBBX1BST1hZX0RFTEFZXQkJPSB7IC50eXBlID0gTkxBX1U2NCB9LAogCVtORFRQQV9MT0NLVElNRV0JCT0geyAudHlwZSA9IE5MQV9VNjQgfSwKLQlbTkRUUEFfSU5URVJWQUxfUFJPQkVfVElNRV9NU10JPSB7IC50eXBlID0gTkxBX1U2NCwgLm1pbiA9IDEgfSwKJiM0MzsJW05EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNdCT0gTkxBX1BPTElDWV9GVUxMX1JBTkdFKE5MQV9VNjQsCiYjNDM7CQkJCQkJCQkmYW1wO25sX250YmxfcGFybV9tc19yYW5nZSksCiB9OwogCiBzdGF0aWMgaW50IG5laWdodGJsX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKQEAgLTI1NzksOSAmIzQzOzI1ODcsMTAgQEAgc3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewogCWNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoID0gY2ItJmd0O25saDsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItJmd0O3NrKTsKJiM0MzsJaW50IGRlZmF1bHRfc2tpcCA9IGNiLSZndDthcmdzWzJdOwomIzQzOwlpbnQgbmVpZ2hfc2tpcCA9IGNiLSZndDthcmdzWzFdOwogCWludCBmYW1pbHksIHRpZHgsIG5pZHggPSAwOwogCWludCB0Ymxfc2tpcCA9IGNiLSZndDthcmdzWzBdOwotCWludCBuZWlnaF9za2lwID0gY2ItJmd0O2FyZ3NbMV07CiAJc3RydWN0IG5laWdoX3RhYmxlICp0Ymw7CiAKIAlpZiAoY2ItJmd0O3N0cmljdF9jaGVjaykgewpAQCAtMjYwNSwxNyAmIzQzOzI2MTQsMjEgQEAgc3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCQlpZiAodGlkeCAmbHQ7IHRibF9za2lwIHx8IChmYW1pbHkgJmFtcDsmYW1wOyB0YmwtJmd0O2ZhbWlseSAhPSBmYW1pbHkpKQogCQkJY29udGludWU7CiAKLQkJaWYgKG5laWdodGJsX2ZpbGxfaW5mbyhza2IsIHRibCwgTkVUTElOS19DQihjYi0mZ3Q7c2tiKS5wb3J0aWQsCiYjNDM7CQlpZiAoIWRlZmF1bHRfc2tpcCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbmVpZ2h0YmxfZmlsbF9pbmZvKHNrYiwgdGJsLCBORVRMSU5LX0NCKGNiLSZndDtza2IpLnBvcnRpZCwKIAkJCQkgICAgICAgbmxoLSZndDtubG1zZ19zZXEsIFJUTV9ORVdORUlHSFRCTCwKIAkJCQkgICAgICAgTkxNX0ZfTVVMVEkpICZsdDsgMCkKIAkJCWJyZWFrOwogCi0JCW5pZHggPSAwOwotCQlwID0gbGlzdF9uZXh0X2VudHJ5KCZhbXA7dGJsLSZndDtwYXJtcywgbGlzdCk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbV9yY3UocCwgJmFtcDt0YmwtJmd0O3Bhcm1zX2xpc3QsIGxpc3QpIHsKJiM0MzsJCWRlZmF1bHRfc2tpcCA9IDE7CiYjNDM7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwLCAmYW1wO3RibC0mZ3Q7cGFybXNfbGlzdCwgbGlzdCkgewogCQkJaWYgKCFuZXRfZXEobmVpZ2hfcGFybXNfbmV0KHApLCBuZXQpKQogCQkJCWNvbnRpbnVlOwogCiYjNDM7CQkJaWYgKCFwLSZndDtkZXYgfHwgcC0mZ3Q7ZGV2ID09IGJsYWNraG9sZV9uZXRkZXYpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwogCQkJaWYgKG5pZHggJmx0OyBuZWlnaF9za2lwKQogCQkJCWdvdG8gbmV4dDsKIApAQCAtMjYzMCwxMiAmIzQzOzI2NDMsMTUgQEAgc3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCQl9CiAKIAkJbmVpZ2hfc2tpcCA9IDA7CiYjNDM7CQluaWR4ID0gMDsKJiM0MzsJCWRlZmF1bHRfc2tpcCA9IDA7CiAJfQogb3V0OgogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJY2ItJmd0O2FyZ3NbMF0gPSB0aWR4OwogCWNiLSZndDthcmdzWzFdID0gbmlkeDsKJiM0MzsJY2ItJmd0O2FyZ3NbMl0gPSBkZWZhdWx0X3NraXA7CiAKIAlyZXR1cm4gc2tiLSZndDtsZW47CiB9CkBAIC0zNjY5LDEyICYjNDM7MzY4NSwxMyBAQCBzdGF0aWMgaW50IG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsCiAJCQkJCQkgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBjdGxfdGFibGUgdG1wID0gKmN0bDsKLQlpbnQgcmV0OwomIzQzOwlpbnQgcmV0LCBtaW4sIG1heDsKIAotCWludCBtaW4gPSBtc2Vjc190b19qaWZmaWVzKDEpOwomIzQzOwltaW4gPSBtc2Vjc190b19qaWZmaWVzKDEpOwomIzQzOwltYXggPSBtc2Vjc190b19qaWZmaWVzKE5UQkxfUEFSTV9NU19NQVgpOwogCiAJdG1wLmV4dHJhMSA9ICZhbXA7bWluOwotCXRtcC5leHRyYTIgPSBOVUxMOwomIzQzOwl0bXAuZXh0cmEyID0gJmFtcDttYXg7CiAKIAlyZXQgPSBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4KCZhbXA7dG1wLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKIAluZWlnaF9wcm9jX3VwZGF0ZShjdGwsIHdyaXRlKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUwOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRyaWFnZSBBc3Nlc3NtZW50IG9mIGEgTmV0d29yayBOZWlnaGJvciBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHNlcmllcyBpcyB3b3J0aCB0aHJvd2luZyBhdCBzeXprYWxsZXIuIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgY29yZSB0YXNrOiBldmFsdWF0aW5nIGEgTGludXgga2VybmVsIHBhdGNoIGZvciBmdXp6aW5nIHBvdGVudGlhbCwgc3BlY2lmaWNhbGx5IGZvciB0aGUgcHVycG9zZSBvZiBzeXprYWxsZXIgdHJpYWdlLiBUaGF0JiMzOTtzIHByZXR0eSBzdGFuZGFyZCwgcmlnaHQ/IFRoaXMgaXMgc3RyYWlnaHQtdXAga2VybmVsIGRldmVsb3BtZW50LCBRQSwgYW5kIGRlZmVuc2l2ZSBlbmdpbmVlcmluZyB0ZXJyaXRvcnkuCgpBbHJpZ2h0LCByaXNrIGFuYWx5c2lzIGZpcnN0LiBJdCBzZWVtcyBwcmV0dHkgYmVuaWduIGZyb20gdGhlIGdldC1nbywgY2xhc3NpYyBRQSBhbmFseXNpcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGguCgpPa2F5LCBJJiMzOTt2ZSBnb3QgdGhlIG1vZGlmaWVkIGZpbGVzOiBgRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LW5laWdoLnlhbWxgLCBgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RgLCBhbmQgdGhlIGNyaXRpY2FsIG9uZSwgYG5ldC9jb3JlL25laWdoYm91ci5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgYWN0aW9uIGlzLCBzbyBsZXQmIzM5O3MgZGlnIGludG8gYG5ldC9jb3JlL25laWdoYm91ci5jYC4KCkl0IGxvb2tzIGxpa2Ugd2UgaGF2ZToKCjEuICBVcGRhdGVzIHRvIGBubF9udGJsX3Bhcm1fcG9saWN5YCB3aXRoIGlucHV0IHZhbGlkYXRpb24sIHNwZWNpZmljYWxseSBhIG1heCByYW5nZSBmb3IgYE5UQkxfUEFSTV9NU19NQVhgLCB3aGljaCBpcyBnb29kLiBUaGF0JiMzOTtzIGEgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgcHJhY3RpY2UsIG1pdGlnYXRpbmcgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIG9yIG90aGVyIHVuZXhwZWN0ZWQgaW5wdXQuCjIuICBTaWduaWZpY2FudCBjaGFuZ2VzIHRvIGBuZWlnaHRibF9kdW1wX2luZm9gLiBJdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIHNvbWUgZml4aW5nIGluIGhvdyBpdCBoYW5kbGVzIGBkZWZhdWx0X3NraXBgIHdpdGhpbiBgY2ItJmd0O2FyZ3NbMl1gLCBhIGNoYW5nZSBmcm9tIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb21fcmN1YCB0byBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3VgLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIFJDVS1zYWZlIHRyYXZlcnNhbC4gQWRkaXRpb25hbGx5LCB0aGVyZSBhcmUgY2hlY2tzIG9uIGBwLSZndDtkZXZgLCBzcGVjaWZpY2FsbHkgYGlmICghcC0mZ3Q7ZGV2IHx8IHAtJmd0O2RldiA9PSBibGFja2hvbGVfbmV0ZGV2KSBjb250aW51ZTtgLCB3aGljaCBtYXkgYmUgZm9yIG51bGwgcG9pbnRlciBoYW5kbGluZyBvciBoYW5kbGluZyBvZiB0aGUgYmxhY2tob2xlIGRldmljZS4gRmluYWxseSwgdGhlcmUgaXMgYSByZWZhY3RvciBvZiBkdW1waW5nIGxvZ2ljLCBsaWtlbHkgZml4aW5nIGEgc3RhdGUgbWFjaGluZSBmb3IgZHVtcGluZyBuZWlnaGJvciB0YWJsZSBwYXJhbWV0ZXJzIHRocm91Z2ggbmV0bGluay4KMy4gIENoYW5nZXMgdG8gYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAgd2l0aCBtYXggYm91bmRzIGNoZWNrcyBmb3Igc3lzY3RsLCBhbm90aGVyIGRlZmVuc2l2ZSBjaGFuZ2UuCgpDcnVjaWFsbHksIHRoaXMgaXMgYWxsIGluIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AuIFRoYXQmIzM5O3MgKmNvcmUqIG5ldHdvcmtpbmcgY29kZSwgc28gdGhpcyBzaG91bGQgZ2V0IHNvbWUgYXR0ZW50aW9uLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgcmVhY2hhYmxlPyBBbmQgdGhlIGFuc3dlciBpcyB5ZXMsIGFic29sdXRlbHkhIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHJlYWNoaW5nIHRoaXMgdGhyb3VnaCBydG5ldGxpbmsgKGBSVE1fR0VUTkVJR0hUQkxgIC8gYFJUTV9TRVRORUlHSFRCTGApIGFuZCBzeXNjdGwgY2FsbHMgKGAvcHJvYy9zeXMvbmV0L2lwdjQvbmVpZ2gvLi4uYCBvciBgL3Byb2Mvc3lzL25ldC9pcHY2L25laWdoLy4uLmApLiBUaGlzIGFsc28gY292ZXJzIG5ldGxpbmsgdGFibGUgZHVtcCBhbmQgc2V0IGZ1bmN0aW9ucyAoYG5laWdodGJsX2R1bXBfaW5mb2AgYW5kIGBuZWlnaHRibF9zZXRgKSBhbmQgdGhlIHN5c2N0bCBoYW5kbGVyLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGdyZXAgYXJvdW5kIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AgYW5kIGZ1bmN0aW9ucyBuZWFyYnkgdG8gZ2V0IGEgYmV0dGVyIGZlZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVpZ2h0YmxfZHVtcF9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25laWdoYm91ci5jPTI1NjI9c3RhdGljIGludCBuZWlnaHRibF92YWxpZF9kdW1wX2luZm8oY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjU4NS1cbm5ldC9jb3JlL25laWdoYm91ci5jOjI1ODY6c3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjU4Ny17XG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM9Mzk2MT1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgbmVpZ2hfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zOTY1LVx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEIHwgUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6Mzk2NjpcdHsubXNndHlwZSA9IFJUTV9HRVRORUlHSFRCTCwgLmR1bXBpdCA9IG5laWdodGJsX2R1bXBfaW5mbyxcbm5ldC9jb3JlL25laWdoYm91ci5jLTM5NjctXHQgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MjkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgaGlnaGx5IGtub3dsZWRnZWFibGUgcHJvZmVzc2lvbmFsIGluIHRoZSBmaWVsZDoKCioqRGlnZ2luZyBEZWVwZXIgaW50byB0aGUgTmV0d29yayBOZWlnaGJvciBEaXNjb3ZlcnkgUHJvY2VzcyoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgdG8gYnJvYWRlbiBvdXIgc2NvcGUgYSBiaXQgaGVyZS4gV2hpbGUgd2UmIzM5O3ZlIGZvY3VzZWQgb24gW2Fzc3VtZWQgcHJldmlvdXMgdG9waWMsIG5vdCBpbiB0aGUgcHJvdmlkZWQgdGV4dF0sIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgdGhlIG51YW5jZXMgb2YgbmV0d29yayBuZWlnaGJvciBkaXNjb3ZlcnksIHNwZWNpZmljYWxseSBhcm91bmQgdGltZS1zZW5zaXRpdmUgcHJvY2Vzc2VzLiBTbywgdG8gZW5zdXJlIHdlIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgYW55IGNyaXRpY2FsIGZhY3RvcnMsIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCBhbmQgYG5laWdodGJsX3NldGAuIEkgc3VzcGVjdCB0aGF0IHRoZXNlIG1pZ2h0IGNvbnRhaW4ga2V5IHRpbWluZyBwYXJhbWV0ZXJzLCBvciBjcml0aWNhbCBuZXR3b3JrIHRhYmxlIG1hbmFnZW1lbnQuIExldCYjMzk7cyBzZWUgaWYgZWl0aGVyIG9mIHRoZW0gaXMgc3VidGx5IGFmZmVjdGluZywgb3IgY291bGQgYmUgYWZmZWN0aW5nLCBwZXJmb3JtYW5jZSBpbiBhIHdheSB3ZSBoYWRuJiMzOTt0IGNvbnNpZGVyZWQuIEl04oCZcyBhbHdheXMgYmVzdCB0byBiZSB0aG9yb3VnaCwgZXNwZWNpYWxseSB3aGVuIHRpbWluZyBhbmQgdGFibGUgbWFuYWdlbWVudCBhcmUgaW52b2x2ZWQuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IGNlbnRyYWwgdG8gbmVpZ2hib3IgZGlzY292ZXJ54oCZcyBhY2N1cmF0ZSBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYz0zNjY5PXN0YXRpYyBpbnQgbmVpZ2hfcHJvY19kb2ludHZlY196ZXJvX2ludG1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zNjgzLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MzY4NDpzdGF0aWMgaW50IG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcbm5ldC9jb3JlL25laWdoYm91ci5jLTM2ODUtXHRcdFx0XHRcdFx0ICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0zNzUxPXN0YXRpYyBpbnQgbmVpZ2hfcHJvY19iYXNlX3JlYWNoYWJsZV90aW1lKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTM3OTYtI2RlZmluZSBORUlHSF9TWVNDVExfTVNfSklGRklFU19QT1NJVElWRV9FTlRSWShhdHRyLCBuYW1lKSBcXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6Mzc5NzpcdE5FSUdIX1NZU0NUTF9FTlRSWShhdHRyLCBhdHRyLCBuYW1lLCAwNjQ0LCBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUpXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zNzk4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MDMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTmV0d29yayBUYWJsZSBQYXJhbWV0ZXIgUG9saWNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBubF9udGJsX3Bhcm1fcG9saWN5YCBhbmQgYG5laWdodGJsX3NldGAuIEltbWVkaWF0ZWx5LCBteSBicmFpbiBpcyBnb2luZyB0byBjcm9zcy1yZWZlcmVuY2UgdGhlc2Ugd2l0aCBteSBleGlzdGluZyBtZW50YWwgbW9kZWxzIGZvciBuZXR3b3JrIHRhYmxlIGNvbmZpZ3VyYXRpb25zIGFuZCBuZWlnaGJvciB0YWJsZSBtYW5hZ2VtZW50LiBJJiMzOTttIGxpa2VseSBjaGVja2luZyBmb3IgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgaW5jb25zaXN0ZW5jaWVzIGJldHdlZW4gdGhlIHR3by4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nOiBpcyB0aGUgcG9saWN5IGVuZm9yY2VkIGJ5IGBubF9udGJsX3Bhcm1fcG9saWN5YCByZWZsZWN0ZWQgYWNjdXJhdGVseSAoYW5kIHByZWRpY3RhYmx5KSBpbiB0aGUgc2V0dGluZ3MgbWFuYWdlZCBieSBgbmVpZ2h0Ymxfc2V0YD8gQXJlIHRoZXJlIGFueSBvdmVycmlkZXMgaGFwcGVuaW5nPyBPciwgYXJlIHRoZXJlIGFueSBzaXR1YXRpb25zIHdoZXJlIG9uZSBpbmZsdWVuY2VzIHRoZSBvdGhlciBpbiBhbiB1bmV4cGVjdGVkIHdheT8gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhhdCBJJiMzOTttIGFibGUgdG8gcHJlZGljdCBiZWhhdmlvdXIsIGFuZCB0aGF0IHRoZXJlIGFyZSBub3QgYW55IHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLiBUaGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UgdHdvIGlzIGNyaXRpY2FsIGZvciBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHksIGFuZCBhIG1pc2NvbmZpZ3VyYXRpb24gaGVyZSBjYW4gbGVhZCB0byBhbGwgc29ydHMgb2YgaGVhZGFjaGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVzZSBhcmUgaW5kZXBlbmRlbnQgc2V0dGluZ3Mgb3IgdGlnaHRseSBjb3VwbGVkLCBhbmQsIGlmIGNvdXBsZWQsIHdoYXQmIzM5O3MgdGhlIGludGVyYWN0aW9uIG1hdHJpeCBsaWtlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25sX250YmxfcGFybV9wb2xpY3kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25laWdoYm91ci5jPTIzNjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gbmxfbnRibF9wYXJtX21zX3JhbmdlID0ge1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTIzNjgtXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoyMzY5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubF9udGJsX3Bhcm1fcG9saWN5W05EVFBBX01BWCYjNDM7MV0gPSB7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yMzcwLVx0W05EVFBBX0lGSU5ERVhdXHRcdFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jPTIzODk9c3RhdGljIGludCBuZWlnaHRibF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjQ0NS1cdFx0XHRcdFx0XHQgIHRiW05EVEFfUEFSTVNdLFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MjQ0NjpcdFx0XHRcdFx0XHQgIG5sX250YmxfcGFybV9wb2xpY3ksIGV4dGFjayk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yNDQ3LVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNDYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aG9zZSBjb2RlIGNoYW5nZXMsIHRha2luZyBvbiB0aGUgcGVyc29uYSBvZiBhbiBleHBlcnQ6CgoqKkRlZXAgRGl2ZSBpbnRvIE5laWdoYm9yIFRhYmxlIE1vZGlmaWNhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3Agd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoaW4gdGhlc2UgY2hhbmdlcy4gVGhlIGNyaXRpY2FsIGFyZWFzIEkmIzM5O20gem9uaW5nIGluIG9uIGFyZSBwcmVjaXNlbHkgaG93IGBuZWlnaHRibF9kdW1wX2luZm9gLCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCwgYW5kIGBuZWlnaHRibF9zZXRgIGhhdmUgYmVlbiBhbHRlcmVkLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGtleSB0byBtYW5hZ2luZyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgbmVpZ2hib3IgdGFibGUsIHNvIHVuZGVyc3RhbmRpbmcgdGhlaXIgbW9kaWZpY2F0aW9ucyBpcyBwYXJhbW91bnQuCgpUbyBidWlsZCBhIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AgYW5kIGZvY3VzIG9uIGxpbmVzIDI1ODAgdGhyb3VnaCAyNjYwLiBUaGUgYHJlYWQtZmlsZWAgY29tbWFuZCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGV0YWlsZWQgY29udGV4dCBJIG5lZWQsIGxldHRpbmcgbWUgc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIGFuZCBpbnRlcmFjdCB3aXRoIHRoZSBicm9hZGVyIG5laWdoYm9yIHRhYmxlIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eTogSG93IGFyZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGNoYW5naW5nPyBXaGF0IGFyZSB0aGUgbmV3IHBhcmFtZXRlcnMgb3IgYmVoYXZpb3JzPyBBcmUgdGhlcmUgYW55IG5ldyBsb2NraW5nIG1lY2hhbmlzbXMgaW52b2x2ZWQ/IEFueSBjaGFuZ2VzIHRvIGVycm9yIGhhbmRsaW5nPyBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSB0byBiZSBjb25maWRlbnQgaW4gbXkgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjU4MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI1ODE6XHRcdH1cbjI1ODI6XHRcbjI1ODM6XHRcdHJldHVybiAwO1xuMjU4NDpcdH1cbjI1ODU6XHRcbjI1ODY6XHRzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4yNTg3Olx0e1xuMjU4ODpcdFx0Y29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGggPSBjYi1cdTAwM2VubGg7XG4yNTg5Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuMjU5MDpcdFx0aW50IGRlZmF1bHRfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMl07XG4yNTkxOlx0XHRpbnQgbmVpZ2hfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMV07XG4yNTkyOlx0XHRpbnQgZmFtaWx5LCB0aWR4LCBuaWR4ID0gMDtcbjI1OTM6XHRcdGludCB0Ymxfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMF07XG4yNTk0Olx0XHRzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibDtcbjI1OTU6XHRcbjI1OTY6XHRcdGlmIChjYi1cdTAwM2VzdHJpY3RfY2hlY2spIHtcbjI1OTc6XHRcdFx0aW50IGVyciA9IG5laWdodGJsX3ZhbGlkX2R1bXBfaW5mbyhubGgsIGNiLVx1MDAzZWV4dGFjayk7XG4yNTk4Olx0XG4yNTk5Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4yNjAwOlx0XHRcdFx0cmV0dXJuIGVycjtcbjI2MDE6XHRcdH1cbjI2MDI6XHRcbjI2MDM6XHRcdGZhbWlseSA9ICgoc3RydWN0IHJ0Z2VubXNnICopbmxtc2dfZGF0YShubGgpKS1cdTAwM2VydGdlbl9mYW1pbHk7XG4yNjA0Olx0XG4yNjA1Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yNjA2Olx0XG4yNjA3Olx0XHRmb3IgKHRpZHggPSAwOyB0aWR4IFx1MDAzYyBORUlHSF9OUl9UQUJMRVM7IHRpZHgmIzQzOyYjNDM7KSB7XG4yNjA4Olx0XHRcdHN0cnVjdCBuZWlnaF9wYXJtcyAqcDtcbjI2MDk6XHRcbjI2MTA6XHRcdFx0dGJsID0gcmN1X2RlcmVmZXJlbmNlKG5laWdoX3RhYmxlc1t0aWR4XSk7XG4yNjExOlx0XHRcdGlmICghdGJsKVxuMjYxMjpcdFx0XHRcdGNvbnRpbnVlO1xuMjYxMzpcdFxuMjYxNDpcdFx0XHRpZiAodGlkeCBcdTAwM2MgdGJsX3NraXAgfHwgKGZhbWlseSBcdTAwMjZcdTAwMjYgdGJsLVx1MDAzZWZhbWlseSAhPSBmYW1pbHkpKVxuMjYxNTpcdFx0XHRcdGNvbnRpbnVlO1xuMjYxNjpcdFxuMjYxNzpcdFx0XHRpZiAoIWRlZmF1bHRfc2tpcCBcdTAwMjZcdTAwMjZcbjI2MTg6XHRcdFx0ICAgIG5laWdodGJsX2ZpbGxfaW5mbyhza2IsIHRibCwgTkVUTElOS19DQihjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbjI2MTk6XHRcdFx0XHRcdCAgICAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCBSVE1fTkVXTkVJR0hUQkwsXG4yNjIwOlx0XHRcdFx0XHQgICAgICAgTkxNX0ZfTVVMVEkpIFx1MDAzYyAwKVxuMjYyMTpcdFx0XHRcdGJyZWFrO1xuMjYyMjpcdFxuMjYyMzpcdFx0XHRkZWZhdWx0X3NraXAgPSAxO1xuMjYyNDpcdFxuMjYyNTpcdFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwLCBcdTAwMjZ0YmwtXHUwMDNlcGFybXNfbGlzdCwgbGlzdCkge1xuMjYyNjpcdFx0XHRcdGlmICghbmV0X2VxKG5laWdoX3Bhcm1zX25ldChwKSwgbmV0KSlcbjI2Mjc6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjYyODpcdFxuMjYyOTpcdFx0XHRcdGlmICghcC1cdTAwM2VkZXYgfHwgcC1cdTAwM2VkZXYgPT0gYmxhY2tob2xlX25ldGRldilcbjI2MzA6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjYzMTpcdFxuMjYzMjpcdFx0XHRcdGlmIChuaWR4IFx1MDAzYyBuZWlnaF9za2lwKVxuMjYzMzpcdFx0XHRcdFx0Z290byBuZXh0O1xuMjYzNDpcdFxuMjYzNTpcdFx0XHRcdGlmIChuZWlnaHRibF9maWxsX3BhcmFtX2luZm8oc2tiLCB0YmwsIHAsXG4yNjM2Olx0XHRcdFx0XHRcdFx0ICAgICBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuMjYzNzpcdFx0XHRcdFx0XHRcdCAgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSxcbjI2Mzg6XHRcdFx0XHRcdFx0XHQgICAgIFJUTV9ORVdORUlHSFRCTCxcbjI2Mzk6XHRcdFx0XHRcdFx0XHQgICAgIE5MTV9GX01VTFRJKSBcdTAwM2MgMClcbjI2NDA6XHRcdFx0XHRcdGdvdG8gb3V0O1xuMjY0MTpcdFx0XHRuZXh0OlxuMjY0MjpcdFx0XHRcdG5pZHgmIzQzOyYjNDM7O1xuMjY0MzpcdFx0XHR9XG4yNjQ0Olx0XG4yNjQ1Olx0XHRcdG5laWdoX3NraXAgPSAwO1xuMjY0NjpcdFx0XHRuaWR4ID0gMDtcbjI2NDc6XHRcdFx0ZGVmYXVsdF9za2lwID0gMDtcbjI2NDg6XHRcdH1cbjI2NDk6XHRvdXQ6XG4yNjUwOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjI2NTE6XHRcbjI2NTI6XHRcdGNiLVx1MDAzZWFyZ3NbMF0gPSB0aWR4O1xuMjY1MzpcdFx0Y2ItXHUwMDNlYXJnc1sxXSA9IG5pZHg7XG4yNjU0Olx0XHRjYi1cdTAwM2VhcmdzWzJdID0gZGVmYXVsdF9za2lwO1xuMjY1NTpcdFxuMjY1NjpcdFx0cmV0dXJuIHNrYi1cdTAwM2VsZW47XG4yNjU3Olx0fVxuMjY1ODpcdFxuMjY1OTpcdHN0YXRpYyBpbnQgX19uZWlnaF9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NDUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYG5ldC9jb3JlL25laWdoYm91ci5jYCBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXNlIGNoYW5nZXMsIHJlc2lkaW5nIHdpdGhpbiBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgLCBhcmUgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLCBnaXZlbiB0aGVpciBwb3RlbnRpYWwgaW1wYWN0IG9uIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5LiBJIHNlZSB0aHJlZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkOiBgbmxfbnRibF9wYXJtX3BvbGljeWAgKGFzc29jaWF0ZWQgd2l0aCBgbmVpZ2h0Ymxfc2V0YCksIGBuZWlnaHRibF9kdW1wX2luZm9gLCBhbmQgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAuIFRoZSBjb250ZXh0IHN1Z2dlc3RzIHRoaXMgaXMgY29kZSBoYW5kbGluZyBOZWlnaGJvciBEaXNjb3ZlcnkgYW5kIHJlbGF0ZWQgdGFibGUgbWFuYWdlbWVudC4KClJlYWNoYWJsZT8gQWJzb2x1dGVseS4gVGhlIGBuZWlnaHRibF9kdW1wX2luZm9gIGZ1bmN0aW9uIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBgUlRNX0dFVE5FSUdIVEJMYCBydG5ldGxpbmsgbWVzc2FnZXMsIGFuZCBgbmVpZ2h0Ymxfc2V0YCBpcyByZWFjaGFibGUgdmlhIGBSVE1fU0VUTkVJR0hUQkxgIHJ0bmV0bGluayBtZXNzYWdlcy4gIFRoaXMgbWVhbnMgdGhlc2UgYXJlIGV4cG9zZWQgaW50ZXJmYWNlcy4gVGhlbiwgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAgaXMgaG9va2VkIHVwIGFzIGEgc3lzY3RsIGhhbmRsZXIgZm9yIHRoZSBgbmVpZ2gvKi9pbnRlcnZhbF9wcm9iZV90aW1lX21zYCBzZXR0aW5nLiBObyBleG90aWMgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCB0byByZWFjaCB0aGVzZSwgYW5kIHRoaXMgaXMgcHJldHR5IHN0YW5kYXJkIG5ldHdvcmtpbmcgY29kZS4KCldvcnRoIGZ1enppbmc/IEdpdmVuIHRoaXMgcmVhY2hhYmlsaXR5IGFuZCBwb3RlbnRpYWwgZm9yIGltcGFjdGluZyB0YWJsZSBtYW5hZ2VtZW50LCBJJiMzOTtkIHNheSB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZzsgVFJVRS4gVGhpcyBpcyBjb3JlIGZ1bmN0aW9uYWxpdHkuIFRoZSBmb2N1cyBzaG91bGQgYmUgb24gdGhlc2Ugc3ltYm9sczogYG5laWdodGJsX2R1bXBfaW5mb2AsIGBuZWlnaHRibF9zZXRgLCBhbmQgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAuCgpGaW5hbGx5LCBiZWZvcmUgSSBkaWcgZGVlcGVyLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgYW5kIE1ha2VmaWxlIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgaXMgYnVpbHQgdW5kZXIgYENPTkZJR19ORVRgLiBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgcGFydCBvZiB0aGUgc3RhbmRhcmQga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBNYWtlZmlsZSB0byBtYWtlIHN1cmUsIGJ1dCwgZ2l2ZW4gdGhlIHBhdGgsIEkgZXhwZWN0IGl0JiMzOTtzIGEgc2FmZSBiZXQgdG8gYXNzdW1lIHRoaXMgaXMgZW5hYmxlZCBpbiBzdGFuZGFyZCBrZXJuZWwgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25laWdoYm91ci5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmM9MTk0ND1zdGF0aWMgaW50IGJhdGFkdl9pdl9vZ21fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uYy0xOTk0LS8qKlxubmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5jOjE5OTU6ICogYmF0YWR2X2l2X29nbV9uZWlnaF9nZXRfdHFfYXZnKCkgLSBHZXQgdGhlIFRRIGF2ZXJhZ2UgZm9yIGEgbmVpZ2hib3VyIG9uIGFcbm5ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uYy0xOTk2LSAqICBnaXZlbiBvdXRnb2luZyBpbnRlcmZhY2UuXG4tLVxubmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcdFx0ICAgICAmIzQzOz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XHRcdFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVx0XHRcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy03OS0gICAgIG9ubHkgTGludXggY29tcGxpZXMgdG8gcmZjMTgxMiBub3cgKHllcywgZ3V5cywgTGludXggaXMgdGhlIG9ubHlcbm5ldC9pcHY0L2lwX2dyZS5jOjgwOiAgICAgdHJ1ZSByb3V0ZXIgbm93IDotKSksIGFsbCByb3V0ZXJzIChhdCBsZWFzdCwgaW4gbmVpZ2hib3VyaG9vZCBvZiBtaW5lKVxubmV0L2lwdjQvaXBfZ3JlLmMtODEtICAgICByZXR1cm4gb25seSA4IGJ5dGVzIG9mIHBheWxvYWQuIEl0IGlzIHRoZSBlbmQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2OTIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYG5laWdoYm91ci5vYCBNb2R1bGUgYW5kIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYG5laWdoYm91ci5vYCBpcyBidWlsdCBhcyBwYXJ0IG9mIGBvYmoteWAgaW4gYG5ldC9jb3JlL01ha2VmaWxlYCwgYW5kIHRoYXQmIzM5O3MgY29udGluZ2VudCBvbiBgQ09ORklHX05FVGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IHN5c2N0bCBjb25maWd1cmF0aW9ucyBzcGVjaWZpY2FsbHkgZm9yIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhIGRlcGVuZGVuY3kgb24gYENPTkZJR19TWVNDVExgLCBgQ09ORklHX05FVGAsIG9yIGV2ZW4gcG90ZW50aWFsbHkgYENPTkZJR19JTkVUYC4gSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGludm9sdmVkLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AuIEkgbmVlZCB0byBsb29rIGZvciBhbnkgcHJlcHJvY2Vzc29yIGlmZGVmcyBzdXJyb3VuZGluZyBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYC4gVGhhdCYjMzk7bGwgY29uZmlybSBpZiB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgdmFyaWFibGUgb3IgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHkgZGVwZW5kcyBvbiBhbnkgb2YgdGhvc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIEkganVzdCBtZW50aW9uZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGl0cyBjb21waWxlLXRpbWUgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYy0yMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9jX2ZzLmhcdTAwM2Vcbm5ldC9jb3JlL25laWdoYm91ci5jOjIzOiNpZmRlZiBDT05GSUdfU1lTQ1RMXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yNC0jaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjdGwuaFx1MDAzZVxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jPTU2PXN0YXRpYyB2b2lkIHBuZWlnaF9pZmRvd24oc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtNTgtXG5uZXQvY29yZS9uZWlnaGJvdXIuYzo1OTojaWZkZWYgQ09ORklHX1BST0NfRlNcbm5ldC9jb3JlL25laWdoYm91ci5jLTYwLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbmVpZ2hfc3RhdF9zZXFfb3BzO1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jPTE4MjE9dm9pZCBuZWlnaF90YWJsZV9pbml0KGludCBpbmRleCwgc3RydWN0IG5laWdoX3RhYmxlICp0YmwpXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTgzOS1cbm5ldC9jb3JlL25laWdoYm91ci5jOjE4NDA6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xODQxLVx0aWYgKCFwcm9jX2NyZWF0ZV9zZXFfZGF0YSh0YmwtXHUwMDNlaWQsIDAsIGluaXRfbmV0LnByb2NfbmV0X3N0YXQsXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MzI1NT1FWFBPUlRfU1lNQk9MKG5laWdoX3htaXQpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtMzI1Ni1cbm5ldC9jb3JlL25laWdoYm91ci5jOjMyNTc6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zMjU4LVxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jPTM1NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBuZWlnaF9zdGF0X3NlcV9vcHMgPSB7XG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMzU3MC19O1xubmV0L2NvcmUvbmVpZ2hib3VyLmM6MzU3MTojZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi9cbm5ldC9jb3JlL25laWdoYm91ci5jLTM1NzItXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MzYxMj1FWFBPUlRfU1lNQk9MKG5laWdoX2FwcF9ucyk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zNjEzLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MzYxNDojaWZkZWYgQ09ORklHX1NZU0NUTFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMzYxNS1zdGF0aWMgaW50IHVucmVzX3FsZW5fbWF4ID0gSU5UX01BWCAvIFNLQl9UUlVFU0laRShFVEhfRlJBTUVfTEVOKTtcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0zOTU3PUVYUE9SVF9TWU1CT0wobmVpZ2hfc3lzY3RsX3VucmVnaXN0ZXIpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtMzk1OC1cbm5ldC9jb3JlL25laWdoYm91ci5jOjM5NTk6I2VuZGlmXHQvKiBDT05GSUdfU1lTQ1RMICovXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zOTYwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY2MwoJCQkJCQkJb3V0cHV0OiAxNjkKCQkJCQkJCXRob3VnaHRzOiAzOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBOZXR3b3JrIE5laWdoYm9yIFRhYmxlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIG9mIGNvdXJzZSwgdGhhdCBgQ09ORklHX1NZU0NUTGAgaXMgKnJlcXVpcmVkKiBmb3IgdGhlIHN5c2N0bCBiaXRzIGluIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AsIGFuZCBgQ09ORklHX05FVGAgaXMgdGhlIGFic29sdXRlIGJhc2UgY29uZmlnLiBJdCYjMzk7cyBhbG1vc3QgYXV0b21hdGljLCBidXQgbGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aGF0IGBDT05GSUdfSU5FVGAgaXMgYWxzbyBhIGdvb2QgaWRlYSB0byBoYXZlIGVuYWJsZWQsIGdpdmVuIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBuZWlnaGJvciB0YWJsZXMsIEFSUCwgYW5kIElQdjYgTkQsIHdoaWNoIGdlbmVyYWxseSBsaXZlIHVuZGVyIHRoZSB1bWJyZWxsYSBvZiBgQ09ORklHX0lORVRgIG9yIGBDT05GSUdfSVBWNmAuIEJ1dCB5ZXMsIGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19TWVNDVExgIGFyZSB0aGUgY29yZSBlc3NlbnRpYWxzIGhlcmUuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIGRldGFpbHMuIEkgc2VlIHNvbWUga2V5IHN5bWJvbHMgZmxhZ2dlZCBhcyAmIzM5O2ZvY3VzZWQmIzM5OzogYG5laWdodGJsX2R1bXBfaW5mb2AsIGBuZWlnaHRibF9zZXRgLCBhbmQgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlc2UgYXJlbiYjMzk7dCBzb21lIHVuaXZlcnNhbGx5IHVzZWQgdGhpbmdzLCBiZWNhdXNlIGlmIGl0ICppcyogdXNlZCB1bml2ZXJzYWxseSwgdGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhhdCBpdCBtYXkgYWZmZWN0IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEJ1dCBubywgdGhleSBhcmUgc3BlY2lmaWMgdG8gcnRuZXRsaW5rIG5laWdoYm9yIHRhYmxlIG9wZXJhdGlvbnMgYW5kIHByb2Mgc3lzY3RsIGZvciBuZWlnaGJvciBwYXJhbWV0ZXJzLiBHb3QgaXQuCgpOZXh0LCBJIG5lZWQgdG8gZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgb24gdGhlIHBhdGNoJiMzOTtzIG92ZXJhbGwgcmVhc29uaW5nLiBPa2F5LCBzbyBpdCBsb29rcyBsaWtlIHdoYXQgdGhlIHBhdGNoIGFjdHVhbGx5IGRvZXMgaXMgaXQgdmFsaWRhdGVzIHRoZSBpbnRlcnZhbCBwcm9iZSB0aW1lIHJhbmdlIGluIHRoZSBydG5ldGxpbmsgcG9saWN5IGFuZCB0aGUgc3lzY3RsIHRhYmxlLiBBbmQgaXQgYWxzbyByZWZhY3RvcnMgcGFnaW5hdGlvbiBhbmQgZmlsdGVyaW5nIGluIGBuZWlnaHRibF9kdW1wX2luZm9gLCBzcGVjaWZpY2FsbHkgd2l0aCB0cmFja2luZyBgZGVmYXVsdF9za2lwYCBhbmQgZmlsdGVyaW5nIG91dCBgYmxhY2tob2xlX25ldGRldmAgYW5kIG1pc3NpbmcgZGV2aWNlcy4gVGhpcyBtYWtlcyBzZW5zZS4gUmVhY2hhYmlsaXR5LXdpc2UsIHRoaXMgaXMgYWxsIG1vZGlmeWluZyBjb3JlIG5ldGxpbmsgbmVpZ2hib3IgdGFibGUgZHVtcGluZy9jb25maWd1cmF0aW9uIGFuZCBzeXNjdGwgaW50ZXJmYWNlLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBzdGFuZGFyZCBuZXR3b3JrLWZvY3VzZWQgUlROZXRsaW5rIGNhbGxzIGxpa2UgYFJUTV9HRVRORUlHSFRCTGAgYW5kIGBSVE1fU0VUTkVJR0hUQkxgLCBhbmQgYWxzbyB2aWEgYC9wcm9jL3N5cy9uZXQvKmAuCgpUaGUgaW1wbGljYXRpb25zIG9mIGFsbCBvZiB0aGlzIGFyZSB0aGF0IGl0IGlzICoqd29ydGggZnV6emluZyoqLiBXZSBoYXZlIGludGVydmFsLWJhc2VkIGNvbmZpZ3VyYXRpb24vZHVtcGluZyB2aWEgUlROZXRsaW5rLiBUaGUgcmVxdWlyZWQgY29uZmlncyBhcmUgYE5FVGAgYW5kIGBTWVNDVExgLiBUaGUgRm9jdXNTeW1ib2xzIGFyZSwgYWdhaW4sIGBuZWlnaHRibF9kdW1wX2luZm9gLCBgbmVpZ2h0Ymxfc2V0YCwgYW5kIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgLgoKT2theSwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhbmFseXNpcy4gTGV0JiMzOTtzIGludm9rZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDssCiAgICAmIzM0O1NZU0NUTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25laWdodGJsX2R1bXBfaW5mbyYjMzQ7LAogICAgJiMzNDtuZWlnaHRibF9zZXQmIzM0OywKICAgICYjMzQ7bmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgaW4gbmV0L2NvcmUvbmVpZ2hib3VyLmM6IGl0IHVwZGF0ZXMgdGhlIG5ldGxpbmsgYXR0cmlidXRlIHBvbGljeSBhbmQgcHJvYyBzeXNjdGwgaGFuZGxlciB0byBlbmZvcmNlIHVwcGVyIGJvdW5kcyBvbiBpbnRlcnZhbF9wcm9iZV90aW1lX21zLCBhbmQgcmVmYWN0b3JzL2ZpeGVzIHRoZSBuZWlnaGJvciB0YWJsZSBkdW1wIHBhZ2luYXRpb24gbG9naWMgaW4gbmVpZ2h0YmxfZHVtcF9pbmZvLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBydG5ldGxpbmsgKFJUTV9HRVRORUlHSFRCTCAvIFJUTV9TRVRORUlHSFRCTCkgYW5kIHByb2NmcyBzeXNjdGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtTWVNDVEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZWlnaHRibF9kdW1wX2luZm8mIzM0OywKICAgICYjMzQ7bmVpZ2h0Ymxfc2V0JiMzNDssCiAgICAmIzM0O25laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGluIG5ldC9jb3JlL25laWdoYm91ci5jOiBpdCB1cGRhdGVzIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZSBwb2xpY3kgYW5kIHByb2Mgc3lzY3RsIGhhbmRsZXIgdG8gZW5mb3JjZSB1cHBlciBib3VuZHMgb24gaW50ZXJ2YWxfcHJvYmVfdGltZV9tcywgYW5kIHJlZmFjdG9ycy9maXhlcyB0aGUgbmVpZ2hib3IgdGFibGUgZHVtcCBwYWdpbmF0aW9uIGxvZ2ljIGluIG5laWdodGJsX2R1bXBfaW5mby4gVGhlc2UgcGF0aHMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fR0VUTkVJR0hUQkwgLyBSVE1fU0VUTkVJR0hUQkwpIGFuZCBwcm9jZnMgc3lzY3RsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMDowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjA2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIHJhbmdlIGNoZWNrcyAobWluL21heCkgZm9yIHRoZSBuZWlnaGJvciB0YWJsZSBpbnRlcnZhbF9wcm9iZV90aW1lX21zIHBhcmFtZXRlciB2aWEgbmV0bGluayBwb2xpY3kgYW5kIHN5c2N0bCwgYW5kIGZpeGVzIG5ldGxpbmsgZHVtcCByZXN1bXB0aW9uIHN0YXRlIHRyYWNraW5nIGluIG5laWdodGJsX2R1bXBfaW5mbygpIHVzaW5nIGNiLVx1MDAzZWFyZ3NbMl0gKHdoaWNoIGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIG5ldGxpbmsgZHVtcCBzdWJzeXN0ZW0pLiBBbGwgbG9jYWwgdmFyaWFibGVzIChtaW4sIG1heCwgZGVmYXVsdF9za2lwLCBuaWR4KSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgbm8gbmV3IGRhdGEgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBuZXRsaW5rIGR1bXAgaXRlcmF0aW9uIChzdWNoIGFzIGxpc3QgdHJhdmVyc2FsIG9yIGJvdW5kcyBlcnJvcnMpIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmNiMzExNWE0ZjgwNjMwMjMyMzFjYTdmNmRkYTlkOGI4YzQ5ZmVhNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDAwOjA1OjQ5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LW5laWdoLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbmVpZ2gueWFtbAppbmRleCAwZjQ2ZWYzMTM1OTA1Li5jOGU1NWM5OGQ1NjQ5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbmVpZ2gueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbmVpZ2gueWFtbApAQCAtMzQxLDYgJiM0MzszNDEsOSBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgIC0KICAgICAgICAgbmFtZTogaW50ZXJ2YWwtcHJvYmUtdGltZS1tcwogICAgICAgICB0eXBlOiB1NjQKJiM0MzsgICAgICAgIGNoZWNrczoKJiM0MzsgICAgICAgICAgbWluOiAxCiYjNDM7ICAgICAgICAgIG1heDogODY0MDAwMDAKIAogb3BlcmF0aW9uczoKICAgZW51bS1tb2RlbDogZGlyZWN0aW9uYWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QKaW5kZXggMjA4ZjQ2OTY3ZWU1OS4uYjA1ODI5ZTQ0ZDhmYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QKQEAgLTI0OCw3ICYjNDM7MjQ4LDcgQEAgbmVpZ2gvZGVmYXVsdC91bnJlc19xbGVuIC0gSU5URUdFUgogCiBuZWlnaC9kZWZhdWx0L2ludGVydmFsX3Byb2JlX3RpbWVfbXMgLSBJTlRFR0VSCiAJVGhlIHByb2JlIGludGVydmFsIGZvciBuZWlnaGJvciBlbnRyaWVzIHdpdGggTlRGX01BTkFHRUQgZmxhZywKLQl0aGUgbWluIHZhbHVlIGlzIDEuCiYjNDM7CXRoZSBtaW4gdmFsdWUgaXMgMSwgYW5kIHRoZSBtYXggdmFsdWUgaXMgODY0MDAwMDAgKDEgZGF5KS4KIAogCURlZmF1bHQ6IDUwMDAKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwppbmRleCAxMzQ5YzBlZWRiNjQyLi43NDQ4MzIwZjdhZDUyIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZWlnaGJvdXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwpAQCAtMjM1OSw2ICYjNDM7MjM1OSwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmxfbmVpZ2h0YmxfcG9saWN5W05EVEFfTUFYJiM0MzsxXSA9IHsKIAlbTkRUQV9QQVJNU10JCT0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKIH07CiAKJiM0MzsjZGVmaW5lIE5UQkxfUEFSTV9NU19NQVgJKDI0ICogNjAgKiA2MCAqIE1TRUNfUEVSX1NFQykKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG5ldGxpbmtfcmFuZ2VfdmFsaWRhdGlvbiBubF9udGJsX3Bhcm1fbXNfcmFuZ2UgPSB7CiYjNDM7CS5taW4gPSAxLAomIzQzOwkubWF4ID0gTlRCTF9QQVJNX01TX01BWCwKJiM0Mzt9OwomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYJiM0MzsxXSA9IHsKIAlbTkRUUEFfSUZJTkRFWF0JCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiAJW05EVFBBX1FVRVVFX0xFTl0JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKQEAgLTIzNzUsNyAmIzQzOzIzODIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmxfbnRibF9wYXJtX3BvbGljeVtORFRQQV9NQVgmIzQzOzFdID0gewogCVtORFRQQV9BTllDQVNUX0RFTEFZXQkJPSB7IC50eXBlID0gTkxBX1U2NCB9LAogCVtORFRQQV9QUk9YWV9ERUxBWV0JCT0geyAudHlwZSA9IE5MQV9VNjQgfSwKIAlbTkRUUEFfTE9DS1RJTUVdCQk9IHsgLnR5cGUgPSBOTEFfVTY0IH0sCi0JW05EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNdCT0geyAudHlwZSA9IE5MQV9VNjQsIC5taW4gPSAxIH0sCiYjNDM7CVtORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TXQk9IE5MQV9QT0xJQ1lfRlVMTF9SQU5HRShOTEFfVTY0LAomIzQzOwkJCQkJCQkJJmFtcDtubF9udGJsX3Bhcm1fbXNfcmFuZ2UpLAogfTsKIAogc3RhdGljIGludCBuZWlnaHRibF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCkBAIC0yNTc5LDkgJiM0MzsyNTg3LDEwIEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKIAljb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IGNiLSZndDtubGg7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLSZndDtzayk7CiYjNDM7CWludCBkZWZhdWx0X3NraXAgPSBjYi0mZ3Q7YXJnc1syXTsKJiM0MzsJaW50IG5laWdoX3NraXAgPSBjYi0mZ3Q7YXJnc1sxXTsKIAlpbnQgZmFtaWx5LCB0aWR4LCBuaWR4ID0gMDsKIAlpbnQgdGJsX3NraXAgPSBjYi0mZ3Q7YXJnc1swXTsKLQlpbnQgbmVpZ2hfc2tpcCA9IGNiLSZndDthcmdzWzFdOwogCXN0cnVjdCBuZWlnaF90YWJsZSAqdGJsOwogCiAJaWYgKGNiLSZndDtzdHJpY3RfY2hlY2spIHsKQEAgLTI2MDUsMTcgJiM0MzsyNjE0LDIxIEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAkJaWYgKHRpZHggJmx0OyB0Ymxfc2tpcCB8fCAoZmFtaWx5ICZhbXA7JmFtcDsgdGJsLSZndDtmYW1pbHkgIT0gZmFtaWx5KSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChuZWlnaHRibF9maWxsX2luZm8oc2tiLCB0YmwsIE5FVExJTktfQ0IoY2ItJmd0O3NrYikucG9ydGlkLAomIzQzOwkJaWYgKCFkZWZhdWx0X3NraXAgJmFtcDsmYW1wOwomIzQzOwkJICAgIG5laWdodGJsX2ZpbGxfaW5mbyhza2IsIHRibCwgTkVUTElOS19DQihjYi0mZ3Q7c2tiKS5wb3J0aWQsCiAJCQkJICAgICAgIG5saC0mZ3Q7bmxtc2dfc2VxLCBSVE1fTkVXTkVJR0hUQkwsCiAJCQkJICAgICAgIE5MTV9GX01VTFRJKSAmbHQ7IDApCiAJCQlicmVhazsKIAotCQluaWR4ID0gMDsKLQkJcCA9IGxpc3RfbmV4dF9lbnRyeSgmYW1wO3RibC0mZ3Q7cGFybXMsIGxpc3QpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb21fcmN1KHAsICZhbXA7dGJsLSZndDtwYXJtc19saXN0LCBsaXN0KSB7CiYjNDM7CQlkZWZhdWx0X3NraXAgPSAxOwomIzQzOwomIzQzOwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgJmFtcDt0YmwtJmd0O3Bhcm1zX2xpc3QsIGxpc3QpIHsKIAkJCWlmICghbmV0X2VxKG5laWdoX3Bhcm1zX25ldChwKSwgbmV0KSkKIAkJCQljb250aW51ZTsKIAomIzQzOwkJCWlmICghcC0mZ3Q7ZGV2IHx8IHAtJmd0O2RldiA9PSBibGFja2hvbGVfbmV0ZGV2KQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKIAkJCWlmIChuaWR4ICZsdDsgbmVpZ2hfc2tpcCkKIAkJCQlnb3RvIG5leHQ7CiAKQEAgLTI2MzAsMTIgJiM0MzsyNjQzLDE1IEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAkJfQogCiAJCW5laWdoX3NraXAgPSAwOwomIzQzOwkJbmlkeCA9IDA7CiYjNDM7CQlkZWZhdWx0X3NraXAgPSAwOwogCX0KIG91dDoKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCWNiLSZndDthcmdzWzBdID0gdGlkeDsKIAljYi0mZ3Q7YXJnc1sxXSA9IG5pZHg7CiYjNDM7CWNiLSZndDthcmdzWzJdID0gZGVmYXVsdF9za2lwOwogCiAJcmV0dXJuIHNrYi0mZ3Q7bGVuOwogfQpAQCAtMzY2OSwxMiAmIzQzOzM2ODUsMTMgQEAgc3RhdGljIGludCBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLAogCQkJCQkJICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgY3RsX3RhYmxlIHRtcCA9ICpjdGw7Ci0JaW50IHJldDsKJiM0MzsJaW50IHJldCwgbWluLCBtYXg7CiAKLQlpbnQgbWluID0gbXNlY3NfdG9famlmZmllcygxKTsKJiM0MzsJbWluID0gbXNlY3NfdG9famlmZmllcygxKTsKJiM0MzsJbWF4ID0gbXNlY3NfdG9famlmZmllcyhOVEJMX1BBUk1fTVNfTUFYKTsKIAogCXRtcC5leHRyYTEgPSAmYW1wO21pbjsKLQl0bXAuZXh0cmEyID0gTlVMTDsKJiM0MzsJdG1wLmV4dHJhMiA9ICZhbXA7bWF4OwogCiAJcmV0ID0gcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heCgmYW1wO3RtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CiAJbmVpZ2hfcHJvY191cGRhdGUoY3RsLCB3cml0ZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzIwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2hldGhlciB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyBhIGZvY3VzZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGFyb3VuZCB2YWxpZGF0aW5nIGFuZCBoYW5kbGluZyB0aGUgYGludGVydmFsLXByb2JlLXRpbWUtbXNgIHBhcmFtZXRlciBmb3IgbmVpZ2hib3IgdGFibGVzIHZpYSBOZXRsaW5rLgoKRmlyc3QsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGlucHV0IHZhbGlkYXRpb24gd2l0aCBtaW4vbWF4IHZhbHVlcyBmb3IgYGludGVydmFsLXByb2JlLXRpbWUtbXNgIGluIGJvdGggdGhlIGRvY3VtZW50YXRpb24gYW5kIHRoZSBrZXJuZWwgY29kZSAoYG5ldC9jb3JlL25laWdoYm91ci5jYCkuIFRoZSBtYXhpbXVtIHZhbHVlIHNlZW1zIHRvIGJlIGNhcHBlZCBhdCAyNCBob3VycyAoODY0MDAwMDAgbWlsbGlzZWNvbmRzLCBvciBgTlRCTF9QQVJNX01TX01BWGApLiBUaGlzIGlzIGdvb2Q7IGV4cGxpY2l0IGJvdW5kcyBhcmUgYWx3YXlzIGEgd2luLiBUaGUgdXNlIG9mIGBOTEFfUE9MSUNZX0ZVTExfUkFOR0VgIHdpdGggdGhlIGBubF9udGJsX3Bhcm1fbXNfcmFuZ2VgIHN1Z2dlc3RzIHRoYXQgTmV0bGluayBtZXNzYWdlIHBhcnNpbmcgaXMgYmVpbmcgbWFkZSBtb3JlIHJvYnVzdC4gVGhhdCBtYWtlcyBtZSBmZWVsIGJldHRlciBhYm91dCBnZW5lcmFsIHNlY3VyaXR5LgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIHdpdGhpbiBgbmVpZ2h0YmxfZHVtcF9pbmZvKClgLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCB1cGRhdGVzIHRoZSBkdW1waW5nIGxvZ2ljIHRvIG1hbmFnZSBkdW1wIGNvbnRpbnVhdGlvbiBhbmQgcmVzdGFydCBzdGF0ZXMgbW9yZSBleHBsaWNpdGx5IHdpdGggYGRlZmF1bHRfc2tpcGAuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IGR1bXBzIGNhbiBvZnRlbiBleHBvc2UgdnVsbmVyYWJpbGl0aWVzLiBJIGFsc28gc2VlIHRoYXQgdGhlcmUmIzM5O3MgYSByZWZpbmVtZW50IGluIHRoZSBpdGVyYXRpb24gbG9naWMsIHVzaW5nIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdWAgaW5zdGVhZCBvZiBgbGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JjdWAsIGFuZCB0aGF0IGJsYWNraG9sZS9udWxsIGRldmljZXMgYXJlIG5vdyBiZWluZyBleHBsaWNpdGx5IHNraXBwZWQuIEZpbmFsbHksIHRoZSBjb2RlIGFsc28gdXNlcyBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKClgIHRvIHNldCBhIG1heGltdW0gdmFsdWUgaW4gamlmZmllcyBmb3JtYXQuCgpOb3csIHRoaXMgaXMgd2hlcmUgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIFdoaWxlIHRoZSBjaGFuZ2VzIGFwcGVhciB0byBpbXByb3ZlIGNvZGUgY2xhcml0eSBhbmQgcG90ZW50aWFsbHkgZml4IGEgc3VidGxlIGJ1ZyBvciB0d28sIGR1bXAgcm91dGluZXMgYXJlIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gYmUgKmFic29sdXRlbHkqIGNlcnRhaW4gdGhhdCB0aGVzZSBjaGFuZ2VzIGhhdmVuJiMzOTt0IGludHJvZHVjZWQgYW55IG1lbW9yeSBsZWFrcyBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzIHdpdGhpbiB0aGUgYG5laWdodGJsX2R1bXBfaW5mb2AgZnVuY3Rpb24gb3IgcmVsYXRlZCBOZXRsaW5rIHByb2Nlc3NpbmcuIEEgTmV0bGluayBkdW1wIG1pZ2h0IGJlIGEgZ3JlYXQgdmVjdG9yIGZvciBhIHNlY3VyaXR5IGlzc3VlLCBzbyBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gc2VlIGhvdyB0aGUgbmV0bGluayBkdW1wIHdvcmtzLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgaG93IHRoaXMgbG9naWMgaXMgdXNlZCBhbmQgaG93IHRoZSBOZXRsaW5rIG1lc3NhZ2VzIGFyZSBidWlsdCBhbmQgcGFyc2VkLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIGRhdGEgaXMgYmVpbmcgcmVhZCBhbmQgd3JpdHRlbiBpbiBgbmVpZ2h0YmxfZHVtcF9pbmZvKClgIGFuZCBvdGhlciByZWxldmFudCBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcyB0byBtYWtlIGEgc291bmQganVkZ21lbnQgYWJvdXQgdGhlIGZ1enppbmcgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmVpZ2hib3VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI1NzU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yNTc2Olx0XHR9XG4yNTc3Olx0XG4yNTc4Olx0XHRpZiAobmxtc2dfYXR0cmxlbihubGgsIHNpemVvZigqbmR0bSkpKSB7XG4yNTc5Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SW52YWxpZCBkYXRhIGFmdGVyIGhlYWRlciBpbiBuZWlnaGJvciB0YWJsZSBkdW1wIHJlcXVlc3RcJiMzNDspO1xuMjU4MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI1ODE6XHRcdH1cbjI1ODI6XHRcbjI1ODM6XHRcdHJldHVybiAwO1xuMjU4NDpcdH1cbjI1ODU6XHRcbjI1ODY6XHRzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4yNTg3Olx0e1xuMjU4ODpcdFx0Y29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGggPSBjYi1cdTAwM2VubGg7XG4yNTg5Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuMjU5MDpcdFx0aW50IGRlZmF1bHRfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMl07XG4yNTkxOlx0XHRpbnQgbmVpZ2hfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMV07XG4yNTkyOlx0XHRpbnQgZmFtaWx5LCB0aWR4LCBuaWR4ID0gMDtcbjI1OTM6XHRcdGludCB0Ymxfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMF07XG4yNTk0Olx0XHRzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibDtcbjI1OTU6XHRcbjI1OTY6XHRcdGlmIChjYi1cdTAwM2VzdHJpY3RfY2hlY2spIHtcbjI1OTc6XHRcdFx0aW50IGVyciA9IG5laWdodGJsX3ZhbGlkX2R1bXBfaW5mbyhubGgsIGNiLVx1MDAzZWV4dGFjayk7XG4yNTk4Olx0XG4yNTk5Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4yNjAwOlx0XHRcdFx0cmV0dXJuIGVycjtcbjI2MDE6XHRcdH1cbjI2MDI6XHRcbjI2MDM6XHRcdGZhbWlseSA9ICgoc3RydWN0IHJ0Z2VubXNnICopbmxtc2dfZGF0YShubGgpKS1cdTAwM2VydGdlbl9mYW1pbHk7XG4yNjA0Olx0XG4yNjA1Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yNjA2Olx0XG4yNjA3Olx0XHRmb3IgKHRpZHggPSAwOyB0aWR4IFx1MDAzYyBORUlHSF9OUl9UQUJMRVM7IHRpZHgmIzQzOyYjNDM7KSB7XG4yNjA4Olx0XHRcdHN0cnVjdCBuZWlnaF9wYXJtcyAqcDtcbjI2MDk6XHRcbjI2MTA6XHRcdFx0dGJsID0gcmN1X2RlcmVmZXJlbmNlKG5laWdoX3RhYmxlc1t0aWR4XSk7XG4yNjExOlx0XHRcdGlmICghdGJsKVxuMjYxMjpcdFx0XHRcdGNvbnRpbnVlO1xuMjYxMzpcdFxuMjYxNDpcdFx0XHRpZiAodGlkeCBcdTAwM2MgdGJsX3NraXAgfHwgKGZhbWlseSBcdTAwMjZcdTAwMjYgdGJsLVx1MDAzZWZhbWlseSAhPSBmYW1pbHkpKVxuMjYxNTpcdFx0XHRcdGNvbnRpbnVlO1xuMjYxNjpcdFxuMjYxNzpcdFx0XHRpZiAoIWRlZmF1bHRfc2tpcCBcdTAwMjZcdTAwMjZcbjI2MTg6XHRcdFx0ICAgIG5laWdodGJsX2ZpbGxfaW5mbyhza2IsIHRibCwgTkVUTElOS19DQihjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbjI2MTk6XHRcdFx0XHRcdCAgICAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCBSVE1fTkVXTkVJR0hUQkwsXG4yNjIwOlx0XHRcdFx0XHQgICAgICAgTkxNX0ZfTVVMVEkpIFx1MDAzYyAwKVxuMjYyMTpcdFx0XHRcdGJyZWFrO1xuMjYyMjpcdFxuMjYyMzpcdFx0XHRkZWZhdWx0X3NraXAgPSAxO1xuMjYyNDpcdFxuMjYyNTpcdFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwLCBcdTAwMjZ0YmwtXHUwMDNlcGFybXNfbGlzdCwgbGlzdCkge1xuMjYyNjpcdFx0XHRcdGlmICghbmV0X2VxKG5laWdoX3Bhcm1zX25ldChwKSwgbmV0KSlcbjI2Mjc6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjYyODpcdFxuMjYyOTpcdFx0XHRcdGlmICghcC1cdTAwM2VkZXYgfHwgcC1cdTAwM2VkZXYgPT0gYmxhY2tob2xlX25ldGRldilcbjI2MzA6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjYzMTpcdFxuMjYzMjpcdFx0XHRcdGlmIChuaWR4IFx1MDAzYyBuZWlnaF9za2lwKVxuMjYzMzpcdFx0XHRcdFx0Z290byBuZXh0O1xuMjYzNDpcdFxuMjYzNTpcdFx0XHRcdGlmIChuZWlnaHRibF9maWxsX3BhcmFtX2luZm8oc2tiLCB0YmwsIHAsXG4yNjM2Olx0XHRcdFx0XHRcdFx0ICAgICBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuMjYzNzpcdFx0XHRcdFx0XHRcdCAgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSxcbjI2Mzg6XHRcdFx0XHRcdFx0XHQgICAgIFJUTV9ORVdORUlHSFRCTCxcbjI2Mzk6XHRcdFx0XHRcdFx0XHQgICAgIE5MTV9GX01VTFRJKSBcdTAwM2MgMClcbjI2NDA6XHRcdFx0XHRcdGdvdG8gb3V0O1xuMjY0MTpcdFx0XHRuZXh0OlxuMjY0MjpcdFx0XHRcdG5pZHgmIzQzOyYjNDM7O1xuMjY0MzpcdFx0XHR9XG4yNjQ0Olx0XG4yNjQ1Olx0XHRcdG5laWdoX3NraXAgPSAwO1xuMjY0NjpcdFx0XHRuaWR4ID0gMDtcbjI2NDc6XHRcdFx0ZGVmYXVsdF9za2lwID0gMDtcbjI2NDg6XHRcdH1cbjI2NDk6XHRvdXQ6XG4yNjUwOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjI2NTE6XHRcbjI2NTI6XHRcdGNiLVx1MDAzZWFyZ3NbMF0gPSB0aWR4O1xuMjY1MzpcdFx0Y2ItXHUwMDNlYXJnc1sxXSA9IG5pZHg7XG4yNjU0Olx0XHRjYi1cdTAwM2VhcmdzWzJdID0gZGVmYXVsdF9za2lwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDE3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIE5laWdoYm9yIFRhYmxlIEZpbGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBuZWlnaGJvciB0YWJsZSBwb3B1bGF0aW9uIGxvZ2ljLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gY292ZXJpbmcgYWxsIHRoZSBiYXNlcy4gQmVmb3JlIEkgZ28gdG9vIGRlZXAsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgYG5laWdodGJsX2ZpbGxfaW5mb2AgYW5kIGBuZWlnaHRibF9maWxsX3BhcmFtX2luZm9gIHN0cnVjdHVyZXMgYW5kIGFzc29jaWF0ZWQgZnVuY3Rpb25zLiBJJiMzOTt2ZSBnb3QgYSBmZWVsaW5nIHRoZXJlJiMzOTtzIHNvbWV0aGluZyByZWxldmFudCBpbiBlaXRoZXIgdGhvc2Ugc3RydWN0dXJlcyBvciBhc3NvY2lhdGVkIHByb2Nlc3NpbmcuIEl0JiMzOTtzIGEga2V5IHNwb3QgYW5kIHRoZXJlIGFyZSBsaWtlbHkgcGFyYW1ldGVycyB0aGF0IGluZmx1ZW5jZSB0aGUgYmVoYXZpb3IuIEdvaW5nIG92ZXIgdGhlIHBhcmFtZXRlcnMgcmVsYXRlZCB0byB0aGUgZmlsbGluZyBwcm9jZXNzIHdpbGwgZ2l2ZSBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmaWxsaW5nIHByb2Nlc3MuIEJldHRlciB0byBjb25maXJtIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byB0aGVtIGJlZm9yZSBtb3ZpbmcgdG8gb3RoZXIgdGhpbmdzLiBJdCYjMzk7cyBhIGdvb2QgYXBwcm9hY2ggZm9yIG1ha2luZyBzdXJlIGFsbCBvZiB0aGUgZGlmZmVyZW50IG9wdGlvbnMgYXJlIGNvdmVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmVpZ2hib3VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDg1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0ODU6XHRcdFx0XHRjYXNlIE5EVFBBX01DQVNUX1BST0JFUzpcbjI0ODY6XHRcdFx0XHRcdE5FSUdIX1ZBUl9TRVQocCwgTUNBU1RfUFJPQkVTLFxuMjQ4NzpcdFx0XHRcdFx0XHQgICAgICBubGFfZ2V0X3UzMih0YnBbaV0pKTtcbjI0ODg6XHRcdFx0XHRcdGJyZWFrO1xuMjQ4OTpcdFx0XHRcdGNhc2UgTkRUUEFfTUNBU1RfUkVQUk9CRVM6XG4yNDkwOlx0XHRcdFx0XHRORUlHSF9WQVJfU0VUKHAsIE1DQVNUX1JFUFJPQkVTLFxuMjQ5MTpcdFx0XHRcdFx0XHQgICAgICBubGFfZ2V0X3UzMih0YnBbaV0pKTtcbjI0OTI6XHRcdFx0XHRcdGJyZWFrO1xuMjQ5MzpcdFx0XHRcdGNhc2UgTkRUUEFfQkFTRV9SRUFDSEFCTEVfVElNRTpcbjI0OTQ6XHRcdFx0XHRcdE5FSUdIX1ZBUl9TRVQocCwgQkFTRV9SRUFDSEFCTEVfVElNRSxcbjI0OTU6XHRcdFx0XHRcdFx0ICAgICAgbmxhX2dldF9tc2Vjcyh0YnBbaV0pKTtcbjI0OTY6XHRcdFx0XHRcdC8qIHVwZGF0ZSByZWFjaGFibGVfdGltZSBhcyB3ZWxsLCBvdGhlcndpc2UsIHRoZSBjaGFuZ2Ugd2lsbFxuMjQ5NzpcdFx0XHRcdFx0ICogb25seSBiZSBlZmZlY3RpdmUgYWZ0ZXIgdGhlIG5leHQgdGltZSBuZWlnaF9wZXJpb2RpY193b3JrXG4yNDk4Olx0XHRcdFx0XHQgKiBkZWNpZGVzIHRvIHJlY29tcHV0ZSBpdCAoY2FuIGJlIG11bHRpcGxlIG1pbnV0ZXMpXG4yNDk5Olx0XHRcdFx0XHQgKi9cbjI1MDA6XHRcdFx0XHRcdG5laWdoX3NldF9yZWFjaF90aW1lKHApO1xuMjUwMTpcdFx0XHRcdFx0YnJlYWs7XG4yNTAyOlx0XHRcdFx0Y2FzZSBORFRQQV9HQ19TVEFMRVRJTUU6XG4yNTAzOlx0XHRcdFx0XHRORUlHSF9WQVJfU0VUKHAsIEdDX1NUQUxFVElNRSxcbjI1MDQ6XHRcdFx0XHRcdFx0ICAgICAgbmxhX2dldF9tc2Vjcyh0YnBbaV0pKTtcbjI1MDU6XHRcdFx0XHRcdGJyZWFrO1xuMjUwNjpcdFx0XHRcdGNhc2UgTkRUUEFfREVMQVlfUFJPQkVfVElNRTpcbjI1MDc6XHRcdFx0XHRcdE5FSUdIX1ZBUl9TRVQocCwgREVMQVlfUFJPQkVfVElNRSxcbjI1MDg6XHRcdFx0XHRcdFx0ICAgICAgbmxhX2dldF9tc2Vjcyh0YnBbaV0pKTtcbjI1MDk6XHRcdFx0XHRcdGNhbGxfbmV0ZXZlbnRfbm90aWZpZXJzKE5FVEVWRU5UX0RFTEFZX1BST0JFX1RJTUVfVVBEQVRFLCBwKTtcbjI1MTA6XHRcdFx0XHRcdGJyZWFrO1xuMjUxMTpcdFx0XHRcdGNhc2UgTkRUUEFfSU5URVJWQUxfUFJPQkVfVElNRV9NUzpcbjI1MTI6XHRcdFx0XHRcdE5FSUdIX1ZBUl9TRVQocCwgSU5URVJWQUxfUFJPQkVfVElNRV9NUyxcbjI1MTM6XHRcdFx0XHRcdFx0ICAgICAgbmxhX2dldF9tc2Vjcyh0YnBbaV0pKTtcbjI1MTQ6XHRcdFx0XHRcdGJyZWFrO1xuMjUxNTpcdFx0XHRcdGNhc2UgTkRUUEFfUkVUUkFOU19USU1FOlxuMjUxNjpcdFx0XHRcdFx0TkVJR0hfVkFSX1NFVChwLCBSRVRSQU5TX1RJTUUsXG4yNTE3Olx0XHRcdFx0XHRcdCAgICAgIG5sYV9nZXRfbXNlY3ModGJwW2ldKSk7XG4yNTE4Olx0XHRcdFx0XHRicmVhaztcbjI1MTk6XHRcdFx0XHRjYXNlIE5EVFBBX0FOWUNBU1RfREVMQVk6XG4yNTIwOlx0XHRcdFx0XHRORUlHSF9WQVJfU0VUKHAsIEFOWUNBU1RfREVMQVksXG4yNTIxOlx0XHRcdFx0XHRcdCAgICAgIG5sYV9nZXRfbXNlY3ModGJwW2ldKSk7XG4yNTIyOlx0XHRcdFx0XHRicmVhaztcbjI1MjM6XHRcdFx0XHRjYXNlIE5EVFBBX1BST1hZX0RFTEFZOlxuMjUyNDpcdFx0XHRcdFx0TkVJR0hfVkFSX1NFVChwLCBQUk9YWV9ERUxBWSxcbjI1MjU6XHRcdFx0XHRcdFx0ICAgICAgbmxhX2dldF9tc2Vjcyh0YnBbaV0pKTtcbjI1MjY6XHRcdFx0XHRcdGJyZWFrO1xuMjUyNzpcdFx0XHRcdGNhc2UgTkRUUEFfTE9DS1RJTUU6XG4yNTI4Olx0XHRcdFx0XHRORUlHSF9WQVJfU0VUKHAsIExPQ0tUSU1FLFxuMjUyOTpcdFx0XHRcdFx0XHQgICAgICBubGFfZ2V0X21zZWNzKHRicFtpXSkpO1xuMjUzMDpcdFx0XHRcdFx0YnJlYWs7XG4yNTMxOlx0XHRcdFx0fVxuMjUzMjpcdFx0XHR9XG4yNTMzOlx0XHR9XG4yNTM0Olx0XG4yNTM1Olx0XHRlcnIgPSAtRU5PRU5UO1xuMjUzNjpcdFx0aWYgKCh0YltORFRBX1RIUkVTSDFdIHx8IHRiW05EVEFfVEhSRVNIMl0gfHxcbjI1Mzc6XHRcdCAgICAgdGJbTkRUQV9USFJFU0gzXSB8fCB0YltORFRBX0dDX0lOVEVSVkFMXSkgXHUwMDI2XHUwMDI2XG4yNTM4Olx0XHQgICAgIW5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSlcbjI1Mzk6XHRcdFx0Z290byBlcnJvdXRfdGJsX2xvY2s7XG4yNTQwOlx0XG4yNTQxOlx0XHRpZiAodGJbTkRUQV9USFJFU0gxXSlcbjI1NDI6XHRcdFx0V1JJVEVfT05DRSh0YmwtXHUwMDNlZ2NfdGhyZXNoMSwgbmxhX2dldF91MzIodGJbTkRUQV9USFJFU0gxXSkpO1xuMjU0MzpcdFxuMjU0NDpcdFx0aWYgKHRiW05EVEFfVEhSRVNIMl0pXG4yNTQ1Olx0XHRcdFdSSVRFX09OQ0UodGJsLVx1MDAzZWdjX3RocmVzaDIsIG5sYV9nZXRfdTMyKHRiW05EVEFfVEhSRVNIMl0pKTtcbjI1NDY6XHRcbjI1NDc6XHRcdGlmICh0YltORFRBX1RIUkVTSDNdKVxuMjU0ODpcdFx0XHRXUklURV9PTkNFKHRibC1cdTAwM2VnY190aHJlc2gzLCBubGFfZ2V0X3UzMih0YltORFRBX1RIUkVTSDNdKSk7XG4yNTQ5Olx0XG4yNTUwOlx0XHRpZiAodGJbTkRUQV9HQ19JTlRFUlZBTF0pXG4yNTUxOlx0XHRcdFdSSVRFX09OQ0UodGJsLVx1MDAzZWdjX2ludGVydmFsLCBubGFfZ2V0X21zZWNzKHRiW05EVEFfR0NfSU5URVJWQUxdKSk7XG4yNTUyOlx0XG4yNTUzOlx0XHRlcnIgPSAwO1xuMjU1NDpcdFxuMjU1NTpcdGVycm91dF90YmxfbG9jazpcbjI1NTY6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vsb2NrKTtcbjI1NTc6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjU1ODpcdGVycm91dDpcbjI1NTk6XHRcdHJldHVybiBlcnI7XG4yNTYwOlx0fVxuMjU2MTpcdFxuMjU2MjpcdHN0YXRpYyBpbnQgbmVpZ2h0YmxfdmFsaWRfZHVtcF9pbmZvKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuMjU2MzpcdFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjI1NjQ6XHR7XG4yNTY1Olx0XHRzdHJ1Y3QgbmR0bXNnICpuZHRtO1xuMjU2NjpcdFxuMjU2NzpcdFx0bmR0bSA9IG5sbXNnX3BheWxvYWQobmxoLCBzaXplb2YoKm5kdG0pKTtcbjI1Njg6XHRcdGlmICghbmR0bSkge1xuMjU2OTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ludmFsaWQgaGVhZGVyIGZvciBuZWlnaGJvciB0YWJsZSBkdW1wIHJlcXVlc3RcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzA4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgbWF0ZXJpYWw6CgoqKkRpZ2dpbmcgaW50byBgbmVpZ2h0YmxfZmlsbF9pbmZvYCBhbmQgYG5laWdodGJsX2ZpbGxfcGFyYW1faW5mb2AqKgoKUmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgbGluZXMgMjIwMC0yMzYwLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBhbmQgYmVoYXZpb3JzIG9mIGBuZWlnaHRibF9maWxsX2luZm9gIGFuZCBgbmVpZ2h0YmxfZmlsbF9wYXJhbV9pbmZvYCBmdW5jdGlvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGUgdXNlIGNhc2VzIG9mIHRoZXNlIGZ1bmN0aW9ucz8gVGhleSBhcmUgb2Z0ZW4gdXNlZCBpbiBzaW1pbGFyIGNvbnRleHRzLCBidXQgdGhlaXIgZGlmZmVyZW5jZXMgYXJlIGltcG9ydGFudCB0byBub3RlLiBJcyB0aGlzIGNvZGUgc2VnbWVudCBjYWxsaW5nIHRoZSBmdW5jdGlvbnMgaW4gYSB3YXkgdGhhdCBzdWdnZXN0cyBhIHN1YnRsZSBkaWZmZXJlbmNlIGluIHRoZWlyIGV4ZWN1dGlvbj8KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgJiMzOTtmaWxsJiMzOTsgbWVhbnMgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCBhYm91dCBwb3B1bGF0aW5nIGEgZGF0YSBzdHJ1Y3R1cmUsIGluaXRpYWxpemluZyBpdCwgb3IgdXBkYXRpbmcgZXhpc3RpbmcgZW50cmllcz8gVGhpcyBpcyBjcml0aWNhbCBmb3Iga25vd2luZyBob3cgdGhlc2UgZnVuY3Rpb25zIGNvbnRyaWJ1dGUgdG8gdGhlIGxhcmdlciBwaWN0dXJlLiBJIHdpbGwgYmUgbG9va2luZyBvdXQgZm9yIGNvbW1vbiBwYXR0ZXJucyBhbmQgYXJndW1lbnRzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGV5IHdvcmsuCgpJJiMzOTtsbCBjaGVjayB0aGUgY2FsbHMgdG8gdW5kZXJzdGFuZCB0aGUgYXJndW1lbnQgc2lnbmF0dXJlcy4gQXJlIHRoZXkgdGFraW5nIHNpbWlsYXIgYXJndW1lbnRzLCBvciBkbyB0aGV5IGV4cGVjdCBkaXN0aW5jdCBwYXJhbWV0ZXJzPyBBbmQgb2YgY291cnNlLCBJIG11c3Qga25vdywgYXJlIHdlIGhhbmRsaW5nIGNhc2VzIHdpdGggdmFyeWluZyBtZW1vcnkgYWxsb2NhdGlvbnM/IEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyB1dGlsaXplZCBzbyBJIGtub3cgd2hlbiB0byBiZSBjb25jZXJuZWQgYWJvdXQgb3ZlcmZsb3cgZXJyb3JzLiBUaGlzIHdpbGwgaGVscCBtZSB0byBkZWNpZGUgd2hldGhlciB0aGlzIGlzIGEgcGxhY2UgdG8gZm9jdXMgb24gZnVydGhlciBvcHRpbWl6YXRpb24sIHJlZmFjdG9yaW5nLCBvciBzaW1wbHkgY29uZmlybWluZyBjb3JyZWN0IGJlaGF2aW9yLgoKTW9yZSB0aGFuIGxpa2VseSwgSSYjMzk7bSBleHBlY3RpbmcgYG5laWdodGJsX2ZpbGxfaW5mb2AgdG8gZG8gYSBtb3JlIGdlbmVyYWwgZGF0YSBwb3B1bGF0aW9uLCBhbmQgYG5laWdodGJsX2ZpbGxfcGFyYW1faW5mb2AgdG8gZm9jdXMgb24gYSBwYXJ0aWN1bGFyIHNldCBvZiBwYXJhbWV0ZXJzIHdpdGhpbiB0aGUgbGFyZ2VyIHN0cnVjdHVyZS4gVGhhdCYjMzk7cyBteSBzdGFydGluZyBhc3N1bXB0aW9uLCBidXQgdGhlIGFjdHVhbCBjb2RlIHdpbGwgZGljdGF0ZSBpZiB0aGF0JiMzOTtzIGFjY3VyYXRlLiBJJiMzOTttIGdvaW5nIHRvIG1ha2Ugc3VyZSB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byBzZWUgaWYgaXQgaXMgdXNlZCBmb3Igc29tZXRoaW5nIEkgaGF2ZW4mIzM5O3QgY29uc2lkZXJlZC4KCkkmIzM5O20gcmVhZHkgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL25laWdoYm91ci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjAwOlx0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBORFRQQV9SRUZDTlQsIHJlZmNvdW50X3JlYWQoXHUwMDI2cGFybXMtXHUwMDNlcmVmY250KSkgfHxcbjIyMDE6XHRcdCAgICBubGFfcHV0X3UzMihza2IsIE5EVFBBX1FVRVVFX0xFTkJZVEVTLFxuMjIwMjpcdFx0XHRcdE5FSUdIX1ZBUihwYXJtcywgUVVFVUVfTEVOX0JZVEVTKSkgfHxcbjIyMDM6XHRcdCAgICAvKiBhcHByb3hpbWF0aXZlIHZhbHVlIGZvciBkZXByZWNhdGVkIFFVRVVFX0xFTiAoaW4gcGFja2V0cykgKi9cbjIyMDQ6XHRcdCAgICBubGFfcHV0X3UzMihza2IsIE5EVFBBX1FVRVVFX0xFTixcbjIyMDU6XHRcdFx0XHRORUlHSF9WQVIocGFybXMsIFFVRVVFX0xFTl9CWVRFUykgLyBTS0JfVFJVRVNJWkUoRVRIX0ZSQU1FX0xFTikpIHx8XG4yMjA2Olx0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBORFRQQV9QUk9YWV9RTEVOLCBORUlHSF9WQVIocGFybXMsIFBST1hZX1FMRU4pKSB8fFxuMjIwNzpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgTkRUUEFfQVBQX1BST0JFUywgTkVJR0hfVkFSKHBhcm1zLCBBUFBfUFJPQkVTKSkgfHxcbjIyMDg6XHRcdCAgICBubGFfcHV0X3UzMihza2IsIE5EVFBBX1VDQVNUX1BST0JFUyxcbjIyMDk6XHRcdFx0XHRORUlHSF9WQVIocGFybXMsIFVDQVNUX1BST0JFUykpIHx8XG4yMjEwOlx0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBORFRQQV9NQ0FTVF9QUk9CRVMsXG4yMjExOlx0XHRcdFx0TkVJR0hfVkFSKHBhcm1zLCBNQ0FTVF9QUk9CRVMpKSB8fFxuMjIxMjpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgTkRUUEFfTUNBU1RfUkVQUk9CRVMsXG4yMjEzOlx0XHRcdFx0TkVJR0hfVkFSKHBhcm1zLCBNQ0FTVF9SRVBST0JFUykpIHx8XG4yMjE0Olx0XHQgICAgbmxhX3B1dF9tc2Vjcyhza2IsIE5EVFBBX1JFQUNIQUJMRV9USU1FLCBSRUFEX09OQ0UocGFybXMtXHUwMDNlcmVhY2hhYmxlX3RpbWUpLFxuMjIxNTpcdFx0XHRcdCAgTkRUUEFfUEFEKSB8fFxuMjIxNjpcdFx0ICAgIG5sYV9wdXRfbXNlY3Moc2tiLCBORFRQQV9CQVNFX1JFQUNIQUJMRV9USU1FLFxuMjIxNzpcdFx0XHRcdCAgTkVJR0hfVkFSKHBhcm1zLCBCQVNFX1JFQUNIQUJMRV9USU1FKSwgTkRUUEFfUEFEKSB8fFxuMjIxODpcdFx0ICAgIG5sYV9wdXRfbXNlY3Moc2tiLCBORFRQQV9HQ19TVEFMRVRJTUUsXG4yMjE5Olx0XHRcdFx0ICBORUlHSF9WQVIocGFybXMsIEdDX1NUQUxFVElNRSksIE5EVFBBX1BBRCkgfHxcbjIyMjA6XHRcdCAgICBubGFfcHV0X21zZWNzKHNrYiwgTkRUUEFfREVMQVlfUFJPQkVfVElNRSxcbjIyMjE6XHRcdFx0XHQgIE5FSUdIX1ZBUihwYXJtcywgREVMQVlfUFJPQkVfVElNRSksIE5EVFBBX1BBRCkgfHxcbjIyMjI6XHRcdCAgICBubGFfcHV0X21zZWNzKHNrYiwgTkRUUEFfUkVUUkFOU19USU1FLFxuMjIyMzpcdFx0XHRcdCAgTkVJR0hfVkFSKHBhcm1zLCBSRVRSQU5TX1RJTUUpLCBORFRQQV9QQUQpIHx8XG4yMjI0Olx0XHQgICAgbmxhX3B1dF9tc2Vjcyhza2IsIE5EVFBBX0FOWUNBU1RfREVMQVksXG4yMjI1Olx0XHRcdFx0ICBORUlHSF9WQVIocGFybXMsIEFOWUNBU1RfREVMQVkpLCBORFRQQV9QQUQpIHx8XG4yMjI2Olx0XHQgICAgbmxhX3B1dF9tc2Vjcyhza2IsIE5EVFBBX1BST1hZX0RFTEFZLFxuMjIyNzpcdFx0XHRcdCAgTkVJR0hfVkFSKHBhcm1zLCBQUk9YWV9ERUxBWSksIE5EVFBBX1BBRCkgfHxcbjIyMjg6XHRcdCAgICBubGFfcHV0X21zZWNzKHNrYiwgTkRUUEFfTE9DS1RJTUUsXG4yMjI5Olx0XHRcdFx0ICBORUlHSF9WQVIocGFybXMsIExPQ0tUSU1FKSwgTkRUUEFfUEFEKSB8fFxuMjIzMDpcdFx0ICAgIG5sYV9wdXRfbXNlY3Moc2tiLCBORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TLFxuMjIzMTpcdFx0XHRcdCAgTkVJR0hfVkFSKHBhcm1zLCBJTlRFUlZBTF9QUk9CRV9USU1FX01TKSwgTkRUUEFfUEFEKSlcbjIyMzI6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMjMzOlx0XHRyZXR1cm4gbmxhX25lc3RfZW5kKHNrYiwgbmVzdCk7XG4yMjM0Olx0XG4yMjM1Olx0bmxhX3B1dF9mYWlsdXJlOlxuMjIzNjpcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgbmVzdCk7XG4yMjM3Olx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuMjIzODpcdH1cbjIyMzk6XHRcbjIyNDA6XHRzdGF0aWMgaW50IG5laWdodGJsX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCxcbjIyNDE6XHRcdFx0XHQgICAgICB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgdHlwZSwgaW50IGZsYWdzKVxuMjI0MjpcdHtcbjIyNDM6XHRcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xuMjI0NDpcdFx0c3RydWN0IG5kdG1zZyAqbmR0bXNnO1xuMjI0NTpcdFxuMjI0NjpcdFx0bmxoID0gbmxtc2dfcHV0KHNrYiwgcGlkLCBzZXEsIHR5cGUsIHNpemVvZigqbmR0bXNnKSwgZmxhZ3MpO1xuMjI0NzpcdFx0aWYgKG5saCA9PSBOVUxMKVxuMjI0ODpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuMjI0OTpcdFxuMjI1MDpcdFx0bmR0bXNnID0gbmxtc2dfZGF0YShubGgpO1xuMjI1MTpcdFx0bmR0bXNnLVx1MDAzZW5kdG1fZmFtaWx5ID0gdGJsLVx1MDAzZWZhbWlseTtcbjIyNTI6XHRcdG5kdG1zZy1cdTAwM2VuZHRtX3BhZDEgICA9IDA7XG4yMjUzOlx0XHRuZHRtc2ctXHUwMDNlbmR0bV9wYWQyICAgPSAwO1xuMjI1NDpcdFxuMjI1NTpcdFx0aWYgKG5sYV9wdXRfc3RyaW5nKHNrYiwgTkRUQV9OQU1FLCB0YmwtXHUwMDNlaWQpIHx8XG4yMjU2Olx0XHQgICAgbmxhX3B1dF9tc2Vjcyhza2IsIE5EVEFfR0NfSU5URVJWQUwsIFJFQURfT05DRSh0YmwtXHUwMDNlZ2NfaW50ZXJ2YWwpLFxuMjI1NzpcdFx0XHRcdCAgTkRUQV9QQUQpIHx8XG4yMjU4Olx0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBORFRBX1RIUkVTSDEsIFJFQURfT05DRSh0YmwtXHUwMDNlZ2NfdGhyZXNoMSkpIHx8XG4yMjU5Olx0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBORFRBX1RIUkVTSDIsIFJFQURfT05DRSh0YmwtXHUwMDNlZ2NfdGhyZXNoMikpIHx8XG4yMjYwOlx0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBORFRBX1RIUkVTSDMsIFJFQURfT05DRSh0YmwtXHUwMDNlZ2NfdGhyZXNoMykpKVxuMjI2MTpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIyNjI6XHRcdHtcbjIyNjM6XHRcdFx0dW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzO1xuMjI2NDpcdFx0XHRsb25nIGZsdXNoX2RlbHRhID0gbm93IC0gUkVBRF9PTkNFKHRibC1cdTAwM2VsYXN0X2ZsdXNoKTtcbjIyNjU6XHRcdFx0bG9uZyByYW5kX2RlbHRhID0gbm93IC0gUkVBRF9PTkNFKHRibC1cdTAwM2VsYXN0X3JhbmQpO1xuMjI2NjpcdFx0XHRzdHJ1Y3QgbmVpZ2hfaGFzaF90YWJsZSAqbmh0O1xuMjI2NzpcdFx0XHRzdHJ1Y3QgbmR0X2NvbmZpZyBuZGMgPSB7XG4yMjY4Olx0XHRcdFx0Lm5kdGNfa2V5X2xlblx0XHQ9IHRibC1cdTAwM2VrZXlfbGVuLFxuMjI2OTpcdFx0XHRcdC5uZHRjX2VudHJ5X3NpemVcdD0gdGJsLVx1MDAzZWVudHJ5X3NpemUsXG4yMjcwOlx0XHRcdFx0Lm5kdGNfZW50cmllc1x0XHQ9IGF0b21pY19yZWFkKFx1MDAyNnRibC1cdTAwM2VlbnRyaWVzKSxcbjIyNzE6XHRcdFx0XHQubmR0Y19sYXN0X2ZsdXNoXHQ9IGppZmZpZXNfdG9fbXNlY3MoZmx1c2hfZGVsdGEpLFxuMjI3MjpcdFx0XHRcdC5uZHRjX2xhc3RfcmFuZFx0XHQ9IGppZmZpZXNfdG9fbXNlY3MocmFuZF9kZWx0YSksXG4yMjczOlx0XHRcdFx0Lm5kdGNfcHJveHlfcWxlblx0PSBSRUFEX09OQ0UodGJsLVx1MDAzZXByb3h5X3F1ZXVlLnFsZW4pLFxuMjI3NDpcdFx0XHR9O1xuMjI3NTpcdFxuMjI3NjpcdFx0XHRuaHQgPSByY3VfZGVyZWZlcmVuY2UodGJsLVx1MDAzZW5odCk7XG4yMjc3Olx0XHRcdG5kYy5uZHRjX2hhc2hfcm5kID0gbmh0LVx1MDAzZWhhc2hfcm5kWzBdO1xuMjI3ODpcdFx0XHRuZGMubmR0Y19oYXNoX21hc2sgPSAoKDEgXHUwMDNjXHUwMDNjIG5odC1cdTAwM2VoYXNoX3NoaWZ0KSAtIDEpO1xuMjI3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA5NAoJCQkJCQkJb3V0cHV0OiAxODEKCQkJCQkJCXRob3VnaHRzOiA3ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IEEgUXVpY2sgTG9vayoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLCBJIG5lZWQgdG8gYmUgc3VyZSBldmVyeXRoaW5nIGlzIHNvbGlkLiBGaXJzdCwgaXQgbG9va3MgbGlrZSB0aGVyZSBhcmUgYSBmZXcga2V5IGFyZWFzIG9mIGZvY3VzOgoKMS4gICoqTmV0bGluayBQb2xpY3kgVXBkYXRlKio6IFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLiBUaGUgYFtORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TXWAgcGFyYW1ldGVyIGluIGBubF9udGJsX3Bhcm1fcG9saWN5YCBpcyBnZXR0aW5nIGEgZGVmaW5lZCByYW5nZSAobWluPTEsIG1heD1OVEJMX1BBUk1fTVNfTUFYKSB1c2luZyBgTkxBX1BPTElDWV9GVUxMX1JBTkdFYCwgd2hpY2ggaXMgZ29vZCBwcmFjdGljZS4KCjIuICAqKlN5c2N0bCBVcGRhdGUqKjogIFRoZSBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCBmdW5jdGlvbiBpcyBjb3JyZWN0bHkgc2V0dGluZyBhbiB1cHBlciBib3VuZCBvbiB0aGUgc3lzY3RsIHZhbHVlIHVzaW5nIGB0bXAuZXh0cmEyID0gJmFtcDttYXg7YC4gTWFrZXMgc2Vuc2UuIEVuc3VyaW5nIGNvbnRyb2xsZWQgdXBwZXIgYm91bmRzIGlzIGtleSBmb3Igc3RhYmlsaXR5IGFuZCBzZWN1cml0eS4KCjMuICAqKkR1bXAgQ29udGludWF0aW9uIEJ1ZyBGaXgqKjogIFRoaXMgaXMgdGhlIG1vc3QgaW50ZXJlc3RpbmcgcGFydC4gSXQgYXBwZWFycyB0aGVyZSB3YXMgYSBidWcgaW4gaG93IGBuZWlnaHRibF9kdW1wX2luZm9gIGhhbmRsZWQgZHVtcGluZyB0aGUgbmVpZ2hib3IgdGFibGUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggY29udGludWF0aW9uIChlLmcuLCB3aGVuIHRoZSBidWZmZXIgZmlsbHMgdXApLiBQcmV2aW91c2x5LCBgY2ItJmd0O2FyZ3NbMF1gIHRyYWNrZWQgYHRpZHhgIGFuZCBgY2ItJmd0O2FyZ3NbMV1gIHRyYWNrZWQgYG5laWdoX3NraXBgLCBidXQgaWYgdGhlIGJ1ZmZlciByYW4gb3V0IGluIHRoZSBtaWRkbGUgb2YgcGFybXNfbGlzdCwgaXQgd291bGQgcmVkdW1wIGluZm8gaWYgbm90IHByb3Blcmx5IHNraXBwZWQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBkZWZhdWx0X3NraXAgPSBjYi0mZ3Q7YXJnc1syXTtgIHRvIGNvcnJlY3RseSB0cmFjayBhbmQgc2tpcCB0aGUgdGFibGUgZGVmYXVsdCBpbmZvLCBwYXJ0aWN1bGFybHkgYWZ0ZXIgdGhlIGJ1ZmZlciBmaWxscy4gSXQgYWxzbyBlbnN1cmVzIGNsZWFuIGl0ZXJhdGlvbiBvZiBgcGFybXNfbGlzdGAgYW5kIHNraXBzIHNwZWNpYWwgY2FzZXMgbGlrZSBgYmxhY2tob2xlX25ldGRldmAgb3IgTlVMTCBkZXZpY2VzLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBhbmQgdGhpbmsgYWJvdXQgYW55IHBvdGVudGlhbCBpc3N1ZXM6CgoqICAgKipVbmluaXRpYWxpemVkIE1lbW9yeSBSZWFkcyBvciBMZWFrcyoqOiAgRXZlcnl0aGluZyBzZWVtcyB0byBiZSBpbml0aWFsaXplZCBwcm9wZXJseS4gVGhlIHZhcmlhYmxlcyBpbiBgbmVpZ2h0YmxfZHVtcF9pbmZvYCBhcmUgYWxsIGluaXRpYWxpemVkIGFuZCB0aGUgYGNiLSZndDthcmdzYCBhcnJheSBpcyB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBuZXRsaW5rIGR1bXAgc3Vic3lzdGVtLCBhcyBpdCBzaG91bGQgYmUuIFRoZSBgbWluYCBhbmQgYG1heGAgdmFyaWFibGVzIGluIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgdGhlIGBubF9udGJsX3Bhcm1fbXNfcmFuZ2VgIHN0cnVjdCBpcyBzdGF0aWNhbGx5IGluaXRpYWxpemVkLiBHb29kLCBnb29kLCBnb29kLgoqICAgKipCdWZmZXIgT3ZlcnJ1bnMvVW5pbml0aWFsaXplZCBTdHJ1Y3R1cmVzL1BhZGRpbmcqKjogIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGZpZWxkcyBvciBzdHJ1Y3RzIHRoYXQgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZSBjb25zdHJ1Y3Rpb24gb2YgbmV0bGluayBtZXNzYWdlcyBpbiBgbmVpZ2h0YmxfZmlsbF9pbmZvYCBhbmQgYG5laWdodGJsX2ZpbGxfcGFyYW1faW5mb2AgcmVtYWluIHVuY2hhbmdlZCwgZXhjZXB0IGZvciB0aGUgaXRlcmF0aW9uIGFuZCBza2lwIGhhbmRsaW5nLiBObyByZWQgZmxhZ3MgaGVyZS4KCkFscmlnaHQsIHNvIHRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byBjaGVjayBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgdnVsbmVyYWJpbGl0eSBpbiB0ZXJtcyBvZiB0aGUga2VybmVsIHNhbml0aXplcnMuIFNvLCBkb2VzIGFueXRoaW5nIGhlcmUgbmVlZCBLTVNBTiBvciBpcyBpdCBjb3ZlcmVkIGJ5IEtBU0FOPwoKKiAgICoqS0FTQU4gLyBMT0NLREVQIC8gVUJTQU4gQ292ZXJhZ2UqKjogS0FTQU4gYWxyZWFkeSBjb3ZlcnMgUkNVIGxpc3QgdHJhdmVyc2FscyBhbmQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gU2luY2UgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgb3IgdW5pbml0aWFsaXplZCBkYXRhIGFjY2VzcyByaXNrcywgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSBoZXJlLiBUaGlzIGlzIGEgY3J1Y2lhbCBkaXN0aW5jdGlvbi4KCioqVGhlcmVmb3JlLCBOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZS4qKgoKTm93LCBsZXQmIzM5O3MgZG8gYSBmaW5hbCBjaGVjazoKCiogICBJJiMzOTtsbCBiZSB1c2luZyBgc2V0LXJlc3VsdHMgdG9vbGAgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KKiAgIGBOZWVkc0tNU0FOYDogRmFsc2UuCiogICBgS01TQU5SZWFzb25pbmdgOiBEZXRhaWxlZCBhYm92ZSwgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eS4KClRoaXMgYWxsIGxvb2tzIGdvb2QgdG8gbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiByYW5nZSBjaGVja3MgKG1pbi9tYXgpIGZvciB0aGUgbmVpZ2hib3IgdGFibGUgaW50ZXJ2YWxfcHJvYmVfdGltZV9tcyBwYXJhbWV0ZXIgdmlhIG5ldGxpbmsgcG9saWN5IGFuZCBzeXNjdGwsIGFuZCBmaXhlcyBuZXRsaW5rIGR1bXAgcmVzdW1wdGlvbiBzdGF0ZSB0cmFja2luZyBpbiBuZWlnaHRibF9kdW1wX2luZm8oKSB1c2luZyBjYi1cdTAwM2VhcmdzWzJdICh3aGljaCBpcyB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBuZXRsaW5rIGR1bXAgc3Vic3lzdGVtKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyAobWluLCBtYXgsIGRlZmF1bHRfc2tpcCwgbmlkeCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gbmV0bGluayBkdW1wIGl0ZXJhdGlvbiAoc3VjaCBhcyBsaXN0IHRyYXZlcnNhbCBvciBib3VuZHMgZXJyb3JzKSBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiByYW5nZSBjaGVja3MgKG1pbi9tYXgpIGZvciB0aGUgbmVpZ2hib3IgdGFibGUgaW50ZXJ2YWxfcHJvYmVfdGltZV9tcyBwYXJhbWV0ZXIgdmlhIG5ldGxpbmsgcG9saWN5IGFuZCBzeXNjdGwsIGFuZCBmaXhlcyBuZXRsaW5rIGR1bXAgcmVzdW1wdGlvbiBzdGF0ZSB0cmFja2luZyBpbiBuZWlnaHRibF9kdW1wX2luZm8oKSB1c2luZyBjYi1cdTAwM2VhcmdzWzJdICh3aGljaCBpcyB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBuZXRsaW5rIGR1bXAgc3Vic3lzdGVtKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyAobWluLCBtYXgsIGRlZmF1bHRfc2tpcCwgbmlkeCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gbmV0bGluayBkdW1wIGl0ZXJhdGlvbiAoc3VjaCBhcyBsaXN0IHRyYXZlcnNhbCBvciBib3VuZHMgZXJyb3JzKSBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTBUMDA6MDU6NTAuNzM3MTE5NDQ5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI1MjIxMTY4OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCIsXG4gICAgXCJTWVNDVExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZWlnaHRibF9kdW1wX2luZm9cIixcbiAgICBcIm5laWdodGJsX3NldFwiLFxuICAgIFwibmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gcmFuZ2UgY2hlY2tzIChtaW4vbWF4KSBmb3IgdGhlIG5laWdoYm9yIHRhYmxlIGludGVydmFsX3Byb2JlX3RpbWVfbXMgcGFyYW1ldGVyIHZpYSBuZXRsaW5rIHBvbGljeSBhbmQgc3lzY3RsLCBhbmQgZml4ZXMgbmV0bGluayBkdW1wIHJlc3VtcHRpb24gc3RhdGUgdHJhY2tpbmcgaW4gbmVpZ2h0YmxfZHVtcF9pbmZvKCkgdXNpbmcgY2ItXFx1MDAzZWFyZ3NbMl0gKHdoaWNoIGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIG5ldGxpbmsgZHVtcCBzdWJzeXN0ZW0pLiBBbGwgbG9jYWwgdmFyaWFibGVzIChtaW4sIG1heCwgZGVmYXVsdF9za2lwLCBuaWR4KSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgbm8gbmV3IGRhdGEgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBuZXRsaW5rIGR1bXAgaXRlcmF0aW9uIChzdWNoIGFzIGxpc3QgdHJhdmVyc2FsIG9yIGJvdW5kcyBlcnJvcnMpIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgaW4gbmV0L2NvcmUvbmVpZ2hib3VyLmM6IGl0IHVwZGF0ZXMgdGhlIG5ldGxpbmsgYXR0cmlidXRlIHBvbGljeSBhbmQgcHJvYyBzeXNjdGwgaGFuZGxlciB0byBlbmZvcmNlIHVwcGVyIGJvdW5kcyBvbiBpbnRlcnZhbF9wcm9iZV90aW1lX21zLCBhbmQgcmVmYWN0b3JzL2ZpeGVzIHRoZSBuZWlnaGJvciB0YWJsZSBkdW1wIHBhZ2luYXRpb24gbG9naWMgaW4gbmVpZ2h0YmxfZHVtcF9pbmZvLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBydG5ldGxpbmsgKFJUTV9HRVRORUlHSFRCTCAvIFJUTV9TRVRORUlHSFRCTCkgYW5kIHByb2NmcyBzeXNjdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAwOjA1OjUwLjczNzEyNDU2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDE3MDkyNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyY2IzMTE1YTRmODA2MzAyMzIzMWNhN2Y2ZGRhOWQ4YjhjNDlmZWE2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDAwOjA1OjQ5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1uZWlnaC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LW5laWdoLnlhbWxcXG5pbmRleCAwZjQ2ZWYzMTM1OTA1Li5jOGU1NWM5OGQ1NjQ5IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1uZWlnaC55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LW5laWdoLnlhbWxcXG5AQCAtMzQxLDYgKzM0MSw5IEBAIGF0dHJpYnV0ZS1zZXRzOlxcbiAgICAgICAtXFxuICAgICAgICAgbmFtZTogaW50ZXJ2YWwtcHJvYmUtdGltZS1tc1xcbiAgICAgICAgIHR5cGU6IHU2NFxcbisgICAgICAgIGNoZWNrczpcXG4rICAgICAgICAgIG1pbjogMVxcbisgICAgICAgICAgbWF4OiA4NjQwMDAwMFxcbiBcXG4gb3BlcmF0aW9uczpcXG4gICBlbnVtLW1vZGVsOiBkaXJlY3Rpb25hbFxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XFxuaW5kZXggMjA4ZjQ2OTY3ZWU1OS4uYjA1ODI5ZTQ0ZDhmYyAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XFxuQEAgLTI0OCw3ICsyNDgsNyBAQCBuZWlnaC9kZWZhdWx0L3VucmVzX3FsZW4gLSBJTlRFR0VSXFxuIFxcbiBuZWlnaC9kZWZhdWx0L2ludGVydmFsX3Byb2JlX3RpbWVfbXMgLSBJTlRFR0VSXFxuIFxcdFRoZSBwcm9iZSBpbnRlcnZhbCBmb3IgbmVpZ2hib3IgZW50cmllcyB3aXRoIE5URl9NQU5BR0VEIGZsYWcsXFxuLVxcdHRoZSBtaW4gdmFsdWUgaXMgMS5cXG4rXFx0dGhlIG1pbiB2YWx1ZSBpcyAxLCBhbmQgdGhlIG1heCB2YWx1ZSBpcyA4NjQwMDAwMCAoMSBkYXkpLlxcbiBcXG4gXFx0RGVmYXVsdDogNTAwMFxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuY1xcbmluZGV4IDEzNDljMGVlZGI2NDIuLjc0NDgzMjBmN2FkNTIgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvbmVpZ2hib3VyLmNcXG4rKysgYi9uZXQvY29yZS9uZWlnaGJvdXIuY1xcbkBAIC0yMzU5LDYgKzIzNTksMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX25laWdodGJsX3BvbGljeVtORFRBX01BWCsxXSA9IHtcXG4gXFx0W05EVEFfUEFSTVNdXFx0XFx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbiB9O1xcbiBcXG4rI2RlZmluZSBOVEJMX1BBUk1fTVNfTUFYXFx0KDI0ICogNjAgKiA2MCAqIE1TRUNfUEVSX1NFQylcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIG5sX250YmxfcGFybV9tc19yYW5nZSA9IHtcXG4rXFx0Lm1pbiA9IDEsXFxuK1xcdC5tYXggPSBOVEJMX1BBUk1fTVNfTUFYLFxcbit9O1xcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYKzFdID0ge1xcbiBcXHRbTkRUUEFfSUZJTkRFWF1cXHRcXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuIFxcdFtORFRQQV9RVUVVRV9MRU5dXFx0XFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbkBAIC0yMzc1LDcgKzIzODIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmxfbnRibF9wYXJtX3BvbGljeVtORFRQQV9NQVgrMV0gPSB7XFxuIFxcdFtORFRQQV9BTllDQVNUX0RFTEFZXVxcdFxcdD0geyAudHlwZSA9IE5MQV9VNjQgfSxcXG4gXFx0W05EVFBBX1BST1hZX0RFTEFZXVxcdFxcdD0geyAudHlwZSA9IE5MQV9VNjQgfSxcXG4gXFx0W05EVFBBX0xPQ0tUSU1FXVxcdFxcdD0geyAudHlwZSA9IE5MQV9VNjQgfSxcXG4tXFx0W05EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNdXFx0PSB7IC50eXBlID0gTkxBX1U2NCwgLm1pbiA9IDEgfSxcXG4rXFx0W05EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNdXFx0PSBOTEFfUE9MSUNZX0ZVTExfUkFOR0UoTkxBX1U2NCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNm5sX250YmxfcGFybV9tc19yYW5nZSksXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IG5laWdodGJsX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5AQCAtMjU3OSw5ICsyNTg3LDEwIEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IGNiLVxcdTAwM2VubGg7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbitcXHRpbnQgZGVmYXVsdF9za2lwID0gY2ItXFx1MDAzZWFyZ3NbMl07XFxuK1xcdGludCBuZWlnaF9za2lwID0gY2ItXFx1MDAzZWFyZ3NbMV07XFxuIFxcdGludCBmYW1pbHksIHRpZHgsIG5pZHggPSAwO1xcbiBcXHRpbnQgdGJsX3NraXAgPSBjYi1cXHUwMDNlYXJnc1swXTtcXG4tXFx0aW50IG5laWdoX3NraXAgPSBjYi1cXHUwMDNlYXJnc1sxXTtcXG4gXFx0c3RydWN0IG5laWdoX3RhYmxlICp0Ymw7XFxuIFxcbiBcXHRpZiAoY2ItXFx1MDAzZXN0cmljdF9jaGVjaykge1xcbkBAIC0yNjA1LDE3ICsyNjE0LDIxIEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gXFx0XFx0aWYgKHRpZHggXFx1MDAzYyB0Ymxfc2tpcCB8fCAoZmFtaWx5IFxcdTAwMjZcXHUwMDI2IHRibC1cXHUwMDNlZmFtaWx5ICE9IGZhbWlseSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0aWYgKG5laWdodGJsX2ZpbGxfaW5mbyhza2IsIHRibCwgTkVUTElOS19DQihjYi1cXHUwMDNlc2tiKS5wb3J0aWQsXFxuK1xcdFxcdGlmICghZGVmYXVsdF9za2lwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBuZWlnaHRibF9maWxsX2luZm8oc2tiLCB0YmwsIE5FVExJTktfQ0IoY2ItXFx1MDAzZXNrYikucG9ydGlkLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIFJUTV9ORVdORUlHSFRCTCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIE5MTV9GX01VTFRJKSBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4tXFx0XFx0bmlkeCA9IDA7XFxuLVxcdFxcdHAgPSBsaXN0X25leHRfZW50cnkoXFx1MDAyNnRibC1cXHUwMDNlcGFybXMsIGxpc3QpO1xcbi1cXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb21fcmN1KHAsIFxcdTAwMjZ0YmwtXFx1MDAzZXBhcm1zX2xpc3QsIGxpc3QpIHtcXG4rXFx0XFx0ZGVmYXVsdF9za2lwID0gMTtcXG4rXFxuK1xcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsIFxcdTAwMjZ0YmwtXFx1MDAzZXBhcm1zX2xpc3QsIGxpc3QpIHtcXG4gXFx0XFx0XFx0aWYgKCFuZXRfZXEobmVpZ2hfcGFybXNfbmV0KHApLCBuZXQpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuK1xcdFxcdFxcdGlmICghcC1cXHUwMDNlZGV2IHx8IHAtXFx1MDAzZWRldiA9PSBibGFja2hvbGVfbmV0ZGV2KVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuIFxcdFxcdFxcdGlmIChuaWR4IFxcdTAwM2MgbmVpZ2hfc2tpcClcXG4gXFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbiBcXG5AQCAtMjYzMCwxMiArMjY0MywxNSBAQCBzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdG5laWdoX3NraXAgPSAwO1xcbitcXHRcXHRuaWR4ID0gMDtcXG4rXFx0XFx0ZGVmYXVsdF9za2lwID0gMDtcXG4gXFx0fVxcbiBvdXQ6XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0Y2ItXFx1MDAzZWFyZ3NbMF0gPSB0aWR4O1xcbiBcXHRjYi1cXHUwMDNlYXJnc1sxXSA9IG5pZHg7XFxuK1xcdGNiLVxcdTAwM2VhcmdzWzJdID0gZGVmYXVsdF9za2lwO1xcbiBcXG4gXFx0cmV0dXJuIHNrYi1cXHUwMDNlbGVuO1xcbiB9XFxuQEAgLTM2NjksMTIgKzM2ODUsMTMgQEAgc3RhdGljIGludCBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxcbiB7XFxuIFxcdHN0cnVjdCBjdGxfdGFibGUgdG1wID0gKmN0bDtcXG4tXFx0aW50IHJldDtcXG4rXFx0aW50IHJldCwgbWluLCBtYXg7XFxuIFxcbi1cXHRpbnQgbWluID0gbXNlY3NfdG9famlmZmllcygxKTtcXG4rXFx0bWluID0gbXNlY3NfdG9famlmZmllcygxKTtcXG4rXFx0bWF4ID0gbXNlY3NfdG9famlmZmllcyhOVEJMX1BBUk1fTVNfTUFYKTtcXG4gXFxuIFxcdHRtcC5leHRyYTEgPSBcXHUwMDI2bWluO1xcbi1cXHR0bXAuZXh0cmEyID0gTlVMTDtcXG4rXFx0dG1wLmV4dHJhMiA9IFxcdTAwMjZtYXg7XFxuIFxcbiBcXHRyZXQgPSBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4KFxcdTAwMjZ0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xcbiBcXHRuZWlnaF9wcm9jX3VwZGF0ZShjdGwsIHdyaXRlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDA6MDU6NTEuMjM5NDc5OTYyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNTYyOTI0Njc2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIlNZU0NUTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5laWdodGJsX2R1bXBfaW5mb1wiLFxuICAgIFwibmVpZ2h0Ymxfc2V0XCIsXG4gICAgXCJuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGluIG5ldC9jb3JlL25laWdoYm91ci5jOiBpdCB1cGRhdGVzIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZSBwb2xpY3kgYW5kIHByb2Mgc3lzY3RsIGhhbmRsZXIgdG8gZW5mb3JjZSB1cHBlciBib3VuZHMgb24gaW50ZXJ2YWxfcHJvYmVfdGltZV9tcywgYW5kIHJlZmFjdG9ycy9maXhlcyB0aGUgbmVpZ2hib3IgdGFibGUgZHVtcCBwYWdpbmF0aW9uIGxvZ2ljIGluIG5laWdodGJsX2R1bXBfaW5mby4gVGhlc2UgcGF0aHMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fR0VUTkVJR0hUQkwgLyBSVE1fU0VUTkVJR0hUQkwpIGFuZCBwcm9jZnMgc3lzY3RsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJjYjMxMTVhNGY4MDYzMDIzMjMxY2E3ZjZkZGE5ZDhiOGM0OWZlYTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwMDowNTo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1uZWlnaC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LW5laWdoLnlhbWxcbmluZGV4IDBmNDZlZjMxMzU5MDUuLmM4ZTU1Yzk4ZDU2NDkgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbmVpZ2gueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LW5laWdoLnlhbWxcbkBAIC0zNDEsNiArMzQxLDkgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgLVxuICAgICAgICAgbmFtZTogaW50ZXJ2YWwtcHJvYmUtdGltZS1tc1xuICAgICAgICAgdHlwZTogdTY0XG4rICAgICAgICBjaGVja3M6XG4rICAgICAgICAgIG1pbjogMVxuKyAgICAgICAgICBtYXg6IDg2NDAwMDAwXG4gXG4gb3BlcmF0aW9uczpcbiAgIGVudW0tbW9kZWw6IGRpcmVjdGlvbmFsXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxuaW5kZXggMjA4ZjQ2OTY3ZWU1OS4uYjA1ODI5ZTQ0ZDhmYyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxuQEAgLTI0OCw3ICsyNDgsNyBAQCBuZWlnaC9kZWZhdWx0L3VucmVzX3FsZW4gLSBJTlRFR0VSXG4gXG4gbmVpZ2gvZGVmYXVsdC9pbnRlcnZhbF9wcm9iZV90aW1lX21zIC0gSU5URUdFUlxuIFx0VGhlIHByb2JlIGludGVydmFsIGZvciBuZWlnaGJvciBlbnRyaWVzIHdpdGggTlRGX01BTkFHRUQgZmxhZyxcbi1cdHRoZSBtaW4gdmFsdWUgaXMgMS5cbitcdHRoZSBtaW4gdmFsdWUgaXMgMSwgYW5kIHRoZSBtYXggdmFsdWUgaXMgODY0MDAwMDAgKDEgZGF5KS5cbiBcbiBcdERlZmF1bHQ6IDUwMDBcbiBcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZWlnaGJvdXIuYyBiL25ldC9jb3JlL25laWdoYm91ci5jXG5pbmRleCAxMzQ5YzBlZWRiNjQyLi43NDQ4MzIwZjdhZDUyIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmVpZ2hib3VyLmNcbisrKyBiL25ldC9jb3JlL25laWdoYm91ci5jXG5AQCAtMjM1OSw2ICsyMzU5LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubF9uZWlnaHRibF9wb2xpY3lbTkRUQV9NQVgrMV0gPSB7XG4gXHRbTkRUQV9QQVJNU11cdFx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuIH07XG4gXG4rI2RlZmluZSBOVEJMX1BBUk1fTVNfTUFYXHQoMjQgKiA2MCAqIDYwICogTVNFQ19QRVJfU0VDKVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIG5sX250YmxfcGFybV9tc19yYW5nZSA9IHtcbitcdC5taW4gPSAxLFxuK1x0Lm1heCA9IE5UQkxfUEFSTV9NU19NQVgsXG4rfTtcbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmxfbnRibF9wYXJtX3BvbGljeVtORFRQQV9NQVgrMV0gPSB7XG4gXHRbTkRUUEFfSUZJTkRFWF1cdFx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4gXHRbTkRUUEFfUVVFVUVfTEVOXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG5AQCAtMjM3NSw3ICsyMzgyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYKzFdID0ge1xuIFx0W05EVFBBX0FOWUNBU1RfREVMQVldXHRcdD0geyAudHlwZSA9IE5MQV9VNjQgfSxcbiBcdFtORFRQQV9QUk9YWV9ERUxBWV1cdFx0PSB7IC50eXBlID0gTkxBX1U2NCB9LFxuIFx0W05EVFBBX0xPQ0tUSU1FXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXG4tXHRbTkRUUEFfSU5URVJWQUxfUFJPQkVfVElNRV9NU11cdD0geyAudHlwZSA9IE5MQV9VNjQsIC5taW4gPSAxIH0sXG4rXHRbTkRUUEFfSU5URVJWQUxfUFJPQkVfVElNRV9NU11cdD0gTkxBX1BPTElDWV9GVUxMX1JBTkdFKE5MQV9VNjQsXG4rXHRcdFx0XHRcdFx0XHRcdFx1MDAyNm5sX250YmxfcGFybV9tc19yYW5nZSksXG4gfTtcbiBcbiBzdGF0aWMgaW50IG5laWdodGJsX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbkBAIC0yNTc5LDkgKzI1ODcsMTAgQEAgc3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoID0gY2ItXHUwMDNlbmxoO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbitcdGludCBkZWZhdWx0X3NraXAgPSBjYi1cdTAwM2VhcmdzWzJdO1xuK1x0aW50IG5laWdoX3NraXAgPSBjYi1cdTAwM2VhcmdzWzFdO1xuIFx0aW50IGZhbWlseSwgdGlkeCwgbmlkeCA9IDA7XG4gXHRpbnQgdGJsX3NraXAgPSBjYi1cdTAwM2VhcmdzWzBdO1xuLVx0aW50IG5laWdoX3NraXAgPSBjYi1cdTAwM2VhcmdzWzFdO1xuIFx0c3RydWN0IG5laWdoX3RhYmxlICp0Ymw7XG4gXG4gXHRpZiAoY2ItXHUwMDNlc3RyaWN0X2NoZWNrKSB7XG5AQCAtMjYwNSwxNyArMjYxNCwyMSBAQCBzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdGlmICh0aWR4IFx1MDAzYyB0Ymxfc2tpcCB8fCAoZmFtaWx5IFx1MDAyNlx1MDAyNiB0YmwtXHUwMDNlZmFtaWx5ICE9IGZhbWlseSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmIChuZWlnaHRibF9maWxsX2luZm8oc2tiLCB0YmwsIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4rXHRcdGlmICghZGVmYXVsdF9za2lwIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgbmVpZ2h0YmxfZmlsbF9pbmZvKHNrYiwgdGJsLCBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuIFx0XHRcdFx0ICAgICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIFJUTV9ORVdORUlHSFRCTCxcbiBcdFx0XHRcdCAgICAgICBOTE1fRl9NVUxUSSkgXHUwMDNjIDApXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdG5pZHggPSAwO1xuLVx0XHRwID0gbGlzdF9uZXh0X2VudHJ5KFx1MDAyNnRibC1cdTAwM2VwYXJtcywgbGlzdCk7XG4tXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbV9yY3UocCwgXHUwMDI2dGJsLVx1MDAzZXBhcm1zX2xpc3QsIGxpc3QpIHtcbitcdFx0ZGVmYXVsdF9za2lwID0gMTtcbitcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgXHUwMDI2dGJsLVx1MDAzZXBhcm1zX2xpc3QsIGxpc3QpIHtcbiBcdFx0XHRpZiAoIW5ldF9lcShuZWlnaF9wYXJtc19uZXQocCksIG5ldCkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbitcdFx0XHRpZiAoIXAtXHUwMDNlZGV2IHx8IHAtXHUwMDNlZGV2ID09IGJsYWNraG9sZV9uZXRkZXYpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0XHRpZiAobmlkeCBcdTAwM2MgbmVpZ2hfc2tpcClcbiBcdFx0XHRcdGdvdG8gbmV4dDtcbiBcbkBAIC0yNjMwLDEyICsyNjQzLDE1IEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0fVxuIFxuIFx0XHRuZWlnaF9za2lwID0gMDtcbitcdFx0bmlkeCA9IDA7XG4rXHRcdGRlZmF1bHRfc2tpcCA9IDA7XG4gXHR9XG4gb3V0OlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRjYi1cdTAwM2VhcmdzWzBdID0gdGlkeDtcbiBcdGNiLVx1MDAzZWFyZ3NbMV0gPSBuaWR4O1xuK1x0Y2ItXHUwMDNlYXJnc1syXSA9IGRlZmF1bHRfc2tpcDtcbiBcbiBcdHJldHVybiBza2ItXHUwMDNlbGVuO1xuIH1cbkBAIC0zNjY5LDEyICszNjg1LDEzIEBAIHN0YXRpYyBpbnQgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCxcbiBcdFx0XHRcdFx0XHQgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxuIHtcbiBcdHN0cnVjdCBjdGxfdGFibGUgdG1wID0gKmN0bDtcbi1cdGludCByZXQ7XG4rXHRpbnQgcmV0LCBtaW4sIG1heDtcbiBcbi1cdGludCBtaW4gPSBtc2Vjc190b19qaWZmaWVzKDEpO1xuK1x0bWluID0gbXNlY3NfdG9famlmZmllcygxKTtcbitcdG1heCA9IG1zZWNzX3RvX2ppZmZpZXMoTlRCTF9QQVJNX01TX01BWCk7XG4gXG4gXHR0bXAuZXh0cmExID0gXHUwMDI2bWluO1xuLVx0dG1wLmV4dHJhMiA9IE5VTEw7XG4rXHR0bXAuZXh0cmEyID0gXHUwMDI2bWF4O1xuIFxuIFx0cmV0ID0gcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heChcdTAwMjZ0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xuIFx0bmVpZ2hfcHJvY191cGRhdGUoY3RsLCB3cml0ZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMDowNTo1MS4yMzk0ODE5NzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjc3NDI5MTUyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRyaWFnZSBBc3Nlc3NtZW50IG9mIGEgTmV0d29yayBOZWlnaGJvciBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIHdvcnRoIHRocm93aW5nIGF0IHN5emthbGxlci4gTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGNvcmUgdGFzazogZXZhbHVhdGluZyBhIExpbnV4IGtlcm5lbCBwYXRjaCBmb3IgZnV6emluZyBwb3RlbnRpYWwsIHNwZWNpZmljYWxseSBmb3IgdGhlIHB1cnBvc2Ugb2Ygc3l6a2FsbGVyIHRyaWFnZS4gVGhhdCdzIHByZXR0eSBzdGFuZGFyZCwgcmlnaHQ/IFRoaXMgaXMgc3RyYWlnaHQtdXAga2VybmVsIGRldmVsb3BtZW50LCBRQSwgYW5kIGRlZmVuc2l2ZSBlbmdpbmVlcmluZyB0ZXJyaXRvcnkuXG5cbkFscmlnaHQsIHJpc2sgYW5hbHlzaXMgZmlyc3QuIEl0IHNlZW1zIHByZXR0eSBiZW5pZ24gZnJvbSB0aGUgZ2V0LWdvLCBjbGFzc2ljIFFBIGFuYWx5c2lzLiBMZXQncyBzZWUgd2hhdCB3ZSBhcmUgZGVhbGluZyB3aXRoLlxuXG5Pa2F5LCBJJ3ZlIGdvdCB0aGUgbW9kaWZpZWQgZmlsZXM6IGBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbmVpZ2gueWFtbGAsIGBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdGAsIGFuZCB0aGUgY3JpdGljYWwgb25lLCBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGFjdGlvbiBpcywgc28gbGV0J3MgZGlnIGludG8gYG5ldC9jb3JlL25laWdoYm91ci5jYC5cblxuSXQgbG9va3MgbGlrZSB3ZSBoYXZlOlxuXG4xLiAgVXBkYXRlcyB0byBgbmxfbnRibF9wYXJtX3BvbGljeWAgd2l0aCBpbnB1dCB2YWxpZGF0aW9uLCBzcGVjaWZpY2FsbHkgYSBtYXggcmFuZ2UgZm9yIGBOVEJMX1BBUk1fTVNfTUFYYCwgd2hpY2ggaXMgZ29vZC4gVGhhdCdzIGEgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgcHJhY3RpY2UsIG1pdGlnYXRpbmcgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIG9yIG90aGVyIHVuZXhwZWN0ZWQgaW5wdXQuXG4yLiAgU2lnbmlmaWNhbnQgY2hhbmdlcyB0byBgbmVpZ2h0YmxfZHVtcF9pbmZvYC4gSXQgbG9va3MgbGlrZSB0aGVyZSdzIHNvbWUgZml4aW5nIGluIGhvdyBpdCBoYW5kbGVzIGBkZWZhdWx0X3NraXBgIHdpdGhpbiBgY2ItXHUwMDNlYXJnc1syXWAsIGEgY2hhbmdlIGZyb20gYGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbV9yY3VgIHRvIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdWAsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgUkNVLXNhZmUgdHJhdmVyc2FsLiBBZGRpdGlvbmFsbHksIHRoZXJlIGFyZSBjaGVja3Mgb24gYHAtXHUwMDNlZGV2YCwgc3BlY2lmaWNhbGx5IGBpZiAoIXAtXHUwMDNlZGV2IHx8IHAtXHUwMDNlZGV2ID09IGJsYWNraG9sZV9uZXRkZXYpIGNvbnRpbnVlO2AsIHdoaWNoIG1heSBiZSBmb3IgbnVsbCBwb2ludGVyIGhhbmRsaW5nIG9yIGhhbmRsaW5nIG9mIHRoZSBibGFja2hvbGUgZGV2aWNlLiBGaW5hbGx5LCB0aGVyZSBpcyBhIHJlZmFjdG9yIG9mIGR1bXBpbmcgbG9naWMsIGxpa2VseSBmaXhpbmcgYSBzdGF0ZSBtYWNoaW5lIGZvciBkdW1waW5nIG5laWdoYm9yIHRhYmxlIHBhcmFtZXRlcnMgdGhyb3VnaCBuZXRsaW5rLlxuMy4gIENoYW5nZXMgdG8gYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAgd2l0aCBtYXggYm91bmRzIGNoZWNrcyBmb3Igc3lzY3RsLCBhbm90aGVyIGRlZmVuc2l2ZSBjaGFuZ2UuXG5cbkNydWNpYWxseSwgdGhpcyBpcyBhbGwgaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYC4gVGhhdCdzICpjb3JlKiBuZXR3b3JraW5nIGNvZGUsIHNvIHRoaXMgc2hvdWxkIGdldCBzb21lIGF0dGVudGlvbi4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZT8gQW5kIHRoZSBhbnN3ZXIgaXMgeWVzLCBhYnNvbHV0ZWx5ISBXZSdyZSB0YWxraW5nIGFib3V0IHJlYWNoaW5nIHRoaXMgdGhyb3VnaCBydG5ldGxpbmsgKGBSVE1fR0VUTkVJR0hUQkxgIC8gYFJUTV9TRVRORUlHSFRCTGApIGFuZCBzeXNjdGwgY2FsbHMgKGAvcHJvYy9zeXMvbmV0L2lwdjQvbmVpZ2gvLi4uYCBvciBgL3Byb2Mvc3lzL25ldC9pcHY2L25laWdoLy4uLmApLiBUaGlzIGFsc28gY292ZXJzIG5ldGxpbmsgdGFibGUgZHVtcCBhbmQgc2V0IGZ1bmN0aW9ucyAoYG5laWdodGJsX2R1bXBfaW5mb2AgYW5kIGBuZWlnaHRibF9zZXRgKSBhbmQgdGhlIHN5c2N0bCBoYW5kbGVyLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZ3JlcCBhcm91bmQgYG5ldC9jb3JlL25laWdoYm91ci5jYCBhbmQgZnVuY3Rpb25zIG5lYXJieSB0byBnZXQgYSBiZXR0ZXIgZmVlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUwOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAwOjA2OjA4LjAxMzc3NTgzNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjkyMTMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZWlnaHRibF9kdW1wX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25laWdoYm91ci5jPTI1NjI9c3RhdGljIGludCBuZWlnaHRibF92YWxpZF9kdW1wX2luZm8oY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yNTg1LVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjI1ODY6c3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTI1ODcte1xcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9Mzk2MT1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgbmVpZ2hfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTM5NjUtXFx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEIHwgUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxcbm5ldC9jb3JlL25laWdoYm91ci5jOjM5NjY6XFx0ey5tc2d0eXBlID0gUlRNX0dFVE5FSUdIVEJMLCAuZHVtcGl0ID0gbmVpZ2h0YmxfZHVtcF9pbmZvLFxcbm5ldC9jb3JlL25laWdoYm91ci5jLTM5NjctXFx0IC5mbGFncyA9IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDA6MDY6MDguMDYwNzAxNjI1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU5OTczMDg1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBoaWdobHkga25vd2xlZGdlYWJsZSBwcm9mZXNzaW9uYWwgaW4gdGhlIGZpZWxkOlxuXG4qKkRpZ2dpbmcgRGVlcGVyIGludG8gdGhlIE5ldHdvcmsgTmVpZ2hib3IgRGlzY292ZXJ5IFByb2Nlc3MqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBicm9hZGVuIG91ciBzY29wZSBhIGJpdCBoZXJlLiBXaGlsZSB3ZSd2ZSBmb2N1c2VkIG9uIFthc3N1bWVkIHByZXZpb3VzIHRvcGljLCBub3QgaW4gdGhlIHByb3ZpZGVkIHRleHRdLCB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFib3V0IHRoZSBudWFuY2VzIG9mIG5ldHdvcmsgbmVpZ2hib3IgZGlzY292ZXJ5LCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRpbWUtc2Vuc2l0aXZlIHByb2Nlc3Nlcy4gU28sIHRvIGVuc3VyZSB3ZSBoYXZlbid0IG92ZXJsb29rZWQgYW55IGNyaXRpY2FsIGZhY3RvcnMsIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCBhbmQgYG5laWdodGJsX3NldGAuIEkgc3VzcGVjdCB0aGF0IHRoZXNlIG1pZ2h0IGNvbnRhaW4ga2V5IHRpbWluZyBwYXJhbWV0ZXJzLCBvciBjcml0aWNhbCBuZXR3b3JrIHRhYmxlIG1hbmFnZW1lbnQuIExldCdzIHNlZSBpZiBlaXRoZXIgb2YgdGhlbSBpcyBzdWJ0bHkgYWZmZWN0aW5nLCBvciBjb3VsZCBiZSBhZmZlY3RpbmcsIHBlcmZvcm1hbmNlIGluIGEgd2F5IHdlIGhhZG4ndCBjb25zaWRlcmVkLiBJdOKAmXMgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiB0aW1pbmcgYW5kIHRhYmxlIG1hbmFnZW1lbnQgYXJlIGludm9sdmVkLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGxpa2VseSBjZW50cmFsIHRvIG5laWdoYm9yIGRpc2NvdmVyeeKAmXMgYWNjdXJhdGUgb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTI5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDA6MDY6MTAuNjYwNDM0OTA2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MjQwMTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25laWdoYm91ci5jPTM2Njk9c3RhdGljIGludCBuZWlnaF9wcm9jX2RvaW50dmVjX3plcm9faW50bWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMzY4My1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYzozNjg0OnN0YXRpYyBpbnQgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxcbm5ldC9jb3JlL25laWdoYm91ci5jLTM2ODUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jPTM3NTE9c3RhdGljIGludCBuZWlnaF9wcm9jX2Jhc2VfcmVhY2hhYmxlX3RpbWUoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zNzk2LSNkZWZpbmUgTkVJR0hfU1lTQ1RMX01TX0pJRkZJRVNfUE9TSVRJVkVfRU5UUlkoYXR0ciwgbmFtZSkgXFxcXFxcbm5ldC9jb3JlL25laWdoYm91ci5jOjM3OTc6XFx0TkVJR0hfU1lTQ1RMX0VOVFJZKGF0dHIsIGF0dHIsIG5hbWUsIDA2NDQsIG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZSlcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zNzk4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMDowNjoxMC43Mjk2ODAyNDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzcwNTU0MjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgTmV0d29yayBUYWJsZSBQYXJhbWV0ZXIgUG9saWNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbmxfbnRibF9wYXJtX3BvbGljeWAgYW5kIGBuZWlnaHRibF9zZXRgLiBJbW1lZGlhdGVseSwgbXkgYnJhaW4gaXMgZ29pbmcgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZXNlIHdpdGggbXkgZXhpc3RpbmcgbWVudGFsIG1vZGVscyBmb3IgbmV0d29yayB0YWJsZSBjb25maWd1cmF0aW9ucyBhbmQgbmVpZ2hib3IgdGFibGUgbWFuYWdlbWVudC4gSSdtIGxpa2VseSBjaGVja2luZyBmb3IgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgaW5jb25zaXN0ZW5jaWVzIGJldHdlZW4gdGhlIHR3by4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmc6IGlzIHRoZSBwb2xpY3kgZW5mb3JjZWQgYnkgYG5sX250YmxfcGFybV9wb2xpY3lgIHJlZmxlY3RlZCBhY2N1cmF0ZWx5IChhbmQgcHJlZGljdGFibHkpIGluIHRoZSBzZXR0aW5ncyBtYW5hZ2VkIGJ5IGBuZWlnaHRibF9zZXRgPyBBcmUgdGhlcmUgYW55IG92ZXJyaWRlcyBoYXBwZW5pbmc/IE9yLCBhcmUgdGhlcmUgYW55IHNpdHVhdGlvbnMgd2hlcmUgb25lIGluZmx1ZW5jZXMgdGhlIG90aGVyIGluIGFuIHVuZXhwZWN0ZWQgd2F5PyBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGF0IEknbSBhYmxlIHRvIHByZWRpY3QgYmVoYXZpb3VyLCBhbmQgdGhhdCB0aGVyZSBhcmUgbm90IGFueSB1bmludGVuZGVkIGNvbnNlcXVlbmNlcy4gVGhlIGludGVycGxheSBiZXR3ZWVuIHRoZXNlIHR3byBpcyBjcml0aWNhbCBmb3IgbmV0d29yayBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5LCBhbmQgYSBtaXNjb25maWd1cmF0aW9uIGhlcmUgY2FuIGxlYWQgdG8gYWxsIHNvcnRzIG9mIGhlYWRhY2hlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlc2UgYXJlIGluZGVwZW5kZW50IHNldHRpbmdzIG9yIHRpZ2h0bHkgY291cGxlZCwgYW5kLCBpZiBjb3VwbGVkLCB3aGF0J3MgdGhlIGludGVyYWN0aW9uIG1hdHJpeCBsaWtlP1xuXG5cbiIsIklucHV0VG9rZW5zIjo2NTAzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDA6MDY6MTMuMTAwMjM2NDQ4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2OTM1OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5sX250YmxfcGFybV9wb2xpY3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuYz0yMzY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIG5sX250YmxfcGFybV9tc19yYW5nZSA9IHtcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTIzNjgtXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MjM2OTpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmxfbnRibF9wYXJtX3BvbGljeVtORFRQQV9NQVgrMV0gPSB7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjM3MC1cXHRbTkRUUEFfSUZJTkRFWF1cXHRcXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0yMzg5PXN0YXRpYyBpbnQgbmVpZ2h0Ymxfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjQ0NS1cXHRcXHRcXHRcXHRcXHRcXHQgIHRiW05EVEFfUEFSTVNdLFxcbm5ldC9jb3JlL25laWdoYm91ci5jOjI0NDY6XFx0XFx0XFx0XFx0XFx0XFx0ICBubF9udGJsX3Bhcm1fcG9saWN5LCBleHRhY2spO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTI0NDctXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAwOjA2OjEzLjE2NzE3NTcyN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTMyMjA0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aG9zZSBjb2RlIGNoYW5nZXMsIHRha2luZyBvbiB0aGUgcGVyc29uYSBvZiBhbiBleHBlcnQ6XG5cbioqRGVlcCBEaXZlIGludG8gTmVpZ2hib3IgVGFibGUgTW9kaWZpY2F0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3Agd2hhdCdzIGdvaW5nIG9uIHdpdGhpbiB0aGVzZSBjaGFuZ2VzLiBUaGUgY3JpdGljYWwgYXJlYXMgSSdtIHpvbmluZyBpbiBvbiBhcmUgcHJlY2lzZWx5IGhvdyBgbmVpZ2h0YmxfZHVtcF9pbmZvYCwgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAsIGFuZCBgbmVpZ2h0Ymxfc2V0YCBoYXZlIGJlZW4gYWx0ZXJlZC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBrZXkgdG8gbWFuYWdpbmcgYW5kIGludGVyYWN0aW5nIHdpdGggdGhlIG5laWdoYm9yIHRhYmxlLCBzbyB1bmRlcnN0YW5kaW5nIHRoZWlyIG1vZGlmaWNhdGlvbnMgaXMgcGFyYW1vdW50LlxuXG5UbyBidWlsZCBhIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgSSdtIGdvaW5nIHRvIHB1bGwgdXAgYG5ldC9jb3JlL25laWdoYm91ci5jYCBhbmQgZm9jdXMgb24gbGluZXMgMjU4MCB0aHJvdWdoIDI2NjAuIFRoZSBgcmVhZC1maWxlYCBjb21tYW5kIHNob3VsZCBnaXZlIG1lIHRoZSBkZXRhaWxlZCBjb250ZXh0IEkgbmVlZCwgbGV0dGluZyBtZSBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgYW5kIGludGVyYWN0IHdpdGggdGhlIGJyb2FkZXIgbmVpZ2hib3IgdGFibGUgZnVuY3Rpb25hbGl0eS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBuaXR0eS1ncml0dHk6IEhvdyBhcmUgdGhlIGRhdGEgc3RydWN0dXJlcyBjaGFuZ2luZz8gV2hhdCBhcmUgdGhlIG5ldyBwYXJhbWV0ZXJzIG9yIGJlaGF2aW9ycz8gQXJlIHRoZXJlIGFueSBuZXcgbG9ja2luZyBtZWNoYW5pc21zIGludm9sdmVkPyBBbnkgY2hhbmdlcyB0byBlcnJvciBoYW5kbGluZz8gSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUgdG8gYmUgY29uZmlkZW50IGluIG15IHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwNDYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMDowNjoxNS42NjAzOTgwNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjk4MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmVpZ2hib3VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU4MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjU4MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yNTgxOlxcdFxcdH1cXG4yNTgyOlxcdFxcbjI1ODM6XFx0XFx0cmV0dXJuIDA7XFxuMjU4NDpcXHR9XFxuMjU4NTpcXHRcXG4yNTg2OlxcdHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4yNTg3OlxcdHtcXG4yNTg4OlxcdFxcdGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoID0gY2ItXFx1MDAzZW5saDtcXG4yNTg5OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbjI1OTA6XFx0XFx0aW50IGRlZmF1bHRfc2tpcCA9IGNiLVxcdTAwM2VhcmdzWzJdO1xcbjI1OTE6XFx0XFx0aW50IG5laWdoX3NraXAgPSBjYi1cXHUwMDNlYXJnc1sxXTtcXG4yNTkyOlxcdFxcdGludCBmYW1pbHksIHRpZHgsIG5pZHggPSAwO1xcbjI1OTM6XFx0XFx0aW50IHRibF9za2lwID0gY2ItXFx1MDAzZWFyZ3NbMF07XFxuMjU5NDpcXHRcXHRzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibDtcXG4yNTk1OlxcdFxcbjI1OTY6XFx0XFx0aWYgKGNiLVxcdTAwM2VzdHJpY3RfY2hlY2spIHtcXG4yNTk3OlxcdFxcdFxcdGludCBlcnIgPSBuZWlnaHRibF92YWxpZF9kdW1wX2luZm8obmxoLCBjYi1cXHUwMDNlZXh0YWNrKTtcXG4yNTk4OlxcdFxcbjI1OTk6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMjYwMDpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjI2MDE6XFx0XFx0fVxcbjI2MDI6XFx0XFxuMjYwMzpcXHRcXHRmYW1pbHkgPSAoKHN0cnVjdCBydGdlbm1zZyAqKW5sbXNnX2RhdGEobmxoKSktXFx1MDAzZXJ0Z2VuX2ZhbWlseTtcXG4yNjA0OlxcdFxcbjI2MDU6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjI2MDY6XFx0XFxuMjYwNzpcXHRcXHRmb3IgKHRpZHggPSAwOyB0aWR4IFxcdTAwM2MgTkVJR0hfTlJfVEFCTEVTOyB0aWR4KyspIHtcXG4yNjA4OlxcdFxcdFxcdHN0cnVjdCBuZWlnaF9wYXJtcyAqcDtcXG4yNjA5OlxcdFxcbjI2MTA6XFx0XFx0XFx0dGJsID0gcmN1X2RlcmVmZXJlbmNlKG5laWdoX3RhYmxlc1t0aWR4XSk7XFxuMjYxMTpcXHRcXHRcXHRpZiAoIXRibClcXG4yNjEyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI2MTM6XFx0XFxuMjYxNDpcXHRcXHRcXHRpZiAodGlkeCBcXHUwMDNjIHRibF9za2lwIHx8IChmYW1pbHkgXFx1MDAyNlxcdTAwMjYgdGJsLVxcdTAwM2VmYW1pbHkgIT0gZmFtaWx5KSlcXG4yNjE1OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI2MTY6XFx0XFxuMjYxNzpcXHRcXHRcXHRpZiAoIWRlZmF1bHRfc2tpcCBcXHUwMDI2XFx1MDAyNlxcbjI2MTg6XFx0XFx0XFx0ICAgIG5laWdodGJsX2ZpbGxfaW5mbyhza2IsIHRibCwgTkVUTElOS19DQihjYi1cXHUwMDNlc2tiKS5wb3J0aWQsXFxuMjYxOTpcXHRcXHRcXHRcXHRcXHQgICAgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIFJUTV9ORVdORUlHSFRCTCxcXG4yNjIwOlxcdFxcdFxcdFxcdFxcdCAgICAgICBOTE1fRl9NVUxUSSkgXFx1MDAzYyAwKVxcbjI2MjE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjYyMjpcXHRcXG4yNjIzOlxcdFxcdFxcdGRlZmF1bHRfc2tpcCA9IDE7XFxuMjYyNDpcXHRcXG4yNjI1OlxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsIFxcdTAwMjZ0YmwtXFx1MDAzZXBhcm1zX2xpc3QsIGxpc3QpIHtcXG4yNjI2OlxcdFxcdFxcdFxcdGlmICghbmV0X2VxKG5laWdoX3Bhcm1zX25ldChwKSwgbmV0KSlcXG4yNjI3OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI2Mjg6XFx0XFxuMjYyOTpcXHRcXHRcXHRcXHRpZiAoIXAtXFx1MDAzZWRldiB8fCBwLVxcdTAwM2VkZXYgPT0gYmxhY2tob2xlX25ldGRldilcXG4yNjMwOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI2MzE6XFx0XFxuMjYzMjpcXHRcXHRcXHRcXHRpZiAobmlkeCBcXHUwMDNjIG5laWdoX3NraXApXFxuMjYzMzpcXHRcXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuMjYzNDpcXHRcXG4yNjM1OlxcdFxcdFxcdFxcdGlmIChuZWlnaHRibF9maWxsX3BhcmFtX2luZm8oc2tiLCB0YmwsIHAsXFxuMjYzNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIE5FVExJTktfQ0IoY2ItXFx1MDAzZXNrYikucG9ydGlkLFxcbjI2Mzc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBubGgtXFx1MDAzZW5sbXNnX3NlcSxcXG4yNjM4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgUlRNX05FV05FSUdIVEJMLFxcbjI2Mzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBOTE1fRl9NVUxUSSkgXFx1MDAzYyAwKVxcbjI2NDA6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjY0MTpcXHRcXHRcXHRuZXh0OlxcbjI2NDI6XFx0XFx0XFx0XFx0bmlkeCsrO1xcbjI2NDM6XFx0XFx0XFx0fVxcbjI2NDQ6XFx0XFxuMjY0NTpcXHRcXHRcXHRuZWlnaF9za2lwID0gMDtcXG4yNjQ2OlxcdFxcdFxcdG5pZHggPSAwO1xcbjI2NDc6XFx0XFx0XFx0ZGVmYXVsdF9za2lwID0gMDtcXG4yNjQ4OlxcdFxcdH1cXG4yNjQ5OlxcdG91dDpcXG4yNjUwOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjI2NTE6XFx0XFxuMjY1MjpcXHRcXHRjYi1cXHUwMDNlYXJnc1swXSA9IHRpZHg7XFxuMjY1MzpcXHRcXHRjYi1cXHUwMDNlYXJnc1sxXSA9IG5pZHg7XFxuMjY1NDpcXHRcXHRjYi1cXHUwMDNlYXJnc1syXSA9IGRlZmF1bHRfc2tpcDtcXG4yNjU1OlxcdFxcbjI2NTY6XFx0XFx0cmV0dXJuIHNrYi1cXHUwMDNlbGVuO1xcbjI2NTc6XFx0fVxcbjI2NTg6XFx0XFxuMjY1OTpcXHRzdGF0aWMgaW50IF9fbmVpZ2hfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMDowNjoxNS42NjA3NzMwNjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM3NzcxNzI2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXNlIGNoYW5nZXMsIHJlc2lkaW5nIHdpdGhpbiBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgLCBhcmUgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLCBnaXZlbiB0aGVpciBwb3RlbnRpYWwgaW1wYWN0IG9uIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5LiBJIHNlZSB0aHJlZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkOiBgbmxfbnRibF9wYXJtX3BvbGljeWAgKGFzc29jaWF0ZWQgd2l0aCBgbmVpZ2h0Ymxfc2V0YCksIGBuZWlnaHRibF9kdW1wX2luZm9gLCBhbmQgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAuIFRoZSBjb250ZXh0IHN1Z2dlc3RzIHRoaXMgaXMgY29kZSBoYW5kbGluZyBOZWlnaGJvciBEaXNjb3ZlcnkgYW5kIHJlbGF0ZWQgdGFibGUgbWFuYWdlbWVudC5cblxuUmVhY2hhYmxlPyBBYnNvbHV0ZWx5LiBUaGUgYG5laWdodGJsX2R1bXBfaW5mb2AgZnVuY3Rpb24gaXMgYWNjZXNzaWJsZSB0aHJvdWdoIGBSVE1fR0VUTkVJR0hUQkxgIHJ0bmV0bGluayBtZXNzYWdlcywgYW5kIGBuZWlnaHRibF9zZXRgIGlzIHJlYWNoYWJsZSB2aWEgYFJUTV9TRVRORUlHSFRCTGAgcnRuZXRsaW5rIG1lc3NhZ2VzLiAgVGhpcyBtZWFucyB0aGVzZSBhcmUgZXhwb3NlZCBpbnRlcmZhY2VzLiBUaGVuLCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCBpcyBob29rZWQgdXAgYXMgYSBzeXNjdGwgaGFuZGxlciBmb3IgdGhlIGBuZWlnaC8qL2ludGVydmFsX3Byb2JlX3RpbWVfbXNgIHNldHRpbmcuIE5vIGV4b3RpYyBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkIHRvIHJlYWNoIHRoZXNlLCBhbmQgdGhpcyBpcyBwcmV0dHkgc3RhbmRhcmQgbmV0d29ya2luZyBjb2RlLlxuXG5Xb3J0aCBmdXp6aW5nPyBHaXZlbiB0aGlzIHJlYWNoYWJpbGl0eSBhbmQgcG90ZW50aWFsIGZvciBpbXBhY3RpbmcgdGFibGUgbWFuYWdlbWVudCwgSSdkIHNheSB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZzsgVFJVRS4gVGhpcyBpcyBjb3JlIGZ1bmN0aW9uYWxpdHkuIFRoZSBmb2N1cyBzaG91bGQgYmUgb24gdGhlc2Ugc3ltYm9sczogYG5laWdodGJsX2R1bXBfaW5mb2AsIGBuZWlnaHRibF9zZXRgLCBhbmQgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAuXG5cbkZpbmFsbHksIGJlZm9yZSBJIGRpZyBkZWVwZXIsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBhbmQgTWFrZWZpbGUgdG8gbWFrZSBzdXJlIHRoaXMgY29kZSBpcyBidWlsdCB1bmRlciBgQ09ORklHX05FVGAuIEl0J3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIHBhcnQgb2YgdGhlIHN0YW5kYXJkIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBNYWtlZmlsZSB0byBtYWtlIHN1cmUsIGJ1dCwgZ2l2ZW4gdGhlIHBhdGgsIEkgZXhwZWN0IGl0J3MgYSBzYWZlIGJldCB0byBhc3N1bWUgdGhpcyBpcyBlbmFibGVkIGluIHN0YW5kYXJkIGtlcm5lbCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU0NSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAwOjA2OjE5LjAzODQ5MzA0MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk3MDY4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVpZ2hib3VyLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmM9MTk0ND1zdGF0aWMgaW50IGJhdGFkdl9pdl9vZ21fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5jLTE5OTQtLyoqXFxubmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5jOjE5OTU6ICogYmF0YWR2X2l2X29nbV9uZWlnaF9nZXRfdHFfYXZnKCkgLSBHZXQgdGhlIFRRIGF2ZXJhZ2UgZm9yIGEgbmVpZ2hib3VyIG9uIGFcXG5uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmMtMTk5Ni0gKiAgZ2l2ZW4gb3V0Z29pbmcgaW50ZXJmYWNlLlxcbi0tXFxubmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcXHRcXHQgICAgICs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlOjEzOlxcdFxcdFxcdG5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vIFxcXFxcXG5uZXQvY29yZS9NYWtlZmlsZS0xNC1cXHRcXHRcXHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXFxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTc5LSAgICAgb25seSBMaW51eCBjb21wbGllcyB0byByZmMxODEyIG5vdyAoeWVzLCBndXlzLCBMaW51eCBpcyB0aGUgb25seVxcbm5ldC9pcHY0L2lwX2dyZS5jOjgwOiAgICAgdHJ1ZSByb3V0ZXIgbm93IDotKSksIGFsbCByb3V0ZXJzIChhdCBsZWFzdCwgaW4gbmVpZ2hib3VyaG9vZCBvZiBtaW5lKVxcbm5ldC9pcHY0L2lwX2dyZS5jLTgxLSAgICAgcmV0dXJuIG9ubHkgOCBieXRlcyBvZiBwYXlsb2FkLiBJdCBpcyB0aGUgZW5kLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMDowNjoxOS4xMDgyMDcyMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjYyMDQxNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGBuZWlnaGJvdXIub2AgTW9kdWxlIGFuZCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYG5laWdoYm91ci5vYCBpcyBidWlsdCBhcyBwYXJ0IG9mIGBvYmoteWAgaW4gYG5ldC9jb3JlL01ha2VmaWxlYCwgYW5kIHRoYXQncyBjb250aW5nZW50IG9uIGBDT05GSUdfTkVUYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgc3lzY3RsIGNvbmZpZ3VyYXRpb25zIHNwZWNpZmljYWxseSBmb3IgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYSBkZXBlbmRlbmN5IG9uIGBDT05GSUdfU1lTQ1RMYCwgYENPTkZJR19ORVRgLCBvciBldmVuIHBvdGVudGlhbGx5IGBDT05GSUdfSU5FVGAuIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpbnZvbHZlZC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gYG5ldC9jb3JlL25laWdoYm91ci5jYC4gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBwcmVwcm9jZXNzb3IgaWZkZWZzIHN1cnJvdW5kaW5nIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgLiBUaGF0J2xsIGNvbmZpcm0gaWYgdGhlIGluY2x1c2lvbiBvZiB0aGlzIHZhcmlhYmxlIG9yIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5IGRlcGVuZHMgb24gYW55IG9mIHRob3NlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIGp1c3QgbWVudGlvbmVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBpdHMgY29tcGlsZS10aW1lIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjkyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAwOjA2OjIxLjc3MDI1MTMxMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwNTg5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuYy0yMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvY19mcy5oXFx1MDAzZVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjIzOiNpZmRlZiBDT05GSUdfU1lTQ1RMXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjQtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N5c2N0bC5oXFx1MDAzZVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9NTY9c3RhdGljIHZvaWQgcG5laWdoX2lmZG93bihzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTU4LVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjU5OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTYwLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbmVpZ2hfc3RhdF9zZXFfb3BzO1xcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MTgyMT12b2lkIG5laWdoX3RhYmxlX2luaXQoaW50IGluZGV4LCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibClcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTE4MzktXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTg0MDojaWZkZWYgQ09ORklHX1BST0NfRlNcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xODQxLVxcdGlmICghcHJvY19jcmVhdGVfc2VxX2RhdGEodGJsLVxcdTAwM2VpZCwgMCwgaW5pdF9uZXQucHJvY19uZXRfc3RhdCxcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jPTMyNTU9RVhQT1JUX1NZTUJPTChuZWlnaF94bWl0KTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zMjU2LVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjMyNTc6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMzI1OC1cXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jPTM1NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBuZWlnaF9zdGF0X3NlcV9vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zNTcwLX07XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MzU3MTojZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi9cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zNTcyLVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MzYxMj1FWFBPUlRfU1lNQk9MKG5laWdoX2FwcF9ucyk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMzYxMy1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYzozNjE0OiNpZmRlZiBDT05GSUdfU1lTQ1RMXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMzYxNS1zdGF0aWMgaW50IHVucmVzX3FsZW5fbWF4ID0gSU5UX01BWCAvIFNLQl9UUlVFU0laRShFVEhfRlJBTUVfTEVOKTtcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jPTM5NTc9RVhQT1JUX1NZTUJPTChuZWlnaF9zeXNjdGxfdW5yZWdpc3Rlcik7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMzk1OC1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYzozOTU5OiNlbmRpZlxcdC8qIENPTkZJR19TWVNDVEwgKi9cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zOTYwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMDowNjoyMS44MTUzMTQ3MjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk3NTkwNDg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIE5ldHdvcmsgTmVpZ2hib3IgVGFibGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIG9mIGNvdXJzZSwgdGhhdCBgQ09ORklHX1NZU0NUTGAgaXMgKnJlcXVpcmVkKiBmb3IgdGhlIHN5c2N0bCBiaXRzIGluIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AsIGFuZCBgQ09ORklHX05FVGAgaXMgdGhlIGFic29sdXRlIGJhc2UgY29uZmlnLiBJdCdzIGFsbW9zdCBhdXRvbWF0aWMsIGJ1dCBsZXQncyBqdXN0IGNvbmZpcm0gdGhhdCBgQ09ORklHX0lORVRgIGlzIGFsc28gYSBnb29kIGlkZWEgdG8gaGF2ZSBlbmFibGVkLCBnaXZlbiB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBuZWlnaGJvciB0YWJsZXMsIEFSUCwgYW5kIElQdjYgTkQsIHdoaWNoIGdlbmVyYWxseSBsaXZlIHVuZGVyIHRoZSB1bWJyZWxsYSBvZiBgQ09ORklHX0lORVRgIG9yIGBDT05GSUdfSVBWNmAuIEJ1dCB5ZXMsIGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19TWVNDVExgIGFyZSB0aGUgY29yZSBlc3NlbnRpYWxzIGhlcmUuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBkZXRhaWxzLiBJIHNlZSBzb21lIGtleSBzeW1ib2xzIGZsYWdnZWQgYXMgJ2ZvY3VzZWQnOiBgbmVpZ2h0YmxfZHVtcF9pbmZvYCwgYG5laWdodGJsX3NldGAsIGFuZCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVzZSBhcmVuJ3Qgc29tZSB1bml2ZXJzYWxseSB1c2VkIHRoaW5ncywgYmVjYXVzZSBpZiBpdCAqaXMqIHVzZWQgdW5pdmVyc2FsbHksIHRoYXQncyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhhdCBpdCBtYXkgYWZmZWN0IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEJ1dCBubywgdGhleSBhcmUgc3BlY2lmaWMgdG8gcnRuZXRsaW5rIG5laWdoYm9yIHRhYmxlIG9wZXJhdGlvbnMgYW5kIHByb2Mgc3lzY3RsIGZvciBuZWlnaGJvciBwYXJhbWV0ZXJzLiBHb3QgaXQuXG5cbk5leHQsIEkgbmVlZCB0byBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayBvbiB0aGUgcGF0Y2gncyBvdmVyYWxsIHJlYXNvbmluZy4gT2theSwgc28gaXQgbG9va3MgbGlrZSB3aGF0IHRoZSBwYXRjaCBhY3R1YWxseSBkb2VzIGlzIGl0IHZhbGlkYXRlcyB0aGUgaW50ZXJ2YWwgcHJvYmUgdGltZSByYW5nZSBpbiB0aGUgcnRuZXRsaW5rIHBvbGljeSBhbmQgdGhlIHN5c2N0bCB0YWJsZS4gQW5kIGl0IGFsc28gcmVmYWN0b3JzIHBhZ2luYXRpb24gYW5kIGZpbHRlcmluZyBpbiBgbmVpZ2h0YmxfZHVtcF9pbmZvYCwgc3BlY2lmaWNhbGx5IHdpdGggdHJhY2tpbmcgYGRlZmF1bHRfc2tpcGAgYW5kIGZpbHRlcmluZyBvdXQgYGJsYWNraG9sZV9uZXRkZXZgIGFuZCBtaXNzaW5nIGRldmljZXMuIFRoaXMgbWFrZXMgc2Vuc2UuIFJlYWNoYWJpbGl0eS13aXNlLCB0aGlzIGlzIGFsbCBtb2RpZnlpbmcgY29yZSBuZXRsaW5rIG5laWdoYm9yIHRhYmxlIGR1bXBpbmcvY29uZmlndXJhdGlvbiBhbmQgc3lzY3RsIGludGVyZmFjZSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgc3RhbmRhcmQgbmV0d29yay1mb2N1c2VkIFJUTmV0bGluayBjYWxscyBsaWtlIGBSVE1fR0VUTkVJR0hUQkxgIGFuZCBgUlRNX1NFVE5FSUdIVEJMYCwgYW5kIGFsc28gdmlhIGAvcHJvYy9zeXMvbmV0LypgLlxuXG5UaGUgaW1wbGljYXRpb25zIG9mIGFsbCBvZiB0aGlzIGFyZSB0aGF0IGl0IGlzICoqd29ydGggZnV6emluZyoqLiBXZSBoYXZlIGludGVydmFsLWJhc2VkIGNvbmZpZ3VyYXRpb24vZHVtcGluZyB2aWEgUlROZXRsaW5rLiBUaGUgcmVxdWlyZWQgY29uZmlncyBhcmUgYE5FVGAgYW5kIGBTWVNDVExgLiBUaGUgRm9jdXNTeW1ib2xzIGFyZSwgYWdhaW4sIGBuZWlnaHRibF9kdW1wX2luZm9gLCBgbmVpZ2h0Ymxfc2V0YCwgYW5kIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgLlxuXG5Pa2F5LCBJJ20gY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuIExldCdzIGludm9rZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY2MywiT3V0cHV0VG9rZW5zIjoxNjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDA6MDY6MjYuNzkxMjIxNjI1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc1MDI0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiLFxuICAgIFwiU1lTQ1RMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmVpZ2h0YmxfZHVtcF9pbmZvXCIsXG4gICAgXCJuZWlnaHRibF9zZXRcIixcbiAgICBcIm5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgaW4gbmV0L2NvcmUvbmVpZ2hib3VyLmM6IGl0IHVwZGF0ZXMgdGhlIG5ldGxpbmsgYXR0cmlidXRlIHBvbGljeSBhbmQgcHJvYyBzeXNjdGwgaGFuZGxlciB0byBlbmZvcmNlIHVwcGVyIGJvdW5kcyBvbiBpbnRlcnZhbF9wcm9iZV90aW1lX21zLCBhbmQgcmVmYWN0b3JzL2ZpeGVzIHRoZSBuZWlnaGJvciB0YWJsZSBkdW1wIHBhZ2luYXRpb24gbG9naWMgaW4gbmVpZ2h0YmxfZHVtcF9pbmZvLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBydG5ldGxpbmsgKFJUTV9HRVRORUlHSFRCTCAvIFJUTV9TRVRORUlHSFRCTCkgYW5kIHByb2NmcyBzeXNjdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCIsXG4gICAgXCJTWVNDVExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZWlnaHRibF9kdW1wX2luZm9cIixcbiAgICBcIm5laWdodGJsX3NldFwiLFxuICAgIFwibmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBpbiBuZXQvY29yZS9uZWlnaGJvdXIuYzogaXQgdXBkYXRlcyB0aGUgbmV0bGluayBhdHRyaWJ1dGUgcG9saWN5IGFuZCBwcm9jIHN5c2N0bCBoYW5kbGVyIHRvIGVuZm9yY2UgdXBwZXIgYm91bmRzIG9uIGludGVydmFsX3Byb2JlX3RpbWVfbXMsIGFuZCByZWZhY3RvcnMvZml4ZXMgdGhlIG5laWdoYm9yIHRhYmxlIGR1bXAgcGFnaW5hdGlvbiBsb2dpYyBpbiBuZWlnaHRibF9kdW1wX2luZm8uIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJ0bmV0bGluayAoUlRNX0dFVE5FSUdIVEJMIC8gUlRNX1NFVE5FSUdIVEJMKSBhbmQgcHJvY2ZzIHN5c2N0bC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDA6MDY6MjYuODY4NzMwMDk0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjM5MDQ5MjA2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAwOjA2OjI2Ljg2OTIxOTA0NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI2Mzg5OTk3NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gcmFuZ2UgY2hlY2tzIChtaW4vbWF4KSBmb3IgdGhlIG5laWdoYm9yIHRhYmxlIGludGVydmFsX3Byb2JlX3RpbWVfbXMgcGFyYW1ldGVyIHZpYSBuZXRsaW5rIHBvbGljeSBhbmQgc3lzY3RsLCBhbmQgZml4ZXMgbmV0bGluayBkdW1wIHJlc3VtcHRpb24gc3RhdGUgdHJhY2tpbmcgaW4gbmVpZ2h0YmxfZHVtcF9pbmZvKCkgdXNpbmcgY2ItXFx1MDAzZWFyZ3NbMl0gKHdoaWNoIGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIG5ldGxpbmsgZHVtcCBzdWJzeXN0ZW0pLiBBbGwgbG9jYWwgdmFyaWFibGVzIChtaW4sIG1heCwgZGVmYXVsdF9za2lwLCBuaWR4KSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgbm8gbmV3IGRhdGEgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBuZXRsaW5rIGR1bXAgaXRlcmF0aW9uIChzdWNoIGFzIGxpc3QgdHJhdmVyc2FsIG9yIGJvdW5kcyBlcnJvcnMpIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJjYjMxMTVhNGY4MDYzMDIzMjMxY2E3ZjZkZGE5ZDhiOGM0OWZlYTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwMDowNTo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1uZWlnaC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LW5laWdoLnlhbWxcbmluZGV4IDBmNDZlZjMxMzU5MDUuLmM4ZTU1Yzk4ZDU2NDkgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbmVpZ2gueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LW5laWdoLnlhbWxcbkBAIC0zNDEsNiArMzQxLDkgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgLVxuICAgICAgICAgbmFtZTogaW50ZXJ2YWwtcHJvYmUtdGltZS1tc1xuICAgICAgICAgdHlwZTogdTY0XG4rICAgICAgICBjaGVja3M6XG4rICAgICAgICAgIG1pbjogMVxuKyAgICAgICAgICBtYXg6IDg2NDAwMDAwXG4gXG4gb3BlcmF0aW9uczpcbiAgIGVudW0tbW9kZWw6IGRpcmVjdGlvbmFsXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxuaW5kZXggMjA4ZjQ2OTY3ZWU1OS4uYjA1ODI5ZTQ0ZDhmYyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxuQEAgLTI0OCw3ICsyNDgsNyBAQCBuZWlnaC9kZWZhdWx0L3VucmVzX3FsZW4gLSBJTlRFR0VSXG4gXG4gbmVpZ2gvZGVmYXVsdC9pbnRlcnZhbF9wcm9iZV90aW1lX21zIC0gSU5URUdFUlxuIFx0VGhlIHByb2JlIGludGVydmFsIGZvciBuZWlnaGJvciBlbnRyaWVzIHdpdGggTlRGX01BTkFHRUQgZmxhZyxcbi1cdHRoZSBtaW4gdmFsdWUgaXMgMS5cbitcdHRoZSBtaW4gdmFsdWUgaXMgMSwgYW5kIHRoZSBtYXggdmFsdWUgaXMgODY0MDAwMDAgKDEgZGF5KS5cbiBcbiBcdERlZmF1bHQ6IDUwMDBcbiBcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZWlnaGJvdXIuYyBiL25ldC9jb3JlL25laWdoYm91ci5jXG5pbmRleCAxMzQ5YzBlZWRiNjQyLi43NDQ4MzIwZjdhZDUyIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmVpZ2hib3VyLmNcbisrKyBiL25ldC9jb3JlL25laWdoYm91ci5jXG5AQCAtMjM1OSw2ICsyMzU5LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubF9uZWlnaHRibF9wb2xpY3lbTkRUQV9NQVgrMV0gPSB7XG4gXHRbTkRUQV9QQVJNU11cdFx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuIH07XG4gXG4rI2RlZmluZSBOVEJMX1BBUk1fTVNfTUFYXHQoMjQgKiA2MCAqIDYwICogTVNFQ19QRVJfU0VDKVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIG5sX250YmxfcGFybV9tc19yYW5nZSA9IHtcbitcdC5taW4gPSAxLFxuK1x0Lm1heCA9IE5UQkxfUEFSTV9NU19NQVgsXG4rfTtcbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmxfbnRibF9wYXJtX3BvbGljeVtORFRQQV9NQVgrMV0gPSB7XG4gXHRbTkRUUEFfSUZJTkRFWF1cdFx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4gXHRbTkRUUEFfUVVFVUVfTEVOXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG5AQCAtMjM3NSw3ICsyMzgyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYKzFdID0ge1xuIFx0W05EVFBBX0FOWUNBU1RfREVMQVldXHRcdD0geyAudHlwZSA9IE5MQV9VNjQgfSxcbiBcdFtORFRQQV9QUk9YWV9ERUxBWV1cdFx0PSB7IC50eXBlID0gTkxBX1U2NCB9LFxuIFx0W05EVFBBX0xPQ0tUSU1FXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXG4tXHRbTkRUUEFfSU5URVJWQUxfUFJPQkVfVElNRV9NU11cdD0geyAudHlwZSA9IE5MQV9VNjQsIC5taW4gPSAxIH0sXG4rXHRbTkRUUEFfSU5URVJWQUxfUFJPQkVfVElNRV9NU11cdD0gTkxBX1BPTElDWV9GVUxMX1JBTkdFKE5MQV9VNjQsXG4rXHRcdFx0XHRcdFx0XHRcdFx1MDAyNm5sX250YmxfcGFybV9tc19yYW5nZSksXG4gfTtcbiBcbiBzdGF0aWMgaW50IG5laWdodGJsX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbkBAIC0yNTc5LDkgKzI1ODcsMTAgQEAgc3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoID0gY2ItXHUwMDNlbmxoO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbitcdGludCBkZWZhdWx0X3NraXAgPSBjYi1cdTAwM2VhcmdzWzJdO1xuK1x0aW50IG5laWdoX3NraXAgPSBjYi1cdTAwM2VhcmdzWzFdO1xuIFx0aW50IGZhbWlseSwgdGlkeCwgbmlkeCA9IDA7XG4gXHRpbnQgdGJsX3NraXAgPSBjYi1cdTAwM2VhcmdzWzBdO1xuLVx0aW50IG5laWdoX3NraXAgPSBjYi1cdTAwM2VhcmdzWzFdO1xuIFx0c3RydWN0IG5laWdoX3RhYmxlICp0Ymw7XG4gXG4gXHRpZiAoY2ItXHUwMDNlc3RyaWN0X2NoZWNrKSB7XG5AQCAtMjYwNSwxNyArMjYxNCwyMSBAQCBzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdGlmICh0aWR4IFx1MDAzYyB0Ymxfc2tpcCB8fCAoZmFtaWx5IFx1MDAyNlx1MDAyNiB0YmwtXHUwMDNlZmFtaWx5ICE9IGZhbWlseSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmIChuZWlnaHRibF9maWxsX2luZm8oc2tiLCB0YmwsIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4rXHRcdGlmICghZGVmYXVsdF9za2lwIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgbmVpZ2h0YmxfZmlsbF9pbmZvKHNrYiwgdGJsLCBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuIFx0XHRcdFx0ICAgICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIFJUTV9ORVdORUlHSFRCTCxcbiBcdFx0XHRcdCAgICAgICBOTE1fRl9NVUxUSSkgXHUwMDNjIDApXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdG5pZHggPSAwO1xuLVx0XHRwID0gbGlzdF9uZXh0X2VudHJ5KFx1MDAyNnRibC1cdTAwM2VwYXJtcywgbGlzdCk7XG4tXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbV9yY3UocCwgXHUwMDI2dGJsLVx1MDAzZXBhcm1zX2xpc3QsIGxpc3QpIHtcbitcdFx0ZGVmYXVsdF9za2lwID0gMTtcbitcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgXHUwMDI2dGJsLVx1MDAzZXBhcm1zX2xpc3QsIGxpc3QpIHtcbiBcdFx0XHRpZiAoIW5ldF9lcShuZWlnaF9wYXJtc19uZXQocCksIG5ldCkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbitcdFx0XHRpZiAoIXAtXHUwMDNlZGV2IHx8IHAtXHUwMDNlZGV2ID09IGJsYWNraG9sZV9uZXRkZXYpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0XHRpZiAobmlkeCBcdTAwM2MgbmVpZ2hfc2tpcClcbiBcdFx0XHRcdGdvdG8gbmV4dDtcbiBcbkBAIC0yNjMwLDEyICsyNjQzLDE1IEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0fVxuIFxuIFx0XHRuZWlnaF9za2lwID0gMDtcbitcdFx0bmlkeCA9IDA7XG4rXHRcdGRlZmF1bHRfc2tpcCA9IDA7XG4gXHR9XG4gb3V0OlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRjYi1cdTAwM2VhcmdzWzBdID0gdGlkeDtcbiBcdGNiLVx1MDAzZWFyZ3NbMV0gPSBuaWR4O1xuK1x0Y2ItXHUwMDNlYXJnc1syXSA9IGRlZmF1bHRfc2tpcDtcbiBcbiBcdHJldHVybiBza2ItXHUwMDNlbGVuO1xuIH1cbkBAIC0zNjY5LDEyICszNjg1LDEzIEBAIHN0YXRpYyBpbnQgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCxcbiBcdFx0XHRcdFx0XHQgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxuIHtcbiBcdHN0cnVjdCBjdGxfdGFibGUgdG1wID0gKmN0bDtcbi1cdGludCByZXQ7XG4rXHRpbnQgcmV0LCBtaW4sIG1heDtcbiBcbi1cdGludCBtaW4gPSBtc2Vjc190b19qaWZmaWVzKDEpO1xuK1x0bWluID0gbXNlY3NfdG9famlmZmllcygxKTtcbitcdG1heCA9IG1zZWNzX3RvX2ppZmZpZXMoTlRCTF9QQVJNX01TX01BWCk7XG4gXG4gXHR0bXAuZXh0cmExID0gXHUwMDI2bWluO1xuLVx0dG1wLmV4dHJhMiA9IE5VTEw7XG4rXHR0bXAuZXh0cmEyID0gXHUwMDI2bWF4O1xuIFxuIFx0cmV0ID0gcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heChcdTAwMjZ0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xuIFx0bmVpZ2hfcHJvY191cGRhdGUoY3RsLCB3cml0ZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMDowNjoyNi44NjkyMTk5NDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA4MDk5MDg2MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2hldGhlciB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyBhIGZvY3VzZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGFyb3VuZCB2YWxpZGF0aW5nIGFuZCBoYW5kbGluZyB0aGUgYGludGVydmFsLXByb2JlLXRpbWUtbXNgIHBhcmFtZXRlciBmb3IgbmVpZ2hib3IgdGFibGVzIHZpYSBOZXRsaW5rLlxuXG5GaXJzdCwgdGhlIHBhdGNoIGludHJvZHVjZXMgaW5wdXQgdmFsaWRhdGlvbiB3aXRoIG1pbi9tYXggdmFsdWVzIGZvciBgaW50ZXJ2YWwtcHJvYmUtdGltZS1tc2AgaW4gYm90aCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIGtlcm5lbCBjb2RlIChgbmV0L2NvcmUvbmVpZ2hib3VyLmNgKS4gVGhlIG1heGltdW0gdmFsdWUgc2VlbXMgdG8gYmUgY2FwcGVkIGF0IDI0IGhvdXJzICg4NjQwMDAwMCBtaWxsaXNlY29uZHMsIG9yIGBOVEJMX1BBUk1fTVNfTUFYYCkuIFRoaXMgaXMgZ29vZDsgZXhwbGljaXQgYm91bmRzIGFyZSBhbHdheXMgYSB3aW4uIFRoZSB1c2Ugb2YgYE5MQV9QT0xJQ1lfRlVMTF9SQU5HRWAgd2l0aCB0aGUgYG5sX250YmxfcGFybV9tc19yYW5nZWAgc3VnZ2VzdHMgdGhhdCBOZXRsaW5rIG1lc3NhZ2UgcGFyc2luZyBpcyBiZWluZyBtYWRlIG1vcmUgcm9idXN0LiBUaGF0IG1ha2VzIG1lIGZlZWwgYmV0dGVyIGFib3V0IGdlbmVyYWwgc2VjdXJpdHkuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyB3aXRoaW4gYG5laWdodGJsX2R1bXBfaW5mbygpYC4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggdXBkYXRlcyB0aGUgZHVtcGluZyBsb2dpYyB0byBtYW5hZ2UgZHVtcCBjb250aW51YXRpb24gYW5kIHJlc3RhcnQgc3RhdGVzIG1vcmUgZXhwbGljaXRseSB3aXRoIGBkZWZhdWx0X3NraXBgLiBUaGlzIGlzIGludGVyZXN0aW5nOyBkdW1wcyBjYW4gb2Z0ZW4gZXhwb3NlIHZ1bG5lcmFiaWxpdGllcy4gSSBhbHNvIHNlZSB0aGF0IHRoZXJlJ3MgYSByZWZpbmVtZW50IGluIHRoZSBpdGVyYXRpb24gbG9naWMsIHVzaW5nIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdWAgaW5zdGVhZCBvZiBgbGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JjdWAsIGFuZCB0aGF0IGJsYWNraG9sZS9udWxsIGRldmljZXMgYXJlIG5vdyBiZWluZyBleHBsaWNpdGx5IHNraXBwZWQuIEZpbmFsbHksIHRoZSBjb2RlIGFsc28gdXNlcyBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKClgIHRvIHNldCBhIG1heGltdW0gdmFsdWUgaW4gamlmZmllcyBmb3JtYXQuXG5cbk5vdywgdGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gZGlnIGRlZXBlci4gV2hpbGUgdGhlIGNoYW5nZXMgYXBwZWFyIHRvIGltcHJvdmUgY29kZSBjbGFyaXR5IGFuZCBwb3RlbnRpYWxseSBmaXggYSBzdWJ0bGUgYnVnIG9yIHR3bywgZHVtcCByb3V0aW5lcyBhcmUgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogY2VydGFpbiB0aGF0IHRoZXNlIGNoYW5nZXMgaGF2ZW4ndCBpbnRyb2R1Y2VkIGFueSBtZW1vcnkgbGVha3Mgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcyB3aXRoaW4gdGhlIGBuZWlnaHRibF9kdW1wX2luZm9gIGZ1bmN0aW9uIG9yIHJlbGF0ZWQgTmV0bGluayBwcm9jZXNzaW5nLiBBIE5ldGxpbmsgZHVtcCBtaWdodCBiZSBhIGdyZWF0IHZlY3RvciBmb3IgYSBzZWN1cml0eSBpc3N1ZSwgc28gSSdsbCBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gc2VlIGhvdyB0aGUgbmV0bGluayBkdW1wIHdvcmtzLiBJJ20gZ29pbmcgdG8gbG9vayBhdCBob3cgdGhpcyBsb2dpYyBpcyB1c2VkIGFuZCBob3cgdGhlIE5ldGxpbmsgbWVzc2FnZXMgYXJlIGJ1aWx0IGFuZCBwYXJzZWQuIFNwZWNpZmljYWxseSwgSSdsbCBiZSBsb29raW5nIGZvciB3aGVyZSBkYXRhIGlzIGJlaW5nIHJlYWQgYW5kIHdyaXR0ZW4gaW4gYG5laWdodGJsX2R1bXBfaW5mbygpYCBhbmQgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIHRoZXNlIGNoYW5nZXMgdG8gbWFrZSBhIHNvdW5kIGp1ZGdtZW50IGFib3V0IHRoZSBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzIwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDA6MDY6MzcuNjc5MTMxNjY5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTc1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNTc1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI1NzY6XFx0XFx0fVxcbjI1Nzc6XFx0XFxuMjU3ODpcXHRcXHRpZiAobmxtc2dfYXR0cmxlbihubGgsIHNpemVvZigqbmR0bSkpKSB7XFxuMjU3OTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJbnZhbGlkIGRhdGEgYWZ0ZXIgaGVhZGVyIGluIG5laWdoYm9yIHRhYmxlIGR1bXAgcmVxdWVzdFxcXCIpO1xcbjI1ODA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjU4MTpcXHRcXHR9XFxuMjU4MjpcXHRcXG4yNTgzOlxcdFxcdHJldHVybiAwO1xcbjI1ODQ6XFx0fVxcbjI1ODU6XFx0XFxuMjU4NjpcXHRzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuMjU4NzpcXHR7XFxuMjU4ODpcXHRcXHRjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IGNiLVxcdTAwM2VubGg7XFxuMjU4OTpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG4yNTkwOlxcdFxcdGludCBkZWZhdWx0X3NraXAgPSBjYi1cXHUwMDNlYXJnc1syXTtcXG4yNTkxOlxcdFxcdGludCBuZWlnaF9za2lwID0gY2ItXFx1MDAzZWFyZ3NbMV07XFxuMjU5MjpcXHRcXHRpbnQgZmFtaWx5LCB0aWR4LCBuaWR4ID0gMDtcXG4yNTkzOlxcdFxcdGludCB0Ymxfc2tpcCA9IGNiLVxcdTAwM2VhcmdzWzBdO1xcbjI1OTQ6XFx0XFx0c3RydWN0IG5laWdoX3RhYmxlICp0Ymw7XFxuMjU5NTpcXHRcXG4yNTk2OlxcdFxcdGlmIChjYi1cXHUwMDNlc3RyaWN0X2NoZWNrKSB7XFxuMjU5NzpcXHRcXHRcXHRpbnQgZXJyID0gbmVpZ2h0YmxfdmFsaWRfZHVtcF9pbmZvKG5saCwgY2ItXFx1MDAzZWV4dGFjayk7XFxuMjU5ODpcXHRcXG4yNTk5OlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjI2MDA6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yNjAxOlxcdFxcdH1cXG4yNjAyOlxcdFxcbjI2MDM6XFx0XFx0ZmFtaWx5ID0gKChzdHJ1Y3QgcnRnZW5tc2cgKilubG1zZ19kYXRhKG5saCkpLVxcdTAwM2VydGdlbl9mYW1pbHk7XFxuMjYwNDpcXHRcXG4yNjA1OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4yNjA2OlxcdFxcbjI2MDc6XFx0XFx0Zm9yICh0aWR4ID0gMDsgdGlkeCBcXHUwMDNjIE5FSUdIX05SX1RBQkxFUzsgdGlkeCsrKSB7XFxuMjYwODpcXHRcXHRcXHRzdHJ1Y3QgbmVpZ2hfcGFybXMgKnA7XFxuMjYwOTpcXHRcXG4yNjEwOlxcdFxcdFxcdHRibCA9IHJjdV9kZXJlZmVyZW5jZShuZWlnaF90YWJsZXNbdGlkeF0pO1xcbjI2MTE6XFx0XFx0XFx0aWYgKCF0YmwpXFxuMjYxMjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNjEzOlxcdFxcbjI2MTQ6XFx0XFx0XFx0aWYgKHRpZHggXFx1MDAzYyB0Ymxfc2tpcCB8fCAoZmFtaWx5IFxcdTAwMjZcXHUwMDI2IHRibC1cXHUwMDNlZmFtaWx5ICE9IGZhbWlseSkpXFxuMjYxNTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNjE2OlxcdFxcbjI2MTc6XFx0XFx0XFx0aWYgKCFkZWZhdWx0X3NraXAgXFx1MDAyNlxcdTAwMjZcXG4yNjE4OlxcdFxcdFxcdCAgICBuZWlnaHRibF9maWxsX2luZm8oc2tiLCB0YmwsIE5FVExJTktfQ0IoY2ItXFx1MDAzZXNrYikucG9ydGlkLFxcbjI2MTk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIG5saC1cXHUwMDNlbmxtc2dfc2VxLCBSVE1fTkVXTkVJR0hUQkwsXFxuMjYyMDpcXHRcXHRcXHRcXHRcXHQgICAgICAgTkxNX0ZfTVVMVEkpIFxcdTAwM2MgMClcXG4yNjIxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI2MjI6XFx0XFxuMjYyMzpcXHRcXHRcXHRkZWZhdWx0X3NraXAgPSAxO1xcbjI2MjQ6XFx0XFxuMjYyNTpcXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwLCBcXHUwMDI2dGJsLVxcdTAwM2VwYXJtc19saXN0LCBsaXN0KSB7XFxuMjYyNjpcXHRcXHRcXHRcXHRpZiAoIW5ldF9lcShuZWlnaF9wYXJtc19uZXQocCksIG5ldCkpXFxuMjYyNzpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNjI4OlxcdFxcbjI2Mjk6XFx0XFx0XFx0XFx0aWYgKCFwLVxcdTAwM2VkZXYgfHwgcC1cXHUwMDNlZGV2ID09IGJsYWNraG9sZV9uZXRkZXYpXFxuMjYzMDpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNjMxOlxcdFxcbjI2MzI6XFx0XFx0XFx0XFx0aWYgKG5pZHggXFx1MDAzYyBuZWlnaF9za2lwKVxcbjI2MzM6XFx0XFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbjI2MzQ6XFx0XFxuMjYzNTpcXHRcXHRcXHRcXHRpZiAobmVpZ2h0YmxfZmlsbF9wYXJhbV9pbmZvKHNrYiwgdGJsLCBwLFxcbjI2MzY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBORVRMSU5LX0NCKGNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4yNjM3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsXFxuMjYzODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFJUTV9ORVdORUlHSFRCTCxcXG4yNjM5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgTkxNX0ZfTVVMVEkpIFxcdTAwM2MgMClcXG4yNjQwOlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjI2NDE6XFx0XFx0XFx0bmV4dDpcXG4yNjQyOlxcdFxcdFxcdFxcdG5pZHgrKztcXG4yNjQzOlxcdFxcdFxcdH1cXG4yNjQ0OlxcdFxcbjI2NDU6XFx0XFx0XFx0bmVpZ2hfc2tpcCA9IDA7XFxuMjY0NjpcXHRcXHRcXHRuaWR4ID0gMDtcXG4yNjQ3OlxcdFxcdFxcdGRlZmF1bHRfc2tpcCA9IDA7XFxuMjY0ODpcXHRcXHR9XFxuMjY0OTpcXHRvdXQ6XFxuMjY1MDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yNjUxOlxcdFxcbjI2NTI6XFx0XFx0Y2ItXFx1MDAzZWFyZ3NbMF0gPSB0aWR4O1xcbjI2NTM6XFx0XFx0Y2ItXFx1MDAzZWFyZ3NbMV0gPSBuaWR4O1xcbjI2NTQ6XFx0XFx0Y2ItXFx1MDAzZWFyZ3NbMl0gPSBkZWZhdWx0X3NraXA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAwOjA2OjM3LjY3OTM2MDI1OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTQ1NTQ3MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTmVpZ2hib3IgVGFibGUgRmlsbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBuZWlnaGJvciB0YWJsZSBwb3B1bGF0aW9uIGxvZ2ljLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBjb3ZlcmluZyBhbGwgdGhlIGJhc2VzLiBCZWZvcmUgSSBnbyB0b28gZGVlcCwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBgbmVpZ2h0YmxfZmlsbF9pbmZvYCBhbmQgYG5laWdodGJsX2ZpbGxfcGFyYW1faW5mb2Agc3RydWN0dXJlcyBhbmQgYXNzb2NpYXRlZCBmdW5jdGlvbnMuIEkndmUgZ290IGEgZmVlbGluZyB0aGVyZSdzIHNvbWV0aGluZyByZWxldmFudCBpbiBlaXRoZXIgdGhvc2Ugc3RydWN0dXJlcyBvciBhc3NvY2lhdGVkIHByb2Nlc3NpbmcuIEl0J3MgYSBrZXkgc3BvdCBhbmQgdGhlcmUgYXJlIGxpa2VseSBwYXJhbWV0ZXJzIHRoYXQgaW5mbHVlbmNlIHRoZSBiZWhhdmlvci4gR29pbmcgb3ZlciB0aGUgcGFyYW1ldGVycyByZWxhdGVkIHRvIHRoZSBmaWxsaW5nIHByb2Nlc3Mgd2lsbCBnaXZlIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZpbGxpbmcgcHJvY2Vzcy4gQmV0dGVyIHRvIGNvbmZpcm0gZXZlcnl0aGluZyByZWxhdGVkIHRvIHRoZW0gYmVmb3JlIG1vdmluZyB0byBvdGhlciB0aGluZ3MuIEl0J3MgYSBnb29kIGFwcHJvYWNoIGZvciBtYWtpbmcgc3VyZSBhbGwgb2YgdGhlIGRpZmZlcmVudCBvcHRpb25zIGFyZSBjb3ZlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDE3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMDowNjo0Mi44MjQ5MTA1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDg1LFxuICBcIkxpbmVDb3VudFwiOiA4NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDg1OlxcdFxcdFxcdFxcdGNhc2UgTkRUUEFfTUNBU1RfUFJPQkVTOlxcbjI0ODY6XFx0XFx0XFx0XFx0XFx0TkVJR0hfVkFSX1NFVChwLCBNQ0FTVF9QUk9CRVMsXFxuMjQ4NzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBubGFfZ2V0X3UzMih0YnBbaV0pKTtcXG4yNDg4OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI0ODk6XFx0XFx0XFx0XFx0Y2FzZSBORFRQQV9NQ0FTVF9SRVBST0JFUzpcXG4yNDkwOlxcdFxcdFxcdFxcdFxcdE5FSUdIX1ZBUl9TRVQocCwgTUNBU1RfUkVQUk9CRVMsXFxuMjQ5MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBubGFfZ2V0X3UzMih0YnBbaV0pKTtcXG4yNDkyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI0OTM6XFx0XFx0XFx0XFx0Y2FzZSBORFRQQV9CQVNFX1JFQUNIQUJMRV9USU1FOlxcbjI0OTQ6XFx0XFx0XFx0XFx0XFx0TkVJR0hfVkFSX1NFVChwLCBCQVNFX1JFQUNIQUJMRV9USU1FLFxcbjI0OTU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgbmxhX2dldF9tc2Vjcyh0YnBbaV0pKTtcXG4yNDk2OlxcdFxcdFxcdFxcdFxcdC8qIHVwZGF0ZSByZWFjaGFibGVfdGltZSBhcyB3ZWxsLCBvdGhlcndpc2UsIHRoZSBjaGFuZ2Ugd2lsbFxcbjI0OTc6XFx0XFx0XFx0XFx0XFx0ICogb25seSBiZSBlZmZlY3RpdmUgYWZ0ZXIgdGhlIG5leHQgdGltZSBuZWlnaF9wZXJpb2RpY193b3JrXFxuMjQ5ODpcXHRcXHRcXHRcXHRcXHQgKiBkZWNpZGVzIHRvIHJlY29tcHV0ZSBpdCAoY2FuIGJlIG11bHRpcGxlIG1pbnV0ZXMpXFxuMjQ5OTpcXHRcXHRcXHRcXHRcXHQgKi9cXG4yNTAwOlxcdFxcdFxcdFxcdFxcdG5laWdoX3NldF9yZWFjaF90aW1lKHApO1xcbjI1MDE6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjUwMjpcXHRcXHRcXHRcXHRjYXNlIE5EVFBBX0dDX1NUQUxFVElNRTpcXG4yNTAzOlxcdFxcdFxcdFxcdFxcdE5FSUdIX1ZBUl9TRVQocCwgR0NfU1RBTEVUSU1FLFxcbjI1MDQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgbmxhX2dldF9tc2Vjcyh0YnBbaV0pKTtcXG4yNTA1OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI1MDY6XFx0XFx0XFx0XFx0Y2FzZSBORFRQQV9ERUxBWV9QUk9CRV9USU1FOlxcbjI1MDc6XFx0XFx0XFx0XFx0XFx0TkVJR0hfVkFSX1NFVChwLCBERUxBWV9QUk9CRV9USU1FLFxcbjI1MDg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgbmxhX2dldF9tc2Vjcyh0YnBbaV0pKTtcXG4yNTA5OlxcdFxcdFxcdFxcdFxcdGNhbGxfbmV0ZXZlbnRfbm90aWZpZXJzKE5FVEVWRU5UX0RFTEFZX1BST0JFX1RJTUVfVVBEQVRFLCBwKTtcXG4yNTEwOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI1MTE6XFx0XFx0XFx0XFx0Y2FzZSBORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TOlxcbjI1MTI6XFx0XFx0XFx0XFx0XFx0TkVJR0hfVkFSX1NFVChwLCBJTlRFUlZBTF9QUk9CRV9USU1FX01TLFxcbjI1MTM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgbmxhX2dldF9tc2Vjcyh0YnBbaV0pKTtcXG4yNTE0OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI1MTU6XFx0XFx0XFx0XFx0Y2FzZSBORFRQQV9SRVRSQU5TX1RJTUU6XFxuMjUxNjpcXHRcXHRcXHRcXHRcXHRORUlHSF9WQVJfU0VUKHAsIFJFVFJBTlNfVElNRSxcXG4yNTE3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIG5sYV9nZXRfbXNlY3ModGJwW2ldKSk7XFxuMjUxODpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yNTE5OlxcdFxcdFxcdFxcdGNhc2UgTkRUUEFfQU5ZQ0FTVF9ERUxBWTpcXG4yNTIwOlxcdFxcdFxcdFxcdFxcdE5FSUdIX1ZBUl9TRVQocCwgQU5ZQ0FTVF9ERUxBWSxcXG4yNTIxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIG5sYV9nZXRfbXNlY3ModGJwW2ldKSk7XFxuMjUyMjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yNTIzOlxcdFxcdFxcdFxcdGNhc2UgTkRUUEFfUFJPWFlfREVMQVk6XFxuMjUyNDpcXHRcXHRcXHRcXHRcXHRORUlHSF9WQVJfU0VUKHAsIFBST1hZX0RFTEFZLFxcbjI1MjU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgbmxhX2dldF9tc2Vjcyh0YnBbaV0pKTtcXG4yNTI2OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI1Mjc6XFx0XFx0XFx0XFx0Y2FzZSBORFRQQV9MT0NLVElNRTpcXG4yNTI4OlxcdFxcdFxcdFxcdFxcdE5FSUdIX1ZBUl9TRVQocCwgTE9DS1RJTUUsXFxuMjUyOTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBubGFfZ2V0X21zZWNzKHRicFtpXSkpO1xcbjI1MzA6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjUzMTpcXHRcXHRcXHRcXHR9XFxuMjUzMjpcXHRcXHRcXHR9XFxuMjUzMzpcXHRcXHR9XFxuMjUzNDpcXHRcXG4yNTM1OlxcdFxcdGVyciA9IC1FTk9FTlQ7XFxuMjUzNjpcXHRcXHRpZiAoKHRiW05EVEFfVEhSRVNIMV0gfHwgdGJbTkRUQV9USFJFU0gyXSB8fFxcbjI1Mzc6XFx0XFx0ICAgICB0YltORFRBX1RIUkVTSDNdIHx8IHRiW05EVEFfR0NfSU5URVJWQUxdKSBcXHUwMDI2XFx1MDAyNlxcbjI1Mzg6XFx0XFx0ICAgICFuZXRfZXEobmV0LCBcXHUwMDI2aW5pdF9uZXQpKVxcbjI1Mzk6XFx0XFx0XFx0Z290byBlcnJvdXRfdGJsX2xvY2s7XFxuMjU0MDpcXHRcXG4yNTQxOlxcdFxcdGlmICh0YltORFRBX1RIUkVTSDFdKVxcbjI1NDI6XFx0XFx0XFx0V1JJVEVfT05DRSh0YmwtXFx1MDAzZWdjX3RocmVzaDEsIG5sYV9nZXRfdTMyKHRiW05EVEFfVEhSRVNIMV0pKTtcXG4yNTQzOlxcdFxcbjI1NDQ6XFx0XFx0aWYgKHRiW05EVEFfVEhSRVNIMl0pXFxuMjU0NTpcXHRcXHRcXHRXUklURV9PTkNFKHRibC1cXHUwMDNlZ2NfdGhyZXNoMiwgbmxhX2dldF91MzIodGJbTkRUQV9USFJFU0gyXSkpO1xcbjI1NDY6XFx0XFxuMjU0NzpcXHRcXHRpZiAodGJbTkRUQV9USFJFU0gzXSlcXG4yNTQ4OlxcdFxcdFxcdFdSSVRFX09OQ0UodGJsLVxcdTAwM2VnY190aHJlc2gzLCBubGFfZ2V0X3UzMih0YltORFRBX1RIUkVTSDNdKSk7XFxuMjU0OTpcXHRcXG4yNTUwOlxcdFxcdGlmICh0YltORFRBX0dDX0lOVEVSVkFMXSlcXG4yNTUxOlxcdFxcdFxcdFdSSVRFX09OQ0UodGJsLVxcdTAwM2VnY19pbnRlcnZhbCwgbmxhX2dldF9tc2Vjcyh0YltORFRBX0dDX0lOVEVSVkFMXSkpO1xcbjI1NTI6XFx0XFxuMjU1MzpcXHRcXHRlcnIgPSAwO1xcbjI1NTQ6XFx0XFxuMjU1NTpcXHRlcnJvdXRfdGJsX2xvY2s6XFxuMjU1NjpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGJsLVxcdTAwM2Vsb2NrKTtcXG4yNTU3OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjI1NTg6XFx0ZXJyb3V0OlxcbjI1NTk6XFx0XFx0cmV0dXJuIGVycjtcXG4yNTYwOlxcdH1cXG4yNTYxOlxcdFxcbjI1NjI6XFx0c3RhdGljIGludCBuZWlnaHRibF92YWxpZF9kdW1wX2luZm8oY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuMjU2MzpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjI1NjQ6XFx0e1xcbjI1NjU6XFx0XFx0c3RydWN0IG5kdG1zZyAqbmR0bTtcXG4yNTY2OlxcdFxcbjI1Njc6XFx0XFx0bmR0bSA9IG5sbXNnX3BheWxvYWQobmxoLCBzaXplb2YoKm5kdG0pKTtcXG4yNTY4OlxcdFxcdGlmICghbmR0bSkge1xcbjI1Njk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBoZWFkZXIgZm9yIG5laWdoYm9yIHRhYmxlIGR1bXAgcmVxdWVzdFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMDowNjo0Mi44MjUxNjk0NzFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgzNzMxMDExNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgY29kZSwgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgbWF0ZXJpYWw6XG5cbioqRGlnZ2luZyBpbnRvIGBuZWlnaHRibF9maWxsX2luZm9gIGFuZCBgbmVpZ2h0YmxfZmlsbF9wYXJhbV9pbmZvYCoqXG5cblJpZ2h0LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgbGluZXMgMjIwMC0yMzYwLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBhbmQgYmVoYXZpb3JzIG9mIGBuZWlnaHRibF9maWxsX2luZm9gIGFuZCBgbmVpZ2h0YmxfZmlsbF9wYXJhbV9pbmZvYCBmdW5jdGlvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGUgdXNlIGNhc2VzIG9mIHRoZXNlIGZ1bmN0aW9ucz8gVGhleSBhcmUgb2Z0ZW4gdXNlZCBpbiBzaW1pbGFyIGNvbnRleHRzLCBidXQgdGhlaXIgZGlmZmVyZW5jZXMgYXJlIGltcG9ydGFudCB0byBub3RlLiBJcyB0aGlzIGNvZGUgc2VnbWVudCBjYWxsaW5nIHRoZSBmdW5jdGlvbnMgaW4gYSB3YXkgdGhhdCBzdWdnZXN0cyBhIHN1YnRsZSBkaWZmZXJlbmNlIGluIHRoZWlyIGV4ZWN1dGlvbj9cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCAnZmlsbCcgbWVhbnMgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCBhYm91dCBwb3B1bGF0aW5nIGEgZGF0YSBzdHJ1Y3R1cmUsIGluaXRpYWxpemluZyBpdCwgb3IgdXBkYXRpbmcgZXhpc3RpbmcgZW50cmllcz8gVGhpcyBpcyBjcml0aWNhbCBmb3Iga25vd2luZyBob3cgdGhlc2UgZnVuY3Rpb25zIGNvbnRyaWJ1dGUgdG8gdGhlIGxhcmdlciBwaWN0dXJlLiBJIHdpbGwgYmUgbG9va2luZyBvdXQgZm9yIGNvbW1vbiBwYXR0ZXJucyBhbmQgYXJndW1lbnRzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGV5IHdvcmsuXG5cbkknbGwgY2hlY2sgdGhlIGNhbGxzIHRvIHVuZGVyc3RhbmQgdGhlIGFyZ3VtZW50IHNpZ25hdHVyZXMuIEFyZSB0aGV5IHRha2luZyBzaW1pbGFyIGFyZ3VtZW50cywgb3IgZG8gdGhleSBleHBlY3QgZGlzdGluY3QgcGFyYW1ldGVycz8gQW5kIG9mIGNvdXJzZSwgSSBtdXN0IGtub3csIGFyZSB3ZSBoYW5kbGluZyBjYXNlcyB3aXRoIHZhcnlpbmcgbWVtb3J5IGFsbG9jYXRpb25zPyBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGFyYW1ldGVycyBhcmUgYmVpbmcgdXRpbGl6ZWQgc28gSSBrbm93IHdoZW4gdG8gYmUgY29uY2VybmVkIGFib3V0IG92ZXJmbG93IGVycm9ycy4gVGhpcyB3aWxsIGhlbHAgbWUgdG8gZGVjaWRlIHdoZXRoZXIgdGhpcyBpcyBhIHBsYWNlIHRvIGZvY3VzIG9uIGZ1cnRoZXIgb3B0aW1pemF0aW9uLCByZWZhY3RvcmluZywgb3Igc2ltcGx5IGNvbmZpcm1pbmcgY29ycmVjdCBiZWhhdmlvci5cblxuTW9yZSB0aGFuIGxpa2VseSwgSSdtIGV4cGVjdGluZyBgbmVpZ2h0YmxfZmlsbF9pbmZvYCB0byBkbyBhIG1vcmUgZ2VuZXJhbCBkYXRhIHBvcHVsYXRpb24sIGFuZCBgbmVpZ2h0YmxfZmlsbF9wYXJhbV9pbmZvYCB0byBmb2N1cyBvbiBhIHBhcnRpY3VsYXIgc2V0IG9mIHBhcmFtZXRlcnMgd2l0aGluIHRoZSBsYXJnZXIgc3RydWN0dXJlLiBUaGF0J3MgbXkgc3RhcnRpbmcgYXNzdW1wdGlvbiwgYnV0IHRoZSBhY3R1YWwgY29kZSB3aWxsIGRpY3RhdGUgaWYgdGhhdCdzIGFjY3VyYXRlLiBJJ20gZ29pbmcgdG8gbWFrZSBzdXJlIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHRvIHNlZSBpZiBpdCBpcyB1c2VkIGZvciBzb21ldGhpbmcgSSBoYXZlbid0IGNvbnNpZGVyZWQuXG5cbkknbSByZWFkeSB0byBkaXZlIGludG8gdGhlIGNvZGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MDgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAwOjA2OjQ1LjY2MjQ4MjM3N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDMwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmVpZ2hib3VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIwMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjIwMDpcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBORFRQQV9SRUZDTlQsIHJlZmNvdW50X3JlYWQoXFx1MDAyNnBhcm1zLVxcdTAwM2VyZWZjbnQpKSB8fFxcbjIyMDE6XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgTkRUUEFfUVVFVUVfTEVOQllURVMsXFxuMjIwMjpcXHRcXHRcXHRcXHRORUlHSF9WQVIocGFybXMsIFFVRVVFX0xFTl9CWVRFUykpIHx8XFxuMjIwMzpcXHRcXHQgICAgLyogYXBwcm94aW1hdGl2ZSB2YWx1ZSBmb3IgZGVwcmVjYXRlZCBRVUVVRV9MRU4gKGluIHBhY2tldHMpICovXFxuMjIwNDpcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBORFRQQV9RVUVVRV9MRU4sXFxuMjIwNTpcXHRcXHRcXHRcXHRORUlHSF9WQVIocGFybXMsIFFVRVVFX0xFTl9CWVRFUykgLyBTS0JfVFJVRVNJWkUoRVRIX0ZSQU1FX0xFTikpIHx8XFxuMjIwNjpcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBORFRQQV9QUk9YWV9RTEVOLCBORUlHSF9WQVIocGFybXMsIFBST1hZX1FMRU4pKSB8fFxcbjIyMDc6XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgTkRUUEFfQVBQX1BST0JFUywgTkVJR0hfVkFSKHBhcm1zLCBBUFBfUFJPQkVTKSkgfHxcXG4yMjA4OlxcdFxcdCAgICBubGFfcHV0X3UzMihza2IsIE5EVFBBX1VDQVNUX1BST0JFUyxcXG4yMjA5OlxcdFxcdFxcdFxcdE5FSUdIX1ZBUihwYXJtcywgVUNBU1RfUFJPQkVTKSkgfHxcXG4yMjEwOlxcdFxcdCAgICBubGFfcHV0X3UzMihza2IsIE5EVFBBX01DQVNUX1BST0JFUyxcXG4yMjExOlxcdFxcdFxcdFxcdE5FSUdIX1ZBUihwYXJtcywgTUNBU1RfUFJPQkVTKSkgfHxcXG4yMjEyOlxcdFxcdCAgICBubGFfcHV0X3UzMihza2IsIE5EVFBBX01DQVNUX1JFUFJPQkVTLFxcbjIyMTM6XFx0XFx0XFx0XFx0TkVJR0hfVkFSKHBhcm1zLCBNQ0FTVF9SRVBST0JFUykpIHx8XFxuMjIxNDpcXHRcXHQgICAgbmxhX3B1dF9tc2Vjcyhza2IsIE5EVFBBX1JFQUNIQUJMRV9USU1FLCBSRUFEX09OQ0UocGFybXMtXFx1MDAzZXJlYWNoYWJsZV90aW1lKSxcXG4yMjE1OlxcdFxcdFxcdFxcdCAgTkRUUEFfUEFEKSB8fFxcbjIyMTY6XFx0XFx0ICAgIG5sYV9wdXRfbXNlY3Moc2tiLCBORFRQQV9CQVNFX1JFQUNIQUJMRV9USU1FLFxcbjIyMTc6XFx0XFx0XFx0XFx0ICBORUlHSF9WQVIocGFybXMsIEJBU0VfUkVBQ0hBQkxFX1RJTUUpLCBORFRQQV9QQUQpIHx8XFxuMjIxODpcXHRcXHQgICAgbmxhX3B1dF9tc2Vjcyhza2IsIE5EVFBBX0dDX1NUQUxFVElNRSxcXG4yMjE5OlxcdFxcdFxcdFxcdCAgTkVJR0hfVkFSKHBhcm1zLCBHQ19TVEFMRVRJTUUpLCBORFRQQV9QQUQpIHx8XFxuMjIyMDpcXHRcXHQgICAgbmxhX3B1dF9tc2Vjcyhza2IsIE5EVFBBX0RFTEFZX1BST0JFX1RJTUUsXFxuMjIyMTpcXHRcXHRcXHRcXHQgIE5FSUdIX1ZBUihwYXJtcywgREVMQVlfUFJPQkVfVElNRSksIE5EVFBBX1BBRCkgfHxcXG4yMjIyOlxcdFxcdCAgICBubGFfcHV0X21zZWNzKHNrYiwgTkRUUEFfUkVUUkFOU19USU1FLFxcbjIyMjM6XFx0XFx0XFx0XFx0ICBORUlHSF9WQVIocGFybXMsIFJFVFJBTlNfVElNRSksIE5EVFBBX1BBRCkgfHxcXG4yMjI0OlxcdFxcdCAgICBubGFfcHV0X21zZWNzKHNrYiwgTkRUUEFfQU5ZQ0FTVF9ERUxBWSxcXG4yMjI1OlxcdFxcdFxcdFxcdCAgTkVJR0hfVkFSKHBhcm1zLCBBTllDQVNUX0RFTEFZKSwgTkRUUEFfUEFEKSB8fFxcbjIyMjY6XFx0XFx0ICAgIG5sYV9wdXRfbXNlY3Moc2tiLCBORFRQQV9QUk9YWV9ERUxBWSxcXG4yMjI3OlxcdFxcdFxcdFxcdCAgTkVJR0hfVkFSKHBhcm1zLCBQUk9YWV9ERUxBWSksIE5EVFBBX1BBRCkgfHxcXG4yMjI4OlxcdFxcdCAgICBubGFfcHV0X21zZWNzKHNrYiwgTkRUUEFfTE9DS1RJTUUsXFxuMjIyOTpcXHRcXHRcXHRcXHQgIE5FSUdIX1ZBUihwYXJtcywgTE9DS1RJTUUpLCBORFRQQV9QQUQpIHx8XFxuMjIzMDpcXHRcXHQgICAgbmxhX3B1dF9tc2Vjcyhza2IsIE5EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVMsXFxuMjIzMTpcXHRcXHRcXHRcXHQgIE5FSUdIX1ZBUihwYXJtcywgSU5URVJWQUxfUFJPQkVfVElNRV9NUyksIE5EVFBBX1BBRCkpXFxuMjIzMjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMjMzOlxcdFxcdHJldHVybiBubGFfbmVzdF9lbmQoc2tiLCBuZXN0KTtcXG4yMjM0OlxcdFxcbjIyMzU6XFx0bmxhX3B1dF9mYWlsdXJlOlxcbjIyMzY6XFx0XFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgbmVzdCk7XFxuMjIzNzpcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbjIyMzg6XFx0fVxcbjIyMzk6XFx0XFxuMjI0MDpcXHRzdGF0aWMgaW50IG5laWdodGJsX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCxcXG4yMjQxOlxcdFxcdFxcdFxcdCAgICAgIHUzMiBwaWQsIHUzMiBzZXEsIGludCB0eXBlLCBpbnQgZmxhZ3MpXFxuMjI0MjpcXHR7XFxuMjI0MzpcXHRcXHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcXG4yMjQ0OlxcdFxcdHN0cnVjdCBuZHRtc2cgKm5kdG1zZztcXG4yMjQ1OlxcdFxcbjIyNDY6XFx0XFx0bmxoID0gbmxtc2dfcHV0KHNrYiwgcGlkLCBzZXEsIHR5cGUsIHNpemVvZigqbmR0bXNnKSwgZmxhZ3MpO1xcbjIyNDc6XFx0XFx0aWYgKG5saCA9PSBOVUxMKVxcbjIyNDg6XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4yMjQ5OlxcdFxcbjIyNTA6XFx0XFx0bmR0bXNnID0gbmxtc2dfZGF0YShubGgpO1xcbjIyNTE6XFx0XFx0bmR0bXNnLVxcdTAwM2VuZHRtX2ZhbWlseSA9IHRibC1cXHUwMDNlZmFtaWx5O1xcbjIyNTI6XFx0XFx0bmR0bXNnLVxcdTAwM2VuZHRtX3BhZDEgICA9IDA7XFxuMjI1MzpcXHRcXHRuZHRtc2ctXFx1MDAzZW5kdG1fcGFkMiAgID0gMDtcXG4yMjU0OlxcdFxcbjIyNTU6XFx0XFx0aWYgKG5sYV9wdXRfc3RyaW5nKHNrYiwgTkRUQV9OQU1FLCB0YmwtXFx1MDAzZWlkKSB8fFxcbjIyNTY6XFx0XFx0ICAgIG5sYV9wdXRfbXNlY3Moc2tiLCBORFRBX0dDX0lOVEVSVkFMLCBSRUFEX09OQ0UodGJsLVxcdTAwM2VnY19pbnRlcnZhbCksXFxuMjI1NzpcXHRcXHRcXHRcXHQgIE5EVEFfUEFEKSB8fFxcbjIyNTg6XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgTkRUQV9USFJFU0gxLCBSRUFEX09OQ0UodGJsLVxcdTAwM2VnY190aHJlc2gxKSkgfHxcXG4yMjU5OlxcdFxcdCAgICBubGFfcHV0X3UzMihza2IsIE5EVEFfVEhSRVNIMiwgUkVBRF9PTkNFKHRibC1cXHUwMDNlZ2NfdGhyZXNoMikpIHx8XFxuMjI2MDpcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBORFRBX1RIUkVTSDMsIFJFQURfT05DRSh0YmwtXFx1MDAzZWdjX3RocmVzaDMpKSlcXG4yMjYxOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIyNjI6XFx0XFx0e1xcbjIyNjM6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzO1xcbjIyNjQ6XFx0XFx0XFx0bG9uZyBmbHVzaF9kZWx0YSA9IG5vdyAtIFJFQURfT05DRSh0YmwtXFx1MDAzZWxhc3RfZmx1c2gpO1xcbjIyNjU6XFx0XFx0XFx0bG9uZyByYW5kX2RlbHRhID0gbm93IC0gUkVBRF9PTkNFKHRibC1cXHUwMDNlbGFzdF9yYW5kKTtcXG4yMjY2OlxcdFxcdFxcdHN0cnVjdCBuZWlnaF9oYXNoX3RhYmxlICpuaHQ7XFxuMjI2NzpcXHRcXHRcXHRzdHJ1Y3QgbmR0X2NvbmZpZyBuZGMgPSB7XFxuMjI2ODpcXHRcXHRcXHRcXHQubmR0Y19rZXlfbGVuXFx0XFx0PSB0YmwtXFx1MDAzZWtleV9sZW4sXFxuMjI2OTpcXHRcXHRcXHRcXHQubmR0Y19lbnRyeV9zaXplXFx0PSB0YmwtXFx1MDAzZWVudHJ5X3NpemUsXFxuMjI3MDpcXHRcXHRcXHRcXHQubmR0Y19lbnRyaWVzXFx0XFx0PSBhdG9taWNfcmVhZChcXHUwMDI2dGJsLVxcdTAwM2VlbnRyaWVzKSxcXG4yMjcxOlxcdFxcdFxcdFxcdC5uZHRjX2xhc3RfZmx1c2hcXHQ9IGppZmZpZXNfdG9fbXNlY3MoZmx1c2hfZGVsdGEpLFxcbjIyNzI6XFx0XFx0XFx0XFx0Lm5kdGNfbGFzdF9yYW5kXFx0XFx0PSBqaWZmaWVzX3RvX21zZWNzKHJhbmRfZGVsdGEpLFxcbjIyNzM6XFx0XFx0XFx0XFx0Lm5kdGNfcHJveHlfcWxlblxcdD0gUkVBRF9PTkNFKHRibC1cXHUwMDNlcHJveHlfcXVldWUucWxlbiksXFxuMjI3NDpcXHRcXHRcXHR9O1xcbjIyNzU6XFx0XFxuMjI3NjpcXHRcXHRcXHRuaHQgPSByY3VfZGVyZWZlcmVuY2UodGJsLVxcdTAwM2VuaHQpO1xcbjIyNzc6XFx0XFx0XFx0bmRjLm5kdGNfaGFzaF9ybmQgPSBuaHQtXFx1MDAzZWhhc2hfcm5kWzBdO1xcbjIyNzg6XFx0XFx0XFx0bmRjLm5kdGNfaGFzaF9tYXNrID0gKCgxIFxcdTAwM2NcXHUwMDNjIG5odC1cXHUwMDNlaGFzaF9zaGlmdCkgLSAxKTtcXG4yMjc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMDowNjo0NS42NjI3MjY4MTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzU5NjQ2ODMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogQSBRdWljayBMb29rKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLCBJIG5lZWQgdG8gYmUgc3VyZSBldmVyeXRoaW5nIGlzIHNvbGlkLiBGaXJzdCwgaXQgbG9va3MgbGlrZSB0aGVyZSBhcmUgYSBmZXcga2V5IGFyZWFzIG9mIGZvY3VzOlxuXG4xLiAgKipOZXRsaW5rIFBvbGljeSBVcGRhdGUqKjogVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UuIFRoZSBgW05EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNdYCBwYXJhbWV0ZXIgaW4gYG5sX250YmxfcGFybV9wb2xpY3lgIGlzIGdldHRpbmcgYSBkZWZpbmVkIHJhbmdlIChtaW49MSwgbWF4PU5UQkxfUEFSTV9NU19NQVgpIHVzaW5nIGBOTEFfUE9MSUNZX0ZVTExfUkFOR0VgLCB3aGljaCBpcyBnb29kIHByYWN0aWNlLlxuXG4yLiAgKipTeXNjdGwgVXBkYXRlKio6ICBUaGUgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAgZnVuY3Rpb24gaXMgY29ycmVjdGx5IHNldHRpbmcgYW4gdXBwZXIgYm91bmQgb24gdGhlIHN5c2N0bCB2YWx1ZSB1c2luZyBgdG1wLmV4dHJhMiA9IFx1MDAyNm1heDtgLiBNYWtlcyBzZW5zZS4gRW5zdXJpbmcgY29udHJvbGxlZCB1cHBlciBib3VuZHMgaXMga2V5IGZvciBzdGFiaWxpdHkgYW5kIHNlY3VyaXR5LlxuXG4zLiAgKipEdW1wIENvbnRpbnVhdGlvbiBCdWcgRml4Kio6ICBUaGlzIGlzIHRoZSBtb3N0IGludGVyZXN0aW5nIHBhcnQuIEl0IGFwcGVhcnMgdGhlcmUgd2FzIGEgYnVnIGluIGhvdyBgbmVpZ2h0YmxfZHVtcF9pbmZvYCBoYW5kbGVkIGR1bXBpbmcgdGhlIG5laWdoYm9yIHRhYmxlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGNvbnRpbnVhdGlvbiAoZS5nLiwgd2hlbiB0aGUgYnVmZmVyIGZpbGxzIHVwKS4gUHJldmlvdXNseSwgYGNiLVx1MDAzZWFyZ3NbMF1gIHRyYWNrZWQgYHRpZHhgIGFuZCBgY2ItXHUwMDNlYXJnc1sxXWAgdHJhY2tlZCBgbmVpZ2hfc2tpcGAsIGJ1dCBpZiB0aGUgYnVmZmVyIHJhbiBvdXQgaW4gdGhlIG1pZGRsZSBvZiBwYXJtc19saXN0LCBpdCB3b3VsZCByZWR1bXAgaW5mbyBpZiBub3QgcHJvcGVybHkgc2tpcHBlZC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYGRlZmF1bHRfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMl07YCB0byBjb3JyZWN0bHkgdHJhY2sgYW5kIHNraXAgdGhlIHRhYmxlIGRlZmF1bHQgaW5mbywgcGFydGljdWxhcmx5IGFmdGVyIHRoZSBidWZmZXIgZmlsbHMuIEl0IGFsc28gZW5zdXJlcyBjbGVhbiBpdGVyYXRpb24gb2YgYHBhcm1zX2xpc3RgIGFuZCBza2lwcyBzcGVjaWFsIGNhc2VzIGxpa2UgYGJsYWNraG9sZV9uZXRkZXZgIG9yIE5VTEwgZGV2aWNlcy5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IGFuZCB0aGluayBhYm91dCBhbnkgcG90ZW50aWFsIGlzc3VlczpcblxuKiAgICoqVW5pbml0aWFsaXplZCBNZW1vcnkgUmVhZHMgb3IgTGVha3MqKjogIEV2ZXJ5dGhpbmcgc2VlbXMgdG8gYmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkuIFRoZSB2YXJpYWJsZXMgaW4gYG5laWdodGJsX2R1bXBfaW5mb2AgYXJlIGFsbCBpbml0aWFsaXplZCBhbmQgdGhlIGBjYi1cdTAwM2VhcmdzYCBhcnJheSBpcyB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBuZXRsaW5rIGR1bXAgc3Vic3lzdGVtLCBhcyBpdCBzaG91bGQgYmUuIFRoZSBgbWluYCBhbmQgYG1heGAgdmFyaWFibGVzIGluIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgdGhlIGBubF9udGJsX3Bhcm1fbXNfcmFuZ2VgIHN0cnVjdCBpcyBzdGF0aWNhbGx5IGluaXRpYWxpemVkLiBHb29kLCBnb29kLCBnb29kLlxuKiAgICoqQnVmZmVyIE92ZXJydW5zL1VuaW5pdGlhbGl6ZWQgU3RydWN0dXJlcy9QYWRkaW5nKio6ICBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGZpZWxkcyBvciBzdHJ1Y3RzIHRoYXQgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZSBjb25zdHJ1Y3Rpb24gb2YgbmV0bGluayBtZXNzYWdlcyBpbiBgbmVpZ2h0YmxfZmlsbF9pbmZvYCBhbmQgYG5laWdodGJsX2ZpbGxfcGFyYW1faW5mb2AgcmVtYWluIHVuY2hhbmdlZCwgZXhjZXB0IGZvciB0aGUgaXRlcmF0aW9uIGFuZCBza2lwIGhhbmRsaW5nLiBObyByZWQgZmxhZ3MgaGVyZS5cblxuQWxyaWdodCwgc28gdGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIGNoZWNrIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSB2dWxuZXJhYmlsaXR5IGluIHRlcm1zIG9mIHRoZSBrZXJuZWwgc2FuaXRpemVycy4gU28sIGRvZXMgYW55dGhpbmcgaGVyZSBuZWVkIEtNU0FOIG9yIGlzIGl0IGNvdmVyZWQgYnkgS0FTQU4/XG5cbiogICAqKktBU0FOIC8gTE9DS0RFUCAvIFVCU0FOIENvdmVyYWdlKio6IEtBU0FOIGFscmVhZHkgY292ZXJzIFJDVSBsaXN0IHRyYXZlcnNhbHMgYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIFNpbmNlIHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgb3IgdW5pbml0aWFsaXplZCBkYXRhIGFjY2VzcyByaXNrcywgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSBoZXJlLiBUaGlzIGlzIGEgY3J1Y2lhbCBkaXN0aW5jdGlvbi5cblxuKipUaGVyZWZvcmUsIE5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlLioqXG5cbk5vdywgbGV0J3MgZG8gYSBmaW5hbCBjaGVjazpcblxuKiAgIEknbGwgYmUgdXNpbmcgYHNldC1yZXN1bHRzIHRvb2xgIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG4qICAgYE5lZWRzS01TQU5gOiBGYWxzZS5cbiogICBgS01TQU5SZWFzb25pbmdgOiBEZXRhaWxlZCBhYm92ZSwgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eS5cblxuVGhpcyBhbGwgbG9va3MgZ29vZCB0byBtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwOTQsIk91dHB1dFRva2VucyI6MTgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDA6MDY6NTMuMjU5MTk4MjIxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gcmFuZ2UgY2hlY2tzIChtaW4vbWF4KSBmb3IgdGhlIG5laWdoYm9yIHRhYmxlIGludGVydmFsX3Byb2JlX3RpbWVfbXMgcGFyYW1ldGVyIHZpYSBuZXRsaW5rIHBvbGljeSBhbmQgc3lzY3RsLCBhbmQgZml4ZXMgbmV0bGluayBkdW1wIHJlc3VtcHRpb24gc3RhdGUgdHJhY2tpbmcgaW4gbmVpZ2h0YmxfZHVtcF9pbmZvKCkgdXNpbmcgY2ItXFx1MDAzZWFyZ3NbMl0gKHdoaWNoIGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIG5ldGxpbmsgZHVtcCBzdWJzeXN0ZW0pLiBBbGwgbG9jYWwgdmFyaWFibGVzIChtaW4sIG1heCwgZGVmYXVsdF9za2lwLCBuaWR4KSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgbm8gbmV3IGRhdGEgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBuZXRsaW5rIGR1bXAgaXRlcmF0aW9uIChzdWNoIGFzIGxpc3QgdHJhdmVyc2FsIG9yIGJvdW5kcyBlcnJvcnMpIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiByYW5nZSBjaGVja3MgKG1pbi9tYXgpIGZvciB0aGUgbmVpZ2hib3IgdGFibGUgaW50ZXJ2YWxfcHJvYmVfdGltZV9tcyBwYXJhbWV0ZXIgdmlhIG5ldGxpbmsgcG9saWN5IGFuZCBzeXNjdGwsIGFuZCBmaXhlcyBuZXRsaW5rIGR1bXAgcmVzdW1wdGlvbiBzdGF0ZSB0cmFja2luZyBpbiBuZWlnaHRibF9kdW1wX2luZm8oKSB1c2luZyBjYi1cXHUwMDNlYXJnc1syXSAod2hpY2ggaXMgemVyby1pbml0aWFsaXplZCBieSB0aGUgbmV0bGluayBkdW1wIHN1YnN5c3RlbSkuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKG1pbiwgbWF4LCBkZWZhdWx0X3NraXAsIG5pZHgpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGFuZCBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UgYXJlIGludHJvZHVjZWQuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIG5ldGxpbmsgZHVtcCBpdGVyYXRpb24gKHN1Y2ggYXMgbGlzdCB0cmF2ZXJzYWwgb3IgYm91bmRzIGVycm9ycykgYXJlIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqt4zk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 23:45:00 +0000 UTC FinishedAt: 2026-09-10 00:06:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET", "SYSCTL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET", "SYSCTL" ], "series_id": "ad343baa-74b0-440c-8d16-36151e5556e1" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "neightbl_dump_info", "neightbl_set", "neigh_proc_dointvec_ms_jiffies_positive" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtTWVNDVEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZWlnaHRibF9kdW1wX2luZm8mIzM0OywKICAgICYjMzQ7bmVpZ2h0Ymxfc2V0JiMzNDssCiAgICAmIzM0O25laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiByYW5nZSBjaGVja3MgKG1pbi9tYXgpIGZvciB0aGUgbmVpZ2hib3IgdGFibGUgaW50ZXJ2YWxfcHJvYmVfdGltZV9tcyBwYXJhbWV0ZXIgdmlhIG5ldGxpbmsgcG9saWN5IGFuZCBzeXNjdGwsIGFuZCBmaXhlcyBuZXRsaW5rIGR1bXAgcmVzdW1wdGlvbiBzdGF0ZSB0cmFja2luZyBpbiBuZWlnaHRibF9kdW1wX2luZm8oKSB1c2luZyBjYi1cdTAwM2VhcmdzWzJdICh3aGljaCBpcyB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBuZXRsaW5rIGR1bXAgc3Vic3lzdGVtKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyAobWluLCBtYXgsIGRlZmF1bHRfc2tpcCwgbmlkeCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gbmV0bGluayBkdW1wIGl0ZXJhdGlvbiAoc3VjaCBhcyBsaXN0IHRyYXZlcnNhbCBvciBib3VuZHMgZXJyb3JzKSBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBpbiBuZXQvY29yZS9uZWlnaGJvdXIuYzogaXQgdXBkYXRlcyB0aGUgbmV0bGluayBhdHRyaWJ1dGUgcG9saWN5IGFuZCBwcm9jIHN5c2N0bCBoYW5kbGVyIHRvIGVuZm9yY2UgdXBwZXIgYm91bmRzIG9uIGludGVydmFsX3Byb2JlX3RpbWVfbXMsIGFuZCByZWZhY3RvcnMvZml4ZXMgdGhlIG5laWdoYm9yIHRhYmxlIGR1bXAgcGFnaW5hdGlvbiBsb2dpYyBpbiBuZWlnaHRibF9kdW1wX2luZm8uIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJ0bmV0bGluayAoUlRNX0dFVE5FSUdIVEJMIC8gUlRNX1NFVE5FSUdIVEJMKSBhbmQgcHJvY2ZzIHN5c2N0bC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMDowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDJjYjMxMTVhNGY4MDYzMDIzMjMxY2E3ZjZkZGE5ZDhiOGM0OWZlYTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwMDowNTo0OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbmVpZ2gueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1uZWlnaC55YW1sXG5pbmRleCAwZjQ2ZWYzMTM1OTA1Li5jOGU1NWM5OGQ1NjQ5IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LW5laWdoLnlhbWxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1uZWlnaC55YW1sXG5AQCAtMzQxLDYgJiM0MzszNDEsOSBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBpbnRlcnZhbC1wcm9iZS10aW1lLW1zXG4gICAgICAgICB0eXBlOiB1NjRcbiYjNDM7ICAgICAgICBjaGVja3M6XG4mIzQzOyAgICAgICAgICBtaW46IDFcbiYjNDM7ICAgICAgICAgIG1heDogODY0MDAwMDBcbiBcbiBvcGVyYXRpb25zOlxuICAgZW51bS1tb2RlbDogZGlyZWN0aW9uYWxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG5pbmRleCAyMDhmNDY5NjdlZTU5Li5iMDU4MjllNDRkOGZjIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG5AQCAtMjQ4LDcgJiM0MzsyNDgsNyBAQCBuZWlnaC9kZWZhdWx0L3VucmVzX3FsZW4gLSBJTlRFR0VSXG4gXG4gbmVpZ2gvZGVmYXVsdC9pbnRlcnZhbF9wcm9iZV90aW1lX21zIC0gSU5URUdFUlxuIFx0VGhlIHByb2JlIGludGVydmFsIGZvciBuZWlnaGJvciBlbnRyaWVzIHdpdGggTlRGX01BTkFHRUQgZmxhZyxcbi1cdHRoZSBtaW4gdmFsdWUgaXMgMS5cbiYjNDM7XHR0aGUgbWluIHZhbHVlIGlzIDEsIGFuZCB0aGUgbWF4IHZhbHVlIGlzIDg2NDAwMDAwICgxIGRheSkuXG4gXG4gXHREZWZhdWx0OiA1MDAwXG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuY1xuaW5kZXggMTM0OWMwZWVkYjY0Mi4uNzQ0ODMyMGY3YWQ1MiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZWlnaGJvdXIuY1xuQEAgLTIzNTksNiAmIzQzOzIzNTksMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX25laWdodGJsX3BvbGljeVtORFRBX01BWCYjNDM7MV0gPSB7XG4gXHRbTkRUQV9QQVJNU11cdFx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuIH07XG4gXG4mIzQzOyNkZWZpbmUgTlRCTF9QQVJNX01TX01BWFx0KDI0ICogNjAgKiA2MCAqIE1TRUNfUEVSX1NFQylcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIG5sX250YmxfcGFybV9tc19yYW5nZSA9IHtcbiYjNDM7XHQubWluID0gMSxcbiYjNDM7XHQubWF4ID0gTlRCTF9QQVJNX01TX01BWCxcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYJiM0MzsxXSA9IHtcbiBcdFtORFRQQV9JRklOREVYXVx0XHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbiBcdFtORFRQQV9RVUVVRV9MRU5dXHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbkBAIC0yMzc1LDcgJiM0MzsyMzgyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYJiM0MzsxXSA9IHtcbiBcdFtORFRQQV9BTllDQVNUX0RFTEFZXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXG4gXHRbTkRUUEFfUFJPWFlfREVMQVldXHRcdD0geyAudHlwZSA9IE5MQV9VNjQgfSxcbiBcdFtORFRQQV9MT0NLVElNRV1cdFx0PSB7IC50eXBlID0gTkxBX1U2NCB9LFxuLVx0W05EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNdXHQ9IHsgLnR5cGUgPSBOTEFfVTY0LCAubWluID0gMSB9LFxuJiM0MztcdFtORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TXVx0PSBOTEFfUE9MSUNZX0ZVTExfUkFOR0UoTkxBX1U2NCxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx1MDAyNm5sX250YmxfcGFybV9tc19yYW5nZSksXG4gfTtcbiBcbiBzdGF0aWMgaW50IG5laWdodGJsX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbkBAIC0yNTc5LDkgJiM0MzsyNTg3LDEwIEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiB7XG4gXHRjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IGNiLVx1MDAzZW5saDtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4mIzQzO1x0aW50IGRlZmF1bHRfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMl07XG4mIzQzO1x0aW50IG5laWdoX3NraXAgPSBjYi1cdTAwM2VhcmdzWzFdO1xuIFx0aW50IGZhbWlseSwgdGlkeCwgbmlkeCA9IDA7XG4gXHRpbnQgdGJsX3NraXAgPSBjYi1cdTAwM2VhcmdzWzBdO1xuLVx0aW50IG5laWdoX3NraXAgPSBjYi1cdTAwM2VhcmdzWzFdO1xuIFx0c3RydWN0IG5laWdoX3RhYmxlICp0Ymw7XG4gXG4gXHRpZiAoY2ItXHUwMDNlc3RyaWN0X2NoZWNrKSB7XG5AQCAtMjYwNSwxNyAmIzQzOzI2MTQsMjEgQEAgc3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0XHRpZiAodGlkeCBcdTAwM2MgdGJsX3NraXAgfHwgKGZhbWlseSBcdTAwMjZcdTAwMjYgdGJsLVx1MDAzZWZhbWlseSAhPSBmYW1pbHkpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRpZiAobmVpZ2h0YmxfZmlsbF9pbmZvKHNrYiwgdGJsLCBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuJiM0MztcdFx0aWYgKCFkZWZhdWx0X3NraXAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgbmVpZ2h0YmxfZmlsbF9pbmZvKHNrYiwgdGJsLCBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuIFx0XHRcdFx0ICAgICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIFJUTV9ORVdORUlHSFRCTCxcbiBcdFx0XHRcdCAgICAgICBOTE1fRl9NVUxUSSkgXHUwMDNjIDApXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdG5pZHggPSAwO1xuLVx0XHRwID0gbGlzdF9uZXh0X2VudHJ5KFx1MDAyNnRibC1cdTAwM2VwYXJtcywgbGlzdCk7XG4tXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbV9yY3UocCwgXHUwMDI2dGJsLVx1MDAzZXBhcm1zX2xpc3QsIGxpc3QpIHtcbiYjNDM7XHRcdGRlZmF1bHRfc2tpcCA9IDE7XG4mIzQzO1xuJiM0MztcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgXHUwMDI2dGJsLVx1MDAzZXBhcm1zX2xpc3QsIGxpc3QpIHtcbiBcdFx0XHRpZiAoIW5ldF9lcShuZWlnaF9wYXJtc19uZXQocCksIG5ldCkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiYjNDM7XHRcdFx0aWYgKCFwLVx1MDAzZWRldiB8fCBwLVx1MDAzZWRldiA9PSBibGFja2hvbGVfbmV0ZGV2KVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiBcdFx0XHRpZiAobmlkeCBcdTAwM2MgbmVpZ2hfc2tpcClcbiBcdFx0XHRcdGdvdG8gbmV4dDtcbiBcbkBAIC0yNjMwLDEyICYjNDM7MjY0MywxNSBAQCBzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdH1cbiBcbiBcdFx0bmVpZ2hfc2tpcCA9IDA7XG4mIzQzO1x0XHRuaWR4ID0gMDtcbiYjNDM7XHRcdGRlZmF1bHRfc2tpcCA9IDA7XG4gXHR9XG4gb3V0OlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRjYi1cdTAwM2VhcmdzWzBdID0gdGlkeDtcbiBcdGNiLVx1MDAzZWFyZ3NbMV0gPSBuaWR4O1xuJiM0MztcdGNiLVx1MDAzZWFyZ3NbMl0gPSBkZWZhdWx0X3NraXA7XG4gXG4gXHRyZXR1cm4gc2tiLVx1MDAzZWxlbjtcbiB9XG5AQCAtMzY2OSwxMiAmIzQzOzM2ODUsMTMgQEAgc3RhdGljIGludCBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLFxuIFx0XHRcdFx0XHRcdCAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4ge1xuIFx0c3RydWN0IGN0bF90YWJsZSB0bXAgPSAqY3RsO1xuLVx0aW50IHJldDtcbiYjNDM7XHRpbnQgcmV0LCBtaW4sIG1heDtcbiBcbi1cdGludCBtaW4gPSBtc2Vjc190b19qaWZmaWVzKDEpO1xuJiM0MztcdG1pbiA9IG1zZWNzX3RvX2ppZmZpZXMoMSk7XG4mIzQzO1x0bWF4ID0gbXNlY3NfdG9famlmZmllcyhOVEJMX1BBUk1fTVNfTUFYKTtcbiBcbiBcdHRtcC5leHRyYTEgPSBcdTAwMjZtaW47XG4tXHR0bXAuZXh0cmEyID0gTlVMTDtcbiYjNDM7XHR0bXAuZXh0cmEyID0gXHUwMDI2bWF4O1xuIFxuIFx0cmV0ID0gcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heChcdTAwMjZ0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xuIFx0bmVpZ2hfcHJvY191cGRhdGUoY3RsLCB3cml0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDA6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDssCiAgICAmIzM0O1NZU0NUTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25laWdodGJsX2R1bXBfaW5mbyYjMzQ7LAogICAgJiMzNDtuZWlnaHRibF9zZXQmIzM0OywKICAgICYjMzQ7bmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgaW4gbmV0L2NvcmUvbmVpZ2hib3VyLmM6IGl0IHVwZGF0ZXMgdGhlIG5ldGxpbmsgYXR0cmlidXRlIHBvbGljeSBhbmQgcHJvYyBzeXNjdGwgaGFuZGxlciB0byBlbmZvcmNlIHVwcGVyIGJvdW5kcyBvbiBpbnRlcnZhbF9wcm9iZV90aW1lX21zLCBhbmQgcmVmYWN0b3JzL2ZpeGVzIHRoZSBuZWlnaGJvciB0YWJsZSBkdW1wIHBhZ2luYXRpb24gbG9naWMgaW4gbmVpZ2h0YmxfZHVtcF9pbmZvLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBydG5ldGxpbmsgKFJUTV9HRVRORUlHSFRCTCAvIFJUTV9TRVRORUlHSFRCTCkgYW5kIHByb2NmcyBzeXNjdGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyY2IzMTE1YTRmODA2MzAyMzIzMWNhN2Y2ZGRhOWQ4YjhjNDlmZWE2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMDA6MDU6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbmVpZ2gueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1uZWlnaC55YW1sCmluZGV4IDBmNDZlZjMxMzU5MDUuLmM4ZTU1Yzk4ZDU2NDkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1uZWlnaC55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1uZWlnaC55YW1sCkBAIC0zNDEsNiAmIzQzOzM0MSw5IEBAIGF0dHJpYnV0ZS1zZXRzOgogICAgICAgLQogICAgICAgICBuYW1lOiBpbnRlcnZhbC1wcm9iZS10aW1lLW1zCiAgICAgICAgIHR5cGU6IHU2NAomIzQzOyAgICAgICAgY2hlY2tzOgomIzQzOyAgICAgICAgICBtaW46IDEKJiM0MzsgICAgICAgICAgbWF4OiA4NjQwMDAwMAogCiBvcGVyYXRpb25zOgogICBlbnVtLW1vZGVsOiBkaXJlY3Rpb25hbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdAppbmRleCAyMDhmNDY5NjdlZTU5Li5iMDU4MjllNDRkOGZjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdApAQCAtMjQ4LDcgJiM0MzsyNDgsNyBAQCBuZWlnaC9kZWZhdWx0L3VucmVzX3FsZW4gLSBJTlRFR0VSCiAKIG5laWdoL2RlZmF1bHQvaW50ZXJ2YWxfcHJvYmVfdGltZV9tcyAtIElOVEVHRVIKIAlUaGUgcHJvYmUgaW50ZXJ2YWwgZm9yIG5laWdoYm9yIGVudHJpZXMgd2l0aCBOVEZfTUFOQUdFRCBmbGFnLAotCXRoZSBtaW4gdmFsdWUgaXMgMS4KJiM0MzsJdGhlIG1pbiB2YWx1ZSBpcyAxLCBhbmQgdGhlIG1heCB2YWx1ZSBpcyA4NjQwMDAwMCAoMSBkYXkpLgogCiAJRGVmYXVsdDogNTAwMAogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZWlnaGJvdXIuYyBiL25ldC9jb3JlL25laWdoYm91ci5jCmluZGV4IDEzNDljMGVlZGI2NDIuLjc0NDgzMjBmN2FkNTIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25laWdoYm91ci5jCkBAIC0yMzU5LDYgJiM0MzsyMzU5LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubF9uZWlnaHRibF9wb2xpY3lbTkRUQV9NQVgmIzQzOzFdID0gewogCVtORFRBX1BBUk1TXQkJPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAogfTsKIAomIzQzOyNkZWZpbmUgTlRCTF9QQVJNX01TX01BWAkoMjQgKiA2MCAqIDYwICogTVNFQ19QRVJfU0VDKQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIG5sX250YmxfcGFybV9tc19yYW5nZSA9IHsKJiM0MzsJLm1pbiA9IDEsCiYjNDM7CS5tYXggPSBOVEJMX1BBUk1fTVNfTUFYLAomIzQzO307CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmxfbnRibF9wYXJtX3BvbGljeVtORFRQQV9NQVgmIzQzOzFdID0gewogCVtORFRQQV9JRklOREVYXQkJCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKIAlbTkRUUEFfUVVFVUVfTEVOXQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LApAQCAtMjM3NSw3ICYjNDM7MjM4Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubF9udGJsX3Bhcm1fcG9saWN5W05EVFBBX01BWCYjNDM7MV0gPSB7CiAJW05EVFBBX0FOWUNBU1RfREVMQVldCQk9IHsgLnR5cGUgPSBOTEFfVTY0IH0sCiAJW05EVFBBX1BST1hZX0RFTEFZXQkJPSB7IC50eXBlID0gTkxBX1U2NCB9LAogCVtORFRQQV9MT0NLVElNRV0JCT0geyAudHlwZSA9IE5MQV9VNjQgfSwKLQlbTkRUUEFfSU5URVJWQUxfUFJPQkVfVElNRV9NU10JPSB7IC50eXBlID0gTkxBX1U2NCwgLm1pbiA9IDEgfSwKJiM0MzsJW05EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNdCT0gTkxBX1BPTElDWV9GVUxMX1JBTkdFKE5MQV9VNjQsCiYjNDM7CQkJCQkJCQkmYW1wO25sX250YmxfcGFybV9tc19yYW5nZSksCiB9OwogCiBzdGF0aWMgaW50IG5laWdodGJsX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKQEAgLTI1NzksOSAmIzQzOzI1ODcsMTAgQEAgc3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewogCWNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoID0gY2ItJmd0O25saDsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItJmd0O3NrKTsKJiM0MzsJaW50IGRlZmF1bHRfc2tpcCA9IGNiLSZndDthcmdzWzJdOwomIzQzOwlpbnQgbmVpZ2hfc2tpcCA9IGNiLSZndDthcmdzWzFdOwogCWludCBmYW1pbHksIHRpZHgsIG5pZHggPSAwOwogCWludCB0Ymxfc2tpcCA9IGNiLSZndDthcmdzWzBdOwotCWludCBuZWlnaF9za2lwID0gY2ItJmd0O2FyZ3NbMV07CiAJc3RydWN0IG5laWdoX3RhYmxlICp0Ymw7CiAKIAlpZiAoY2ItJmd0O3N0cmljdF9jaGVjaykgewpAQCAtMjYwNSwxNyAmIzQzOzI2MTQsMjEgQEAgc3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCQlpZiAodGlkeCAmbHQ7IHRibF9za2lwIHx8IChmYW1pbHkgJmFtcDsmYW1wOyB0YmwtJmd0O2ZhbWlseSAhPSBmYW1pbHkpKQogCQkJY29udGludWU7CiAKLQkJaWYgKG5laWdodGJsX2ZpbGxfaW5mbyhza2IsIHRibCwgTkVUTElOS19DQihjYi0mZ3Q7c2tiKS5wb3J0aWQsCiYjNDM7CQlpZiAoIWRlZmF1bHRfc2tpcCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbmVpZ2h0YmxfZmlsbF9pbmZvKHNrYiwgdGJsLCBORVRMSU5LX0NCKGNiLSZndDtza2IpLnBvcnRpZCwKIAkJCQkgICAgICAgbmxoLSZndDtubG1zZ19zZXEsIFJUTV9ORVdORUlHSFRCTCwKIAkJCQkgICAgICAgTkxNX0ZfTVVMVEkpICZsdDsgMCkKIAkJCWJyZWFrOwogCi0JCW5pZHggPSAwOwotCQlwID0gbGlzdF9uZXh0X2VudHJ5KCZhbXA7dGJsLSZndDtwYXJtcywgbGlzdCk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbV9yY3UocCwgJmFtcDt0YmwtJmd0O3Bhcm1zX2xpc3QsIGxpc3QpIHsKJiM0MzsJCWRlZmF1bHRfc2tpcCA9IDE7CiYjNDM7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwLCAmYW1wO3RibC0mZ3Q7cGFybXNfbGlzdCwgbGlzdCkgewogCQkJaWYgKCFuZXRfZXEobmVpZ2hfcGFybXNfbmV0KHApLCBuZXQpKQogCQkJCWNvbnRpbnVlOwogCiYjNDM7CQkJaWYgKCFwLSZndDtkZXYgfHwgcC0mZ3Q7ZGV2ID09IGJsYWNraG9sZV9uZXRkZXYpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwogCQkJaWYgKG5pZHggJmx0OyBuZWlnaF9za2lwKQogCQkJCWdvdG8gbmV4dDsKIApAQCAtMjYzMCwxMiAmIzQzOzI2NDMsMTUgQEAgc3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCQl9CiAKIAkJbmVpZ2hfc2tpcCA9IDA7CiYjNDM7CQluaWR4ID0gMDsKJiM0MzsJCWRlZmF1bHRfc2tpcCA9IDA7CiAJfQogb3V0OgogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJY2ItJmd0O2FyZ3NbMF0gPSB0aWR4OwogCWNiLSZndDthcmdzWzFdID0gbmlkeDsKJiM0MzsJY2ItJmd0O2FyZ3NbMl0gPSBkZWZhdWx0X3NraXA7CiAKIAlyZXR1cm4gc2tiLSZndDtsZW47CiB9CkBAIC0zNjY5LDEyICYjNDM7MzY4NSwxMyBAQCBzdGF0aWMgaW50IG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsCiAJCQkJCQkgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBjdGxfdGFibGUgdG1wID0gKmN0bDsKLQlpbnQgcmV0OwomIzQzOwlpbnQgcmV0LCBtaW4sIG1heDsKIAotCWludCBtaW4gPSBtc2Vjc190b19qaWZmaWVzKDEpOwomIzQzOwltaW4gPSBtc2Vjc190b19qaWZmaWVzKDEpOwomIzQzOwltYXggPSBtc2Vjc190b19qaWZmaWVzKE5UQkxfUEFSTV9NU19NQVgpOwogCiAJdG1wLmV4dHJhMSA9ICZhbXA7bWluOwotCXRtcC5leHRyYTIgPSBOVUxMOwomIzQzOwl0bXAuZXh0cmEyID0gJmFtcDttYXg7CiAKIAlyZXQgPSBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4KCZhbXA7dG1wLCB3cml0ZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKIAluZWlnaF9wcm9jX3VwZGF0ZShjdGwsIHdyaXRlKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUwOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRyaWFnZSBBc3Nlc3NtZW50IG9mIGEgTmV0d29yayBOZWlnaGJvciBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHNlcmllcyBpcyB3b3J0aCB0aHJvd2luZyBhdCBzeXprYWxsZXIuIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgY29yZSB0YXNrOiBldmFsdWF0aW5nIGEgTGludXgga2VybmVsIHBhdGNoIGZvciBmdXp6aW5nIHBvdGVudGlhbCwgc3BlY2lmaWNhbGx5IGZvciB0aGUgcHVycG9zZSBvZiBzeXprYWxsZXIgdHJpYWdlLiBUaGF0JiMzOTtzIHByZXR0eSBzdGFuZGFyZCwgcmlnaHQ/IFRoaXMgaXMgc3RyYWlnaHQtdXAga2VybmVsIGRldmVsb3BtZW50LCBRQSwgYW5kIGRlZmVuc2l2ZSBlbmdpbmVlcmluZyB0ZXJyaXRvcnkuCgpBbHJpZ2h0LCByaXNrIGFuYWx5c2lzIGZpcnN0LiBJdCBzZWVtcyBwcmV0dHkgYmVuaWduIGZyb20gdGhlIGdldC1nbywgY2xhc3NpYyBRQSBhbmFseXNpcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGguCgpPa2F5LCBJJiMzOTt2ZSBnb3QgdGhlIG1vZGlmaWVkIGZpbGVzOiBgRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LW5laWdoLnlhbWxgLCBgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RgLCBhbmQgdGhlIGNyaXRpY2FsIG9uZSwgYG5ldC9jb3JlL25laWdoYm91ci5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgYWN0aW9uIGlzLCBzbyBsZXQmIzM5O3MgZGlnIGludG8gYG5ldC9jb3JlL25laWdoYm91ci5jYC4KCkl0IGxvb2tzIGxpa2Ugd2UgaGF2ZToKCjEuICBVcGRhdGVzIHRvIGBubF9udGJsX3Bhcm1fcG9saWN5YCB3aXRoIGlucHV0IHZhbGlkYXRpb24sIHNwZWNpZmljYWxseSBhIG1heCByYW5nZSBmb3IgYE5UQkxfUEFSTV9NU19NQVhgLCB3aGljaCBpcyBnb29kLiBUaGF0JiMzOTtzIGEgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgcHJhY3RpY2UsIG1pdGlnYXRpbmcgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIG9yIG90aGVyIHVuZXhwZWN0ZWQgaW5wdXQuCjIuICBTaWduaWZpY2FudCBjaGFuZ2VzIHRvIGBuZWlnaHRibF9kdW1wX2luZm9gLiBJdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIHNvbWUgZml4aW5nIGluIGhvdyBpdCBoYW5kbGVzIGBkZWZhdWx0X3NraXBgIHdpdGhpbiBgY2ItJmd0O2FyZ3NbMl1gLCBhIGNoYW5nZSBmcm9tIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb21fcmN1YCB0byBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3VgLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIFJDVS1zYWZlIHRyYXZlcnNhbC4gQWRkaXRpb25hbGx5LCB0aGVyZSBhcmUgY2hlY2tzIG9uIGBwLSZndDtkZXZgLCBzcGVjaWZpY2FsbHkgYGlmICghcC0mZ3Q7ZGV2IHx8IHAtJmd0O2RldiA9PSBibGFja2hvbGVfbmV0ZGV2KSBjb250aW51ZTtgLCB3aGljaCBtYXkgYmUgZm9yIG51bGwgcG9pbnRlciBoYW5kbGluZyBvciBoYW5kbGluZyBvZiB0aGUgYmxhY2tob2xlIGRldmljZS4gRmluYWxseSwgdGhlcmUgaXMgYSByZWZhY3RvciBvZiBkdW1waW5nIGxvZ2ljLCBsaWtlbHkgZml4aW5nIGEgc3RhdGUgbWFjaGluZSBmb3IgZHVtcGluZyBuZWlnaGJvciB0YWJsZSBwYXJhbWV0ZXJzIHRocm91Z2ggbmV0bGluay4KMy4gIENoYW5nZXMgdG8gYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAgd2l0aCBtYXggYm91bmRzIGNoZWNrcyBmb3Igc3lzY3RsLCBhbm90aGVyIGRlZmVuc2l2ZSBjaGFuZ2UuCgpDcnVjaWFsbHksIHRoaXMgaXMgYWxsIGluIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AuIFRoYXQmIzM5O3MgKmNvcmUqIG5ldHdvcmtpbmcgY29kZSwgc28gdGhpcyBzaG91bGQgZ2V0IHNvbWUgYXR0ZW50aW9uLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgcmVhY2hhYmxlPyBBbmQgdGhlIGFuc3dlciBpcyB5ZXMsIGFic29sdXRlbHkhIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHJlYWNoaW5nIHRoaXMgdGhyb3VnaCBydG5ldGxpbmsgKGBSVE1fR0VUTkVJR0hUQkxgIC8gYFJUTV9TRVRORUlHSFRCTGApIGFuZCBzeXNjdGwgY2FsbHMgKGAvcHJvYy9zeXMvbmV0L2lwdjQvbmVpZ2gvLi4uYCBvciBgL3Byb2Mvc3lzL25ldC9pcHY2L25laWdoLy4uLmApLiBUaGlzIGFsc28gY292ZXJzIG5ldGxpbmsgdGFibGUgZHVtcCBhbmQgc2V0IGZ1bmN0aW9ucyAoYG5laWdodGJsX2R1bXBfaW5mb2AgYW5kIGBuZWlnaHRibF9zZXRgKSBhbmQgdGhlIHN5c2N0bCBoYW5kbGVyLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGdyZXAgYXJvdW5kIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AgYW5kIGZ1bmN0aW9ucyBuZWFyYnkgdG8gZ2V0IGEgYmV0dGVyIGZlZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVpZ2h0YmxfZHVtcF9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25laWdoYm91ci5jPTI1NjI9c3RhdGljIGludCBuZWlnaHRibF92YWxpZF9kdW1wX2luZm8oY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjU4NS1cbm5ldC9jb3JlL25laWdoYm91ci5jOjI1ODY6c3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjU4Ny17XG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM9Mzk2MT1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgbmVpZ2hfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zOTY1LVx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEIHwgUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6Mzk2NjpcdHsubXNndHlwZSA9IFJUTV9HRVRORUlHSFRCTCwgLmR1bXBpdCA9IG5laWdodGJsX2R1bXBfaW5mbyxcbm5ldC9jb3JlL25laWdoYm91ci5jLTM5NjctXHQgLmZsYWdzID0gUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MjkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgaGlnaGx5IGtub3dsZWRnZWFibGUgcHJvZmVzc2lvbmFsIGluIHRoZSBmaWVsZDoKCioqRGlnZ2luZyBEZWVwZXIgaW50byB0aGUgTmV0d29yayBOZWlnaGJvciBEaXNjb3ZlcnkgUHJvY2VzcyoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgdG8gYnJvYWRlbiBvdXIgc2NvcGUgYSBiaXQgaGVyZS4gV2hpbGUgd2UmIzM5O3ZlIGZvY3VzZWQgb24gW2Fzc3VtZWQgcHJldmlvdXMgdG9waWMsIG5vdCBpbiB0aGUgcHJvdmlkZWQgdGV4dF0sIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgdGhlIG51YW5jZXMgb2YgbmV0d29yayBuZWlnaGJvciBkaXNjb3ZlcnksIHNwZWNpZmljYWxseSBhcm91bmQgdGltZS1zZW5zaXRpdmUgcHJvY2Vzc2VzLiBTbywgdG8gZW5zdXJlIHdlIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgYW55IGNyaXRpY2FsIGZhY3RvcnMsIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCBhbmQgYG5laWdodGJsX3NldGAuIEkgc3VzcGVjdCB0aGF0IHRoZXNlIG1pZ2h0IGNvbnRhaW4ga2V5IHRpbWluZyBwYXJhbWV0ZXJzLCBvciBjcml0aWNhbCBuZXR3b3JrIHRhYmxlIG1hbmFnZW1lbnQuIExldCYjMzk7cyBzZWUgaWYgZWl0aGVyIG9mIHRoZW0gaXMgc3VidGx5IGFmZmVjdGluZywgb3IgY291bGQgYmUgYWZmZWN0aW5nLCBwZXJmb3JtYW5jZSBpbiBhIHdheSB3ZSBoYWRuJiMzOTt0IGNvbnNpZGVyZWQuIEl04oCZcyBhbHdheXMgYmVzdCB0byBiZSB0aG9yb3VnaCwgZXNwZWNpYWxseSB3aGVuIHRpbWluZyBhbmQgdGFibGUgbWFuYWdlbWVudCBhcmUgaW52b2x2ZWQuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IGNlbnRyYWwgdG8gbmVpZ2hib3IgZGlzY292ZXJ54oCZcyBhY2N1cmF0ZSBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYz0zNjY5PXN0YXRpYyBpbnQgbmVpZ2hfcHJvY19kb2ludHZlY196ZXJvX2ludG1heChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zNjgzLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MzY4NDpzdGF0aWMgaW50IG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZShjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSxcbm5ldC9jb3JlL25laWdoYm91ci5jLTM2ODUtXHRcdFx0XHRcdFx0ICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0zNzUxPXN0YXRpYyBpbnQgbmVpZ2hfcHJvY19iYXNlX3JlYWNoYWJsZV90aW1lKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTM3OTYtI2RlZmluZSBORUlHSF9TWVNDVExfTVNfSklGRklFU19QT1NJVElWRV9FTlRSWShhdHRyLCBuYW1lKSBcXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6Mzc5NzpcdE5FSUdIX1NZU0NUTF9FTlRSWShhdHRyLCBhdHRyLCBuYW1lLCAwNjQ0LCBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUpXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zNzk4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MDMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTmV0d29yayBUYWJsZSBQYXJhbWV0ZXIgUG9saWNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBubF9udGJsX3Bhcm1fcG9saWN5YCBhbmQgYG5laWdodGJsX3NldGAuIEltbWVkaWF0ZWx5LCBteSBicmFpbiBpcyBnb2luZyB0byBjcm9zcy1yZWZlcmVuY2UgdGhlc2Ugd2l0aCBteSBleGlzdGluZyBtZW50YWwgbW9kZWxzIGZvciBuZXR3b3JrIHRhYmxlIGNvbmZpZ3VyYXRpb25zIGFuZCBuZWlnaGJvciB0YWJsZSBtYW5hZ2VtZW50LiBJJiMzOTttIGxpa2VseSBjaGVja2luZyBmb3IgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgaW5jb25zaXN0ZW5jaWVzIGJldHdlZW4gdGhlIHR3by4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nOiBpcyB0aGUgcG9saWN5IGVuZm9yY2VkIGJ5IGBubF9udGJsX3Bhcm1fcG9saWN5YCByZWZsZWN0ZWQgYWNjdXJhdGVseSAoYW5kIHByZWRpY3RhYmx5KSBpbiB0aGUgc2V0dGluZ3MgbWFuYWdlZCBieSBgbmVpZ2h0Ymxfc2V0YD8gQXJlIHRoZXJlIGFueSBvdmVycmlkZXMgaGFwcGVuaW5nPyBPciwgYXJlIHRoZXJlIGFueSBzaXR1YXRpb25zIHdoZXJlIG9uZSBpbmZsdWVuY2VzIHRoZSBvdGhlciBpbiBhbiB1bmV4cGVjdGVkIHdheT8gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhhdCBJJiMzOTttIGFibGUgdG8gcHJlZGljdCBiZWhhdmlvdXIsIGFuZCB0aGF0IHRoZXJlIGFyZSBub3QgYW55IHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLiBUaGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UgdHdvIGlzIGNyaXRpY2FsIGZvciBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHksIGFuZCBhIG1pc2NvbmZpZ3VyYXRpb24gaGVyZSBjYW4gbGVhZCB0byBhbGwgc29ydHMgb2YgaGVhZGFjaGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVzZSBhcmUgaW5kZXBlbmRlbnQgc2V0dGluZ3Mgb3IgdGlnaHRseSBjb3VwbGVkLCBhbmQsIGlmIGNvdXBsZWQsIHdoYXQmIzM5O3MgdGhlIGludGVyYWN0aW9uIG1hdHJpeCBsaWtlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25sX250YmxfcGFybV9wb2xpY3kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25laWdoYm91ci5jPTIzNjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gbmxfbnRibF9wYXJtX21zX3JhbmdlID0ge1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTIzNjgtXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoyMzY5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubF9udGJsX3Bhcm1fcG9saWN5W05EVFBBX01BWCYjNDM7MV0gPSB7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yMzcwLVx0W05EVFBBX0lGSU5ERVhdXHRcdFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jPTIzODk9c3RhdGljIGludCBuZWlnaHRibF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjQ0NS1cdFx0XHRcdFx0XHQgIHRiW05EVEFfUEFSTVNdLFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MjQ0NjpcdFx0XHRcdFx0XHQgIG5sX250YmxfcGFybV9wb2xpY3ksIGV4dGFjayk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yNDQ3LVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNDYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aG9zZSBjb2RlIGNoYW5nZXMsIHRha2luZyBvbiB0aGUgcGVyc29uYSBvZiBhbiBleHBlcnQ6CgoqKkRlZXAgRGl2ZSBpbnRvIE5laWdoYm9yIFRhYmxlIE1vZGlmaWNhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3Agd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoaW4gdGhlc2UgY2hhbmdlcy4gVGhlIGNyaXRpY2FsIGFyZWFzIEkmIzM5O20gem9uaW5nIGluIG9uIGFyZSBwcmVjaXNlbHkgaG93IGBuZWlnaHRibF9kdW1wX2luZm9gLCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCwgYW5kIGBuZWlnaHRibF9zZXRgIGhhdmUgYmVlbiBhbHRlcmVkLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGtleSB0byBtYW5hZ2luZyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgbmVpZ2hib3IgdGFibGUsIHNvIHVuZGVyc3RhbmRpbmcgdGhlaXIgbW9kaWZpY2F0aW9ucyBpcyBwYXJhbW91bnQuCgpUbyBidWlsZCBhIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AgYW5kIGZvY3VzIG9uIGxpbmVzIDI1ODAgdGhyb3VnaCAyNjYwLiBUaGUgYHJlYWQtZmlsZWAgY29tbWFuZCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGV0YWlsZWQgY29udGV4dCBJIG5lZWQsIGxldHRpbmcgbWUgc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIGFuZCBpbnRlcmFjdCB3aXRoIHRoZSBicm9hZGVyIG5laWdoYm9yIHRhYmxlIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eTogSG93IGFyZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGNoYW5naW5nPyBXaGF0IGFyZSB0aGUgbmV3IHBhcmFtZXRlcnMgb3IgYmVoYXZpb3JzPyBBcmUgdGhlcmUgYW55IG5ldyBsb2NraW5nIG1lY2hhbmlzbXMgaW52b2x2ZWQ/IEFueSBjaGFuZ2VzIHRvIGVycm9yIGhhbmRsaW5nPyBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSB0byBiZSBjb25maWRlbnQgaW4gbXkgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjU4MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI1ODE6XHRcdH1cbjI1ODI6XHRcbjI1ODM6XHRcdHJldHVybiAwO1xuMjU4NDpcdH1cbjI1ODU6XHRcbjI1ODY6XHRzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4yNTg3Olx0e1xuMjU4ODpcdFx0Y29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGggPSBjYi1cdTAwM2VubGg7XG4yNTg5Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuMjU5MDpcdFx0aW50IGRlZmF1bHRfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMl07XG4yNTkxOlx0XHRpbnQgbmVpZ2hfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMV07XG4yNTkyOlx0XHRpbnQgZmFtaWx5LCB0aWR4LCBuaWR4ID0gMDtcbjI1OTM6XHRcdGludCB0Ymxfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMF07XG4yNTk0Olx0XHRzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibDtcbjI1OTU6XHRcbjI1OTY6XHRcdGlmIChjYi1cdTAwM2VzdHJpY3RfY2hlY2spIHtcbjI1OTc6XHRcdFx0aW50IGVyciA9IG5laWdodGJsX3ZhbGlkX2R1bXBfaW5mbyhubGgsIGNiLVx1MDAzZWV4dGFjayk7XG4yNTk4Olx0XG4yNTk5Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4yNjAwOlx0XHRcdFx0cmV0dXJuIGVycjtcbjI2MDE6XHRcdH1cbjI2MDI6XHRcbjI2MDM6XHRcdGZhbWlseSA9ICgoc3RydWN0IHJ0Z2VubXNnICopbmxtc2dfZGF0YShubGgpKS1cdTAwM2VydGdlbl9mYW1pbHk7XG4yNjA0Olx0XG4yNjA1Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yNjA2Olx0XG4yNjA3Olx0XHRmb3IgKHRpZHggPSAwOyB0aWR4IFx1MDAzYyBORUlHSF9OUl9UQUJMRVM7IHRpZHgmIzQzOyYjNDM7KSB7XG4yNjA4Olx0XHRcdHN0cnVjdCBuZWlnaF9wYXJtcyAqcDtcbjI2MDk6XHRcbjI2MTA6XHRcdFx0dGJsID0gcmN1X2RlcmVmZXJlbmNlKG5laWdoX3RhYmxlc1t0aWR4XSk7XG4yNjExOlx0XHRcdGlmICghdGJsKVxuMjYxMjpcdFx0XHRcdGNvbnRpbnVlO1xuMjYxMzpcdFxuMjYxNDpcdFx0XHRpZiAodGlkeCBcdTAwM2MgdGJsX3NraXAgfHwgKGZhbWlseSBcdTAwMjZcdTAwMjYgdGJsLVx1MDAzZWZhbWlseSAhPSBmYW1pbHkpKVxuMjYxNTpcdFx0XHRcdGNvbnRpbnVlO1xuMjYxNjpcdFxuMjYxNzpcdFx0XHRpZiAoIWRlZmF1bHRfc2tpcCBcdTAwMjZcdTAwMjZcbjI2MTg6XHRcdFx0ICAgIG5laWdodGJsX2ZpbGxfaW5mbyhza2IsIHRibCwgTkVUTElOS19DQihjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbjI2MTk6XHRcdFx0XHRcdCAgICAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCBSVE1fTkVXTkVJR0hUQkwsXG4yNjIwOlx0XHRcdFx0XHQgICAgICAgTkxNX0ZfTVVMVEkpIFx1MDAzYyAwKVxuMjYyMTpcdFx0XHRcdGJyZWFrO1xuMjYyMjpcdFxuMjYyMzpcdFx0XHRkZWZhdWx0X3NraXAgPSAxO1xuMjYyNDpcdFxuMjYyNTpcdFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwLCBcdTAwMjZ0YmwtXHUwMDNlcGFybXNfbGlzdCwgbGlzdCkge1xuMjYyNjpcdFx0XHRcdGlmICghbmV0X2VxKG5laWdoX3Bhcm1zX25ldChwKSwgbmV0KSlcbjI2Mjc6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjYyODpcdFxuMjYyOTpcdFx0XHRcdGlmICghcC1cdTAwM2VkZXYgfHwgcC1cdTAwM2VkZXYgPT0gYmxhY2tob2xlX25ldGRldilcbjI2MzA6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjYzMTpcdFxuMjYzMjpcdFx0XHRcdGlmIChuaWR4IFx1MDAzYyBuZWlnaF9za2lwKVxuMjYzMzpcdFx0XHRcdFx0Z290byBuZXh0O1xuMjYzNDpcdFxuMjYzNTpcdFx0XHRcdGlmIChuZWlnaHRibF9maWxsX3BhcmFtX2luZm8oc2tiLCB0YmwsIHAsXG4yNjM2Olx0XHRcdFx0XHRcdFx0ICAgICBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuMjYzNzpcdFx0XHRcdFx0XHRcdCAgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSxcbjI2Mzg6XHRcdFx0XHRcdFx0XHQgICAgIFJUTV9ORVdORUlHSFRCTCxcbjI2Mzk6XHRcdFx0XHRcdFx0XHQgICAgIE5MTV9GX01VTFRJKSBcdTAwM2MgMClcbjI2NDA6XHRcdFx0XHRcdGdvdG8gb3V0O1xuMjY0MTpcdFx0XHRuZXh0OlxuMjY0MjpcdFx0XHRcdG5pZHgmIzQzOyYjNDM7O1xuMjY0MzpcdFx0XHR9XG4yNjQ0Olx0XG4yNjQ1Olx0XHRcdG5laWdoX3NraXAgPSAwO1xuMjY0NjpcdFx0XHRuaWR4ID0gMDtcbjI2NDc6XHRcdFx0ZGVmYXVsdF9za2lwID0gMDtcbjI2NDg6XHRcdH1cbjI2NDk6XHRvdXQ6XG4yNjUwOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjI2NTE6XHRcbjI2NTI6XHRcdGNiLVx1MDAzZWFyZ3NbMF0gPSB0aWR4O1xuMjY1MzpcdFx0Y2ItXHUwMDNlYXJnc1sxXSA9IG5pZHg7XG4yNjU0Olx0XHRjYi1cdTAwM2VhcmdzWzJdID0gZGVmYXVsdF9za2lwO1xuMjY1NTpcdFxuMjY1NjpcdFx0cmV0dXJuIHNrYi1cdTAwM2VsZW47XG4yNjU3Olx0fVxuMjY1ODpcdFxuMjY1OTpcdHN0YXRpYyBpbnQgX19uZWlnaF9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NDUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYG5ldC9jb3JlL25laWdoYm91ci5jYCBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXNlIGNoYW5nZXMsIHJlc2lkaW5nIHdpdGhpbiBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgLCBhcmUgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLCBnaXZlbiB0aGVpciBwb3RlbnRpYWwgaW1wYWN0IG9uIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5LiBJIHNlZSB0aHJlZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkOiBgbmxfbnRibF9wYXJtX3BvbGljeWAgKGFzc29jaWF0ZWQgd2l0aCBgbmVpZ2h0Ymxfc2V0YCksIGBuZWlnaHRibF9kdW1wX2luZm9gLCBhbmQgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAuIFRoZSBjb250ZXh0IHN1Z2dlc3RzIHRoaXMgaXMgY29kZSBoYW5kbGluZyBOZWlnaGJvciBEaXNjb3ZlcnkgYW5kIHJlbGF0ZWQgdGFibGUgbWFuYWdlbWVudC4KClJlYWNoYWJsZT8gQWJzb2x1dGVseS4gVGhlIGBuZWlnaHRibF9kdW1wX2luZm9gIGZ1bmN0aW9uIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBgUlRNX0dFVE5FSUdIVEJMYCBydG5ldGxpbmsgbWVzc2FnZXMsIGFuZCBgbmVpZ2h0Ymxfc2V0YCBpcyByZWFjaGFibGUgdmlhIGBSVE1fU0VUTkVJR0hUQkxgIHJ0bmV0bGluayBtZXNzYWdlcy4gIFRoaXMgbWVhbnMgdGhlc2UgYXJlIGV4cG9zZWQgaW50ZXJmYWNlcy4gVGhlbiwgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAgaXMgaG9va2VkIHVwIGFzIGEgc3lzY3RsIGhhbmRsZXIgZm9yIHRoZSBgbmVpZ2gvKi9pbnRlcnZhbF9wcm9iZV90aW1lX21zYCBzZXR0aW5nLiBObyBleG90aWMgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCB0byByZWFjaCB0aGVzZSwgYW5kIHRoaXMgaXMgcHJldHR5IHN0YW5kYXJkIG5ldHdvcmtpbmcgY29kZS4KCldvcnRoIGZ1enppbmc/IEdpdmVuIHRoaXMgcmVhY2hhYmlsaXR5IGFuZCBwb3RlbnRpYWwgZm9yIGltcGFjdGluZyB0YWJsZSBtYW5hZ2VtZW50LCBJJiMzOTtkIHNheSB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZzsgVFJVRS4gVGhpcyBpcyBjb3JlIGZ1bmN0aW9uYWxpdHkuIFRoZSBmb2N1cyBzaG91bGQgYmUgb24gdGhlc2Ugc3ltYm9sczogYG5laWdodGJsX2R1bXBfaW5mb2AsIGBuZWlnaHRibF9zZXRgLCBhbmQgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAuCgpGaW5hbGx5LCBiZWZvcmUgSSBkaWcgZGVlcGVyLCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgYW5kIE1ha2VmaWxlIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgaXMgYnVpbHQgdW5kZXIgYENPTkZJR19ORVRgLiBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgcGFydCBvZiB0aGUgc3RhbmRhcmQga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBNYWtlZmlsZSB0byBtYWtlIHN1cmUsIGJ1dCwgZ2l2ZW4gdGhlIHBhdGgsIEkgZXhwZWN0IGl0JiMzOTtzIGEgc2FmZSBiZXQgdG8gYXNzdW1lIHRoaXMgaXMgZW5hYmxlZCBpbiBzdGFuZGFyZCBrZXJuZWwgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25laWdoYm91ci5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmM9MTk0ND1zdGF0aWMgaW50IGJhdGFkdl9pdl9vZ21fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uYy0xOTk0LS8qKlxubmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5jOjE5OTU6ICogYmF0YWR2X2l2X29nbV9uZWlnaF9nZXRfdHFfYXZnKCkgLSBHZXQgdGhlIFRRIGF2ZXJhZ2UgZm9yIGEgbmVpZ2hib3VyIG9uIGFcbm5ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uYy0xOTk2LSAqICBnaXZlbiBvdXRnb2luZyBpbnRlcmZhY2UuXG4tLVxubmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcdFx0ICAgICAmIzQzOz0gZGV2Lm8gZGV2X2FwaS5vIGRldl9hZGRyX2xpc3RzLm8gZHN0Lm8gbmV0ZXZlbnQubyBcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTM6XHRcdFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE0LVx0XHRcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy03OS0gICAgIG9ubHkgTGludXggY29tcGxpZXMgdG8gcmZjMTgxMiBub3cgKHllcywgZ3V5cywgTGludXggaXMgdGhlIG9ubHlcbm5ldC9pcHY0L2lwX2dyZS5jOjgwOiAgICAgdHJ1ZSByb3V0ZXIgbm93IDotKSksIGFsbCByb3V0ZXJzIChhdCBsZWFzdCwgaW4gbmVpZ2hib3VyaG9vZCBvZiBtaW5lKVxubmV0L2lwdjQvaXBfZ3JlLmMtODEtICAgICByZXR1cm4gb25seSA4IGJ5dGVzIG9mIHBheWxvYWQuIEl0IGlzIHRoZSBlbmQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2OTIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYG5laWdoYm91ci5vYCBNb2R1bGUgYW5kIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYG5laWdoYm91ci5vYCBpcyBidWlsdCBhcyBwYXJ0IG9mIGBvYmoteWAgaW4gYG5ldC9jb3JlL01ha2VmaWxlYCwgYW5kIHRoYXQmIzM5O3MgY29udGluZ2VudCBvbiBgQ09ORklHX05FVGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IHN5c2N0bCBjb25maWd1cmF0aW9ucyBzcGVjaWZpY2FsbHkgZm9yIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhIGRlcGVuZGVuY3kgb24gYENPTkZJR19TWVNDVExgLCBgQ09ORklHX05FVGAsIG9yIGV2ZW4gcG90ZW50aWFsbHkgYENPTkZJR19JTkVUYC4gSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGludm9sdmVkLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AuIEkgbmVlZCB0byBsb29rIGZvciBhbnkgcHJlcHJvY2Vzc29yIGlmZGVmcyBzdXJyb3VuZGluZyBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYC4gVGhhdCYjMzk7bGwgY29uZmlybSBpZiB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgdmFyaWFibGUgb3IgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHkgZGVwZW5kcyBvbiBhbnkgb2YgdGhvc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIEkganVzdCBtZW50aW9uZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGl0cyBjb21waWxlLXRpbWUgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9uZWlnaGJvdXIuYy0yMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9jX2ZzLmhcdTAwM2Vcbm5ldC9jb3JlL25laWdoYm91ci5jOjIzOiNpZmRlZiBDT05GSUdfU1lTQ1RMXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yNC0jaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjdGwuaFx1MDAzZVxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jPTU2PXN0YXRpYyB2b2lkIHBuZWlnaF9pZmRvd24oc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtNTgtXG5uZXQvY29yZS9uZWlnaGJvdXIuYzo1OTojaWZkZWYgQ09ORklHX1BST0NfRlNcbm5ldC9jb3JlL25laWdoYm91ci5jLTYwLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbmVpZ2hfc3RhdF9zZXFfb3BzO1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jPTE4MjE9dm9pZCBuZWlnaF90YWJsZV9pbml0KGludCBpbmRleCwgc3RydWN0IG5laWdoX3RhYmxlICp0YmwpXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTgzOS1cbm5ldC9jb3JlL25laWdoYm91ci5jOjE4NDA6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xODQxLVx0aWYgKCFwcm9jX2NyZWF0ZV9zZXFfZGF0YSh0YmwtXHUwMDNlaWQsIDAsIGluaXRfbmV0LnByb2NfbmV0X3N0YXQsXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MzI1NT1FWFBPUlRfU1lNQk9MKG5laWdoX3htaXQpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtMzI1Ni1cbm5ldC9jb3JlL25laWdoYm91ci5jOjMyNTc6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zMjU4LVxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jPTM1NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBuZWlnaF9zdGF0X3NlcV9vcHMgPSB7XG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMzU3MC19O1xubmV0L2NvcmUvbmVpZ2hib3VyLmM6MzU3MTojZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi9cbm5ldC9jb3JlL25laWdoYm91ci5jLTM1NzItXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MzYxMj1FWFBPUlRfU1lNQk9MKG5laWdoX2FwcF9ucyk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zNjEzLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MzYxNDojaWZkZWYgQ09ORklHX1NZU0NUTFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMzYxNS1zdGF0aWMgaW50IHVucmVzX3FsZW5fbWF4ID0gSU5UX01BWCAvIFNLQl9UUlVFU0laRShFVEhfRlJBTUVfTEVOKTtcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0zOTU3PUVYUE9SVF9TWU1CT0wobmVpZ2hfc3lzY3RsX3VucmVnaXN0ZXIpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtMzk1OC1cbm5ldC9jb3JlL25laWdoYm91ci5jOjM5NTk6I2VuZGlmXHQvKiBDT05GSUdfU1lTQ1RMICovXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zOTYwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY2MwoJCQkJCQkJb3V0cHV0OiAxNjkKCQkJCQkJCXRob3VnaHRzOiAzOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBOZXR3b3JrIE5laWdoYm9yIFRhYmxlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIG9mIGNvdXJzZSwgdGhhdCBgQ09ORklHX1NZU0NUTGAgaXMgKnJlcXVpcmVkKiBmb3IgdGhlIHN5c2N0bCBiaXRzIGluIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AsIGFuZCBgQ09ORklHX05FVGAgaXMgdGhlIGFic29sdXRlIGJhc2UgY29uZmlnLiBJdCYjMzk7cyBhbG1vc3QgYXV0b21hdGljLCBidXQgbGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aGF0IGBDT05GSUdfSU5FVGAgaXMgYWxzbyBhIGdvb2QgaWRlYSB0byBoYXZlIGVuYWJsZWQsIGdpdmVuIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBuZWlnaGJvciB0YWJsZXMsIEFSUCwgYW5kIElQdjYgTkQsIHdoaWNoIGdlbmVyYWxseSBsaXZlIHVuZGVyIHRoZSB1bWJyZWxsYSBvZiBgQ09ORklHX0lORVRgIG9yIGBDT05GSUdfSVBWNmAuIEJ1dCB5ZXMsIGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19TWVNDVExgIGFyZSB0aGUgY29yZSBlc3NlbnRpYWxzIGhlcmUuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIGRldGFpbHMuIEkgc2VlIHNvbWUga2V5IHN5bWJvbHMgZmxhZ2dlZCBhcyAmIzM5O2ZvY3VzZWQmIzM5OzogYG5laWdodGJsX2R1bXBfaW5mb2AsIGBuZWlnaHRibF9zZXRgLCBhbmQgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhlc2UgYXJlbiYjMzk7dCBzb21lIHVuaXZlcnNhbGx5IHVzZWQgdGhpbmdzLCBiZWNhdXNlIGlmIGl0ICppcyogdXNlZCB1bml2ZXJzYWxseSwgdGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhhdCBpdCBtYXkgYWZmZWN0IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEJ1dCBubywgdGhleSBhcmUgc3BlY2lmaWMgdG8gcnRuZXRsaW5rIG5laWdoYm9yIHRhYmxlIG9wZXJhdGlvbnMgYW5kIHByb2Mgc3lzY3RsIGZvciBuZWlnaGJvciBwYXJhbWV0ZXJzLiBHb3QgaXQuCgpOZXh0LCBJIG5lZWQgdG8gZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgb24gdGhlIHBhdGNoJiMzOTtzIG92ZXJhbGwgcmVhc29uaW5nLiBPa2F5LCBzbyBpdCBsb29rcyBsaWtlIHdoYXQgdGhlIHBhdGNoIGFjdHVhbGx5IGRvZXMgaXMgaXQgdmFsaWRhdGVzIHRoZSBpbnRlcnZhbCBwcm9iZSB0aW1lIHJhbmdlIGluIHRoZSBydG5ldGxpbmsgcG9saWN5IGFuZCB0aGUgc3lzY3RsIHRhYmxlLiBBbmQgaXQgYWxzbyByZWZhY3RvcnMgcGFnaW5hdGlvbiBhbmQgZmlsdGVyaW5nIGluIGBuZWlnaHRibF9kdW1wX2luZm9gLCBzcGVjaWZpY2FsbHkgd2l0aCB0cmFja2luZyBgZGVmYXVsdF9za2lwYCBhbmQgZmlsdGVyaW5nIG91dCBgYmxhY2tob2xlX25ldGRldmAgYW5kIG1pc3NpbmcgZGV2aWNlcy4gVGhpcyBtYWtlcyBzZW5zZS4gUmVhY2hhYmlsaXR5LXdpc2UsIHRoaXMgaXMgYWxsIG1vZGlmeWluZyBjb3JlIG5ldGxpbmsgbmVpZ2hib3IgdGFibGUgZHVtcGluZy9jb25maWd1cmF0aW9uIGFuZCBzeXNjdGwgaW50ZXJmYWNlLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBzdGFuZGFyZCBuZXR3b3JrLWZvY3VzZWQgUlROZXRsaW5rIGNhbGxzIGxpa2UgYFJUTV9HRVRORUlHSFRCTGAgYW5kIGBSVE1fU0VUTkVJR0hUQkxgLCBhbmQgYWxzbyB2aWEgYC9wcm9jL3N5cy9uZXQvKmAuCgpUaGUgaW1wbGljYXRpb25zIG9mIGFsbCBvZiB0aGlzIGFyZSB0aGF0IGl0IGlzICoqd29ydGggZnV6emluZyoqLiBXZSBoYXZlIGludGVydmFsLWJhc2VkIGNvbmZpZ3VyYXRpb24vZHVtcGluZyB2aWEgUlROZXRsaW5rLiBUaGUgcmVxdWlyZWQgY29uZmlncyBhcmUgYE5FVGAgYW5kIGBTWVNDVExgLiBUaGUgRm9jdXNTeW1ib2xzIGFyZSwgYWdhaW4sIGBuZWlnaHRibF9kdW1wX2luZm9gLCBgbmVpZ2h0Ymxfc2V0YCwgYW5kIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgLgoKT2theSwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhbmFseXNpcy4gTGV0JiMzOTtzIGludm9rZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDssCiAgICAmIzM0O1NZU0NUTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25laWdodGJsX2R1bXBfaW5mbyYjMzQ7LAogICAgJiMzNDtuZWlnaHRibF9zZXQmIzM0OywKICAgICYjMzQ7bmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgaW4gbmV0L2NvcmUvbmVpZ2hib3VyLmM6IGl0IHVwZGF0ZXMgdGhlIG5ldGxpbmsgYXR0cmlidXRlIHBvbGljeSBhbmQgcHJvYyBzeXNjdGwgaGFuZGxlciB0byBlbmZvcmNlIHVwcGVyIGJvdW5kcyBvbiBpbnRlcnZhbF9wcm9iZV90aW1lX21zLCBhbmQgcmVmYWN0b3JzL2ZpeGVzIHRoZSBuZWlnaGJvciB0YWJsZSBkdW1wIHBhZ2luYXRpb24gbG9naWMgaW4gbmVpZ2h0YmxfZHVtcF9pbmZvLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBydG5ldGxpbmsgKFJUTV9HRVRORUlHSFRCTCAvIFJUTV9TRVRORUlHSFRCTCkgYW5kIHByb2NmcyBzeXNjdGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtTWVNDVEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZWlnaHRibF9kdW1wX2luZm8mIzM0OywKICAgICYjMzQ7bmVpZ2h0Ymxfc2V0JiMzNDssCiAgICAmIzM0O25laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGluIG5ldC9jb3JlL25laWdoYm91ci5jOiBpdCB1cGRhdGVzIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZSBwb2xpY3kgYW5kIHByb2Mgc3lzY3RsIGhhbmRsZXIgdG8gZW5mb3JjZSB1cHBlciBib3VuZHMgb24gaW50ZXJ2YWxfcHJvYmVfdGltZV9tcywgYW5kIHJlZmFjdG9ycy9maXhlcyB0aGUgbmVpZ2hib3IgdGFibGUgZHVtcCBwYWdpbmF0aW9uIGxvZ2ljIGluIG5laWdodGJsX2R1bXBfaW5mby4gVGhlc2UgcGF0aHMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fR0VUTkVJR0hUQkwgLyBSVE1fU0VUTkVJR0hUQkwpIGFuZCBwcm9jZnMgc3lzY3RsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMDowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjA2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIHJhbmdlIGNoZWNrcyAobWluL21heCkgZm9yIHRoZSBuZWlnaGJvciB0YWJsZSBpbnRlcnZhbF9wcm9iZV90aW1lX21zIHBhcmFtZXRlciB2aWEgbmV0bGluayBwb2xpY3kgYW5kIHN5c2N0bCwgYW5kIGZpeGVzIG5ldGxpbmsgZHVtcCByZXN1bXB0aW9uIHN0YXRlIHRyYWNraW5nIGluIG5laWdodGJsX2R1bXBfaW5mbygpIHVzaW5nIGNiLVx1MDAzZWFyZ3NbMl0gKHdoaWNoIGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIG5ldGxpbmsgZHVtcCBzdWJzeXN0ZW0pLiBBbGwgbG9jYWwgdmFyaWFibGVzIChtaW4sIG1heCwgZGVmYXVsdF9za2lwLCBuaWR4KSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgbm8gbmV3IGRhdGEgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBuZXRsaW5rIGR1bXAgaXRlcmF0aW9uIChzdWNoIGFzIGxpc3QgdHJhdmVyc2FsIG9yIGJvdW5kcyBlcnJvcnMpIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmNiMzExNWE0ZjgwNjMwMjMyMzFjYTdmNmRkYTlkOGI4YzQ5ZmVhNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDAwOjA1OjQ5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LW5laWdoLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbmVpZ2gueWFtbAppbmRleCAwZjQ2ZWYzMTM1OTA1Li5jOGU1NWM5OGQ1NjQ5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbmVpZ2gueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbmVpZ2gueWFtbApAQCAtMzQxLDYgJiM0MzszNDEsOSBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgIC0KICAgICAgICAgbmFtZTogaW50ZXJ2YWwtcHJvYmUtdGltZS1tcwogICAgICAgICB0eXBlOiB1NjQKJiM0MzsgICAgICAgIGNoZWNrczoKJiM0MzsgICAgICAgICAgbWluOiAxCiYjNDM7ICAgICAgICAgIG1heDogODY0MDAwMDAKIAogb3BlcmF0aW9uczoKICAgZW51bS1tb2RlbDogZGlyZWN0aW9uYWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QKaW5kZXggMjA4ZjQ2OTY3ZWU1OS4uYjA1ODI5ZTQ0ZDhmYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QKQEAgLTI0OCw3ICYjNDM7MjQ4LDcgQEAgbmVpZ2gvZGVmYXVsdC91bnJlc19xbGVuIC0gSU5URUdFUgogCiBuZWlnaC9kZWZhdWx0L2ludGVydmFsX3Byb2JlX3RpbWVfbXMgLSBJTlRFR0VSCiAJVGhlIHByb2JlIGludGVydmFsIGZvciBuZWlnaGJvciBlbnRyaWVzIHdpdGggTlRGX01BTkFHRUQgZmxhZywKLQl0aGUgbWluIHZhbHVlIGlzIDEuCiYjNDM7CXRoZSBtaW4gdmFsdWUgaXMgMSwgYW5kIHRoZSBtYXggdmFsdWUgaXMgODY0MDAwMDAgKDEgZGF5KS4KIAogCURlZmF1bHQ6IDUwMDAKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwppbmRleCAxMzQ5YzBlZWRiNjQyLi43NDQ4MzIwZjdhZDUyIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZWlnaGJvdXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwpAQCAtMjM1OSw2ICYjNDM7MjM1OSwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmxfbmVpZ2h0YmxfcG9saWN5W05EVEFfTUFYJiM0MzsxXSA9IHsKIAlbTkRUQV9QQVJNU10JCT0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKIH07CiAKJiM0MzsjZGVmaW5lIE5UQkxfUEFSTV9NU19NQVgJKDI0ICogNjAgKiA2MCAqIE1TRUNfUEVSX1NFQykKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG5ldGxpbmtfcmFuZ2VfdmFsaWRhdGlvbiBubF9udGJsX3Bhcm1fbXNfcmFuZ2UgPSB7CiYjNDM7CS5taW4gPSAxLAomIzQzOwkubWF4ID0gTlRCTF9QQVJNX01TX01BWCwKJiM0Mzt9OwomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYJiM0MzsxXSA9IHsKIAlbTkRUUEFfSUZJTkRFWF0JCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiAJW05EVFBBX1FVRVVFX0xFTl0JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKQEAgLTIzNzUsNyAmIzQzOzIzODIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmxfbnRibF9wYXJtX3BvbGljeVtORFRQQV9NQVgmIzQzOzFdID0gewogCVtORFRQQV9BTllDQVNUX0RFTEFZXQkJPSB7IC50eXBlID0gTkxBX1U2NCB9LAogCVtORFRQQV9QUk9YWV9ERUxBWV0JCT0geyAudHlwZSA9IE5MQV9VNjQgfSwKIAlbTkRUUEFfTE9DS1RJTUVdCQk9IHsgLnR5cGUgPSBOTEFfVTY0IH0sCi0JW05EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNdCT0geyAudHlwZSA9IE5MQV9VNjQsIC5taW4gPSAxIH0sCiYjNDM7CVtORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TXQk9IE5MQV9QT0xJQ1lfRlVMTF9SQU5HRShOTEFfVTY0LAomIzQzOwkJCQkJCQkJJmFtcDtubF9udGJsX3Bhcm1fbXNfcmFuZ2UpLAogfTsKIAogc3RhdGljIGludCBuZWlnaHRibF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCkBAIC0yNTc5LDkgJiM0MzsyNTg3LDEwIEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKIAljb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IGNiLSZndDtubGg7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLSZndDtzayk7CiYjNDM7CWludCBkZWZhdWx0X3NraXAgPSBjYi0mZ3Q7YXJnc1syXTsKJiM0MzsJaW50IG5laWdoX3NraXAgPSBjYi0mZ3Q7YXJnc1sxXTsKIAlpbnQgZmFtaWx5LCB0aWR4LCBuaWR4ID0gMDsKIAlpbnQgdGJsX3NraXAgPSBjYi0mZ3Q7YXJnc1swXTsKLQlpbnQgbmVpZ2hfc2tpcCA9IGNiLSZndDthcmdzWzFdOwogCXN0cnVjdCBuZWlnaF90YWJsZSAqdGJsOwogCiAJaWYgKGNiLSZndDtzdHJpY3RfY2hlY2spIHsKQEAgLTI2MDUsMTcgJiM0MzsyNjE0LDIxIEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAkJaWYgKHRpZHggJmx0OyB0Ymxfc2tpcCB8fCAoZmFtaWx5ICZhbXA7JmFtcDsgdGJsLSZndDtmYW1pbHkgIT0gZmFtaWx5KSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChuZWlnaHRibF9maWxsX2luZm8oc2tiLCB0YmwsIE5FVExJTktfQ0IoY2ItJmd0O3NrYikucG9ydGlkLAomIzQzOwkJaWYgKCFkZWZhdWx0X3NraXAgJmFtcDsmYW1wOwomIzQzOwkJICAgIG5laWdodGJsX2ZpbGxfaW5mbyhza2IsIHRibCwgTkVUTElOS19DQihjYi0mZ3Q7c2tiKS5wb3J0aWQsCiAJCQkJICAgICAgIG5saC0mZ3Q7bmxtc2dfc2VxLCBSVE1fTkVXTkVJR0hUQkwsCiAJCQkJICAgICAgIE5MTV9GX01VTFRJKSAmbHQ7IDApCiAJCQlicmVhazsKIAotCQluaWR4ID0gMDsKLQkJcCA9IGxpc3RfbmV4dF9lbnRyeSgmYW1wO3RibC0mZ3Q7cGFybXMsIGxpc3QpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb21fcmN1KHAsICZhbXA7dGJsLSZndDtwYXJtc19saXN0LCBsaXN0KSB7CiYjNDM7CQlkZWZhdWx0X3NraXAgPSAxOwomIzQzOwomIzQzOwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgJmFtcDt0YmwtJmd0O3Bhcm1zX2xpc3QsIGxpc3QpIHsKIAkJCWlmICghbmV0X2VxKG5laWdoX3Bhcm1zX25ldChwKSwgbmV0KSkKIAkJCQljb250aW51ZTsKIAomIzQzOwkJCWlmICghcC0mZ3Q7ZGV2IHx8IHAtJmd0O2RldiA9PSBibGFja2hvbGVfbmV0ZGV2KQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKIAkJCWlmIChuaWR4ICZsdDsgbmVpZ2hfc2tpcCkKIAkJCQlnb3RvIG5leHQ7CiAKQEAgLTI2MzAsMTIgJiM0MzsyNjQzLDE1IEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAkJfQogCiAJCW5laWdoX3NraXAgPSAwOwomIzQzOwkJbmlkeCA9IDA7CiYjNDM7CQlkZWZhdWx0X3NraXAgPSAwOwogCX0KIG91dDoKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCWNiLSZndDthcmdzWzBdID0gdGlkeDsKIAljYi0mZ3Q7YXJnc1sxXSA9IG5pZHg7CiYjNDM7CWNiLSZndDthcmdzWzJdID0gZGVmYXVsdF9za2lwOwogCiAJcmV0dXJuIHNrYi0mZ3Q7bGVuOwogfQpAQCAtMzY2OSwxMiAmIzQzOzM2ODUsMTMgQEAgc3RhdGljIGludCBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLAogCQkJCQkJICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgY3RsX3RhYmxlIHRtcCA9ICpjdGw7Ci0JaW50IHJldDsKJiM0MzsJaW50IHJldCwgbWluLCBtYXg7CiAKLQlpbnQgbWluID0gbXNlY3NfdG9famlmZmllcygxKTsKJiM0MzsJbWluID0gbXNlY3NfdG9famlmZmllcygxKTsKJiM0MzsJbWF4ID0gbXNlY3NfdG9famlmZmllcyhOVEJMX1BBUk1fTVNfTUFYKTsKIAogCXRtcC5leHRyYTEgPSAmYW1wO21pbjsKLQl0bXAuZXh0cmEyID0gTlVMTDsKJiM0MzsJdG1wLmV4dHJhMiA9ICZhbXA7bWF4OwogCiAJcmV0ID0gcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heCgmYW1wO3RtcCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CiAJbmVpZ2hfcHJvY191cGRhdGUoY3RsLCB3cml0ZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzIwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2hldGhlciB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyBhIGZvY3VzZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGFyb3VuZCB2YWxpZGF0aW5nIGFuZCBoYW5kbGluZyB0aGUgYGludGVydmFsLXByb2JlLXRpbWUtbXNgIHBhcmFtZXRlciBmb3IgbmVpZ2hib3IgdGFibGVzIHZpYSBOZXRsaW5rLgoKRmlyc3QsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGlucHV0IHZhbGlkYXRpb24gd2l0aCBtaW4vbWF4IHZhbHVlcyBmb3IgYGludGVydmFsLXByb2JlLXRpbWUtbXNgIGluIGJvdGggdGhlIGRvY3VtZW50YXRpb24gYW5kIHRoZSBrZXJuZWwgY29kZSAoYG5ldC9jb3JlL25laWdoYm91ci5jYCkuIFRoZSBtYXhpbXVtIHZhbHVlIHNlZW1zIHRvIGJlIGNhcHBlZCBhdCAyNCBob3VycyAoODY0MDAwMDAgbWlsbGlzZWNvbmRzLCBvciBgTlRCTF9QQVJNX01TX01BWGApLiBUaGlzIGlzIGdvb2Q7IGV4cGxpY2l0IGJvdW5kcyBhcmUgYWx3YXlzIGEgd2luLiBUaGUgdXNlIG9mIGBOTEFfUE9MSUNZX0ZVTExfUkFOR0VgIHdpdGggdGhlIGBubF9udGJsX3Bhcm1fbXNfcmFuZ2VgIHN1Z2dlc3RzIHRoYXQgTmV0bGluayBtZXNzYWdlIHBhcnNpbmcgaXMgYmVpbmcgbWFkZSBtb3JlIHJvYnVzdC4gVGhhdCBtYWtlcyBtZSBmZWVsIGJldHRlciBhYm91dCBnZW5lcmFsIHNlY3VyaXR5LgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIHdpdGhpbiBgbmVpZ2h0YmxfZHVtcF9pbmZvKClgLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCB1cGRhdGVzIHRoZSBkdW1waW5nIGxvZ2ljIHRvIG1hbmFnZSBkdW1wIGNvbnRpbnVhdGlvbiBhbmQgcmVzdGFydCBzdGF0ZXMgbW9yZSBleHBsaWNpdGx5IHdpdGggYGRlZmF1bHRfc2tpcGAuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IGR1bXBzIGNhbiBvZnRlbiBleHBvc2UgdnVsbmVyYWJpbGl0aWVzLiBJIGFsc28gc2VlIHRoYXQgdGhlcmUmIzM5O3MgYSByZWZpbmVtZW50IGluIHRoZSBpdGVyYXRpb24gbG9naWMsIHVzaW5nIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdWAgaW5zdGVhZCBvZiBgbGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JjdWAsIGFuZCB0aGF0IGJsYWNraG9sZS9udWxsIGRldmljZXMgYXJlIG5vdyBiZWluZyBleHBsaWNpdGx5IHNraXBwZWQuIEZpbmFsbHksIHRoZSBjb2RlIGFsc28gdXNlcyBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKClgIHRvIHNldCBhIG1heGltdW0gdmFsdWUgaW4gamlmZmllcyBmb3JtYXQuCgpOb3csIHRoaXMgaXMgd2hlcmUgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIFdoaWxlIHRoZSBjaGFuZ2VzIGFwcGVhciB0byBpbXByb3ZlIGNvZGUgY2xhcml0eSBhbmQgcG90ZW50aWFsbHkgZml4IGEgc3VidGxlIGJ1ZyBvciB0d28sIGR1bXAgcm91dGluZXMgYXJlIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gYmUgKmFic29sdXRlbHkqIGNlcnRhaW4gdGhhdCB0aGVzZSBjaGFuZ2VzIGhhdmVuJiMzOTt0IGludHJvZHVjZWQgYW55IG1lbW9yeSBsZWFrcyBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzIHdpdGhpbiB0aGUgYG5laWdodGJsX2R1bXBfaW5mb2AgZnVuY3Rpb24gb3IgcmVsYXRlZCBOZXRsaW5rIHByb2Nlc3NpbmcuIEEgTmV0bGluayBkdW1wIG1pZ2h0IGJlIGEgZ3JlYXQgdmVjdG9yIGZvciBhIHNlY3VyaXR5IGlzc3VlLCBzbyBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gc2VlIGhvdyB0aGUgbmV0bGluayBkdW1wIHdvcmtzLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgaG93IHRoaXMgbG9naWMgaXMgdXNlZCBhbmQgaG93IHRoZSBOZXRsaW5rIG1lc3NhZ2VzIGFyZSBidWlsdCBhbmQgcGFyc2VkLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIGRhdGEgaXMgYmVpbmcgcmVhZCBhbmQgd3JpdHRlbiBpbiBgbmVpZ2h0YmxfZHVtcF9pbmZvKClgIGFuZCBvdGhlciByZWxldmFudCBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcyB0byBtYWtlIGEgc291bmQganVkZ21lbnQgYWJvdXQgdGhlIGZ1enppbmcgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmVpZ2hib3VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI1NzU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yNTc2Olx0XHR9XG4yNTc3Olx0XG4yNTc4Olx0XHRpZiAobmxtc2dfYXR0cmxlbihubGgsIHNpemVvZigqbmR0bSkpKSB7XG4yNTc5Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SW52YWxpZCBkYXRhIGFmdGVyIGhlYWRlciBpbiBuZWlnaGJvciB0YWJsZSBkdW1wIHJlcXVlc3RcJiMzNDspO1xuMjU4MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI1ODE6XHRcdH1cbjI1ODI6XHRcbjI1ODM6XHRcdHJldHVybiAwO1xuMjU4NDpcdH1cbjI1ODU6XHRcbjI1ODY6XHRzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4yNTg3Olx0e1xuMjU4ODpcdFx0Y29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGggPSBjYi1cdTAwM2VubGg7XG4yNTg5Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuMjU5MDpcdFx0aW50IGRlZmF1bHRfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMl07XG4yNTkxOlx0XHRpbnQgbmVpZ2hfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMV07XG4yNTkyOlx0XHRpbnQgZmFtaWx5LCB0aWR4LCBuaWR4ID0gMDtcbjI1OTM6XHRcdGludCB0Ymxfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMF07XG4yNTk0Olx0XHRzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibDtcbjI1OTU6XHRcbjI1OTY6XHRcdGlmIChjYi1cdTAwM2VzdHJpY3RfY2hlY2spIHtcbjI1OTc6XHRcdFx0aW50IGVyciA9IG5laWdodGJsX3ZhbGlkX2R1bXBfaW5mbyhubGgsIGNiLVx1MDAzZWV4dGFjayk7XG4yNTk4Olx0XG4yNTk5Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4yNjAwOlx0XHRcdFx0cmV0dXJuIGVycjtcbjI2MDE6XHRcdH1cbjI2MDI6XHRcbjI2MDM6XHRcdGZhbWlseSA9ICgoc3RydWN0IHJ0Z2VubXNnICopbmxtc2dfZGF0YShubGgpKS1cdTAwM2VydGdlbl9mYW1pbHk7XG4yNjA0Olx0XG4yNjA1Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yNjA2Olx0XG4yNjA3Olx0XHRmb3IgKHRpZHggPSAwOyB0aWR4IFx1MDAzYyBORUlHSF9OUl9UQUJMRVM7IHRpZHgmIzQzOyYjNDM7KSB7XG4yNjA4Olx0XHRcdHN0cnVjdCBuZWlnaF9wYXJtcyAqcDtcbjI2MDk6XHRcbjI2MTA6XHRcdFx0dGJsID0gcmN1X2RlcmVmZXJlbmNlKG5laWdoX3RhYmxlc1t0aWR4XSk7XG4yNjExOlx0XHRcdGlmICghdGJsKVxuMjYxMjpcdFx0XHRcdGNvbnRpbnVlO1xuMjYxMzpcdFxuMjYxNDpcdFx0XHRpZiAodGlkeCBcdTAwM2MgdGJsX3NraXAgfHwgKGZhbWlseSBcdTAwMjZcdTAwMjYgdGJsLVx1MDAzZWZhbWlseSAhPSBmYW1pbHkpKVxuMjYxNTpcdFx0XHRcdGNvbnRpbnVlO1xuMjYxNjpcdFxuMjYxNzpcdFx0XHRpZiAoIWRlZmF1bHRfc2tpcCBcdTAwMjZcdTAwMjZcbjI2MTg6XHRcdFx0ICAgIG5laWdodGJsX2ZpbGxfaW5mbyhza2IsIHRibCwgTkVUTElOS19DQihjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbjI2MTk6XHRcdFx0XHRcdCAgICAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCBSVE1fTkVXTkVJR0hUQkwsXG4yNjIwOlx0XHRcdFx0XHQgICAgICAgTkxNX0ZfTVVMVEkpIFx1MDAzYyAwKVxuMjYyMTpcdFx0XHRcdGJyZWFrO1xuMjYyMjpcdFxuMjYyMzpcdFx0XHRkZWZhdWx0X3NraXAgPSAxO1xuMjYyNDpcdFxuMjYyNTpcdFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwLCBcdTAwMjZ0YmwtXHUwMDNlcGFybXNfbGlzdCwgbGlzdCkge1xuMjYyNjpcdFx0XHRcdGlmICghbmV0X2VxKG5laWdoX3Bhcm1zX25ldChwKSwgbmV0KSlcbjI2Mjc6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjYyODpcdFxuMjYyOTpcdFx0XHRcdGlmICghcC1cdTAwM2VkZXYgfHwgcC1cdTAwM2VkZXYgPT0gYmxhY2tob2xlX25ldGRldilcbjI2MzA6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMjYzMTpcdFxuMjYzMjpcdFx0XHRcdGlmIChuaWR4IFx1MDAzYyBuZWlnaF9za2lwKVxuMjYzMzpcdFx0XHRcdFx0Z290byBuZXh0O1xuMjYzNDpcdFxuMjYzNTpcdFx0XHRcdGlmIChuZWlnaHRibF9maWxsX3BhcmFtX2luZm8oc2tiLCB0YmwsIHAsXG4yNjM2Olx0XHRcdFx0XHRcdFx0ICAgICBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuMjYzNzpcdFx0XHRcdFx0XHRcdCAgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSxcbjI2Mzg6XHRcdFx0XHRcdFx0XHQgICAgIFJUTV9ORVdORUlHSFRCTCxcbjI2Mzk6XHRcdFx0XHRcdFx0XHQgICAgIE5MTV9GX01VTFRJKSBcdTAwM2MgMClcbjI2NDA6XHRcdFx0XHRcdGdvdG8gb3V0O1xuMjY0MTpcdFx0XHRuZXh0OlxuMjY0MjpcdFx0XHRcdG5pZHgmIzQzOyYjNDM7O1xuMjY0MzpcdFx0XHR9XG4yNjQ0Olx0XG4yNjQ1Olx0XHRcdG5laWdoX3NraXAgPSAwO1xuMjY0NjpcdFx0XHRuaWR4ID0gMDtcbjI2NDc6XHRcdFx0ZGVmYXVsdF9za2lwID0gMDtcbjI2NDg6XHRcdH1cbjI2NDk6XHRvdXQ6XG4yNjUwOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjI2NTE6XHRcbjI2NTI6XHRcdGNiLVx1MDAzZWFyZ3NbMF0gPSB0aWR4O1xuMjY1MzpcdFx0Y2ItXHUwMDNlYXJnc1sxXSA9IG5pZHg7XG4yNjU0Olx0XHRjYi1cdTAwM2VhcmdzWzJdID0gZGVmYXVsdF9za2lwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDE3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIE5laWdoYm9yIFRhYmxlIEZpbGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBuZWlnaGJvciB0YWJsZSBwb3B1bGF0aW9uIGxvZ2ljLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gY292ZXJpbmcgYWxsIHRoZSBiYXNlcy4gQmVmb3JlIEkgZ28gdG9vIGRlZXAsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgYG5laWdodGJsX2ZpbGxfaW5mb2AgYW5kIGBuZWlnaHRibF9maWxsX3BhcmFtX2luZm9gIHN0cnVjdHVyZXMgYW5kIGFzc29jaWF0ZWQgZnVuY3Rpb25zLiBJJiMzOTt2ZSBnb3QgYSBmZWVsaW5nIHRoZXJlJiMzOTtzIHNvbWV0aGluZyByZWxldmFudCBpbiBlaXRoZXIgdGhvc2Ugc3RydWN0dXJlcyBvciBhc3NvY2lhdGVkIHByb2Nlc3NpbmcuIEl0JiMzOTtzIGEga2V5IHNwb3QgYW5kIHRoZXJlIGFyZSBsaWtlbHkgcGFyYW1ldGVycyB0aGF0IGluZmx1ZW5jZSB0aGUgYmVoYXZpb3IuIEdvaW5nIG92ZXIgdGhlIHBhcmFtZXRlcnMgcmVsYXRlZCB0byB0aGUgZmlsbGluZyBwcm9jZXNzIHdpbGwgZ2l2ZSBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmaWxsaW5nIHByb2Nlc3MuIEJldHRlciB0byBjb25maXJtIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byB0aGVtIGJlZm9yZSBtb3ZpbmcgdG8gb3RoZXIgdGhpbmdzLiBJdCYjMzk7cyBhIGdvb2QgYXBwcm9hY2ggZm9yIG1ha2luZyBzdXJlIGFsbCBvZiB0aGUgZGlmZmVyZW50IG9wdGlvbnMgYXJlIGNvdmVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmVpZ2hib3VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDg1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0ODU6XHRcdFx0XHRjYXNlIE5EVFBBX01DQVNUX1BST0JFUzpcbjI0ODY6XHRcdFx0XHRcdE5FSUdIX1ZBUl9TRVQocCwgTUNBU1RfUFJPQkVTLFxuMjQ4NzpcdFx0XHRcdFx0XHQgICAgICBubGFfZ2V0X3UzMih0YnBbaV0pKTtcbjI0ODg6XHRcdFx0XHRcdGJyZWFrO1xuMjQ4OTpcdFx0XHRcdGNhc2UgTkRUUEFfTUNBU1RfUkVQUk9CRVM6XG4yNDkwOlx0XHRcdFx0XHRORUlHSF9WQVJfU0VUKHAsIE1DQVNUX1JFUFJPQkVTLFxuMjQ5MTpcdFx0XHRcdFx0XHQgICAgICBubGFfZ2V0X3UzMih0YnBbaV0pKTtcbjI0OTI6XHRcdFx0XHRcdGJyZWFrO1xuMjQ5MzpcdFx0XHRcdGNhc2UgTkRUUEFfQkFTRV9SRUFDSEFCTEVfVElNRTpcbjI0OTQ6XHRcdFx0XHRcdE5FSUdIX1ZBUl9TRVQocCwgQkFTRV9SRUFDSEFCTEVfVElNRSxcbjI0OTU6XHRcdFx0XHRcdFx0ICAgICAgbmxhX2dldF9tc2Vjcyh0YnBbaV0pKTtcbjI0OTY6XHRcdFx0XHRcdC8qIHVwZGF0ZSByZWFjaGFibGVfdGltZSBhcyB3ZWxsLCBvdGhlcndpc2UsIHRoZSBjaGFuZ2Ugd2lsbFxuMjQ5NzpcdFx0XHRcdFx0ICogb25seSBiZSBlZmZlY3RpdmUgYWZ0ZXIgdGhlIG5leHQgdGltZSBuZWlnaF9wZXJpb2RpY193b3JrXG4yNDk4Olx0XHRcdFx0XHQgKiBkZWNpZGVzIHRvIHJlY29tcHV0ZSBpdCAoY2FuIGJlIG11bHRpcGxlIG1pbnV0ZXMpXG4yNDk5Olx0XHRcdFx0XHQgKi9cbjI1MDA6XHRcdFx0XHRcdG5laWdoX3NldF9yZWFjaF90aW1lKHApO1xuMjUwMTpcdFx0XHRcdFx0YnJlYWs7XG4yNTAyOlx0XHRcdFx0Y2FzZSBORFRQQV9HQ19TVEFMRVRJTUU6XG4yNTAzOlx0XHRcdFx0XHRORUlHSF9WQVJfU0VUKHAsIEdDX1NUQUxFVElNRSxcbjI1MDQ6XHRcdFx0XHRcdFx0ICAgICAgbmxhX2dldF9tc2Vjcyh0YnBbaV0pKTtcbjI1MDU6XHRcdFx0XHRcdGJyZWFrO1xuMjUwNjpcdFx0XHRcdGNhc2UgTkRUUEFfREVMQVlfUFJPQkVfVElNRTpcbjI1MDc6XHRcdFx0XHRcdE5FSUdIX1ZBUl9TRVQocCwgREVMQVlfUFJPQkVfVElNRSxcbjI1MDg6XHRcdFx0XHRcdFx0ICAgICAgbmxhX2dldF9tc2Vjcyh0YnBbaV0pKTtcbjI1MDk6XHRcdFx0XHRcdGNhbGxfbmV0ZXZlbnRfbm90aWZpZXJzKE5FVEVWRU5UX0RFTEFZX1BST0JFX1RJTUVfVVBEQVRFLCBwKTtcbjI1MTA6XHRcdFx0XHRcdGJyZWFrO1xuMjUxMTpcdFx0XHRcdGNhc2UgTkRUUEFfSU5URVJWQUxfUFJPQkVfVElNRV9NUzpcbjI1MTI6XHRcdFx0XHRcdE5FSUdIX1ZBUl9TRVQocCwgSU5URVJWQUxfUFJPQkVfVElNRV9NUyxcbjI1MTM6XHRcdFx0XHRcdFx0ICAgICAgbmxhX2dldF9tc2Vjcyh0YnBbaV0pKTtcbjI1MTQ6XHRcdFx0XHRcdGJyZWFrO1xuMjUxNTpcdFx0XHRcdGNhc2UgTkRUUEFfUkVUUkFOU19USU1FOlxuMjUxNjpcdFx0XHRcdFx0TkVJR0hfVkFSX1NFVChwLCBSRVRSQU5TX1RJTUUsXG4yNTE3Olx0XHRcdFx0XHRcdCAgICAgIG5sYV9nZXRfbXNlY3ModGJwW2ldKSk7XG4yNTE4Olx0XHRcdFx0XHRicmVhaztcbjI1MTk6XHRcdFx0XHRjYXNlIE5EVFBBX0FOWUNBU1RfREVMQVk6XG4yNTIwOlx0XHRcdFx0XHRORUlHSF9WQVJfU0VUKHAsIEFOWUNBU1RfREVMQVksXG4yNTIxOlx0XHRcdFx0XHRcdCAgICAgIG5sYV9nZXRfbXNlY3ModGJwW2ldKSk7XG4yNTIyOlx0XHRcdFx0XHRicmVhaztcbjI1MjM6XHRcdFx0XHRjYXNlIE5EVFBBX1BST1hZX0RFTEFZOlxuMjUyNDpcdFx0XHRcdFx0TkVJR0hfVkFSX1NFVChwLCBQUk9YWV9ERUxBWSxcbjI1MjU6XHRcdFx0XHRcdFx0ICAgICAgbmxhX2dldF9tc2Vjcyh0YnBbaV0pKTtcbjI1MjY6XHRcdFx0XHRcdGJyZWFrO1xuMjUyNzpcdFx0XHRcdGNhc2UgTkRUUEFfTE9DS1RJTUU6XG4yNTI4Olx0XHRcdFx0XHRORUlHSF9WQVJfU0VUKHAsIExPQ0tUSU1FLFxuMjUyOTpcdFx0XHRcdFx0XHQgICAgICBubGFfZ2V0X21zZWNzKHRicFtpXSkpO1xuMjUzMDpcdFx0XHRcdFx0YnJlYWs7XG4yNTMxOlx0XHRcdFx0fVxuMjUzMjpcdFx0XHR9XG4yNTMzOlx0XHR9XG4yNTM0Olx0XG4yNTM1Olx0XHRlcnIgPSAtRU5PRU5UO1xuMjUzNjpcdFx0aWYgKCh0YltORFRBX1RIUkVTSDFdIHx8IHRiW05EVEFfVEhSRVNIMl0gfHxcbjI1Mzc6XHRcdCAgICAgdGJbTkRUQV9USFJFU0gzXSB8fCB0YltORFRBX0dDX0lOVEVSVkFMXSkgXHUwMDI2XHUwMDI2XG4yNTM4Olx0XHQgICAgIW5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSlcbjI1Mzk6XHRcdFx0Z290byBlcnJvdXRfdGJsX2xvY2s7XG4yNTQwOlx0XG4yNTQxOlx0XHRpZiAodGJbTkRUQV9USFJFU0gxXSlcbjI1NDI6XHRcdFx0V1JJVEVfT05DRSh0YmwtXHUwMDNlZ2NfdGhyZXNoMSwgbmxhX2dldF91MzIodGJbTkRUQV9USFJFU0gxXSkpO1xuMjU0MzpcdFxuMjU0NDpcdFx0aWYgKHRiW05EVEFfVEhSRVNIMl0pXG4yNTQ1Olx0XHRcdFdSSVRFX09OQ0UodGJsLVx1MDAzZWdjX3RocmVzaDIsIG5sYV9nZXRfdTMyKHRiW05EVEFfVEhSRVNIMl0pKTtcbjI1NDY6XHRcbjI1NDc6XHRcdGlmICh0YltORFRBX1RIUkVTSDNdKVxuMjU0ODpcdFx0XHRXUklURV9PTkNFKHRibC1cdTAwM2VnY190aHJlc2gzLCBubGFfZ2V0X3UzMih0YltORFRBX1RIUkVTSDNdKSk7XG4yNTQ5Olx0XG4yNTUwOlx0XHRpZiAodGJbTkRUQV9HQ19JTlRFUlZBTF0pXG4yNTUxOlx0XHRcdFdSSVRFX09OQ0UodGJsLVx1MDAzZWdjX2ludGVydmFsLCBubGFfZ2V0X21zZWNzKHRiW05EVEFfR0NfSU5URVJWQUxdKSk7XG4yNTUyOlx0XG4yNTUzOlx0XHRlcnIgPSAwO1xuMjU1NDpcdFxuMjU1NTpcdGVycm91dF90YmxfbG9jazpcbjI1NTY6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRibC1cdTAwM2Vsb2NrKTtcbjI1NTc6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjU1ODpcdGVycm91dDpcbjI1NTk6XHRcdHJldHVybiBlcnI7XG4yNTYwOlx0fVxuMjU2MTpcdFxuMjU2MjpcdHN0YXRpYyBpbnQgbmVpZ2h0YmxfdmFsaWRfZHVtcF9pbmZvKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuMjU2MzpcdFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjI1NjQ6XHR7XG4yNTY1Olx0XHRzdHJ1Y3QgbmR0bXNnICpuZHRtO1xuMjU2NjpcdFxuMjU2NzpcdFx0bmR0bSA9IG5sbXNnX3BheWxvYWQobmxoLCBzaXplb2YoKm5kdG0pKTtcbjI1Njg6XHRcdGlmICghbmR0bSkge1xuMjU2OTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ludmFsaWQgaGVhZGVyIGZvciBuZWlnaGJvciB0YWJsZSBkdW1wIHJlcXVlc3RcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzA4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgbWF0ZXJpYWw6CgoqKkRpZ2dpbmcgaW50byBgbmVpZ2h0YmxfZmlsbF9pbmZvYCBhbmQgYG5laWdodGJsX2ZpbGxfcGFyYW1faW5mb2AqKgoKUmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgbGluZXMgMjIwMC0yMzYwLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBhbmQgYmVoYXZpb3JzIG9mIGBuZWlnaHRibF9maWxsX2luZm9gIGFuZCBgbmVpZ2h0YmxfZmlsbF9wYXJhbV9pbmZvYCBmdW5jdGlvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGUgdXNlIGNhc2VzIG9mIHRoZXNlIGZ1bmN0aW9ucz8gVGhleSBhcmUgb2Z0ZW4gdXNlZCBpbiBzaW1pbGFyIGNvbnRleHRzLCBidXQgdGhlaXIgZGlmZmVyZW5jZXMgYXJlIGltcG9ydGFudCB0byBub3RlLiBJcyB0aGlzIGNvZGUgc2VnbWVudCBjYWxsaW5nIHRoZSBmdW5jdGlvbnMgaW4gYSB3YXkgdGhhdCBzdWdnZXN0cyBhIHN1YnRsZSBkaWZmZXJlbmNlIGluIHRoZWlyIGV4ZWN1dGlvbj8KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgJiMzOTtmaWxsJiMzOTsgbWVhbnMgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCBhYm91dCBwb3B1bGF0aW5nIGEgZGF0YSBzdHJ1Y3R1cmUsIGluaXRpYWxpemluZyBpdCwgb3IgdXBkYXRpbmcgZXhpc3RpbmcgZW50cmllcz8gVGhpcyBpcyBjcml0aWNhbCBmb3Iga25vd2luZyBob3cgdGhlc2UgZnVuY3Rpb25zIGNvbnRyaWJ1dGUgdG8gdGhlIGxhcmdlciBwaWN0dXJlLiBJIHdpbGwgYmUgbG9va2luZyBvdXQgZm9yIGNvbW1vbiBwYXR0ZXJucyBhbmQgYXJndW1lbnRzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGV5IHdvcmsuCgpJJiMzOTtsbCBjaGVjayB0aGUgY2FsbHMgdG8gdW5kZXJzdGFuZCB0aGUgYXJndW1lbnQgc2lnbmF0dXJlcy4gQXJlIHRoZXkgdGFraW5nIHNpbWlsYXIgYXJndW1lbnRzLCBvciBkbyB0aGV5IGV4cGVjdCBkaXN0aW5jdCBwYXJhbWV0ZXJzPyBBbmQgb2YgY291cnNlLCBJIG11c3Qga25vdywgYXJlIHdlIGhhbmRsaW5nIGNhc2VzIHdpdGggdmFyeWluZyBtZW1vcnkgYWxsb2NhdGlvbnM/IEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyB1dGlsaXplZCBzbyBJIGtub3cgd2hlbiB0byBiZSBjb25jZXJuZWQgYWJvdXQgb3ZlcmZsb3cgZXJyb3JzLiBUaGlzIHdpbGwgaGVscCBtZSB0byBkZWNpZGUgd2hldGhlciB0aGlzIGlzIGEgcGxhY2UgdG8gZm9jdXMgb24gZnVydGhlciBvcHRpbWl6YXRpb24sIHJlZmFjdG9yaW5nLCBvciBzaW1wbHkgY29uZmlybWluZyBjb3JyZWN0IGJlaGF2aW9yLgoKTW9yZSB0aGFuIGxpa2VseSwgSSYjMzk7bSBleHBlY3RpbmcgYG5laWdodGJsX2ZpbGxfaW5mb2AgdG8gZG8gYSBtb3JlIGdlbmVyYWwgZGF0YSBwb3B1bGF0aW9uLCBhbmQgYG5laWdodGJsX2ZpbGxfcGFyYW1faW5mb2AgdG8gZm9jdXMgb24gYSBwYXJ0aWN1bGFyIHNldCBvZiBwYXJhbWV0ZXJzIHdpdGhpbiB0aGUgbGFyZ2VyIHN0cnVjdHVyZS4gVGhhdCYjMzk7cyBteSBzdGFydGluZyBhc3N1bXB0aW9uLCBidXQgdGhlIGFjdHVhbCBjb2RlIHdpbGwgZGljdGF0ZSBpZiB0aGF0JiMzOTtzIGFjY3VyYXRlLiBJJiMzOTttIGdvaW5nIHRvIG1ha2Ugc3VyZSB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byBzZWUgaWYgaXQgaXMgdXNlZCBmb3Igc29tZXRoaW5nIEkgaGF2ZW4mIzM5O3QgY29uc2lkZXJlZC4KCkkmIzM5O20gcmVhZHkgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL25laWdoYm91ci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjAwOlx0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBORFRQQV9SRUZDTlQsIHJlZmNvdW50X3JlYWQoXHUwMDI2cGFybXMtXHUwMDNlcmVmY250KSkgfHxcbjIyMDE6XHRcdCAgICBubGFfcHV0X3UzMihza2IsIE5EVFBBX1FVRVVFX0xFTkJZVEVTLFxuMjIwMjpcdFx0XHRcdE5FSUdIX1ZBUihwYXJtcywgUVVFVUVfTEVOX0JZVEVTKSkgfHxcbjIyMDM6XHRcdCAgICAvKiBhcHByb3hpbWF0aXZlIHZhbHVlIGZvciBkZXByZWNhdGVkIFFVRVVFX0xFTiAoaW4gcGFja2V0cykgKi9cbjIyMDQ6XHRcdCAgICBubGFfcHV0X3UzMihza2IsIE5EVFBBX1FVRVVFX0xFTixcbjIyMDU6XHRcdFx0XHRORUlHSF9WQVIocGFybXMsIFFVRVVFX0xFTl9CWVRFUykgLyBTS0JfVFJVRVNJWkUoRVRIX0ZSQU1FX0xFTikpIHx8XG4yMjA2Olx0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBORFRQQV9QUk9YWV9RTEVOLCBORUlHSF9WQVIocGFybXMsIFBST1hZX1FMRU4pKSB8fFxuMjIwNzpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgTkRUUEFfQVBQX1BST0JFUywgTkVJR0hfVkFSKHBhcm1zLCBBUFBfUFJPQkVTKSkgfHxcbjIyMDg6XHRcdCAgICBubGFfcHV0X3UzMihza2IsIE5EVFBBX1VDQVNUX1BST0JFUyxcbjIyMDk6XHRcdFx0XHRORUlHSF9WQVIocGFybXMsIFVDQVNUX1BST0JFUykpIHx8XG4yMjEwOlx0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBORFRQQV9NQ0FTVF9QUk9CRVMsXG4yMjExOlx0XHRcdFx0TkVJR0hfVkFSKHBhcm1zLCBNQ0FTVF9QUk9CRVMpKSB8fFxuMjIxMjpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgTkRUUEFfTUNBU1RfUkVQUk9CRVMsXG4yMjEzOlx0XHRcdFx0TkVJR0hfVkFSKHBhcm1zLCBNQ0FTVF9SRVBST0JFUykpIHx8XG4yMjE0Olx0XHQgICAgbmxhX3B1dF9tc2Vjcyhza2IsIE5EVFBBX1JFQUNIQUJMRV9USU1FLCBSRUFEX09OQ0UocGFybXMtXHUwMDNlcmVhY2hhYmxlX3RpbWUpLFxuMjIxNTpcdFx0XHRcdCAgTkRUUEFfUEFEKSB8fFxuMjIxNjpcdFx0ICAgIG5sYV9wdXRfbXNlY3Moc2tiLCBORFRQQV9CQVNFX1JFQUNIQUJMRV9USU1FLFxuMjIxNzpcdFx0XHRcdCAgTkVJR0hfVkFSKHBhcm1zLCBCQVNFX1JFQUNIQUJMRV9USU1FKSwgTkRUUEFfUEFEKSB8fFxuMjIxODpcdFx0ICAgIG5sYV9wdXRfbXNlY3Moc2tiLCBORFRQQV9HQ19TVEFMRVRJTUUsXG4yMjE5Olx0XHRcdFx0ICBORUlHSF9WQVIocGFybXMsIEdDX1NUQUxFVElNRSksIE5EVFBBX1BBRCkgfHxcbjIyMjA6XHRcdCAgICBubGFfcHV0X21zZWNzKHNrYiwgTkRUUEFfREVMQVlfUFJPQkVfVElNRSxcbjIyMjE6XHRcdFx0XHQgIE5FSUdIX1ZBUihwYXJtcywgREVMQVlfUFJPQkVfVElNRSksIE5EVFBBX1BBRCkgfHxcbjIyMjI6XHRcdCAgICBubGFfcHV0X21zZWNzKHNrYiwgTkRUUEFfUkVUUkFOU19USU1FLFxuMjIyMzpcdFx0XHRcdCAgTkVJR0hfVkFSKHBhcm1zLCBSRVRSQU5TX1RJTUUpLCBORFRQQV9QQUQpIHx8XG4yMjI0Olx0XHQgICAgbmxhX3B1dF9tc2Vjcyhza2IsIE5EVFBBX0FOWUNBU1RfREVMQVksXG4yMjI1Olx0XHRcdFx0ICBORUlHSF9WQVIocGFybXMsIEFOWUNBU1RfREVMQVkpLCBORFRQQV9QQUQpIHx8XG4yMjI2Olx0XHQgICAgbmxhX3B1dF9tc2Vjcyhza2IsIE5EVFBBX1BST1hZX0RFTEFZLFxuMjIyNzpcdFx0XHRcdCAgTkVJR0hfVkFSKHBhcm1zLCBQUk9YWV9ERUxBWSksIE5EVFBBX1BBRCkgfHxcbjIyMjg6XHRcdCAgICBubGFfcHV0X21zZWNzKHNrYiwgTkRUUEFfTE9DS1RJTUUsXG4yMjI5Olx0XHRcdFx0ICBORUlHSF9WQVIocGFybXMsIExPQ0tUSU1FKSwgTkRUUEFfUEFEKSB8fFxuMjIzMDpcdFx0ICAgIG5sYV9wdXRfbXNlY3Moc2tiLCBORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TLFxuMjIzMTpcdFx0XHRcdCAgTkVJR0hfVkFSKHBhcm1zLCBJTlRFUlZBTF9QUk9CRV9USU1FX01TKSwgTkRUUEFfUEFEKSlcbjIyMzI6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4yMjMzOlx0XHRyZXR1cm4gbmxhX25lc3RfZW5kKHNrYiwgbmVzdCk7XG4yMjM0Olx0XG4yMjM1Olx0bmxhX3B1dF9mYWlsdXJlOlxuMjIzNjpcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgbmVzdCk7XG4yMjM3Olx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuMjIzODpcdH1cbjIyMzk6XHRcbjIyNDA6XHRzdGF0aWMgaW50IG5laWdodGJsX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCxcbjIyNDE6XHRcdFx0XHQgICAgICB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgdHlwZSwgaW50IGZsYWdzKVxuMjI0MjpcdHtcbjIyNDM6XHRcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xuMjI0NDpcdFx0c3RydWN0IG5kdG1zZyAqbmR0bXNnO1xuMjI0NTpcdFxuMjI0NjpcdFx0bmxoID0gbmxtc2dfcHV0KHNrYiwgcGlkLCBzZXEsIHR5cGUsIHNpemVvZigqbmR0bXNnKSwgZmxhZ3MpO1xuMjI0NzpcdFx0aWYgKG5saCA9PSBOVUxMKVxuMjI0ODpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuMjI0OTpcdFxuMjI1MDpcdFx0bmR0bXNnID0gbmxtc2dfZGF0YShubGgpO1xuMjI1MTpcdFx0bmR0bXNnLVx1MDAzZW5kdG1fZmFtaWx5ID0gdGJsLVx1MDAzZWZhbWlseTtcbjIyNTI6XHRcdG5kdG1zZy1cdTAwM2VuZHRtX3BhZDEgICA9IDA7XG4yMjUzOlx0XHRuZHRtc2ctXHUwMDNlbmR0bV9wYWQyICAgPSAwO1xuMjI1NDpcdFxuMjI1NTpcdFx0aWYgKG5sYV9wdXRfc3RyaW5nKHNrYiwgTkRUQV9OQU1FLCB0YmwtXHUwMDNlaWQpIHx8XG4yMjU2Olx0XHQgICAgbmxhX3B1dF9tc2Vjcyhza2IsIE5EVEFfR0NfSU5URVJWQUwsIFJFQURfT05DRSh0YmwtXHUwMDNlZ2NfaW50ZXJ2YWwpLFxuMjI1NzpcdFx0XHRcdCAgTkRUQV9QQUQpIHx8XG4yMjU4Olx0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBORFRBX1RIUkVTSDEsIFJFQURfT05DRSh0YmwtXHUwMDNlZ2NfdGhyZXNoMSkpIHx8XG4yMjU5Olx0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBORFRBX1RIUkVTSDIsIFJFQURfT05DRSh0YmwtXHUwMDNlZ2NfdGhyZXNoMikpIHx8XG4yMjYwOlx0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBORFRBX1RIUkVTSDMsIFJFQURfT05DRSh0YmwtXHUwMDNlZ2NfdGhyZXNoMykpKVxuMjI2MTpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjIyNjI6XHRcdHtcbjIyNjM6XHRcdFx0dW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzO1xuMjI2NDpcdFx0XHRsb25nIGZsdXNoX2RlbHRhID0gbm93IC0gUkVBRF9PTkNFKHRibC1cdTAwM2VsYXN0X2ZsdXNoKTtcbjIyNjU6XHRcdFx0bG9uZyByYW5kX2RlbHRhID0gbm93IC0gUkVBRF9PTkNFKHRibC1cdTAwM2VsYXN0X3JhbmQpO1xuMjI2NjpcdFx0XHRzdHJ1Y3QgbmVpZ2hfaGFzaF90YWJsZSAqbmh0O1xuMjI2NzpcdFx0XHRzdHJ1Y3QgbmR0X2NvbmZpZyBuZGMgPSB7XG4yMjY4Olx0XHRcdFx0Lm5kdGNfa2V5X2xlblx0XHQ9IHRibC1cdTAwM2VrZXlfbGVuLFxuMjI2OTpcdFx0XHRcdC5uZHRjX2VudHJ5X3NpemVcdD0gdGJsLVx1MDAzZWVudHJ5X3NpemUsXG4yMjcwOlx0XHRcdFx0Lm5kdGNfZW50cmllc1x0XHQ9IGF0b21pY19yZWFkKFx1MDAyNnRibC1cdTAwM2VlbnRyaWVzKSxcbjIyNzE6XHRcdFx0XHQubmR0Y19sYXN0X2ZsdXNoXHQ9IGppZmZpZXNfdG9fbXNlY3MoZmx1c2hfZGVsdGEpLFxuMjI3MjpcdFx0XHRcdC5uZHRjX2xhc3RfcmFuZFx0XHQ9IGppZmZpZXNfdG9fbXNlY3MocmFuZF9kZWx0YSksXG4yMjczOlx0XHRcdFx0Lm5kdGNfcHJveHlfcWxlblx0PSBSRUFEX09OQ0UodGJsLVx1MDAzZXByb3h5X3F1ZXVlLnFsZW4pLFxuMjI3NDpcdFx0XHR9O1xuMjI3NTpcdFxuMjI3NjpcdFx0XHRuaHQgPSByY3VfZGVyZWZlcmVuY2UodGJsLVx1MDAzZW5odCk7XG4yMjc3Olx0XHRcdG5kYy5uZHRjX2hhc2hfcm5kID0gbmh0LVx1MDAzZWhhc2hfcm5kWzBdO1xuMjI3ODpcdFx0XHRuZGMubmR0Y19oYXNoX21hc2sgPSAoKDEgXHUwMDNjXHUwMDNjIG5odC1cdTAwM2VoYXNoX3NoaWZ0KSAtIDEpO1xuMjI3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA5NAoJCQkJCQkJb3V0cHV0OiAxODEKCQkJCQkJCXRob3VnaHRzOiA3ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IEEgUXVpY2sgTG9vayoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLCBJIG5lZWQgdG8gYmUgc3VyZSBldmVyeXRoaW5nIGlzIHNvbGlkLiBGaXJzdCwgaXQgbG9va3MgbGlrZSB0aGVyZSBhcmUgYSBmZXcga2V5IGFyZWFzIG9mIGZvY3VzOgoKMS4gICoqTmV0bGluayBQb2xpY3kgVXBkYXRlKio6IFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLiBUaGUgYFtORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TXWAgcGFyYW1ldGVyIGluIGBubF9udGJsX3Bhcm1fcG9saWN5YCBpcyBnZXR0aW5nIGEgZGVmaW5lZCByYW5nZSAobWluPTEsIG1heD1OVEJMX1BBUk1fTVNfTUFYKSB1c2luZyBgTkxBX1BPTElDWV9GVUxMX1JBTkdFYCwgd2hpY2ggaXMgZ29vZCBwcmFjdGljZS4KCjIuICAqKlN5c2N0bCBVcGRhdGUqKjogIFRoZSBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCBmdW5jdGlvbiBpcyBjb3JyZWN0bHkgc2V0dGluZyBhbiB1cHBlciBib3VuZCBvbiB0aGUgc3lzY3RsIHZhbHVlIHVzaW5nIGB0bXAuZXh0cmEyID0gJmFtcDttYXg7YC4gTWFrZXMgc2Vuc2UuIEVuc3VyaW5nIGNvbnRyb2xsZWQgdXBwZXIgYm91bmRzIGlzIGtleSBmb3Igc3RhYmlsaXR5IGFuZCBzZWN1cml0eS4KCjMuICAqKkR1bXAgQ29udGludWF0aW9uIEJ1ZyBGaXgqKjogIFRoaXMgaXMgdGhlIG1vc3QgaW50ZXJlc3RpbmcgcGFydC4gSXQgYXBwZWFycyB0aGVyZSB3YXMgYSBidWcgaW4gaG93IGBuZWlnaHRibF9kdW1wX2luZm9gIGhhbmRsZWQgZHVtcGluZyB0aGUgbmVpZ2hib3IgdGFibGUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggY29udGludWF0aW9uIChlLmcuLCB3aGVuIHRoZSBidWZmZXIgZmlsbHMgdXApLiBQcmV2aW91c2x5LCBgY2ItJmd0O2FyZ3NbMF1gIHRyYWNrZWQgYHRpZHhgIGFuZCBgY2ItJmd0O2FyZ3NbMV1gIHRyYWNrZWQgYG5laWdoX3NraXBgLCBidXQgaWYgdGhlIGJ1ZmZlciByYW4gb3V0IGluIHRoZSBtaWRkbGUgb2YgcGFybXNfbGlzdCwgaXQgd291bGQgcmVkdW1wIGluZm8gaWYgbm90IHByb3Blcmx5IHNraXBwZWQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBkZWZhdWx0X3NraXAgPSBjYi0mZ3Q7YXJnc1syXTtgIHRvIGNvcnJlY3RseSB0cmFjayBhbmQgc2tpcCB0aGUgdGFibGUgZGVmYXVsdCBpbmZvLCBwYXJ0aWN1bGFybHkgYWZ0ZXIgdGhlIGJ1ZmZlciBmaWxscy4gSXQgYWxzbyBlbnN1cmVzIGNsZWFuIGl0ZXJhdGlvbiBvZiBgcGFybXNfbGlzdGAgYW5kIHNraXBzIHNwZWNpYWwgY2FzZXMgbGlrZSBgYmxhY2tob2xlX25ldGRldmAgb3IgTlVMTCBkZXZpY2VzLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBhbmQgdGhpbmsgYWJvdXQgYW55IHBvdGVudGlhbCBpc3N1ZXM6CgoqICAgKipVbmluaXRpYWxpemVkIE1lbW9yeSBSZWFkcyBvciBMZWFrcyoqOiAgRXZlcnl0aGluZyBzZWVtcyB0byBiZSBpbml0aWFsaXplZCBwcm9wZXJseS4gVGhlIHZhcmlhYmxlcyBpbiBgbmVpZ2h0YmxfZHVtcF9pbmZvYCBhcmUgYWxsIGluaXRpYWxpemVkIGFuZCB0aGUgYGNiLSZndDthcmdzYCBhcnJheSBpcyB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBuZXRsaW5rIGR1bXAgc3Vic3lzdGVtLCBhcyBpdCBzaG91bGQgYmUuIFRoZSBgbWluYCBhbmQgYG1heGAgdmFyaWFibGVzIGluIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgdGhlIGBubF9udGJsX3Bhcm1fbXNfcmFuZ2VgIHN0cnVjdCBpcyBzdGF0aWNhbGx5IGluaXRpYWxpemVkLiBHb29kLCBnb29kLCBnb29kLgoqICAgKipCdWZmZXIgT3ZlcnJ1bnMvVW5pbml0aWFsaXplZCBTdHJ1Y3R1cmVzL1BhZGRpbmcqKjogIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGZpZWxkcyBvciBzdHJ1Y3RzIHRoYXQgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZSBjb25zdHJ1Y3Rpb24gb2YgbmV0bGluayBtZXNzYWdlcyBpbiBgbmVpZ2h0YmxfZmlsbF9pbmZvYCBhbmQgYG5laWdodGJsX2ZpbGxfcGFyYW1faW5mb2AgcmVtYWluIHVuY2hhbmdlZCwgZXhjZXB0IGZvciB0aGUgaXRlcmF0aW9uIGFuZCBza2lwIGhhbmRsaW5nLiBObyByZWQgZmxhZ3MgaGVyZS4KCkFscmlnaHQsIHNvIHRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byBjaGVjayBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgdnVsbmVyYWJpbGl0eSBpbiB0ZXJtcyBvZiB0aGUga2VybmVsIHNhbml0aXplcnMuIFNvLCBkb2VzIGFueXRoaW5nIGhlcmUgbmVlZCBLTVNBTiBvciBpcyBpdCBjb3ZlcmVkIGJ5IEtBU0FOPwoKKiAgICoqS0FTQU4gLyBMT0NLREVQIC8gVUJTQU4gQ292ZXJhZ2UqKjogS0FTQU4gYWxyZWFkeSBjb3ZlcnMgUkNVIGxpc3QgdHJhdmVyc2FscyBhbmQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gU2luY2UgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgb3IgdW5pbml0aWFsaXplZCBkYXRhIGFjY2VzcyByaXNrcywgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSBoZXJlLiBUaGlzIGlzIGEgY3J1Y2lhbCBkaXN0aW5jdGlvbi4KCioqVGhlcmVmb3JlLCBOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZS4qKgoKTm93LCBsZXQmIzM5O3MgZG8gYSBmaW5hbCBjaGVjazoKCiogICBJJiMzOTtsbCBiZSB1c2luZyBgc2V0LXJlc3VsdHMgdG9vbGAgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KKiAgIGBOZWVkc0tNU0FOYDogRmFsc2UuCiogICBgS01TQU5SZWFzb25pbmdgOiBEZXRhaWxlZCBhYm92ZSwgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eS4KClRoaXMgYWxsIGxvb2tzIGdvb2QgdG8gbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiByYW5nZSBjaGVja3MgKG1pbi9tYXgpIGZvciB0aGUgbmVpZ2hib3IgdGFibGUgaW50ZXJ2YWxfcHJvYmVfdGltZV9tcyBwYXJhbWV0ZXIgdmlhIG5ldGxpbmsgcG9saWN5IGFuZCBzeXNjdGwsIGFuZCBmaXhlcyBuZXRsaW5rIGR1bXAgcmVzdW1wdGlvbiBzdGF0ZSB0cmFja2luZyBpbiBuZWlnaHRibF9kdW1wX2luZm8oKSB1c2luZyBjYi1cdTAwM2VhcmdzWzJdICh3aGljaCBpcyB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBuZXRsaW5rIGR1bXAgc3Vic3lzdGVtKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyAobWluLCBtYXgsIGRlZmF1bHRfc2tpcCwgbmlkeCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gbmV0bGluayBkdW1wIGl0ZXJhdGlvbiAoc3VjaCBhcyBsaXN0IHRyYXZlcnNhbCBvciBib3VuZHMgZXJyb3JzKSBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiByYW5nZSBjaGVja3MgKG1pbi9tYXgpIGZvciB0aGUgbmVpZ2hib3IgdGFibGUgaW50ZXJ2YWxfcHJvYmVfdGltZV9tcyBwYXJhbWV0ZXIgdmlhIG5ldGxpbmsgcG9saWN5IGFuZCBzeXNjdGwsIGFuZCBmaXhlcyBuZXRsaW5rIGR1bXAgcmVzdW1wdGlvbiBzdGF0ZSB0cmFja2luZyBpbiBuZWlnaHRibF9kdW1wX2luZm8oKSB1c2luZyBjYi1cdTAwM2VhcmdzWzJdICh3aGljaCBpcyB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBuZXRsaW5rIGR1bXAgc3Vic3lzdGVtKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyAobWluLCBtYXgsIGRlZmF1bHRfc2tpcCwgbmlkeCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSBhcmUgaW50cm9kdWNlZC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gbmV0bGluayBkdW1wIGl0ZXJhdGlvbiAoc3VjaCBhcyBsaXN0IHRyYXZlcnNhbCBvciBib3VuZHMgZXJyb3JzKSBhcmUgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTBUMDA6MDU6NTAuNzM3MTE5NDQ5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI1MjIxMTY4OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCIsXG4gICAgXCJTWVNDVExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZWlnaHRibF9kdW1wX2luZm9cIixcbiAgICBcIm5laWdodGJsX3NldFwiLFxuICAgIFwibmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gcmFuZ2UgY2hlY2tzIChtaW4vbWF4KSBmb3IgdGhlIG5laWdoYm9yIHRhYmxlIGludGVydmFsX3Byb2JlX3RpbWVfbXMgcGFyYW1ldGVyIHZpYSBuZXRsaW5rIHBvbGljeSBhbmQgc3lzY3RsLCBhbmQgZml4ZXMgbmV0bGluayBkdW1wIHJlc3VtcHRpb24gc3RhdGUgdHJhY2tpbmcgaW4gbmVpZ2h0YmxfZHVtcF9pbmZvKCkgdXNpbmcgY2ItXFx1MDAzZWFyZ3NbMl0gKHdoaWNoIGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIG5ldGxpbmsgZHVtcCBzdWJzeXN0ZW0pLiBBbGwgbG9jYWwgdmFyaWFibGVzIChtaW4sIG1heCwgZGVmYXVsdF9za2lwLCBuaWR4KSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgbm8gbmV3IGRhdGEgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBuZXRsaW5rIGR1bXAgaXRlcmF0aW9uIChzdWNoIGFzIGxpc3QgdHJhdmVyc2FsIG9yIGJvdW5kcyBlcnJvcnMpIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgaW4gbmV0L2NvcmUvbmVpZ2hib3VyLmM6IGl0IHVwZGF0ZXMgdGhlIG5ldGxpbmsgYXR0cmlidXRlIHBvbGljeSBhbmQgcHJvYyBzeXNjdGwgaGFuZGxlciB0byBlbmZvcmNlIHVwcGVyIGJvdW5kcyBvbiBpbnRlcnZhbF9wcm9iZV90aW1lX21zLCBhbmQgcmVmYWN0b3JzL2ZpeGVzIHRoZSBuZWlnaGJvciB0YWJsZSBkdW1wIHBhZ2luYXRpb24gbG9naWMgaW4gbmVpZ2h0YmxfZHVtcF9pbmZvLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBydG5ldGxpbmsgKFJUTV9HRVRORUlHSFRCTCAvIFJUTV9TRVRORUlHSFRCTCkgYW5kIHByb2NmcyBzeXNjdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAwOjA1OjUwLjczNzEyNDU2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDE3MDkyNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyY2IzMTE1YTRmODA2MzAyMzIzMWNhN2Y2ZGRhOWQ4YjhjNDlmZWE2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDAwOjA1OjQ5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1uZWlnaC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LW5laWdoLnlhbWxcXG5pbmRleCAwZjQ2ZWYzMTM1OTA1Li5jOGU1NWM5OGQ1NjQ5IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1uZWlnaC55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LW5laWdoLnlhbWxcXG5AQCAtMzQxLDYgKzM0MSw5IEBAIGF0dHJpYnV0ZS1zZXRzOlxcbiAgICAgICAtXFxuICAgICAgICAgbmFtZTogaW50ZXJ2YWwtcHJvYmUtdGltZS1tc1xcbiAgICAgICAgIHR5cGU6IHU2NFxcbisgICAgICAgIGNoZWNrczpcXG4rICAgICAgICAgIG1pbjogMVxcbisgICAgICAgICAgbWF4OiA4NjQwMDAwMFxcbiBcXG4gb3BlcmF0aW9uczpcXG4gICBlbnVtLW1vZGVsOiBkaXJlY3Rpb25hbFxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XFxuaW5kZXggMjA4ZjQ2OTY3ZWU1OS4uYjA1ODI5ZTQ0ZDhmYyAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XFxuQEAgLTI0OCw3ICsyNDgsNyBAQCBuZWlnaC9kZWZhdWx0L3VucmVzX3FsZW4gLSBJTlRFR0VSXFxuIFxcbiBuZWlnaC9kZWZhdWx0L2ludGVydmFsX3Byb2JlX3RpbWVfbXMgLSBJTlRFR0VSXFxuIFxcdFRoZSBwcm9iZSBpbnRlcnZhbCBmb3IgbmVpZ2hib3IgZW50cmllcyB3aXRoIE5URl9NQU5BR0VEIGZsYWcsXFxuLVxcdHRoZSBtaW4gdmFsdWUgaXMgMS5cXG4rXFx0dGhlIG1pbiB2YWx1ZSBpcyAxLCBhbmQgdGhlIG1heCB2YWx1ZSBpcyA4NjQwMDAwMCAoMSBkYXkpLlxcbiBcXG4gXFx0RGVmYXVsdDogNTAwMFxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuY1xcbmluZGV4IDEzNDljMGVlZGI2NDIuLjc0NDgzMjBmN2FkNTIgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvbmVpZ2hib3VyLmNcXG4rKysgYi9uZXQvY29yZS9uZWlnaGJvdXIuY1xcbkBAIC0yMzU5LDYgKzIzNTksMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX25laWdodGJsX3BvbGljeVtORFRBX01BWCsxXSA9IHtcXG4gXFx0W05EVEFfUEFSTVNdXFx0XFx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbiB9O1xcbiBcXG4rI2RlZmluZSBOVEJMX1BBUk1fTVNfTUFYXFx0KDI0ICogNjAgKiA2MCAqIE1TRUNfUEVSX1NFQylcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIG5sX250YmxfcGFybV9tc19yYW5nZSA9IHtcXG4rXFx0Lm1pbiA9IDEsXFxuK1xcdC5tYXggPSBOVEJMX1BBUk1fTVNfTUFYLFxcbit9O1xcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYKzFdID0ge1xcbiBcXHRbTkRUUEFfSUZJTkRFWF1cXHRcXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuIFxcdFtORFRQQV9RVUVVRV9MRU5dXFx0XFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbkBAIC0yMzc1LDcgKzIzODIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmxfbnRibF9wYXJtX3BvbGljeVtORFRQQV9NQVgrMV0gPSB7XFxuIFxcdFtORFRQQV9BTllDQVNUX0RFTEFZXVxcdFxcdD0geyAudHlwZSA9IE5MQV9VNjQgfSxcXG4gXFx0W05EVFBBX1BST1hZX0RFTEFZXVxcdFxcdD0geyAudHlwZSA9IE5MQV9VNjQgfSxcXG4gXFx0W05EVFBBX0xPQ0tUSU1FXVxcdFxcdD0geyAudHlwZSA9IE5MQV9VNjQgfSxcXG4tXFx0W05EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNdXFx0PSB7IC50eXBlID0gTkxBX1U2NCwgLm1pbiA9IDEgfSxcXG4rXFx0W05EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNdXFx0PSBOTEFfUE9MSUNZX0ZVTExfUkFOR0UoTkxBX1U2NCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNm5sX250YmxfcGFybV9tc19yYW5nZSksXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IG5laWdodGJsX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5AQCAtMjU3OSw5ICsyNTg3LDEwIEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IGNiLVxcdTAwM2VubGg7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbitcXHRpbnQgZGVmYXVsdF9za2lwID0gY2ItXFx1MDAzZWFyZ3NbMl07XFxuK1xcdGludCBuZWlnaF9za2lwID0gY2ItXFx1MDAzZWFyZ3NbMV07XFxuIFxcdGludCBmYW1pbHksIHRpZHgsIG5pZHggPSAwO1xcbiBcXHRpbnQgdGJsX3NraXAgPSBjYi1cXHUwMDNlYXJnc1swXTtcXG4tXFx0aW50IG5laWdoX3NraXAgPSBjYi1cXHUwMDNlYXJnc1sxXTtcXG4gXFx0c3RydWN0IG5laWdoX3RhYmxlICp0Ymw7XFxuIFxcbiBcXHRpZiAoY2ItXFx1MDAzZXN0cmljdF9jaGVjaykge1xcbkBAIC0yNjA1LDE3ICsyNjE0LDIxIEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gXFx0XFx0aWYgKHRpZHggXFx1MDAzYyB0Ymxfc2tpcCB8fCAoZmFtaWx5IFxcdTAwMjZcXHUwMDI2IHRibC1cXHUwMDNlZmFtaWx5ICE9IGZhbWlseSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0aWYgKG5laWdodGJsX2ZpbGxfaW5mbyhza2IsIHRibCwgTkVUTElOS19DQihjYi1cXHUwMDNlc2tiKS5wb3J0aWQsXFxuK1xcdFxcdGlmICghZGVmYXVsdF9za2lwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBuZWlnaHRibF9maWxsX2luZm8oc2tiLCB0YmwsIE5FVExJTktfQ0IoY2ItXFx1MDAzZXNrYikucG9ydGlkLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIFJUTV9ORVdORUlHSFRCTCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIE5MTV9GX01VTFRJKSBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4tXFx0XFx0bmlkeCA9IDA7XFxuLVxcdFxcdHAgPSBsaXN0X25leHRfZW50cnkoXFx1MDAyNnRibC1cXHUwMDNlcGFybXMsIGxpc3QpO1xcbi1cXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb21fcmN1KHAsIFxcdTAwMjZ0YmwtXFx1MDAzZXBhcm1zX2xpc3QsIGxpc3QpIHtcXG4rXFx0XFx0ZGVmYXVsdF9za2lwID0gMTtcXG4rXFxuK1xcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsIFxcdTAwMjZ0YmwtXFx1MDAzZXBhcm1zX2xpc3QsIGxpc3QpIHtcXG4gXFx0XFx0XFx0aWYgKCFuZXRfZXEobmVpZ2hfcGFybXNfbmV0KHApLCBuZXQpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuK1xcdFxcdFxcdGlmICghcC1cXHUwMDNlZGV2IHx8IHAtXFx1MDAzZWRldiA9PSBibGFja2hvbGVfbmV0ZGV2KVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuIFxcdFxcdFxcdGlmIChuaWR4IFxcdTAwM2MgbmVpZ2hfc2tpcClcXG4gXFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbiBcXG5AQCAtMjYzMCwxMiArMjY0MywxNSBAQCBzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdG5laWdoX3NraXAgPSAwO1xcbitcXHRcXHRuaWR4ID0gMDtcXG4rXFx0XFx0ZGVmYXVsdF9za2lwID0gMDtcXG4gXFx0fVxcbiBvdXQ6XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0Y2ItXFx1MDAzZWFyZ3NbMF0gPSB0aWR4O1xcbiBcXHRjYi1cXHUwMDNlYXJnc1sxXSA9IG5pZHg7XFxuK1xcdGNiLVxcdTAwM2VhcmdzWzJdID0gZGVmYXVsdF9za2lwO1xcbiBcXG4gXFx0cmV0dXJuIHNrYi1cXHUwMDNlbGVuO1xcbiB9XFxuQEAgLTM2NjksMTIgKzM2ODUsMTMgQEAgc3RhdGljIGludCBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmUoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxcbiB7XFxuIFxcdHN0cnVjdCBjdGxfdGFibGUgdG1wID0gKmN0bDtcXG4tXFx0aW50IHJldDtcXG4rXFx0aW50IHJldCwgbWluLCBtYXg7XFxuIFxcbi1cXHRpbnQgbWluID0gbXNlY3NfdG9famlmZmllcygxKTtcXG4rXFx0bWluID0gbXNlY3NfdG9famlmZmllcygxKTtcXG4rXFx0bWF4ID0gbXNlY3NfdG9famlmZmllcyhOVEJMX1BBUk1fTVNfTUFYKTtcXG4gXFxuIFxcdHRtcC5leHRyYTEgPSBcXHUwMDI2bWluO1xcbi1cXHR0bXAuZXh0cmEyID0gTlVMTDtcXG4rXFx0dG1wLmV4dHJhMiA9IFxcdTAwMjZtYXg7XFxuIFxcbiBcXHRyZXQgPSBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfbWlubWF4KFxcdTAwMjZ0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xcbiBcXHRuZWlnaF9wcm9jX3VwZGF0ZShjdGwsIHdyaXRlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDA6MDU6NTEuMjM5NDc5OTYyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNTYyOTI0Njc2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIlNZU0NUTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5laWdodGJsX2R1bXBfaW5mb1wiLFxuICAgIFwibmVpZ2h0Ymxfc2V0XCIsXG4gICAgXCJuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGluIG5ldC9jb3JlL25laWdoYm91ci5jOiBpdCB1cGRhdGVzIHRoZSBuZXRsaW5rIGF0dHJpYnV0ZSBwb2xpY3kgYW5kIHByb2Mgc3lzY3RsIGhhbmRsZXIgdG8gZW5mb3JjZSB1cHBlciBib3VuZHMgb24gaW50ZXJ2YWxfcHJvYmVfdGltZV9tcywgYW5kIHJlZmFjdG9ycy9maXhlcyB0aGUgbmVpZ2hib3IgdGFibGUgZHVtcCBwYWdpbmF0aW9uIGxvZ2ljIGluIG5laWdodGJsX2R1bXBfaW5mby4gVGhlc2UgcGF0aHMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fR0VUTkVJR0hUQkwgLyBSVE1fU0VUTkVJR0hUQkwpIGFuZCBwcm9jZnMgc3lzY3RsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJjYjMxMTVhNGY4MDYzMDIzMjMxY2E3ZjZkZGE5ZDhiOGM0OWZlYTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwMDowNTo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1uZWlnaC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LW5laWdoLnlhbWxcbmluZGV4IDBmNDZlZjMxMzU5MDUuLmM4ZTU1Yzk4ZDU2NDkgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbmVpZ2gueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LW5laWdoLnlhbWxcbkBAIC0zNDEsNiArMzQxLDkgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgLVxuICAgICAgICAgbmFtZTogaW50ZXJ2YWwtcHJvYmUtdGltZS1tc1xuICAgICAgICAgdHlwZTogdTY0XG4rICAgICAgICBjaGVja3M6XG4rICAgICAgICAgIG1pbjogMVxuKyAgICAgICAgICBtYXg6IDg2NDAwMDAwXG4gXG4gb3BlcmF0aW9uczpcbiAgIGVudW0tbW9kZWw6IGRpcmVjdGlvbmFsXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxuaW5kZXggMjA4ZjQ2OTY3ZWU1OS4uYjA1ODI5ZTQ0ZDhmYyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxuQEAgLTI0OCw3ICsyNDgsNyBAQCBuZWlnaC9kZWZhdWx0L3VucmVzX3FsZW4gLSBJTlRFR0VSXG4gXG4gbmVpZ2gvZGVmYXVsdC9pbnRlcnZhbF9wcm9iZV90aW1lX21zIC0gSU5URUdFUlxuIFx0VGhlIHByb2JlIGludGVydmFsIGZvciBuZWlnaGJvciBlbnRyaWVzIHdpdGggTlRGX01BTkFHRUQgZmxhZyxcbi1cdHRoZSBtaW4gdmFsdWUgaXMgMS5cbitcdHRoZSBtaW4gdmFsdWUgaXMgMSwgYW5kIHRoZSBtYXggdmFsdWUgaXMgODY0MDAwMDAgKDEgZGF5KS5cbiBcbiBcdERlZmF1bHQ6IDUwMDBcbiBcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZWlnaGJvdXIuYyBiL25ldC9jb3JlL25laWdoYm91ci5jXG5pbmRleCAxMzQ5YzBlZWRiNjQyLi43NDQ4MzIwZjdhZDUyIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmVpZ2hib3VyLmNcbisrKyBiL25ldC9jb3JlL25laWdoYm91ci5jXG5AQCAtMjM1OSw2ICsyMzU5LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubF9uZWlnaHRibF9wb2xpY3lbTkRUQV9NQVgrMV0gPSB7XG4gXHRbTkRUQV9QQVJNU11cdFx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuIH07XG4gXG4rI2RlZmluZSBOVEJMX1BBUk1fTVNfTUFYXHQoMjQgKiA2MCAqIDYwICogTVNFQ19QRVJfU0VDKVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIG5sX250YmxfcGFybV9tc19yYW5nZSA9IHtcbitcdC5taW4gPSAxLFxuK1x0Lm1heCA9IE5UQkxfUEFSTV9NU19NQVgsXG4rfTtcbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmxfbnRibF9wYXJtX3BvbGljeVtORFRQQV9NQVgrMV0gPSB7XG4gXHRbTkRUUEFfSUZJTkRFWF1cdFx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4gXHRbTkRUUEFfUVVFVUVfTEVOXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG5AQCAtMjM3NSw3ICsyMzgyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYKzFdID0ge1xuIFx0W05EVFBBX0FOWUNBU1RfREVMQVldXHRcdD0geyAudHlwZSA9IE5MQV9VNjQgfSxcbiBcdFtORFRQQV9QUk9YWV9ERUxBWV1cdFx0PSB7IC50eXBlID0gTkxBX1U2NCB9LFxuIFx0W05EVFBBX0xPQ0tUSU1FXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXG4tXHRbTkRUUEFfSU5URVJWQUxfUFJPQkVfVElNRV9NU11cdD0geyAudHlwZSA9IE5MQV9VNjQsIC5taW4gPSAxIH0sXG4rXHRbTkRUUEFfSU5URVJWQUxfUFJPQkVfVElNRV9NU11cdD0gTkxBX1BPTElDWV9GVUxMX1JBTkdFKE5MQV9VNjQsXG4rXHRcdFx0XHRcdFx0XHRcdFx1MDAyNm5sX250YmxfcGFybV9tc19yYW5nZSksXG4gfTtcbiBcbiBzdGF0aWMgaW50IG5laWdodGJsX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbkBAIC0yNTc5LDkgKzI1ODcsMTAgQEAgc3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoID0gY2ItXHUwMDNlbmxoO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbitcdGludCBkZWZhdWx0X3NraXAgPSBjYi1cdTAwM2VhcmdzWzJdO1xuK1x0aW50IG5laWdoX3NraXAgPSBjYi1cdTAwM2VhcmdzWzFdO1xuIFx0aW50IGZhbWlseSwgdGlkeCwgbmlkeCA9IDA7XG4gXHRpbnQgdGJsX3NraXAgPSBjYi1cdTAwM2VhcmdzWzBdO1xuLVx0aW50IG5laWdoX3NraXAgPSBjYi1cdTAwM2VhcmdzWzFdO1xuIFx0c3RydWN0IG5laWdoX3RhYmxlICp0Ymw7XG4gXG4gXHRpZiAoY2ItXHUwMDNlc3RyaWN0X2NoZWNrKSB7XG5AQCAtMjYwNSwxNyArMjYxNCwyMSBAQCBzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdGlmICh0aWR4IFx1MDAzYyB0Ymxfc2tpcCB8fCAoZmFtaWx5IFx1MDAyNlx1MDAyNiB0YmwtXHUwMDNlZmFtaWx5ICE9IGZhbWlseSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmIChuZWlnaHRibF9maWxsX2luZm8oc2tiLCB0YmwsIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4rXHRcdGlmICghZGVmYXVsdF9za2lwIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgbmVpZ2h0YmxfZmlsbF9pbmZvKHNrYiwgdGJsLCBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuIFx0XHRcdFx0ICAgICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIFJUTV9ORVdORUlHSFRCTCxcbiBcdFx0XHRcdCAgICAgICBOTE1fRl9NVUxUSSkgXHUwMDNjIDApXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdG5pZHggPSAwO1xuLVx0XHRwID0gbGlzdF9uZXh0X2VudHJ5KFx1MDAyNnRibC1cdTAwM2VwYXJtcywgbGlzdCk7XG4tXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbV9yY3UocCwgXHUwMDI2dGJsLVx1MDAzZXBhcm1zX2xpc3QsIGxpc3QpIHtcbitcdFx0ZGVmYXVsdF9za2lwID0gMTtcbitcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgXHUwMDI2dGJsLVx1MDAzZXBhcm1zX2xpc3QsIGxpc3QpIHtcbiBcdFx0XHRpZiAoIW5ldF9lcShuZWlnaF9wYXJtc19uZXQocCksIG5ldCkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbitcdFx0XHRpZiAoIXAtXHUwMDNlZGV2IHx8IHAtXHUwMDNlZGV2ID09IGJsYWNraG9sZV9uZXRkZXYpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0XHRpZiAobmlkeCBcdTAwM2MgbmVpZ2hfc2tpcClcbiBcdFx0XHRcdGdvdG8gbmV4dDtcbiBcbkBAIC0yNjMwLDEyICsyNjQzLDE1IEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0fVxuIFxuIFx0XHRuZWlnaF9za2lwID0gMDtcbitcdFx0bmlkeCA9IDA7XG4rXHRcdGRlZmF1bHRfc2tpcCA9IDA7XG4gXHR9XG4gb3V0OlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRjYi1cdTAwM2VhcmdzWzBdID0gdGlkeDtcbiBcdGNiLVx1MDAzZWFyZ3NbMV0gPSBuaWR4O1xuK1x0Y2ItXHUwMDNlYXJnc1syXSA9IGRlZmF1bHRfc2tpcDtcbiBcbiBcdHJldHVybiBza2ItXHUwMDNlbGVuO1xuIH1cbkBAIC0zNjY5LDEyICszNjg1LDEzIEBAIHN0YXRpYyBpbnQgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCxcbiBcdFx0XHRcdFx0XHQgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxuIHtcbiBcdHN0cnVjdCBjdGxfdGFibGUgdG1wID0gKmN0bDtcbi1cdGludCByZXQ7XG4rXHRpbnQgcmV0LCBtaW4sIG1heDtcbiBcbi1cdGludCBtaW4gPSBtc2Vjc190b19qaWZmaWVzKDEpO1xuK1x0bWluID0gbXNlY3NfdG9famlmZmllcygxKTtcbitcdG1heCA9IG1zZWNzX3RvX2ppZmZpZXMoTlRCTF9QQVJNX01TX01BWCk7XG4gXG4gXHR0bXAuZXh0cmExID0gXHUwMDI2bWluO1xuLVx0dG1wLmV4dHJhMiA9IE5VTEw7XG4rXHR0bXAuZXh0cmEyID0gXHUwMDI2bWF4O1xuIFxuIFx0cmV0ID0gcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heChcdTAwMjZ0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xuIFx0bmVpZ2hfcHJvY191cGRhdGUoY3RsLCB3cml0ZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMDowNTo1MS4yMzk0ODE5NzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjc3NDI5MTUyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRyaWFnZSBBc3Nlc3NtZW50IG9mIGEgTmV0d29yayBOZWlnaGJvciBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIHdvcnRoIHRocm93aW5nIGF0IHN5emthbGxlci4gTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGNvcmUgdGFzazogZXZhbHVhdGluZyBhIExpbnV4IGtlcm5lbCBwYXRjaCBmb3IgZnV6emluZyBwb3RlbnRpYWwsIHNwZWNpZmljYWxseSBmb3IgdGhlIHB1cnBvc2Ugb2Ygc3l6a2FsbGVyIHRyaWFnZS4gVGhhdCdzIHByZXR0eSBzdGFuZGFyZCwgcmlnaHQ/IFRoaXMgaXMgc3RyYWlnaHQtdXAga2VybmVsIGRldmVsb3BtZW50LCBRQSwgYW5kIGRlZmVuc2l2ZSBlbmdpbmVlcmluZyB0ZXJyaXRvcnkuXG5cbkFscmlnaHQsIHJpc2sgYW5hbHlzaXMgZmlyc3QuIEl0IHNlZW1zIHByZXR0eSBiZW5pZ24gZnJvbSB0aGUgZ2V0LWdvLCBjbGFzc2ljIFFBIGFuYWx5c2lzLiBMZXQncyBzZWUgd2hhdCB3ZSBhcmUgZGVhbGluZyB3aXRoLlxuXG5Pa2F5LCBJJ3ZlIGdvdCB0aGUgbW9kaWZpZWQgZmlsZXM6IGBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbmVpZ2gueWFtbGAsIGBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdGAsIGFuZCB0aGUgY3JpdGljYWwgb25lLCBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGFjdGlvbiBpcywgc28gbGV0J3MgZGlnIGludG8gYG5ldC9jb3JlL25laWdoYm91ci5jYC5cblxuSXQgbG9va3MgbGlrZSB3ZSBoYXZlOlxuXG4xLiAgVXBkYXRlcyB0byBgbmxfbnRibF9wYXJtX3BvbGljeWAgd2l0aCBpbnB1dCB2YWxpZGF0aW9uLCBzcGVjaWZpY2FsbHkgYSBtYXggcmFuZ2UgZm9yIGBOVEJMX1BBUk1fTVNfTUFYYCwgd2hpY2ggaXMgZ29vZC4gVGhhdCdzIGEgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgcHJhY3RpY2UsIG1pdGlnYXRpbmcgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIG9yIG90aGVyIHVuZXhwZWN0ZWQgaW5wdXQuXG4yLiAgU2lnbmlmaWNhbnQgY2hhbmdlcyB0byBgbmVpZ2h0YmxfZHVtcF9pbmZvYC4gSXQgbG9va3MgbGlrZSB0aGVyZSdzIHNvbWUgZml4aW5nIGluIGhvdyBpdCBoYW5kbGVzIGBkZWZhdWx0X3NraXBgIHdpdGhpbiBgY2ItXHUwMDNlYXJnc1syXWAsIGEgY2hhbmdlIGZyb20gYGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbV9yY3VgIHRvIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdWAsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgUkNVLXNhZmUgdHJhdmVyc2FsLiBBZGRpdGlvbmFsbHksIHRoZXJlIGFyZSBjaGVja3Mgb24gYHAtXHUwMDNlZGV2YCwgc3BlY2lmaWNhbGx5IGBpZiAoIXAtXHUwMDNlZGV2IHx8IHAtXHUwMDNlZGV2ID09IGJsYWNraG9sZV9uZXRkZXYpIGNvbnRpbnVlO2AsIHdoaWNoIG1heSBiZSBmb3IgbnVsbCBwb2ludGVyIGhhbmRsaW5nIG9yIGhhbmRsaW5nIG9mIHRoZSBibGFja2hvbGUgZGV2aWNlLiBGaW5hbGx5LCB0aGVyZSBpcyBhIHJlZmFjdG9yIG9mIGR1bXBpbmcgbG9naWMsIGxpa2VseSBmaXhpbmcgYSBzdGF0ZSBtYWNoaW5lIGZvciBkdW1waW5nIG5laWdoYm9yIHRhYmxlIHBhcmFtZXRlcnMgdGhyb3VnaCBuZXRsaW5rLlxuMy4gIENoYW5nZXMgdG8gYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAgd2l0aCBtYXggYm91bmRzIGNoZWNrcyBmb3Igc3lzY3RsLCBhbm90aGVyIGRlZmVuc2l2ZSBjaGFuZ2UuXG5cbkNydWNpYWxseSwgdGhpcyBpcyBhbGwgaW4gYG5ldC9jb3JlL25laWdoYm91ci5jYC4gVGhhdCdzICpjb3JlKiBuZXR3b3JraW5nIGNvZGUsIHNvIHRoaXMgc2hvdWxkIGdldCBzb21lIGF0dGVudGlvbi4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZT8gQW5kIHRoZSBhbnN3ZXIgaXMgeWVzLCBhYnNvbHV0ZWx5ISBXZSdyZSB0YWxraW5nIGFib3V0IHJlYWNoaW5nIHRoaXMgdGhyb3VnaCBydG5ldGxpbmsgKGBSVE1fR0VUTkVJR0hUQkxgIC8gYFJUTV9TRVRORUlHSFRCTGApIGFuZCBzeXNjdGwgY2FsbHMgKGAvcHJvYy9zeXMvbmV0L2lwdjQvbmVpZ2gvLi4uYCBvciBgL3Byb2Mvc3lzL25ldC9pcHY2L25laWdoLy4uLmApLiBUaGlzIGFsc28gY292ZXJzIG5ldGxpbmsgdGFibGUgZHVtcCBhbmQgc2V0IGZ1bmN0aW9ucyAoYG5laWdodGJsX2R1bXBfaW5mb2AgYW5kIGBuZWlnaHRibF9zZXRgKSBhbmQgdGhlIHN5c2N0bCBoYW5kbGVyLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZ3JlcCBhcm91bmQgYG5ldC9jb3JlL25laWdoYm91ci5jYCBhbmQgZnVuY3Rpb25zIG5lYXJieSB0byBnZXQgYSBiZXR0ZXIgZmVlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUwOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAwOjA2OjA4LjAxMzc3NTgzNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjkyMTMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZWlnaHRibF9kdW1wX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25laWdoYm91ci5jPTI1NjI9c3RhdGljIGludCBuZWlnaHRibF92YWxpZF9kdW1wX2luZm8oY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yNTg1LVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjI1ODY6c3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTI1ODcte1xcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9Mzk2MT1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgbmVpZ2hfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTM5NjUtXFx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEIHwgUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxcbm5ldC9jb3JlL25laWdoYm91ci5jOjM5NjY6XFx0ey5tc2d0eXBlID0gUlRNX0dFVE5FSUdIVEJMLCAuZHVtcGl0ID0gbmVpZ2h0YmxfZHVtcF9pbmZvLFxcbm5ldC9jb3JlL25laWdoYm91ci5jLTM5NjctXFx0IC5mbGFncyA9IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDA6MDY6MDguMDYwNzAxNjI1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU5OTczMDg1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBoaWdobHkga25vd2xlZGdlYWJsZSBwcm9mZXNzaW9uYWwgaW4gdGhlIGZpZWxkOlxuXG4qKkRpZ2dpbmcgRGVlcGVyIGludG8gdGhlIE5ldHdvcmsgTmVpZ2hib3IgRGlzY292ZXJ5IFByb2Nlc3MqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBicm9hZGVuIG91ciBzY29wZSBhIGJpdCBoZXJlLiBXaGlsZSB3ZSd2ZSBmb2N1c2VkIG9uIFthc3N1bWVkIHByZXZpb3VzIHRvcGljLCBub3QgaW4gdGhlIHByb3ZpZGVkIHRleHRdLCB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGFib3V0IHRoZSBudWFuY2VzIG9mIG5ldHdvcmsgbmVpZ2hib3IgZGlzY292ZXJ5LCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRpbWUtc2Vuc2l0aXZlIHByb2Nlc3Nlcy4gU28sIHRvIGVuc3VyZSB3ZSBoYXZlbid0IG92ZXJsb29rZWQgYW55IGNyaXRpY2FsIGZhY3RvcnMsIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCBhbmQgYG5laWdodGJsX3NldGAuIEkgc3VzcGVjdCB0aGF0IHRoZXNlIG1pZ2h0IGNvbnRhaW4ga2V5IHRpbWluZyBwYXJhbWV0ZXJzLCBvciBjcml0aWNhbCBuZXR3b3JrIHRhYmxlIG1hbmFnZW1lbnQuIExldCdzIHNlZSBpZiBlaXRoZXIgb2YgdGhlbSBpcyBzdWJ0bHkgYWZmZWN0aW5nLCBvciBjb3VsZCBiZSBhZmZlY3RpbmcsIHBlcmZvcm1hbmNlIGluIGEgd2F5IHdlIGhhZG4ndCBjb25zaWRlcmVkLiBJdOKAmXMgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiB0aW1pbmcgYW5kIHRhYmxlIG1hbmFnZW1lbnQgYXJlIGludm9sdmVkLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGxpa2VseSBjZW50cmFsIHRvIG5laWdoYm9yIGRpc2NvdmVyeeKAmXMgYWNjdXJhdGUgb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTI5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDA6MDY6MTAuNjYwNDM0OTA2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MjQwMTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL25laWdoYm91ci5jPTM2Njk9c3RhdGljIGludCBuZWlnaF9wcm9jX2RvaW50dmVjX3plcm9faW50bWF4KGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMzY4My1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYzozNjg0OnN0YXRpYyBpbnQgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxcbm5ldC9jb3JlL25laWdoYm91ci5jLTM2ODUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jPTM3NTE9c3RhdGljIGludCBuZWlnaF9wcm9jX2Jhc2VfcmVhY2hhYmxlX3RpbWUoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zNzk2LSNkZWZpbmUgTkVJR0hfU1lTQ1RMX01TX0pJRkZJRVNfUE9TSVRJVkVfRU5UUlkoYXR0ciwgbmFtZSkgXFxcXFxcbm5ldC9jb3JlL25laWdoYm91ci5jOjM3OTc6XFx0TkVJR0hfU1lTQ1RMX0VOVFJZKGF0dHIsIGF0dHIsIG5hbWUsIDA2NDQsIG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZSlcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zNzk4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMDowNjoxMC43Mjk2ODAyNDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzcwNTU0MjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgTmV0d29yayBUYWJsZSBQYXJhbWV0ZXIgUG9saWNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbmxfbnRibF9wYXJtX3BvbGljeWAgYW5kIGBuZWlnaHRibF9zZXRgLiBJbW1lZGlhdGVseSwgbXkgYnJhaW4gaXMgZ29pbmcgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZXNlIHdpdGggbXkgZXhpc3RpbmcgbWVudGFsIG1vZGVscyBmb3IgbmV0d29yayB0YWJsZSBjb25maWd1cmF0aW9ucyBhbmQgbmVpZ2hib3IgdGFibGUgbWFuYWdlbWVudC4gSSdtIGxpa2VseSBjaGVja2luZyBmb3IgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgaW5jb25zaXN0ZW5jaWVzIGJldHdlZW4gdGhlIHR3by4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmc6IGlzIHRoZSBwb2xpY3kgZW5mb3JjZWQgYnkgYG5sX250YmxfcGFybV9wb2xpY3lgIHJlZmxlY3RlZCBhY2N1cmF0ZWx5IChhbmQgcHJlZGljdGFibHkpIGluIHRoZSBzZXR0aW5ncyBtYW5hZ2VkIGJ5IGBuZWlnaHRibF9zZXRgPyBBcmUgdGhlcmUgYW55IG92ZXJyaWRlcyBoYXBwZW5pbmc/IE9yLCBhcmUgdGhlcmUgYW55IHNpdHVhdGlvbnMgd2hlcmUgb25lIGluZmx1ZW5jZXMgdGhlIG90aGVyIGluIGFuIHVuZXhwZWN0ZWQgd2F5PyBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGF0IEknbSBhYmxlIHRvIHByZWRpY3QgYmVoYXZpb3VyLCBhbmQgdGhhdCB0aGVyZSBhcmUgbm90IGFueSB1bmludGVuZGVkIGNvbnNlcXVlbmNlcy4gVGhlIGludGVycGxheSBiZXR3ZWVuIHRoZXNlIHR3byBpcyBjcml0aWNhbCBmb3IgbmV0d29yayBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5LCBhbmQgYSBtaXNjb25maWd1cmF0aW9uIGhlcmUgY2FuIGxlYWQgdG8gYWxsIHNvcnRzIG9mIGhlYWRhY2hlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlc2UgYXJlIGluZGVwZW5kZW50IHNldHRpbmdzIG9yIHRpZ2h0bHkgY291cGxlZCwgYW5kLCBpZiBjb3VwbGVkLCB3aGF0J3MgdGhlIGludGVyYWN0aW9uIG1hdHJpeCBsaWtlP1xuXG5cbiIsIklucHV0VG9rZW5zIjo2NTAzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDA6MDY6MTMuMTAwMjM2NDQ4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2OTM1OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5sX250YmxfcGFybV9wb2xpY3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuYz0yMzY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIG5sX250YmxfcGFybV9tc19yYW5nZSA9IHtcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTIzNjgtXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MjM2OTpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmxfbnRibF9wYXJtX3BvbGljeVtORFRQQV9NQVgrMV0gPSB7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjM3MC1cXHRbTkRUUEFfSUZJTkRFWF1cXHRcXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0yMzg5PXN0YXRpYyBpbnQgbmVpZ2h0Ymxfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjQ0NS1cXHRcXHRcXHRcXHRcXHRcXHQgIHRiW05EVEFfUEFSTVNdLFxcbm5ldC9jb3JlL25laWdoYm91ci5jOjI0NDY6XFx0XFx0XFx0XFx0XFx0XFx0ICBubF9udGJsX3Bhcm1fcG9saWN5LCBleHRhY2spO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTI0NDctXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAwOjA2OjEzLjE2NzE3NTcyN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTMyMjA0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aG9zZSBjb2RlIGNoYW5nZXMsIHRha2luZyBvbiB0aGUgcGVyc29uYSBvZiBhbiBleHBlcnQ6XG5cbioqRGVlcCBEaXZlIGludG8gTmVpZ2hib3IgVGFibGUgTW9kaWZpY2F0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3Agd2hhdCdzIGdvaW5nIG9uIHdpdGhpbiB0aGVzZSBjaGFuZ2VzLiBUaGUgY3JpdGljYWwgYXJlYXMgSSdtIHpvbmluZyBpbiBvbiBhcmUgcHJlY2lzZWx5IGhvdyBgbmVpZ2h0YmxfZHVtcF9pbmZvYCwgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAsIGFuZCBgbmVpZ2h0Ymxfc2V0YCBoYXZlIGJlZW4gYWx0ZXJlZC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBrZXkgdG8gbWFuYWdpbmcgYW5kIGludGVyYWN0aW5nIHdpdGggdGhlIG5laWdoYm9yIHRhYmxlLCBzbyB1bmRlcnN0YW5kaW5nIHRoZWlyIG1vZGlmaWNhdGlvbnMgaXMgcGFyYW1vdW50LlxuXG5UbyBidWlsZCBhIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgSSdtIGdvaW5nIHRvIHB1bGwgdXAgYG5ldC9jb3JlL25laWdoYm91ci5jYCBhbmQgZm9jdXMgb24gbGluZXMgMjU4MCB0aHJvdWdoIDI2NjAuIFRoZSBgcmVhZC1maWxlYCBjb21tYW5kIHNob3VsZCBnaXZlIG1lIHRoZSBkZXRhaWxlZCBjb250ZXh0IEkgbmVlZCwgbGV0dGluZyBtZSBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgYW5kIGludGVyYWN0IHdpdGggdGhlIGJyb2FkZXIgbmVpZ2hib3IgdGFibGUgZnVuY3Rpb25hbGl0eS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBuaXR0eS1ncml0dHk6IEhvdyBhcmUgdGhlIGRhdGEgc3RydWN0dXJlcyBjaGFuZ2luZz8gV2hhdCBhcmUgdGhlIG5ldyBwYXJhbWV0ZXJzIG9yIGJlaGF2aW9ycz8gQXJlIHRoZXJlIGFueSBuZXcgbG9ja2luZyBtZWNoYW5pc21zIGludm9sdmVkPyBBbnkgY2hhbmdlcyB0byBlcnJvciBoYW5kbGluZz8gSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUgdG8gYmUgY29uZmlkZW50IGluIG15IHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwNDYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMDowNjoxNS42NjAzOTgwNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjk4MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmVpZ2hib3VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU4MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjU4MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yNTgxOlxcdFxcdH1cXG4yNTgyOlxcdFxcbjI1ODM6XFx0XFx0cmV0dXJuIDA7XFxuMjU4NDpcXHR9XFxuMjU4NTpcXHRcXG4yNTg2OlxcdHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4yNTg3OlxcdHtcXG4yNTg4OlxcdFxcdGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoID0gY2ItXFx1MDAzZW5saDtcXG4yNTg5OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbjI1OTA6XFx0XFx0aW50IGRlZmF1bHRfc2tpcCA9IGNiLVxcdTAwM2VhcmdzWzJdO1xcbjI1OTE6XFx0XFx0aW50IG5laWdoX3NraXAgPSBjYi1cXHUwMDNlYXJnc1sxXTtcXG4yNTkyOlxcdFxcdGludCBmYW1pbHksIHRpZHgsIG5pZHggPSAwO1xcbjI1OTM6XFx0XFx0aW50IHRibF9za2lwID0gY2ItXFx1MDAzZWFyZ3NbMF07XFxuMjU5NDpcXHRcXHRzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibDtcXG4yNTk1OlxcdFxcbjI1OTY6XFx0XFx0aWYgKGNiLVxcdTAwM2VzdHJpY3RfY2hlY2spIHtcXG4yNTk3OlxcdFxcdFxcdGludCBlcnIgPSBuZWlnaHRibF92YWxpZF9kdW1wX2luZm8obmxoLCBjYi1cXHUwMDNlZXh0YWNrKTtcXG4yNTk4OlxcdFxcbjI1OTk6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMjYwMDpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjI2MDE6XFx0XFx0fVxcbjI2MDI6XFx0XFxuMjYwMzpcXHRcXHRmYW1pbHkgPSAoKHN0cnVjdCBydGdlbm1zZyAqKW5sbXNnX2RhdGEobmxoKSktXFx1MDAzZXJ0Z2VuX2ZhbWlseTtcXG4yNjA0OlxcdFxcbjI2MDU6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjI2MDY6XFx0XFxuMjYwNzpcXHRcXHRmb3IgKHRpZHggPSAwOyB0aWR4IFxcdTAwM2MgTkVJR0hfTlJfVEFCTEVTOyB0aWR4KyspIHtcXG4yNjA4OlxcdFxcdFxcdHN0cnVjdCBuZWlnaF9wYXJtcyAqcDtcXG4yNjA5OlxcdFxcbjI2MTA6XFx0XFx0XFx0dGJsID0gcmN1X2RlcmVmZXJlbmNlKG5laWdoX3RhYmxlc1t0aWR4XSk7XFxuMjYxMTpcXHRcXHRcXHRpZiAoIXRibClcXG4yNjEyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI2MTM6XFx0XFxuMjYxNDpcXHRcXHRcXHRpZiAodGlkeCBcXHUwMDNjIHRibF9za2lwIHx8IChmYW1pbHkgXFx1MDAyNlxcdTAwMjYgdGJsLVxcdTAwM2VmYW1pbHkgIT0gZmFtaWx5KSlcXG4yNjE1OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI2MTY6XFx0XFxuMjYxNzpcXHRcXHRcXHRpZiAoIWRlZmF1bHRfc2tpcCBcXHUwMDI2XFx1MDAyNlxcbjI2MTg6XFx0XFx0XFx0ICAgIG5laWdodGJsX2ZpbGxfaW5mbyhza2IsIHRibCwgTkVUTElOS19DQihjYi1cXHUwMDNlc2tiKS5wb3J0aWQsXFxuMjYxOTpcXHRcXHRcXHRcXHRcXHQgICAgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsIFJUTV9ORVdORUlHSFRCTCxcXG4yNjIwOlxcdFxcdFxcdFxcdFxcdCAgICAgICBOTE1fRl9NVUxUSSkgXFx1MDAzYyAwKVxcbjI2MjE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjYyMjpcXHRcXG4yNjIzOlxcdFxcdFxcdGRlZmF1bHRfc2tpcCA9IDE7XFxuMjYyNDpcXHRcXG4yNjI1OlxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsIFxcdTAwMjZ0YmwtXFx1MDAzZXBhcm1zX2xpc3QsIGxpc3QpIHtcXG4yNjI2OlxcdFxcdFxcdFxcdGlmICghbmV0X2VxKG5laWdoX3Bhcm1zX25ldChwKSwgbmV0KSlcXG4yNjI3OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI2Mjg6XFx0XFxuMjYyOTpcXHRcXHRcXHRcXHRpZiAoIXAtXFx1MDAzZWRldiB8fCBwLVxcdTAwM2VkZXYgPT0gYmxhY2tob2xlX25ldGRldilcXG4yNjMwOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI2MzE6XFx0XFxuMjYzMjpcXHRcXHRcXHRcXHRpZiAobmlkeCBcXHUwMDNjIG5laWdoX3NraXApXFxuMjYzMzpcXHRcXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuMjYzNDpcXHRcXG4yNjM1OlxcdFxcdFxcdFxcdGlmIChuZWlnaHRibF9maWxsX3BhcmFtX2luZm8oc2tiLCB0YmwsIHAsXFxuMjYzNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIE5FVExJTktfQ0IoY2ItXFx1MDAzZXNrYikucG9ydGlkLFxcbjI2Mzc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBubGgtXFx1MDAzZW5sbXNnX3NlcSxcXG4yNjM4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgUlRNX05FV05FSUdIVEJMLFxcbjI2Mzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBOTE1fRl9NVUxUSSkgXFx1MDAzYyAwKVxcbjI2NDA6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjY0MTpcXHRcXHRcXHRuZXh0OlxcbjI2NDI6XFx0XFx0XFx0XFx0bmlkeCsrO1xcbjI2NDM6XFx0XFx0XFx0fVxcbjI2NDQ6XFx0XFxuMjY0NTpcXHRcXHRcXHRuZWlnaF9za2lwID0gMDtcXG4yNjQ2OlxcdFxcdFxcdG5pZHggPSAwO1xcbjI2NDc6XFx0XFx0XFx0ZGVmYXVsdF9za2lwID0gMDtcXG4yNjQ4OlxcdFxcdH1cXG4yNjQ5OlxcdG91dDpcXG4yNjUwOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjI2NTE6XFx0XFxuMjY1MjpcXHRcXHRjYi1cXHUwMDNlYXJnc1swXSA9IHRpZHg7XFxuMjY1MzpcXHRcXHRjYi1cXHUwMDNlYXJnc1sxXSA9IG5pZHg7XFxuMjY1NDpcXHRcXHRjYi1cXHUwMDNlYXJnc1syXSA9IGRlZmF1bHRfc2tpcDtcXG4yNjU1OlxcdFxcbjI2NTY6XFx0XFx0cmV0dXJuIHNrYi1cXHUwMDNlbGVuO1xcbjI2NTc6XFx0fVxcbjI2NTg6XFx0XFxuMjY1OTpcXHRzdGF0aWMgaW50IF9fbmVpZ2hfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMDowNjoxNS42NjA3NzMwNjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM3NzcxNzI2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXNlIGNoYW5nZXMsIHJlc2lkaW5nIHdpdGhpbiBgbmV0L2NvcmUvbmVpZ2hib3VyLmNgLCBhcmUgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLCBnaXZlbiB0aGVpciBwb3RlbnRpYWwgaW1wYWN0IG9uIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5LiBJIHNlZSB0aHJlZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkOiBgbmxfbnRibF9wYXJtX3BvbGljeWAgKGFzc29jaWF0ZWQgd2l0aCBgbmVpZ2h0Ymxfc2V0YCksIGBuZWlnaHRibF9kdW1wX2luZm9gLCBhbmQgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAuIFRoZSBjb250ZXh0IHN1Z2dlc3RzIHRoaXMgaXMgY29kZSBoYW5kbGluZyBOZWlnaGJvciBEaXNjb3ZlcnkgYW5kIHJlbGF0ZWQgdGFibGUgbWFuYWdlbWVudC5cblxuUmVhY2hhYmxlPyBBYnNvbHV0ZWx5LiBUaGUgYG5laWdodGJsX2R1bXBfaW5mb2AgZnVuY3Rpb24gaXMgYWNjZXNzaWJsZSB0aHJvdWdoIGBSVE1fR0VUTkVJR0hUQkxgIHJ0bmV0bGluayBtZXNzYWdlcywgYW5kIGBuZWlnaHRibF9zZXRgIGlzIHJlYWNoYWJsZSB2aWEgYFJUTV9TRVRORUlHSFRCTGAgcnRuZXRsaW5rIG1lc3NhZ2VzLiAgVGhpcyBtZWFucyB0aGVzZSBhcmUgZXhwb3NlZCBpbnRlcmZhY2VzLiBUaGVuLCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYCBpcyBob29rZWQgdXAgYXMgYSBzeXNjdGwgaGFuZGxlciBmb3IgdGhlIGBuZWlnaC8qL2ludGVydmFsX3Byb2JlX3RpbWVfbXNgIHNldHRpbmcuIE5vIGV4b3RpYyBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkIHRvIHJlYWNoIHRoZXNlLCBhbmQgdGhpcyBpcyBwcmV0dHkgc3RhbmRhcmQgbmV0d29ya2luZyBjb2RlLlxuXG5Xb3J0aCBmdXp6aW5nPyBHaXZlbiB0aGlzIHJlYWNoYWJpbGl0eSBhbmQgcG90ZW50aWFsIGZvciBpbXBhY3RpbmcgdGFibGUgbWFuYWdlbWVudCwgSSdkIHNheSB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZzsgVFJVRS4gVGhpcyBpcyBjb3JlIGZ1bmN0aW9uYWxpdHkuIFRoZSBmb2N1cyBzaG91bGQgYmUgb24gdGhlc2Ugc3ltYm9sczogYG5laWdodGJsX2R1bXBfaW5mb2AsIGBuZWlnaHRibF9zZXRgLCBhbmQgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAuXG5cbkZpbmFsbHksIGJlZm9yZSBJIGRpZyBkZWVwZXIsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBhbmQgTWFrZWZpbGUgdG8gbWFrZSBzdXJlIHRoaXMgY29kZSBpcyBidWlsdCB1bmRlciBgQ09ORklHX05FVGAuIEl0J3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIHBhcnQgb2YgdGhlIHN0YW5kYXJkIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBNYWtlZmlsZSB0byBtYWtlIHN1cmUsIGJ1dCwgZ2l2ZW4gdGhlIHBhdGgsIEkgZXhwZWN0IGl0J3MgYSBzYWZlIGJldCB0byBhc3N1bWUgdGhpcyBpcyBlbmFibGVkIGluIHN0YW5kYXJkIGtlcm5lbCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU0NSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAwOjA2OjE5LjAzODQ5MzA0MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk3MDY4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVpZ2hib3VyLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmM9MTk0ND1zdGF0aWMgaW50IGJhdGFkdl9pdl9vZ21fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5jLTE5OTQtLyoqXFxubmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5jOjE5OTU6ICogYmF0YWR2X2l2X29nbV9uZWlnaF9nZXRfdHFfYXZnKCkgLSBHZXQgdGhlIFRRIGF2ZXJhZ2UgZm9yIGEgbmVpZ2hib3VyIG9uIGFcXG5uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmMtMTk5Ni0gKiAgZ2l2ZW4gb3V0Z29pbmcgaW50ZXJmYWNlLlxcbi0tXFxubmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcXHRcXHQgICAgICs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlOjEzOlxcdFxcdFxcdG5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vIFxcXFxcXG5uZXQvY29yZS9NYWtlZmlsZS0xNC1cXHRcXHRcXHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXFxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTc5LSAgICAgb25seSBMaW51eCBjb21wbGllcyB0byByZmMxODEyIG5vdyAoeWVzLCBndXlzLCBMaW51eCBpcyB0aGUgb25seVxcbm5ldC9pcHY0L2lwX2dyZS5jOjgwOiAgICAgdHJ1ZSByb3V0ZXIgbm93IDotKSksIGFsbCByb3V0ZXJzIChhdCBsZWFzdCwgaW4gbmVpZ2hib3VyaG9vZCBvZiBtaW5lKVxcbm5ldC9pcHY0L2lwX2dyZS5jLTgxLSAgICAgcmV0dXJuIG9ubHkgOCBieXRlcyBvZiBwYXlsb2FkLiBJdCBpcyB0aGUgZW5kLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMDowNjoxOS4xMDgyMDcyMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjYyMDQxNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGBuZWlnaGJvdXIub2AgTW9kdWxlIGFuZCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYG5laWdoYm91ci5vYCBpcyBidWlsdCBhcyBwYXJ0IG9mIGBvYmoteWAgaW4gYG5ldC9jb3JlL01ha2VmaWxlYCwgYW5kIHRoYXQncyBjb250aW5nZW50IG9uIGBDT05GSUdfTkVUYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgc3lzY3RsIGNvbmZpZ3VyYXRpb25zIHNwZWNpZmljYWxseSBmb3IgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYSBkZXBlbmRlbmN5IG9uIGBDT05GSUdfU1lTQ1RMYCwgYENPTkZJR19ORVRgLCBvciBldmVuIHBvdGVudGlhbGx5IGBDT05GSUdfSU5FVGAuIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpbnZvbHZlZC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gYG5ldC9jb3JlL25laWdoYm91ci5jYC4gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBwcmVwcm9jZXNzb3IgaWZkZWZzIHN1cnJvdW5kaW5nIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgLiBUaGF0J2xsIGNvbmZpcm0gaWYgdGhlIGluY2x1c2lvbiBvZiB0aGlzIHZhcmlhYmxlIG9yIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5IGRlcGVuZHMgb24gYW55IG9mIHRob3NlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIGp1c3QgbWVudGlvbmVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBpdHMgY29tcGlsZS10aW1lIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjkyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAwOjA2OjIxLjc3MDI1MTMxMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwNTg5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuYy0yMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvY19mcy5oXFx1MDAzZVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjIzOiNpZmRlZiBDT05GSUdfU1lTQ1RMXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjQtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N5c2N0bC5oXFx1MDAzZVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9NTY9c3RhdGljIHZvaWQgcG5laWdoX2lmZG93bihzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTU4LVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjU5OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTYwLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbmVpZ2hfc3RhdF9zZXFfb3BzO1xcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MTgyMT12b2lkIG5laWdoX3RhYmxlX2luaXQoaW50IGluZGV4LCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibClcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTE4MzktXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTg0MDojaWZkZWYgQ09ORklHX1BST0NfRlNcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xODQxLVxcdGlmICghcHJvY19jcmVhdGVfc2VxX2RhdGEodGJsLVxcdTAwM2VpZCwgMCwgaW5pdF9uZXQucHJvY19uZXRfc3RhdCxcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jPTMyNTU9RVhQT1JUX1NZTUJPTChuZWlnaF94bWl0KTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zMjU2LVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjMyNTc6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMzI1OC1cXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jPTM1NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBuZWlnaF9zdGF0X3NlcV9vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zNTcwLX07XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MzU3MTojZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi9cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zNTcyLVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MzYxMj1FWFBPUlRfU1lNQk9MKG5laWdoX2FwcF9ucyk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMzYxMy1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYzozNjE0OiNpZmRlZiBDT05GSUdfU1lTQ1RMXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMzYxNS1zdGF0aWMgaW50IHVucmVzX3FsZW5fbWF4ID0gSU5UX01BWCAvIFNLQl9UUlVFU0laRShFVEhfRlJBTUVfTEVOKTtcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jPTM5NTc9RVhQT1JUX1NZTUJPTChuZWlnaF9zeXNjdGxfdW5yZWdpc3Rlcik7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMzk1OC1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYzozOTU5OiNlbmRpZlxcdC8qIENPTkZJR19TWVNDVEwgKi9cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0zOTYwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMDowNjoyMS44MTUzMTQ3MjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk3NTkwNDg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIE5ldHdvcmsgTmVpZ2hib3IgVGFibGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIG9mIGNvdXJzZSwgdGhhdCBgQ09ORklHX1NZU0NUTGAgaXMgKnJlcXVpcmVkKiBmb3IgdGhlIHN5c2N0bCBiaXRzIGluIGBuZXQvY29yZS9uZWlnaGJvdXIuY2AsIGFuZCBgQ09ORklHX05FVGAgaXMgdGhlIGFic29sdXRlIGJhc2UgY29uZmlnLiBJdCdzIGFsbW9zdCBhdXRvbWF0aWMsIGJ1dCBsZXQncyBqdXN0IGNvbmZpcm0gdGhhdCBgQ09ORklHX0lORVRgIGlzIGFsc28gYSBnb29kIGlkZWEgdG8gaGF2ZSBlbmFibGVkLCBnaXZlbiB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBuZWlnaGJvciB0YWJsZXMsIEFSUCwgYW5kIElQdjYgTkQsIHdoaWNoIGdlbmVyYWxseSBsaXZlIHVuZGVyIHRoZSB1bWJyZWxsYSBvZiBgQ09ORklHX0lORVRgIG9yIGBDT05GSUdfSVBWNmAuIEJ1dCB5ZXMsIGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19TWVNDVExgIGFyZSB0aGUgY29yZSBlc3NlbnRpYWxzIGhlcmUuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBkZXRhaWxzLiBJIHNlZSBzb21lIGtleSBzeW1ib2xzIGZsYWdnZWQgYXMgJ2ZvY3VzZWQnOiBgbmVpZ2h0YmxfZHVtcF9pbmZvYCwgYG5laWdodGJsX3NldGAsIGFuZCBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVzZSBhcmVuJ3Qgc29tZSB1bml2ZXJzYWxseSB1c2VkIHRoaW5ncywgYmVjYXVzZSBpZiBpdCAqaXMqIHVzZWQgdW5pdmVyc2FsbHksIHRoYXQncyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgdGhhdCBpdCBtYXkgYWZmZWN0IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEJ1dCBubywgdGhleSBhcmUgc3BlY2lmaWMgdG8gcnRuZXRsaW5rIG5laWdoYm9yIHRhYmxlIG9wZXJhdGlvbnMgYW5kIHByb2Mgc3lzY3RsIGZvciBuZWlnaGJvciBwYXJhbWV0ZXJzLiBHb3QgaXQuXG5cbk5leHQsIEkgbmVlZCB0byBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayBvbiB0aGUgcGF0Y2gncyBvdmVyYWxsIHJlYXNvbmluZy4gT2theSwgc28gaXQgbG9va3MgbGlrZSB3aGF0IHRoZSBwYXRjaCBhY3R1YWxseSBkb2VzIGlzIGl0IHZhbGlkYXRlcyB0aGUgaW50ZXJ2YWwgcHJvYmUgdGltZSByYW5nZSBpbiB0aGUgcnRuZXRsaW5rIHBvbGljeSBhbmQgdGhlIHN5c2N0bCB0YWJsZS4gQW5kIGl0IGFsc28gcmVmYWN0b3JzIHBhZ2luYXRpb24gYW5kIGZpbHRlcmluZyBpbiBgbmVpZ2h0YmxfZHVtcF9pbmZvYCwgc3BlY2lmaWNhbGx5IHdpdGggdHJhY2tpbmcgYGRlZmF1bHRfc2tpcGAgYW5kIGZpbHRlcmluZyBvdXQgYGJsYWNraG9sZV9uZXRkZXZgIGFuZCBtaXNzaW5nIGRldmljZXMuIFRoaXMgbWFrZXMgc2Vuc2UuIFJlYWNoYWJpbGl0eS13aXNlLCB0aGlzIGlzIGFsbCBtb2RpZnlpbmcgY29yZSBuZXRsaW5rIG5laWdoYm9yIHRhYmxlIGR1bXBpbmcvY29uZmlndXJhdGlvbiBhbmQgc3lzY3RsIGludGVyZmFjZSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgc3RhbmRhcmQgbmV0d29yay1mb2N1c2VkIFJUTmV0bGluayBjYWxscyBsaWtlIGBSVE1fR0VUTkVJR0hUQkxgIGFuZCBgUlRNX1NFVE5FSUdIVEJMYCwgYW5kIGFsc28gdmlhIGAvcHJvYy9zeXMvbmV0LypgLlxuXG5UaGUgaW1wbGljYXRpb25zIG9mIGFsbCBvZiB0aGlzIGFyZSB0aGF0IGl0IGlzICoqd29ydGggZnV6emluZyoqLiBXZSBoYXZlIGludGVydmFsLWJhc2VkIGNvbmZpZ3VyYXRpb24vZHVtcGluZyB2aWEgUlROZXRsaW5rLiBUaGUgcmVxdWlyZWQgY29uZmlncyBhcmUgYE5FVGAgYW5kIGBTWVNDVExgLiBUaGUgRm9jdXNTeW1ib2xzIGFyZSwgYWdhaW4sIGBuZWlnaHRibF9kdW1wX2luZm9gLCBgbmVpZ2h0Ymxfc2V0YCwgYW5kIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgLlxuXG5Pa2F5LCBJJ20gY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuIExldCdzIGludm9rZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY2MywiT3V0cHV0VG9rZW5zIjoxNjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDA6MDY6MjYuNzkxMjIxNjI1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc1MDI0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiLFxuICAgIFwiU1lTQ1RMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmVpZ2h0YmxfZHVtcF9pbmZvXCIsXG4gICAgXCJuZWlnaHRibF9zZXRcIixcbiAgICBcIm5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgaW4gbmV0L2NvcmUvbmVpZ2hib3VyLmM6IGl0IHVwZGF0ZXMgdGhlIG5ldGxpbmsgYXR0cmlidXRlIHBvbGljeSBhbmQgcHJvYyBzeXNjdGwgaGFuZGxlciB0byBlbmZvcmNlIHVwcGVyIGJvdW5kcyBvbiBpbnRlcnZhbF9wcm9iZV90aW1lX21zLCBhbmQgcmVmYWN0b3JzL2ZpeGVzIHRoZSBuZWlnaGJvciB0YWJsZSBkdW1wIHBhZ2luYXRpb24gbG9naWMgaW4gbmVpZ2h0YmxfZHVtcF9pbmZvLiBUaGVzZSBwYXRocyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBydG5ldGxpbmsgKFJUTV9HRVRORUlHSFRCTCAvIFJUTV9TRVRORUlHSFRCTCkgYW5kIHByb2NmcyBzeXNjdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCIsXG4gICAgXCJTWVNDVExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZWlnaHRibF9kdW1wX2luZm9cIixcbiAgICBcIm5laWdodGJsX3NldFwiLFxuICAgIFwibmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBpbiBuZXQvY29yZS9uZWlnaGJvdXIuYzogaXQgdXBkYXRlcyB0aGUgbmV0bGluayBhdHRyaWJ1dGUgcG9saWN5IGFuZCBwcm9jIHN5c2N0bCBoYW5kbGVyIHRvIGVuZm9yY2UgdXBwZXIgYm91bmRzIG9uIGludGVydmFsX3Byb2JlX3RpbWVfbXMsIGFuZCByZWZhY3RvcnMvZml4ZXMgdGhlIG5laWdoYm9yIHRhYmxlIGR1bXAgcGFnaW5hdGlvbiBsb2dpYyBpbiBuZWlnaHRibF9kdW1wX2luZm8uIFRoZXNlIHBhdGhzIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHJ0bmV0bGluayAoUlRNX0dFVE5FSUdIVEJMIC8gUlRNX1NFVE5FSUdIVEJMKSBhbmQgcHJvY2ZzIHN5c2N0bC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDA6MDY6MjYuODY4NzMwMDk0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjM5MDQ5MjA2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAwOjA2OjI2Ljg2OTIxOTA0NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI2Mzg5OTk3NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gcmFuZ2UgY2hlY2tzIChtaW4vbWF4KSBmb3IgdGhlIG5laWdoYm9yIHRhYmxlIGludGVydmFsX3Byb2JlX3RpbWVfbXMgcGFyYW1ldGVyIHZpYSBuZXRsaW5rIHBvbGljeSBhbmQgc3lzY3RsLCBhbmQgZml4ZXMgbmV0bGluayBkdW1wIHJlc3VtcHRpb24gc3RhdGUgdHJhY2tpbmcgaW4gbmVpZ2h0YmxfZHVtcF9pbmZvKCkgdXNpbmcgY2ItXFx1MDAzZWFyZ3NbMl0gKHdoaWNoIGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIG5ldGxpbmsgZHVtcCBzdWJzeXN0ZW0pLiBBbGwgbG9jYWwgdmFyaWFibGVzIChtaW4sIG1heCwgZGVmYXVsdF9za2lwLCBuaWR4KSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgbm8gbmV3IGRhdGEgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBuZXRsaW5rIGR1bXAgaXRlcmF0aW9uIChzdWNoIGFzIGxpc3QgdHJhdmVyc2FsIG9yIGJvdW5kcyBlcnJvcnMpIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJjYjMxMTVhNGY4MDYzMDIzMjMxY2E3ZjZkZGE5ZDhiOGM0OWZlYTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwMDowNTo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1uZWlnaC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LW5laWdoLnlhbWxcbmluZGV4IDBmNDZlZjMxMzU5MDUuLmM4ZTU1Yzk4ZDU2NDkgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbmVpZ2gueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LW5laWdoLnlhbWxcbkBAIC0zNDEsNiArMzQxLDkgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgLVxuICAgICAgICAgbmFtZTogaW50ZXJ2YWwtcHJvYmUtdGltZS1tc1xuICAgICAgICAgdHlwZTogdTY0XG4rICAgICAgICBjaGVja3M6XG4rICAgICAgICAgIG1pbjogMVxuKyAgICAgICAgICBtYXg6IDg2NDAwMDAwXG4gXG4gb3BlcmF0aW9uczpcbiAgIGVudW0tbW9kZWw6IGRpcmVjdGlvbmFsXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxuaW5kZXggMjA4ZjQ2OTY3ZWU1OS4uYjA1ODI5ZTQ0ZDhmYyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnJzdFxuQEAgLTI0OCw3ICsyNDgsNyBAQCBuZWlnaC9kZWZhdWx0L3VucmVzX3FsZW4gLSBJTlRFR0VSXG4gXG4gbmVpZ2gvZGVmYXVsdC9pbnRlcnZhbF9wcm9iZV90aW1lX21zIC0gSU5URUdFUlxuIFx0VGhlIHByb2JlIGludGVydmFsIGZvciBuZWlnaGJvciBlbnRyaWVzIHdpdGggTlRGX01BTkFHRUQgZmxhZyxcbi1cdHRoZSBtaW4gdmFsdWUgaXMgMS5cbitcdHRoZSBtaW4gdmFsdWUgaXMgMSwgYW5kIHRoZSBtYXggdmFsdWUgaXMgODY0MDAwMDAgKDEgZGF5KS5cbiBcbiBcdERlZmF1bHQ6IDUwMDBcbiBcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZWlnaGJvdXIuYyBiL25ldC9jb3JlL25laWdoYm91ci5jXG5pbmRleCAxMzQ5YzBlZWRiNjQyLi43NDQ4MzIwZjdhZDUyIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbmVpZ2hib3VyLmNcbisrKyBiL25ldC9jb3JlL25laWdoYm91ci5jXG5AQCAtMjM1OSw2ICsyMzU5LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubF9uZWlnaHRibF9wb2xpY3lbTkRUQV9NQVgrMV0gPSB7XG4gXHRbTkRUQV9QQVJNU11cdFx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuIH07XG4gXG4rI2RlZmluZSBOVEJMX1BBUk1fTVNfTUFYXHQoMjQgKiA2MCAqIDYwICogTVNFQ19QRVJfU0VDKVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIG5sX250YmxfcGFybV9tc19yYW5nZSA9IHtcbitcdC5taW4gPSAxLFxuK1x0Lm1heCA9IE5UQkxfUEFSTV9NU19NQVgsXG4rfTtcbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmxfbnRibF9wYXJtX3BvbGljeVtORFRQQV9NQVgrMV0gPSB7XG4gXHRbTkRUUEFfSUZJTkRFWF1cdFx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4gXHRbTkRUUEFfUVVFVUVfTEVOXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG5AQCAtMjM3NSw3ICsyMzgyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYKzFdID0ge1xuIFx0W05EVFBBX0FOWUNBU1RfREVMQVldXHRcdD0geyAudHlwZSA9IE5MQV9VNjQgfSxcbiBcdFtORFRQQV9QUk9YWV9ERUxBWV1cdFx0PSB7IC50eXBlID0gTkxBX1U2NCB9LFxuIFx0W05EVFBBX0xPQ0tUSU1FXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXG4tXHRbTkRUUEFfSU5URVJWQUxfUFJPQkVfVElNRV9NU11cdD0geyAudHlwZSA9IE5MQV9VNjQsIC5taW4gPSAxIH0sXG4rXHRbTkRUUEFfSU5URVJWQUxfUFJPQkVfVElNRV9NU11cdD0gTkxBX1BPTElDWV9GVUxMX1JBTkdFKE5MQV9VNjQsXG4rXHRcdFx0XHRcdFx0XHRcdFx1MDAyNm5sX250YmxfcGFybV9tc19yYW5nZSksXG4gfTtcbiBcbiBzdGF0aWMgaW50IG5laWdodGJsX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbkBAIC0yNTc5LDkgKzI1ODcsMTAgQEAgc3RhdGljIGludCBuZWlnaHRibF9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoID0gY2ItXHUwMDNlbmxoO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbitcdGludCBkZWZhdWx0X3NraXAgPSBjYi1cdTAwM2VhcmdzWzJdO1xuK1x0aW50IG5laWdoX3NraXAgPSBjYi1cdTAwM2VhcmdzWzFdO1xuIFx0aW50IGZhbWlseSwgdGlkeCwgbmlkeCA9IDA7XG4gXHRpbnQgdGJsX3NraXAgPSBjYi1cdTAwM2VhcmdzWzBdO1xuLVx0aW50IG5laWdoX3NraXAgPSBjYi1cdTAwM2VhcmdzWzFdO1xuIFx0c3RydWN0IG5laWdoX3RhYmxlICp0Ymw7XG4gXG4gXHRpZiAoY2ItXHUwMDNlc3RyaWN0X2NoZWNrKSB7XG5AQCAtMjYwNSwxNyArMjYxNCwyMSBAQCBzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdGlmICh0aWR4IFx1MDAzYyB0Ymxfc2tpcCB8fCAoZmFtaWx5IFx1MDAyNlx1MDAyNiB0YmwtXHUwMDNlZmFtaWx5ICE9IGZhbWlseSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmIChuZWlnaHRibF9maWxsX2luZm8oc2tiLCB0YmwsIE5FVExJTktfQ0IoY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4rXHRcdGlmICghZGVmYXVsdF9za2lwIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgbmVpZ2h0YmxfZmlsbF9pbmZvKHNrYiwgdGJsLCBORVRMSU5LX0NCKGNiLVx1MDAzZXNrYikucG9ydGlkLFxuIFx0XHRcdFx0ICAgICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIFJUTV9ORVdORUlHSFRCTCxcbiBcdFx0XHRcdCAgICAgICBOTE1fRl9NVUxUSSkgXHUwMDNjIDApXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdG5pZHggPSAwO1xuLVx0XHRwID0gbGlzdF9uZXh0X2VudHJ5KFx1MDAyNnRibC1cdTAwM2VwYXJtcywgbGlzdCk7XG4tXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbV9yY3UocCwgXHUwMDI2dGJsLVx1MDAzZXBhcm1zX2xpc3QsIGxpc3QpIHtcbitcdFx0ZGVmYXVsdF9za2lwID0gMTtcbitcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgXHUwMDI2dGJsLVx1MDAzZXBhcm1zX2xpc3QsIGxpc3QpIHtcbiBcdFx0XHRpZiAoIW5ldF9lcShuZWlnaF9wYXJtc19uZXQocCksIG5ldCkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbitcdFx0XHRpZiAoIXAtXHUwMDNlZGV2IHx8IHAtXHUwMDNlZGV2ID09IGJsYWNraG9sZV9uZXRkZXYpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0XHRpZiAobmlkeCBcdTAwM2MgbmVpZ2hfc2tpcClcbiBcdFx0XHRcdGdvdG8gbmV4dDtcbiBcbkBAIC0yNjMwLDEyICsyNjQzLDE1IEBAIHN0YXRpYyBpbnQgbmVpZ2h0YmxfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0fVxuIFxuIFx0XHRuZWlnaF9za2lwID0gMDtcbitcdFx0bmlkeCA9IDA7XG4rXHRcdGRlZmF1bHRfc2tpcCA9IDA7XG4gXHR9XG4gb3V0OlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRjYi1cdTAwM2VhcmdzWzBdID0gdGlkeDtcbiBcdGNiLVx1MDAzZWFyZ3NbMV0gPSBuaWR4O1xuK1x0Y2ItXHUwMDNlYXJnc1syXSA9IGRlZmF1bHRfc2tpcDtcbiBcbiBcdHJldHVybiBza2ItXHUwMDNlbGVuO1xuIH1cbkBAIC0zNjY5LDEyICszNjg1LDEzIEBAIHN0YXRpYyBpbnQgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCxcbiBcdFx0XHRcdFx0XHQgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxuIHtcbiBcdHN0cnVjdCBjdGxfdGFibGUgdG1wID0gKmN0bDtcbi1cdGludCByZXQ7XG4rXHRpbnQgcmV0LCBtaW4sIG1heDtcbiBcbi1cdGludCBtaW4gPSBtc2Vjc190b19qaWZmaWVzKDEpO1xuK1x0bWluID0gbXNlY3NfdG9famlmZmllcygxKTtcbitcdG1heCA9IG1zZWNzX3RvX2ppZmZpZXMoTlRCTF9QQVJNX01TX01BWCk7XG4gXG4gXHR0bXAuZXh0cmExID0gXHUwMDI2bWluO1xuLVx0dG1wLmV4dHJhMiA9IE5VTEw7XG4rXHR0bXAuZXh0cmEyID0gXHUwMDI2bWF4O1xuIFxuIFx0cmV0ID0gcHJvY19kb2ludHZlY19tc19qaWZmaWVzX21pbm1heChcdTAwMjZ0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpO1xuIFx0bmVpZ2hfcHJvY191cGRhdGUoY3RsLCB3cml0ZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMDowNjoyNi44NjkyMTk5NDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA4MDk5MDg2MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2hldGhlciB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyBhIGZvY3VzZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGFyb3VuZCB2YWxpZGF0aW5nIGFuZCBoYW5kbGluZyB0aGUgYGludGVydmFsLXByb2JlLXRpbWUtbXNgIHBhcmFtZXRlciBmb3IgbmVpZ2hib3IgdGFibGVzIHZpYSBOZXRsaW5rLlxuXG5GaXJzdCwgdGhlIHBhdGNoIGludHJvZHVjZXMgaW5wdXQgdmFsaWRhdGlvbiB3aXRoIG1pbi9tYXggdmFsdWVzIGZvciBgaW50ZXJ2YWwtcHJvYmUtdGltZS1tc2AgaW4gYm90aCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIGtlcm5lbCBjb2RlIChgbmV0L2NvcmUvbmVpZ2hib3VyLmNgKS4gVGhlIG1heGltdW0gdmFsdWUgc2VlbXMgdG8gYmUgY2FwcGVkIGF0IDI0IGhvdXJzICg4NjQwMDAwMCBtaWxsaXNlY29uZHMsIG9yIGBOVEJMX1BBUk1fTVNfTUFYYCkuIFRoaXMgaXMgZ29vZDsgZXhwbGljaXQgYm91bmRzIGFyZSBhbHdheXMgYSB3aW4uIFRoZSB1c2Ugb2YgYE5MQV9QT0xJQ1lfRlVMTF9SQU5HRWAgd2l0aCB0aGUgYG5sX250YmxfcGFybV9tc19yYW5nZWAgc3VnZ2VzdHMgdGhhdCBOZXRsaW5rIG1lc3NhZ2UgcGFyc2luZyBpcyBiZWluZyBtYWRlIG1vcmUgcm9idXN0LiBUaGF0IG1ha2VzIG1lIGZlZWwgYmV0dGVyIGFib3V0IGdlbmVyYWwgc2VjdXJpdHkuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyB3aXRoaW4gYG5laWdodGJsX2R1bXBfaW5mbygpYC4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggdXBkYXRlcyB0aGUgZHVtcGluZyBsb2dpYyB0byBtYW5hZ2UgZHVtcCBjb250aW51YXRpb24gYW5kIHJlc3RhcnQgc3RhdGVzIG1vcmUgZXhwbGljaXRseSB3aXRoIGBkZWZhdWx0X3NraXBgLiBUaGlzIGlzIGludGVyZXN0aW5nOyBkdW1wcyBjYW4gb2Z0ZW4gZXhwb3NlIHZ1bG5lcmFiaWxpdGllcy4gSSBhbHNvIHNlZSB0aGF0IHRoZXJlJ3MgYSByZWZpbmVtZW50IGluIHRoZSBpdGVyYXRpb24gbG9naWMsIHVzaW5nIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdWAgaW5zdGVhZCBvZiBgbGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JjdWAsIGFuZCB0aGF0IGJsYWNraG9sZS9udWxsIGRldmljZXMgYXJlIG5vdyBiZWluZyBleHBsaWNpdGx5IHNraXBwZWQuIEZpbmFsbHksIHRoZSBjb2RlIGFsc28gdXNlcyBgbmVpZ2hfcHJvY19kb2ludHZlY19tc19qaWZmaWVzX3Bvc2l0aXZlKClgIHRvIHNldCBhIG1heGltdW0gdmFsdWUgaW4gamlmZmllcyBmb3JtYXQuXG5cbk5vdywgdGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gZGlnIGRlZXBlci4gV2hpbGUgdGhlIGNoYW5nZXMgYXBwZWFyIHRvIGltcHJvdmUgY29kZSBjbGFyaXR5IGFuZCBwb3RlbnRpYWxseSBmaXggYSBzdWJ0bGUgYnVnIG9yIHR3bywgZHVtcCByb3V0aW5lcyBhcmUgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogY2VydGFpbiB0aGF0IHRoZXNlIGNoYW5nZXMgaGF2ZW4ndCBpbnRyb2R1Y2VkIGFueSBtZW1vcnkgbGVha3Mgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcyB3aXRoaW4gdGhlIGBuZWlnaHRibF9kdW1wX2luZm9gIGZ1bmN0aW9uIG9yIHJlbGF0ZWQgTmV0bGluayBwcm9jZXNzaW5nLiBBIE5ldGxpbmsgZHVtcCBtaWdodCBiZSBhIGdyZWF0IHZlY3RvciBmb3IgYSBzZWN1cml0eSBpc3N1ZSwgc28gSSdsbCBuZWVkIHRvIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gc2VlIGhvdyB0aGUgbmV0bGluayBkdW1wIHdvcmtzLiBJJ20gZ29pbmcgdG8gbG9vayBhdCBob3cgdGhpcyBsb2dpYyBpcyB1c2VkIGFuZCBob3cgdGhlIE5ldGxpbmsgbWVzc2FnZXMgYXJlIGJ1aWx0IGFuZCBwYXJzZWQuIFNwZWNpZmljYWxseSwgSSdsbCBiZSBsb29raW5nIGZvciB3aGVyZSBkYXRhIGlzIGJlaW5nIHJlYWQgYW5kIHdyaXR0ZW4gaW4gYG5laWdodGJsX2R1bXBfaW5mbygpYCBhbmQgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIHRoZXNlIGNoYW5nZXMgdG8gbWFrZSBhIHNvdW5kIGp1ZGdtZW50IGFib3V0IHRoZSBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzIwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDA6MDY6MzcuNjc5MTMxNjY5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTc1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNTc1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI1NzY6XFx0XFx0fVxcbjI1Nzc6XFx0XFxuMjU3ODpcXHRcXHRpZiAobmxtc2dfYXR0cmxlbihubGgsIHNpemVvZigqbmR0bSkpKSB7XFxuMjU3OTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJbnZhbGlkIGRhdGEgYWZ0ZXIgaGVhZGVyIGluIG5laWdoYm9yIHRhYmxlIGR1bXAgcmVxdWVzdFxcXCIpO1xcbjI1ODA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjU4MTpcXHRcXHR9XFxuMjU4MjpcXHRcXG4yNTgzOlxcdFxcdHJldHVybiAwO1xcbjI1ODQ6XFx0fVxcbjI1ODU6XFx0XFxuMjU4NjpcXHRzdGF0aWMgaW50IG5laWdodGJsX2R1bXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuMjU4NzpcXHR7XFxuMjU4ODpcXHRcXHRjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IGNiLVxcdTAwM2VubGg7XFxuMjU4OTpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG4yNTkwOlxcdFxcdGludCBkZWZhdWx0X3NraXAgPSBjYi1cXHUwMDNlYXJnc1syXTtcXG4yNTkxOlxcdFxcdGludCBuZWlnaF9za2lwID0gY2ItXFx1MDAzZWFyZ3NbMV07XFxuMjU5MjpcXHRcXHRpbnQgZmFtaWx5LCB0aWR4LCBuaWR4ID0gMDtcXG4yNTkzOlxcdFxcdGludCB0Ymxfc2tpcCA9IGNiLVxcdTAwM2VhcmdzWzBdO1xcbjI1OTQ6XFx0XFx0c3RydWN0IG5laWdoX3RhYmxlICp0Ymw7XFxuMjU5NTpcXHRcXG4yNTk2OlxcdFxcdGlmIChjYi1cXHUwMDNlc3RyaWN0X2NoZWNrKSB7XFxuMjU5NzpcXHRcXHRcXHRpbnQgZXJyID0gbmVpZ2h0YmxfdmFsaWRfZHVtcF9pbmZvKG5saCwgY2ItXFx1MDAzZWV4dGFjayk7XFxuMjU5ODpcXHRcXG4yNTk5OlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjI2MDA6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yNjAxOlxcdFxcdH1cXG4yNjAyOlxcdFxcbjI2MDM6XFx0XFx0ZmFtaWx5ID0gKChzdHJ1Y3QgcnRnZW5tc2cgKilubG1zZ19kYXRhKG5saCkpLVxcdTAwM2VydGdlbl9mYW1pbHk7XFxuMjYwNDpcXHRcXG4yNjA1OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4yNjA2OlxcdFxcbjI2MDc6XFx0XFx0Zm9yICh0aWR4ID0gMDsgdGlkeCBcXHUwMDNjIE5FSUdIX05SX1RBQkxFUzsgdGlkeCsrKSB7XFxuMjYwODpcXHRcXHRcXHRzdHJ1Y3QgbmVpZ2hfcGFybXMgKnA7XFxuMjYwOTpcXHRcXG4yNjEwOlxcdFxcdFxcdHRibCA9IHJjdV9kZXJlZmVyZW5jZShuZWlnaF90YWJsZXNbdGlkeF0pO1xcbjI2MTE6XFx0XFx0XFx0aWYgKCF0YmwpXFxuMjYxMjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNjEzOlxcdFxcbjI2MTQ6XFx0XFx0XFx0aWYgKHRpZHggXFx1MDAzYyB0Ymxfc2tpcCB8fCAoZmFtaWx5IFxcdTAwMjZcXHUwMDI2IHRibC1cXHUwMDNlZmFtaWx5ICE9IGZhbWlseSkpXFxuMjYxNTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNjE2OlxcdFxcbjI2MTc6XFx0XFx0XFx0aWYgKCFkZWZhdWx0X3NraXAgXFx1MDAyNlxcdTAwMjZcXG4yNjE4OlxcdFxcdFxcdCAgICBuZWlnaHRibF9maWxsX2luZm8oc2tiLCB0YmwsIE5FVExJTktfQ0IoY2ItXFx1MDAzZXNrYikucG9ydGlkLFxcbjI2MTk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIG5saC1cXHUwMDNlbmxtc2dfc2VxLCBSVE1fTkVXTkVJR0hUQkwsXFxuMjYyMDpcXHRcXHRcXHRcXHRcXHQgICAgICAgTkxNX0ZfTVVMVEkpIFxcdTAwM2MgMClcXG4yNjIxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI2MjI6XFx0XFxuMjYyMzpcXHRcXHRcXHRkZWZhdWx0X3NraXAgPSAxO1xcbjI2MjQ6XFx0XFxuMjYyNTpcXHRcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwLCBcXHUwMDI2dGJsLVxcdTAwM2VwYXJtc19saXN0LCBsaXN0KSB7XFxuMjYyNjpcXHRcXHRcXHRcXHRpZiAoIW5ldF9lcShuZWlnaF9wYXJtc19uZXQocCksIG5ldCkpXFxuMjYyNzpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNjI4OlxcdFxcbjI2Mjk6XFx0XFx0XFx0XFx0aWYgKCFwLVxcdTAwM2VkZXYgfHwgcC1cXHUwMDNlZGV2ID09IGJsYWNraG9sZV9uZXRkZXYpXFxuMjYzMDpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNjMxOlxcdFxcbjI2MzI6XFx0XFx0XFx0XFx0aWYgKG5pZHggXFx1MDAzYyBuZWlnaF9za2lwKVxcbjI2MzM6XFx0XFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbjI2MzQ6XFx0XFxuMjYzNTpcXHRcXHRcXHRcXHRpZiAobmVpZ2h0YmxfZmlsbF9wYXJhbV9pbmZvKHNrYiwgdGJsLCBwLFxcbjI2MzY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBORVRMSU5LX0NCKGNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4yNjM3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgbmxoLVxcdTAwM2VubG1zZ19zZXEsXFxuMjYzODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFJUTV9ORVdORUlHSFRCTCxcXG4yNjM5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgTkxNX0ZfTVVMVEkpIFxcdTAwM2MgMClcXG4yNjQwOlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjI2NDE6XFx0XFx0XFx0bmV4dDpcXG4yNjQyOlxcdFxcdFxcdFxcdG5pZHgrKztcXG4yNjQzOlxcdFxcdFxcdH1cXG4yNjQ0OlxcdFxcbjI2NDU6XFx0XFx0XFx0bmVpZ2hfc2tpcCA9IDA7XFxuMjY0NjpcXHRcXHRcXHRuaWR4ID0gMDtcXG4yNjQ3OlxcdFxcdFxcdGRlZmF1bHRfc2tpcCA9IDA7XFxuMjY0ODpcXHRcXHR9XFxuMjY0OTpcXHRvdXQ6XFxuMjY1MDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yNjUxOlxcdFxcbjI2NTI6XFx0XFx0Y2ItXFx1MDAzZWFyZ3NbMF0gPSB0aWR4O1xcbjI2NTM6XFx0XFx0Y2ItXFx1MDAzZWFyZ3NbMV0gPSBuaWR4O1xcbjI2NTQ6XFx0XFx0Y2ItXFx1MDAzZWFyZ3NbMl0gPSBkZWZhdWx0X3NraXA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAwOjA2OjM3LjY3OTM2MDI1OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTQ1NTQ3MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTmVpZ2hib3IgVGFibGUgRmlsbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBuZWlnaGJvciB0YWJsZSBwb3B1bGF0aW9uIGxvZ2ljLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBjb3ZlcmluZyBhbGwgdGhlIGJhc2VzLiBCZWZvcmUgSSBnbyB0b28gZGVlcCwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBgbmVpZ2h0YmxfZmlsbF9pbmZvYCBhbmQgYG5laWdodGJsX2ZpbGxfcGFyYW1faW5mb2Agc3RydWN0dXJlcyBhbmQgYXNzb2NpYXRlZCBmdW5jdGlvbnMuIEkndmUgZ290IGEgZmVlbGluZyB0aGVyZSdzIHNvbWV0aGluZyByZWxldmFudCBpbiBlaXRoZXIgdGhvc2Ugc3RydWN0dXJlcyBvciBhc3NvY2lhdGVkIHByb2Nlc3NpbmcuIEl0J3MgYSBrZXkgc3BvdCBhbmQgdGhlcmUgYXJlIGxpa2VseSBwYXJhbWV0ZXJzIHRoYXQgaW5mbHVlbmNlIHRoZSBiZWhhdmlvci4gR29pbmcgb3ZlciB0aGUgcGFyYW1ldGVycyByZWxhdGVkIHRvIHRoZSBmaWxsaW5nIHByb2Nlc3Mgd2lsbCBnaXZlIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZpbGxpbmcgcHJvY2Vzcy4gQmV0dGVyIHRvIGNvbmZpcm0gZXZlcnl0aGluZyByZWxhdGVkIHRvIHRoZW0gYmVmb3JlIG1vdmluZyB0byBvdGhlciB0aGluZ3MuIEl0J3MgYSBnb29kIGFwcHJvYWNoIGZvciBtYWtpbmcgc3VyZSBhbGwgb2YgdGhlIGRpZmZlcmVudCBvcHRpb25zIGFyZSBjb3ZlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDE3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMDowNjo0Mi44MjQ5MTA1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDg1LFxuICBcIkxpbmVDb3VudFwiOiA4NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDg1OlxcdFxcdFxcdFxcdGNhc2UgTkRUUEFfTUNBU1RfUFJPQkVTOlxcbjI0ODY6XFx0XFx0XFx0XFx0XFx0TkVJR0hfVkFSX1NFVChwLCBNQ0FTVF9QUk9CRVMsXFxuMjQ4NzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBubGFfZ2V0X3UzMih0YnBbaV0pKTtcXG4yNDg4OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI0ODk6XFx0XFx0XFx0XFx0Y2FzZSBORFRQQV9NQ0FTVF9SRVBST0JFUzpcXG4yNDkwOlxcdFxcdFxcdFxcdFxcdE5FSUdIX1ZBUl9TRVQocCwgTUNBU1RfUkVQUk9CRVMsXFxuMjQ5MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBubGFfZ2V0X3UzMih0YnBbaV0pKTtcXG4yNDkyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI0OTM6XFx0XFx0XFx0XFx0Y2FzZSBORFRQQV9CQVNFX1JFQUNIQUJMRV9USU1FOlxcbjI0OTQ6XFx0XFx0XFx0XFx0XFx0TkVJR0hfVkFSX1NFVChwLCBCQVNFX1JFQUNIQUJMRV9USU1FLFxcbjI0OTU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgbmxhX2dldF9tc2Vjcyh0YnBbaV0pKTtcXG4yNDk2OlxcdFxcdFxcdFxcdFxcdC8qIHVwZGF0ZSByZWFjaGFibGVfdGltZSBhcyB3ZWxsLCBvdGhlcndpc2UsIHRoZSBjaGFuZ2Ugd2lsbFxcbjI0OTc6XFx0XFx0XFx0XFx0XFx0ICogb25seSBiZSBlZmZlY3RpdmUgYWZ0ZXIgdGhlIG5leHQgdGltZSBuZWlnaF9wZXJpb2RpY193b3JrXFxuMjQ5ODpcXHRcXHRcXHRcXHRcXHQgKiBkZWNpZGVzIHRvIHJlY29tcHV0ZSBpdCAoY2FuIGJlIG11bHRpcGxlIG1pbnV0ZXMpXFxuMjQ5OTpcXHRcXHRcXHRcXHRcXHQgKi9cXG4yNTAwOlxcdFxcdFxcdFxcdFxcdG5laWdoX3NldF9yZWFjaF90aW1lKHApO1xcbjI1MDE6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjUwMjpcXHRcXHRcXHRcXHRjYXNlIE5EVFBBX0dDX1NUQUxFVElNRTpcXG4yNTAzOlxcdFxcdFxcdFxcdFxcdE5FSUdIX1ZBUl9TRVQocCwgR0NfU1RBTEVUSU1FLFxcbjI1MDQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgbmxhX2dldF9tc2Vjcyh0YnBbaV0pKTtcXG4yNTA1OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI1MDY6XFx0XFx0XFx0XFx0Y2FzZSBORFRQQV9ERUxBWV9QUk9CRV9USU1FOlxcbjI1MDc6XFx0XFx0XFx0XFx0XFx0TkVJR0hfVkFSX1NFVChwLCBERUxBWV9QUk9CRV9USU1FLFxcbjI1MDg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgbmxhX2dldF9tc2Vjcyh0YnBbaV0pKTtcXG4yNTA5OlxcdFxcdFxcdFxcdFxcdGNhbGxfbmV0ZXZlbnRfbm90aWZpZXJzKE5FVEVWRU5UX0RFTEFZX1BST0JFX1RJTUVfVVBEQVRFLCBwKTtcXG4yNTEwOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI1MTE6XFx0XFx0XFx0XFx0Y2FzZSBORFRQQV9JTlRFUlZBTF9QUk9CRV9USU1FX01TOlxcbjI1MTI6XFx0XFx0XFx0XFx0XFx0TkVJR0hfVkFSX1NFVChwLCBJTlRFUlZBTF9QUk9CRV9USU1FX01TLFxcbjI1MTM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgbmxhX2dldF9tc2Vjcyh0YnBbaV0pKTtcXG4yNTE0OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI1MTU6XFx0XFx0XFx0XFx0Y2FzZSBORFRQQV9SRVRSQU5TX1RJTUU6XFxuMjUxNjpcXHRcXHRcXHRcXHRcXHRORUlHSF9WQVJfU0VUKHAsIFJFVFJBTlNfVElNRSxcXG4yNTE3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIG5sYV9nZXRfbXNlY3ModGJwW2ldKSk7XFxuMjUxODpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yNTE5OlxcdFxcdFxcdFxcdGNhc2UgTkRUUEFfQU5ZQ0FTVF9ERUxBWTpcXG4yNTIwOlxcdFxcdFxcdFxcdFxcdE5FSUdIX1ZBUl9TRVQocCwgQU5ZQ0FTVF9ERUxBWSxcXG4yNTIxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIG5sYV9nZXRfbXNlY3ModGJwW2ldKSk7XFxuMjUyMjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4yNTIzOlxcdFxcdFxcdFxcdGNhc2UgTkRUUEFfUFJPWFlfREVMQVk6XFxuMjUyNDpcXHRcXHRcXHRcXHRcXHRORUlHSF9WQVJfU0VUKHAsIFBST1hZX0RFTEFZLFxcbjI1MjU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgbmxhX2dldF9tc2Vjcyh0YnBbaV0pKTtcXG4yNTI2OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI1Mjc6XFx0XFx0XFx0XFx0Y2FzZSBORFRQQV9MT0NLVElNRTpcXG4yNTI4OlxcdFxcdFxcdFxcdFxcdE5FSUdIX1ZBUl9TRVQocCwgTE9DS1RJTUUsXFxuMjUyOTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBubGFfZ2V0X21zZWNzKHRicFtpXSkpO1xcbjI1MzA6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjUzMTpcXHRcXHRcXHRcXHR9XFxuMjUzMjpcXHRcXHRcXHR9XFxuMjUzMzpcXHRcXHR9XFxuMjUzNDpcXHRcXG4yNTM1OlxcdFxcdGVyciA9IC1FTk9FTlQ7XFxuMjUzNjpcXHRcXHRpZiAoKHRiW05EVEFfVEhSRVNIMV0gfHwgdGJbTkRUQV9USFJFU0gyXSB8fFxcbjI1Mzc6XFx0XFx0ICAgICB0YltORFRBX1RIUkVTSDNdIHx8IHRiW05EVEFfR0NfSU5URVJWQUxdKSBcXHUwMDI2XFx1MDAyNlxcbjI1Mzg6XFx0XFx0ICAgICFuZXRfZXEobmV0LCBcXHUwMDI2aW5pdF9uZXQpKVxcbjI1Mzk6XFx0XFx0XFx0Z290byBlcnJvdXRfdGJsX2xvY2s7XFxuMjU0MDpcXHRcXG4yNTQxOlxcdFxcdGlmICh0YltORFRBX1RIUkVTSDFdKVxcbjI1NDI6XFx0XFx0XFx0V1JJVEVfT05DRSh0YmwtXFx1MDAzZWdjX3RocmVzaDEsIG5sYV9nZXRfdTMyKHRiW05EVEFfVEhSRVNIMV0pKTtcXG4yNTQzOlxcdFxcbjI1NDQ6XFx0XFx0aWYgKHRiW05EVEFfVEhSRVNIMl0pXFxuMjU0NTpcXHRcXHRcXHRXUklURV9PTkNFKHRibC1cXHUwMDNlZ2NfdGhyZXNoMiwgbmxhX2dldF91MzIodGJbTkRUQV9USFJFU0gyXSkpO1xcbjI1NDY6XFx0XFxuMjU0NzpcXHRcXHRpZiAodGJbTkRUQV9USFJFU0gzXSlcXG4yNTQ4OlxcdFxcdFxcdFdSSVRFX09OQ0UodGJsLVxcdTAwM2VnY190aHJlc2gzLCBubGFfZ2V0X3UzMih0YltORFRBX1RIUkVTSDNdKSk7XFxuMjU0OTpcXHRcXG4yNTUwOlxcdFxcdGlmICh0YltORFRBX0dDX0lOVEVSVkFMXSlcXG4yNTUxOlxcdFxcdFxcdFdSSVRFX09OQ0UodGJsLVxcdTAwM2VnY19pbnRlcnZhbCwgbmxhX2dldF9tc2Vjcyh0YltORFRBX0dDX0lOVEVSVkFMXSkpO1xcbjI1NTI6XFx0XFxuMjU1MzpcXHRcXHRlcnIgPSAwO1xcbjI1NTQ6XFx0XFxuMjU1NTpcXHRlcnJvdXRfdGJsX2xvY2s6XFxuMjU1NjpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGJsLVxcdTAwM2Vsb2NrKTtcXG4yNTU3OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjI1NTg6XFx0ZXJyb3V0OlxcbjI1NTk6XFx0XFx0cmV0dXJuIGVycjtcXG4yNTYwOlxcdH1cXG4yNTYxOlxcdFxcbjI1NjI6XFx0c3RhdGljIGludCBuZWlnaHRibF92YWxpZF9kdW1wX2luZm8oY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuMjU2MzpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjI1NjQ6XFx0e1xcbjI1NjU6XFx0XFx0c3RydWN0IG5kdG1zZyAqbmR0bTtcXG4yNTY2OlxcdFxcbjI1Njc6XFx0XFx0bmR0bSA9IG5sbXNnX3BheWxvYWQobmxoLCBzaXplb2YoKm5kdG0pKTtcXG4yNTY4OlxcdFxcdGlmICghbmR0bSkge1xcbjI1Njk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBoZWFkZXIgZm9yIG5laWdoYm9yIHRhYmxlIGR1bXAgcmVxdWVzdFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMDowNjo0Mi44MjUxNjk0NzFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgzNzMxMDExNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgY29kZSwgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgbWF0ZXJpYWw6XG5cbioqRGlnZ2luZyBpbnRvIGBuZWlnaHRibF9maWxsX2luZm9gIGFuZCBgbmVpZ2h0YmxfZmlsbF9wYXJhbV9pbmZvYCoqXG5cblJpZ2h0LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgbGluZXMgMjIwMC0yMzYwLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBhbmQgYmVoYXZpb3JzIG9mIGBuZWlnaHRibF9maWxsX2luZm9gIGFuZCBgbmVpZ2h0YmxfZmlsbF9wYXJhbV9pbmZvYCBmdW5jdGlvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGUgdXNlIGNhc2VzIG9mIHRoZXNlIGZ1bmN0aW9ucz8gVGhleSBhcmUgb2Z0ZW4gdXNlZCBpbiBzaW1pbGFyIGNvbnRleHRzLCBidXQgdGhlaXIgZGlmZmVyZW5jZXMgYXJlIGltcG9ydGFudCB0byBub3RlLiBJcyB0aGlzIGNvZGUgc2VnbWVudCBjYWxsaW5nIHRoZSBmdW5jdGlvbnMgaW4gYSB3YXkgdGhhdCBzdWdnZXN0cyBhIHN1YnRsZSBkaWZmZXJlbmNlIGluIHRoZWlyIGV4ZWN1dGlvbj9cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCAnZmlsbCcgbWVhbnMgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCBhYm91dCBwb3B1bGF0aW5nIGEgZGF0YSBzdHJ1Y3R1cmUsIGluaXRpYWxpemluZyBpdCwgb3IgdXBkYXRpbmcgZXhpc3RpbmcgZW50cmllcz8gVGhpcyBpcyBjcml0aWNhbCBmb3Iga25vd2luZyBob3cgdGhlc2UgZnVuY3Rpb25zIGNvbnRyaWJ1dGUgdG8gdGhlIGxhcmdlciBwaWN0dXJlLiBJIHdpbGwgYmUgbG9va2luZyBvdXQgZm9yIGNvbW1vbiBwYXR0ZXJucyBhbmQgYXJndW1lbnRzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGV5IHdvcmsuXG5cbkknbGwgY2hlY2sgdGhlIGNhbGxzIHRvIHVuZGVyc3RhbmQgdGhlIGFyZ3VtZW50IHNpZ25hdHVyZXMuIEFyZSB0aGV5IHRha2luZyBzaW1pbGFyIGFyZ3VtZW50cywgb3IgZG8gdGhleSBleHBlY3QgZGlzdGluY3QgcGFyYW1ldGVycz8gQW5kIG9mIGNvdXJzZSwgSSBtdXN0IGtub3csIGFyZSB3ZSBoYW5kbGluZyBjYXNlcyB3aXRoIHZhcnlpbmcgbWVtb3J5IGFsbG9jYXRpb25zPyBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGFyYW1ldGVycyBhcmUgYmVpbmcgdXRpbGl6ZWQgc28gSSBrbm93IHdoZW4gdG8gYmUgY29uY2VybmVkIGFib3V0IG92ZXJmbG93IGVycm9ycy4gVGhpcyB3aWxsIGhlbHAgbWUgdG8gZGVjaWRlIHdoZXRoZXIgdGhpcyBpcyBhIHBsYWNlIHRvIGZvY3VzIG9uIGZ1cnRoZXIgb3B0aW1pemF0aW9uLCByZWZhY3RvcmluZywgb3Igc2ltcGx5IGNvbmZpcm1pbmcgY29ycmVjdCBiZWhhdmlvci5cblxuTW9yZSB0aGFuIGxpa2VseSwgSSdtIGV4cGVjdGluZyBgbmVpZ2h0YmxfZmlsbF9pbmZvYCB0byBkbyBhIG1vcmUgZ2VuZXJhbCBkYXRhIHBvcHVsYXRpb24sIGFuZCBgbmVpZ2h0YmxfZmlsbF9wYXJhbV9pbmZvYCB0byBmb2N1cyBvbiBhIHBhcnRpY3VsYXIgc2V0IG9mIHBhcmFtZXRlcnMgd2l0aGluIHRoZSBsYXJnZXIgc3RydWN0dXJlLiBUaGF0J3MgbXkgc3RhcnRpbmcgYXNzdW1wdGlvbiwgYnV0IHRoZSBhY3R1YWwgY29kZSB3aWxsIGRpY3RhdGUgaWYgdGhhdCdzIGFjY3VyYXRlLiBJJ20gZ29pbmcgdG8gbWFrZSBzdXJlIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHRvIHNlZSBpZiBpdCBpcyB1c2VkIGZvciBzb21ldGhpbmcgSSBoYXZlbid0IGNvbnNpZGVyZWQuXG5cbkknbSByZWFkeSB0byBkaXZlIGludG8gdGhlIGNvZGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MDgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAwOjA2OjQ1LjY2MjQ4MjM3N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDMwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmVpZ2hib3VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIwMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjIwMDpcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBORFRQQV9SRUZDTlQsIHJlZmNvdW50X3JlYWQoXFx1MDAyNnBhcm1zLVxcdTAwM2VyZWZjbnQpKSB8fFxcbjIyMDE6XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgTkRUUEFfUVVFVUVfTEVOQllURVMsXFxuMjIwMjpcXHRcXHRcXHRcXHRORUlHSF9WQVIocGFybXMsIFFVRVVFX0xFTl9CWVRFUykpIHx8XFxuMjIwMzpcXHRcXHQgICAgLyogYXBwcm94aW1hdGl2ZSB2YWx1ZSBmb3IgZGVwcmVjYXRlZCBRVUVVRV9MRU4gKGluIHBhY2tldHMpICovXFxuMjIwNDpcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBORFRQQV9RVUVVRV9MRU4sXFxuMjIwNTpcXHRcXHRcXHRcXHRORUlHSF9WQVIocGFybXMsIFFVRVVFX0xFTl9CWVRFUykgLyBTS0JfVFJVRVNJWkUoRVRIX0ZSQU1FX0xFTikpIHx8XFxuMjIwNjpcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBORFRQQV9QUk9YWV9RTEVOLCBORUlHSF9WQVIocGFybXMsIFBST1hZX1FMRU4pKSB8fFxcbjIyMDc6XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgTkRUUEFfQVBQX1BST0JFUywgTkVJR0hfVkFSKHBhcm1zLCBBUFBfUFJPQkVTKSkgfHxcXG4yMjA4OlxcdFxcdCAgICBubGFfcHV0X3UzMihza2IsIE5EVFBBX1VDQVNUX1BST0JFUyxcXG4yMjA5OlxcdFxcdFxcdFxcdE5FSUdIX1ZBUihwYXJtcywgVUNBU1RfUFJPQkVTKSkgfHxcXG4yMjEwOlxcdFxcdCAgICBubGFfcHV0X3UzMihza2IsIE5EVFBBX01DQVNUX1BST0JFUyxcXG4yMjExOlxcdFxcdFxcdFxcdE5FSUdIX1ZBUihwYXJtcywgTUNBU1RfUFJPQkVTKSkgfHxcXG4yMjEyOlxcdFxcdCAgICBubGFfcHV0X3UzMihza2IsIE5EVFBBX01DQVNUX1JFUFJPQkVTLFxcbjIyMTM6XFx0XFx0XFx0XFx0TkVJR0hfVkFSKHBhcm1zLCBNQ0FTVF9SRVBST0JFUykpIHx8XFxuMjIxNDpcXHRcXHQgICAgbmxhX3B1dF9tc2Vjcyhza2IsIE5EVFBBX1JFQUNIQUJMRV9USU1FLCBSRUFEX09OQ0UocGFybXMtXFx1MDAzZXJlYWNoYWJsZV90aW1lKSxcXG4yMjE1OlxcdFxcdFxcdFxcdCAgTkRUUEFfUEFEKSB8fFxcbjIyMTY6XFx0XFx0ICAgIG5sYV9wdXRfbXNlY3Moc2tiLCBORFRQQV9CQVNFX1JFQUNIQUJMRV9USU1FLFxcbjIyMTc6XFx0XFx0XFx0XFx0ICBORUlHSF9WQVIocGFybXMsIEJBU0VfUkVBQ0hBQkxFX1RJTUUpLCBORFRQQV9QQUQpIHx8XFxuMjIxODpcXHRcXHQgICAgbmxhX3B1dF9tc2Vjcyhza2IsIE5EVFBBX0dDX1NUQUxFVElNRSxcXG4yMjE5OlxcdFxcdFxcdFxcdCAgTkVJR0hfVkFSKHBhcm1zLCBHQ19TVEFMRVRJTUUpLCBORFRQQV9QQUQpIHx8XFxuMjIyMDpcXHRcXHQgICAgbmxhX3B1dF9tc2Vjcyhza2IsIE5EVFBBX0RFTEFZX1BST0JFX1RJTUUsXFxuMjIyMTpcXHRcXHRcXHRcXHQgIE5FSUdIX1ZBUihwYXJtcywgREVMQVlfUFJPQkVfVElNRSksIE5EVFBBX1BBRCkgfHxcXG4yMjIyOlxcdFxcdCAgICBubGFfcHV0X21zZWNzKHNrYiwgTkRUUEFfUkVUUkFOU19USU1FLFxcbjIyMjM6XFx0XFx0XFx0XFx0ICBORUlHSF9WQVIocGFybXMsIFJFVFJBTlNfVElNRSksIE5EVFBBX1BBRCkgfHxcXG4yMjI0OlxcdFxcdCAgICBubGFfcHV0X21zZWNzKHNrYiwgTkRUUEFfQU5ZQ0FTVF9ERUxBWSxcXG4yMjI1OlxcdFxcdFxcdFxcdCAgTkVJR0hfVkFSKHBhcm1zLCBBTllDQVNUX0RFTEFZKSwgTkRUUEFfUEFEKSB8fFxcbjIyMjY6XFx0XFx0ICAgIG5sYV9wdXRfbXNlY3Moc2tiLCBORFRQQV9QUk9YWV9ERUxBWSxcXG4yMjI3OlxcdFxcdFxcdFxcdCAgTkVJR0hfVkFSKHBhcm1zLCBQUk9YWV9ERUxBWSksIE5EVFBBX1BBRCkgfHxcXG4yMjI4OlxcdFxcdCAgICBubGFfcHV0X21zZWNzKHNrYiwgTkRUUEFfTE9DS1RJTUUsXFxuMjIyOTpcXHRcXHRcXHRcXHQgIE5FSUdIX1ZBUihwYXJtcywgTE9DS1RJTUUpLCBORFRQQV9QQUQpIHx8XFxuMjIzMDpcXHRcXHQgICAgbmxhX3B1dF9tc2Vjcyhza2IsIE5EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVMsXFxuMjIzMTpcXHRcXHRcXHRcXHQgIE5FSUdIX1ZBUihwYXJtcywgSU5URVJWQUxfUFJPQkVfVElNRV9NUyksIE5EVFBBX1BBRCkpXFxuMjIzMjpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4yMjMzOlxcdFxcdHJldHVybiBubGFfbmVzdF9lbmQoc2tiLCBuZXN0KTtcXG4yMjM0OlxcdFxcbjIyMzU6XFx0bmxhX3B1dF9mYWlsdXJlOlxcbjIyMzY6XFx0XFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgbmVzdCk7XFxuMjIzNzpcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbjIyMzg6XFx0fVxcbjIyMzk6XFx0XFxuMjI0MDpcXHRzdGF0aWMgaW50IG5laWdodGJsX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCxcXG4yMjQxOlxcdFxcdFxcdFxcdCAgICAgIHUzMiBwaWQsIHUzMiBzZXEsIGludCB0eXBlLCBpbnQgZmxhZ3MpXFxuMjI0MjpcXHR7XFxuMjI0MzpcXHRcXHRzdHJ1Y3Qgbmxtc2doZHIgKm5saDtcXG4yMjQ0OlxcdFxcdHN0cnVjdCBuZHRtc2cgKm5kdG1zZztcXG4yMjQ1OlxcdFxcbjIyNDY6XFx0XFx0bmxoID0gbmxtc2dfcHV0KHNrYiwgcGlkLCBzZXEsIHR5cGUsIHNpemVvZigqbmR0bXNnKSwgZmxhZ3MpO1xcbjIyNDc6XFx0XFx0aWYgKG5saCA9PSBOVUxMKVxcbjIyNDg6XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4yMjQ5OlxcdFxcbjIyNTA6XFx0XFx0bmR0bXNnID0gbmxtc2dfZGF0YShubGgpO1xcbjIyNTE6XFx0XFx0bmR0bXNnLVxcdTAwM2VuZHRtX2ZhbWlseSA9IHRibC1cXHUwMDNlZmFtaWx5O1xcbjIyNTI6XFx0XFx0bmR0bXNnLVxcdTAwM2VuZHRtX3BhZDEgICA9IDA7XFxuMjI1MzpcXHRcXHRuZHRtc2ctXFx1MDAzZW5kdG1fcGFkMiAgID0gMDtcXG4yMjU0OlxcdFxcbjIyNTU6XFx0XFx0aWYgKG5sYV9wdXRfc3RyaW5nKHNrYiwgTkRUQV9OQU1FLCB0YmwtXFx1MDAzZWlkKSB8fFxcbjIyNTY6XFx0XFx0ICAgIG5sYV9wdXRfbXNlY3Moc2tiLCBORFRBX0dDX0lOVEVSVkFMLCBSRUFEX09OQ0UodGJsLVxcdTAwM2VnY19pbnRlcnZhbCksXFxuMjI1NzpcXHRcXHRcXHRcXHQgIE5EVEFfUEFEKSB8fFxcbjIyNTg6XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgTkRUQV9USFJFU0gxLCBSRUFEX09OQ0UodGJsLVxcdTAwM2VnY190aHJlc2gxKSkgfHxcXG4yMjU5OlxcdFxcdCAgICBubGFfcHV0X3UzMihza2IsIE5EVEFfVEhSRVNIMiwgUkVBRF9PTkNFKHRibC1cXHUwMDNlZ2NfdGhyZXNoMikpIHx8XFxuMjI2MDpcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBORFRBX1RIUkVTSDMsIFJFQURfT05DRSh0YmwtXFx1MDAzZWdjX3RocmVzaDMpKSlcXG4yMjYxOlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjIyNjI6XFx0XFx0e1xcbjIyNjM6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzO1xcbjIyNjQ6XFx0XFx0XFx0bG9uZyBmbHVzaF9kZWx0YSA9IG5vdyAtIFJFQURfT05DRSh0YmwtXFx1MDAzZWxhc3RfZmx1c2gpO1xcbjIyNjU6XFx0XFx0XFx0bG9uZyByYW5kX2RlbHRhID0gbm93IC0gUkVBRF9PTkNFKHRibC1cXHUwMDNlbGFzdF9yYW5kKTtcXG4yMjY2OlxcdFxcdFxcdHN0cnVjdCBuZWlnaF9oYXNoX3RhYmxlICpuaHQ7XFxuMjI2NzpcXHRcXHRcXHRzdHJ1Y3QgbmR0X2NvbmZpZyBuZGMgPSB7XFxuMjI2ODpcXHRcXHRcXHRcXHQubmR0Y19rZXlfbGVuXFx0XFx0PSB0YmwtXFx1MDAzZWtleV9sZW4sXFxuMjI2OTpcXHRcXHRcXHRcXHQubmR0Y19lbnRyeV9zaXplXFx0PSB0YmwtXFx1MDAzZWVudHJ5X3NpemUsXFxuMjI3MDpcXHRcXHRcXHRcXHQubmR0Y19lbnRyaWVzXFx0XFx0PSBhdG9taWNfcmVhZChcXHUwMDI2dGJsLVxcdTAwM2VlbnRyaWVzKSxcXG4yMjcxOlxcdFxcdFxcdFxcdC5uZHRjX2xhc3RfZmx1c2hcXHQ9IGppZmZpZXNfdG9fbXNlY3MoZmx1c2hfZGVsdGEpLFxcbjIyNzI6XFx0XFx0XFx0XFx0Lm5kdGNfbGFzdF9yYW5kXFx0XFx0PSBqaWZmaWVzX3RvX21zZWNzKHJhbmRfZGVsdGEpLFxcbjIyNzM6XFx0XFx0XFx0XFx0Lm5kdGNfcHJveHlfcWxlblxcdD0gUkVBRF9PTkNFKHRibC1cXHUwMDNlcHJveHlfcXVldWUucWxlbiksXFxuMjI3NDpcXHRcXHRcXHR9O1xcbjIyNzU6XFx0XFxuMjI3NjpcXHRcXHRcXHRuaHQgPSByY3VfZGVyZWZlcmVuY2UodGJsLVxcdTAwM2VuaHQpO1xcbjIyNzc6XFx0XFx0XFx0bmRjLm5kdGNfaGFzaF9ybmQgPSBuaHQtXFx1MDAzZWhhc2hfcm5kWzBdO1xcbjIyNzg6XFx0XFx0XFx0bmRjLm5kdGNfaGFzaF9tYXNrID0gKCgxIFxcdTAwM2NcXHUwMDNjIG5odC1cXHUwMDNlaGFzaF9zaGlmdCkgLSAxKTtcXG4yMjc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMDowNjo0NS42NjI3MjY4MTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzU5NjQ2ODMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogQSBRdWljayBMb29rKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLCBJIG5lZWQgdG8gYmUgc3VyZSBldmVyeXRoaW5nIGlzIHNvbGlkLiBGaXJzdCwgaXQgbG9va3MgbGlrZSB0aGVyZSBhcmUgYSBmZXcga2V5IGFyZWFzIG9mIGZvY3VzOlxuXG4xLiAgKipOZXRsaW5rIFBvbGljeSBVcGRhdGUqKjogVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UuIFRoZSBgW05EVFBBX0lOVEVSVkFMX1BST0JFX1RJTUVfTVNdYCBwYXJhbWV0ZXIgaW4gYG5sX250YmxfcGFybV9wb2xpY3lgIGlzIGdldHRpbmcgYSBkZWZpbmVkIHJhbmdlIChtaW49MSwgbWF4PU5UQkxfUEFSTV9NU19NQVgpIHVzaW5nIGBOTEFfUE9MSUNZX0ZVTExfUkFOR0VgLCB3aGljaCBpcyBnb29kIHByYWN0aWNlLlxuXG4yLiAgKipTeXNjdGwgVXBkYXRlKio6ICBUaGUgYG5laWdoX3Byb2NfZG9pbnR2ZWNfbXNfamlmZmllc19wb3NpdGl2ZWAgZnVuY3Rpb24gaXMgY29ycmVjdGx5IHNldHRpbmcgYW4gdXBwZXIgYm91bmQgb24gdGhlIHN5c2N0bCB2YWx1ZSB1c2luZyBgdG1wLmV4dHJhMiA9IFx1MDAyNm1heDtgLiBNYWtlcyBzZW5zZS4gRW5zdXJpbmcgY29udHJvbGxlZCB1cHBlciBib3VuZHMgaXMga2V5IGZvciBzdGFiaWxpdHkgYW5kIHNlY3VyaXR5LlxuXG4zLiAgKipEdW1wIENvbnRpbnVhdGlvbiBCdWcgRml4Kio6ICBUaGlzIGlzIHRoZSBtb3N0IGludGVyZXN0aW5nIHBhcnQuIEl0IGFwcGVhcnMgdGhlcmUgd2FzIGEgYnVnIGluIGhvdyBgbmVpZ2h0YmxfZHVtcF9pbmZvYCBoYW5kbGVkIGR1bXBpbmcgdGhlIG5laWdoYm9yIHRhYmxlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGNvbnRpbnVhdGlvbiAoZS5nLiwgd2hlbiB0aGUgYnVmZmVyIGZpbGxzIHVwKS4gUHJldmlvdXNseSwgYGNiLVx1MDAzZWFyZ3NbMF1gIHRyYWNrZWQgYHRpZHhgIGFuZCBgY2ItXHUwMDNlYXJnc1sxXWAgdHJhY2tlZCBgbmVpZ2hfc2tpcGAsIGJ1dCBpZiB0aGUgYnVmZmVyIHJhbiBvdXQgaW4gdGhlIG1pZGRsZSBvZiBwYXJtc19saXN0LCBpdCB3b3VsZCByZWR1bXAgaW5mbyBpZiBub3QgcHJvcGVybHkgc2tpcHBlZC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYGRlZmF1bHRfc2tpcCA9IGNiLVx1MDAzZWFyZ3NbMl07YCB0byBjb3JyZWN0bHkgdHJhY2sgYW5kIHNraXAgdGhlIHRhYmxlIGRlZmF1bHQgaW5mbywgcGFydGljdWxhcmx5IGFmdGVyIHRoZSBidWZmZXIgZmlsbHMuIEl0IGFsc28gZW5zdXJlcyBjbGVhbiBpdGVyYXRpb24gb2YgYHBhcm1zX2xpc3RgIGFuZCBza2lwcyBzcGVjaWFsIGNhc2VzIGxpa2UgYGJsYWNraG9sZV9uZXRkZXZgIG9yIE5VTEwgZGV2aWNlcy5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IGFuZCB0aGluayBhYm91dCBhbnkgcG90ZW50aWFsIGlzc3VlczpcblxuKiAgICoqVW5pbml0aWFsaXplZCBNZW1vcnkgUmVhZHMgb3IgTGVha3MqKjogIEV2ZXJ5dGhpbmcgc2VlbXMgdG8gYmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkuIFRoZSB2YXJpYWJsZXMgaW4gYG5laWdodGJsX2R1bXBfaW5mb2AgYXJlIGFsbCBpbml0aWFsaXplZCBhbmQgdGhlIGBjYi1cdTAwM2VhcmdzYCBhcnJheSBpcyB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBuZXRsaW5rIGR1bXAgc3Vic3lzdGVtLCBhcyBpdCBzaG91bGQgYmUuIFRoZSBgbWluYCBhbmQgYG1heGAgdmFyaWFibGVzIGluIGBuZWlnaF9wcm9jX2RvaW50dmVjX21zX2ppZmZpZXNfcG9zaXRpdmVgIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgdGhlIGBubF9udGJsX3Bhcm1fbXNfcmFuZ2VgIHN0cnVjdCBpcyBzdGF0aWNhbGx5IGluaXRpYWxpemVkLiBHb29kLCBnb29kLCBnb29kLlxuKiAgICoqQnVmZmVyIE92ZXJydW5zL1VuaW5pdGlhbGl6ZWQgU3RydWN0dXJlcy9QYWRkaW5nKio6ICBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGZpZWxkcyBvciBzdHJ1Y3RzIHRoYXQgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZSBjb25zdHJ1Y3Rpb24gb2YgbmV0bGluayBtZXNzYWdlcyBpbiBgbmVpZ2h0YmxfZmlsbF9pbmZvYCBhbmQgYG5laWdodGJsX2ZpbGxfcGFyYW1faW5mb2AgcmVtYWluIHVuY2hhbmdlZCwgZXhjZXB0IGZvciB0aGUgaXRlcmF0aW9uIGFuZCBza2lwIGhhbmRsaW5nLiBObyByZWQgZmxhZ3MgaGVyZS5cblxuQWxyaWdodCwgc28gdGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIGNoZWNrIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSB2dWxuZXJhYmlsaXR5IGluIHRlcm1zIG9mIHRoZSBrZXJuZWwgc2FuaXRpemVycy4gU28sIGRvZXMgYW55dGhpbmcgaGVyZSBuZWVkIEtNU0FOIG9yIGlzIGl0IGNvdmVyZWQgYnkgS0FTQU4/XG5cbiogICAqKktBU0FOIC8gTE9DS0RFUCAvIFVCU0FOIENvdmVyYWdlKio6IEtBU0FOIGFscmVhZHkgY292ZXJzIFJDVSBsaXN0IHRyYXZlcnNhbHMgYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIFNpbmNlIHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgb3IgdW5pbml0aWFsaXplZCBkYXRhIGFjY2VzcyByaXNrcywgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSBoZXJlLiBUaGlzIGlzIGEgY3J1Y2lhbCBkaXN0aW5jdGlvbi5cblxuKipUaGVyZWZvcmUsIE5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlLioqXG5cbk5vdywgbGV0J3MgZG8gYSBmaW5hbCBjaGVjazpcblxuKiAgIEknbGwgYmUgdXNpbmcgYHNldC1yZXN1bHRzIHRvb2xgIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG4qICAgYE5lZWRzS01TQU5gOiBGYWxzZS5cbiogICBgS01TQU5SZWFzb25pbmdgOiBEZXRhaWxlZCBhYm92ZSwgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eS5cblxuVGhpcyBhbGwgbG9va3MgZ29vZCB0byBtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwOTQsIk91dHB1dFRva2VucyI6MTgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDA6MDY6NTMuMjU5MTk4MjIxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gcmFuZ2UgY2hlY2tzIChtaW4vbWF4KSBmb3IgdGhlIG5laWdoYm9yIHRhYmxlIGludGVydmFsX3Byb2JlX3RpbWVfbXMgcGFyYW1ldGVyIHZpYSBuZXRsaW5rIHBvbGljeSBhbmQgc3lzY3RsLCBhbmQgZml4ZXMgbmV0bGluayBkdW1wIHJlc3VtcHRpb24gc3RhdGUgdHJhY2tpbmcgaW4gbmVpZ2h0YmxfZHVtcF9pbmZvKCkgdXNpbmcgY2ItXFx1MDAzZWFyZ3NbMl0gKHdoaWNoIGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIG5ldGxpbmsgZHVtcCBzdWJzeXN0ZW0pLiBBbGwgbG9jYWwgdmFyaWFibGVzIChtaW4sIG1heCwgZGVmYXVsdF9za2lwLCBuaWR4KSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgbm8gbmV3IGRhdGEgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlIGFyZSBpbnRyb2R1Y2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBuZXRsaW5rIGR1bXAgaXRlcmF0aW9uIChzdWNoIGFzIGxpc3QgdHJhdmVyc2FsIG9yIGJvdW5kcyBlcnJvcnMpIGFyZSB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiByYW5nZSBjaGVja3MgKG1pbi9tYXgpIGZvciB0aGUgbmVpZ2hib3IgdGFibGUgaW50ZXJ2YWxfcHJvYmVfdGltZV9tcyBwYXJhbWV0ZXIgdmlhIG5ldGxpbmsgcG9saWN5IGFuZCBzeXNjdGwsIGFuZCBmaXhlcyBuZXRsaW5rIGR1bXAgcmVzdW1wdGlvbiBzdGF0ZSB0cmFja2luZyBpbiBuZWlnaHRibF9kdW1wX2luZm8oKSB1c2luZyBjYi1cXHUwMDNlYXJnc1syXSAod2hpY2ggaXMgemVyby1pbml0aWFsaXplZCBieSB0aGUgbmV0bGluayBkdW1wIHN1YnN5c3RlbSkuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKG1pbiwgbWF4LCBkZWZhdWx0X3NraXAsIG5pZHgpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGFuZCBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UgYXJlIGludHJvZHVjZWQuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIG5ldGxpbmsgZHVtcCBpdGVyYXRpb24gKHN1Y2ggYXMgbGlzdCB0cmF2ZXJzYWwgb3IgYm91bmRzIGVycm9ycykgYXJlIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqt4zk[1] Phase: Succeeded StartedAt: 2026-09-10 00:07:04 +0000 UTC FinishedAt: 2026-09-10 00:07:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqt4zk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-10 00:07:04 +0000 UTC FinishedAt: 2026-09-10 00:07:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqt4zk[2] Phase: Succeeded StartedAt: 2026-09-10 00:07:04 +0000 UTC FinishedAt: 2026-09-10 03:45:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-10 00:07:04 +0000 UTC FinishedAt: 2026-09-10 03:45:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-10 00:07:04 +0000 UTC FinishedAt: 2026-09-10 00:07:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-10 00:07:04 +0000 UTC FinishedAt: 2026-09-10 00:07:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowqt4zk/series-workflowqt4zk-convert-artifact-1473552795/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-10 00:07:14 +0000 UTC FinishedAt: 2026-09-10 00:23:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-10 00:07:14 +0000 UTC FinishedAt: 2026-09-10 00:23:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*086c0fc5-fd05-4b0d-b63b-27e68c56d84b,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-workflowqt4zk/series-workflowqt4zk-convert-artifact-1473552795/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": "57833389-e5b9-47e8-b81e-e225515facc1", "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-workflowqt4zk/series-workflowqt4zk-build-action-1762274777/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-10 00:07:14 +0000 UTC FinishedAt: 2026-09-10 00:22:56 +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:*086c0fc5-fd05-4b0d-b63b-27e68c56d84b,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-workflowqt4zk/series-workflowqt4zk-convert-artifact-1473552795/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": "57833389-e5b9-47e8-b81e-e225515facc1", "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-workflowqt4zk/series-workflowqt4zk-build-action-1762274777/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-10 00:23:06 +0000 UTC FinishedAt: 2026-09-10 00:23:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-10 00:23:06 +0000 UTC FinishedAt: 2026-09-10 00:23:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-10 00:23:06 +0000 UTC FinishedAt: 2026-09-10 00:23:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-10 00:23:06 +0000 UTC FinishedAt: 2026-09-10 00:23:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowqt4zk/series-workflowqt4zk-convert-artifact-975947506/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-10 00:23:16 +0000 UTC FinishedAt: 2026-09-10 00:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-10 00:23:16 +0000 UTC FinishedAt: 2026-09-10 00:25:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*57833389-e5b9-47e8-b81e-e225515facc1,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-workflowqt4zk/series-workflowqt4zk-build-action-1762274777/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-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-10 00:25:11 +0000 UTC FinishedAt: 2026-09-10 00:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-10 00:25:11 +0000 UTC FinishedAt: 2026-09-10 00:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-10 00:25:11 +0000 UTC FinishedAt: 2026-09-10 00:41:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-10 00:25:11 +0000 UTC FinishedAt: 2026-09-10 00:41:08 +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:*086c0fc5-fd05-4b0d-b63b-27e68c56d84b,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-workflowqt4zk/series-workflowqt4zk-convert-artifact-975947506/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": "19e7bb58-8256-4791-934d-847f84daa184", "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-workflowqt4zk/series-workflowqt4zk-build-action-1641662086/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-10 00:25:11 +0000 UTC FinishedAt: 2026-09-10 00:40:58 +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:*086c0fc5-fd05-4b0d-b63b-27e68c56d84b,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-workflowqt4zk/series-workflowqt4zk-convert-artifact-975947506/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": "19e7bb58-8256-4791-934d-847f84daa184", "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-workflowqt4zk/series-workflowqt4zk-build-action-1641662086/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-10 00:41:08 +0000 UTC FinishedAt: 2026-09-10 00:41:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-10 00:41:08 +0000 UTC FinishedAt: 2026-09-10 00:41:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-10 00:41:08 +0000 UTC FinishedAt: 2026-09-10 00:43:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-10 00:41:08 +0000 UTC FinishedAt: 2026-09-10 00:42:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*19e7bb58-8256-4791-934d-847f84daa184,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-workflowqt4zk/series-workflowqt4zk-build-action-1641662086/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-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-10 00:43:02 +0000 UTC FinishedAt: 2026-09-10 03:45:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-10 00:43:02 +0000 UTC FinishedAt: 2026-09-10 03:45:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"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:*57833389-e5b9-47e8-b81e-e225515facc1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*19e7bb58-8256-4791-934d-847f84daa184,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-workflowqt4zk/series-workflowqt4zk-build-action-1762274777/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-workflowqt4zk/series-workflowqt4zk-build-action-1641662086/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-10 00:43:02 +0000 UTC FinishedAt: 2026-09-10 00:43:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-10 00:43:02 +0000 UTC FinishedAt: 2026-09-10 00:43:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"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-workflowqt4zk/series-workflowqt4zk-convert-artifact-1569321287/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-10 00:43:02 +0000 UTC FinishedAt: 2026-09-10 00:43:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-10 00:43:02 +0000 UTC FinishedAt: 2026-09-10 00:43:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-10 00:43:02 +0000 UTC FinishedAt: 2026-09-10 00:43:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-10 00:43:12 +0000 UTC FinishedAt: 2026-09-10 03:45:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqt4zk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["neightbl_dump_info","neightbl_set","neigh_proc_dointvec_ms_jiffies_positive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SYSCTL"],"series_id":"ad343baa-74b0-440c-8d16-36151e5556e1","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-10 00:43:12 +0000 UTC FinishedAt: 2026-09-10 03:45:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*57833389-e5b9-47e8-b81e-e225515facc1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*19e7bb58-8256-4791-934d-847f84daa184,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-workflowqt4zk/series-workflowqt4zk-build-action-1762274777/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-workflowqt4zk/series-workflowqt4zk-build-action-1641662086/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-workflowqt4zk/series-workflowqt4zk-convert-artifact-1569321287/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,}