Name: series-workflow4gcvk Phase: Failed StartedAt: 2026-09-09 16:43:59 +0000 UTC FinishedAt: 2026-09-09 17:23:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4gcvk[0] Phase: Succeeded StartedAt: 2026-09-09 16:43:59 +0000 UTC FinishedAt: 2026-09-09 17:23:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4gcvk[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 16:43:59 +0000 UTC FinishedAt: 2026-09-09 17:23:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgRGV2aWNlVHJlZSBiaW5kaW5ncyBhbmQgdGhlIG1kaW8tcmVhbHRlay1ydGw5MzAwIGRyaXZlciBmb3IgUmVhbHRlayBSVEw4M3h4L1JUTDkzeHggRXRoZXJuZXQgc3dpdGNoIFNvQ3MgKE1JUFMgcGxhdGZvcm0pLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHg4Nl82NC9hbWQ2NCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlMGU3ZDlkMmJhMWEwMjE5NGVjYzU2ZmFiODg3MjA0ZDUyYzZmNDljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxNzoyMjowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcbmluZGV4IDY3ZTBiMjNhODQ3MGUuLjg4NTAyZDAxN2VlZGIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxuQEAgLTU2LDYgJiM0Mzs1Niw5IEBAIHBhdHRlcm5Qcm9wZXJ0aWVzOlxuICAgICAgIHJlZzpcbiAgICAgICAgIG1heEl0ZW1zOiAxXG4gXG4mIzQzOyAgICAgIGNsb2NrLWZyZXF1ZW5jeTpcbiYjNDM7ICAgICAgICBkZWZhdWx0OiAyNTAwMDAwXG4mIzQzO1xuICAgICByZXF1aXJlZDpcbiAgICAgICAtIHJlZ1xuIFxuQEAgLTcxLDYgJiM0Mzs3NCw0MyBAQCByZXF1aXJlZDpcbiAgIC0gY29tcGF0aWJsZVxuICAgLSByZWdcbiBcbiYjNDM7YWxsT2Y6XG4mIzQzOyAgLSBpZjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgICAgY29udGFpbnM6XG4mIzQzOyAgICAgICAgICAgIGVudW06XG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODAtbWRpb1xuJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgxLW1kaW9cbiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4Mi1tZGlvXG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICBwYXR0ZXJuUHJvcGVydGllczpcbiYjNDM7ICAgICAgICAmIzM5O15tZGlvLWJ1c0BbMC0zXSQmIzM5OzpcbiYjNDM7ICAgICAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgICAgIGNsb2NrLWZyZXF1ZW5jeTpcbiYjNDM7ICAgICAgICAgICAgICBlbnVtOiBbMjUwMDAwMCwgMTAwMDAwMDBdXG4mIzQzOyAgLSBpZjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgICAgY29udGFpbnM6XG4mIzQzOyAgICAgICAgICAgIGVudW06XG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTEtbWRpb1xuJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkyLW1kaW9cbiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5My1tZGlvXG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDEtbWRpb1xuJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAyYi1tZGlvXG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDJjLW1kaW9cbiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMy1tZGlvXG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTEtbWRpb1xuJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzEyLW1kaW9cbiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMy1tZGlvXG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICBwYXR0ZXJuUHJvcGVydGllczpcbiYjNDM7ICAgICAgICAmIzM5O15tZGlvLWJ1c0BbMC0zXSQmIzM5OzpcbiYjNDM7ICAgICAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgICAgIGNsb2NrLWZyZXF1ZW5jeTpcbiYjNDM7ICAgICAgICAgICAgICBlbnVtOiBbMTI1MDAwMCwgMjUwMDAwMCwgNTAwMDAwMF1cbiYjNDM7XG4gdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuIFxuIGV4YW1wbGVzOlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuaW5kZXggMTFkMDc4ZWY5NDFjZC4uZDQwZmRkMGVkMmYwZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXG5AQCAtMTMwLDYgJiM0MzsxMzAsNyBAQFxuICNkZWZpbmUgUlRMODM4MF9OVU1fUEFHRVNcdFx0XHQ0MDk2XG4gI2RlZmluZSBSVEw4MzgwX05VTV9QT1JUU1x0XHRcdDI4XG4gI2RlZmluZSBSVEw4MzgwX1NNSV9HTEJfQ1RSTFx0XHRcdDB4YTEwMFxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9TTUlfRlJFUV9TRUxcdFx0XHRCSVQoMSlcbiAjZGVmaW5lICAgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkVcdFx0QklUKDE1KVxuICNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzBcdFx0MHhhMWI4XG4gI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMVx0XHQweGExYmNcbkBAIC0xNjksMTIgJiM0MzsxNzAsMTUgQEBcbiAjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1dcdFx0MHgwM2U0XG4gI2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfSElHSFx0XHQweDAzZThcbiAjZGVmaW5lIFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMXHRcdDB4MDNmY1xuJiM0MzsjZGVmaW5lIFJUTDgzOTBfU01JX0dMQl9DVFJMXHRcdFx0MHgwM2Y4XG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1NNSV9GUkVRX1NFTFx0XHRcdEdFTk1BU0soNiwgNSlcbiBcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX0JVU0VTXHRcdFx0NFxuICNkZWZpbmUgUlRMOTMwMF9OVU1fUEFHRVNcdFx0XHQ0MDk2XG4gI2RlZmluZSBSVEw5MzAwX05VTV9QT1JUU1x0XHRcdDI4XG4gI2RlZmluZSBSVEw5MzAwX1NNSV9HTEJfQ1RSTFx0XHRcdDB4Y2EwMFxuICNkZWZpbmUgICBSVEw5MzAwX0dMQl9DVFJMX0lOVEZfU0VMKGludGYpXHRCSVQoMTYgJiM0MzsgKGludGYpKVxuJiM0MzsjZGVmaW5lICAgUlRMOTMwMF9TTUlfRlJFUV9TRUwoaW50ZilcdFx0R0VOTUFTSygoaW50ZikgKiAyICYjNDM7IDksIChpbnRmKSAqIDIgJiM0MzsgOClcbiAjZGVmaW5lIFJUTDkzMDBfU01JX1BPUlQwXzE1X1BPTExJTkdfU0VMXHQweGNhMDhcbiAjZGVmaW5lIFJUTDkzMDBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wXHRcdDB4Y2I3MFxuICNkZWZpbmUgUlRMOTMwMF9TTUlfQUNDRVNTX1BIWV9DVFJMXzFcdFx0MHhjYjc0XG5AQCAtMTk2LDYgJiM0MzsyMDAsOCBAQFxuICNkZWZpbmUgUlRMOTMxMF9OVU1fQlVTRVNcdFx0XHQ0XG4gI2RlZmluZSBSVEw5MzEwX05VTV9QQUdFU1x0XHRcdDgxOTJcbiAjZGVmaW5lIFJUTDkzMTBfTlVNX1BPUlRTXHRcdFx0NTZcbiYjNDM7I2RlZmluZSBSVEw5MzEwX1NNSV9HTEJfQ1RSTDBcdFx0XHQweDBjYzBcbiYjNDM7I2RlZmluZSAgIFJUTDkzMTBfU01JX0ZSRVFfU0VMKGludGYpXHRcdEdFTk1BU0soKGludGYpICogMiAmIzQzOyA1LCAoaW50ZikgKiAyICYjNDM7IDQpXG4gI2RlZmluZSBSVEw5MzEwX1NNSV9HTEJfQ1RSTDFcdFx0XHQweDBjYmNcbiAjZGVmaW5lICAgUlRMOTMxMF9TTUlfR0xCX0ZNVF9TRUxfQzQ1KGludGYpXHRCSVQoKGludGYpICogMiAmIzQzOyAxKVxuICNkZWZpbmUgUlRMOTMxMF9TTUlfSU5EUlRfQUNDRVNTX0NUUkxfMFx0XHQweDBjMDBcbkBAIC0yNjksNiAmIzQzOzI3NSw3IEBAIHN0cnVjdCBvdHRvX2VtZGlvX2luZm8ge1xuIFx0dTggbnVtX3BvcnRzO1xuIFx0dTE2IG51bV9wYWdlcztcbiBcdHUzMiBwb2xsX2N0cmw7XG4mIzQzO1x0aW50ICgqc2V0X2J1c19mcmVxdWVuY3kpKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBmcmVxKTtcbiBcdGludCAoKnNldHVwX2NvbnRyb2xsZXIpKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpO1xuIFx0aW50ICgqcmVhZF9jMjIpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTtcbiBcdGludCAoKnJlYWRfYzQ1KShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTtcbkBAIC03NDAsNiAmIzQzOzc0NywxNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0dXBfdG9wb2xvZ3koc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfc2V0X2J1c19mcmVxdWVuY3koc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGZyZXEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuJiM0MztcbiYjNDM7XHRpZiAoZnJlcSAhPSAyNTAwMDAwIFx1MDAyNlx1MDAyNiBmcmVxICE9IDEwMDAwMDAwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZWdtYXBfYXNzaWduX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIFJUTDgzODBfU01JX0dMQl9DVFJMLFxuJiM0MztcdFx0XHRcdCAgUlRMODM4MF9TTUlfRlJFUV9TRUwsIGZyZXEgPT0gMTAwMDAwMDApO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiB7XG4gXHQvKlxuQEAgLTc0OSw2ICYjNDM7NzY3LDU3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiBcdHJldHVybiByZWdtYXBfc2V0X2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIFJUTDgzODBfU01JX0dMQl9DVFJMLCBSVEw4MzgwX1NNSV9QSFlfUEFUQ0hfRE9ORSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9zZXRfYnVzX2ZyZXF1ZW5jeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgZnJlcSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4mIzQzO1x0Ym9vbCBmcmVxX3NldCA9IGZhbHNlO1xuJiM0MztcdHUzMiBjaGlsZF9mcmVxLCB2YWw7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSVEw4Mzl4IHVzZXMgYSBzaW5nbGUgZnJlcXVlbmN5IGZvciB0aGUgdHdvIE1ESU8gYnVzZXMuIER1cmluZyByZWdpc3RyYXRpb24gb2YgZmlyc3RcbiYjNDM7XHQgKiBidXMgcGljayBhbiBleHBsaWNpdGx5IHJlcXVlc3RlZCBmcmVxdWVuY3kgZnJvbSBhbnkgZW5hYmxlZCBidXMuIFVzZSB0aGUgZGVmYXVsdCBvbmx5XG4mIzQzO1x0ICogaWYgbm8gZnJlcXVlbmN5IGlzIHNldCBhdCBhbGwuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlYnVzWzBdIHx8IHByaXYtXHUwMDNlYnVzWzFdKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGZyZXEgPSAyNTAwMDAwO1xuJiM0MztcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlX3Njb3BlZChidXMtXHUwMDNlcGFyZW50LVx1MDAzZW9mX25vZGUsIGNoaWxkKSB7XG4mIzQzO1x0XHRpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIoY2hpbGQsIFwmIzM0O2Nsb2NrLWZyZXF1ZW5jeVwmIzM0OywgXHUwMDI2Y2hpbGRfZnJlcSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGlmIChmcmVxX3NldCBcdTAwMjZcdTAwMjYgZnJlcSAhPSBjaGlsZF9mcmVxKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRmcmVxID0gY2hpbGRfZnJlcTtcbiYjNDM7XHRcdGZyZXFfc2V0ID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChmcmVxICE9IDEyNTAwMDAgXHUwMDI2XHUwMDI2IGZyZXEgIT0gMjUwMDAwMCBcdTAwMjZcdTAwMjYgZnJlcSAhPSA1MDAwMDAwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHZhbCA9IEZJRUxEX1BSRVAoUlRMODM5MF9TTUlfRlJFUV9TRUwsIGZyZXEgLyAyNTAwMDAwKTtcbiYjNDM7XHRlcnIgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIFJUTDgzOTBfU01JX0dMQl9DVFJMLCBSVEw4MzkwX1NNSV9GUkVRX1NFTCwgdmFsKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfc2V0X2J1c19mcmVxdWVuY3koc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGZyZXEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NoYW4gKmNoYW4gPSBidXMtXHUwMDNlcHJpdjtcbiYjNDM7XHR1MzIgbWFzaywgdmFsO1xuJiM0MztcbiYjNDM7XHRpZiAoZnJlcSAhPSAxMjUwMDAwIFx1MDAyNlx1MDAyNiBmcmVxICE9IDI1MDAwMDAgXHUwMDI2XHUwMDI2IGZyZXEgIT0gNTAwMDAwMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRtYXNrID0gUlRMOTMwMF9TTUlfRlJFUV9TRUwoY2hhbi1cdTAwM2VtZGlvX2J1cyk7XG4mIzQzO1x0dmFsID0gZmllbGRfcHJlcChtYXNrLCBmcmVxIC8gMjUwMDAwMCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIFJUTDkzMDBfU01JX0dMQl9DVFJMLCBtYXNrLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiB7XG4gXHR1MzIgZ2xiX2N0cmxfbWFzayA9IDAsIGdsYl9jdHJsX3ZhbCA9IDA7XG5AQCAtNzY5LDYgJiM0Mzs4MzgsMjEgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXRfYnVzX2ZyZXF1ZW5jeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgZnJlcSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY2hhbiAqY2hhbiA9IGJ1cy1cdTAwM2Vwcml2O1xuJiM0MztcdHUzMiBtYXNrLCB2YWw7XG4mIzQzO1xuJiM0MztcdGlmIChmcmVxICE9IDEyNTAwMDAgXHUwMDI2XHUwMDI2IGZyZXEgIT0gMjUwMDAwMCBcdTAwMjZcdTAwMjYgZnJlcSAhPSA1MDAwMDAwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdG1hc2sgPSBSVEw5MzEwX1NNSV9GUkVRX1NFTChjaGFuLVx1MDAzZW1kaW9fYnVzKTtcbiYjNDM7XHR2YWwgPSBmaWVsZF9wcmVwKG1hc2ssIGZyZXEgLyAyNTAwMDAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgUlRMOTMxMF9TTUlfR0xCX0NUUkwwLCBtYXNrLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiB7XG4gXHRpbnQgaSwgZXJyO1xuQEAgLTgzMSwxNCAmIzQzOzkxNSwxNCBAQCBzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gfVxuIFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LFxuLVx0XHRcdFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpub2RlKVxuJiM0MztcdFx0XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcbiB7XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuO1xuIFx0c3RydWN0IG1paV9idXMgKmJ1cztcbi1cdHUzMiBtZGlvX2J1cztcbiYjNDM7XHR1MzIgbWRpb19idXMsIGZyZXE7XG4gXHRpbnQgZXJyO1xuIFxuLVx0ZXJyID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsIFwmIzM0O3JlZ1wmIzM0OywgXHUwMDI2bWRpb19idXMpO1xuJiM0MztcdGVyciA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsIFwmIzM0O3JlZ1wmIzM0OywgXHUwMDI2bWRpb19idXMpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsIFwmIzM0O3VuZGVmaW5lZCBzbWkgYnVzIG51bWJlclxcblwmIzM0Oyk7XG4gXG5AQCAtODQ2LDYgJiM0Mzs5MzAsOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdlxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4gXHRcdFx0XHQgICAgIFwmIzM0O2lsbGVnYWwgKGRhbmdsaW5nKSBzbWkgYnVzIG51bWJlciAlZFxcblwmIzM0OywgbWRpb19idXMpO1xuIFxuJiM0MztcdGlmIChwcml2LVx1MDAzZWJ1c1ttZGlvX2J1c10pXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsIFwmIzM0O2R1cGxpY2F0ZWQgc21pIGJ1cyBudW1iZXIgJWRcXG5cJiMzNDssIG1kaW9fYnVzKTtcbiYjNDM7XG4gXHRidXMgPSBkZXZtX21kaW9idXNfYWxsb2Nfc2l6ZShkZXYsIHNpemVvZigqY2hhbikpO1xuIFx0aWYgKCFidXMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTg2NSwxMCAmIzQzOzk1MiwxOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdlxuIFxuIFx0c25wcmludGYoYnVzLVx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFwmIzM0OyVzLSVkXCYjMzQ7LCBkZXZfbmFtZShkZXYpLCBtZGlvX2J1cyk7XG4gXG4tXHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIHRvX29mX25vZGUobm9kZSkpO1xuJiM0MztcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCBcJiMzNDtjbG9jay1mcmVxdWVuY3lcJiMzNDssIFx1MDAyNmZyZXEpKVxuJiM0MztcdFx0ZnJlcSA9IDI1MDAwMDA7XG4mIzQzO1x0ZXJyID0gcHJpdi1cdTAwM2VpbmZvLVx1MDAzZXNldF9idXNfZnJlcXVlbmN5KGJ1cywgZnJlcSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcJiMzNDtjYW5ub3Qgc2V0IGZyZXF1ZW5jeSAldSBmb3IgTURJTyBidXMgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBmcmVxLCBtZGlvX2J1cyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbm9kZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCYjMzQ7Y2Fubm90IHJlZ2lzdGVyIE1ESU8gYnVzXFxuXCYjMzQ7KTtcbiBcbiYjNDM7XHRwcml2LVx1MDAzZWJ1c1ttZGlvX2J1c10gPSBidXM7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEwMjcsNyAmIzQzOzExMjMsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCYjMzQ7ZmFpbGVkIHRvIHNldHVwIE1ESU8gYnVzIGNvbnRyb2xsZXJcXG5cJiMzNDspO1xuIFx0fVxuIFxuLVx0ZGV2aWNlX2Zvcl9lYWNoX2NoaWxkX25vZGVfc2NvcGVkKGRldiwgY2hpbGQpIHtcbiYjNDM7XHRmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZV9zY29wZWQoZGV2LVx1MDAzZW9mX25vZGUsIGNoaWxkKSB7XG4gXHRcdGVyciA9IG90dG9fZW1kaW9fcHJvYmVfb25lKGRldiwgcHJpdiwgY2hpbGQpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG5AQCAtMTA1MSw2ICYjNDM7MTE0Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM4MF9pbmZvID0ge1xuIFx0Lm51bV9wYWdlcyA9IFJUTDgzODBfTlVNX1BBR0VTLFxuIFx0Lm51bV9wb3J0cyA9IFJUTDgzODBfTlVNX1BPUlRTLFxuIFx0LnBvbGxfY3RybCA9IFJUTDgzODBfU01JX1BPTExfQ1RSTCxcbiYjNDM7XHQuc2V0X2J1c19mcmVxdWVuY3kgPSBvdHRvX2VtZGlvXzgzODBfc2V0X2J1c19mcmVxdWVuY3ksXG4gXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyLFxuIFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzIyLFxuIFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1LFxuQEAgLTEwNzUsNiAmIzQzOzExNzIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzOTBfaW5mbyA9IHtcbiBcdC5udW1fcGFnZXMgPSBSVEw4MzkwX05VTV9QQUdFUyxcbiBcdC5udW1fcG9ydHMgPSBSVEw4MzkwX05VTV9QT1JUUyxcbiBcdC5wb2xsX2N0cmwgPSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCxcbiYjNDM7XHQuc2V0X2J1c19mcmVxdWVuY3kgPSBvdHRvX2VtZGlvXzgzOTBfc2V0X2J1c19mcmVxdWVuY3ksXG4gXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIsXG4gXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUsXG4gXHQud3JpdGVfYzIyID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMixcbkBAIC0xMDk3LDYgJiM0MzsxMTk1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzAwX2luZm8gPSB7XG4gXHQubnVtX3BvcnRzID0gUlRMOTMwMF9OVU1fUE9SVFMsXG4gXHQubnVtX3BhZ2VzID0gUlRMOTMwMF9OVU1fUEFHRVMsXG4gXHQucG9sbF9jdHJsID0gUlRMOTMwMF9TTUlfUE9MTF9DVFJMLFxuJiM0MztcdC5zZXRfYnVzX2ZyZXF1ZW5jeSA9IG90dG9fZW1kaW9fOTMwMF9zZXRfYnVzX2ZyZXF1ZW5jeSxcbiBcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIsXG4gXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIsXG4gXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jNDUsXG5AQCAtMTEyMyw2ICYjNDM7MTIyMiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0ge1xuIFx0Lm51bV9wYWdlcyA9IFJUTDkzMTBfTlVNX1BBR0VTLFxuIFx0Lm51bV9wb3J0cyA9IFJUTDkzMTBfTlVNX1BPUlRTLFxuIFx0LnBvbGxfY3RybCA9IFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMLFxuJiM0MztcdC5zZXRfYnVzX2ZyZXF1ZW5jeSA9IG90dG9fZW1kaW9fOTMxMF9zZXRfYnVzX2ZyZXF1ZW5jeSxcbiBcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIsXG4gXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIsXG4gXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jNDUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MjI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgRGV2aWNlVHJlZSBiaW5kaW5ncyBhbmQgdGhlIG1kaW8tcmVhbHRlay1ydGw5MzAwIGRyaXZlciBmb3IgUmVhbHRlayBSVEw4M3h4L1JUTDkzeHggRXRoZXJuZXQgc3dpdGNoIFNvQ3MgKE1JUFMgcGxhdGZvcm0pLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHg4Nl82NC9hbWQ2NCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlMGU3ZDlkMmJhMWEwMjE5NGVjYzU2ZmFiODg3MjA0ZDUyYzZmNDljCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxNzoyMjowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbAppbmRleCA2N2UwYjIzYTg0NzBlLi44ODUwMmQwMTdlZWRiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sCkBAIC01Niw2ICYjNDM7NTYsOSBAQCBwYXR0ZXJuUHJvcGVydGllczoKICAgICAgIHJlZzoKICAgICAgICAgbWF4SXRlbXM6IDEKIAomIzQzOyAgICAgIGNsb2NrLWZyZXF1ZW5jeToKJiM0MzsgICAgICAgIGRlZmF1bHQ6IDI1MDAwMDAKJiM0MzsKICAgICByZXF1aXJlZDoKICAgICAgIC0gcmVnCiAKQEAgLTcxLDYgJiM0Mzs3NCw0MyBAQCByZXF1aXJlZDoKICAgLSBjb21wYXRpYmxlCiAgIC0gcmVnCiAKJiM0MzthbGxPZjoKJiM0MzsgIC0gaWY6CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIGNvbXBhdGlibGU6CiYjNDM7ICAgICAgICAgIGNvbnRhaW5zOgomIzQzOyAgICAgICAgICAgIGVudW06CiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MC1tZGlvCiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MS1tZGlvCiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4Mi1tZGlvCiYjNDM7ICAgIHRoZW46CiYjNDM7ICAgICAgcGF0dGVyblByb3BlcnRpZXM6CiYjNDM7ICAgICAgICAmIzM5O15tZGlvLWJ1c0BbMC0zXSQmIzM5OzoKJiM0MzsgICAgICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgICAgICBjbG9jay1mcmVxdWVuY3k6CiYjNDM7ICAgICAgICAgICAgICBlbnVtOiBbMjUwMDAwMCwgMTAwMDAwMDBdCiYjNDM7ICAtIGlmOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgICBjb250YWluczoKJiM0MzsgICAgICAgICAgICBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTEtbWRpbwomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTItbWRpbwomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTMtbWRpbwomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDEtbWRpbwomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDJiLW1kaW8KJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAyYy1tZGlvCiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMy1tZGlvCiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMS1tZGlvCiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMi1tZGlvCiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMy1tZGlvCiYjNDM7ICAgIHRoZW46CiYjNDM7ICAgICAgcGF0dGVyblByb3BlcnRpZXM6CiYjNDM7ICAgICAgICAmIzM5O15tZGlvLWJ1c0BbMC0zXSQmIzM5OzoKJiM0MzsgICAgICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgICAgICBjbG9jay1mcmVxdWVuY3k6CiYjNDM7ICAgICAgICAgICAgICBlbnVtOiBbMTI1MDAwMCwgMjUwMDAwMCwgNTAwMDAwMF0KJiM0MzsKIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2UKIAogZXhhbXBsZXM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMKaW5kZXggMTFkMDc4ZWY5NDFjZC4uZDQwZmRkMGVkMmYwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYwpAQCAtMTMwLDYgJiM0MzsxMzAsNyBAQAogI2RlZmluZSBSVEw4MzgwX05VTV9QQUdFUwkJCTQwOTYKICNkZWZpbmUgUlRMODM4MF9OVU1fUE9SVFMJCQkyOAogI2RlZmluZSBSVEw4MzgwX1NNSV9HTEJfQ1RSTAkJCTB4YTEwMAomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1NNSV9GUkVRX1NFTAkJCUJJVCgxKQogI2RlZmluZSAgIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FCQlCSVQoMTUpCiAjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wCQkweGExYjgKICNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzEJCTB4YTFiYwpAQCAtMTY5LDEyICYjNDM7MTcwLDE1IEBACiAjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1cJCTB4MDNlNAogI2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfSElHSAkJMHgwM2U4CiAjZGVmaW5lIFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMCQkweDAzZmMKJiM0MzsjZGVmaW5lIFJUTDgzOTBfU01JX0dMQl9DVFJMCQkJMHgwM2Y4CiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfU01JX0ZSRVFfU0VMCQkJR0VOTUFTSyg2LCA1KQogCiAjZGVmaW5lIFJUTDkzMDBfTlVNX0JVU0VTCQkJNAogI2RlZmluZSBSVEw5MzAwX05VTV9QQUdFUwkJCTQwOTYKICNkZWZpbmUgUlRMOTMwMF9OVU1fUE9SVFMJCQkyOAogI2RlZmluZSBSVEw5MzAwX1NNSV9HTEJfQ1RSTAkJCTB4Y2EwMAogI2RlZmluZSAgIFJUTDkzMDBfR0xCX0NUUkxfSU5URl9TRUwoaW50ZikJQklUKDE2ICYjNDM7IChpbnRmKSkKJiM0MzsjZGVmaW5lICAgUlRMOTMwMF9TTUlfRlJFUV9TRUwoaW50ZikJCUdFTk1BU0soKGludGYpICogMiAmIzQzOyA5LCAoaW50ZikgKiAyICYjNDM7IDgpCiAjZGVmaW5lIFJUTDkzMDBfU01JX1BPUlQwXzE1X1BPTExJTkdfU0VMCTB4Y2EwOAogI2RlZmluZSBSVEw5MzAwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMAkJMHhjYjcwCiAjZGVmaW5lIFJUTDkzMDBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xCQkweGNiNzQKQEAgLTE5Niw2ICYjNDM7MjAwLDggQEAKICNkZWZpbmUgUlRMOTMxMF9OVU1fQlVTRVMJCQk0CiAjZGVmaW5lIFJUTDkzMTBfTlVNX1BBR0VTCQkJODE5MgogI2RlZmluZSBSVEw5MzEwX05VTV9QT1JUUwkJCTU2CiYjNDM7I2RlZmluZSBSVEw5MzEwX1NNSV9HTEJfQ1RSTDAJCQkweDBjYzAKJiM0MzsjZGVmaW5lICAgUlRMOTMxMF9TTUlfRlJFUV9TRUwoaW50ZikJCUdFTk1BU0soKGludGYpICogMiAmIzQzOyA1LCAoaW50ZikgKiAyICYjNDM7IDQpCiAjZGVmaW5lIFJUTDkzMTBfU01JX0dMQl9DVFJMMQkJCTB4MGNiYwogI2RlZmluZSAgIFJUTDkzMTBfU01JX0dMQl9GTVRfU0VMX0M0NShpbnRmKQlCSVQoKGludGYpICogMiAmIzQzOyAxKQogI2RlZmluZSBSVEw5MzEwX1NNSV9JTkRSVF9BQ0NFU1NfQ1RSTF8wCQkweDBjMDAKQEAgLTI2OSw2ICYjNDM7Mjc1LDcgQEAgc3RydWN0IG90dG9fZW1kaW9faW5mbyB7CiAJdTggbnVtX3BvcnRzOwogCXUxNiBudW1fcGFnZXM7CiAJdTMyIHBvbGxfY3RybDsKJiM0MzsJaW50ICgqc2V0X2J1c19mcmVxdWVuY3kpKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBmcmVxKTsKIAlpbnQgKCpzZXR1cF9jb250cm9sbGVyKShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KTsKIAlpbnQgKCpyZWFkX2MyMikoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpOwogCWludCAoKnJlYWRfYzQ1KShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTsKQEAgLTc0MCw2ICYjNDM7NzQ3LDE3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19zZXR1cF90b3BvbG9neShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfc2V0X2J1c19mcmVxdWVuY3koc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGZyZXEpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpOwomIzQzOwomIzQzOwlpZiAoZnJlcSAhPSAyNTAwMDAwICZhbXA7JmFtcDsgZnJlcSAhPSAxMDAwMDAwMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gcmVnbWFwX2Fzc2lnbl9iaXRzKHByaXYtJmd0O3JlZ21hcCwgUlRMODM4MF9TTUlfR0xCX0NUUkwsCiYjNDM7CQkJCSAgUlRMODM4MF9TTUlfRlJFUV9TRUwsIGZyZXEgPT0gMTAwMDAwMDApOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdikKIHsKIAkvKgpAQCAtNzQ5LDYgJiM0Mzs3NjcsNTcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KQogCXJldHVybiByZWdtYXBfc2V0X2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBSVEw4MzgwX1NNSV9HTEJfQ1RSTCwgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkUpOwogfQogCiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfc2V0X2J1c19mcmVxdWVuY3koc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGZyZXEpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpOwomIzQzOwlib29sIGZyZXFfc2V0ID0gZmFsc2U7CiYjNDM7CXUzMiBjaGlsZF9mcmVxLCB2YWw7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFJUTDgzOXggdXNlcyBhIHNpbmdsZSBmcmVxdWVuY3kgZm9yIHRoZSB0d28gTURJTyBidXNlcy4gRHVyaW5nIHJlZ2lzdHJhdGlvbiBvZiBmaXJzdAomIzQzOwkgKiBidXMgcGljayBhbiBleHBsaWNpdGx5IHJlcXVlc3RlZCBmcmVxdWVuY3kgZnJvbSBhbnkgZW5hYmxlZCBidXMuIFVzZSB0aGUgZGVmYXVsdCBvbmx5CiYjNDM7CSAqIGlmIG5vIGZyZXF1ZW5jeSBpcyBzZXQgYXQgYWxsLgomIzQzOwkgKi8KJiM0MzsJaWYgKHByaXYtJmd0O2J1c1swXSB8fCBwcml2LSZndDtidXNbMV0pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZnJlcSA9IDI1MDAwMDA7CiYjNDM7CWZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlX3Njb3BlZChidXMtJmd0O3BhcmVudC0mZ3Q7b2Zfbm9kZSwgY2hpbGQpIHsKJiM0MzsJCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihjaGlsZCwgJiMzNDtjbG9jay1mcmVxdWVuY3kmIzM0OywgJmFtcDtjaGlsZF9mcmVxKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWlmIChmcmVxX3NldCAmYW1wOyZhbXA7IGZyZXEgIT0gY2hpbGRfZnJlcSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCWZyZXEgPSBjaGlsZF9mcmVxOwomIzQzOwkJZnJlcV9zZXQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChmcmVxICE9IDEyNTAwMDAgJmFtcDsmYW1wOyBmcmVxICE9IDI1MDAwMDAgJmFtcDsmYW1wOyBmcmVxICE9IDUwMDAwMDApCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJdmFsID0gRklFTERfUFJFUChSVEw4MzkwX1NNSV9GUkVRX1NFTCwgZnJlcSAvIDI1MDAwMDApOwomIzQzOwllcnIgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBSVEw4MzkwX1NNSV9HTEJfQ1RSTCwgUlRMODM5MF9TTUlfRlJFUV9TRUwsIHZhbCk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldF9idXNfZnJlcXVlbmN5KHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBmcmVxKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTsKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY2hhbiAqY2hhbiA9IGJ1cy0mZ3Q7cHJpdjsKJiM0MzsJdTMyIG1hc2ssIHZhbDsKJiM0MzsKJiM0MzsJaWYgKGZyZXEgIT0gMTI1MDAwMCAmYW1wOyZhbXA7IGZyZXEgIT0gMjUwMDAwMCAmYW1wOyZhbXA7IGZyZXEgIT0gNTAwMDAwMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwltYXNrID0gUlRMOTMwMF9TTUlfRlJFUV9TRUwoY2hhbi0mZ3Q7bWRpb19idXMpOwomIzQzOwl2YWwgPSBmaWVsZF9wcmVwKG1hc2ssIGZyZXEgLyAyNTAwMDAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhwcml2LSZndDtyZWdtYXAsIFJUTDkzMDBfU01JX0dMQl9DVFJMLCBtYXNrLCB2YWwpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdikKIHsKIAl1MzIgZ2xiX2N0cmxfbWFzayA9IDAsIGdsYl9jdHJsX3ZhbCA9IDA7CkBAIC03NjksNiAmIzQzOzgzOCwyMSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXRfYnVzX2ZyZXF1ZW5jeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgZnJlcSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX2NoYW4gKmNoYW4gPSBidXMtJmd0O3ByaXY7CiYjNDM7CXUzMiBtYXNrLCB2YWw7CiYjNDM7CiYjNDM7CWlmIChmcmVxICE9IDEyNTAwMDAgJmFtcDsmYW1wOyBmcmVxICE9IDI1MDAwMDAgJmFtcDsmYW1wOyBmcmVxICE9IDUwMDAwMDApCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJbWFzayA9IFJUTDkzMTBfU01JX0ZSRVFfU0VMKGNoYW4tJmd0O21kaW9fYnVzKTsKJiM0MzsJdmFsID0gZmllbGRfcHJlcChtYXNrLCBmcmVxIC8gMjUwMDAwMCk7CiYjNDM7CiYjNDM7CXJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBSVEw5MzEwX1NNSV9HTEJfQ1RSTDAsIG1hc2ssIHZhbCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KQogewogCWludCBpLCBlcnI7CkBAIC04MzEsMTQgJiM0Mzs5MTUsMTQgQEAgc3RhdGljIHZvaWQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogfQogCiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiwKLQkJCQkgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKm5vZGUpCiYjNDM7CQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKIHsKIAlzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuOwogCXN0cnVjdCBtaWlfYnVzICpidXM7Ci0JdTMyIG1kaW9fYnVzOwomIzQzOwl1MzIgbWRpb19idXMsIGZyZXE7CiAJaW50IGVycjsKIAotCWVyciA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAmIzM0O3JlZyYjMzQ7LCAmYW1wO21kaW9fYnVzKTsKJiM0MzsJZXJyID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgJiMzNDtyZWcmIzM0OywgJmFtcDttZGlvX2J1cyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsICYjMzQ7dW5kZWZpbmVkIHNtaSBidXMgbnVtYmVyXG4mIzM0Oyk7CiAKQEAgLTg0Niw2ICYjNDM7OTMwLDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYKIAkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAogCQkJCSAgICAgJiMzNDtpbGxlZ2FsIChkYW5nbGluZykgc21pIGJ1cyBudW1iZXIgJWRcbiYjMzQ7LCBtZGlvX2J1cyk7CiAKJiM0MzsJaWYgKHByaXYtJmd0O2J1c1ttZGlvX2J1c10pCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsICYjMzQ7ZHVwbGljYXRlZCBzbWkgYnVzIG51bWJlciAlZFxuJiMzNDssIG1kaW9fYnVzKTsKJiM0MzsKIAlidXMgPSBkZXZtX21kaW9idXNfYWxsb2Nfc2l6ZShkZXYsIHNpemVvZigqY2hhbikpOwogCWlmICghYnVzKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTg2NSwxMCAmIzQzOzk1MiwxOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdgogCiAJc25wcmludGYoYnVzLSZndDtpZCwgTUlJX0JVU19JRF9TSVpFLCAmIzM0OyVzLSVkJiMzNDssIGRldl9uYW1lKGRldiksIG1kaW9fYnVzKTsKIAotCWVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgdG9fb2Zfbm9kZShub2RlKSk7CiYjNDM7CWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAmIzM0O2Nsb2NrLWZyZXF1ZW5jeSYjMzQ7LCAmYW1wO2ZyZXEpKQomIzQzOwkJZnJlcSA9IDI1MDAwMDA7CiYjNDM7CWVyciA9IHByaXYtJmd0O2luZm8tJmd0O3NldF9idXNfZnJlcXVlbmN5KGJ1cywgZnJlcSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgJiMzNDtjYW5ub3Qgc2V0IGZyZXF1ZW5jeSAldSBmb3IgTURJTyBidXMgJWRcbiYjMzQ7LAomIzQzOwkJCQkgICAgIGZyZXEsIG1kaW9fYnVzKTsKJiM0MzsKJiM0MzsJZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBub2RlKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgJiMzNDtjYW5ub3QgcmVnaXN0ZXIgTURJTyBidXNcbiYjMzQ7KTsKIAomIzQzOwlwcml2LSZndDtidXNbbWRpb19idXNdID0gYnVzOwomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC0xMDI3LDcgJiM0MzsxMTIzLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgJiMzNDtmYWlsZWQgdG8gc2V0dXAgTURJTyBidXMgY29udHJvbGxlclxuJiMzNDspOwogCX0KIAotCWRldmljZV9mb3JfZWFjaF9jaGlsZF9ub2RlX3Njb3BlZChkZXYsIGNoaWxkKSB7CiYjNDM7CWZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlX3Njb3BlZChkZXYtJmd0O29mX25vZGUsIGNoaWxkKSB7CiAJCWVyciA9IG90dG9fZW1kaW9fcHJvYmVfb25lKGRldiwgcHJpdiwgY2hpbGQpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKQEAgLTEwNTEsNiAmIzQzOzExNDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzODBfaW5mbyA9IHsKIAkubnVtX3BhZ2VzID0gUlRMODM4MF9OVU1fUEFHRVMsCiAJLm51bV9wb3J0cyA9IFJUTDgzODBfTlVNX1BPUlRTLAogCS5wb2xsX2N0cmwgPSBSVEw4MzgwX1NNSV9QT0xMX0NUUkwsCiYjNDM7CS5zZXRfYnVzX2ZyZXF1ZW5jeSA9IG90dG9fZW1kaW9fODM4MF9zZXRfYnVzX2ZyZXF1ZW5jeSwKIAkuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyLAogCS5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMiwKIAkucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzgzODBfcmVhZF9jNDUsCkBAIC0xMDc1LDYgJiM0MzsxMTcyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzkwX2luZm8gPSB7CiAJLm51bV9wYWdlcyA9IFJUTDgzOTBfTlVNX1BBR0VTLAogCS5udW1fcG9ydHMgPSBSVEw4MzkwX05VTV9QT1JUUywKIAkucG9sbF9jdHJsID0gUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsCiYjNDM7CS5zZXRfYnVzX2ZyZXF1ZW5jeSA9IG90dG9fZW1kaW9fODM5MF9zZXRfYnVzX2ZyZXF1ZW5jeSwKIAkucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIsCiAJLnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1LAogCS53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyLApAQCAtMTA5Nyw2ICYjNDM7MTE5NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0gewogCS5udW1fcG9ydHMgPSBSVEw5MzAwX05VTV9QT1JUUywKIAkubnVtX3BhZ2VzID0gUlRMOTMwMF9OVU1fUEFHRVMsCiAJLnBvbGxfY3RybCA9IFJUTDkzMDBfU01JX1BPTExfQ1RSTCwKJiM0MzsJLnNldF9idXNfZnJlcXVlbmN5ID0gb3R0b19lbWRpb185MzAwX3NldF9idXNfZnJlcXVlbmN5LAogCS5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIsCiAJLnJlYWRfYzIyID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzIyLAogCS5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2M0NSwKQEAgLTExMjMsNiAmIzQzOzEyMjIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHsKIAkubnVtX3BhZ2VzID0gUlRMOTMxMF9OVU1fUEFHRVMsCiAJLm51bV9wb3J0cyA9IFJUTDkzMTBfTlVNX1BPUlRTLAogCS5wb2xsX2N0cmwgPSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCwKJiM0MzsJLnNldF9idXNfZnJlcXVlbmN5ID0gb3R0b19lbWRpb185MzEwX3NldF9idXNfZnJlcXVlbmN5LAogCS5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIsCiAJLnJlYWRfYzIyID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzIyLAogCS5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2M0NSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM2MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvZGUgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkgc2VlIGEgcGF0Y2ggdG91Y2hpbmcgYERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbGAgYW5kIGBkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNgLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZS4gTGV0JiMzOTtzIGRpZyBpbnRvIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBkcml2ZXIgdGhpcyBpcywgaG93IHRoZSBrZXJuZWwgcHJvYmVzIGZvciBpdCwgdGhlIHNwZWNpZmljIGJ1cyBpdCYjMzk7cyB0aWVkIHRvLCBhbmQgd2hldGhlciB0aGlzIGlzIHNvbWV0aGluZyBnZW5lcmljIGVub3VnaCB0byBiZSByZWxldmFudCBpbiBteSBzdGFuZGFyZCB4ODYvYW1kNjQgdmlydHVhbGl6YXRpb24gc2V0dXBzIG9yIGlmIGl0JiMzOTtzIHN0cmljdGx5IFNvQyBvciBoYXJkd2FyZS1zcGVjaWZpYy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdyZXBwZXJgIHRvIHF1aWNrbHkgdHJhY2sgZG93biB0aGUgS2NvbmZpZyBlbnRyaWVzIHJlbGF0ZWQgdG8gYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgY29uZmlndXJhdGlvbnMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZXZhbHVhdGluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvLXJlYWx0ZWstcnRsOTMwMCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZT0yMz1vYmotJChDT05GSUdfTURJT19QSUM2NEhQU0MpXHRcdCYjNDM7PSBtZGlvLXBpYzY0aHBzYy5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19NRElPX1JFQUxURUtfUlRMOTMwMClcdCYjNDM7PSBtZGlvLXJlYWx0ZWstcnRsOTMwMC5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlLTI1LW9iai0kKENPTkZJR19NRElPX1JFR01BUClcdFx0JiM0Mzs9IG1kaW8tcmVnbWFwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTE2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFJlYWx0ZWsgUlRMOTMwMCBNRElPIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgUmVhbHRlayBSVEw5MzAwJiMzOTtzIE1ESU8gY29uZmlndXJhdGlvbiB3aXRoaW4gdGhpcyBrZXJuZWwgY29udGV4dC4gRmlyc3QsIG15IGltbWVkaWF0ZSBhY3Rpb24gaXMgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IEtjb25maWcgZW50cnkuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIGBDT05GSUdfTURJT19SRUFMVEVLX1JUTDkzMDBgLiBUaGlzIHNob3VsZCBsZWFkIG1lIHRvIHRoZSBuZWNlc3NhcnkgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGJ1aWxkIGxvZ2ljIHJlbGF0ZWQgdG8gdGhlIFJUTDkzMDAmIzM5O3MgTURJTyBzdXBwb3J0LiBJIGFudGljaXBhdGUgdGhpcyBLY29uZmlnIG9wdGlvbiB3aWxsIHRpZSBpbnRvIHRoZSBicm9hZGVyIE1ESU8gZnJhbWV3b3JrLCBidXQgdGhlIFJUTDkzMDAgaXMgYSBzcGVjaWFsaXplZCBkZXZpY2UgYW5kIGxpa2VseSBoYXMgc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyByZXF1aXJlbWVudHMuIEdldHRpbmcgdGhlIEtjb25maWcgcmlnaHQgaXMgY3J1Y2lhbCBmb3IgYSBjbGVhbiwgbWFpbnRhaW5hYmxlIGJ1aWxkLCBhbmQgZm9yIGVuc3VyaW5nIHRoZSBjb3JyZWN0IE1ESU8gZHJpdmVyIGlzIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQgYXQgcnVudGltZS4gVGhlIGFpbSBpcyB0byBxdWlja2x5IGFzc2VzcyB0aGUgY3VycmVudCBzdGF0ZSBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBjb25maWd1cmF0aW9uIGdhcHMgb3IgYXJlYXMgdGhhdCBtYXkgbmVlZCByZWZpbmVtZW50LCBlc3BlY2lhbGx5IGlmIHRoaXMgaXMgYSBuZXcgcGxhdGZvcm0gYnJpbmctdXAgb3IgYSBzcGVjaWZpYyBmZWF0dXJlIGFkZGl0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01ESU9fUkVBTFRFS19SVEw5MzAwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9MTY2PWNvbmZpZyBNRElPX0lQUTgwNjRcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTczLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE3NDpjb25maWcgTURJT19SRUFMVEVLX1JUTDkzMDBcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzUtXHR0cmlzdGF0ZSBcJiMzNDtSZWFsdGVrIFJUTDgzeHgvUlRMOTN4eCBNRElPIGludGVyZmFjZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZT0yMz1vYmotJChDT05GSUdfTURJT19QSUM2NEhQU0MpXHRcdCYjNDM7PSBtZGlvLXBpYzY0aHBzYy5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19NRElPX1JFQUxURUtfUlRMOTMwMClcdCYjNDM7PSBtZGlvLXJlYWx0ZWstcnRsOTMwMC5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlLTI1LW9iai0kKENPTkZJR19NRElPX1JFR01BUClcdFx0JiM0Mzs9IG1kaW8tcmVnbWFwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDU2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBNRElPIEtjb25maWcqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBNRElPIGRyaXZlci4gQSBnb29kIHN0YXJ0aW5nIHBvaW50IGlzIGFsd2F5cyB0aGUgS2NvbmZpZyBmaWxlLCBzbyBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBkcml2ZXJzL25ldC9tZGlvL0tjb25maWdgLiBTcGVjaWZpY2FsbHksIGFyb3VuZCBsaW5lIDE3NC4uLiB0aGF0JiMzOTtzIHdoZXJlIEkgdXN1YWxseSBmaW5kIHRoZSBtZWF0IG9mIHRoZSByZWxldmFudCBvcHRpb25zLiBJIHdhbnQgdG8gcXVpY2tseSBncmFzcCB0aGUgZGVwZW5kZW5jaWVzIOKAkyB3aGF0IG90aGVyIGZlYXR1cmVzIG9yIGRyaXZlcnMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSB0aGVzZSBNRElPIG9wdGlvbnMgYmVjb21lIGF2YWlsYWJsZT8gQWxzbywgSSBuZWVkIHRvIHJldmlldyB0aGUgZGVzY3JpcHRpb25zIHRvIHF1aWNrbHkgZ2V0IGEgc2Vuc2Ugb2Ygd2hhdCBlYWNoIG9wdGlvbiBhY3R1YWxseSAqZG9lcyogaW4gcHJhY3RpY2FsIHRlcm1zLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBmb3VuZGF0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTURJTyBjb25maWd1cmF0aW9uIHdvcmtzIHdpdGhpbiB0aGlzIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTcwOlx0XHRoZWxwXG4gMTcxOlx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBNRElPIGludGVyZmFjZSBmb3VuZCBpbiB0aGUgbmV0d29ya1xuIDE3MjpcdFx0ICBpbnRlcmZhY2UgdW5pdHMgb2YgdGhlIElQUTgwNjQgU29DXG4gMTczOlx0XG4gMTc0Olx0Y29uZmlnIE1ESU9fUkVBTFRFS19SVEw5MzAwXG4gMTc1Olx0XHR0cmlzdGF0ZSBcJiMzNDtSZWFsdGVrIFJUTDgzeHgvUlRMOTN4eCBNRElPIGludGVyZmFjZSBzdXBwb3J0XCYjMzQ7XG4gMTc2Olx0XHRkZXBlbmRzIG9uIE1BQ0hfUkVBTFRFS19SVEwgfHwgQ09NUElMRV9URVNUXG4gMTc3Olx0XHRoZWxwXG4gMTc4Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBNRElPIGludGVyZmFjZSBmb3VuZCBpbiB0aGUgUmVhbHRla1xuIDE3OTpcdFx0ICBSVEw4M3h4L1JUTDkzeHggZmFtaWx5IG9mIEV0aGVybmV0IHN3aXRjaGVzIHdpdGggaW50ZWdyYXRlZCBTb0MuXG4gMTgwOlx0XG4gMTgxOlx0Y29uZmlnIE1ESU9fUkVHTUFQXG4gMTgyOlx0XHR0cmlzdGF0ZVxuIDE4MzpcdFx0aGVscFxuIDE4NDpcdFx0ICBUaGlzIGRyaXZlciBhbGxvd3MgdXNpbmcgTURJTyBkZXZpY2VzIHRoYXQgYXJlIG5vdCBzaXR0aW5nIG9uIGFcbiAxODU6XHRcdCAgcmVndWxhciBNRElPIGJ1cywgYnV0IHN0aWxsIGV4cG9zZXMgdGhlIHN0YW5kYXJkIDgwMi4zIHJlZ2lzdGVyXG4gMTg2Olx0XHQgIGxheW91dC4gSXQmIzM5O3MgcmVnbWFwLWJhc2VkIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgb24gaW50ZWdyYXRlZCxcbiAxODc6XHRcdCAgbWVtb3J5LW1hcHBlZCBQSFlzLCBTUEkgUEhZcyBhbmQgc28gb24uIEEgbmV3IHZpcnR1YWwgTURJTyBidXMgaXNcbiAxODg6XHRcdCAgY3JlYXRlZCwgYW5kIGl0cyByZWFkL3dyaXRlIG9wZXJhdGlvbnMgYXJlIG1hcHBlZCB0byB0aGUgdW5kZXJseWluZ1xuIDE4OTpcdFx0ICByZWdtYXAuIFVzZXJzIHdpbGxpbmcgdG8gdXNlIHRoaXMgZHJpdmVyIG11c3QgZXhwbGljaXRseSBzZWxlY3RcbiAxOTA6XHRcdCAgUkVHTUFQLlxuIDE5MTpcdFxuIDE5MjpcdGNvbmZpZyBNRElPX1RIVU5ERVJcbiAxOTM6XHRcdHRyaXN0YXRlIFwmIzM0O1RodW5kZXJYIFNPQ3MgTURJTyBidXNlc1wmIzM0O1xuIDE5NDpcdFx0ZGVwZW5kcyBvbiA2NEJJVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMjUKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFJlYWx0ZWsgUlRMOTMwMCBNRElPIGRyaXZlciBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBob3cgaXQmIzM5O3MgaW5pdGlhbGl6ZWQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIHNvdXJjZSBjb2RlIGl0c2VsZi4gSSYjMzk7bGwgb3BlbiB1cCBgZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCB0byBleGFtaW5lIGl0cyBwcm9iaW5nIHByb2Nlc3MuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGlkZW50aWZ5aW5nIHdoYXQga2luZCBvZiBwbGF0Zm9ybSBkZXZpY2UgaXQmIzM5O3MgZGVzaWduZWQgdG8gd29yayB3aXRoLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyBleHBlY3RlZCBoYXJkd2FyZSBlbnZpcm9ubWVudCBhbmQgcmVzb3VyY2UgcmVxdWlyZW1lbnRzLiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoYXQgdG8gbWFrZSBhbnkgbW9kaWZpY2F0aW9ucyBvciBkZWJ1ZyBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9wbGF0Zm9ybV9kcml2ZXJ8cGxhdGZvcm1fZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYz0xMjQwPU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG90dG9fZW1kaW9faWRzKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0xMjQxLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjEyNDI6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb3R0b19lbWRpb19kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMTI0My1cdC5wcm9iZSA9IG90dG9fZW1kaW9fcHJvYmUsXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTEyNTAtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6MTI1MTptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG90dG9fZW1kaW9fZHJpdmVyKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0xMjUyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjAxCgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgUlRMOTMwMCBNRElPIFByb2JlKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgcHJvYmUgZnVuY3Rpb24gd2l0aGluIGBkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyByZWFsbHkgc3RhcnRzIGhhcHBlbmluZyBmb3IgdGhpcyBwYXJ0aWN1bGFyIFJlYWx0ZWsgc3dpdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgZHJpdmVyIGluaXRpYWxpemVzIGl0c2VsZiBvbiB0aGUgaGFyZHdhcmUuIFdoYXQmIzM5O3MgdGhlIGRldGVjdGlvbiBtZWNoYW5pc20/IFdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyByZXF1ZXN0ZWQgYW5kIG1hcHBlZD8gQXJlIHRoZXJlIGFueSBxdWlya3kgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCB0aGUgJiMzNDtnb3RjaGFzJiMzNDsgUmVhbHRlayBtaWdodCYjMzk7dmUgdGhyb3duIGluPyBJJiMzOTtsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipEZXZpY2UgSUQvVmVuZG9yIElEIGNoZWNrczoqKiBIb3cgZG9lcyBpdCBkZXRlcm1pbmUgdGhpcyBpcyBpbmRlZWQgYSBSVEw5MzAwPyBJcyBpdCB1c2luZyBhIHN0YW5kYXJkIFBDSSBJRCwgb3Igc29tZXRoaW5nIGN1c3RvbT8KKiAgICoqUmVzb3VyY2UgYWxsb2NhdGlvbjoqKiBXaGF0JiMzOTtzIGdldHRpbmcgbWFwcGVkPyBJJiMzOTttIGV4cGVjdGluZyBhdCBsZWFzdCBhbiBNTUlPIHJlZ2lvbiwgcG90ZW50aWFsbHkgc29tZSBpbnRlcnJ1cHQgbGluZXMuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBzZWUgdGhlIGRldGFpbHMgb24gYGlvcmVtYXAoKWAgY2FsbHMuCiogICAqKk1ESU8gYnVzIGluaXRpYWxpemF0aW9uOioqIEhvdyBpcyBpdCBpbnRlZ3JhdGluZyB3aXRoIHRoZSBnZW5lcmljIE1ESU8gZnJhbWV3b3JrPyBBcmUgdGhlcmUgYW55IGN1c3RvbSBjYWxsYmFja3MgaW52b2x2ZWQgdG8gc2V0IHVwIHRoZSBNRElPIGJ1cyBmb3IgdGhlIHNwZWNpZmljIGhhcmR3YXJlPwoqICAgKipDaGlwc2V0LXNwZWNpZmljIGluaXRpYWxpemF0aW9uOioqIFdoYXQgcmVnaXN0ZXJzIGFyZSBiZWluZyB3cml0dGVuIHRvPyBJcyB0aGVyZSBhIGJvb3Qgc2VxdWVuY2U/IEFyZSB0aGV5IGVuYWJsaW5nIGNlcnRhaW4gZmVhdHVyZXMsIG9yIGNvbmZpZ3VyaW5nIGNsb2NrcyBhdCB0aGlzIHN0YWdlPyBBcmUgdGhlcmUgYW55IHBsYXRmb3JtLXNwZWNpZmljIHF1aXJrcyAoZS5nLiBEVCBiaW5kaW5ncyk/CiogICAqKkVycm9yIGhhbmRsaW5nOioqIFdoYXQgYXJlIHRoZSBlcnJvciBwYXRocz8gV2hhdCBoYXBwZW5zIGlmIHRoZSBkZXZpY2UgaXMgbm90IHByZXNlbnQsIG9yIHRoZSBpbml0aWFsaXphdGlvbiBmYWlscz8KKiAgICoqRHJpdmVyIG1vZGVsIHJlZ2lzdHJhdGlvbjoqKiBTcGVjaWZpY2FsbHksIGhvdyB0aGlzIGhhcmR3YXJlIGlzIHByZXNlbnRlZCB0byB0aGUgbmV0d29ya2luZyBzdGFjay4gV2hhdCYjMzk7cyB0aGUgbGluayBiZXR3ZWVuIHRoaXMgTURJTyBkcml2ZXIgYW5kIHRoZSBuZXR3b3JrIGludGVyZmFjZSBkcml2ZXJzPwoqICAgKipJUlEgSGFuZGxpbmc6KiogSG93IGFyZSBpbnRlcnJ1cHRzIGJlaW5nIHNldCB1cD8gSXMgaXQgdXNpbmcgTVNJLVggb3IgdHJhZGl0aW9uYWwgaW50ZXJydXB0cz8KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55dGhpbmcgbm9uLXN0YW5kYXJkLCBhbnl0aGluZyB0aGF0IGRldmlhdGVzIGZyb20gdGhlIHR5cGljYWwgTURJTyBkcml2ZXIgcGF0dGVybi4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSByZWFsbHkgaW50ZXJlc3RpbmcgZGV0YWlscyBhcmUuIEkmIzM5O2xsIGJlIGtlZXBpbmcgYSBjbG9zZSBleWUgb3V0IGZvciBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMsIHRvbywgb3IgYW55IHBvaW50cyB3aGVyZSBpdCBtaWdodCBiZSBpbXByb3ZlZCBvciBtYWRlIGNsZWFyZXIgZm9yIHRoZSBuZXh0IGRldmVsb3BlciB3aG8gaGFzIHRvIHRvdWNoIHRoaXMgY29kZS4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDU1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMDA6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLCBcJiMzNDslcGZ3UCBtaXNzaW5nIGV0aGVybmV0LXBvcnRzXFxuXCYjMzQ7LFxuMTAwMTpcdFx0XHRcdFx0ICAgICBkZXZfZndub2RlKHBhcmVudCkpO1xuMTAwMjpcdFxuMTAwMzpcdFx0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGVfc2NvcGVkKHBvcnRzX2RuLCBwb3J0X2RuKSB7XG4xMDA0Olx0XHRcdGN0cmxfZG4gPSBOVUxMO1xuMTAwNTpcdFx0XHRidXNfZG4gPSBOVUxMO1xuMTAwNjpcdFx0XHRwaHlfZG4gPSBvZl9wYXJzZV9waGFuZGxlKHBvcnRfZG4sIFwmIzM0O3BoeS1oYW5kbGVcJiMzNDssIDApO1xuMTAwNzpcdFx0XHQvKiBza2lwIHBvcnRzIHdpdGhvdXQgcGh5cyAqL1xuMTAwODpcdFx0XHRpZiAoIXBoeV9kbilcbjEwMDk6XHRcdFx0XHRjb250aW51ZTtcbjEwMTA6XHRcbjEwMTE6XHRcdFx0YnVzX2RuID0gb3R0b19lbWRpb19nZXRfYnVzX25vZGUocGh5X2RuKTtcbjEwMTI6XHRcdFx0aWYgKCFidXNfZG4pXG4xMDEzOlx0XHRcdFx0Z290byBwdXRfbm9kZXM7XG4xMDE0Olx0XG4xMDE1Olx0XHRcdGN0cmxfZG4gPSBvZl9nZXRfcGFyZW50KGJ1c19kbik7XG4xMDE2Olx0XHRcdC8qIG9ubHkgbWFwIHBvcnRzIHRoYXQgYXJlIGNvbm5lY3RlZCB0byB0aGlzIG1kaW8tY29udHJvbGxlciAqL1xuMTAxNzpcdFx0XHRpZiAoY3RybF9kbiAhPSBkZXYtXHUwMDNlb2Zfbm9kZSlcbjEwMTg6XHRcdFx0XHRnb3RvIHB1dF9ub2RlcztcbjEwMTk6XHRcbjEwMjA6XHRcdFx0ZXJyID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocG9ydF9kbiwgXCYjMzQ7cmVnXCYjMzQ7LCBcdTAwMjZwbik7XG4xMDIxOlx0XHRcdGlmIChlcnIpXG4xMDIyOlx0XHRcdFx0Z290byBwdXRfbm9kZXM7XG4xMDIzOlx0XG4xMDI0Olx0XHRcdGlmIChwbiBcdTAwM2U9IHByaXYtXHUwMDNlaW5mby1cdTAwM2VudW1fcG9ydHMpIHtcbjEwMjU6XHRcdFx0XHRlcnIgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwgXCYjMzQ7aWxsZWdhbCBwb3J0IG51bWJlciAlZFxcblwmIzM0OywgcG4pO1xuMTAyNjpcdFx0XHRcdGdvdG8gcHV0X25vZGVzO1xuMTAyNzpcdFx0XHR9XG4xMDI4Olx0XG4xMDI5Olx0XHRcdGlmICh0ZXN0X2JpdChwbiwgcHJpdi1cdTAwM2V2YWxpZF9wb3J0cykpIHtcbjEwMzA6XHRcdFx0XHRlcnIgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwgXCYjMzQ7ZHVwbGljYXRlZCBwb3J0IG51bWJlciAlZFxcblwmIzM0OywgcG4pO1xuMTAzMTpcdFx0XHRcdGdvdG8gcHV0X25vZGVzO1xuMTAzMjpcdFx0XHR9XG4xMDMzOlx0XG4xMDM0Olx0XHRcdGVyciA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKGJ1c19kbiwgXCYjMzQ7cmVnXCYjMzQ7LCBcdTAwMjZidXMpO1xuMTAzNTpcdFx0XHRpZiAoZXJyKVxuMTAzNjpcdFx0XHRcdGdvdG8gcHV0X25vZGVzO1xuMTAzNzpcdFxuMTAzODpcdFx0XHRpZiAoYnVzIFx1MDAzZT0gcHJpdi1cdTAwM2VpbmZvLVx1MDAzZW51bV9idXNlcykge1xuMTAzOTpcdFx0XHRcdGVyciA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLCBcJiMzNDtpbGxlZ2FsIHNtaSBidXMgbnVtYmVyICVkXFxuXCYjMzQ7LCBidXMpO1xuMTA0MDpcdFx0XHRcdGdvdG8gcHV0X25vZGVzO1xuMTA0MTpcdFx0XHR9XG4xMDQyOlx0XG4xMDQzOlx0XHRcdGFkZHIgPSBvZl9tZGlvX3BhcnNlX2FkZHIoZGV2LCBwaHlfZG4pO1xuMTA0NDpcdFx0XHRpZiAoYWRkciBcdTAwM2MgMCkge1xuMTA0NTpcdFx0XHRcdGVyciA9IGFkZHI7XG4xMDQ2Olx0XHRcdFx0Z290byBwdXRfbm9kZXM7XG4xMDQ3Olx0XHRcdH1cbjEwNDg6XHRcbjEwNDk6XHRcdFx0LypcbjEwNTA6XHRcdFx0ICogVGhlIE1ESU8gYWNjZXNzZXMgZnJvbSB0aGUga2VybmVsIHdvcmsgd2l0aCB0aGUgUEhZIHBvbGxpbmcgdW5pdCBpbiB0aGVcbjEwNTE6XHRcdFx0ICogc3dpdGNoLiBUaGUgUFBVIGVpdGhlciBvcGVyYXRlcyBpbiBHUEhZIChpLmUuIGNsYXVzZSAyMikgb3IgMTBHUEhZIG1vZGVcbjEwNTI6XHRcdFx0ICogKGkuZS4gY2xhdXNlIDQ1KS4gU2VsZWN0IDEwR1BIWSBtb2RlIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBQSFkgdGhhdFxuMTA1MzpcdFx0XHQgKiBkZWNsYXJlcyBjb21wYXRpYmxlID0gXCYjMzQ7ZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jNDVcJiMzNDsuXG4xMDU0Olx0XHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA4MwoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mICYjMzQ7TGV0JiMzOTtzIHNlZSB0aGUgc3RhcnQgb2YgYG90dG9fZW1kaW9fcHJvYmVgJiMzNDssIHN1bW1hcml6ZWQgZnJvbSBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZSwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IERpdmluZyBpbnRvIGBvdHRvX2VtZGlvX3Byb2JlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSBwaHJhc2UgJiMzNDtMZXQmIzM5O3Mgc2VlIHRoZSBzdGFydCBvZiBgb3R0b19lbWRpb19wcm9iZWAmIzM0OyBpbW1lZGlhdGVseSBzaWduYWxzIGEgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsIGNvbmRpdGlvbnMgb3IgZW50cnkgcG9pbnQgb2YgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBvciBtb2R1bGUsIGBvdHRvX2VtZGlvX3Byb2JlYC4gIE15IG1pbmQmIzM5O3MgYWxyZWFkeSByYWNpbmcgdGhyb3VnaCBwb3NzaWJpbGl0aWVzLiBXaGF0IGlzIHRoaXMgcHJvYmUgKmZvcio/IElzIGl0IGEgZHJpdmVyLCBhIGhhcmR3YXJlIGludGVyYWN0aW9uIHJvdXRpbmUsIGEgZGVidWdnaW5nIHV0aWxpdHksIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgbmFtZSBpdHNlbGYgZ2l2ZXMgYSB2YWd1ZSBoaW50LCBwZXJoYXBzIHJlbGF0aW5nIHRvICYjMzk7ZW1kaW8mIzM5OyBhbmQgJiMzOTtvdHRvJiMzOTssIGJ1dCBJJiMzOTtsbCBuZWVkIG1vcmUgY29udGV4dCB0byB0cnVseSBrbm93LiBNeSBwcmltYXJ5IGZvY3VzIGlzIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIHB1cnBvc2UgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBicm9hZGVyIHN5c3RlbS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIGluaXRpYWwgbGluZXMgb2YgY29kZSDigJMgbGlrZWx5IGluaXRpYWxpemF0aW9uLCBkZXZpY2UgaWRlbnRpZmljYXRpb24sIHJlc291cmNlIGFsbG9jYXRpb24sIGFuZCBwYXJhbWV0ZXIgdmFsaWRhdGlvbi4gVGhlIHdheSB0aGUgcHJvYmUgaXMgaGFuZGxlZCB3aWxsIHRlbGwgYSBsb3QgYWJvdXQgdGhlIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3Mgd2VsbC1jb21tZW50ZWQsIGJ1dCBJJiMzOTttIHByZXBhcmVkIGZvciBhIGJpdCBvZiBkaWdnaW5nIHRvIGRpc2Nlcm4gaXRzIGNvcmUgZnVuY3Rpb24gaWYgaXQgaXNuJiMzOTt0LiBJJiMzOTttIGtlZW4gdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgb2Ygd2hhdCBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IuIExldCYjMzk7cyBzZWUgaWYgd2UgY2FuIGdldCBhIGhhbmRsZSBvbiB0aGlzIHF1aWNrbHk7IEkmIzM5O20gZWFnZXIgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhpcyBwcm9iZSBpcyByZWFsbHkgYWJvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDgwOlx0XHRcdGlmIChlcnIpXG4xMDgxOlx0XHRcdFx0cmV0dXJuIGVycjtcbjEwODI6XHRcdH1cbjEwODM6XHRcbjEwODQ6XHRcdHJldHVybiAwO1xuMTA4NTpcdH1cbjEwODY6XHRcbjEwODc6XHRzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbjEwODg6XHR7XG4xMDg5Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbjEwOTA6XHRcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXY7XG4xMDkxOlx0XHRpbnQgZXJyO1xuMTA5MjpcdFxuMTA5MzpcdFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuMTA5NDpcdFx0aWYgKCFwcml2KVxuMTA5NTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjEwOTY6XHRcbjEwOTc6XHRcdGVyciA9IGRldm1fbXV0ZXhfaW5pdChkZXYsIFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4xMDk4Olx0XHRpZiAoZXJyKVxuMTA5OTpcdFx0XHRyZXR1cm4gZXJyO1xuMTEwMDpcdFxuMTEwMTpcdFx0cHJpdi1cdTAwM2VpbmZvID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7XG4xMTAyOlx0XHRwcml2LVx1MDAzZXJlZ21hcCA9IHN5c2Nvbl9ub2RlX3RvX3JlZ21hcChkZXYtXHUwMDNlcGFyZW50LVx1MDAzZW9mX25vZGUpO1xuMTEwMzpcdFx0aWYgKElTX0VSUihwcml2LVx1MDAzZXJlZ21hcCkpXG4xMTA0Olx0XHRcdHJldHVybiBQVFJfRVJSKHByaXYtXHUwMDNlcmVnbWFwKTtcbjExMDU6XHRcbjExMDY6XHRcdGVyciA9IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHByaXYpO1xuMTEwNzpcdFx0aWYgKGVycilcbjExMDg6XHRcdFx0cmV0dXJuIGVycjtcbjExMDk6XHRcbjExMTA6XHRcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpO1xuMTExMTpcdFxuMTExMjpcdFx0ZXJyID0gb3R0b19lbWRpb19tYXBfcG9ydHMoZGV2KTtcbjExMTM6XHRcdGlmIChlcnIpXG4xMTE0Olx0XHRcdHJldHVybiBlcnI7XG4xMTE1Olx0XG4xMTE2Olx0XHRlcnIgPSBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHByaXYpO1xuMTExNzpcdFx0aWYgKGVycilcbjExMTg6XHRcdFx0cmV0dXJuIGVycjtcbjExMTk6XHRcbjExMjA6XHRcdGlmIChwcml2LVx1MDAzZWluZm8tXHUwMDNlc2V0dXBfY29udHJvbGxlcikge1xuMTEyMTpcdFx0XHRlcnIgPSBwcml2LVx1MDAzZWluZm8tXHUwMDNlc2V0dXBfY29udHJvbGxlcihwcml2KTtcbjExMjI6XHRcdFx0aWYgKGVycilcbjExMjM6XHRcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCYjMzQ7ZmFpbGVkIHRvIHNldHVwIE1ESU8gYnVzIGNvbnRyb2xsZXJcXG5cJiMzNDspO1xuMTEyNDpcdFx0fVxuMTEyNTpcdFxuMTEyNjpcdFx0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGVfc2NvcGVkKGRldi1cdTAwM2VvZl9ub2RlLCBjaGlsZCkge1xuMTEyNzpcdFx0XHRlcnIgPSBvdHRvX2VtZGlvX3Byb2JlX29uZShkZXYsIHByaXYsIGNoaWxkKTtcbjExMjg6XHRcdFx0aWYgKGVycilcbjExMjk6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMTEzMDpcdFx0fVxuMTEzMTpcdFxuMTEzMjpcdFx0cmV0dXJuIDA7XG4xMTMzOlx0fVxuMTEzNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIwOQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgb3R0b19lbWRpb19wcm9iZWAgRHJpdmVyJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IHByaW1hcnkgY29uY2VybiBpcyB3aGV0aGVyIG9yIG5vdCBgb3R0b19lbWRpb19wcm9iZWAsIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBSZWFsdGVrIFJUTDgzeHgvUlRMOTN4eCBFdGhlcm5ldCBzd2l0Y2ggU29DcyAoTUlQUy9BUk0pLCBpcyBhIHZpYWJsZSB0YXJnZXQgZm9yIGZ1enppbmcgd2l0aGluIHRoZSBjb25zdHJhaW50cyBvZiBzdGFuZGFyZCB2aXJ0dWFsaXplZCB4ODZfNjQvYW1kNjQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHNwZWNpZmljYWxseSB3aXRoIHN5emthbGxlci4KCkZpcnN0LCBJIHNlZSBpdCYjMzk7cyBsaW5rZWQgdG8gYE1BQ0hfUkVBTFRFS19SVExgIG9yIGBDT01QSUxFX1RFU1RgLCB3aGljaCBpc24mIzM5O3QgZGlyZWN0bHkgaW5mb3JtYXRpdmUsIGJ1dCB0ZWxscyBtZSBpdCYjMzk7cyB0aWVkIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgRGV2aWNlIFRyZWUgZGVwZW5kZW50LCB3aGljaCBpcyBzdGFuZGFyZCBmb3IgcGxhdGZvcm0gZGV2aWNlcyB0aGVzZSBkYXlzIChgZGV2LSZndDtvZl9ub2RlYCwgYW5kIHVzZXMgYHN5c2Nvbl9ub2RlX3RvX3JlZ21hcGApLiBDcnVjaWFsbHksIG15IHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYGFtZDY0YCwgbm90IHRoZSBuYXRpdmUgTUlQUy9BUk0gb2YgdGhlIFJUTCBjaGlwcy4KCk5vdywgbGV0JiMzOTtzIGFwcGx5IHRoZSBXb3J0aEZ1enppbmcgY3JpdGVyaWEuIEkmIzM5O20gbG9va2luZyBmb3IgKm5lZ2F0aXZlKiBpbmRpY2F0b3JzLCByZWFzb25zIHRvIGV4Y2x1ZGUgdGhpcyBkcml2ZXIgZnJvbSBmdXp6aW5nLiBUaGUgY3JpdGVyaWEgb3V0bGluZWQgc3RhdGU6CgoqICAgKipOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOioqIFRoaXMgc2VlbXMgdW5saWtlbHkuIFRoaXMgaXMgYSBjb3JlIGRyaXZlciwgc28gaXQmIzM5O3MgcHJvYmFibHkgYWN0dWFsIGtlcm5lbCBjb2RlLgoqICAgKipTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6KiogQWgsIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gUmVhbHRlayBSVEw4M3h4L1JUTDkzeHggRXRoZXJuZXQgc3dpdGNoIFNvQ3MgKmFyZSogc3BlY2lhbGl6ZWQgaGFyZHdhcmUuIFRoaXMgZmVlbHMgbGlrZSBpdCBtaWdodCBhcHBseS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBwaHlzaWNhbCBBU0lDIG9yIHNwZWNpYWxpemVkIGhhcmR3YXJlLCBwcm9iYWJseSBub3QgZW11bGF0ZWQgZmFpdGhmdWxseSB3aXRoaW4gUUVNVS4gVGhpbmdzIGxpa2UgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUgYXJlIGV4Y2x1ZGVkLCBidXQgaXMgdGhpcyBzaW1pbGFyIGVub3VnaD8KKiAgICoqVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOioqICBUaGlzIGlzIHByb2JhYmx5IG5vdCB0aGUgY2FzZSwgc2luY2UgaXQgdXNlcyBgcmVtb3ZlYCwgYHNodXRkb3duYCwgZXRjLgoKVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIG5vdyBpcywgaXMgYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgIGEgKnBsYXRmb3JtKiBkcml2ZXIgdGhhdCYjMzk7cyBmdW5kYW1lbnRhbGx5IHJlbGlhbnQgb24gYSBzcGVjaWZpYyBSZWFsdGVrIGhhcmR3YXJlICpjb25maWd1cmF0aW9uKiwgc3BlY2lmaWNhbGx5IGBNQUNIX1JFQUxURUtfUlRMYD8gSWYgc28sIHRoaXMgZHJpdmVyIGxpa2VseSBkZXBlbmRzIG9uIGFuIFJUTDgzeHgvUlRMOTN4eCBjaGlwIGFuZCByZWxhdGVkIGhhcmR3YXJlIHRoYXQmIzM5O3MgKm5vdCogZ2VuZXJhbGx5IGVtdWxhdGVkIGluIGEgc3RhbmRhcmQgZnV6emluZyBzZXR1cC4gR2l2ZW4gdGhhdCBpdCByZWxpZXMgb24gYE1BQ0hfUkVBTFRFS19SVExgIEkgdGhpbmsgSSYjMzk7bGwgbmVlZCB0byByZXNlYXJjaCBhbmQgY29uZmlybSB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoaXMgcGxhdGZvcm0gaW4gZW11bGF0ZWQgZW52aXJvbm1lbnRzLiBNeSBpbml0aWFsIGluY2xpbmF0aW9uIGlzIHRvIHNheSBpdCYjMzk7cyAqcHJvYmFibHkqIG5vdCB3b3J0aCBmdXp6aW5nIGRpcmVjdGx5IHdpdGggYSBzdGFuZGFyZCBzZXR1cC4gSSYjMzk7ZCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgZW11bGF0aW9uIGNhcGFiaWxpdGllcywgbWF5YmUgZXZlbiB0cnlpbmcgdG8gZmluZCBhIG1hdGNoaW5nIFFFTVUgaW1hZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01BQ0hfUkVBTFRFS19SVEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9taXBzL0tjb25maWc9NjgxPWNvbmZpZyBSQUxJTktcbi0tXG5hcmNoL21pcHMvS2NvbmZpZy02OTgtXG5hcmNoL21pcHMvS2NvbmZpZzo2OTk6Y29uZmlnIE1BQ0hfUkVBTFRFS19SVExcbmFyY2gvbWlwcy9LY29uZmlnLTcwMC1cdGJvb2wgXCYjMzQ7UmVhbHRlayBSVEw4Mzh4L1JUTDgzOXggYmFzZWQgbWFjaGluZXNcJiMzNDtcbi0tXG5hcmNoL21pcHMvYm9vdC9kdHMvcmVhbHRlay9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmFyY2gvbWlwcy9ib290L2R0cy9yZWFsdGVrL01ha2VmaWxlOjI6ZHRiLSQoQ09ORklHX01BQ0hfUkVBTFRFS19SVEwpXHQmIzQzOz0gY2lzY29fc2cyMjAtMjYuZHRiXG5hcmNoL21pcHMvYm9vdC9kdHMvcmVhbHRlay9NYWtlZmlsZTozOmR0Yi0kKENPTkZJR19NQUNIX1JFQUxURUtfUlRMKVx0JiM0Mzs9IGNhbWVvLXJ0bDkzMDJjLTJ4LXJ0bDgyMjQtMnhnZS5kdGJcbi0tXG5hcmNoL21pcHMvZ2VuZXJpYy9NYWtlZmlsZT0xNT1vYmotJChDT05GSUdfVklSVF9CT0FSRF9SQU5DSFUpXHRcdCYjNDM7PSBib2FyZC1yYW5jaHUub1xuYXJjaC9taXBzL2dlbmVyaWMvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX01BQ0hfUkVBTFRFS19SVEwpXHRcdCYjNDM7PSBib2FyZC1yZWFsdGVrLm9cbi0tXG5kcml2ZXJzL2dwaW8vS2NvbmZpZz02MjU9Y29uZmlnIEdQSU9fUkVBTFRFS19PVFRPXG5kcml2ZXJzL2dwaW8vS2NvbmZpZy02MjYtXHR0cmlzdGF0ZSBcJiMzNDtSZWFsdGVrIE90dG8gR1BJTyBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2dwaW8vS2NvbmZpZzo2Mjc6XHRkZXBlbmRzIG9uIE1BQ0hfUkVBTFRFS19SVEwgfHwgQ09NUElMRV9URVNUXG5kcml2ZXJzL2dwaW8vS2NvbmZpZzo2Mjg6XHRkZWZhdWx0IE1BQ0hfUkVBTFRFS19SVExcbmRyaXZlcnMvZ3Bpby9LY29uZmlnLTYyOS1cdHNlbGVjdCBHUElPX0dFTkVSSUNcbi0tXG5kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZz0xMTAzPWNvbmZpZyBJMkNfUlRMOTMwMFxuZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWctMTEwNC1cdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsgUlRMOTMwMCBJMkMgY29udHJvbGxlclwmIzM0O1xuZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWc6MTEwNTpcdGRlcGVuZHMgb24gTUFDSF9SRUFMVEVLX1JUTCB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnLTExMDYtXHRoZWxwXG4tLVxuZHJpdmVycy9pcnFjaGlwL01ha2VmaWxlPTEzMD1vYmotJChDT05GSUdfU0wyOENQTERfSU5UQylcdFx0JiM0Mzs9IGlycS1zbDI4Y3BsZC5vXG5kcml2ZXJzL2lycWNoaXAvTWFrZWZpbGU6MTMxOm9iai0kKENPTkZJR19NQUNIX1JFQUxURUtfUlRMKVx0XHQmIzQzOz0gaXJxLXJlYWx0ZWstcnRsLm9cbmRyaXZlcnMvaXJxY2hpcC9NYWtlZmlsZS0xMzItb2JqLSQoQ09ORklHX1dQQ000NTBfQUlDKVx0XHQmIzQzOz0gaXJxLXdwY200NTAtYWljLm9cbi0tXG5kcml2ZXJzL210ZC9uYW5kL0tjb25maWc9NjQ9Y29uZmlnIE1URF9OQU5EX0VDQ19SRUFMVEVLXG4tLVxuZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnLTY2LSAgICAgICAgZGVwZW5kcyBvbiBIQVNfSU9NRU0gXHUwMDI2XHUwMDI2IEhBU19ETUFcbmRyaXZlcnMvbXRkL25hbmQvS2NvbmZpZzo2NzogICAgICAgIGRlcGVuZHMgb24gTUFDSF9SRUFMVEVLX1JUTCB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvbXRkL25hbmQvS2NvbmZpZy02OC0gICAgICAgIHNlbGVjdCBNVERfTkFORF9FQ0Ncbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc9MTc0PWNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3NS1cdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsgUlRMODN4eC9SVEw5M3h4IE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxNzY6XHRkZXBlbmRzIG9uIE1BQ0hfUkVBTFRFS19SVEwgfHwgQ09NUElMRV9URVNUXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTc3LVx0aGVscFxuLS1cbmRyaXZlcnMvc3BpL0tjb25maWc9OTE2PWNvbmZpZyBTUElfUkVBTFRFS19TTkFORFxuZHJpdmVycy9zcGkvS2NvbmZpZy05MTctXHR0cmlzdGF0ZSBcJiMzNDtSZWFsdGVrIFNQSS1OQU5EIEZsYXNoIENvbnRyb2xsZXJcJiMzNDtcbmRyaXZlcnMvc3BpL0tjb25maWc6OTE4Olx0ZGVwZW5kcyBvbiBNQUNIX1JFQUxURUtfUlRMIHx8IENPTVBJTEVfVEVTVFxuZHJpdmVycy9zcGkvS2NvbmZpZy05MTktXHRzZWxlY3QgUkVHTUFQXG4tLVxuZHJpdmVycy9zcGkvTWFrZWZpbGU9MTMxPW9iai0kKENPTkZJR19TUElfUkI0WFgpXHRcdFx0JiM0Mzs9IHNwaS1yYjR4eC5vXG5kcml2ZXJzL3NwaS9NYWtlZmlsZToxMzI6b2JqLSQoQ09ORklHX01BQ0hfUkVBTFRFS19SVEwpXHRcdCYjNDM7PSBzcGktcmVhbHRlay1ydGwub1xuZHJpdmVycy9zcGkvTWFrZWZpbGUtMTMzLW9iai0kKENPTkZJR19TUElfUkVBTFRFS19TTkFORClcdFx0JiM0Mzs9IHNwaS1yZWFsdGVrLXJ0bC1zbmFuZC5vXG4tLVxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnPTExMTM9Y29uZmlnIFJFQUxURUtfT1RUT19XRFRcbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZy0xMTE0LVx0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayBPdHRvIE1JUFMgd2F0Y2hkb2cgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnOjExMTU6XHRkZXBlbmRzIG9uIE1BQ0hfUkVBTFRFS19SVEwgfHwgQ09NUElMRV9URVNUXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctMTExNi1cdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xuLS1cbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZy0xMTE4LVx0c2VsZWN0IFJFR01BUF9NTUlPXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWc6MTExOTpcdGRlZmF1bHQgTUFDSF9SRUFMVEVLX1JUTFxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnLTExMjAtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDY3CgkJCQkJCQlvdXRwdXQ6IDEwNwoJCQkJCQkJdGhvdWdodHM6IDUxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUmVhbHRlayBSVEw5MzAwIE1ESU8gRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGEgdmVyeSBzcGVjaWZpYywgYW5kIGxpa2VseSBpbmFjY2Vzc2libGUsIHBpZWNlIG9mIGhhcmR3YXJlLiBJIHNlZSB0aGF0IGBDT05GSUdfTURJT19SRUFMVEVLX1JUTDkzMDBgIGhpbmdlcyBvbiBlaXRoZXIgdGhlIGBNQUNIX1JFQUxURUtfUlRMYCBjb25maWd1cmF0aW9uICh3aGljaCBpcyBNSVBTLXNwZWNpZmljKSBvciBgQ09NUElMRV9URVNUYC4gT24gbXkgYW1kNjQgYXJjaGl0ZWN0dXJlLCBpdCYjMzk7cyBvbmx5IGFjY2Vzc2libGUgdGhyb3VnaCBgQ09NUElMRV9URVNUYC4gRXZlbiBpZiBjb21waWxlZCwgdGhlIGRyaXZlciBpdHNlbGYgaXMgZGVzaWduZWQgZm9yIGEgUmVhbHRlayBTb0MtaW50ZWdyYXRlZCBNRElPIGJ1cyBjb250cm9sbGVyLCBzb21ldGhpbmcgbGlrZSBgcmVhbHRlayxydGw4MzgwLW1kaW9gLCBgcmVhbHRlayxydGw4MzkxLW1kaW9gLCBvciBgcmVhbHRlayxydGw5MzAxLW1kaW9gLiBUaGlzIG1lYW5zIGl0IG5lZWRzIGRldmljZSB0cmVlIG5vZGVzIHRoYXQgYXJlIGluc3RhbnRpYXRlZCBieSBhIFJlYWx0ZWsgT3R0byBNSVBTIHBsYXRmb3JtIGFuZCByZXF1aXJlcyBhIHBhcmVudCBzeXNjb24gbm9kZS4KClRoZSBraWNrZXI/IFRoZXJlJiMzOTtzIG5vIHN0YW5kYXJkIGVtdWxhdGlvbiBvZiB0aGlzIGhhcmR3YXJlIGluIHR5cGljYWwgYW1kNjQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIFRoaXMgaXMgYSBjcnVjaWFsIGRldGFpbC4gVGhpcyBkcml2ZXIgc2ltcGx5IHdvbiYjMzk7dCBiZSByZWFjaGFibGUuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoaXMgYnkgZXhhbWluaW5nIHRoZSBmaWxlcyBjaGFuZ2VkOgoKMS4gIGBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxgIC0gVGhpcyBpcyBkb2N1bWVudGF0aW9uL2RldmljZSB0cmVlIHNjaGVtYSwgd2hpY2ggaXNuJiMzOTt0IGV4ZWN1dGFibGUgY29kZS4KMi4gIGBkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNgIC0gVGhpcyBpcyB0aGUgZHJpdmVyIGl0c2VsZiwgYnV0IGZvciB0aGUgUmVhbHRlayBSVEw4Mzh4L1JUTDgzOXgvUlRMOTN4eCBNRElPIHBsYXRmb3JtIGRldmljZSwgd2hpY2ggaXMgTUlQUyBhcmNoaXRlY3R1cmUgU29DLgoKU28gdGhlIGVudGlyZSBwYXRjaCBpcyBjZW50ZXJlZCBhcm91bmQ6CgoqICAgQW4gdW5yZWFjaGFibGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIFNvQyBwbGF0Zm9ybSBkcml2ZXIgKE1JUFMgUmVhbHRlaykuCiogICBOb24tZXhlY3V0YWJsZSBjaGFuZ2VzLCBqdXN0IHRoZSBEVCBiaW5kaW5ncy4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhIHRvIGJlIGFic29sdXRlbHkgc3VyZTogYW1kNjQgdGFyZ2V0LCBub3Qgd29ydGggZnV6emluZywgbm8gZm9jdXMgc3ltYm9scywgbm8gZW5hYmxlIGNvbmZpZ3VyYXRpb25zLi4uIGV2ZXJ5dGhpbmcgYWxpZ25zLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIGRldmljZSB0cmVlIGJpbmRpbmdzIGFuZCBhIHBsYXRmb3JtIE1ESU8gY29udHJvbGxlciBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciBSZWFsdGVrIFJUTDgzeHgvUlRMOTN4eCBTb0NzIG9uIE1JUFMsIHdoaWNoIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiB0aGUgYW1kNjQgYXJjaGl0ZWN0dXJlLCBhbmQgdGhhdCBpcyBub3QgZW11bGF0ZWQuCgpBbHJpZ2h0LCBJIGFtIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEZXZpY2VUcmVlIGJpbmRpbmdzIGFuZCB0aGUgbWRpby1yZWFsdGVrLXJ0bDkzMDAgZHJpdmVyIGZvciBSZWFsdGVrIFJUTDgzeHgvUlRMOTN4eCBFdGhlcm5ldCBzd2l0Y2ggU29DcyAoTUlQUyBwbGF0Zm9ybSkuIFRoaXMgaGFyZHdhcmUgaXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgeDg2XzY0L2FtZDY0IFFFTVUgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgRGV2aWNlVHJlZSBiaW5kaW5ncyBhbmQgdGhlIG1kaW8tcmVhbHRlay1ydGw5MzAwIGRyaXZlciBmb3IgUmVhbHRlayBSVEw4M3h4L1JUTDkzeHggRXRoZXJuZXQgc3dpdGNoIFNvQ3MgKE1JUFMgcGxhdGZvcm0pLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHg4Nl82NC9hbWQ2NCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoyMjowNy4yOTg1Njk4MDJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjcwNDEzMjg3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERldmljZVRyZWUgYmluZGluZ3MgYW5kIHRoZSBtZGlvLXJlYWx0ZWstcnRsOTMwMCBkcml2ZXIgZm9yIFJlYWx0ZWsgUlRMODN4eC9SVEw5M3h4IEV0aGVybmV0IHN3aXRjaCBTb0NzIChNSVBTIHBsYXRmb3JtKS4gVGhpcyBoYXJkd2FyZSBpcyBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCB4ODZfNjQvYW1kNjQgUUVNVSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoyMjowNy4yOTg1NzUyMjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTc2MDgyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGUwZTdkOWQyYmExYTAyMTk0ZWNjNTZmYWI4ODcyMDRkNTJjNmY0OWNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgOSAxNzoyMjowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcXG5pbmRleCA2N2UwYjIzYTg0NzBlLi44ODUwMmQwMTdlZWRiIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxcbkBAIC01Niw2ICs1Niw5IEBAIHBhdHRlcm5Qcm9wZXJ0aWVzOlxcbiAgICAgICByZWc6XFxuICAgICAgICAgbWF4SXRlbXM6IDFcXG4gXFxuKyAgICAgIGNsb2NrLWZyZXF1ZW5jeTpcXG4rICAgICAgICBkZWZhdWx0OiAyNTAwMDAwXFxuK1xcbiAgICAgcmVxdWlyZWQ6XFxuICAgICAgIC0gcmVnXFxuIFxcbkBAIC03MSw2ICs3NCw0MyBAQCByZXF1aXJlZDpcXG4gICAtIGNvbXBhdGlibGVcXG4gICAtIHJlZ1xcbiBcXG4rYWxsT2Y6XFxuKyAgLSBpZjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBjb21wYXRpYmxlOlxcbisgICAgICAgICAgY29udGFpbnM6XFxuKyAgICAgICAgICAgIGVudW06XFxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODAtbWRpb1xcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgxLW1kaW9cXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4Mi1tZGlvXFxuKyAgICB0aGVuOlxcbisgICAgICBwYXR0ZXJuUHJvcGVydGllczpcXG4rICAgICAgICAnXm1kaW8tYnVzQFswLTNdJCc6XFxuKyAgICAgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgICAgICBjbG9jay1mcmVxdWVuY3k6XFxuKyAgICAgICAgICAgICAgZW51bTogWzI1MDAwMDAsIDEwMDAwMDAwXVxcbisgIC0gaWY6XFxuKyAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgY29tcGF0aWJsZTpcXG4rICAgICAgICAgIGNvbnRhaW5zOlxcbisgICAgICAgICAgICBlbnVtOlxcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkxLW1kaW9cXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5Mi1tZGlvXFxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTMtbWRpb1xcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAxLW1kaW9cXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMmItbWRpb1xcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAyYy1tZGlvXFxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDMtbWRpb1xcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzExLW1kaW9cXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMi1tZGlvXFxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTMtbWRpb1xcbisgICAgdGhlbjpcXG4rICAgICAgcGF0dGVyblByb3BlcnRpZXM6XFxuKyAgICAgICAgJ15tZGlvLWJ1c0BbMC0zXSQnOlxcbisgICAgICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICAgICAgY2xvY2stZnJlcXVlbmN5OlxcbisgICAgICAgICAgICAgIGVudW06IFsxMjUwMDAwLCAyNTAwMDAwLCA1MDAwMDAwXVxcbitcXG4gdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxcbiBcXG4gZXhhbXBsZXM6XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xcbmluZGV4IDExZDA3OGVmOTQxY2QuLmQ0MGZkZDBlZDJmMGQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXFxuKysrIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXFxuQEAgLTEzMCw2ICsxMzAsNyBAQFxcbiAjZGVmaW5lIFJUTDgzODBfTlVNX1BBR0VTXFx0XFx0XFx0NDA5NlxcbiAjZGVmaW5lIFJUTDgzODBfTlVNX1BPUlRTXFx0XFx0XFx0MjhcXG4gI2RlZmluZSBSVEw4MzgwX1NNSV9HTEJfQ1RSTFxcdFxcdFxcdDB4YTEwMFxcbisjZGVmaW5lICAgUlRMODM4MF9TTUlfRlJFUV9TRUxcXHRcXHRcXHRCSVQoMSlcXG4gI2RlZmluZSAgIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FXFx0XFx0QklUKDE1KVxcbiAjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wXFx0XFx0MHhhMWI4XFxuICNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzFcXHRcXHQweGExYmNcXG5AQCAtMTY5LDEyICsxNzAsMTUgQEBcXG4gI2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfTE9XXFx0XFx0MHgwM2U0XFxuICNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0hcXHRcXHQweDAzZThcXG4gI2RlZmluZSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFxcdFxcdDB4MDNmY1xcbisjZGVmaW5lIFJUTDgzOTBfU01JX0dMQl9DVFJMXFx0XFx0XFx0MHgwM2Y4XFxuKyNkZWZpbmUgICBSVEw4MzkwX1NNSV9GUkVRX1NFTFxcdFxcdFxcdEdFTk1BU0soNiwgNSlcXG4gXFxuICNkZWZpbmUgUlRMOTMwMF9OVU1fQlVTRVNcXHRcXHRcXHQ0XFxuICNkZWZpbmUgUlRMOTMwMF9OVU1fUEFHRVNcXHRcXHRcXHQ0MDk2XFxuICNkZWZpbmUgUlRMOTMwMF9OVU1fUE9SVFNcXHRcXHRcXHQyOFxcbiAjZGVmaW5lIFJUTDkzMDBfU01JX0dMQl9DVFJMXFx0XFx0XFx0MHhjYTAwXFxuICNkZWZpbmUgICBSVEw5MzAwX0dMQl9DVFJMX0lOVEZfU0VMKGludGYpXFx0QklUKDE2ICsgKGludGYpKVxcbisjZGVmaW5lICAgUlRMOTMwMF9TTUlfRlJFUV9TRUwoaW50ZilcXHRcXHRHRU5NQVNLKChpbnRmKSAqIDIgKyA5LCAoaW50ZikgKiAyICsgOClcXG4gI2RlZmluZSBSVEw5MzAwX1NNSV9QT1JUMF8xNV9QT0xMSU5HX1NFTFxcdDB4Y2EwOFxcbiAjZGVmaW5lIFJUTDkzMDBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wXFx0XFx0MHhjYjcwXFxuICNkZWZpbmUgUlRMOTMwMF9TTUlfQUNDRVNTX1BIWV9DVFJMXzFcXHRcXHQweGNiNzRcXG5AQCAtMTk2LDYgKzIwMCw4IEBAXFxuICNkZWZpbmUgUlRMOTMxMF9OVU1fQlVTRVNcXHRcXHRcXHQ0XFxuICNkZWZpbmUgUlRMOTMxMF9OVU1fUEFHRVNcXHRcXHRcXHQ4MTkyXFxuICNkZWZpbmUgUlRMOTMxMF9OVU1fUE9SVFNcXHRcXHRcXHQ1NlxcbisjZGVmaW5lIFJUTDkzMTBfU01JX0dMQl9DVFJMMFxcdFxcdFxcdDB4MGNjMFxcbisjZGVmaW5lICAgUlRMOTMxMF9TTUlfRlJFUV9TRUwoaW50ZilcXHRcXHRHRU5NQVNLKChpbnRmKSAqIDIgKyA1LCAoaW50ZikgKiAyICsgNClcXG4gI2RlZmluZSBSVEw5MzEwX1NNSV9HTEJfQ1RSTDFcXHRcXHRcXHQweDBjYmNcXG4gI2RlZmluZSAgIFJUTDkzMTBfU01JX0dMQl9GTVRfU0VMX0M0NShpbnRmKVxcdEJJVCgoaW50ZikgKiAyICsgMSlcXG4gI2RlZmluZSBSVEw5MzEwX1NNSV9JTkRSVF9BQ0NFU1NfQ1RSTF8wXFx0XFx0MHgwYzAwXFxuQEAgLTI2OSw2ICsyNzUsNyBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIHtcXG4gXFx0dTggbnVtX3BvcnRzO1xcbiBcXHR1MTYgbnVtX3BhZ2VzO1xcbiBcXHR1MzIgcG9sbF9jdHJsO1xcbitcXHRpbnQgKCpzZXRfYnVzX2ZyZXF1ZW5jeSkoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGZyZXEpO1xcbiBcXHRpbnQgKCpzZXR1cF9jb250cm9sbGVyKShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KTtcXG4gXFx0aW50ICgqcmVhZF9jMjIpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTtcXG4gXFx0aW50ICgqcmVhZF9jNDUpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xcbkBAIC03NDAsNiArNzQ3LDE3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19zZXR1cF90b3BvbG9neShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfc2V0X2J1c19mcmVxdWVuY3koc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGZyZXEpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcXG4rXFxuK1xcdGlmIChmcmVxICE9IDI1MDAwMDAgXFx1MDAyNlxcdTAwMjYgZnJlcSAhPSAxMDAwMDAwMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXR1cm4gcmVnbWFwX2Fzc2lnbl9iaXRzKHByaXYtXFx1MDAzZXJlZ21hcCwgUlRMODM4MF9TTUlfR0xCX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgUlRMODM4MF9TTUlfRlJFUV9TRUwsIGZyZXEgPT0gMTAwMDAwMDApO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXFxuIHtcXG4gXFx0LypcXG5AQCAtNzQ5LDYgKzc2Nyw1NyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXFxuIFxcdHJldHVybiByZWdtYXBfc2V0X2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLCBSVEw4MzgwX1NNSV9HTEJfQ1RSTCwgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkUpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9zZXRfYnVzX2ZyZXF1ZW5jeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgZnJlcSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xcbitcXHRib29sIGZyZXFfc2V0ID0gZmFsc2U7XFxuK1xcdHUzMiBjaGlsZF9mcmVxLCB2YWw7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSVEw4Mzl4IHVzZXMgYSBzaW5nbGUgZnJlcXVlbmN5IGZvciB0aGUgdHdvIE1ESU8gYnVzZXMuIER1cmluZyByZWdpc3RyYXRpb24gb2YgZmlyc3RcXG4rXFx0ICogYnVzIHBpY2sgYW4gZXhwbGljaXRseSByZXF1ZXN0ZWQgZnJlcXVlbmN5IGZyb20gYW55IGVuYWJsZWQgYnVzLiBVc2UgdGhlIGRlZmF1bHQgb25seVxcbitcXHQgKiBpZiBubyBmcmVxdWVuY3kgaXMgc2V0IGF0IGFsbC5cXG4rXFx0ICovXFxuK1xcdGlmIChwcml2LVxcdTAwM2VidXNbMF0gfHwgcHJpdi1cXHUwMDNlYnVzWzFdKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGZyZXEgPSAyNTAwMDAwO1xcbitcXHRmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZV9zY29wZWQoYnVzLVxcdTAwM2VwYXJlbnQtXFx1MDAzZW9mX25vZGUsIGNoaWxkKSB7XFxuK1xcdFxcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihjaGlsZCwgXFxcImNsb2NrLWZyZXF1ZW5jeVxcXCIsIFxcdTAwMjZjaGlsZF9mcmVxKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRpZiAoZnJlcV9zZXQgXFx1MDAyNlxcdTAwMjYgZnJlcSAhPSBjaGlsZF9mcmVxKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdGZyZXEgPSBjaGlsZF9mcmVxO1xcbitcXHRcXHRmcmVxX3NldCA9IHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChmcmVxICE9IDEyNTAwMDAgXFx1MDAyNlxcdTAwMjYgZnJlcSAhPSAyNTAwMDAwIFxcdTAwMjZcXHUwMDI2IGZyZXEgIT0gNTAwMDAwMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHR2YWwgPSBGSUVMRF9QUkVQKFJUTDgzOTBfU01JX0ZSRVFfU0VMLCBmcmVxIC8gMjUwMDAwMCk7XFxuK1xcdGVyciA9IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVxcdTAwM2VyZWdtYXAsIFJUTDgzOTBfU01JX0dMQl9DVFJMLCBSVEw4MzkwX1NNSV9GUkVRX1NFTCwgdmFsKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldF9idXNfZnJlcXVlbmN5KHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBmcmVxKVxcbit7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX2NoYW4gKmNoYW4gPSBidXMtXFx1MDAzZXByaXY7XFxuK1xcdHUzMiBtYXNrLCB2YWw7XFxuK1xcbitcXHRpZiAoZnJlcSAhPSAxMjUwMDAwIFxcdTAwMjZcXHUwMDI2IGZyZXEgIT0gMjUwMDAwMCBcXHUwMDI2XFx1MDAyNiBmcmVxICE9IDUwMDAwMDApXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bWFzayA9IFJUTDkzMDBfU01JX0ZSRVFfU0VMKGNoYW4tXFx1MDAzZW1kaW9fYnVzKTtcXG4rXFx0dmFsID0gZmllbGRfcHJlcChtYXNrLCBmcmVxIC8gMjUwMDAwMCk7XFxuK1xcbitcXHRyZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtXFx1MDAzZXJlZ21hcCwgUlRMOTMwMF9TTUlfR0xCX0NUUkwsIG1hc2ssIHZhbCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcXG4ge1xcbiBcXHR1MzIgZ2xiX2N0cmxfbWFzayA9IDAsIGdsYl9jdHJsX3ZhbCA9IDA7XFxuQEAgLTc2OSw2ICs4MzgsMjEgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0X2J1c19mcmVxdWVuY3koc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGZyZXEpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fY2hhbiAqY2hhbiA9IGJ1cy1cXHUwMDNlcHJpdjtcXG4rXFx0dTMyIG1hc2ssIHZhbDtcXG4rXFxuK1xcdGlmIChmcmVxICE9IDEyNTAwMDAgXFx1MDAyNlxcdTAwMjYgZnJlcSAhPSAyNTAwMDAwIFxcdTAwMjZcXHUwMDI2IGZyZXEgIT0gNTAwMDAwMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRtYXNrID0gUlRMOTMxMF9TTUlfRlJFUV9TRUwoY2hhbi1cXHUwMDNlbWRpb19idXMpO1xcbitcXHR2YWwgPSBmaWVsZF9wcmVwKG1hc2ssIGZyZXEgLyAyNTAwMDAwKTtcXG4rXFxuK1xcdHJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLCBSVEw5MzEwX1NNSV9HTEJfQ1RSTDAsIG1hc2ssIHZhbCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcXG4ge1xcbiBcXHRpbnQgaSwgZXJyO1xcbkBAIC04MzEsMTQgKzkxNSwxNCBAQCBzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LFxcbi1cXHRcXHRcXHRcXHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKm5vZGUpXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuO1xcbiBcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xcbi1cXHR1MzIgbWRpb19idXM7XFxuK1xcdHUzMiBtZGlvX2J1cywgZnJlcTtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGVyciA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCBcXFwicmVnXFxcIiwgXFx1MDAyNm1kaW9fYnVzKTtcXG4rXFx0ZXJyID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgXFxcInJlZ1xcXCIsIFxcdTAwMjZtZGlvX2J1cyk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcXFwidW5kZWZpbmVkIHNtaSBidXMgbnVtYmVyXFxcXG5cXFwiKTtcXG4gXFxuQEAgLTg0Niw2ICs5MzAsOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdlxcbiBcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuIFxcdFxcdFxcdFxcdCAgICAgXFxcImlsbGVnYWwgKGRhbmdsaW5nKSBzbWkgYnVzIG51bWJlciAlZFxcXFxuXFxcIiwgbWRpb19idXMpO1xcbiBcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWJ1c1ttZGlvX2J1c10pXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwgXFxcImR1cGxpY2F0ZWQgc21pIGJ1cyBudW1iZXIgJWRcXFxcblxcXCIsIG1kaW9fYnVzKTtcXG4rXFxuIFxcdGJ1cyA9IGRldm1fbWRpb2J1c19hbGxvY19zaXplKGRldiwgc2l6ZW9mKCpjaGFuKSk7XFxuIFxcdGlmICghYnVzKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5AQCAtODY1LDEwICs5NTIsMTkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXZcXG4gXFxuIFxcdHNucHJpbnRmKGJ1cy1cXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXFxcIiVzLSVkXFxcIiwgZGV2X25hbWUoZGV2KSwgbWRpb19idXMpO1xcbiBcXG4tXFx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCB0b19vZl9ub2RlKG5vZGUpKTtcXG4rXFx0aWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsIFxcXCJjbG9jay1mcmVxdWVuY3lcXFwiLCBcXHUwMDI2ZnJlcSkpXFxuK1xcdFxcdGZyZXEgPSAyNTAwMDAwO1xcbitcXHRlcnIgPSBwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2VzZXRfYnVzX2ZyZXF1ZW5jeShidXMsIGZyZXEpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXFxcImNhbm5vdCBzZXQgZnJlcXVlbmN5ICV1IGZvciBNRElPIGJ1cyAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICBmcmVxLCBtZGlvX2J1cyk7XFxuK1xcbitcXHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG5vZGUpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXFxcImNhbm5vdCByZWdpc3RlciBNRElPIGJ1c1xcXFxuXFxcIik7XFxuIFxcbitcXHRwcml2LVxcdTAwM2VidXNbbWRpb19idXNdID0gYnVzO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTEwMjcsNyArMTEyMyw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXFxcImZhaWxlZCB0byBzZXR1cCBNRElPIGJ1cyBjb250cm9sbGVyXFxcXG5cXFwiKTtcXG4gXFx0fVxcbiBcXG4tXFx0ZGV2aWNlX2Zvcl9lYWNoX2NoaWxkX25vZGVfc2NvcGVkKGRldiwgY2hpbGQpIHtcXG4rXFx0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGVfc2NvcGVkKGRldi1cXHUwMDNlb2Zfbm9kZSwgY2hpbGQpIHtcXG4gXFx0XFx0ZXJyID0gb3R0b19lbWRpb19wcm9iZV9vbmUoZGV2LCBwcml2LCBjaGlsZCk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuQEAgLTEwNTEsNiArMTE0Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM4MF9pbmZvID0ge1xcbiBcXHQubnVtX3BhZ2VzID0gUlRMODM4MF9OVU1fUEFHRVMsXFxuIFxcdC5udW1fcG9ydHMgPSBSVEw4MzgwX05VTV9QT1JUUyxcXG4gXFx0LnBvbGxfY3RybCA9IFJUTDgzODBfU01JX1BPTExfQ1RSTCxcXG4rXFx0LnNldF9idXNfZnJlcXVlbmN5ID0gb3R0b19lbWRpb184MzgwX3NldF9idXNfZnJlcXVlbmN5LFxcbiBcXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyLFxcbiBcXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjIsXFxuIFxcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NSxcXG5AQCAtMTA3NSw2ICsxMTcyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzkwX2luZm8gPSB7XFxuIFxcdC5udW1fcGFnZXMgPSBSVEw4MzkwX05VTV9QQUdFUyxcXG4gXFx0Lm51bV9wb3J0cyA9IFJUTDgzOTBfTlVNX1BPUlRTLFxcbiBcXHQucG9sbF9jdHJsID0gUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsXFxuK1xcdC5zZXRfYnVzX2ZyZXF1ZW5jeSA9IG90dG9fZW1kaW9fODM5MF9zZXRfYnVzX2ZyZXF1ZW5jeSxcXG4gXFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzIyLFxcbiBcXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUsXFxuIFxcdC53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyLFxcbkBAIC0xMDk3LDYgKzExOTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHtcXG4gXFx0Lm51bV9wb3J0cyA9IFJUTDkzMDBfTlVNX1BPUlRTLFxcbiBcXHQubnVtX3BhZ2VzID0gUlRMOTMwMF9OVU1fUEFHRVMsXFxuIFxcdC5wb2xsX2N0cmwgPSBSVEw5MzAwX1NNSV9QT0xMX0NUUkwsXFxuK1xcdC5zZXRfYnVzX2ZyZXF1ZW5jeSA9IG90dG9fZW1kaW9fOTMwMF9zZXRfYnVzX2ZyZXF1ZW5jeSxcXG4gXFx0LnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlcixcXG4gXFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzIyLFxcbiBcXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jNDUsXFxuQEAgLTExMjMsNiArMTIyMiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0ge1xcbiBcXHQubnVtX3BhZ2VzID0gUlRMOTMxMF9OVU1fUEFHRVMsXFxuIFxcdC5udW1fcG9ydHMgPSBSVEw5MzEwX05VTV9QT1JUUyxcXG4gXFx0LnBvbGxfY3RybCA9IFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMLFxcbitcXHQuc2V0X2J1c19mcmVxdWVuY3kgPSBvdHRvX2VtZGlvXzkzMTBfc2V0X2J1c19mcmVxdWVuY3ksXFxuIFxcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIsXFxuIFxcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMixcXG4gXFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzQ1LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoyMjowNy43ODUwNTczNTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQyMjE3NjMxMDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEZXZpY2VUcmVlIGJpbmRpbmdzIGFuZCB0aGUgbWRpby1yZWFsdGVrLXJ0bDkzMDAgZHJpdmVyIGZvciBSZWFsdGVrIFJUTDgzeHgvUlRMOTN4eCBFdGhlcm5ldCBzd2l0Y2ggU29DcyAoTUlQUyBwbGF0Zm9ybSkuIFRoaXMgaGFyZHdhcmUgaXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgeDg2XzY0L2FtZDY0IFFFTVUgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlMGU3ZDlkMmJhMWEwMjE5NGVjYzU2ZmFiODg3MjA0ZDUyYzZmNDljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxNzoyMjowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxuaW5kZXggNjdlMGIyM2E4NDcwZS4uODg1MDJkMDE3ZWVkYiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXG5AQCAtNTYsNiArNTYsOSBAQCBwYXR0ZXJuUHJvcGVydGllczpcbiAgICAgICByZWc6XG4gICAgICAgICBtYXhJdGVtczogMVxuIFxuKyAgICAgIGNsb2NrLWZyZXF1ZW5jeTpcbisgICAgICAgIGRlZmF1bHQ6IDI1MDAwMDBcbitcbiAgICAgcmVxdWlyZWQ6XG4gICAgICAgLSByZWdcbiBcbkBAIC03MSw2ICs3NCw0MyBAQCByZXF1aXJlZDpcbiAgIC0gY29tcGF0aWJsZVxuICAgLSByZWdcbiBcbithbGxPZjpcbisgIC0gaWY6XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIGNvbXBhdGlibGU6XG4rICAgICAgICAgIGNvbnRhaW5zOlxuKyAgICAgICAgICAgIGVudW06XG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MC1tZGlvXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MS1tZGlvXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4Mi1tZGlvXG4rICAgIHRoZW46XG4rICAgICAgcGF0dGVyblByb3BlcnRpZXM6XG4rICAgICAgICAnXm1kaW8tYnVzQFswLTNdJCc6XG4rICAgICAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICAgICAgY2xvY2stZnJlcXVlbmN5OlxuKyAgICAgICAgICAgICAgZW51bTogWzI1MDAwMDAsIDEwMDAwMDAwXVxuKyAgLSBpZjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgY29udGFpbnM6XG4rICAgICAgICAgICAgZW51bTpcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkxLW1kaW9cbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkyLW1kaW9cbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkzLW1kaW9cbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAxLW1kaW9cbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAyYi1tZGlvXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMmMtbWRpb1xuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDMtbWRpb1xuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTEtbWRpb1xuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTItbWRpb1xuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTMtbWRpb1xuKyAgICB0aGVuOlxuKyAgICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOlxuKyAgICAgICAgJ15tZGlvLWJ1c0BbMC0zXSQnOlxuKyAgICAgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgICAgIGNsb2NrLWZyZXF1ZW5jeTpcbisgICAgICAgICAgICAgIGVudW06IFsxMjUwMDAwLCAyNTAwMDAwLCA1MDAwMDAwXVxuK1xuIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiBcbiBleGFtcGxlczpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcbmluZGV4IDExZDA3OGVmOTQxY2QuLmQ0MGZkZDBlZDJmMGQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuQEAgLTEzMCw2ICsxMzAsNyBAQFxuICNkZWZpbmUgUlRMODM4MF9OVU1fUEFHRVNcdFx0XHQ0MDk2XG4gI2RlZmluZSBSVEw4MzgwX05VTV9QT1JUU1x0XHRcdDI4XG4gI2RlZmluZSBSVEw4MzgwX1NNSV9HTEJfQ1RSTFx0XHRcdDB4YTEwMFxuKyNkZWZpbmUgICBSVEw4MzgwX1NNSV9GUkVRX1NFTFx0XHRcdEJJVCgxKVxuICNkZWZpbmUgICBSVEw4MzgwX1NNSV9QSFlfUEFUQ0hfRE9ORVx0XHRCSVQoMTUpXG4gI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMFx0XHQweGExYjhcbiAjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xXHRcdDB4YTFiY1xuQEAgLTE2OSwxMiArMTcwLDE1IEBAXG4gI2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfTE9XXHRcdDB4MDNlNFxuICNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0hcdFx0MHgwM2U4XG4gI2RlZmluZSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFx0XHQweDAzZmNcbisjZGVmaW5lIFJUTDgzOTBfU01JX0dMQl9DVFJMXHRcdFx0MHgwM2Y4XG4rI2RlZmluZSAgIFJUTDgzOTBfU01JX0ZSRVFfU0VMXHRcdFx0R0VOTUFTSyg2LCA1KVxuIFxuICNkZWZpbmUgUlRMOTMwMF9OVU1fQlVTRVNcdFx0XHQ0XG4gI2RlZmluZSBSVEw5MzAwX05VTV9QQUdFU1x0XHRcdDQwOTZcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BPUlRTXHRcdFx0MjhcbiAjZGVmaW5lIFJUTDkzMDBfU01JX0dMQl9DVFJMXHRcdFx0MHhjYTAwXG4gI2RlZmluZSAgIFJUTDkzMDBfR0xCX0NUUkxfSU5URl9TRUwoaW50ZilcdEJJVCgxNiArIChpbnRmKSlcbisjZGVmaW5lICAgUlRMOTMwMF9TTUlfRlJFUV9TRUwoaW50ZilcdFx0R0VOTUFTSygoaW50ZikgKiAyICsgOSwgKGludGYpICogMiArIDgpXG4gI2RlZmluZSBSVEw5MzAwX1NNSV9QT1JUMF8xNV9QT0xMSU5HX1NFTFx0MHhjYTA4XG4gI2RlZmluZSBSVEw5MzAwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMFx0XHQweGNiNzBcbiAjZGVmaW5lIFJUTDkzMDBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xXHRcdDB4Y2I3NFxuQEAgLTE5Niw2ICsyMDAsOCBAQFxuICNkZWZpbmUgUlRMOTMxMF9OVU1fQlVTRVNcdFx0XHQ0XG4gI2RlZmluZSBSVEw5MzEwX05VTV9QQUdFU1x0XHRcdDgxOTJcbiAjZGVmaW5lIFJUTDkzMTBfTlVNX1BPUlRTXHRcdFx0NTZcbisjZGVmaW5lIFJUTDkzMTBfU01JX0dMQl9DVFJMMFx0XHRcdDB4MGNjMFxuKyNkZWZpbmUgICBSVEw5MzEwX1NNSV9GUkVRX1NFTChpbnRmKVx0XHRHRU5NQVNLKChpbnRmKSAqIDIgKyA1LCAoaW50ZikgKiAyICsgNClcbiAjZGVmaW5lIFJUTDkzMTBfU01JX0dMQl9DVFJMMVx0XHRcdDB4MGNiY1xuICNkZWZpbmUgICBSVEw5MzEwX1NNSV9HTEJfRk1UX1NFTF9DNDUoaW50ZilcdEJJVCgoaW50ZikgKiAyICsgMSlcbiAjZGVmaW5lIFJUTDkzMTBfU01JX0lORFJUX0FDQ0VTU19DVFJMXzBcdFx0MHgwYzAwXG5AQCAtMjY5LDYgKzI3NSw3IEBAIHN0cnVjdCBvdHRvX2VtZGlvX2luZm8ge1xuIFx0dTggbnVtX3BvcnRzO1xuIFx0dTE2IG51bV9wYWdlcztcbiBcdHUzMiBwb2xsX2N0cmw7XG4rXHRpbnQgKCpzZXRfYnVzX2ZyZXF1ZW5jeSkoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGZyZXEpO1xuIFx0aW50ICgqc2V0dXBfY29udHJvbGxlcikoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdik7XG4gXHRpbnQgKCpyZWFkX2MyMikoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xuIFx0aW50ICgqcmVhZF9jNDUpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xuQEAgLTc0MCw2ICs3NDcsMTcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfc2V0X2J1c19mcmVxdWVuY3koc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGZyZXEpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbitcbitcdGlmIChmcmVxICE9IDI1MDAwMDAgXHUwMDI2XHUwMDI2IGZyZXEgIT0gMTAwMDAwMDApXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIHJlZ21hcF9hc3NpZ25fYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgUlRMODM4MF9TTUlfR0xCX0NUUkwsXG4rXHRcdFx0XHQgIFJUTDgzODBfU01JX0ZSRVFfU0VMLCBmcmVxID09IDEwMDAwMDAwKTtcbit9XG4rXG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIHtcbiBcdC8qXG5AQCAtNzQ5LDYgKzc2Nyw1NyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gcmVnbWFwX3NldF9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBSVEw4MzgwX1NNSV9HTEJfQ1RSTCwgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkUpO1xuIH1cbiBcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9zZXRfYnVzX2ZyZXF1ZW5jeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgZnJlcSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuK1x0Ym9vbCBmcmVxX3NldCA9IGZhbHNlO1xuK1x0dTMyIGNoaWxkX2ZyZXEsIHZhbDtcbitcdGludCBlcnI7XG4rXG4rXHQvKlxuK1x0ICogUlRMODM5eCB1c2VzIGEgc2luZ2xlIGZyZXF1ZW5jeSBmb3IgdGhlIHR3byBNRElPIGJ1c2VzLiBEdXJpbmcgcmVnaXN0cmF0aW9uIG9mIGZpcnN0XG4rXHQgKiBidXMgcGljayBhbiBleHBsaWNpdGx5IHJlcXVlc3RlZCBmcmVxdWVuY3kgZnJvbSBhbnkgZW5hYmxlZCBidXMuIFVzZSB0aGUgZGVmYXVsdCBvbmx5XG4rXHQgKiBpZiBubyBmcmVxdWVuY3kgaXMgc2V0IGF0IGFsbC5cbitcdCAqL1xuK1x0aWYgKHByaXYtXHUwMDNlYnVzWzBdIHx8IHByaXYtXHUwMDNlYnVzWzFdKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGZyZXEgPSAyNTAwMDAwO1xuK1x0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGVfc2NvcGVkKGJ1cy1cdTAwM2VwYXJlbnQtXHUwMDNlb2Zfbm9kZSwgY2hpbGQpIHtcbitcdFx0aWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKGNoaWxkLCBcImNsb2NrLWZyZXF1ZW5jeVwiLCBcdTAwMjZjaGlsZF9mcmVxKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0aWYgKGZyZXFfc2V0IFx1MDAyNlx1MDAyNiBmcmVxICE9IGNoaWxkX2ZyZXEpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdGZyZXEgPSBjaGlsZF9mcmVxO1xuK1x0XHRmcmVxX3NldCA9IHRydWU7XG4rXHR9XG4rXG4rXHRpZiAoZnJlcSAhPSAxMjUwMDAwIFx1MDAyNlx1MDAyNiBmcmVxICE9IDI1MDAwMDAgXHUwMDI2XHUwMDI2IGZyZXEgIT0gNTAwMDAwMClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHR2YWwgPSBGSUVMRF9QUkVQKFJUTDgzOTBfU01JX0ZSRVFfU0VMLCBmcmVxIC8gMjUwMDAwMCk7XG4rXHRlcnIgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIFJUTDgzOTBfU01JX0dMQl9DVFJMLCBSVEw4MzkwX1NNSV9GUkVRX1NFTCwgdmFsKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldF9idXNfZnJlcXVlbmN5KHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBmcmVxKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuID0gYnVzLVx1MDAzZXByaXY7XG4rXHR1MzIgbWFzaywgdmFsO1xuK1xuK1x0aWYgKGZyZXEgIT0gMTI1MDAwMCBcdTAwMjZcdTAwMjYgZnJlcSAhPSAyNTAwMDAwIFx1MDAyNlx1MDAyNiBmcmVxICE9IDUwMDAwMDApXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0bWFzayA9IFJUTDkzMDBfU01JX0ZSRVFfU0VMKGNoYW4tXHUwMDNlbWRpb19idXMpO1xuK1x0dmFsID0gZmllbGRfcHJlcChtYXNrLCBmcmVxIC8gMjUwMDAwMCk7XG4rXG4rXHRyZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBSVEw5MzAwX1NNSV9HTEJfQ1RSTCwgbWFzaywgdmFsKTtcbit9XG4rXG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIHtcbiBcdHUzMiBnbGJfY3RybF9tYXNrID0gMCwgZ2xiX2N0cmxfdmFsID0gMDtcbkBAIC03NjksNiArODM4LDIxIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXRfYnVzX2ZyZXF1ZW5jeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgZnJlcSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuK1x0c3RydWN0IG90dG9fZW1kaW9fY2hhbiAqY2hhbiA9IGJ1cy1cdTAwM2Vwcml2O1xuK1x0dTMyIG1hc2ssIHZhbDtcbitcbitcdGlmIChmcmVxICE9IDEyNTAwMDAgXHUwMDI2XHUwMDI2IGZyZXEgIT0gMjUwMDAwMCBcdTAwMjZcdTAwMjYgZnJlcSAhPSA1MDAwMDAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdG1hc2sgPSBSVEw5MzEwX1NNSV9GUkVRX1NFTChjaGFuLVx1MDAzZW1kaW9fYnVzKTtcbitcdHZhbCA9IGZpZWxkX3ByZXAobWFzaywgZnJlcSAvIDI1MDAwMDApO1xuK1xuK1x0cmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgUlRMOTMxMF9TTUlfR0xCX0NUUkwwLCBtYXNrLCB2YWwpO1xuK31cbitcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4ge1xuIFx0aW50IGksIGVycjtcbkBAIC04MzEsMTQgKzkxNSwxNCBAQCBzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gfVxuIFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LFxuLVx0XHRcdFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpub2RlKVxuK1x0XHRcdFx0c3RydWN0IGRldmljZV9ub2RlICpub2RlKVxuIHtcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NoYW4gKmNoYW47XG4gXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xuLVx0dTMyIG1kaW9fYnVzO1xuK1x0dTMyIG1kaW9fYnVzLCBmcmVxO1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCBcInJlZ1wiLCBcdTAwMjZtZGlvX2J1cyk7XG4rXHRlcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCBcInJlZ1wiLCBcdTAwMjZtZGlvX2J1cyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCJ1bmRlZmluZWQgc21pIGJ1cyBudW1iZXJcXG5cIik7XG4gXG5AQCAtODQ2LDYgKzkzMCw5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2XG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiBcdFx0XHRcdCAgICAgXCJpbGxlZ2FsIChkYW5nbGluZykgc21pIGJ1cyBudW1iZXIgJWRcXG5cIiwgbWRpb19idXMpO1xuIFxuK1x0aWYgKHByaXYtXHUwMDNlYnVzW21kaW9fYnVzXSlcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLCBcImR1cGxpY2F0ZWQgc21pIGJ1cyBudW1iZXIgJWRcXG5cIiwgbWRpb19idXMpO1xuK1xuIFx0YnVzID0gZGV2bV9tZGlvYnVzX2FsbG9jX3NpemUoZGV2LCBzaXplb2YoKmNoYW4pKTtcbiBcdGlmICghYnVzKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC04NjUsMTAgKzk1MiwxOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdlxuIFxuIFx0c25wcmludGYoYnVzLVx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFwiJXMtJWRcIiwgZGV2X25hbWUoZGV2KSwgbWRpb19idXMpO1xuIFxuLVx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCB0b19vZl9ub2RlKG5vZGUpKTtcbitcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCBcImNsb2NrLWZyZXF1ZW5jeVwiLCBcdTAwMjZmcmVxKSlcbitcdFx0ZnJlcSA9IDI1MDAwMDA7XG4rXHRlcnIgPSBwcml2LVx1MDAzZWluZm8tXHUwMDNlc2V0X2J1c19mcmVxdWVuY3koYnVzLCBmcmVxKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcImNhbm5vdCBzZXQgZnJlcXVlbmN5ICV1IGZvciBNRElPIGJ1cyAlZFxcblwiLFxuK1x0XHRcdFx0ICAgICBmcmVxLCBtZGlvX2J1cyk7XG4rXG4rXHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG5vZGUpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsIFwiY2Fubm90IHJlZ2lzdGVyIE1ESU8gYnVzXFxuXCIpO1xuIFxuK1x0cHJpdi1cdTAwM2VidXNbbWRpb19idXNdID0gYnVzO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEwMjcsNyArMTEyMyw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcImZhaWxlZCB0byBzZXR1cCBNRElPIGJ1cyBjb250cm9sbGVyXFxuXCIpO1xuIFx0fVxuIFxuLVx0ZGV2aWNlX2Zvcl9lYWNoX2NoaWxkX25vZGVfc2NvcGVkKGRldiwgY2hpbGQpIHtcbitcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlX3Njb3BlZChkZXYtXHUwMDNlb2Zfbm9kZSwgY2hpbGQpIHtcbiBcdFx0ZXJyID0gb3R0b19lbWRpb19wcm9iZV9vbmUoZGV2LCBwcml2LCBjaGlsZCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbkBAIC0xMDUxLDYgKzExNDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzODBfaW5mbyA9IHtcbiBcdC5udW1fcGFnZXMgPSBSVEw4MzgwX05VTV9QQUdFUyxcbiBcdC5udW1fcG9ydHMgPSBSVEw4MzgwX05VTV9QT1JUUyxcbiBcdC5wb2xsX2N0cmwgPSBSVEw4MzgwX1NNSV9QT0xMX0NUUkwsXG4rXHQuc2V0X2J1c19mcmVxdWVuY3kgPSBvdHRvX2VtZGlvXzgzODBfc2V0X2J1c19mcmVxdWVuY3ksXG4gXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyLFxuIFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzIyLFxuIFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1LFxuQEAgLTEwNzUsNiArMTE3Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM5MF9pbmZvID0ge1xuIFx0Lm51bV9wYWdlcyA9IFJUTDgzOTBfTlVNX1BBR0VTLFxuIFx0Lm51bV9wb3J0cyA9IFJUTDgzOTBfTlVNX1BPUlRTLFxuIFx0LnBvbGxfY3RybCA9IFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMLFxuK1x0LnNldF9idXNfZnJlcXVlbmN5ID0gb3R0b19lbWRpb184MzkwX3NldF9idXNfZnJlcXVlbmN5LFxuIFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzIyLFxuIFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1LFxuIFx0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIsXG5AQCAtMTA5Nyw2ICsxMTk1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzAwX2luZm8gPSB7XG4gXHQubnVtX3BvcnRzID0gUlRMOTMwMF9OVU1fUE9SVFMsXG4gXHQubnVtX3BhZ2VzID0gUlRMOTMwMF9OVU1fUEFHRVMsXG4gXHQucG9sbF9jdHJsID0gUlRMOTMwMF9TTUlfUE9MTF9DVFJMLFxuK1x0LnNldF9idXNfZnJlcXVlbmN5ID0gb3R0b19lbWRpb185MzAwX3NldF9idXNfZnJlcXVlbmN5LFxuIFx0LnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlcixcbiBcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMixcbiBcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2M0NSxcbkBAIC0xMTIzLDYgKzEyMjIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcbiBcdC5udW1fcGFnZXMgPSBSVEw5MzEwX05VTV9QQUdFUyxcbiBcdC5udW1fcG9ydHMgPSBSVEw5MzEwX05VTV9QT1JUUyxcbiBcdC5wb2xsX2N0cmwgPSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCxcbitcdC5zZXRfYnVzX2ZyZXF1ZW5jeSA9IG90dG9fZW1kaW9fOTMxMF9zZXRfYnVzX2ZyZXF1ZW5jeSxcbiBcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIsXG4gXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIsXG4gXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jNDUsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoyMjowNy43ODUwNTg2MjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTIyMzMwMzcyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvZGUgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSBzZWUgYSBwYXRjaCB0b3VjaGluZyBgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sYCBhbmQgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBMZXQncyBkaWcgaW50byBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZHJpdmVyIHRoaXMgaXMsIGhvdyB0aGUga2VybmVsIHByb2JlcyBmb3IgaXQsIHRoZSBzcGVjaWZpYyBidXMgaXQncyB0aWVkIHRvLCBhbmQgd2hldGhlciB0aGlzIGlzIHNvbWV0aGluZyBnZW5lcmljIGVub3VnaCB0byBiZSByZWxldmFudCBpbiBteSBzdGFuZGFyZCB4ODYvYW1kNjQgdmlydHVhbGl6YXRpb24gc2V0dXBzIG9yIGlmIGl0J3Mgc3RyaWN0bHkgU29DIG9yIGhhcmR3YXJlLXNwZWNpZmljLiBJJ2xsIG5lZWQgdG8gdXNlIGBncmVwcGVyYCB0byBxdWlja2x5IHRyYWNrIGRvd24gdGhlIEtjb25maWcgZW50cmllcyByZWxhdGVkIHRvIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNjMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoyMjoyMy4wMDgzNjQ3OTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4NjM0ODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW8tcmVhbHRlay1ydGw5MzAwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21kaW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZT0yMz1vYmotJChDT05GSUdfTURJT19QSUM2NEhQU0MpXFx0XFx0Kz0gbWRpby1waWM2NGhwc2Mub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX01ESU9fUkVBTFRFS19SVEw5MzAwKVxcdCs9IG1kaW8tcmVhbHRlay1ydGw5MzAwLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlLTI1LW9iai0kKENPTkZJR19NRElPX1JFR01BUClcXHRcXHQrPSBtZGlvLXJlZ21hcC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjIyOjIzLjIzNzAwNzY2NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NjY1MTU3NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBSZWFsdGVrIFJUTDkzMDAgTURJTyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgUmVhbHRlayBSVEw5MzAwJ3MgTURJTyBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGlzIGtlcm5lbCBjb250ZXh0LiBGaXJzdCwgbXkgaW1tZWRpYXRlIGFjdGlvbiBpcyB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBlbnRyeS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgYENPTkZJR19NRElPX1JFQUxURUtfUlRMOTMwMGAuIFRoaXMgc2hvdWxkIGxlYWQgbWUgdG8gdGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBhbnkgY29uZGl0aW9uYWwgYnVpbGQgbG9naWMgcmVsYXRlZCB0byB0aGUgUlRMOTMwMCdzIE1ESU8gc3VwcG9ydC4gSSBhbnRpY2lwYXRlIHRoaXMgS2NvbmZpZyBvcHRpb24gd2lsbCB0aWUgaW50byB0aGUgYnJvYWRlciBNRElPIGZyYW1ld29yaywgYnV0IHRoZSBSVEw5MzAwIGlzIGEgc3BlY2lhbGl6ZWQgZGV2aWNlIGFuZCBsaWtlbHkgaGFzIHNvbWUgcGxhdGZvcm0tc3BlY2lmaWMgcmVxdWlyZW1lbnRzLiBHZXR0aW5nIHRoZSBLY29uZmlnIHJpZ2h0IGlzIGNydWNpYWwgZm9yIGEgY2xlYW4sIG1haW50YWluYWJsZSBidWlsZCwgYW5kIGZvciBlbnN1cmluZyB0aGUgY29ycmVjdCBNRElPIGRyaXZlciBpcyBlbmFibGVkIGFuZCBjb25maWd1cmVkIGF0IHJ1bnRpbWUuIFRoZSBhaW0gaXMgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGN1cnJlbnQgc3RhdGUgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBnYXBzIG9yIGFyZWFzIHRoYXQgbWF5IG5lZWQgcmVmaW5lbWVudCwgZXNwZWNpYWxseSBpZiB0aGlzIGlzIGEgbmV3IHBsYXRmb3JtIGJyaW5nLXVwIG9yIGEgc3BlY2lmaWMgZmVhdHVyZSBhZGRpdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkxNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjIyOjI2LjAwMzUyNTMwNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjIyNjYwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNRElPX1JFQUxURUtfUlRMOTMwMFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tZGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz0xNjY9Y29uZmlnIE1ESU9fSVBRODA2NFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3My1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTc0OmNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzUtXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgUlRMODN4eC9SVEw5M3h4IE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlPTIzPW9iai0kKENPTkZJR19NRElPX1BJQzY0SFBTQylcXHRcXHQrPSBtZGlvLXBpYzY0aHBzYy5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfTURJT19SRUFMVEVLX1JUTDkzMDApXFx0Kz0gbWRpby1yZWFsdGVrLXJ0bDkzMDAub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGUtMjUtb2JqLSQoQ09ORklHX01ESU9fUkVHTUFQKVxcdFxcdCs9IG1kaW8tcmVnbWFwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MjI6MjYuMDU5NzU3NTY5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg1Nzk1NjczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE1ESU8gS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgTURJTyBkcml2ZXIuIEEgZ29vZCBzdGFydGluZyBwb2ludCBpcyBhbHdheXMgdGhlIEtjb25maWcgZmlsZSwgc28gSSdtIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBkcml2ZXJzL25ldC9tZGlvL0tjb25maWdgLiBTcGVjaWZpY2FsbHksIGFyb3VuZCBsaW5lIDE3NC4uLiB0aGF0J3Mgd2hlcmUgSSB1c3VhbGx5IGZpbmQgdGhlIG1lYXQgb2YgdGhlIHJlbGV2YW50IG9wdGlvbnMuIEkgd2FudCB0byBxdWlja2x5IGdyYXNwIHRoZSBkZXBlbmRlbmNpZXMg4oCTIHdoYXQgb3RoZXIgZmVhdHVyZXMgb3IgZHJpdmVycyBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIHRoZXNlIE1ESU8gb3B0aW9ucyBiZWNvbWUgYXZhaWxhYmxlPyBBbHNvLCBJIG5lZWQgdG8gcmV2aWV3IHRoZSBkZXNjcmlwdGlvbnMgdG8gcXVpY2tseSBnZXQgYSBzZW5zZSBvZiB3aGF0IGVhY2ggb3B0aW9uIGFjdHVhbGx5ICpkb2VzKiBpbiBwcmFjdGljYWwgdGVybXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGZvdW5kYXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBNRElPIGNvbmZpZ3VyYXRpb24gd29ya3Mgd2l0aGluIHRoaXMgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDU2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MjI6MjguOTE3NzE2MTg3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3MDpcXHRcXHRoZWxwXFxuIDE3MTpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBNRElPIGludGVyZmFjZSBmb3VuZCBpbiB0aGUgbmV0d29ya1xcbiAxNzI6XFx0XFx0ICBpbnRlcmZhY2UgdW5pdHMgb2YgdGhlIElQUTgwNjQgU29DXFxuIDE3MzpcXHRcXG4gMTc0OlxcdGNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFxcbiAxNzU6XFx0XFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgUlRMODN4eC9SVEw5M3h4IE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcXFwiXFxuIDE3NjpcXHRcXHRkZXBlbmRzIG9uIE1BQ0hfUkVBTFRFS19SVEwgfHwgQ09NUElMRV9URVNUXFxuIDE3NzpcXHRcXHRoZWxwXFxuIDE3ODpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBNRElPIGludGVyZmFjZSBmb3VuZCBpbiB0aGUgUmVhbHRla1xcbiAxNzk6XFx0XFx0ICBSVEw4M3h4L1JUTDkzeHggZmFtaWx5IG9mIEV0aGVybmV0IHN3aXRjaGVzIHdpdGggaW50ZWdyYXRlZCBTb0MuXFxuIDE4MDpcXHRcXG4gMTgxOlxcdGNvbmZpZyBNRElPX1JFR01BUFxcbiAxODI6XFx0XFx0dHJpc3RhdGVcXG4gMTgzOlxcdFxcdGhlbHBcXG4gMTg0OlxcdFxcdCAgVGhpcyBkcml2ZXIgYWxsb3dzIHVzaW5nIE1ESU8gZGV2aWNlcyB0aGF0IGFyZSBub3Qgc2l0dGluZyBvbiBhXFxuIDE4NTpcXHRcXHQgIHJlZ3VsYXIgTURJTyBidXMsIGJ1dCBzdGlsbCBleHBvc2VzIHRoZSBzdGFuZGFyZCA4MDIuMyByZWdpc3RlclxcbiAxODY6XFx0XFx0ICBsYXlvdXQuIEl0J3MgcmVnbWFwLWJhc2VkIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgb24gaW50ZWdyYXRlZCxcXG4gMTg3OlxcdFxcdCAgbWVtb3J5LW1hcHBlZCBQSFlzLCBTUEkgUEhZcyBhbmQgc28gb24uIEEgbmV3IHZpcnR1YWwgTURJTyBidXMgaXNcXG4gMTg4OlxcdFxcdCAgY3JlYXRlZCwgYW5kIGl0cyByZWFkL3dyaXRlIG9wZXJhdGlvbnMgYXJlIG1hcHBlZCB0byB0aGUgdW5kZXJseWluZ1xcbiAxODk6XFx0XFx0ICByZWdtYXAuIFVzZXJzIHdpbGxpbmcgdG8gdXNlIHRoaXMgZHJpdmVyIG11c3QgZXhwbGljaXRseSBzZWxlY3RcXG4gMTkwOlxcdFxcdCAgUkVHTUFQLlxcbiAxOTE6XFx0XFxuIDE5MjpcXHRjb25maWcgTURJT19USFVOREVSXFxuIDE5MzpcXHRcXHR0cmlzdGF0ZSBcXFwiVGh1bmRlclggU09DcyBNRElPIGJ1c2VzXFxcIlxcbiAxOTQ6XFx0XFx0ZGVwZW5kcyBvbiA2NEJJVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoyMjoyOC45MTc4MDUyNDdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODMxMTQ3NzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBSZWFsdGVrIFJUTDkzMDAgTURJTyBkcml2ZXIgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgaG93IGl0J3MgaW5pdGlhbGl6ZWQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIHNvdXJjZSBjb2RlIGl0c2VsZi4gSSdsbCBvcGVuIHVwIGBkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNgIHRvIGV4YW1pbmUgaXRzIHByb2JpbmcgcHJvY2Vzcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBpZGVudGlmeWluZyB3aGF0IGtpbmQgb2YgcGxhdGZvcm0gZGV2aWNlIGl0J3MgZGVzaWduZWQgdG8gd29yayB3aXRoLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyBleHBlY3RlZCBoYXJkd2FyZSBlbnZpcm9ubWVudCBhbmQgcmVzb3VyY2UgcmVxdWlyZW1lbnRzLiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoYXQgdG8gbWFrZSBhbnkgbW9kaWZpY2F0aW9ucyBvciBkZWJ1ZyBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMjUsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjIyOjMwLjc0ODk1NTc1OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ5MDI4MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX3BsYXRmb3JtX2RyaXZlcnxwbGF0Zm9ybV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYz0xMjQwPU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG90dG9fZW1kaW9faWRzKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMTI0MS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6MTI0MjpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvdHRvX2VtZGlvX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMTI0My1cXHQucHJvYmUgPSBvdHRvX2VtZGlvX3Byb2JlLFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTEyNTAtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjEyNTE6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihvdHRvX2VtZGlvX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTEyNTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjIyOjMwLjgwMzg2NDgwMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjIzMDQzNzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBSVEw5MzAwIE1ESU8gUHJvYmUqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBwcm9iZSBmdW5jdGlvbiB3aXRoaW4gYGRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIHJlYWxseSBzdGFydHMgaGFwcGVuaW5nIGZvciB0aGlzIHBhcnRpY3VsYXIgUmVhbHRlayBzd2l0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBkcml2ZXIgaW5pdGlhbGl6ZXMgaXRzZWxmIG9uIHRoZSBoYXJkd2FyZS4gV2hhdCdzIHRoZSBkZXRlY3Rpb24gbWVjaGFuaXNtPyBXaGF0IHJlc291cmNlcyBhcmUgYmVpbmcgcmVxdWVzdGVkIGFuZCBtYXBwZWQ/IEFyZSB0aGVyZSBhbnkgcXVpcmt5IGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcyBJIHNob3VsZCBiZSBhd2FyZSBvZiwgdGhlIFwiZ290Y2hhc1wiIFJlYWx0ZWsgbWlnaHQndmUgdGhyb3duIGluPyBJJ2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqRGV2aWNlIElEL1ZlbmRvciBJRCBjaGVja3M6KiogSG93IGRvZXMgaXQgZGV0ZXJtaW5lIHRoaXMgaXMgaW5kZWVkIGEgUlRMOTMwMD8gSXMgaXQgdXNpbmcgYSBzdGFuZGFyZCBQQ0kgSUQsIG9yIHNvbWV0aGluZyBjdXN0b20/XG4qICAgKipSZXNvdXJjZSBhbGxvY2F0aW9uOioqIFdoYXQncyBnZXR0aW5nIG1hcHBlZD8gSSdtIGV4cGVjdGluZyBhdCBsZWFzdCBhbiBNTUlPIHJlZ2lvbiwgcG90ZW50aWFsbHkgc29tZSBpbnRlcnJ1cHQgbGluZXMuIEknbSBnb2luZyB0byB3YW50IHRvIHNlZSB0aGUgZGV0YWlscyBvbiBgaW9yZW1hcCgpYCBjYWxscy5cbiogICAqKk1ESU8gYnVzIGluaXRpYWxpemF0aW9uOioqIEhvdyBpcyBpdCBpbnRlZ3JhdGluZyB3aXRoIHRoZSBnZW5lcmljIE1ESU8gZnJhbWV3b3JrPyBBcmUgdGhlcmUgYW55IGN1c3RvbSBjYWxsYmFja3MgaW52b2x2ZWQgdG8gc2V0IHVwIHRoZSBNRElPIGJ1cyBmb3IgdGhlIHNwZWNpZmljIGhhcmR3YXJlP1xuKiAgICoqQ2hpcHNldC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbjoqKiBXaGF0IHJlZ2lzdGVycyBhcmUgYmVpbmcgd3JpdHRlbiB0bz8gSXMgdGhlcmUgYSBib290IHNlcXVlbmNlPyBBcmUgdGhleSBlbmFibGluZyBjZXJ0YWluIGZlYXR1cmVzLCBvciBjb25maWd1cmluZyBjbG9ja3MgYXQgdGhpcyBzdGFnZT8gQXJlIHRoZXJlIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBxdWlya3MgKGUuZy4gRFQgYmluZGluZ3MpP1xuKiAgICoqRXJyb3IgaGFuZGxpbmc6KiogV2hhdCBhcmUgdGhlIGVycm9yIHBhdGhzPyBXaGF0IGhhcHBlbnMgaWYgdGhlIGRldmljZSBpcyBub3QgcHJlc2VudCwgb3IgdGhlIGluaXRpYWxpemF0aW9uIGZhaWxzP1xuKiAgICoqRHJpdmVyIG1vZGVsIHJlZ2lzdHJhdGlvbjoqKiBTcGVjaWZpY2FsbHksIGhvdyB0aGlzIGhhcmR3YXJlIGlzIHByZXNlbnRlZCB0byB0aGUgbmV0d29ya2luZyBzdGFjay4gV2hhdCdzIHRoZSBsaW5rIGJldHdlZW4gdGhpcyBNRElPIGRyaXZlciBhbmQgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGRyaXZlcnM/XG4qICAgKipJUlEgSGFuZGxpbmc6KiogSG93IGFyZSBpbnRlcnJ1cHRzIGJlaW5nIHNldCB1cD8gSXMgaXQgdXNpbmcgTVNJLVggb3IgdHJhZGl0aW9uYWwgaW50ZXJydXB0cz9cblxuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueXRoaW5nIG5vbi1zdGFuZGFyZCwgYW55dGhpbmcgdGhhdCBkZXZpYXRlcyBmcm9tIHRoZSB0eXBpY2FsIE1ESU8gZHJpdmVyIHBhdHRlcm4uIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSByZWFsbHkgaW50ZXJlc3RpbmcgZGV0YWlscyBhcmUuIEknbGwgYmUga2VlcGluZyBhIGNsb3NlIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcywgdG9vLCBvciBhbnkgcG9pbnRzIHdoZXJlIGl0IG1pZ2h0IGJlIGltcHJvdmVkIG9yIG1hZGUgY2xlYXJlciBmb3IgdGhlIG5leHQgZGV2ZWxvcGVyIHdobyBoYXMgdG8gdG91Y2ggdGhpcyBjb2RlLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MDEsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoyMjozNS4wMjY5MTA5NThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAwLFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDAwOlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwgXFxcIiVwZndQIG1pc3NpbmcgZXRoZXJuZXQtcG9ydHNcXFxcblxcXCIsXFxuMTAwMTpcXHRcXHRcXHRcXHRcXHQgICAgIGRldl9md25vZGUocGFyZW50KSk7XFxuMTAwMjpcXHRcXG4xMDAzOlxcdFxcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlX3Njb3BlZChwb3J0c19kbiwgcG9ydF9kbikge1xcbjEwMDQ6XFx0XFx0XFx0Y3RybF9kbiA9IE5VTEw7XFxuMTAwNTpcXHRcXHRcXHRidXNfZG4gPSBOVUxMO1xcbjEwMDY6XFx0XFx0XFx0cGh5X2RuID0gb2ZfcGFyc2VfcGhhbmRsZShwb3J0X2RuLCBcXFwicGh5LWhhbmRsZVxcXCIsIDApO1xcbjEwMDc6XFx0XFx0XFx0Lyogc2tpcCBwb3J0cyB3aXRob3V0IHBoeXMgKi9cXG4xMDA4OlxcdFxcdFxcdGlmICghcGh5X2RuKVxcbjEwMDk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTAxMDpcXHRcXG4xMDExOlxcdFxcdFxcdGJ1c19kbiA9IG90dG9fZW1kaW9fZ2V0X2J1c19ub2RlKHBoeV9kbik7XFxuMTAxMjpcXHRcXHRcXHRpZiAoIWJ1c19kbilcXG4xMDEzOlxcdFxcdFxcdFxcdGdvdG8gcHV0X25vZGVzO1xcbjEwMTQ6XFx0XFxuMTAxNTpcXHRcXHRcXHRjdHJsX2RuID0gb2ZfZ2V0X3BhcmVudChidXNfZG4pO1xcbjEwMTY6XFx0XFx0XFx0Lyogb25seSBtYXAgcG9ydHMgdGhhdCBhcmUgY29ubmVjdGVkIHRvIHRoaXMgbWRpby1jb250cm9sbGVyICovXFxuMTAxNzpcXHRcXHRcXHRpZiAoY3RybF9kbiAhPSBkZXYtXFx1MDAzZW9mX25vZGUpXFxuMTAxODpcXHRcXHRcXHRcXHRnb3RvIHB1dF9ub2RlcztcXG4xMDE5OlxcdFxcbjEwMjA6XFx0XFx0XFx0ZXJyID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocG9ydF9kbiwgXFxcInJlZ1xcXCIsIFxcdTAwMjZwbik7XFxuMTAyMTpcXHRcXHRcXHRpZiAoZXJyKVxcbjEwMjI6XFx0XFx0XFx0XFx0Z290byBwdXRfbm9kZXM7XFxuMTAyMzpcXHRcXG4xMDI0OlxcdFxcdFxcdGlmIChwbiBcXHUwMDNlPSBwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2VudW1fcG9ydHMpIHtcXG4xMDI1OlxcdFxcdFxcdFxcdGVyciA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLCBcXFwiaWxsZWdhbCBwb3J0IG51bWJlciAlZFxcXFxuXFxcIiwgcG4pO1xcbjEwMjY6XFx0XFx0XFx0XFx0Z290byBwdXRfbm9kZXM7XFxuMTAyNzpcXHRcXHRcXHR9XFxuMTAyODpcXHRcXG4xMDI5OlxcdFxcdFxcdGlmICh0ZXN0X2JpdChwbiwgcHJpdi1cXHUwMDNldmFsaWRfcG9ydHMpKSB7XFxuMTAzMDpcXHRcXHRcXHRcXHRlcnIgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwgXFxcImR1cGxpY2F0ZWQgcG9ydCBudW1iZXIgJWRcXFxcblxcXCIsIHBuKTtcXG4xMDMxOlxcdFxcdFxcdFxcdGdvdG8gcHV0X25vZGVzO1xcbjEwMzI6XFx0XFx0XFx0fVxcbjEwMzM6XFx0XFxuMTAzNDpcXHRcXHRcXHRlcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihidXNfZG4sIFxcXCJyZWdcXFwiLCBcXHUwMDI2YnVzKTtcXG4xMDM1OlxcdFxcdFxcdGlmIChlcnIpXFxuMTAzNjpcXHRcXHRcXHRcXHRnb3RvIHB1dF9ub2RlcztcXG4xMDM3OlxcdFxcbjEwMzg6XFx0XFx0XFx0aWYgKGJ1cyBcXHUwMDNlPSBwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2VudW1fYnVzZXMpIHtcXG4xMDM5OlxcdFxcdFxcdFxcdGVyciA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLCBcXFwiaWxsZWdhbCBzbWkgYnVzIG51bWJlciAlZFxcXFxuXFxcIiwgYnVzKTtcXG4xMDQwOlxcdFxcdFxcdFxcdGdvdG8gcHV0X25vZGVzO1xcbjEwNDE6XFx0XFx0XFx0fVxcbjEwNDI6XFx0XFxuMTA0MzpcXHRcXHRcXHRhZGRyID0gb2ZfbWRpb19wYXJzZV9hZGRyKGRldiwgcGh5X2RuKTtcXG4xMDQ0OlxcdFxcdFxcdGlmIChhZGRyIFxcdTAwM2MgMCkge1xcbjEwNDU6XFx0XFx0XFx0XFx0ZXJyID0gYWRkcjtcXG4xMDQ2OlxcdFxcdFxcdFxcdGdvdG8gcHV0X25vZGVzO1xcbjEwNDc6XFx0XFx0XFx0fVxcbjEwNDg6XFx0XFxuMTA0OTpcXHRcXHRcXHQvKlxcbjEwNTA6XFx0XFx0XFx0ICogVGhlIE1ESU8gYWNjZXNzZXMgZnJvbSB0aGUga2VybmVsIHdvcmsgd2l0aCB0aGUgUEhZIHBvbGxpbmcgdW5pdCBpbiB0aGVcXG4xMDUxOlxcdFxcdFxcdCAqIHN3aXRjaC4gVGhlIFBQVSBlaXRoZXIgb3BlcmF0ZXMgaW4gR1BIWSAoaS5lLiBjbGF1c2UgMjIpIG9yIDEwR1BIWSBtb2RlXFxuMTA1MjpcXHRcXHRcXHQgKiAoaS5lLiBjbGF1c2UgNDUpLiBTZWxlY3QgMTBHUEhZIG1vZGUgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIFBIWSB0aGF0XFxuMTA1MzpcXHRcXHRcXHQgKiBkZWNsYXJlcyBjb21wYXRpYmxlID0gXFxcImV0aGVybmV0LXBoeS1pZWVlODAyLjMtYzQ1XFxcIi5cXG4xMDU0OlxcdFxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoyMjozNS4wMjcwMTM2MjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkyODQ5ODMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIFwiTGV0J3Mgc2VlIHRoZSBzdGFydCBvZiBgb3R0b19lbWRpb19wcm9iZWBcIiwgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IERpdmluZyBpbnRvIGBvdHRvX2VtZGlvX3Byb2JlYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGUgcGhyYXNlIFwiTGV0J3Mgc2VlIHRoZSBzdGFydCBvZiBgb3R0b19lbWRpb19wcm9iZWBcIiBpbW1lZGlhdGVseSBzaWduYWxzIGEgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsIGNvbmRpdGlvbnMgb3IgZW50cnkgcG9pbnQgb2YgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBvciBtb2R1bGUsIGBvdHRvX2VtZGlvX3Byb2JlYC4gIE15IG1pbmQncyBhbHJlYWR5IHJhY2luZyB0aHJvdWdoIHBvc3NpYmlsaXRpZXMuIFdoYXQgaXMgdGhpcyBwcm9iZSAqZm9yKj8gSXMgaXQgYSBkcml2ZXIsIGEgaGFyZHdhcmUgaW50ZXJhY3Rpb24gcm91dGluZSwgYSBkZWJ1Z2dpbmcgdXRpbGl0eSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBuYW1lIGl0c2VsZiBnaXZlcyBhIHZhZ3VlIGhpbnQsIHBlcmhhcHMgcmVsYXRpbmcgdG8gJ2VtZGlvJyBhbmQgJ290dG8nLCBidXQgSSdsbCBuZWVkIG1vcmUgY29udGV4dCB0byB0cnVseSBrbm93LiBNeSBwcmltYXJ5IGZvY3VzIGlzIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGJyb2FkZXIgc3lzdGVtLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSBpbml0aWFsIGxpbmVzIG9mIGNvZGUg4oCTIGxpa2VseSBpbml0aWFsaXphdGlvbiwgZGV2aWNlIGlkZW50aWZpY2F0aW9uLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgcGFyYW1ldGVyIHZhbGlkYXRpb24uIFRoZSB3YXkgdGhlIHByb2JlIGlzIGhhbmRsZWQgd2lsbCB0ZWxsIGEgbG90IGFib3V0IHRoZSBhcmNoaXRlY3R1cmUuIEknbSBob3BpbmcgaXQncyB3ZWxsLWNvbW1lbnRlZCwgYnV0IEknbSBwcmVwYXJlZCBmb3IgYSBiaXQgb2YgZGlnZ2luZyB0byBkaXNjZXJuIGl0cyBjb3JlIGZ1bmN0aW9uIGlmIGl0IGlzbid0LiBJJ20ga2VlbiB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiB3aGF0IGl0J3MgcmVzcG9uc2libGUgZm9yLiBMZXQncyBzZWUgaWYgd2UgY2FuIGdldCBhIGhhbmRsZSBvbiB0aGlzIHF1aWNrbHk7IEknbSBlYWdlciB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGlzIHByb2JlIGlzIHJlYWxseSBhYm91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwODMsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjIyOjM3Ljk1NTUxNDMzNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODAsXG4gIFwiTGluZUNvdW50XCI6IDU1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODA6XFx0XFx0XFx0aWYgKGVycilcXG4xMDgxOlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTA4MjpcXHRcXHR9XFxuMTA4MzpcXHRcXG4xMDg0OlxcdFxcdHJldHVybiAwO1xcbjEwODU6XFx0fVxcbjEwODY6XFx0XFxuMTA4NzpcXHRzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4xMDg4OlxcdHtcXG4xMDg5OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuMTA5MDpcXHRcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2O1xcbjEwOTE6XFx0XFx0aW50IGVycjtcXG4xMDkyOlxcdFxcbjEwOTM6XFx0XFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbjEwOTQ6XFx0XFx0aWYgKCFwcml2KVxcbjEwOTU6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTA5NjpcXHRcXG4xMDk3OlxcdFxcdGVyciA9IGRldm1fbXV0ZXhfaW5pdChkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKTtcXG4xMDk4OlxcdFxcdGlmIChlcnIpXFxuMTA5OTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjExMDA6XFx0XFxuMTEwMTpcXHRcXHRwcml2LVxcdTAwM2VpbmZvID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7XFxuMTEwMjpcXHRcXHRwcml2LVxcdTAwM2VyZWdtYXAgPSBzeXNjb25fbm9kZV90b19yZWdtYXAoZGV2LVxcdTAwM2VwYXJlbnQtXFx1MDAzZW9mX25vZGUpO1xcbjExMDM6XFx0XFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VyZWdtYXApKVxcbjExMDQ6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cXHUwMDNlcmVnbWFwKTtcXG4xMTA1OlxcdFxcbjExMDY6XFx0XFx0ZXJyID0gb3R0b19lbWRpb19pbml0X3BvbGxpbmcocHJpdik7XFxuMTEwNzpcXHRcXHRpZiAoZXJyKVxcbjExMDg6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMTA5OlxcdFxcbjExMTA6XFx0XFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7XFxuMTExMTpcXHRcXG4xMTEyOlxcdFxcdGVyciA9IG90dG9fZW1kaW9fbWFwX3BvcnRzKGRldik7XFxuMTExMzpcXHRcXHRpZiAoZXJyKVxcbjExMTQ6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMTE1OlxcdFxcbjExMTY6XFx0XFx0ZXJyID0gb3R0b19lbWRpb19zZXR1cF90b3BvbG9neShwcml2KTtcXG4xMTE3OlxcdFxcdGlmIChlcnIpXFxuMTExODpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjExMTk6XFx0XFxuMTEyMDpcXHRcXHRpZiAocHJpdi1cXHUwMDNlaW5mby1cXHUwMDNlc2V0dXBfY29udHJvbGxlcikge1xcbjExMjE6XFx0XFx0XFx0ZXJyID0gcHJpdi1cXHUwMDNlaW5mby1cXHUwMDNlc2V0dXBfY29udHJvbGxlcihwcml2KTtcXG4xMTIyOlxcdFxcdFxcdGlmIChlcnIpXFxuMTEyMzpcXHRcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXFxcImZhaWxlZCB0byBzZXR1cCBNRElPIGJ1cyBjb250cm9sbGVyXFxcXG5cXFwiKTtcXG4xMTI0OlxcdFxcdH1cXG4xMTI1OlxcdFxcbjExMjY6XFx0XFx0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGVfc2NvcGVkKGRldi1cXHUwMDNlb2Zfbm9kZSwgY2hpbGQpIHtcXG4xMTI3OlxcdFxcdFxcdGVyciA9IG90dG9fZW1kaW9fcHJvYmVfb25lKGRldiwgcHJpdiwgY2hpbGQpO1xcbjExMjg6XFx0XFx0XFx0aWYgKGVycilcXG4xMTI5OlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTEzMDpcXHRcXHR9XFxuMTEzMTpcXHRcXG4xMTMyOlxcdFxcdHJldHVybiAwO1xcbjExMzM6XFx0fVxcbjExMzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjIyOjM3Ljk1NTYzNjA2NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NzE1OTI0OTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBvdHRvX2VtZGlvX3Byb2JlYCBEcml2ZXIncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHdoZXRoZXIgb3Igbm90IGBvdHRvX2VtZGlvX3Byb2JlYCwgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIFJlYWx0ZWsgUlRMODN4eC9SVEw5M3h4IEV0aGVybmV0IHN3aXRjaCBTb0NzIChNSVBTL0FSTSksIGlzIGEgdmlhYmxlIHRhcmdldCBmb3IgZnV6emluZyB3aXRoaW4gdGhlIGNvbnN0cmFpbnRzIG9mIHN0YW5kYXJkIHZpcnR1YWxpemVkIHg4Nl82NC9hbWQ2NCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgc3BlY2lmaWNhbGx5IHdpdGggc3l6a2FsbGVyLlxuXG5GaXJzdCwgSSBzZWUgaXQncyBsaW5rZWQgdG8gYE1BQ0hfUkVBTFRFS19SVExgIG9yIGBDT01QSUxFX1RFU1RgLCB3aGljaCBpc24ndCBkaXJlY3RseSBpbmZvcm1hdGl2ZSwgYnV0IHRlbGxzIG1lIGl0J3MgdGllZCB0byBhIHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24uIEl0J3MgRGV2aWNlIFRyZWUgZGVwZW5kZW50LCB3aGljaCBpcyBzdGFuZGFyZCBmb3IgcGxhdGZvcm0gZGV2aWNlcyB0aGVzZSBkYXlzIChgZGV2LVx1MDAzZW9mX25vZGVgLCBhbmQgdXNlcyBgc3lzY29uX25vZGVfdG9fcmVnbWFwYCkuIENydWNpYWxseSwgbXkgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBgYW1kNjRgLCBub3QgdGhlIG5hdGl2ZSBNSVBTL0FSTSBvZiB0aGUgUlRMIGNoaXBzLlxuXG5Ob3csIGxldCdzIGFwcGx5IHRoZSBXb3J0aEZ1enppbmcgY3JpdGVyaWEuIEknbSBsb29raW5nIGZvciAqbmVnYXRpdmUqIGluZGljYXRvcnMsIHJlYXNvbnMgdG8gZXhjbHVkZSB0aGlzIGRyaXZlciBmcm9tIGZ1enppbmcuIFRoZSBjcml0ZXJpYSBvdXRsaW5lZCBzdGF0ZTpcblxuKiAgICoqTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoqKiBUaGlzIHNlZW1zIHVubGlrZWx5LiBUaGlzIGlzIGEgY29yZSBkcml2ZXIsIHNvIGl0J3MgcHJvYmFibHkgYWN0dWFsIGtlcm5lbCBjb2RlLlxuKiAgICoqU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOioqIEFoLCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIFJlYWx0ZWsgUlRMODN4eC9SVEw5M3h4IEV0aGVybmV0IHN3aXRjaCBTb0NzICphcmUqIHNwZWNpYWxpemVkIGhhcmR3YXJlLiBUaGlzIGZlZWxzIGxpa2UgaXQgbWlnaHQgYXBwbHkuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBwaHlzaWNhbCBBU0lDIG9yIHNwZWNpYWxpemVkIGhhcmR3YXJlLCBwcm9iYWJseSBub3QgZW11bGF0ZWQgZmFpdGhmdWxseSB3aXRoaW4gUUVNVS4gVGhpbmdzIGxpa2UgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUgYXJlIGV4Y2x1ZGVkLCBidXQgaXMgdGhpcyBzaW1pbGFyIGVub3VnaD9cbiogICAqKlVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoqKiAgVGhpcyBpcyBwcm9iYWJseSBub3QgdGhlIGNhc2UsIHNpbmNlIGl0IHVzZXMgYHJlbW92ZWAsIGBzaHV0ZG93bmAsIGV0Yy5cblxuVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIG5vdyBpcywgaXMgYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgIGEgKnBsYXRmb3JtKiBkcml2ZXIgdGhhdCdzIGZ1bmRhbWVudGFsbHkgcmVsaWFudCBvbiBhIHNwZWNpZmljIFJlYWx0ZWsgaGFyZHdhcmUgKmNvbmZpZ3VyYXRpb24qLCBzcGVjaWZpY2FsbHkgYE1BQ0hfUkVBTFRFS19SVExgPyBJZiBzbywgdGhpcyBkcml2ZXIgbGlrZWx5IGRlcGVuZHMgb24gYW4gUlRMODN4eC9SVEw5M3h4IGNoaXAgYW5kIHJlbGF0ZWQgaGFyZHdhcmUgdGhhdCdzICpub3QqIGdlbmVyYWxseSBlbXVsYXRlZCBpbiBhIHN0YW5kYXJkIGZ1enppbmcgc2V0dXAuIEdpdmVuIHRoYXQgaXQgcmVsaWVzIG9uIGBNQUNIX1JFQUxURUtfUlRMYCBJIHRoaW5rIEknbGwgbmVlZCB0byByZXNlYXJjaCBhbmQgY29uZmlybSB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoaXMgcGxhdGZvcm0gaW4gZW11bGF0ZWQgZW52aXJvbm1lbnRzLiBNeSBpbml0aWFsIGluY2xpbmF0aW9uIGlzIHRvIHNheSBpdCdzICpwcm9iYWJseSogbm90IHdvcnRoIGZ1enppbmcgZGlyZWN0bHkgd2l0aCBhIHN0YW5kYXJkIHNldHVwLiBJJ2QgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGVtdWxhdGlvbiBjYXBhYmlsaXRpZXMsIG1heWJlIGV2ZW4gdHJ5aW5nIHRvIGZpbmQgYSBtYXRjaGluZyBRRU1VIGltYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIwOSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjIyOjQyLjY3MTU2MjdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTYxOTgyNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUFDSF9SRUFMVEVLX1JUTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL21pcHMvS2NvbmZpZz02ODE9Y29uZmlnIFJBTElOS1xcbi0tXFxuYXJjaC9taXBzL0tjb25maWctNjk4LVxcbmFyY2gvbWlwcy9LY29uZmlnOjY5OTpjb25maWcgTUFDSF9SRUFMVEVLX1JUTFxcbmFyY2gvbWlwcy9LY29uZmlnLTcwMC1cXHRib29sIFxcXCJSZWFsdGVrIFJUTDgzOHgvUlRMODM5eCBiYXNlZCBtYWNoaW5lc1xcXCJcXG4tLVxcbmFyY2gvbWlwcy9ib290L2R0cy9yZWFsdGVrL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmFyY2gvbWlwcy9ib290L2R0cy9yZWFsdGVrL01ha2VmaWxlOjI6ZHRiLSQoQ09ORklHX01BQ0hfUkVBTFRFS19SVEwpXFx0Kz0gY2lzY29fc2cyMjAtMjYuZHRiXFxuYXJjaC9taXBzL2Jvb3QvZHRzL3JlYWx0ZWsvTWFrZWZpbGU6MzpkdGItJChDT05GSUdfTUFDSF9SRUFMVEVLX1JUTClcXHQrPSBjYW1lby1ydGw5MzAyYy0yeC1ydGw4MjI0LTJ4Z2UuZHRiXFxuLS1cXG5hcmNoL21pcHMvZ2VuZXJpYy9NYWtlZmlsZT0xNT1vYmotJChDT05GSUdfVklSVF9CT0FSRF9SQU5DSFUpXFx0XFx0Kz0gYm9hcmQtcmFuY2h1Lm9cXG5hcmNoL21pcHMvZ2VuZXJpYy9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfTUFDSF9SRUFMVEVLX1JUTClcXHRcXHQrPSBib2FyZC1yZWFsdGVrLm9cXG4tLVxcbmRyaXZlcnMvZ3Bpby9LY29uZmlnPTYyNT1jb25maWcgR1BJT19SRUFMVEVLX09UVE9cXG5kcml2ZXJzL2dwaW8vS2NvbmZpZy02MjYtXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgT3R0byBHUElPIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9ncGlvL0tjb25maWc6NjI3OlxcdGRlcGVuZHMgb24gTUFDSF9SRUFMVEVLX1JUTCB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL2dwaW8vS2NvbmZpZzo2Mjg6XFx0ZGVmYXVsdCBNQUNIX1JFQUxURUtfUlRMXFxuZHJpdmVycy9ncGlvL0tjb25maWctNjI5LVxcdHNlbGVjdCBHUElPX0dFTkVSSUNcXG4tLVxcbmRyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnPTExMDM9Y29uZmlnIEkyQ19SVEw5MzAwXFxuZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWctMTEwNC1cXHR0cmlzdGF0ZSBcXFwiUmVhbHRlayBSVEw5MzAwIEkyQyBjb250cm9sbGVyXFxcIlxcbmRyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnOjExMDU6XFx0ZGVwZW5kcyBvbiBNQUNIX1JFQUxURUtfUlRMIHx8IENPTVBJTEVfVEVTVFxcbmRyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnLTExMDYtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9pcnFjaGlwL01ha2VmaWxlPTEzMD1vYmotJChDT05GSUdfU0wyOENQTERfSU5UQylcXHRcXHQrPSBpcnEtc2wyOGNwbGQub1xcbmRyaXZlcnMvaXJxY2hpcC9NYWtlZmlsZToxMzE6b2JqLSQoQ09ORklHX01BQ0hfUkVBTFRFS19SVEwpXFx0XFx0Kz0gaXJxLXJlYWx0ZWstcnRsLm9cXG5kcml2ZXJzL2lycWNoaXAvTWFrZWZpbGUtMTMyLW9iai0kKENPTkZJR19XUENNNDUwX0FJQylcXHRcXHQrPSBpcnEtd3BjbTQ1MC1haWMub1xcbi0tXFxuZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnPTY0PWNvbmZpZyBNVERfTkFORF9FQ0NfUkVBTFRFS1xcbi0tXFxuZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnLTY2LSAgICAgICAgZGVwZW5kcyBvbiBIQVNfSU9NRU0gXFx1MDAyNlxcdTAwMjYgSEFTX0RNQVxcbmRyaXZlcnMvbXRkL25hbmQvS2NvbmZpZzo2NzogICAgICAgIGRlcGVuZHMgb24gTUFDSF9SRUFMVEVLX1JUTCB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL210ZC9uYW5kL0tjb25maWctNjgtICAgICAgICBzZWxlY3QgTVREX05BTkRfRUNDXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc9MTc0PWNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzUtXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgUlRMODN4eC9SVEw5M3h4IE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE3NjpcXHRkZXBlbmRzIG9uIE1BQ0hfUkVBTFRFS19SVEwgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3Ny1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL3NwaS9LY29uZmlnPTkxNj1jb25maWcgU1BJX1JFQUxURUtfU05BTkRcXG5kcml2ZXJzL3NwaS9LY29uZmlnLTkxNy1cXHR0cmlzdGF0ZSBcXFwiUmVhbHRlayBTUEktTkFORCBGbGFzaCBDb250cm9sbGVyXFxcIlxcbmRyaXZlcnMvc3BpL0tjb25maWc6OTE4OlxcdGRlcGVuZHMgb24gTUFDSF9SRUFMVEVLX1JUTCB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL3NwaS9LY29uZmlnLTkxOS1cXHRzZWxlY3QgUkVHTUFQXFxuLS1cXG5kcml2ZXJzL3NwaS9NYWtlZmlsZT0xMzE9b2JqLSQoQ09ORklHX1NQSV9SQjRYWClcXHRcXHRcXHQrPSBzcGktcmI0eHgub1xcbmRyaXZlcnMvc3BpL01ha2VmaWxlOjEzMjpvYmotJChDT05GSUdfTUFDSF9SRUFMVEVLX1JUTClcXHRcXHQrPSBzcGktcmVhbHRlay1ydGwub1xcbmRyaXZlcnMvc3BpL01ha2VmaWxlLTEzMy1vYmotJChDT05GSUdfU1BJX1JFQUxURUtfU05BTkQpXFx0XFx0Kz0gc3BpLXJlYWx0ZWstcnRsLXNuYW5kLm9cXG4tLVxcbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZz0xMTEzPWNvbmZpZyBSRUFMVEVLX09UVE9fV0RUXFxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnLTExMTQtXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgT3R0byBNSVBTIHdhdGNoZG9nIHN1cHBvcnRcXFwiXFxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnOjExMTU6XFx0ZGVwZW5kcyBvbiBNQUNIX1JFQUxURUtfUlRMIHx8IENPTVBJTEVfVEVTVFxcbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZy0xMTE2LVxcdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xcbi0tXFxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnLTExMTgtXFx0c2VsZWN0IFJFR01BUF9NTUlPXFxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnOjExMTk6XFx0ZGVmYXVsdCBNQUNIX1JFQUxURUtfUlRMXFxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnLTExMjAtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoyMjo0NC40Njc3NjYyNDlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTUzNDg5MDk3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgUmVhbHRlayBSVEw5MzAwIE1ESU8gRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIGRlYWxpbmcgd2l0aCBhIHZlcnkgc3BlY2lmaWMsIGFuZCBsaWtlbHkgaW5hY2Nlc3NpYmxlLCBwaWVjZSBvZiBoYXJkd2FyZS4gSSBzZWUgdGhhdCBgQ09ORklHX01ESU9fUkVBTFRFS19SVEw5MzAwYCBoaW5nZXMgb24gZWl0aGVyIHRoZSBgTUFDSF9SRUFMVEVLX1JUTGAgY29uZmlndXJhdGlvbiAod2hpY2ggaXMgTUlQUy1zcGVjaWZpYykgb3IgYENPTVBJTEVfVEVTVGAuIE9uIG15IGFtZDY0IGFyY2hpdGVjdHVyZSwgaXQncyBvbmx5IGFjY2Vzc2libGUgdGhyb3VnaCBgQ09NUElMRV9URVNUYC4gRXZlbiBpZiBjb21waWxlZCwgdGhlIGRyaXZlciBpdHNlbGYgaXMgZGVzaWduZWQgZm9yIGEgUmVhbHRlayBTb0MtaW50ZWdyYXRlZCBNRElPIGJ1cyBjb250cm9sbGVyLCBzb21ldGhpbmcgbGlrZSBgcmVhbHRlayxydGw4MzgwLW1kaW9gLCBgcmVhbHRlayxydGw4MzkxLW1kaW9gLCBvciBgcmVhbHRlayxydGw5MzAxLW1kaW9gLiBUaGlzIG1lYW5zIGl0IG5lZWRzIGRldmljZSB0cmVlIG5vZGVzIHRoYXQgYXJlIGluc3RhbnRpYXRlZCBieSBhIFJlYWx0ZWsgT3R0byBNSVBTIHBsYXRmb3JtIGFuZCByZXF1aXJlcyBhIHBhcmVudCBzeXNjb24gbm9kZS5cblxuVGhlIGtpY2tlcj8gVGhlcmUncyBubyBzdGFuZGFyZCBlbXVsYXRpb24gb2YgdGhpcyBoYXJkd2FyZSBpbiB0eXBpY2FsIGFtZDY0IGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBUaGlzIGlzIGEgY3J1Y2lhbCBkZXRhaWwuIFRoaXMgZHJpdmVyIHNpbXBseSB3b24ndCBiZSByZWFjaGFibGUuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGlzIGJ5IGV4YW1pbmluZyB0aGUgZmlsZXMgY2hhbmdlZDpcblxuMS4gIGBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxgIC0gVGhpcyBpcyBkb2N1bWVudGF0aW9uL2RldmljZSB0cmVlIHNjaGVtYSwgd2hpY2ggaXNuJ3QgZXhlY3V0YWJsZSBjb2RlLlxuMi4gIGBkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNgIC0gVGhpcyBpcyB0aGUgZHJpdmVyIGl0c2VsZiwgYnV0IGZvciB0aGUgUmVhbHRlayBSVEw4Mzh4L1JUTDgzOXgvUlRMOTN4eCBNRElPIHBsYXRmb3JtIGRldmljZSwgd2hpY2ggaXMgTUlQUyBhcmNoaXRlY3R1cmUgU29DLlxuXG5TbyB0aGUgZW50aXJlIHBhdGNoIGlzIGNlbnRlcmVkIGFyb3VuZDpcblxuKiAgIEFuIHVucmVhY2hhYmxlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBTb0MgcGxhdGZvcm0gZHJpdmVyIChNSVBTIFJlYWx0ZWspLlxuKiAgIE5vbi1leGVjdXRhYmxlIGNoYW5nZXMsIGp1c3QgdGhlIERUIGJpbmRpbmdzLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhIHRvIGJlIGFic29sdXRlbHkgc3VyZTogYW1kNjQgdGFyZ2V0LCBub3Qgd29ydGggZnV6emluZywgbm8gZm9jdXMgc3ltYm9scywgbm8gZW5hYmxlIGNvbmZpZ3VyYXRpb25zLi4uIGV2ZXJ5dGhpbmcgYWxpZ25zLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIGRldmljZSB0cmVlIGJpbmRpbmdzIGFuZCBhIHBsYXRmb3JtIE1ESU8gY29udHJvbGxlciBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciBSZWFsdGVrIFJUTDgzeHgvUlRMOTN4eCBTb0NzIG9uIE1JUFMsIHdoaWNoIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiB0aGUgYW1kNjQgYXJjaGl0ZWN0dXJlLCBhbmQgdGhhdCBpcyBub3QgZW11bGF0ZWQuXG5cbkFscmlnaHQsIEkgYW0gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ2NywiT3V0cHV0VG9rZW5zIjoxMDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MjI6NTAuMDAyNjU5NDU1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgRGV2aWNlVHJlZSBiaW5kaW5ncyBhbmQgdGhlIG1kaW8tcmVhbHRlay1ydGw5MzAwIGRyaXZlciBmb3IgUmVhbHRlayBSVEw4M3h4L1JUTDkzeHggRXRoZXJuZXQgc3dpdGNoIFNvQ3MgKE1JUFMgcGxhdGZvcm0pLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHg4Nl82NC9hbWQ2NCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERldmljZVRyZWUgYmluZGluZ3MgYW5kIHRoZSBtZGlvLXJlYWx0ZWstcnRsOTMwMCBkcml2ZXIgZm9yIFJlYWx0ZWsgUlRMODN4eC9SVEw5M3h4IEV0aGVybmV0IHN3aXRjaCBTb0NzIChNSVBTIHBsYXRmb3JtKS4gVGhpcyBoYXJkd2FyZSBpcyBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCB4ODZfNjQvYW1kNjQgUUVNVSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoyMjo1MC4wMDI2OTA0OTVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow4gcvk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 16:43:59 +0000 UTC FinishedAt: 2026-09-09 17:22:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgRGV2aWNlVHJlZSBiaW5kaW5ncyBhbmQgdGhlIG1kaW8tcmVhbHRlay1ydGw5MzAwIGRyaXZlciBmb3IgUmVhbHRlayBSVEw4M3h4L1JUTDkzeHggRXRoZXJuZXQgc3dpdGNoIFNvQ3MgKE1JUFMgcGxhdGZvcm0pLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHg4Nl82NC9hbWQ2NCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlMGU3ZDlkMmJhMWEwMjE5NGVjYzU2ZmFiODg3MjA0ZDUyYzZmNDljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxNzoyMjowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcbmluZGV4IDY3ZTBiMjNhODQ3MGUuLjg4NTAyZDAxN2VlZGIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxuQEAgLTU2LDYgJiM0Mzs1Niw5IEBAIHBhdHRlcm5Qcm9wZXJ0aWVzOlxuICAgICAgIHJlZzpcbiAgICAgICAgIG1heEl0ZW1zOiAxXG4gXG4mIzQzOyAgICAgIGNsb2NrLWZyZXF1ZW5jeTpcbiYjNDM7ICAgICAgICBkZWZhdWx0OiAyNTAwMDAwXG4mIzQzO1xuICAgICByZXF1aXJlZDpcbiAgICAgICAtIHJlZ1xuIFxuQEAgLTcxLDYgJiM0Mzs3NCw0MyBAQCByZXF1aXJlZDpcbiAgIC0gY29tcGF0aWJsZVxuICAgLSByZWdcbiBcbiYjNDM7YWxsT2Y6XG4mIzQzOyAgLSBpZjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgICAgY29udGFpbnM6XG4mIzQzOyAgICAgICAgICAgIGVudW06XG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODAtbWRpb1xuJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgxLW1kaW9cbiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4Mi1tZGlvXG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICBwYXR0ZXJuUHJvcGVydGllczpcbiYjNDM7ICAgICAgICAmIzM5O15tZGlvLWJ1c0BbMC0zXSQmIzM5OzpcbiYjNDM7ICAgICAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgICAgIGNsb2NrLWZyZXF1ZW5jeTpcbiYjNDM7ICAgICAgICAgICAgICBlbnVtOiBbMjUwMDAwMCwgMTAwMDAwMDBdXG4mIzQzOyAgLSBpZjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgICAgY29udGFpbnM6XG4mIzQzOyAgICAgICAgICAgIGVudW06XG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTEtbWRpb1xuJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkyLW1kaW9cbiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5My1tZGlvXG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDEtbWRpb1xuJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAyYi1tZGlvXG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDJjLW1kaW9cbiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMy1tZGlvXG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTEtbWRpb1xuJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzEyLW1kaW9cbiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMy1tZGlvXG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICBwYXR0ZXJuUHJvcGVydGllczpcbiYjNDM7ICAgICAgICAmIzM5O15tZGlvLWJ1c0BbMC0zXSQmIzM5OzpcbiYjNDM7ICAgICAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgICAgIGNsb2NrLWZyZXF1ZW5jeTpcbiYjNDM7ICAgICAgICAgICAgICBlbnVtOiBbMTI1MDAwMCwgMjUwMDAwMCwgNTAwMDAwMF1cbiYjNDM7XG4gdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuIFxuIGV4YW1wbGVzOlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuaW5kZXggMTFkMDc4ZWY5NDFjZC4uZDQwZmRkMGVkMmYwZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXG5AQCAtMTMwLDYgJiM0MzsxMzAsNyBAQFxuICNkZWZpbmUgUlRMODM4MF9OVU1fUEFHRVNcdFx0XHQ0MDk2XG4gI2RlZmluZSBSVEw4MzgwX05VTV9QT1JUU1x0XHRcdDI4XG4gI2RlZmluZSBSVEw4MzgwX1NNSV9HTEJfQ1RSTFx0XHRcdDB4YTEwMFxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9TTUlfRlJFUV9TRUxcdFx0XHRCSVQoMSlcbiAjZGVmaW5lICAgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkVcdFx0QklUKDE1KVxuICNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzBcdFx0MHhhMWI4XG4gI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMVx0XHQweGExYmNcbkBAIC0xNjksMTIgJiM0MzsxNzAsMTUgQEBcbiAjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1dcdFx0MHgwM2U0XG4gI2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfSElHSFx0XHQweDAzZThcbiAjZGVmaW5lIFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMXHRcdDB4MDNmY1xuJiM0MzsjZGVmaW5lIFJUTDgzOTBfU01JX0dMQl9DVFJMXHRcdFx0MHgwM2Y4XG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1NNSV9GUkVRX1NFTFx0XHRcdEdFTk1BU0soNiwgNSlcbiBcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX0JVU0VTXHRcdFx0NFxuICNkZWZpbmUgUlRMOTMwMF9OVU1fUEFHRVNcdFx0XHQ0MDk2XG4gI2RlZmluZSBSVEw5MzAwX05VTV9QT1JUU1x0XHRcdDI4XG4gI2RlZmluZSBSVEw5MzAwX1NNSV9HTEJfQ1RSTFx0XHRcdDB4Y2EwMFxuICNkZWZpbmUgICBSVEw5MzAwX0dMQl9DVFJMX0lOVEZfU0VMKGludGYpXHRCSVQoMTYgJiM0MzsgKGludGYpKVxuJiM0MzsjZGVmaW5lICAgUlRMOTMwMF9TTUlfRlJFUV9TRUwoaW50ZilcdFx0R0VOTUFTSygoaW50ZikgKiAyICYjNDM7IDksIChpbnRmKSAqIDIgJiM0MzsgOClcbiAjZGVmaW5lIFJUTDkzMDBfU01JX1BPUlQwXzE1X1BPTExJTkdfU0VMXHQweGNhMDhcbiAjZGVmaW5lIFJUTDkzMDBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wXHRcdDB4Y2I3MFxuICNkZWZpbmUgUlRMOTMwMF9TTUlfQUNDRVNTX1BIWV9DVFJMXzFcdFx0MHhjYjc0XG5AQCAtMTk2LDYgJiM0MzsyMDAsOCBAQFxuICNkZWZpbmUgUlRMOTMxMF9OVU1fQlVTRVNcdFx0XHQ0XG4gI2RlZmluZSBSVEw5MzEwX05VTV9QQUdFU1x0XHRcdDgxOTJcbiAjZGVmaW5lIFJUTDkzMTBfTlVNX1BPUlRTXHRcdFx0NTZcbiYjNDM7I2RlZmluZSBSVEw5MzEwX1NNSV9HTEJfQ1RSTDBcdFx0XHQweDBjYzBcbiYjNDM7I2RlZmluZSAgIFJUTDkzMTBfU01JX0ZSRVFfU0VMKGludGYpXHRcdEdFTk1BU0soKGludGYpICogMiAmIzQzOyA1LCAoaW50ZikgKiAyICYjNDM7IDQpXG4gI2RlZmluZSBSVEw5MzEwX1NNSV9HTEJfQ1RSTDFcdFx0XHQweDBjYmNcbiAjZGVmaW5lICAgUlRMOTMxMF9TTUlfR0xCX0ZNVF9TRUxfQzQ1KGludGYpXHRCSVQoKGludGYpICogMiAmIzQzOyAxKVxuICNkZWZpbmUgUlRMOTMxMF9TTUlfSU5EUlRfQUNDRVNTX0NUUkxfMFx0XHQweDBjMDBcbkBAIC0yNjksNiAmIzQzOzI3NSw3IEBAIHN0cnVjdCBvdHRvX2VtZGlvX2luZm8ge1xuIFx0dTggbnVtX3BvcnRzO1xuIFx0dTE2IG51bV9wYWdlcztcbiBcdHUzMiBwb2xsX2N0cmw7XG4mIzQzO1x0aW50ICgqc2V0X2J1c19mcmVxdWVuY3kpKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBmcmVxKTtcbiBcdGludCAoKnNldHVwX2NvbnRyb2xsZXIpKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpO1xuIFx0aW50ICgqcmVhZF9jMjIpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTtcbiBcdGludCAoKnJlYWRfYzQ1KShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTtcbkBAIC03NDAsNiAmIzQzOzc0NywxNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0dXBfdG9wb2xvZ3koc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfc2V0X2J1c19mcmVxdWVuY3koc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGZyZXEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuJiM0MztcbiYjNDM7XHRpZiAoZnJlcSAhPSAyNTAwMDAwIFx1MDAyNlx1MDAyNiBmcmVxICE9IDEwMDAwMDAwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZWdtYXBfYXNzaWduX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIFJUTDgzODBfU01JX0dMQl9DVFJMLFxuJiM0MztcdFx0XHRcdCAgUlRMODM4MF9TTUlfRlJFUV9TRUwsIGZyZXEgPT0gMTAwMDAwMDApO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiB7XG4gXHQvKlxuQEAgLTc0OSw2ICYjNDM7NzY3LDU3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiBcdHJldHVybiByZWdtYXBfc2V0X2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIFJUTDgzODBfU01JX0dMQl9DVFJMLCBSVEw4MzgwX1NNSV9QSFlfUEFUQ0hfRE9ORSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9zZXRfYnVzX2ZyZXF1ZW5jeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgZnJlcSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4mIzQzO1x0Ym9vbCBmcmVxX3NldCA9IGZhbHNlO1xuJiM0MztcdHUzMiBjaGlsZF9mcmVxLCB2YWw7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSVEw4Mzl4IHVzZXMgYSBzaW5nbGUgZnJlcXVlbmN5IGZvciB0aGUgdHdvIE1ESU8gYnVzZXMuIER1cmluZyByZWdpc3RyYXRpb24gb2YgZmlyc3RcbiYjNDM7XHQgKiBidXMgcGljayBhbiBleHBsaWNpdGx5IHJlcXVlc3RlZCBmcmVxdWVuY3kgZnJvbSBhbnkgZW5hYmxlZCBidXMuIFVzZSB0aGUgZGVmYXVsdCBvbmx5XG4mIzQzO1x0ICogaWYgbm8gZnJlcXVlbmN5IGlzIHNldCBhdCBhbGwuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlYnVzWzBdIHx8IHByaXYtXHUwMDNlYnVzWzFdKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGZyZXEgPSAyNTAwMDAwO1xuJiM0MztcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlX3Njb3BlZChidXMtXHUwMDNlcGFyZW50LVx1MDAzZW9mX25vZGUsIGNoaWxkKSB7XG4mIzQzO1x0XHRpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIoY2hpbGQsIFwmIzM0O2Nsb2NrLWZyZXF1ZW5jeVwmIzM0OywgXHUwMDI2Y2hpbGRfZnJlcSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGlmIChmcmVxX3NldCBcdTAwMjZcdTAwMjYgZnJlcSAhPSBjaGlsZF9mcmVxKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRmcmVxID0gY2hpbGRfZnJlcTtcbiYjNDM7XHRcdGZyZXFfc2V0ID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChmcmVxICE9IDEyNTAwMDAgXHUwMDI2XHUwMDI2IGZyZXEgIT0gMjUwMDAwMCBcdTAwMjZcdTAwMjYgZnJlcSAhPSA1MDAwMDAwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHZhbCA9IEZJRUxEX1BSRVAoUlRMODM5MF9TTUlfRlJFUV9TRUwsIGZyZXEgLyAyNTAwMDAwKTtcbiYjNDM7XHRlcnIgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIFJUTDgzOTBfU01JX0dMQl9DVFJMLCBSVEw4MzkwX1NNSV9GUkVRX1NFTCwgdmFsKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfc2V0X2J1c19mcmVxdWVuY3koc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGZyZXEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NoYW4gKmNoYW4gPSBidXMtXHUwMDNlcHJpdjtcbiYjNDM7XHR1MzIgbWFzaywgdmFsO1xuJiM0MztcbiYjNDM7XHRpZiAoZnJlcSAhPSAxMjUwMDAwIFx1MDAyNlx1MDAyNiBmcmVxICE9IDI1MDAwMDAgXHUwMDI2XHUwMDI2IGZyZXEgIT0gNTAwMDAwMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRtYXNrID0gUlRMOTMwMF9TTUlfRlJFUV9TRUwoY2hhbi1cdTAwM2VtZGlvX2J1cyk7XG4mIzQzO1x0dmFsID0gZmllbGRfcHJlcChtYXNrLCBmcmVxIC8gMjUwMDAwMCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIFJUTDkzMDBfU01JX0dMQl9DVFJMLCBtYXNrLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiB7XG4gXHR1MzIgZ2xiX2N0cmxfbWFzayA9IDAsIGdsYl9jdHJsX3ZhbCA9IDA7XG5AQCAtNzY5LDYgJiM0Mzs4MzgsMjEgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXRfYnVzX2ZyZXF1ZW5jeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgZnJlcSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY2hhbiAqY2hhbiA9IGJ1cy1cdTAwM2Vwcml2O1xuJiM0MztcdHUzMiBtYXNrLCB2YWw7XG4mIzQzO1xuJiM0MztcdGlmIChmcmVxICE9IDEyNTAwMDAgXHUwMDI2XHUwMDI2IGZyZXEgIT0gMjUwMDAwMCBcdTAwMjZcdTAwMjYgZnJlcSAhPSA1MDAwMDAwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdG1hc2sgPSBSVEw5MzEwX1NNSV9GUkVRX1NFTChjaGFuLVx1MDAzZW1kaW9fYnVzKTtcbiYjNDM7XHR2YWwgPSBmaWVsZF9wcmVwKG1hc2ssIGZyZXEgLyAyNTAwMDAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgUlRMOTMxMF9TTUlfR0xCX0NUUkwwLCBtYXNrLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiB7XG4gXHRpbnQgaSwgZXJyO1xuQEAgLTgzMSwxNCAmIzQzOzkxNSwxNCBAQCBzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gfVxuIFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LFxuLVx0XHRcdFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpub2RlKVxuJiM0MztcdFx0XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcbiB7XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuO1xuIFx0c3RydWN0IG1paV9idXMgKmJ1cztcbi1cdHUzMiBtZGlvX2J1cztcbiYjNDM7XHR1MzIgbWRpb19idXMsIGZyZXE7XG4gXHRpbnQgZXJyO1xuIFxuLVx0ZXJyID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsIFwmIzM0O3JlZ1wmIzM0OywgXHUwMDI2bWRpb19idXMpO1xuJiM0MztcdGVyciA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsIFwmIzM0O3JlZ1wmIzM0OywgXHUwMDI2bWRpb19idXMpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsIFwmIzM0O3VuZGVmaW5lZCBzbWkgYnVzIG51bWJlclxcblwmIzM0Oyk7XG4gXG5AQCAtODQ2LDYgJiM0Mzs5MzAsOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdlxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4gXHRcdFx0XHQgICAgIFwmIzM0O2lsbGVnYWwgKGRhbmdsaW5nKSBzbWkgYnVzIG51bWJlciAlZFxcblwmIzM0OywgbWRpb19idXMpO1xuIFxuJiM0MztcdGlmIChwcml2LVx1MDAzZWJ1c1ttZGlvX2J1c10pXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsIFwmIzM0O2R1cGxpY2F0ZWQgc21pIGJ1cyBudW1iZXIgJWRcXG5cJiMzNDssIG1kaW9fYnVzKTtcbiYjNDM7XG4gXHRidXMgPSBkZXZtX21kaW9idXNfYWxsb2Nfc2l6ZShkZXYsIHNpemVvZigqY2hhbikpO1xuIFx0aWYgKCFidXMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTg2NSwxMCAmIzQzOzk1MiwxOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdlxuIFxuIFx0c25wcmludGYoYnVzLVx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFwmIzM0OyVzLSVkXCYjMzQ7LCBkZXZfbmFtZShkZXYpLCBtZGlvX2J1cyk7XG4gXG4tXHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIHRvX29mX25vZGUobm9kZSkpO1xuJiM0MztcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCBcJiMzNDtjbG9jay1mcmVxdWVuY3lcJiMzNDssIFx1MDAyNmZyZXEpKVxuJiM0MztcdFx0ZnJlcSA9IDI1MDAwMDA7XG4mIzQzO1x0ZXJyID0gcHJpdi1cdTAwM2VpbmZvLVx1MDAzZXNldF9idXNfZnJlcXVlbmN5KGJ1cywgZnJlcSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcJiMzNDtjYW5ub3Qgc2V0IGZyZXF1ZW5jeSAldSBmb3IgTURJTyBidXMgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBmcmVxLCBtZGlvX2J1cyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbm9kZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCYjMzQ7Y2Fubm90IHJlZ2lzdGVyIE1ESU8gYnVzXFxuXCYjMzQ7KTtcbiBcbiYjNDM7XHRwcml2LVx1MDAzZWJ1c1ttZGlvX2J1c10gPSBidXM7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEwMjcsNyAmIzQzOzExMjMsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCYjMzQ7ZmFpbGVkIHRvIHNldHVwIE1ESU8gYnVzIGNvbnRyb2xsZXJcXG5cJiMzNDspO1xuIFx0fVxuIFxuLVx0ZGV2aWNlX2Zvcl9lYWNoX2NoaWxkX25vZGVfc2NvcGVkKGRldiwgY2hpbGQpIHtcbiYjNDM7XHRmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZV9zY29wZWQoZGV2LVx1MDAzZW9mX25vZGUsIGNoaWxkKSB7XG4gXHRcdGVyciA9IG90dG9fZW1kaW9fcHJvYmVfb25lKGRldiwgcHJpdiwgY2hpbGQpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG5AQCAtMTA1MSw2ICYjNDM7MTE0Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM4MF9pbmZvID0ge1xuIFx0Lm51bV9wYWdlcyA9IFJUTDgzODBfTlVNX1BBR0VTLFxuIFx0Lm51bV9wb3J0cyA9IFJUTDgzODBfTlVNX1BPUlRTLFxuIFx0LnBvbGxfY3RybCA9IFJUTDgzODBfU01JX1BPTExfQ1RSTCxcbiYjNDM7XHQuc2V0X2J1c19mcmVxdWVuY3kgPSBvdHRvX2VtZGlvXzgzODBfc2V0X2J1c19mcmVxdWVuY3ksXG4gXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyLFxuIFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzIyLFxuIFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1LFxuQEAgLTEwNzUsNiAmIzQzOzExNzIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzOTBfaW5mbyA9IHtcbiBcdC5udW1fcGFnZXMgPSBSVEw4MzkwX05VTV9QQUdFUyxcbiBcdC5udW1fcG9ydHMgPSBSVEw4MzkwX05VTV9QT1JUUyxcbiBcdC5wb2xsX2N0cmwgPSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCxcbiYjNDM7XHQuc2V0X2J1c19mcmVxdWVuY3kgPSBvdHRvX2VtZGlvXzgzOTBfc2V0X2J1c19mcmVxdWVuY3ksXG4gXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIsXG4gXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUsXG4gXHQud3JpdGVfYzIyID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMixcbkBAIC0xMDk3LDYgJiM0MzsxMTk1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzAwX2luZm8gPSB7XG4gXHQubnVtX3BvcnRzID0gUlRMOTMwMF9OVU1fUE9SVFMsXG4gXHQubnVtX3BhZ2VzID0gUlRMOTMwMF9OVU1fUEFHRVMsXG4gXHQucG9sbF9jdHJsID0gUlRMOTMwMF9TTUlfUE9MTF9DVFJMLFxuJiM0MztcdC5zZXRfYnVzX2ZyZXF1ZW5jeSA9IG90dG9fZW1kaW9fOTMwMF9zZXRfYnVzX2ZyZXF1ZW5jeSxcbiBcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIsXG4gXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIsXG4gXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jNDUsXG5AQCAtMTEyMyw2ICYjNDM7MTIyMiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0ge1xuIFx0Lm51bV9wYWdlcyA9IFJUTDkzMTBfTlVNX1BBR0VTLFxuIFx0Lm51bV9wb3J0cyA9IFJUTDkzMTBfTlVNX1BPUlRTLFxuIFx0LnBvbGxfY3RybCA9IFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMLFxuJiM0MztcdC5zZXRfYnVzX2ZyZXF1ZW5jeSA9IG90dG9fZW1kaW9fOTMxMF9zZXRfYnVzX2ZyZXF1ZW5jeSxcbiBcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIsXG4gXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIsXG4gXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jNDUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MjI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgRGV2aWNlVHJlZSBiaW5kaW5ncyBhbmQgdGhlIG1kaW8tcmVhbHRlay1ydGw5MzAwIGRyaXZlciBmb3IgUmVhbHRlayBSVEw4M3h4L1JUTDkzeHggRXRoZXJuZXQgc3dpdGNoIFNvQ3MgKE1JUFMgcGxhdGZvcm0pLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHg4Nl82NC9hbWQ2NCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlMGU3ZDlkMmJhMWEwMjE5NGVjYzU2ZmFiODg3MjA0ZDUyYzZmNDljCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxNzoyMjowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbAppbmRleCA2N2UwYjIzYTg0NzBlLi44ODUwMmQwMTdlZWRiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sCkBAIC01Niw2ICYjNDM7NTYsOSBAQCBwYXR0ZXJuUHJvcGVydGllczoKICAgICAgIHJlZzoKICAgICAgICAgbWF4SXRlbXM6IDEKIAomIzQzOyAgICAgIGNsb2NrLWZyZXF1ZW5jeToKJiM0MzsgICAgICAgIGRlZmF1bHQ6IDI1MDAwMDAKJiM0MzsKICAgICByZXF1aXJlZDoKICAgICAgIC0gcmVnCiAKQEAgLTcxLDYgJiM0Mzs3NCw0MyBAQCByZXF1aXJlZDoKICAgLSBjb21wYXRpYmxlCiAgIC0gcmVnCiAKJiM0MzthbGxPZjoKJiM0MzsgIC0gaWY6CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIGNvbXBhdGlibGU6CiYjNDM7ICAgICAgICAgIGNvbnRhaW5zOgomIzQzOyAgICAgICAgICAgIGVudW06CiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MC1tZGlvCiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MS1tZGlvCiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4Mi1tZGlvCiYjNDM7ICAgIHRoZW46CiYjNDM7ICAgICAgcGF0dGVyblByb3BlcnRpZXM6CiYjNDM7ICAgICAgICAmIzM5O15tZGlvLWJ1c0BbMC0zXSQmIzM5OzoKJiM0MzsgICAgICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgICAgICBjbG9jay1mcmVxdWVuY3k6CiYjNDM7ICAgICAgICAgICAgICBlbnVtOiBbMjUwMDAwMCwgMTAwMDAwMDBdCiYjNDM7ICAtIGlmOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgICBjb250YWluczoKJiM0MzsgICAgICAgICAgICBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTEtbWRpbwomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTItbWRpbwomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTMtbWRpbwomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDEtbWRpbwomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDJiLW1kaW8KJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAyYy1tZGlvCiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMy1tZGlvCiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMS1tZGlvCiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMi1tZGlvCiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMy1tZGlvCiYjNDM7ICAgIHRoZW46CiYjNDM7ICAgICAgcGF0dGVyblByb3BlcnRpZXM6CiYjNDM7ICAgICAgICAmIzM5O15tZGlvLWJ1c0BbMC0zXSQmIzM5OzoKJiM0MzsgICAgICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgICAgICBjbG9jay1mcmVxdWVuY3k6CiYjNDM7ICAgICAgICAgICAgICBlbnVtOiBbMTI1MDAwMCwgMjUwMDAwMCwgNTAwMDAwMF0KJiM0MzsKIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2UKIAogZXhhbXBsZXM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMKaW5kZXggMTFkMDc4ZWY5NDFjZC4uZDQwZmRkMGVkMmYwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYwpAQCAtMTMwLDYgJiM0MzsxMzAsNyBAQAogI2RlZmluZSBSVEw4MzgwX05VTV9QQUdFUwkJCTQwOTYKICNkZWZpbmUgUlRMODM4MF9OVU1fUE9SVFMJCQkyOAogI2RlZmluZSBSVEw4MzgwX1NNSV9HTEJfQ1RSTAkJCTB4YTEwMAomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1NNSV9GUkVRX1NFTAkJCUJJVCgxKQogI2RlZmluZSAgIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FCQlCSVQoMTUpCiAjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wCQkweGExYjgKICNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzEJCTB4YTFiYwpAQCAtMTY5LDEyICYjNDM7MTcwLDE1IEBACiAjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1cJCTB4MDNlNAogI2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfSElHSAkJMHgwM2U4CiAjZGVmaW5lIFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMCQkweDAzZmMKJiM0MzsjZGVmaW5lIFJUTDgzOTBfU01JX0dMQl9DVFJMCQkJMHgwM2Y4CiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfU01JX0ZSRVFfU0VMCQkJR0VOTUFTSyg2LCA1KQogCiAjZGVmaW5lIFJUTDkzMDBfTlVNX0JVU0VTCQkJNAogI2RlZmluZSBSVEw5MzAwX05VTV9QQUdFUwkJCTQwOTYKICNkZWZpbmUgUlRMOTMwMF9OVU1fUE9SVFMJCQkyOAogI2RlZmluZSBSVEw5MzAwX1NNSV9HTEJfQ1RSTAkJCTB4Y2EwMAogI2RlZmluZSAgIFJUTDkzMDBfR0xCX0NUUkxfSU5URl9TRUwoaW50ZikJQklUKDE2ICYjNDM7IChpbnRmKSkKJiM0MzsjZGVmaW5lICAgUlRMOTMwMF9TTUlfRlJFUV9TRUwoaW50ZikJCUdFTk1BU0soKGludGYpICogMiAmIzQzOyA5LCAoaW50ZikgKiAyICYjNDM7IDgpCiAjZGVmaW5lIFJUTDkzMDBfU01JX1BPUlQwXzE1X1BPTExJTkdfU0VMCTB4Y2EwOAogI2RlZmluZSBSVEw5MzAwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMAkJMHhjYjcwCiAjZGVmaW5lIFJUTDkzMDBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xCQkweGNiNzQKQEAgLTE5Niw2ICYjNDM7MjAwLDggQEAKICNkZWZpbmUgUlRMOTMxMF9OVU1fQlVTRVMJCQk0CiAjZGVmaW5lIFJUTDkzMTBfTlVNX1BBR0VTCQkJODE5MgogI2RlZmluZSBSVEw5MzEwX05VTV9QT1JUUwkJCTU2CiYjNDM7I2RlZmluZSBSVEw5MzEwX1NNSV9HTEJfQ1RSTDAJCQkweDBjYzAKJiM0MzsjZGVmaW5lICAgUlRMOTMxMF9TTUlfRlJFUV9TRUwoaW50ZikJCUdFTk1BU0soKGludGYpICogMiAmIzQzOyA1LCAoaW50ZikgKiAyICYjNDM7IDQpCiAjZGVmaW5lIFJUTDkzMTBfU01JX0dMQl9DVFJMMQkJCTB4MGNiYwogI2RlZmluZSAgIFJUTDkzMTBfU01JX0dMQl9GTVRfU0VMX0M0NShpbnRmKQlCSVQoKGludGYpICogMiAmIzQzOyAxKQogI2RlZmluZSBSVEw5MzEwX1NNSV9JTkRSVF9BQ0NFU1NfQ1RSTF8wCQkweDBjMDAKQEAgLTI2OSw2ICYjNDM7Mjc1LDcgQEAgc3RydWN0IG90dG9fZW1kaW9faW5mbyB7CiAJdTggbnVtX3BvcnRzOwogCXUxNiBudW1fcGFnZXM7CiAJdTMyIHBvbGxfY3RybDsKJiM0MzsJaW50ICgqc2V0X2J1c19mcmVxdWVuY3kpKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBmcmVxKTsKIAlpbnQgKCpzZXR1cF9jb250cm9sbGVyKShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KTsKIAlpbnQgKCpyZWFkX2MyMikoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpOwogCWludCAoKnJlYWRfYzQ1KShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTsKQEAgLTc0MCw2ICYjNDM7NzQ3LDE3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19zZXR1cF90b3BvbG9neShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfc2V0X2J1c19mcmVxdWVuY3koc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGZyZXEpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpOwomIzQzOwomIzQzOwlpZiAoZnJlcSAhPSAyNTAwMDAwICZhbXA7JmFtcDsgZnJlcSAhPSAxMDAwMDAwMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gcmVnbWFwX2Fzc2lnbl9iaXRzKHByaXYtJmd0O3JlZ21hcCwgUlRMODM4MF9TTUlfR0xCX0NUUkwsCiYjNDM7CQkJCSAgUlRMODM4MF9TTUlfRlJFUV9TRUwsIGZyZXEgPT0gMTAwMDAwMDApOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdikKIHsKIAkvKgpAQCAtNzQ5LDYgJiM0Mzs3NjcsNTcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KQogCXJldHVybiByZWdtYXBfc2V0X2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBSVEw4MzgwX1NNSV9HTEJfQ1RSTCwgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkUpOwogfQogCiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfc2V0X2J1c19mcmVxdWVuY3koc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGZyZXEpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpOwomIzQzOwlib29sIGZyZXFfc2V0ID0gZmFsc2U7CiYjNDM7CXUzMiBjaGlsZF9mcmVxLCB2YWw7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFJUTDgzOXggdXNlcyBhIHNpbmdsZSBmcmVxdWVuY3kgZm9yIHRoZSB0d28gTURJTyBidXNlcy4gRHVyaW5nIHJlZ2lzdHJhdGlvbiBvZiBmaXJzdAomIzQzOwkgKiBidXMgcGljayBhbiBleHBsaWNpdGx5IHJlcXVlc3RlZCBmcmVxdWVuY3kgZnJvbSBhbnkgZW5hYmxlZCBidXMuIFVzZSB0aGUgZGVmYXVsdCBvbmx5CiYjNDM7CSAqIGlmIG5vIGZyZXF1ZW5jeSBpcyBzZXQgYXQgYWxsLgomIzQzOwkgKi8KJiM0MzsJaWYgKHByaXYtJmd0O2J1c1swXSB8fCBwcml2LSZndDtidXNbMV0pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZnJlcSA9IDI1MDAwMDA7CiYjNDM7CWZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlX3Njb3BlZChidXMtJmd0O3BhcmVudC0mZ3Q7b2Zfbm9kZSwgY2hpbGQpIHsKJiM0MzsJCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihjaGlsZCwgJiMzNDtjbG9jay1mcmVxdWVuY3kmIzM0OywgJmFtcDtjaGlsZF9mcmVxKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWlmIChmcmVxX3NldCAmYW1wOyZhbXA7IGZyZXEgIT0gY2hpbGRfZnJlcSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCWZyZXEgPSBjaGlsZF9mcmVxOwomIzQzOwkJZnJlcV9zZXQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChmcmVxICE9IDEyNTAwMDAgJmFtcDsmYW1wOyBmcmVxICE9IDI1MDAwMDAgJmFtcDsmYW1wOyBmcmVxICE9IDUwMDAwMDApCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJdmFsID0gRklFTERfUFJFUChSVEw4MzkwX1NNSV9GUkVRX1NFTCwgZnJlcSAvIDI1MDAwMDApOwomIzQzOwllcnIgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBSVEw4MzkwX1NNSV9HTEJfQ1RSTCwgUlRMODM5MF9TTUlfRlJFUV9TRUwsIHZhbCk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldF9idXNfZnJlcXVlbmN5KHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBmcmVxKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTsKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY2hhbiAqY2hhbiA9IGJ1cy0mZ3Q7cHJpdjsKJiM0MzsJdTMyIG1hc2ssIHZhbDsKJiM0MzsKJiM0MzsJaWYgKGZyZXEgIT0gMTI1MDAwMCAmYW1wOyZhbXA7IGZyZXEgIT0gMjUwMDAwMCAmYW1wOyZhbXA7IGZyZXEgIT0gNTAwMDAwMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwltYXNrID0gUlRMOTMwMF9TTUlfRlJFUV9TRUwoY2hhbi0mZ3Q7bWRpb19idXMpOwomIzQzOwl2YWwgPSBmaWVsZF9wcmVwKG1hc2ssIGZyZXEgLyAyNTAwMDAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhwcml2LSZndDtyZWdtYXAsIFJUTDkzMDBfU01JX0dMQl9DVFJMLCBtYXNrLCB2YWwpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdikKIHsKIAl1MzIgZ2xiX2N0cmxfbWFzayA9IDAsIGdsYl9jdHJsX3ZhbCA9IDA7CkBAIC03NjksNiAmIzQzOzgzOCwyMSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXRfYnVzX2ZyZXF1ZW5jeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgZnJlcSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX2NoYW4gKmNoYW4gPSBidXMtJmd0O3ByaXY7CiYjNDM7CXUzMiBtYXNrLCB2YWw7CiYjNDM7CiYjNDM7CWlmIChmcmVxICE9IDEyNTAwMDAgJmFtcDsmYW1wOyBmcmVxICE9IDI1MDAwMDAgJmFtcDsmYW1wOyBmcmVxICE9IDUwMDAwMDApCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJbWFzayA9IFJUTDkzMTBfU01JX0ZSRVFfU0VMKGNoYW4tJmd0O21kaW9fYnVzKTsKJiM0MzsJdmFsID0gZmllbGRfcHJlcChtYXNrLCBmcmVxIC8gMjUwMDAwMCk7CiYjNDM7CiYjNDM7CXJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBSVEw5MzEwX1NNSV9HTEJfQ1RSTDAsIG1hc2ssIHZhbCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KQogewogCWludCBpLCBlcnI7CkBAIC04MzEsMTQgJiM0Mzs5MTUsMTQgQEAgc3RhdGljIHZvaWQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogfQogCiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiwKLQkJCQkgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKm5vZGUpCiYjNDM7CQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKIHsKIAlzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuOwogCXN0cnVjdCBtaWlfYnVzICpidXM7Ci0JdTMyIG1kaW9fYnVzOwomIzQzOwl1MzIgbWRpb19idXMsIGZyZXE7CiAJaW50IGVycjsKIAotCWVyciA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAmIzM0O3JlZyYjMzQ7LCAmYW1wO21kaW9fYnVzKTsKJiM0MzsJZXJyID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgJiMzNDtyZWcmIzM0OywgJmFtcDttZGlvX2J1cyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsICYjMzQ7dW5kZWZpbmVkIHNtaSBidXMgbnVtYmVyXG4mIzM0Oyk7CiAKQEAgLTg0Niw2ICYjNDM7OTMwLDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYKIAkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAogCQkJCSAgICAgJiMzNDtpbGxlZ2FsIChkYW5nbGluZykgc21pIGJ1cyBudW1iZXIgJWRcbiYjMzQ7LCBtZGlvX2J1cyk7CiAKJiM0MzsJaWYgKHByaXYtJmd0O2J1c1ttZGlvX2J1c10pCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsICYjMzQ7ZHVwbGljYXRlZCBzbWkgYnVzIG51bWJlciAlZFxuJiMzNDssIG1kaW9fYnVzKTsKJiM0MzsKIAlidXMgPSBkZXZtX21kaW9idXNfYWxsb2Nfc2l6ZShkZXYsIHNpemVvZigqY2hhbikpOwogCWlmICghYnVzKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTg2NSwxMCAmIzQzOzk1MiwxOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdgogCiAJc25wcmludGYoYnVzLSZndDtpZCwgTUlJX0JVU19JRF9TSVpFLCAmIzM0OyVzLSVkJiMzNDssIGRldl9uYW1lKGRldiksIG1kaW9fYnVzKTsKIAotCWVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgdG9fb2Zfbm9kZShub2RlKSk7CiYjNDM7CWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAmIzM0O2Nsb2NrLWZyZXF1ZW5jeSYjMzQ7LCAmYW1wO2ZyZXEpKQomIzQzOwkJZnJlcSA9IDI1MDAwMDA7CiYjNDM7CWVyciA9IHByaXYtJmd0O2luZm8tJmd0O3NldF9idXNfZnJlcXVlbmN5KGJ1cywgZnJlcSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgJiMzNDtjYW5ub3Qgc2V0IGZyZXF1ZW5jeSAldSBmb3IgTURJTyBidXMgJWRcbiYjMzQ7LAomIzQzOwkJCQkgICAgIGZyZXEsIG1kaW9fYnVzKTsKJiM0MzsKJiM0MzsJZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBub2RlKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgJiMzNDtjYW5ub3QgcmVnaXN0ZXIgTURJTyBidXNcbiYjMzQ7KTsKIAomIzQzOwlwcml2LSZndDtidXNbbWRpb19idXNdID0gYnVzOwomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC0xMDI3LDcgJiM0MzsxMTIzLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgJiMzNDtmYWlsZWQgdG8gc2V0dXAgTURJTyBidXMgY29udHJvbGxlclxuJiMzNDspOwogCX0KIAotCWRldmljZV9mb3JfZWFjaF9jaGlsZF9ub2RlX3Njb3BlZChkZXYsIGNoaWxkKSB7CiYjNDM7CWZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlX3Njb3BlZChkZXYtJmd0O29mX25vZGUsIGNoaWxkKSB7CiAJCWVyciA9IG90dG9fZW1kaW9fcHJvYmVfb25lKGRldiwgcHJpdiwgY2hpbGQpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKQEAgLTEwNTEsNiAmIzQzOzExNDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzODBfaW5mbyA9IHsKIAkubnVtX3BhZ2VzID0gUlRMODM4MF9OVU1fUEFHRVMsCiAJLm51bV9wb3J0cyA9IFJUTDgzODBfTlVNX1BPUlRTLAogCS5wb2xsX2N0cmwgPSBSVEw4MzgwX1NNSV9QT0xMX0NUUkwsCiYjNDM7CS5zZXRfYnVzX2ZyZXF1ZW5jeSA9IG90dG9fZW1kaW9fODM4MF9zZXRfYnVzX2ZyZXF1ZW5jeSwKIAkuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyLAogCS5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMiwKIAkucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzgzODBfcmVhZF9jNDUsCkBAIC0xMDc1LDYgJiM0MzsxMTcyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzkwX2luZm8gPSB7CiAJLm51bV9wYWdlcyA9IFJUTDgzOTBfTlVNX1BBR0VTLAogCS5udW1fcG9ydHMgPSBSVEw4MzkwX05VTV9QT1JUUywKIAkucG9sbF9jdHJsID0gUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsCiYjNDM7CS5zZXRfYnVzX2ZyZXF1ZW5jeSA9IG90dG9fZW1kaW9fODM5MF9zZXRfYnVzX2ZyZXF1ZW5jeSwKIAkucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIsCiAJLnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1LAogCS53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyLApAQCAtMTA5Nyw2ICYjNDM7MTE5NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0gewogCS5udW1fcG9ydHMgPSBSVEw5MzAwX05VTV9QT1JUUywKIAkubnVtX3BhZ2VzID0gUlRMOTMwMF9OVU1fUEFHRVMsCiAJLnBvbGxfY3RybCA9IFJUTDkzMDBfU01JX1BPTExfQ1RSTCwKJiM0MzsJLnNldF9idXNfZnJlcXVlbmN5ID0gb3R0b19lbWRpb185MzAwX3NldF9idXNfZnJlcXVlbmN5LAogCS5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIsCiAJLnJlYWRfYzIyID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzIyLAogCS5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2M0NSwKQEAgLTExMjMsNiAmIzQzOzEyMjIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHsKIAkubnVtX3BhZ2VzID0gUlRMOTMxMF9OVU1fUEFHRVMsCiAJLm51bV9wb3J0cyA9IFJUTDkzMTBfTlVNX1BPUlRTLAogCS5wb2xsX2N0cmwgPSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCwKJiM0MzsJLnNldF9idXNfZnJlcXVlbmN5ID0gb3R0b19lbWRpb185MzEwX3NldF9idXNfZnJlcXVlbmN5LAogCS5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIsCiAJLnJlYWRfYzIyID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzIyLAogCS5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2M0NSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM2MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvZGUgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkgc2VlIGEgcGF0Y2ggdG91Y2hpbmcgYERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbGAgYW5kIGBkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNgLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZS4gTGV0JiMzOTtzIGRpZyBpbnRvIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBkcml2ZXIgdGhpcyBpcywgaG93IHRoZSBrZXJuZWwgcHJvYmVzIGZvciBpdCwgdGhlIHNwZWNpZmljIGJ1cyBpdCYjMzk7cyB0aWVkIHRvLCBhbmQgd2hldGhlciB0aGlzIGlzIHNvbWV0aGluZyBnZW5lcmljIGVub3VnaCB0byBiZSByZWxldmFudCBpbiBteSBzdGFuZGFyZCB4ODYvYW1kNjQgdmlydHVhbGl6YXRpb24gc2V0dXBzIG9yIGlmIGl0JiMzOTtzIHN0cmljdGx5IFNvQyBvciBoYXJkd2FyZS1zcGVjaWZpYy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdyZXBwZXJgIHRvIHF1aWNrbHkgdHJhY2sgZG93biB0aGUgS2NvbmZpZyBlbnRyaWVzIHJlbGF0ZWQgdG8gYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgY29uZmlndXJhdGlvbnMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZXZhbHVhdGluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvLXJlYWx0ZWstcnRsOTMwMCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZT0yMz1vYmotJChDT05GSUdfTURJT19QSUM2NEhQU0MpXHRcdCYjNDM7PSBtZGlvLXBpYzY0aHBzYy5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19NRElPX1JFQUxURUtfUlRMOTMwMClcdCYjNDM7PSBtZGlvLXJlYWx0ZWstcnRsOTMwMC5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlLTI1LW9iai0kKENPTkZJR19NRElPX1JFR01BUClcdFx0JiM0Mzs9IG1kaW8tcmVnbWFwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTE2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFJlYWx0ZWsgUlRMOTMwMCBNRElPIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgUmVhbHRlayBSVEw5MzAwJiMzOTtzIE1ESU8gY29uZmlndXJhdGlvbiB3aXRoaW4gdGhpcyBrZXJuZWwgY29udGV4dC4gRmlyc3QsIG15IGltbWVkaWF0ZSBhY3Rpb24gaXMgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IEtjb25maWcgZW50cnkuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIGBDT05GSUdfTURJT19SRUFMVEVLX1JUTDkzMDBgLiBUaGlzIHNob3VsZCBsZWFkIG1lIHRvIHRoZSBuZWNlc3NhcnkgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGJ1aWxkIGxvZ2ljIHJlbGF0ZWQgdG8gdGhlIFJUTDkzMDAmIzM5O3MgTURJTyBzdXBwb3J0LiBJIGFudGljaXBhdGUgdGhpcyBLY29uZmlnIG9wdGlvbiB3aWxsIHRpZSBpbnRvIHRoZSBicm9hZGVyIE1ESU8gZnJhbWV3b3JrLCBidXQgdGhlIFJUTDkzMDAgaXMgYSBzcGVjaWFsaXplZCBkZXZpY2UgYW5kIGxpa2VseSBoYXMgc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyByZXF1aXJlbWVudHMuIEdldHRpbmcgdGhlIEtjb25maWcgcmlnaHQgaXMgY3J1Y2lhbCBmb3IgYSBjbGVhbiwgbWFpbnRhaW5hYmxlIGJ1aWxkLCBhbmQgZm9yIGVuc3VyaW5nIHRoZSBjb3JyZWN0IE1ESU8gZHJpdmVyIGlzIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQgYXQgcnVudGltZS4gVGhlIGFpbSBpcyB0byBxdWlja2x5IGFzc2VzcyB0aGUgY3VycmVudCBzdGF0ZSBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBjb25maWd1cmF0aW9uIGdhcHMgb3IgYXJlYXMgdGhhdCBtYXkgbmVlZCByZWZpbmVtZW50LCBlc3BlY2lhbGx5IGlmIHRoaXMgaXMgYSBuZXcgcGxhdGZvcm0gYnJpbmctdXAgb3IgYSBzcGVjaWZpYyBmZWF0dXJlIGFkZGl0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01ESU9fUkVBTFRFS19SVEw5MzAwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9MTY2PWNvbmZpZyBNRElPX0lQUTgwNjRcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTczLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE3NDpjb25maWcgTURJT19SRUFMVEVLX1JUTDkzMDBcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzUtXHR0cmlzdGF0ZSBcJiMzNDtSZWFsdGVrIFJUTDgzeHgvUlRMOTN4eCBNRElPIGludGVyZmFjZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZT0yMz1vYmotJChDT05GSUdfTURJT19QSUM2NEhQU0MpXHRcdCYjNDM7PSBtZGlvLXBpYzY0aHBzYy5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19NRElPX1JFQUxURUtfUlRMOTMwMClcdCYjNDM7PSBtZGlvLXJlYWx0ZWstcnRsOTMwMC5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlLTI1LW9iai0kKENPTkZJR19NRElPX1JFR01BUClcdFx0JiM0Mzs9IG1kaW8tcmVnbWFwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDU2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBNRElPIEtjb25maWcqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBNRElPIGRyaXZlci4gQSBnb29kIHN0YXJ0aW5nIHBvaW50IGlzIGFsd2F5cyB0aGUgS2NvbmZpZyBmaWxlLCBzbyBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBkcml2ZXJzL25ldC9tZGlvL0tjb25maWdgLiBTcGVjaWZpY2FsbHksIGFyb3VuZCBsaW5lIDE3NC4uLiB0aGF0JiMzOTtzIHdoZXJlIEkgdXN1YWxseSBmaW5kIHRoZSBtZWF0IG9mIHRoZSByZWxldmFudCBvcHRpb25zLiBJIHdhbnQgdG8gcXVpY2tseSBncmFzcCB0aGUgZGVwZW5kZW5jaWVzIOKAkyB3aGF0IG90aGVyIGZlYXR1cmVzIG9yIGRyaXZlcnMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSB0aGVzZSBNRElPIG9wdGlvbnMgYmVjb21lIGF2YWlsYWJsZT8gQWxzbywgSSBuZWVkIHRvIHJldmlldyB0aGUgZGVzY3JpcHRpb25zIHRvIHF1aWNrbHkgZ2V0IGEgc2Vuc2Ugb2Ygd2hhdCBlYWNoIG9wdGlvbiBhY3R1YWxseSAqZG9lcyogaW4gcHJhY3RpY2FsIHRlcm1zLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBmb3VuZGF0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTURJTyBjb25maWd1cmF0aW9uIHdvcmtzIHdpdGhpbiB0aGlzIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTcwOlx0XHRoZWxwXG4gMTcxOlx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBNRElPIGludGVyZmFjZSBmb3VuZCBpbiB0aGUgbmV0d29ya1xuIDE3MjpcdFx0ICBpbnRlcmZhY2UgdW5pdHMgb2YgdGhlIElQUTgwNjQgU29DXG4gMTczOlx0XG4gMTc0Olx0Y29uZmlnIE1ESU9fUkVBTFRFS19SVEw5MzAwXG4gMTc1Olx0XHR0cmlzdGF0ZSBcJiMzNDtSZWFsdGVrIFJUTDgzeHgvUlRMOTN4eCBNRElPIGludGVyZmFjZSBzdXBwb3J0XCYjMzQ7XG4gMTc2Olx0XHRkZXBlbmRzIG9uIE1BQ0hfUkVBTFRFS19SVEwgfHwgQ09NUElMRV9URVNUXG4gMTc3Olx0XHRoZWxwXG4gMTc4Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBNRElPIGludGVyZmFjZSBmb3VuZCBpbiB0aGUgUmVhbHRla1xuIDE3OTpcdFx0ICBSVEw4M3h4L1JUTDkzeHggZmFtaWx5IG9mIEV0aGVybmV0IHN3aXRjaGVzIHdpdGggaW50ZWdyYXRlZCBTb0MuXG4gMTgwOlx0XG4gMTgxOlx0Y29uZmlnIE1ESU9fUkVHTUFQXG4gMTgyOlx0XHR0cmlzdGF0ZVxuIDE4MzpcdFx0aGVscFxuIDE4NDpcdFx0ICBUaGlzIGRyaXZlciBhbGxvd3MgdXNpbmcgTURJTyBkZXZpY2VzIHRoYXQgYXJlIG5vdCBzaXR0aW5nIG9uIGFcbiAxODU6XHRcdCAgcmVndWxhciBNRElPIGJ1cywgYnV0IHN0aWxsIGV4cG9zZXMgdGhlIHN0YW5kYXJkIDgwMi4zIHJlZ2lzdGVyXG4gMTg2Olx0XHQgIGxheW91dC4gSXQmIzM5O3MgcmVnbWFwLWJhc2VkIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgb24gaW50ZWdyYXRlZCxcbiAxODc6XHRcdCAgbWVtb3J5LW1hcHBlZCBQSFlzLCBTUEkgUEhZcyBhbmQgc28gb24uIEEgbmV3IHZpcnR1YWwgTURJTyBidXMgaXNcbiAxODg6XHRcdCAgY3JlYXRlZCwgYW5kIGl0cyByZWFkL3dyaXRlIG9wZXJhdGlvbnMgYXJlIG1hcHBlZCB0byB0aGUgdW5kZXJseWluZ1xuIDE4OTpcdFx0ICByZWdtYXAuIFVzZXJzIHdpbGxpbmcgdG8gdXNlIHRoaXMgZHJpdmVyIG11c3QgZXhwbGljaXRseSBzZWxlY3RcbiAxOTA6XHRcdCAgUkVHTUFQLlxuIDE5MTpcdFxuIDE5MjpcdGNvbmZpZyBNRElPX1RIVU5ERVJcbiAxOTM6XHRcdHRyaXN0YXRlIFwmIzM0O1RodW5kZXJYIFNPQ3MgTURJTyBidXNlc1wmIzM0O1xuIDE5NDpcdFx0ZGVwZW5kcyBvbiA2NEJJVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMjUKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFJlYWx0ZWsgUlRMOTMwMCBNRElPIGRyaXZlciBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBob3cgaXQmIzM5O3MgaW5pdGlhbGl6ZWQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIHNvdXJjZSBjb2RlIGl0c2VsZi4gSSYjMzk7bGwgb3BlbiB1cCBgZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCB0byBleGFtaW5lIGl0cyBwcm9iaW5nIHByb2Nlc3MuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGlkZW50aWZ5aW5nIHdoYXQga2luZCBvZiBwbGF0Zm9ybSBkZXZpY2UgaXQmIzM5O3MgZGVzaWduZWQgdG8gd29yayB3aXRoLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyBleHBlY3RlZCBoYXJkd2FyZSBlbnZpcm9ubWVudCBhbmQgcmVzb3VyY2UgcmVxdWlyZW1lbnRzLiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoYXQgdG8gbWFrZSBhbnkgbW9kaWZpY2F0aW9ucyBvciBkZWJ1ZyBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9wbGF0Zm9ybV9kcml2ZXJ8cGxhdGZvcm1fZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYz0xMjQwPU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG90dG9fZW1kaW9faWRzKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0xMjQxLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjEyNDI6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb3R0b19lbWRpb19kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMTI0My1cdC5wcm9iZSA9IG90dG9fZW1kaW9fcHJvYmUsXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTEyNTAtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6MTI1MTptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG90dG9fZW1kaW9fZHJpdmVyKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0xMjUyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjAxCgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgUlRMOTMwMCBNRElPIFByb2JlKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgcHJvYmUgZnVuY3Rpb24gd2l0aGluIGBkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyByZWFsbHkgc3RhcnRzIGhhcHBlbmluZyBmb3IgdGhpcyBwYXJ0aWN1bGFyIFJlYWx0ZWsgc3dpdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgZHJpdmVyIGluaXRpYWxpemVzIGl0c2VsZiBvbiB0aGUgaGFyZHdhcmUuIFdoYXQmIzM5O3MgdGhlIGRldGVjdGlvbiBtZWNoYW5pc20/IFdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyByZXF1ZXN0ZWQgYW5kIG1hcHBlZD8gQXJlIHRoZXJlIGFueSBxdWlya3kgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCB0aGUgJiMzNDtnb3RjaGFzJiMzNDsgUmVhbHRlayBtaWdodCYjMzk7dmUgdGhyb3duIGluPyBJJiMzOTtsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipEZXZpY2UgSUQvVmVuZG9yIElEIGNoZWNrczoqKiBIb3cgZG9lcyBpdCBkZXRlcm1pbmUgdGhpcyBpcyBpbmRlZWQgYSBSVEw5MzAwPyBJcyBpdCB1c2luZyBhIHN0YW5kYXJkIFBDSSBJRCwgb3Igc29tZXRoaW5nIGN1c3RvbT8KKiAgICoqUmVzb3VyY2UgYWxsb2NhdGlvbjoqKiBXaGF0JiMzOTtzIGdldHRpbmcgbWFwcGVkPyBJJiMzOTttIGV4cGVjdGluZyBhdCBsZWFzdCBhbiBNTUlPIHJlZ2lvbiwgcG90ZW50aWFsbHkgc29tZSBpbnRlcnJ1cHQgbGluZXMuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBzZWUgdGhlIGRldGFpbHMgb24gYGlvcmVtYXAoKWAgY2FsbHMuCiogICAqKk1ESU8gYnVzIGluaXRpYWxpemF0aW9uOioqIEhvdyBpcyBpdCBpbnRlZ3JhdGluZyB3aXRoIHRoZSBnZW5lcmljIE1ESU8gZnJhbWV3b3JrPyBBcmUgdGhlcmUgYW55IGN1c3RvbSBjYWxsYmFja3MgaW52b2x2ZWQgdG8gc2V0IHVwIHRoZSBNRElPIGJ1cyBmb3IgdGhlIHNwZWNpZmljIGhhcmR3YXJlPwoqICAgKipDaGlwc2V0LXNwZWNpZmljIGluaXRpYWxpemF0aW9uOioqIFdoYXQgcmVnaXN0ZXJzIGFyZSBiZWluZyB3cml0dGVuIHRvPyBJcyB0aGVyZSBhIGJvb3Qgc2VxdWVuY2U/IEFyZSB0aGV5IGVuYWJsaW5nIGNlcnRhaW4gZmVhdHVyZXMsIG9yIGNvbmZpZ3VyaW5nIGNsb2NrcyBhdCB0aGlzIHN0YWdlPyBBcmUgdGhlcmUgYW55IHBsYXRmb3JtLXNwZWNpZmljIHF1aXJrcyAoZS5nLiBEVCBiaW5kaW5ncyk/CiogICAqKkVycm9yIGhhbmRsaW5nOioqIFdoYXQgYXJlIHRoZSBlcnJvciBwYXRocz8gV2hhdCBoYXBwZW5zIGlmIHRoZSBkZXZpY2UgaXMgbm90IHByZXNlbnQsIG9yIHRoZSBpbml0aWFsaXphdGlvbiBmYWlscz8KKiAgICoqRHJpdmVyIG1vZGVsIHJlZ2lzdHJhdGlvbjoqKiBTcGVjaWZpY2FsbHksIGhvdyB0aGlzIGhhcmR3YXJlIGlzIHByZXNlbnRlZCB0byB0aGUgbmV0d29ya2luZyBzdGFjay4gV2hhdCYjMzk7cyB0aGUgbGluayBiZXR3ZWVuIHRoaXMgTURJTyBkcml2ZXIgYW5kIHRoZSBuZXR3b3JrIGludGVyZmFjZSBkcml2ZXJzPwoqICAgKipJUlEgSGFuZGxpbmc6KiogSG93IGFyZSBpbnRlcnJ1cHRzIGJlaW5nIHNldCB1cD8gSXMgaXQgdXNpbmcgTVNJLVggb3IgdHJhZGl0aW9uYWwgaW50ZXJydXB0cz8KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55dGhpbmcgbm9uLXN0YW5kYXJkLCBhbnl0aGluZyB0aGF0IGRldmlhdGVzIGZyb20gdGhlIHR5cGljYWwgTURJTyBkcml2ZXIgcGF0dGVybi4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSByZWFsbHkgaW50ZXJlc3RpbmcgZGV0YWlscyBhcmUuIEkmIzM5O2xsIGJlIGtlZXBpbmcgYSBjbG9zZSBleWUgb3V0IGZvciBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMsIHRvbywgb3IgYW55IHBvaW50cyB3aGVyZSBpdCBtaWdodCBiZSBpbXByb3ZlZCBvciBtYWRlIGNsZWFyZXIgZm9yIHRoZSBuZXh0IGRldmVsb3BlciB3aG8gaGFzIHRvIHRvdWNoIHRoaXMgY29kZS4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDU1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMDA6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLCBcJiMzNDslcGZ3UCBtaXNzaW5nIGV0aGVybmV0LXBvcnRzXFxuXCYjMzQ7LFxuMTAwMTpcdFx0XHRcdFx0ICAgICBkZXZfZndub2RlKHBhcmVudCkpO1xuMTAwMjpcdFxuMTAwMzpcdFx0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGVfc2NvcGVkKHBvcnRzX2RuLCBwb3J0X2RuKSB7XG4xMDA0Olx0XHRcdGN0cmxfZG4gPSBOVUxMO1xuMTAwNTpcdFx0XHRidXNfZG4gPSBOVUxMO1xuMTAwNjpcdFx0XHRwaHlfZG4gPSBvZl9wYXJzZV9waGFuZGxlKHBvcnRfZG4sIFwmIzM0O3BoeS1oYW5kbGVcJiMzNDssIDApO1xuMTAwNzpcdFx0XHQvKiBza2lwIHBvcnRzIHdpdGhvdXQgcGh5cyAqL1xuMTAwODpcdFx0XHRpZiAoIXBoeV9kbilcbjEwMDk6XHRcdFx0XHRjb250aW51ZTtcbjEwMTA6XHRcbjEwMTE6XHRcdFx0YnVzX2RuID0gb3R0b19lbWRpb19nZXRfYnVzX25vZGUocGh5X2RuKTtcbjEwMTI6XHRcdFx0aWYgKCFidXNfZG4pXG4xMDEzOlx0XHRcdFx0Z290byBwdXRfbm9kZXM7XG4xMDE0Olx0XG4xMDE1Olx0XHRcdGN0cmxfZG4gPSBvZl9nZXRfcGFyZW50KGJ1c19kbik7XG4xMDE2Olx0XHRcdC8qIG9ubHkgbWFwIHBvcnRzIHRoYXQgYXJlIGNvbm5lY3RlZCB0byB0aGlzIG1kaW8tY29udHJvbGxlciAqL1xuMTAxNzpcdFx0XHRpZiAoY3RybF9kbiAhPSBkZXYtXHUwMDNlb2Zfbm9kZSlcbjEwMTg6XHRcdFx0XHRnb3RvIHB1dF9ub2RlcztcbjEwMTk6XHRcbjEwMjA6XHRcdFx0ZXJyID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocG9ydF9kbiwgXCYjMzQ7cmVnXCYjMzQ7LCBcdTAwMjZwbik7XG4xMDIxOlx0XHRcdGlmIChlcnIpXG4xMDIyOlx0XHRcdFx0Z290byBwdXRfbm9kZXM7XG4xMDIzOlx0XG4xMDI0Olx0XHRcdGlmIChwbiBcdTAwM2U9IHByaXYtXHUwMDNlaW5mby1cdTAwM2VudW1fcG9ydHMpIHtcbjEwMjU6XHRcdFx0XHRlcnIgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwgXCYjMzQ7aWxsZWdhbCBwb3J0IG51bWJlciAlZFxcblwmIzM0OywgcG4pO1xuMTAyNjpcdFx0XHRcdGdvdG8gcHV0X25vZGVzO1xuMTAyNzpcdFx0XHR9XG4xMDI4Olx0XG4xMDI5Olx0XHRcdGlmICh0ZXN0X2JpdChwbiwgcHJpdi1cdTAwM2V2YWxpZF9wb3J0cykpIHtcbjEwMzA6XHRcdFx0XHRlcnIgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwgXCYjMzQ7ZHVwbGljYXRlZCBwb3J0IG51bWJlciAlZFxcblwmIzM0OywgcG4pO1xuMTAzMTpcdFx0XHRcdGdvdG8gcHV0X25vZGVzO1xuMTAzMjpcdFx0XHR9XG4xMDMzOlx0XG4xMDM0Olx0XHRcdGVyciA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKGJ1c19kbiwgXCYjMzQ7cmVnXCYjMzQ7LCBcdTAwMjZidXMpO1xuMTAzNTpcdFx0XHRpZiAoZXJyKVxuMTAzNjpcdFx0XHRcdGdvdG8gcHV0X25vZGVzO1xuMTAzNzpcdFxuMTAzODpcdFx0XHRpZiAoYnVzIFx1MDAzZT0gcHJpdi1cdTAwM2VpbmZvLVx1MDAzZW51bV9idXNlcykge1xuMTAzOTpcdFx0XHRcdGVyciA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLCBcJiMzNDtpbGxlZ2FsIHNtaSBidXMgbnVtYmVyICVkXFxuXCYjMzQ7LCBidXMpO1xuMTA0MDpcdFx0XHRcdGdvdG8gcHV0X25vZGVzO1xuMTA0MTpcdFx0XHR9XG4xMDQyOlx0XG4xMDQzOlx0XHRcdGFkZHIgPSBvZl9tZGlvX3BhcnNlX2FkZHIoZGV2LCBwaHlfZG4pO1xuMTA0NDpcdFx0XHRpZiAoYWRkciBcdTAwM2MgMCkge1xuMTA0NTpcdFx0XHRcdGVyciA9IGFkZHI7XG4xMDQ2Olx0XHRcdFx0Z290byBwdXRfbm9kZXM7XG4xMDQ3Olx0XHRcdH1cbjEwNDg6XHRcbjEwNDk6XHRcdFx0LypcbjEwNTA6XHRcdFx0ICogVGhlIE1ESU8gYWNjZXNzZXMgZnJvbSB0aGUga2VybmVsIHdvcmsgd2l0aCB0aGUgUEhZIHBvbGxpbmcgdW5pdCBpbiB0aGVcbjEwNTE6XHRcdFx0ICogc3dpdGNoLiBUaGUgUFBVIGVpdGhlciBvcGVyYXRlcyBpbiBHUEhZIChpLmUuIGNsYXVzZSAyMikgb3IgMTBHUEhZIG1vZGVcbjEwNTI6XHRcdFx0ICogKGkuZS4gY2xhdXNlIDQ1KS4gU2VsZWN0IDEwR1BIWSBtb2RlIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBQSFkgdGhhdFxuMTA1MzpcdFx0XHQgKiBkZWNsYXJlcyBjb21wYXRpYmxlID0gXCYjMzQ7ZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jNDVcJiMzNDsuXG4xMDU0Olx0XHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA4MwoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mICYjMzQ7TGV0JiMzOTtzIHNlZSB0aGUgc3RhcnQgb2YgYG90dG9fZW1kaW9fcHJvYmVgJiMzNDssIHN1bW1hcml6ZWQgZnJvbSBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZSwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IERpdmluZyBpbnRvIGBvdHRvX2VtZGlvX3Byb2JlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSBwaHJhc2UgJiMzNDtMZXQmIzM5O3Mgc2VlIHRoZSBzdGFydCBvZiBgb3R0b19lbWRpb19wcm9iZWAmIzM0OyBpbW1lZGlhdGVseSBzaWduYWxzIGEgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsIGNvbmRpdGlvbnMgb3IgZW50cnkgcG9pbnQgb2YgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBvciBtb2R1bGUsIGBvdHRvX2VtZGlvX3Byb2JlYC4gIE15IG1pbmQmIzM5O3MgYWxyZWFkeSByYWNpbmcgdGhyb3VnaCBwb3NzaWJpbGl0aWVzLiBXaGF0IGlzIHRoaXMgcHJvYmUgKmZvcio/IElzIGl0IGEgZHJpdmVyLCBhIGhhcmR3YXJlIGludGVyYWN0aW9uIHJvdXRpbmUsIGEgZGVidWdnaW5nIHV0aWxpdHksIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgbmFtZSBpdHNlbGYgZ2l2ZXMgYSB2YWd1ZSBoaW50LCBwZXJoYXBzIHJlbGF0aW5nIHRvICYjMzk7ZW1kaW8mIzM5OyBhbmQgJiMzOTtvdHRvJiMzOTssIGJ1dCBJJiMzOTtsbCBuZWVkIG1vcmUgY29udGV4dCB0byB0cnVseSBrbm93LiBNeSBwcmltYXJ5IGZvY3VzIGlzIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIHB1cnBvc2UgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBicm9hZGVyIHN5c3RlbS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIGluaXRpYWwgbGluZXMgb2YgY29kZSDigJMgbGlrZWx5IGluaXRpYWxpemF0aW9uLCBkZXZpY2UgaWRlbnRpZmljYXRpb24sIHJlc291cmNlIGFsbG9jYXRpb24sIGFuZCBwYXJhbWV0ZXIgdmFsaWRhdGlvbi4gVGhlIHdheSB0aGUgcHJvYmUgaXMgaGFuZGxlZCB3aWxsIHRlbGwgYSBsb3QgYWJvdXQgdGhlIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3Mgd2VsbC1jb21tZW50ZWQsIGJ1dCBJJiMzOTttIHByZXBhcmVkIGZvciBhIGJpdCBvZiBkaWdnaW5nIHRvIGRpc2Nlcm4gaXRzIGNvcmUgZnVuY3Rpb24gaWYgaXQgaXNuJiMzOTt0LiBJJiMzOTttIGtlZW4gdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgb2Ygd2hhdCBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IuIExldCYjMzk7cyBzZWUgaWYgd2UgY2FuIGdldCBhIGhhbmRsZSBvbiB0aGlzIHF1aWNrbHk7IEkmIzM5O20gZWFnZXIgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhpcyBwcm9iZSBpcyByZWFsbHkgYWJvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDgwOlx0XHRcdGlmIChlcnIpXG4xMDgxOlx0XHRcdFx0cmV0dXJuIGVycjtcbjEwODI6XHRcdH1cbjEwODM6XHRcbjEwODQ6XHRcdHJldHVybiAwO1xuMTA4NTpcdH1cbjEwODY6XHRcbjEwODc6XHRzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbjEwODg6XHR7XG4xMDg5Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbjEwOTA6XHRcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXY7XG4xMDkxOlx0XHRpbnQgZXJyO1xuMTA5MjpcdFxuMTA5MzpcdFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuMTA5NDpcdFx0aWYgKCFwcml2KVxuMTA5NTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjEwOTY6XHRcbjEwOTc6XHRcdGVyciA9IGRldm1fbXV0ZXhfaW5pdChkZXYsIFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4xMDk4Olx0XHRpZiAoZXJyKVxuMTA5OTpcdFx0XHRyZXR1cm4gZXJyO1xuMTEwMDpcdFxuMTEwMTpcdFx0cHJpdi1cdTAwM2VpbmZvID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7XG4xMTAyOlx0XHRwcml2LVx1MDAzZXJlZ21hcCA9IHN5c2Nvbl9ub2RlX3RvX3JlZ21hcChkZXYtXHUwMDNlcGFyZW50LVx1MDAzZW9mX25vZGUpO1xuMTEwMzpcdFx0aWYgKElTX0VSUihwcml2LVx1MDAzZXJlZ21hcCkpXG4xMTA0Olx0XHRcdHJldHVybiBQVFJfRVJSKHByaXYtXHUwMDNlcmVnbWFwKTtcbjExMDU6XHRcbjExMDY6XHRcdGVyciA9IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHByaXYpO1xuMTEwNzpcdFx0aWYgKGVycilcbjExMDg6XHRcdFx0cmV0dXJuIGVycjtcbjExMDk6XHRcbjExMTA6XHRcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpO1xuMTExMTpcdFxuMTExMjpcdFx0ZXJyID0gb3R0b19lbWRpb19tYXBfcG9ydHMoZGV2KTtcbjExMTM6XHRcdGlmIChlcnIpXG4xMTE0Olx0XHRcdHJldHVybiBlcnI7XG4xMTE1Olx0XG4xMTE2Olx0XHRlcnIgPSBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHByaXYpO1xuMTExNzpcdFx0aWYgKGVycilcbjExMTg6XHRcdFx0cmV0dXJuIGVycjtcbjExMTk6XHRcbjExMjA6XHRcdGlmIChwcml2LVx1MDAzZWluZm8tXHUwMDNlc2V0dXBfY29udHJvbGxlcikge1xuMTEyMTpcdFx0XHRlcnIgPSBwcml2LVx1MDAzZWluZm8tXHUwMDNlc2V0dXBfY29udHJvbGxlcihwcml2KTtcbjExMjI6XHRcdFx0aWYgKGVycilcbjExMjM6XHRcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCYjMzQ7ZmFpbGVkIHRvIHNldHVwIE1ESU8gYnVzIGNvbnRyb2xsZXJcXG5cJiMzNDspO1xuMTEyNDpcdFx0fVxuMTEyNTpcdFxuMTEyNjpcdFx0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGVfc2NvcGVkKGRldi1cdTAwM2VvZl9ub2RlLCBjaGlsZCkge1xuMTEyNzpcdFx0XHRlcnIgPSBvdHRvX2VtZGlvX3Byb2JlX29uZShkZXYsIHByaXYsIGNoaWxkKTtcbjExMjg6XHRcdFx0aWYgKGVycilcbjExMjk6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMTEzMDpcdFx0fVxuMTEzMTpcdFxuMTEzMjpcdFx0cmV0dXJuIDA7XG4xMTMzOlx0fVxuMTEzNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIwOQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgb3R0b19lbWRpb19wcm9iZWAgRHJpdmVyJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IHByaW1hcnkgY29uY2VybiBpcyB3aGV0aGVyIG9yIG5vdCBgb3R0b19lbWRpb19wcm9iZWAsIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBSZWFsdGVrIFJUTDgzeHgvUlRMOTN4eCBFdGhlcm5ldCBzd2l0Y2ggU29DcyAoTUlQUy9BUk0pLCBpcyBhIHZpYWJsZSB0YXJnZXQgZm9yIGZ1enppbmcgd2l0aGluIHRoZSBjb25zdHJhaW50cyBvZiBzdGFuZGFyZCB2aXJ0dWFsaXplZCB4ODZfNjQvYW1kNjQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHNwZWNpZmljYWxseSB3aXRoIHN5emthbGxlci4KCkZpcnN0LCBJIHNlZSBpdCYjMzk7cyBsaW5rZWQgdG8gYE1BQ0hfUkVBTFRFS19SVExgIG9yIGBDT01QSUxFX1RFU1RgLCB3aGljaCBpc24mIzM5O3QgZGlyZWN0bHkgaW5mb3JtYXRpdmUsIGJ1dCB0ZWxscyBtZSBpdCYjMzk7cyB0aWVkIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgRGV2aWNlIFRyZWUgZGVwZW5kZW50LCB3aGljaCBpcyBzdGFuZGFyZCBmb3IgcGxhdGZvcm0gZGV2aWNlcyB0aGVzZSBkYXlzIChgZGV2LSZndDtvZl9ub2RlYCwgYW5kIHVzZXMgYHN5c2Nvbl9ub2RlX3RvX3JlZ21hcGApLiBDcnVjaWFsbHksIG15IHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYGFtZDY0YCwgbm90IHRoZSBuYXRpdmUgTUlQUy9BUk0gb2YgdGhlIFJUTCBjaGlwcy4KCk5vdywgbGV0JiMzOTtzIGFwcGx5IHRoZSBXb3J0aEZ1enppbmcgY3JpdGVyaWEuIEkmIzM5O20gbG9va2luZyBmb3IgKm5lZ2F0aXZlKiBpbmRpY2F0b3JzLCByZWFzb25zIHRvIGV4Y2x1ZGUgdGhpcyBkcml2ZXIgZnJvbSBmdXp6aW5nLiBUaGUgY3JpdGVyaWEgb3V0bGluZWQgc3RhdGU6CgoqICAgKipOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOioqIFRoaXMgc2VlbXMgdW5saWtlbHkuIFRoaXMgaXMgYSBjb3JlIGRyaXZlciwgc28gaXQmIzM5O3MgcHJvYmFibHkgYWN0dWFsIGtlcm5lbCBjb2RlLgoqICAgKipTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6KiogQWgsIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gUmVhbHRlayBSVEw4M3h4L1JUTDkzeHggRXRoZXJuZXQgc3dpdGNoIFNvQ3MgKmFyZSogc3BlY2lhbGl6ZWQgaGFyZHdhcmUuIFRoaXMgZmVlbHMgbGlrZSBpdCBtaWdodCBhcHBseS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBwaHlzaWNhbCBBU0lDIG9yIHNwZWNpYWxpemVkIGhhcmR3YXJlLCBwcm9iYWJseSBub3QgZW11bGF0ZWQgZmFpdGhmdWxseSB3aXRoaW4gUUVNVS4gVGhpbmdzIGxpa2UgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUgYXJlIGV4Y2x1ZGVkLCBidXQgaXMgdGhpcyBzaW1pbGFyIGVub3VnaD8KKiAgICoqVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOioqICBUaGlzIGlzIHByb2JhYmx5IG5vdCB0aGUgY2FzZSwgc2luY2UgaXQgdXNlcyBgcmVtb3ZlYCwgYHNodXRkb3duYCwgZXRjLgoKVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIG5vdyBpcywgaXMgYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgIGEgKnBsYXRmb3JtKiBkcml2ZXIgdGhhdCYjMzk7cyBmdW5kYW1lbnRhbGx5IHJlbGlhbnQgb24gYSBzcGVjaWZpYyBSZWFsdGVrIGhhcmR3YXJlICpjb25maWd1cmF0aW9uKiwgc3BlY2lmaWNhbGx5IGBNQUNIX1JFQUxURUtfUlRMYD8gSWYgc28sIHRoaXMgZHJpdmVyIGxpa2VseSBkZXBlbmRzIG9uIGFuIFJUTDgzeHgvUlRMOTN4eCBjaGlwIGFuZCByZWxhdGVkIGhhcmR3YXJlIHRoYXQmIzM5O3MgKm5vdCogZ2VuZXJhbGx5IGVtdWxhdGVkIGluIGEgc3RhbmRhcmQgZnV6emluZyBzZXR1cC4gR2l2ZW4gdGhhdCBpdCByZWxpZXMgb24gYE1BQ0hfUkVBTFRFS19SVExgIEkgdGhpbmsgSSYjMzk7bGwgbmVlZCB0byByZXNlYXJjaCBhbmQgY29uZmlybSB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoaXMgcGxhdGZvcm0gaW4gZW11bGF0ZWQgZW52aXJvbm1lbnRzLiBNeSBpbml0aWFsIGluY2xpbmF0aW9uIGlzIHRvIHNheSBpdCYjMzk7cyAqcHJvYmFibHkqIG5vdCB3b3J0aCBmdXp6aW5nIGRpcmVjdGx5IHdpdGggYSBzdGFuZGFyZCBzZXR1cC4gSSYjMzk7ZCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgZW11bGF0aW9uIGNhcGFiaWxpdGllcywgbWF5YmUgZXZlbiB0cnlpbmcgdG8gZmluZCBhIG1hdGNoaW5nIFFFTVUgaW1hZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01BQ0hfUkVBTFRFS19SVEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9taXBzL0tjb25maWc9NjgxPWNvbmZpZyBSQUxJTktcbi0tXG5hcmNoL21pcHMvS2NvbmZpZy02OTgtXG5hcmNoL21pcHMvS2NvbmZpZzo2OTk6Y29uZmlnIE1BQ0hfUkVBTFRFS19SVExcbmFyY2gvbWlwcy9LY29uZmlnLTcwMC1cdGJvb2wgXCYjMzQ7UmVhbHRlayBSVEw4Mzh4L1JUTDgzOXggYmFzZWQgbWFjaGluZXNcJiMzNDtcbi0tXG5hcmNoL21pcHMvYm9vdC9kdHMvcmVhbHRlay9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmFyY2gvbWlwcy9ib290L2R0cy9yZWFsdGVrL01ha2VmaWxlOjI6ZHRiLSQoQ09ORklHX01BQ0hfUkVBTFRFS19SVEwpXHQmIzQzOz0gY2lzY29fc2cyMjAtMjYuZHRiXG5hcmNoL21pcHMvYm9vdC9kdHMvcmVhbHRlay9NYWtlZmlsZTozOmR0Yi0kKENPTkZJR19NQUNIX1JFQUxURUtfUlRMKVx0JiM0Mzs9IGNhbWVvLXJ0bDkzMDJjLTJ4LXJ0bDgyMjQtMnhnZS5kdGJcbi0tXG5hcmNoL21pcHMvZ2VuZXJpYy9NYWtlZmlsZT0xNT1vYmotJChDT05GSUdfVklSVF9CT0FSRF9SQU5DSFUpXHRcdCYjNDM7PSBib2FyZC1yYW5jaHUub1xuYXJjaC9taXBzL2dlbmVyaWMvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX01BQ0hfUkVBTFRFS19SVEwpXHRcdCYjNDM7PSBib2FyZC1yZWFsdGVrLm9cbi0tXG5kcml2ZXJzL2dwaW8vS2NvbmZpZz02MjU9Y29uZmlnIEdQSU9fUkVBTFRFS19PVFRPXG5kcml2ZXJzL2dwaW8vS2NvbmZpZy02MjYtXHR0cmlzdGF0ZSBcJiMzNDtSZWFsdGVrIE90dG8gR1BJTyBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2dwaW8vS2NvbmZpZzo2Mjc6XHRkZXBlbmRzIG9uIE1BQ0hfUkVBTFRFS19SVEwgfHwgQ09NUElMRV9URVNUXG5kcml2ZXJzL2dwaW8vS2NvbmZpZzo2Mjg6XHRkZWZhdWx0IE1BQ0hfUkVBTFRFS19SVExcbmRyaXZlcnMvZ3Bpby9LY29uZmlnLTYyOS1cdHNlbGVjdCBHUElPX0dFTkVSSUNcbi0tXG5kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZz0xMTAzPWNvbmZpZyBJMkNfUlRMOTMwMFxuZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWctMTEwNC1cdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsgUlRMOTMwMCBJMkMgY29udHJvbGxlclwmIzM0O1xuZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWc6MTEwNTpcdGRlcGVuZHMgb24gTUFDSF9SRUFMVEVLX1JUTCB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnLTExMDYtXHRoZWxwXG4tLVxuZHJpdmVycy9pcnFjaGlwL01ha2VmaWxlPTEzMD1vYmotJChDT05GSUdfU0wyOENQTERfSU5UQylcdFx0JiM0Mzs9IGlycS1zbDI4Y3BsZC5vXG5kcml2ZXJzL2lycWNoaXAvTWFrZWZpbGU6MTMxOm9iai0kKENPTkZJR19NQUNIX1JFQUxURUtfUlRMKVx0XHQmIzQzOz0gaXJxLXJlYWx0ZWstcnRsLm9cbmRyaXZlcnMvaXJxY2hpcC9NYWtlZmlsZS0xMzItb2JqLSQoQ09ORklHX1dQQ000NTBfQUlDKVx0XHQmIzQzOz0gaXJxLXdwY200NTAtYWljLm9cbi0tXG5kcml2ZXJzL210ZC9uYW5kL0tjb25maWc9NjQ9Y29uZmlnIE1URF9OQU5EX0VDQ19SRUFMVEVLXG4tLVxuZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnLTY2LSAgICAgICAgZGVwZW5kcyBvbiBIQVNfSU9NRU0gXHUwMDI2XHUwMDI2IEhBU19ETUFcbmRyaXZlcnMvbXRkL25hbmQvS2NvbmZpZzo2NzogICAgICAgIGRlcGVuZHMgb24gTUFDSF9SRUFMVEVLX1JUTCB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvbXRkL25hbmQvS2NvbmZpZy02OC0gICAgICAgIHNlbGVjdCBNVERfTkFORF9FQ0Ncbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc9MTc0PWNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3NS1cdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsgUlRMODN4eC9SVEw5M3h4IE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxNzY6XHRkZXBlbmRzIG9uIE1BQ0hfUkVBTFRFS19SVEwgfHwgQ09NUElMRV9URVNUXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTc3LVx0aGVscFxuLS1cbmRyaXZlcnMvc3BpL0tjb25maWc9OTE2PWNvbmZpZyBTUElfUkVBTFRFS19TTkFORFxuZHJpdmVycy9zcGkvS2NvbmZpZy05MTctXHR0cmlzdGF0ZSBcJiMzNDtSZWFsdGVrIFNQSS1OQU5EIEZsYXNoIENvbnRyb2xsZXJcJiMzNDtcbmRyaXZlcnMvc3BpL0tjb25maWc6OTE4Olx0ZGVwZW5kcyBvbiBNQUNIX1JFQUxURUtfUlRMIHx8IENPTVBJTEVfVEVTVFxuZHJpdmVycy9zcGkvS2NvbmZpZy05MTktXHRzZWxlY3QgUkVHTUFQXG4tLVxuZHJpdmVycy9zcGkvTWFrZWZpbGU9MTMxPW9iai0kKENPTkZJR19TUElfUkI0WFgpXHRcdFx0JiM0Mzs9IHNwaS1yYjR4eC5vXG5kcml2ZXJzL3NwaS9NYWtlZmlsZToxMzI6b2JqLSQoQ09ORklHX01BQ0hfUkVBTFRFS19SVEwpXHRcdCYjNDM7PSBzcGktcmVhbHRlay1ydGwub1xuZHJpdmVycy9zcGkvTWFrZWZpbGUtMTMzLW9iai0kKENPTkZJR19TUElfUkVBTFRFS19TTkFORClcdFx0JiM0Mzs9IHNwaS1yZWFsdGVrLXJ0bC1zbmFuZC5vXG4tLVxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnPTExMTM9Y29uZmlnIFJFQUxURUtfT1RUT19XRFRcbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZy0xMTE0LVx0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayBPdHRvIE1JUFMgd2F0Y2hkb2cgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnOjExMTU6XHRkZXBlbmRzIG9uIE1BQ0hfUkVBTFRFS19SVEwgfHwgQ09NUElMRV9URVNUXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctMTExNi1cdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xuLS1cbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZy0xMTE4LVx0c2VsZWN0IFJFR01BUF9NTUlPXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWc6MTExOTpcdGRlZmF1bHQgTUFDSF9SRUFMVEVLX1JUTFxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnLTExMjAtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDY3CgkJCQkJCQlvdXRwdXQ6IDEwNwoJCQkJCQkJdGhvdWdodHM6IDUxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUmVhbHRlayBSVEw5MzAwIE1ESU8gRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGEgdmVyeSBzcGVjaWZpYywgYW5kIGxpa2VseSBpbmFjY2Vzc2libGUsIHBpZWNlIG9mIGhhcmR3YXJlLiBJIHNlZSB0aGF0IGBDT05GSUdfTURJT19SRUFMVEVLX1JUTDkzMDBgIGhpbmdlcyBvbiBlaXRoZXIgdGhlIGBNQUNIX1JFQUxURUtfUlRMYCBjb25maWd1cmF0aW9uICh3aGljaCBpcyBNSVBTLXNwZWNpZmljKSBvciBgQ09NUElMRV9URVNUYC4gT24gbXkgYW1kNjQgYXJjaGl0ZWN0dXJlLCBpdCYjMzk7cyBvbmx5IGFjY2Vzc2libGUgdGhyb3VnaCBgQ09NUElMRV9URVNUYC4gRXZlbiBpZiBjb21waWxlZCwgdGhlIGRyaXZlciBpdHNlbGYgaXMgZGVzaWduZWQgZm9yIGEgUmVhbHRlayBTb0MtaW50ZWdyYXRlZCBNRElPIGJ1cyBjb250cm9sbGVyLCBzb21ldGhpbmcgbGlrZSBgcmVhbHRlayxydGw4MzgwLW1kaW9gLCBgcmVhbHRlayxydGw4MzkxLW1kaW9gLCBvciBgcmVhbHRlayxydGw5MzAxLW1kaW9gLiBUaGlzIG1lYW5zIGl0IG5lZWRzIGRldmljZSB0cmVlIG5vZGVzIHRoYXQgYXJlIGluc3RhbnRpYXRlZCBieSBhIFJlYWx0ZWsgT3R0byBNSVBTIHBsYXRmb3JtIGFuZCByZXF1aXJlcyBhIHBhcmVudCBzeXNjb24gbm9kZS4KClRoZSBraWNrZXI/IFRoZXJlJiMzOTtzIG5vIHN0YW5kYXJkIGVtdWxhdGlvbiBvZiB0aGlzIGhhcmR3YXJlIGluIHR5cGljYWwgYW1kNjQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIFRoaXMgaXMgYSBjcnVjaWFsIGRldGFpbC4gVGhpcyBkcml2ZXIgc2ltcGx5IHdvbiYjMzk7dCBiZSByZWFjaGFibGUuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoaXMgYnkgZXhhbWluaW5nIHRoZSBmaWxlcyBjaGFuZ2VkOgoKMS4gIGBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxgIC0gVGhpcyBpcyBkb2N1bWVudGF0aW9uL2RldmljZSB0cmVlIHNjaGVtYSwgd2hpY2ggaXNuJiMzOTt0IGV4ZWN1dGFibGUgY29kZS4KMi4gIGBkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNgIC0gVGhpcyBpcyB0aGUgZHJpdmVyIGl0c2VsZiwgYnV0IGZvciB0aGUgUmVhbHRlayBSVEw4Mzh4L1JUTDgzOXgvUlRMOTN4eCBNRElPIHBsYXRmb3JtIGRldmljZSwgd2hpY2ggaXMgTUlQUyBhcmNoaXRlY3R1cmUgU29DLgoKU28gdGhlIGVudGlyZSBwYXRjaCBpcyBjZW50ZXJlZCBhcm91bmQ6CgoqICAgQW4gdW5yZWFjaGFibGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIFNvQyBwbGF0Zm9ybSBkcml2ZXIgKE1JUFMgUmVhbHRlaykuCiogICBOb24tZXhlY3V0YWJsZSBjaGFuZ2VzLCBqdXN0IHRoZSBEVCBiaW5kaW5ncy4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhIHRvIGJlIGFic29sdXRlbHkgc3VyZTogYW1kNjQgdGFyZ2V0LCBub3Qgd29ydGggZnV6emluZywgbm8gZm9jdXMgc3ltYm9scywgbm8gZW5hYmxlIGNvbmZpZ3VyYXRpb25zLi4uIGV2ZXJ5dGhpbmcgYWxpZ25zLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIGRldmljZSB0cmVlIGJpbmRpbmdzIGFuZCBhIHBsYXRmb3JtIE1ESU8gY29udHJvbGxlciBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciBSZWFsdGVrIFJUTDgzeHgvUlRMOTN4eCBTb0NzIG9uIE1JUFMsIHdoaWNoIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiB0aGUgYW1kNjQgYXJjaGl0ZWN0dXJlLCBhbmQgdGhhdCBpcyBub3QgZW11bGF0ZWQuCgpBbHJpZ2h0LCBJIGFtIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTc6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEZXZpY2VUcmVlIGJpbmRpbmdzIGFuZCB0aGUgbWRpby1yZWFsdGVrLXJ0bDkzMDAgZHJpdmVyIGZvciBSZWFsdGVrIFJUTDgzeHgvUlRMOTN4eCBFdGhlcm5ldCBzd2l0Y2ggU29DcyAoTUlQUyBwbGF0Zm9ybSkuIFRoaXMgaGFyZHdhcmUgaXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgeDg2XzY0L2FtZDY0IFFFTVUgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgRGV2aWNlVHJlZSBiaW5kaW5ncyBhbmQgdGhlIG1kaW8tcmVhbHRlay1ydGw5MzAwIGRyaXZlciBmb3IgUmVhbHRlayBSVEw4M3h4L1JUTDkzeHggRXRoZXJuZXQgc3dpdGNoIFNvQ3MgKE1JUFMgcGxhdGZvcm0pLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHg4Nl82NC9hbWQ2NCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE3OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoyMjowNy4yOTg1Njk4MDJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjcwNDEzMjg3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERldmljZVRyZWUgYmluZGluZ3MgYW5kIHRoZSBtZGlvLXJlYWx0ZWstcnRsOTMwMCBkcml2ZXIgZm9yIFJlYWx0ZWsgUlRMODN4eC9SVEw5M3h4IEV0aGVybmV0IHN3aXRjaCBTb0NzIChNSVBTIHBsYXRmb3JtKS4gVGhpcyBoYXJkd2FyZSBpcyBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCB4ODZfNjQvYW1kNjQgUUVNVSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoyMjowNy4yOTg1NzUyMjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTc2MDgyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGUwZTdkOWQyYmExYTAyMTk0ZWNjNTZmYWI4ODcyMDRkNTJjNmY0OWNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgOSAxNzoyMjowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcXG5pbmRleCA2N2UwYjIzYTg0NzBlLi44ODUwMmQwMTdlZWRiIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxcbkBAIC01Niw2ICs1Niw5IEBAIHBhdHRlcm5Qcm9wZXJ0aWVzOlxcbiAgICAgICByZWc6XFxuICAgICAgICAgbWF4SXRlbXM6IDFcXG4gXFxuKyAgICAgIGNsb2NrLWZyZXF1ZW5jeTpcXG4rICAgICAgICBkZWZhdWx0OiAyNTAwMDAwXFxuK1xcbiAgICAgcmVxdWlyZWQ6XFxuICAgICAgIC0gcmVnXFxuIFxcbkBAIC03MSw2ICs3NCw0MyBAQCByZXF1aXJlZDpcXG4gICAtIGNvbXBhdGlibGVcXG4gICAtIHJlZ1xcbiBcXG4rYWxsT2Y6XFxuKyAgLSBpZjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBjb21wYXRpYmxlOlxcbisgICAgICAgICAgY29udGFpbnM6XFxuKyAgICAgICAgICAgIGVudW06XFxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODAtbWRpb1xcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgxLW1kaW9cXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4Mi1tZGlvXFxuKyAgICB0aGVuOlxcbisgICAgICBwYXR0ZXJuUHJvcGVydGllczpcXG4rICAgICAgICAnXm1kaW8tYnVzQFswLTNdJCc6XFxuKyAgICAgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgICAgICBjbG9jay1mcmVxdWVuY3k6XFxuKyAgICAgICAgICAgICAgZW51bTogWzI1MDAwMDAsIDEwMDAwMDAwXVxcbisgIC0gaWY6XFxuKyAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgY29tcGF0aWJsZTpcXG4rICAgICAgICAgIGNvbnRhaW5zOlxcbisgICAgICAgICAgICBlbnVtOlxcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkxLW1kaW9cXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5Mi1tZGlvXFxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTMtbWRpb1xcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAxLW1kaW9cXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMmItbWRpb1xcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAyYy1tZGlvXFxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDMtbWRpb1xcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzExLW1kaW9cXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMi1tZGlvXFxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTMtbWRpb1xcbisgICAgdGhlbjpcXG4rICAgICAgcGF0dGVyblByb3BlcnRpZXM6XFxuKyAgICAgICAgJ15tZGlvLWJ1c0BbMC0zXSQnOlxcbisgICAgICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICAgICAgY2xvY2stZnJlcXVlbmN5OlxcbisgICAgICAgICAgICAgIGVudW06IFsxMjUwMDAwLCAyNTAwMDAwLCA1MDAwMDAwXVxcbitcXG4gdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxcbiBcXG4gZXhhbXBsZXM6XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xcbmluZGV4IDExZDA3OGVmOTQxY2QuLmQ0MGZkZDBlZDJmMGQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXFxuKysrIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXFxuQEAgLTEzMCw2ICsxMzAsNyBAQFxcbiAjZGVmaW5lIFJUTDgzODBfTlVNX1BBR0VTXFx0XFx0XFx0NDA5NlxcbiAjZGVmaW5lIFJUTDgzODBfTlVNX1BPUlRTXFx0XFx0XFx0MjhcXG4gI2RlZmluZSBSVEw4MzgwX1NNSV9HTEJfQ1RSTFxcdFxcdFxcdDB4YTEwMFxcbisjZGVmaW5lICAgUlRMODM4MF9TTUlfRlJFUV9TRUxcXHRcXHRcXHRCSVQoMSlcXG4gI2RlZmluZSAgIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FXFx0XFx0QklUKDE1KVxcbiAjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wXFx0XFx0MHhhMWI4XFxuICNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzFcXHRcXHQweGExYmNcXG5AQCAtMTY5LDEyICsxNzAsMTUgQEBcXG4gI2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfTE9XXFx0XFx0MHgwM2U0XFxuICNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0hcXHRcXHQweDAzZThcXG4gI2RlZmluZSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFxcdFxcdDB4MDNmY1xcbisjZGVmaW5lIFJUTDgzOTBfU01JX0dMQl9DVFJMXFx0XFx0XFx0MHgwM2Y4XFxuKyNkZWZpbmUgICBSVEw4MzkwX1NNSV9GUkVRX1NFTFxcdFxcdFxcdEdFTk1BU0soNiwgNSlcXG4gXFxuICNkZWZpbmUgUlRMOTMwMF9OVU1fQlVTRVNcXHRcXHRcXHQ0XFxuICNkZWZpbmUgUlRMOTMwMF9OVU1fUEFHRVNcXHRcXHRcXHQ0MDk2XFxuICNkZWZpbmUgUlRMOTMwMF9OVU1fUE9SVFNcXHRcXHRcXHQyOFxcbiAjZGVmaW5lIFJUTDkzMDBfU01JX0dMQl9DVFJMXFx0XFx0XFx0MHhjYTAwXFxuICNkZWZpbmUgICBSVEw5MzAwX0dMQl9DVFJMX0lOVEZfU0VMKGludGYpXFx0QklUKDE2ICsgKGludGYpKVxcbisjZGVmaW5lICAgUlRMOTMwMF9TTUlfRlJFUV9TRUwoaW50ZilcXHRcXHRHRU5NQVNLKChpbnRmKSAqIDIgKyA5LCAoaW50ZikgKiAyICsgOClcXG4gI2RlZmluZSBSVEw5MzAwX1NNSV9QT1JUMF8xNV9QT0xMSU5HX1NFTFxcdDB4Y2EwOFxcbiAjZGVmaW5lIFJUTDkzMDBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wXFx0XFx0MHhjYjcwXFxuICNkZWZpbmUgUlRMOTMwMF9TTUlfQUNDRVNTX1BIWV9DVFJMXzFcXHRcXHQweGNiNzRcXG5AQCAtMTk2LDYgKzIwMCw4IEBAXFxuICNkZWZpbmUgUlRMOTMxMF9OVU1fQlVTRVNcXHRcXHRcXHQ0XFxuICNkZWZpbmUgUlRMOTMxMF9OVU1fUEFHRVNcXHRcXHRcXHQ4MTkyXFxuICNkZWZpbmUgUlRMOTMxMF9OVU1fUE9SVFNcXHRcXHRcXHQ1NlxcbisjZGVmaW5lIFJUTDkzMTBfU01JX0dMQl9DVFJMMFxcdFxcdFxcdDB4MGNjMFxcbisjZGVmaW5lICAgUlRMOTMxMF9TTUlfRlJFUV9TRUwoaW50ZilcXHRcXHRHRU5NQVNLKChpbnRmKSAqIDIgKyA1LCAoaW50ZikgKiAyICsgNClcXG4gI2RlZmluZSBSVEw5MzEwX1NNSV9HTEJfQ1RSTDFcXHRcXHRcXHQweDBjYmNcXG4gI2RlZmluZSAgIFJUTDkzMTBfU01JX0dMQl9GTVRfU0VMX0M0NShpbnRmKVxcdEJJVCgoaW50ZikgKiAyICsgMSlcXG4gI2RlZmluZSBSVEw5MzEwX1NNSV9JTkRSVF9BQ0NFU1NfQ1RSTF8wXFx0XFx0MHgwYzAwXFxuQEAgLTI2OSw2ICsyNzUsNyBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIHtcXG4gXFx0dTggbnVtX3BvcnRzO1xcbiBcXHR1MTYgbnVtX3BhZ2VzO1xcbiBcXHR1MzIgcG9sbF9jdHJsO1xcbitcXHRpbnQgKCpzZXRfYnVzX2ZyZXF1ZW5jeSkoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGZyZXEpO1xcbiBcXHRpbnQgKCpzZXR1cF9jb250cm9sbGVyKShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KTtcXG4gXFx0aW50ICgqcmVhZF9jMjIpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTtcXG4gXFx0aW50ICgqcmVhZF9jNDUpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xcbkBAIC03NDAsNiArNzQ3LDE3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19zZXR1cF90b3BvbG9neShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfc2V0X2J1c19mcmVxdWVuY3koc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGZyZXEpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcXG4rXFxuK1xcdGlmIChmcmVxICE9IDI1MDAwMDAgXFx1MDAyNlxcdTAwMjYgZnJlcSAhPSAxMDAwMDAwMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXR1cm4gcmVnbWFwX2Fzc2lnbl9iaXRzKHByaXYtXFx1MDAzZXJlZ21hcCwgUlRMODM4MF9TTUlfR0xCX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgUlRMODM4MF9TTUlfRlJFUV9TRUwsIGZyZXEgPT0gMTAwMDAwMDApO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXFxuIHtcXG4gXFx0LypcXG5AQCAtNzQ5LDYgKzc2Nyw1NyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXFxuIFxcdHJldHVybiByZWdtYXBfc2V0X2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLCBSVEw4MzgwX1NNSV9HTEJfQ1RSTCwgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkUpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9zZXRfYnVzX2ZyZXF1ZW5jeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgZnJlcSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xcbitcXHRib29sIGZyZXFfc2V0ID0gZmFsc2U7XFxuK1xcdHUzMiBjaGlsZF9mcmVxLCB2YWw7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSVEw4Mzl4IHVzZXMgYSBzaW5nbGUgZnJlcXVlbmN5IGZvciB0aGUgdHdvIE1ESU8gYnVzZXMuIER1cmluZyByZWdpc3RyYXRpb24gb2YgZmlyc3RcXG4rXFx0ICogYnVzIHBpY2sgYW4gZXhwbGljaXRseSByZXF1ZXN0ZWQgZnJlcXVlbmN5IGZyb20gYW55IGVuYWJsZWQgYnVzLiBVc2UgdGhlIGRlZmF1bHQgb25seVxcbitcXHQgKiBpZiBubyBmcmVxdWVuY3kgaXMgc2V0IGF0IGFsbC5cXG4rXFx0ICovXFxuK1xcdGlmIChwcml2LVxcdTAwM2VidXNbMF0gfHwgcHJpdi1cXHUwMDNlYnVzWzFdKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGZyZXEgPSAyNTAwMDAwO1xcbitcXHRmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZV9zY29wZWQoYnVzLVxcdTAwM2VwYXJlbnQtXFx1MDAzZW9mX25vZGUsIGNoaWxkKSB7XFxuK1xcdFxcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihjaGlsZCwgXFxcImNsb2NrLWZyZXF1ZW5jeVxcXCIsIFxcdTAwMjZjaGlsZF9mcmVxKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRpZiAoZnJlcV9zZXQgXFx1MDAyNlxcdTAwMjYgZnJlcSAhPSBjaGlsZF9mcmVxKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdGZyZXEgPSBjaGlsZF9mcmVxO1xcbitcXHRcXHRmcmVxX3NldCA9IHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChmcmVxICE9IDEyNTAwMDAgXFx1MDAyNlxcdTAwMjYgZnJlcSAhPSAyNTAwMDAwIFxcdTAwMjZcXHUwMDI2IGZyZXEgIT0gNTAwMDAwMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHR2YWwgPSBGSUVMRF9QUkVQKFJUTDgzOTBfU01JX0ZSRVFfU0VMLCBmcmVxIC8gMjUwMDAwMCk7XFxuK1xcdGVyciA9IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVxcdTAwM2VyZWdtYXAsIFJUTDgzOTBfU01JX0dMQl9DVFJMLCBSVEw4MzkwX1NNSV9GUkVRX1NFTCwgdmFsKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldF9idXNfZnJlcXVlbmN5KHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBmcmVxKVxcbit7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX2NoYW4gKmNoYW4gPSBidXMtXFx1MDAzZXByaXY7XFxuK1xcdHUzMiBtYXNrLCB2YWw7XFxuK1xcbitcXHRpZiAoZnJlcSAhPSAxMjUwMDAwIFxcdTAwMjZcXHUwMDI2IGZyZXEgIT0gMjUwMDAwMCBcXHUwMDI2XFx1MDAyNiBmcmVxICE9IDUwMDAwMDApXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bWFzayA9IFJUTDkzMDBfU01JX0ZSRVFfU0VMKGNoYW4tXFx1MDAzZW1kaW9fYnVzKTtcXG4rXFx0dmFsID0gZmllbGRfcHJlcChtYXNrLCBmcmVxIC8gMjUwMDAwMCk7XFxuK1xcbitcXHRyZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtXFx1MDAzZXJlZ21hcCwgUlRMOTMwMF9TTUlfR0xCX0NUUkwsIG1hc2ssIHZhbCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcXG4ge1xcbiBcXHR1MzIgZ2xiX2N0cmxfbWFzayA9IDAsIGdsYl9jdHJsX3ZhbCA9IDA7XFxuQEAgLTc2OSw2ICs4MzgsMjEgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0X2J1c19mcmVxdWVuY3koc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGZyZXEpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fY2hhbiAqY2hhbiA9IGJ1cy1cXHUwMDNlcHJpdjtcXG4rXFx0dTMyIG1hc2ssIHZhbDtcXG4rXFxuK1xcdGlmIChmcmVxICE9IDEyNTAwMDAgXFx1MDAyNlxcdTAwMjYgZnJlcSAhPSAyNTAwMDAwIFxcdTAwMjZcXHUwMDI2IGZyZXEgIT0gNTAwMDAwMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRtYXNrID0gUlRMOTMxMF9TTUlfRlJFUV9TRUwoY2hhbi1cXHUwMDNlbWRpb19idXMpO1xcbitcXHR2YWwgPSBmaWVsZF9wcmVwKG1hc2ssIGZyZXEgLyAyNTAwMDAwKTtcXG4rXFxuK1xcdHJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLCBSVEw5MzEwX1NNSV9HTEJfQ1RSTDAsIG1hc2ssIHZhbCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcXG4ge1xcbiBcXHRpbnQgaSwgZXJyO1xcbkBAIC04MzEsMTQgKzkxNSwxNCBAQCBzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LFxcbi1cXHRcXHRcXHRcXHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKm5vZGUpXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuO1xcbiBcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xcbi1cXHR1MzIgbWRpb19idXM7XFxuK1xcdHUzMiBtZGlvX2J1cywgZnJlcTtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGVyciA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCBcXFwicmVnXFxcIiwgXFx1MDAyNm1kaW9fYnVzKTtcXG4rXFx0ZXJyID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgXFxcInJlZ1xcXCIsIFxcdTAwMjZtZGlvX2J1cyk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcXFwidW5kZWZpbmVkIHNtaSBidXMgbnVtYmVyXFxcXG5cXFwiKTtcXG4gXFxuQEAgLTg0Niw2ICs5MzAsOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdlxcbiBcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuIFxcdFxcdFxcdFxcdCAgICAgXFxcImlsbGVnYWwgKGRhbmdsaW5nKSBzbWkgYnVzIG51bWJlciAlZFxcXFxuXFxcIiwgbWRpb19idXMpO1xcbiBcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWJ1c1ttZGlvX2J1c10pXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwgXFxcImR1cGxpY2F0ZWQgc21pIGJ1cyBudW1iZXIgJWRcXFxcblxcXCIsIG1kaW9fYnVzKTtcXG4rXFxuIFxcdGJ1cyA9IGRldm1fbWRpb2J1c19hbGxvY19zaXplKGRldiwgc2l6ZW9mKCpjaGFuKSk7XFxuIFxcdGlmICghYnVzKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5AQCAtODY1LDEwICs5NTIsMTkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXZcXG4gXFxuIFxcdHNucHJpbnRmKGJ1cy1cXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXFxcIiVzLSVkXFxcIiwgZGV2X25hbWUoZGV2KSwgbWRpb19idXMpO1xcbiBcXG4tXFx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCB0b19vZl9ub2RlKG5vZGUpKTtcXG4rXFx0aWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsIFxcXCJjbG9jay1mcmVxdWVuY3lcXFwiLCBcXHUwMDI2ZnJlcSkpXFxuK1xcdFxcdGZyZXEgPSAyNTAwMDAwO1xcbitcXHRlcnIgPSBwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2VzZXRfYnVzX2ZyZXF1ZW5jeShidXMsIGZyZXEpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXFxcImNhbm5vdCBzZXQgZnJlcXVlbmN5ICV1IGZvciBNRElPIGJ1cyAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICBmcmVxLCBtZGlvX2J1cyk7XFxuK1xcbitcXHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG5vZGUpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXFxcImNhbm5vdCByZWdpc3RlciBNRElPIGJ1c1xcXFxuXFxcIik7XFxuIFxcbitcXHRwcml2LVxcdTAwM2VidXNbbWRpb19idXNdID0gYnVzO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTEwMjcsNyArMTEyMyw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXFxcImZhaWxlZCB0byBzZXR1cCBNRElPIGJ1cyBjb250cm9sbGVyXFxcXG5cXFwiKTtcXG4gXFx0fVxcbiBcXG4tXFx0ZGV2aWNlX2Zvcl9lYWNoX2NoaWxkX25vZGVfc2NvcGVkKGRldiwgY2hpbGQpIHtcXG4rXFx0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGVfc2NvcGVkKGRldi1cXHUwMDNlb2Zfbm9kZSwgY2hpbGQpIHtcXG4gXFx0XFx0ZXJyID0gb3R0b19lbWRpb19wcm9iZV9vbmUoZGV2LCBwcml2LCBjaGlsZCk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuQEAgLTEwNTEsNiArMTE0Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM4MF9pbmZvID0ge1xcbiBcXHQubnVtX3BhZ2VzID0gUlRMODM4MF9OVU1fUEFHRVMsXFxuIFxcdC5udW1fcG9ydHMgPSBSVEw4MzgwX05VTV9QT1JUUyxcXG4gXFx0LnBvbGxfY3RybCA9IFJUTDgzODBfU01JX1BPTExfQ1RSTCxcXG4rXFx0LnNldF9idXNfZnJlcXVlbmN5ID0gb3R0b19lbWRpb184MzgwX3NldF9idXNfZnJlcXVlbmN5LFxcbiBcXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyLFxcbiBcXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjIsXFxuIFxcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NSxcXG5AQCAtMTA3NSw2ICsxMTcyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzkwX2luZm8gPSB7XFxuIFxcdC5udW1fcGFnZXMgPSBSVEw4MzkwX05VTV9QQUdFUyxcXG4gXFx0Lm51bV9wb3J0cyA9IFJUTDgzOTBfTlVNX1BPUlRTLFxcbiBcXHQucG9sbF9jdHJsID0gUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsXFxuK1xcdC5zZXRfYnVzX2ZyZXF1ZW5jeSA9IG90dG9fZW1kaW9fODM5MF9zZXRfYnVzX2ZyZXF1ZW5jeSxcXG4gXFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzIyLFxcbiBcXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUsXFxuIFxcdC53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyLFxcbkBAIC0xMDk3LDYgKzExOTUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHtcXG4gXFx0Lm51bV9wb3J0cyA9IFJUTDkzMDBfTlVNX1BPUlRTLFxcbiBcXHQubnVtX3BhZ2VzID0gUlRMOTMwMF9OVU1fUEFHRVMsXFxuIFxcdC5wb2xsX2N0cmwgPSBSVEw5MzAwX1NNSV9QT0xMX0NUUkwsXFxuK1xcdC5zZXRfYnVzX2ZyZXF1ZW5jeSA9IG90dG9fZW1kaW9fOTMwMF9zZXRfYnVzX2ZyZXF1ZW5jeSxcXG4gXFx0LnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlcixcXG4gXFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzIyLFxcbiBcXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jNDUsXFxuQEAgLTExMjMsNiArMTIyMiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0ge1xcbiBcXHQubnVtX3BhZ2VzID0gUlRMOTMxMF9OVU1fUEFHRVMsXFxuIFxcdC5udW1fcG9ydHMgPSBSVEw5MzEwX05VTV9QT1JUUyxcXG4gXFx0LnBvbGxfY3RybCA9IFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMLFxcbitcXHQuc2V0X2J1c19mcmVxdWVuY3kgPSBvdHRvX2VtZGlvXzkzMTBfc2V0X2J1c19mcmVxdWVuY3ksXFxuIFxcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIsXFxuIFxcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMixcXG4gXFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzQ1LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoyMjowNy43ODUwNTczNTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQyMjE3NjMxMDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEZXZpY2VUcmVlIGJpbmRpbmdzIGFuZCB0aGUgbWRpby1yZWFsdGVrLXJ0bDkzMDAgZHJpdmVyIGZvciBSZWFsdGVrIFJUTDgzeHgvUlRMOTN4eCBFdGhlcm5ldCBzd2l0Y2ggU29DcyAoTUlQUyBwbGF0Zm9ybSkuIFRoaXMgaGFyZHdhcmUgaXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgeDg2XzY0L2FtZDY0IFFFTVUgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlMGU3ZDlkMmJhMWEwMjE5NGVjYzU2ZmFiODg3MjA0ZDUyYzZmNDljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxNzoyMjowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxuaW5kZXggNjdlMGIyM2E4NDcwZS4uODg1MDJkMDE3ZWVkYiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXG5AQCAtNTYsNiArNTYsOSBAQCBwYXR0ZXJuUHJvcGVydGllczpcbiAgICAgICByZWc6XG4gICAgICAgICBtYXhJdGVtczogMVxuIFxuKyAgICAgIGNsb2NrLWZyZXF1ZW5jeTpcbisgICAgICAgIGRlZmF1bHQ6IDI1MDAwMDBcbitcbiAgICAgcmVxdWlyZWQ6XG4gICAgICAgLSByZWdcbiBcbkBAIC03MSw2ICs3NCw0MyBAQCByZXF1aXJlZDpcbiAgIC0gY29tcGF0aWJsZVxuICAgLSByZWdcbiBcbithbGxPZjpcbisgIC0gaWY6XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIGNvbXBhdGlibGU6XG4rICAgICAgICAgIGNvbnRhaW5zOlxuKyAgICAgICAgICAgIGVudW06XG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MC1tZGlvXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MS1tZGlvXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4Mi1tZGlvXG4rICAgIHRoZW46XG4rICAgICAgcGF0dGVyblByb3BlcnRpZXM6XG4rICAgICAgICAnXm1kaW8tYnVzQFswLTNdJCc6XG4rICAgICAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICAgICAgY2xvY2stZnJlcXVlbmN5OlxuKyAgICAgICAgICAgICAgZW51bTogWzI1MDAwMDAsIDEwMDAwMDAwXVxuKyAgLSBpZjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgY29udGFpbnM6XG4rICAgICAgICAgICAgZW51bTpcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkxLW1kaW9cbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkyLW1kaW9cbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkzLW1kaW9cbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAxLW1kaW9cbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAyYi1tZGlvXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMmMtbWRpb1xuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDMtbWRpb1xuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTEtbWRpb1xuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTItbWRpb1xuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTMtbWRpb1xuKyAgICB0aGVuOlxuKyAgICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOlxuKyAgICAgICAgJ15tZGlvLWJ1c0BbMC0zXSQnOlxuKyAgICAgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgICAgIGNsb2NrLWZyZXF1ZW5jeTpcbisgICAgICAgICAgICAgIGVudW06IFsxMjUwMDAwLCAyNTAwMDAwLCA1MDAwMDAwXVxuK1xuIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiBcbiBleGFtcGxlczpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcbmluZGV4IDExZDA3OGVmOTQxY2QuLmQ0MGZkZDBlZDJmMGQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuQEAgLTEzMCw2ICsxMzAsNyBAQFxuICNkZWZpbmUgUlRMODM4MF9OVU1fUEFHRVNcdFx0XHQ0MDk2XG4gI2RlZmluZSBSVEw4MzgwX05VTV9QT1JUU1x0XHRcdDI4XG4gI2RlZmluZSBSVEw4MzgwX1NNSV9HTEJfQ1RSTFx0XHRcdDB4YTEwMFxuKyNkZWZpbmUgICBSVEw4MzgwX1NNSV9GUkVRX1NFTFx0XHRcdEJJVCgxKVxuICNkZWZpbmUgICBSVEw4MzgwX1NNSV9QSFlfUEFUQ0hfRE9ORVx0XHRCSVQoMTUpXG4gI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMFx0XHQweGExYjhcbiAjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xXHRcdDB4YTFiY1xuQEAgLTE2OSwxMiArMTcwLDE1IEBAXG4gI2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfTE9XXHRcdDB4MDNlNFxuICNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0hcdFx0MHgwM2U4XG4gI2RlZmluZSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFx0XHQweDAzZmNcbisjZGVmaW5lIFJUTDgzOTBfU01JX0dMQl9DVFJMXHRcdFx0MHgwM2Y4XG4rI2RlZmluZSAgIFJUTDgzOTBfU01JX0ZSRVFfU0VMXHRcdFx0R0VOTUFTSyg2LCA1KVxuIFxuICNkZWZpbmUgUlRMOTMwMF9OVU1fQlVTRVNcdFx0XHQ0XG4gI2RlZmluZSBSVEw5MzAwX05VTV9QQUdFU1x0XHRcdDQwOTZcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BPUlRTXHRcdFx0MjhcbiAjZGVmaW5lIFJUTDkzMDBfU01JX0dMQl9DVFJMXHRcdFx0MHhjYTAwXG4gI2RlZmluZSAgIFJUTDkzMDBfR0xCX0NUUkxfSU5URl9TRUwoaW50ZilcdEJJVCgxNiArIChpbnRmKSlcbisjZGVmaW5lICAgUlRMOTMwMF9TTUlfRlJFUV9TRUwoaW50ZilcdFx0R0VOTUFTSygoaW50ZikgKiAyICsgOSwgKGludGYpICogMiArIDgpXG4gI2RlZmluZSBSVEw5MzAwX1NNSV9QT1JUMF8xNV9QT0xMSU5HX1NFTFx0MHhjYTA4XG4gI2RlZmluZSBSVEw5MzAwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMFx0XHQweGNiNzBcbiAjZGVmaW5lIFJUTDkzMDBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xXHRcdDB4Y2I3NFxuQEAgLTE5Niw2ICsyMDAsOCBAQFxuICNkZWZpbmUgUlRMOTMxMF9OVU1fQlVTRVNcdFx0XHQ0XG4gI2RlZmluZSBSVEw5MzEwX05VTV9QQUdFU1x0XHRcdDgxOTJcbiAjZGVmaW5lIFJUTDkzMTBfTlVNX1BPUlRTXHRcdFx0NTZcbisjZGVmaW5lIFJUTDkzMTBfU01JX0dMQl9DVFJMMFx0XHRcdDB4MGNjMFxuKyNkZWZpbmUgICBSVEw5MzEwX1NNSV9GUkVRX1NFTChpbnRmKVx0XHRHRU5NQVNLKChpbnRmKSAqIDIgKyA1LCAoaW50ZikgKiAyICsgNClcbiAjZGVmaW5lIFJUTDkzMTBfU01JX0dMQl9DVFJMMVx0XHRcdDB4MGNiY1xuICNkZWZpbmUgICBSVEw5MzEwX1NNSV9HTEJfRk1UX1NFTF9DNDUoaW50ZilcdEJJVCgoaW50ZikgKiAyICsgMSlcbiAjZGVmaW5lIFJUTDkzMTBfU01JX0lORFJUX0FDQ0VTU19DVFJMXzBcdFx0MHgwYzAwXG5AQCAtMjY5LDYgKzI3NSw3IEBAIHN0cnVjdCBvdHRvX2VtZGlvX2luZm8ge1xuIFx0dTggbnVtX3BvcnRzO1xuIFx0dTE2IG51bV9wYWdlcztcbiBcdHUzMiBwb2xsX2N0cmw7XG4rXHRpbnQgKCpzZXRfYnVzX2ZyZXF1ZW5jeSkoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGZyZXEpO1xuIFx0aW50ICgqc2V0dXBfY29udHJvbGxlcikoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdik7XG4gXHRpbnQgKCpyZWFkX2MyMikoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xuIFx0aW50ICgqcmVhZF9jNDUpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xuQEAgLTc0MCw2ICs3NDcsMTcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfc2V0X2J1c19mcmVxdWVuY3koc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGZyZXEpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbitcbitcdGlmIChmcmVxICE9IDI1MDAwMDAgXHUwMDI2XHUwMDI2IGZyZXEgIT0gMTAwMDAwMDApXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIHJlZ21hcF9hc3NpZ25fYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgUlRMODM4MF9TTUlfR0xCX0NUUkwsXG4rXHRcdFx0XHQgIFJUTDgzODBfU01JX0ZSRVFfU0VMLCBmcmVxID09IDEwMDAwMDAwKTtcbit9XG4rXG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIHtcbiBcdC8qXG5AQCAtNzQ5LDYgKzc2Nyw1NyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gcmVnbWFwX3NldF9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBSVEw4MzgwX1NNSV9HTEJfQ1RSTCwgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkUpO1xuIH1cbiBcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9zZXRfYnVzX2ZyZXF1ZW5jeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgZnJlcSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuK1x0Ym9vbCBmcmVxX3NldCA9IGZhbHNlO1xuK1x0dTMyIGNoaWxkX2ZyZXEsIHZhbDtcbitcdGludCBlcnI7XG4rXG4rXHQvKlxuK1x0ICogUlRMODM5eCB1c2VzIGEgc2luZ2xlIGZyZXF1ZW5jeSBmb3IgdGhlIHR3byBNRElPIGJ1c2VzLiBEdXJpbmcgcmVnaXN0cmF0aW9uIG9mIGZpcnN0XG4rXHQgKiBidXMgcGljayBhbiBleHBsaWNpdGx5IHJlcXVlc3RlZCBmcmVxdWVuY3kgZnJvbSBhbnkgZW5hYmxlZCBidXMuIFVzZSB0aGUgZGVmYXVsdCBvbmx5XG4rXHQgKiBpZiBubyBmcmVxdWVuY3kgaXMgc2V0IGF0IGFsbC5cbitcdCAqL1xuK1x0aWYgKHByaXYtXHUwMDNlYnVzWzBdIHx8IHByaXYtXHUwMDNlYnVzWzFdKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGZyZXEgPSAyNTAwMDAwO1xuK1x0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGVfc2NvcGVkKGJ1cy1cdTAwM2VwYXJlbnQtXHUwMDNlb2Zfbm9kZSwgY2hpbGQpIHtcbitcdFx0aWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKGNoaWxkLCBcImNsb2NrLWZyZXF1ZW5jeVwiLCBcdTAwMjZjaGlsZF9mcmVxKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0aWYgKGZyZXFfc2V0IFx1MDAyNlx1MDAyNiBmcmVxICE9IGNoaWxkX2ZyZXEpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdGZyZXEgPSBjaGlsZF9mcmVxO1xuK1x0XHRmcmVxX3NldCA9IHRydWU7XG4rXHR9XG4rXG4rXHRpZiAoZnJlcSAhPSAxMjUwMDAwIFx1MDAyNlx1MDAyNiBmcmVxICE9IDI1MDAwMDAgXHUwMDI2XHUwMDI2IGZyZXEgIT0gNTAwMDAwMClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHR2YWwgPSBGSUVMRF9QUkVQKFJUTDgzOTBfU01JX0ZSRVFfU0VMLCBmcmVxIC8gMjUwMDAwMCk7XG4rXHRlcnIgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIFJUTDgzOTBfU01JX0dMQl9DVFJMLCBSVEw4MzkwX1NNSV9GUkVRX1NFTCwgdmFsKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldF9idXNfZnJlcXVlbmN5KHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBmcmVxKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuID0gYnVzLVx1MDAzZXByaXY7XG4rXHR1MzIgbWFzaywgdmFsO1xuK1xuK1x0aWYgKGZyZXEgIT0gMTI1MDAwMCBcdTAwMjZcdTAwMjYgZnJlcSAhPSAyNTAwMDAwIFx1MDAyNlx1MDAyNiBmcmVxICE9IDUwMDAwMDApXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0bWFzayA9IFJUTDkzMDBfU01JX0ZSRVFfU0VMKGNoYW4tXHUwMDNlbWRpb19idXMpO1xuK1x0dmFsID0gZmllbGRfcHJlcChtYXNrLCBmcmVxIC8gMjUwMDAwMCk7XG4rXG4rXHRyZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBSVEw5MzAwX1NNSV9HTEJfQ1RSTCwgbWFzaywgdmFsKTtcbit9XG4rXG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIHtcbiBcdHUzMiBnbGJfY3RybF9tYXNrID0gMCwgZ2xiX2N0cmxfdmFsID0gMDtcbkBAIC03NjksNiArODM4LDIxIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXRfYnVzX2ZyZXF1ZW5jeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgZnJlcSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuK1x0c3RydWN0IG90dG9fZW1kaW9fY2hhbiAqY2hhbiA9IGJ1cy1cdTAwM2Vwcml2O1xuK1x0dTMyIG1hc2ssIHZhbDtcbitcbitcdGlmIChmcmVxICE9IDEyNTAwMDAgXHUwMDI2XHUwMDI2IGZyZXEgIT0gMjUwMDAwMCBcdTAwMjZcdTAwMjYgZnJlcSAhPSA1MDAwMDAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdG1hc2sgPSBSVEw5MzEwX1NNSV9GUkVRX1NFTChjaGFuLVx1MDAzZW1kaW9fYnVzKTtcbitcdHZhbCA9IGZpZWxkX3ByZXAobWFzaywgZnJlcSAvIDI1MDAwMDApO1xuK1xuK1x0cmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgUlRMOTMxMF9TTUlfR0xCX0NUUkwwLCBtYXNrLCB2YWwpO1xuK31cbitcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4ge1xuIFx0aW50IGksIGVycjtcbkBAIC04MzEsMTQgKzkxNSwxNCBAQCBzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gfVxuIFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LFxuLVx0XHRcdFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpub2RlKVxuK1x0XHRcdFx0c3RydWN0IGRldmljZV9ub2RlICpub2RlKVxuIHtcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NoYW4gKmNoYW47XG4gXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xuLVx0dTMyIG1kaW9fYnVzO1xuK1x0dTMyIG1kaW9fYnVzLCBmcmVxO1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCBcInJlZ1wiLCBcdTAwMjZtZGlvX2J1cyk7XG4rXHRlcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCBcInJlZ1wiLCBcdTAwMjZtZGlvX2J1cyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCJ1bmRlZmluZWQgc21pIGJ1cyBudW1iZXJcXG5cIik7XG4gXG5AQCAtODQ2LDYgKzkzMCw5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2XG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiBcdFx0XHRcdCAgICAgXCJpbGxlZ2FsIChkYW5nbGluZykgc21pIGJ1cyBudW1iZXIgJWRcXG5cIiwgbWRpb19idXMpO1xuIFxuK1x0aWYgKHByaXYtXHUwMDNlYnVzW21kaW9fYnVzXSlcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLCBcImR1cGxpY2F0ZWQgc21pIGJ1cyBudW1iZXIgJWRcXG5cIiwgbWRpb19idXMpO1xuK1xuIFx0YnVzID0gZGV2bV9tZGlvYnVzX2FsbG9jX3NpemUoZGV2LCBzaXplb2YoKmNoYW4pKTtcbiBcdGlmICghYnVzKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC04NjUsMTAgKzk1MiwxOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdlxuIFxuIFx0c25wcmludGYoYnVzLVx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFwiJXMtJWRcIiwgZGV2X25hbWUoZGV2KSwgbWRpb19idXMpO1xuIFxuLVx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCB0b19vZl9ub2RlKG5vZGUpKTtcbitcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCBcImNsb2NrLWZyZXF1ZW5jeVwiLCBcdTAwMjZmcmVxKSlcbitcdFx0ZnJlcSA9IDI1MDAwMDA7XG4rXHRlcnIgPSBwcml2LVx1MDAzZWluZm8tXHUwMDNlc2V0X2J1c19mcmVxdWVuY3koYnVzLCBmcmVxKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcImNhbm5vdCBzZXQgZnJlcXVlbmN5ICV1IGZvciBNRElPIGJ1cyAlZFxcblwiLFxuK1x0XHRcdFx0ICAgICBmcmVxLCBtZGlvX2J1cyk7XG4rXG4rXHRlcnIgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG5vZGUpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsIFwiY2Fubm90IHJlZ2lzdGVyIE1ESU8gYnVzXFxuXCIpO1xuIFxuK1x0cHJpdi1cdTAwM2VidXNbbWRpb19idXNdID0gYnVzO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEwMjcsNyArMTEyMyw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcImZhaWxlZCB0byBzZXR1cCBNRElPIGJ1cyBjb250cm9sbGVyXFxuXCIpO1xuIFx0fVxuIFxuLVx0ZGV2aWNlX2Zvcl9lYWNoX2NoaWxkX25vZGVfc2NvcGVkKGRldiwgY2hpbGQpIHtcbitcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlX3Njb3BlZChkZXYtXHUwMDNlb2Zfbm9kZSwgY2hpbGQpIHtcbiBcdFx0ZXJyID0gb3R0b19lbWRpb19wcm9iZV9vbmUoZGV2LCBwcml2LCBjaGlsZCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbkBAIC0xMDUxLDYgKzExNDcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzODBfaW5mbyA9IHtcbiBcdC5udW1fcGFnZXMgPSBSVEw4MzgwX05VTV9QQUdFUyxcbiBcdC5udW1fcG9ydHMgPSBSVEw4MzgwX05VTV9QT1JUUyxcbiBcdC5wb2xsX2N0cmwgPSBSVEw4MzgwX1NNSV9QT0xMX0NUUkwsXG4rXHQuc2V0X2J1c19mcmVxdWVuY3kgPSBvdHRvX2VtZGlvXzgzODBfc2V0X2J1c19mcmVxdWVuY3ksXG4gXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyLFxuIFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzIyLFxuIFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1LFxuQEAgLTEwNzUsNiArMTE3Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM5MF9pbmZvID0ge1xuIFx0Lm51bV9wYWdlcyA9IFJUTDgzOTBfTlVNX1BBR0VTLFxuIFx0Lm51bV9wb3J0cyA9IFJUTDgzOTBfTlVNX1BPUlRTLFxuIFx0LnBvbGxfY3RybCA9IFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMLFxuK1x0LnNldF9idXNfZnJlcXVlbmN5ID0gb3R0b19lbWRpb184MzkwX3NldF9idXNfZnJlcXVlbmN5LFxuIFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzIyLFxuIFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1LFxuIFx0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIsXG5AQCAtMTA5Nyw2ICsxMTk1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzAwX2luZm8gPSB7XG4gXHQubnVtX3BvcnRzID0gUlRMOTMwMF9OVU1fUE9SVFMsXG4gXHQubnVtX3BhZ2VzID0gUlRMOTMwMF9OVU1fUEFHRVMsXG4gXHQucG9sbF9jdHJsID0gUlRMOTMwMF9TTUlfUE9MTF9DVFJMLFxuK1x0LnNldF9idXNfZnJlcXVlbmN5ID0gb3R0b19lbWRpb185MzAwX3NldF9idXNfZnJlcXVlbmN5LFxuIFx0LnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlcixcbiBcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMixcbiBcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2M0NSxcbkBAIC0xMTIzLDYgKzEyMjIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcbiBcdC5udW1fcGFnZXMgPSBSVEw5MzEwX05VTV9QQUdFUyxcbiBcdC5udW1fcG9ydHMgPSBSVEw5MzEwX05VTV9QT1JUUyxcbiBcdC5wb2xsX2N0cmwgPSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCxcbitcdC5zZXRfYnVzX2ZyZXF1ZW5jeSA9IG90dG9fZW1kaW9fOTMxMF9zZXRfYnVzX2ZyZXF1ZW5jeSxcbiBcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIsXG4gXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIsXG4gXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jNDUsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoyMjowNy43ODUwNTg2MjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTIyMzMwMzcyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvZGUgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSBzZWUgYSBwYXRjaCB0b3VjaGluZyBgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sYCBhbmQgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBMZXQncyBkaWcgaW50byBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZHJpdmVyIHRoaXMgaXMsIGhvdyB0aGUga2VybmVsIHByb2JlcyBmb3IgaXQsIHRoZSBzcGVjaWZpYyBidXMgaXQncyB0aWVkIHRvLCBhbmQgd2hldGhlciB0aGlzIGlzIHNvbWV0aGluZyBnZW5lcmljIGVub3VnaCB0byBiZSByZWxldmFudCBpbiBteSBzdGFuZGFyZCB4ODYvYW1kNjQgdmlydHVhbGl6YXRpb24gc2V0dXBzIG9yIGlmIGl0J3Mgc3RyaWN0bHkgU29DIG9yIGhhcmR3YXJlLXNwZWNpZmljLiBJJ2xsIG5lZWQgdG8gdXNlIGBncmVwcGVyYCB0byBxdWlja2x5IHRyYWNrIGRvd24gdGhlIEtjb25maWcgZW50cmllcyByZWxhdGVkIHRvIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNjMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoyMjoyMy4wMDgzNjQ3OTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4NjM0ODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW8tcmVhbHRlay1ydGw5MzAwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21kaW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZT0yMz1vYmotJChDT05GSUdfTURJT19QSUM2NEhQU0MpXFx0XFx0Kz0gbWRpby1waWM2NGhwc2Mub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX01ESU9fUkVBTFRFS19SVEw5MzAwKVxcdCs9IG1kaW8tcmVhbHRlay1ydGw5MzAwLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlLTI1LW9iai0kKENPTkZJR19NRElPX1JFR01BUClcXHRcXHQrPSBtZGlvLXJlZ21hcC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjIyOjIzLjIzNzAwNzY2NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NjY1MTU3NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBSZWFsdGVrIFJUTDkzMDAgTURJTyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgUmVhbHRlayBSVEw5MzAwJ3MgTURJTyBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGlzIGtlcm5lbCBjb250ZXh0LiBGaXJzdCwgbXkgaW1tZWRpYXRlIGFjdGlvbiBpcyB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBlbnRyeS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgYENPTkZJR19NRElPX1JFQUxURUtfUlRMOTMwMGAuIFRoaXMgc2hvdWxkIGxlYWQgbWUgdG8gdGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBhbnkgY29uZGl0aW9uYWwgYnVpbGQgbG9naWMgcmVsYXRlZCB0byB0aGUgUlRMOTMwMCdzIE1ESU8gc3VwcG9ydC4gSSBhbnRpY2lwYXRlIHRoaXMgS2NvbmZpZyBvcHRpb24gd2lsbCB0aWUgaW50byB0aGUgYnJvYWRlciBNRElPIGZyYW1ld29yaywgYnV0IHRoZSBSVEw5MzAwIGlzIGEgc3BlY2lhbGl6ZWQgZGV2aWNlIGFuZCBsaWtlbHkgaGFzIHNvbWUgcGxhdGZvcm0tc3BlY2lmaWMgcmVxdWlyZW1lbnRzLiBHZXR0aW5nIHRoZSBLY29uZmlnIHJpZ2h0IGlzIGNydWNpYWwgZm9yIGEgY2xlYW4sIG1haW50YWluYWJsZSBidWlsZCwgYW5kIGZvciBlbnN1cmluZyB0aGUgY29ycmVjdCBNRElPIGRyaXZlciBpcyBlbmFibGVkIGFuZCBjb25maWd1cmVkIGF0IHJ1bnRpbWUuIFRoZSBhaW0gaXMgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGN1cnJlbnQgc3RhdGUgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBnYXBzIG9yIGFyZWFzIHRoYXQgbWF5IG5lZWQgcmVmaW5lbWVudCwgZXNwZWNpYWxseSBpZiB0aGlzIGlzIGEgbmV3IHBsYXRmb3JtIGJyaW5nLXVwIG9yIGEgc3BlY2lmaWMgZmVhdHVyZSBhZGRpdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkxNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjIyOjI2LjAwMzUyNTMwNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjIyNjYwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNRElPX1JFQUxURUtfUlRMOTMwMFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tZGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz0xNjY9Y29uZmlnIE1ESU9fSVBRODA2NFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3My1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTc0OmNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzUtXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgUlRMODN4eC9SVEw5M3h4IE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlPTIzPW9iai0kKENPTkZJR19NRElPX1BJQzY0SFBTQylcXHRcXHQrPSBtZGlvLXBpYzY0aHBzYy5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfTURJT19SRUFMVEVLX1JUTDkzMDApXFx0Kz0gbWRpby1yZWFsdGVrLXJ0bDkzMDAub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGUtMjUtb2JqLSQoQ09ORklHX01ESU9fUkVHTUFQKVxcdFxcdCs9IG1kaW8tcmVnbWFwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MjI6MjYuMDU5NzU3NTY5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg1Nzk1NjczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE1ESU8gS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgTURJTyBkcml2ZXIuIEEgZ29vZCBzdGFydGluZyBwb2ludCBpcyBhbHdheXMgdGhlIEtjb25maWcgZmlsZSwgc28gSSdtIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBkcml2ZXJzL25ldC9tZGlvL0tjb25maWdgLiBTcGVjaWZpY2FsbHksIGFyb3VuZCBsaW5lIDE3NC4uLiB0aGF0J3Mgd2hlcmUgSSB1c3VhbGx5IGZpbmQgdGhlIG1lYXQgb2YgdGhlIHJlbGV2YW50IG9wdGlvbnMuIEkgd2FudCB0byBxdWlja2x5IGdyYXNwIHRoZSBkZXBlbmRlbmNpZXMg4oCTIHdoYXQgb3RoZXIgZmVhdHVyZXMgb3IgZHJpdmVycyBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIHRoZXNlIE1ESU8gb3B0aW9ucyBiZWNvbWUgYXZhaWxhYmxlPyBBbHNvLCBJIG5lZWQgdG8gcmV2aWV3IHRoZSBkZXNjcmlwdGlvbnMgdG8gcXVpY2tseSBnZXQgYSBzZW5zZSBvZiB3aGF0IGVhY2ggb3B0aW9uIGFjdHVhbGx5ICpkb2VzKiBpbiBwcmFjdGljYWwgdGVybXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGZvdW5kYXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBNRElPIGNvbmZpZ3VyYXRpb24gd29ya3Mgd2l0aGluIHRoaXMgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDU2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MjI6MjguOTE3NzE2MTg3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3MDpcXHRcXHRoZWxwXFxuIDE3MTpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBNRElPIGludGVyZmFjZSBmb3VuZCBpbiB0aGUgbmV0d29ya1xcbiAxNzI6XFx0XFx0ICBpbnRlcmZhY2UgdW5pdHMgb2YgdGhlIElQUTgwNjQgU29DXFxuIDE3MzpcXHRcXG4gMTc0OlxcdGNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFxcbiAxNzU6XFx0XFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgUlRMODN4eC9SVEw5M3h4IE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcXFwiXFxuIDE3NjpcXHRcXHRkZXBlbmRzIG9uIE1BQ0hfUkVBTFRFS19SVEwgfHwgQ09NUElMRV9URVNUXFxuIDE3NzpcXHRcXHRoZWxwXFxuIDE3ODpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBNRElPIGludGVyZmFjZSBmb3VuZCBpbiB0aGUgUmVhbHRla1xcbiAxNzk6XFx0XFx0ICBSVEw4M3h4L1JUTDkzeHggZmFtaWx5IG9mIEV0aGVybmV0IHN3aXRjaGVzIHdpdGggaW50ZWdyYXRlZCBTb0MuXFxuIDE4MDpcXHRcXG4gMTgxOlxcdGNvbmZpZyBNRElPX1JFR01BUFxcbiAxODI6XFx0XFx0dHJpc3RhdGVcXG4gMTgzOlxcdFxcdGhlbHBcXG4gMTg0OlxcdFxcdCAgVGhpcyBkcml2ZXIgYWxsb3dzIHVzaW5nIE1ESU8gZGV2aWNlcyB0aGF0IGFyZSBub3Qgc2l0dGluZyBvbiBhXFxuIDE4NTpcXHRcXHQgIHJlZ3VsYXIgTURJTyBidXMsIGJ1dCBzdGlsbCBleHBvc2VzIHRoZSBzdGFuZGFyZCA4MDIuMyByZWdpc3RlclxcbiAxODY6XFx0XFx0ICBsYXlvdXQuIEl0J3MgcmVnbWFwLWJhc2VkIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgb24gaW50ZWdyYXRlZCxcXG4gMTg3OlxcdFxcdCAgbWVtb3J5LW1hcHBlZCBQSFlzLCBTUEkgUEhZcyBhbmQgc28gb24uIEEgbmV3IHZpcnR1YWwgTURJTyBidXMgaXNcXG4gMTg4OlxcdFxcdCAgY3JlYXRlZCwgYW5kIGl0cyByZWFkL3dyaXRlIG9wZXJhdGlvbnMgYXJlIG1hcHBlZCB0byB0aGUgdW5kZXJseWluZ1xcbiAxODk6XFx0XFx0ICByZWdtYXAuIFVzZXJzIHdpbGxpbmcgdG8gdXNlIHRoaXMgZHJpdmVyIG11c3QgZXhwbGljaXRseSBzZWxlY3RcXG4gMTkwOlxcdFxcdCAgUkVHTUFQLlxcbiAxOTE6XFx0XFxuIDE5MjpcXHRjb25maWcgTURJT19USFVOREVSXFxuIDE5MzpcXHRcXHR0cmlzdGF0ZSBcXFwiVGh1bmRlclggU09DcyBNRElPIGJ1c2VzXFxcIlxcbiAxOTQ6XFx0XFx0ZGVwZW5kcyBvbiA2NEJJVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoyMjoyOC45MTc4MDUyNDdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODMxMTQ3NzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBSZWFsdGVrIFJUTDkzMDAgTURJTyBkcml2ZXIgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgaG93IGl0J3MgaW5pdGlhbGl6ZWQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIHNvdXJjZSBjb2RlIGl0c2VsZi4gSSdsbCBvcGVuIHVwIGBkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNgIHRvIGV4YW1pbmUgaXRzIHByb2JpbmcgcHJvY2Vzcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBpZGVudGlmeWluZyB3aGF0IGtpbmQgb2YgcGxhdGZvcm0gZGV2aWNlIGl0J3MgZGVzaWduZWQgdG8gd29yayB3aXRoLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyBleHBlY3RlZCBoYXJkd2FyZSBlbnZpcm9ubWVudCBhbmQgcmVzb3VyY2UgcmVxdWlyZW1lbnRzLiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoYXQgdG8gbWFrZSBhbnkgbW9kaWZpY2F0aW9ucyBvciBkZWJ1ZyBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMjUsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjIyOjMwLjc0ODk1NTc1OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ5MDI4MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX3BsYXRmb3JtX2RyaXZlcnxwbGF0Zm9ybV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYz0xMjQwPU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG90dG9fZW1kaW9faWRzKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMTI0MS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6MTI0MjpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvdHRvX2VtZGlvX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMTI0My1cXHQucHJvYmUgPSBvdHRvX2VtZGlvX3Byb2JlLFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTEyNTAtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjEyNTE6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihvdHRvX2VtZGlvX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTEyNTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjIyOjMwLjgwMzg2NDgwMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjIzMDQzNzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBSVEw5MzAwIE1ESU8gUHJvYmUqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBwcm9iZSBmdW5jdGlvbiB3aXRoaW4gYGRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIHJlYWxseSBzdGFydHMgaGFwcGVuaW5nIGZvciB0aGlzIHBhcnRpY3VsYXIgUmVhbHRlayBzd2l0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBkcml2ZXIgaW5pdGlhbGl6ZXMgaXRzZWxmIG9uIHRoZSBoYXJkd2FyZS4gV2hhdCdzIHRoZSBkZXRlY3Rpb24gbWVjaGFuaXNtPyBXaGF0IHJlc291cmNlcyBhcmUgYmVpbmcgcmVxdWVzdGVkIGFuZCBtYXBwZWQ/IEFyZSB0aGVyZSBhbnkgcXVpcmt5IGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcyBJIHNob3VsZCBiZSBhd2FyZSBvZiwgdGhlIFwiZ290Y2hhc1wiIFJlYWx0ZWsgbWlnaHQndmUgdGhyb3duIGluPyBJJ2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqRGV2aWNlIElEL1ZlbmRvciBJRCBjaGVja3M6KiogSG93IGRvZXMgaXQgZGV0ZXJtaW5lIHRoaXMgaXMgaW5kZWVkIGEgUlRMOTMwMD8gSXMgaXQgdXNpbmcgYSBzdGFuZGFyZCBQQ0kgSUQsIG9yIHNvbWV0aGluZyBjdXN0b20/XG4qICAgKipSZXNvdXJjZSBhbGxvY2F0aW9uOioqIFdoYXQncyBnZXR0aW5nIG1hcHBlZD8gSSdtIGV4cGVjdGluZyBhdCBsZWFzdCBhbiBNTUlPIHJlZ2lvbiwgcG90ZW50aWFsbHkgc29tZSBpbnRlcnJ1cHQgbGluZXMuIEknbSBnb2luZyB0byB3YW50IHRvIHNlZSB0aGUgZGV0YWlscyBvbiBgaW9yZW1hcCgpYCBjYWxscy5cbiogICAqKk1ESU8gYnVzIGluaXRpYWxpemF0aW9uOioqIEhvdyBpcyBpdCBpbnRlZ3JhdGluZyB3aXRoIHRoZSBnZW5lcmljIE1ESU8gZnJhbWV3b3JrPyBBcmUgdGhlcmUgYW55IGN1c3RvbSBjYWxsYmFja3MgaW52b2x2ZWQgdG8gc2V0IHVwIHRoZSBNRElPIGJ1cyBmb3IgdGhlIHNwZWNpZmljIGhhcmR3YXJlP1xuKiAgICoqQ2hpcHNldC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbjoqKiBXaGF0IHJlZ2lzdGVycyBhcmUgYmVpbmcgd3JpdHRlbiB0bz8gSXMgdGhlcmUgYSBib290IHNlcXVlbmNlPyBBcmUgdGhleSBlbmFibGluZyBjZXJ0YWluIGZlYXR1cmVzLCBvciBjb25maWd1cmluZyBjbG9ja3MgYXQgdGhpcyBzdGFnZT8gQXJlIHRoZXJlIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBxdWlya3MgKGUuZy4gRFQgYmluZGluZ3MpP1xuKiAgICoqRXJyb3IgaGFuZGxpbmc6KiogV2hhdCBhcmUgdGhlIGVycm9yIHBhdGhzPyBXaGF0IGhhcHBlbnMgaWYgdGhlIGRldmljZSBpcyBub3QgcHJlc2VudCwgb3IgdGhlIGluaXRpYWxpemF0aW9uIGZhaWxzP1xuKiAgICoqRHJpdmVyIG1vZGVsIHJlZ2lzdHJhdGlvbjoqKiBTcGVjaWZpY2FsbHksIGhvdyB0aGlzIGhhcmR3YXJlIGlzIHByZXNlbnRlZCB0byB0aGUgbmV0d29ya2luZyBzdGFjay4gV2hhdCdzIHRoZSBsaW5rIGJldHdlZW4gdGhpcyBNRElPIGRyaXZlciBhbmQgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGRyaXZlcnM/XG4qICAgKipJUlEgSGFuZGxpbmc6KiogSG93IGFyZSBpbnRlcnJ1cHRzIGJlaW5nIHNldCB1cD8gSXMgaXQgdXNpbmcgTVNJLVggb3IgdHJhZGl0aW9uYWwgaW50ZXJydXB0cz9cblxuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueXRoaW5nIG5vbi1zdGFuZGFyZCwgYW55dGhpbmcgdGhhdCBkZXZpYXRlcyBmcm9tIHRoZSB0eXBpY2FsIE1ESU8gZHJpdmVyIHBhdHRlcm4uIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSByZWFsbHkgaW50ZXJlc3RpbmcgZGV0YWlscyBhcmUuIEknbGwgYmUga2VlcGluZyBhIGNsb3NlIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcywgdG9vLCBvciBhbnkgcG9pbnRzIHdoZXJlIGl0IG1pZ2h0IGJlIGltcHJvdmVkIG9yIG1hZGUgY2xlYXJlciBmb3IgdGhlIG5leHQgZGV2ZWxvcGVyIHdobyBoYXMgdG8gdG91Y2ggdGhpcyBjb2RlLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MDEsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoyMjozNS4wMjY5MTA5NThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAwLFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDAwOlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwgXFxcIiVwZndQIG1pc3NpbmcgZXRoZXJuZXQtcG9ydHNcXFxcblxcXCIsXFxuMTAwMTpcXHRcXHRcXHRcXHRcXHQgICAgIGRldl9md25vZGUocGFyZW50KSk7XFxuMTAwMjpcXHRcXG4xMDAzOlxcdFxcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlX3Njb3BlZChwb3J0c19kbiwgcG9ydF9kbikge1xcbjEwMDQ6XFx0XFx0XFx0Y3RybF9kbiA9IE5VTEw7XFxuMTAwNTpcXHRcXHRcXHRidXNfZG4gPSBOVUxMO1xcbjEwMDY6XFx0XFx0XFx0cGh5X2RuID0gb2ZfcGFyc2VfcGhhbmRsZShwb3J0X2RuLCBcXFwicGh5LWhhbmRsZVxcXCIsIDApO1xcbjEwMDc6XFx0XFx0XFx0Lyogc2tpcCBwb3J0cyB3aXRob3V0IHBoeXMgKi9cXG4xMDA4OlxcdFxcdFxcdGlmICghcGh5X2RuKVxcbjEwMDk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTAxMDpcXHRcXG4xMDExOlxcdFxcdFxcdGJ1c19kbiA9IG90dG9fZW1kaW9fZ2V0X2J1c19ub2RlKHBoeV9kbik7XFxuMTAxMjpcXHRcXHRcXHRpZiAoIWJ1c19kbilcXG4xMDEzOlxcdFxcdFxcdFxcdGdvdG8gcHV0X25vZGVzO1xcbjEwMTQ6XFx0XFxuMTAxNTpcXHRcXHRcXHRjdHJsX2RuID0gb2ZfZ2V0X3BhcmVudChidXNfZG4pO1xcbjEwMTY6XFx0XFx0XFx0Lyogb25seSBtYXAgcG9ydHMgdGhhdCBhcmUgY29ubmVjdGVkIHRvIHRoaXMgbWRpby1jb250cm9sbGVyICovXFxuMTAxNzpcXHRcXHRcXHRpZiAoY3RybF9kbiAhPSBkZXYtXFx1MDAzZW9mX25vZGUpXFxuMTAxODpcXHRcXHRcXHRcXHRnb3RvIHB1dF9ub2RlcztcXG4xMDE5OlxcdFxcbjEwMjA6XFx0XFx0XFx0ZXJyID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocG9ydF9kbiwgXFxcInJlZ1xcXCIsIFxcdTAwMjZwbik7XFxuMTAyMTpcXHRcXHRcXHRpZiAoZXJyKVxcbjEwMjI6XFx0XFx0XFx0XFx0Z290byBwdXRfbm9kZXM7XFxuMTAyMzpcXHRcXG4xMDI0OlxcdFxcdFxcdGlmIChwbiBcXHUwMDNlPSBwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2VudW1fcG9ydHMpIHtcXG4xMDI1OlxcdFxcdFxcdFxcdGVyciA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLCBcXFwiaWxsZWdhbCBwb3J0IG51bWJlciAlZFxcXFxuXFxcIiwgcG4pO1xcbjEwMjY6XFx0XFx0XFx0XFx0Z290byBwdXRfbm9kZXM7XFxuMTAyNzpcXHRcXHRcXHR9XFxuMTAyODpcXHRcXG4xMDI5OlxcdFxcdFxcdGlmICh0ZXN0X2JpdChwbiwgcHJpdi1cXHUwMDNldmFsaWRfcG9ydHMpKSB7XFxuMTAzMDpcXHRcXHRcXHRcXHRlcnIgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwgXFxcImR1cGxpY2F0ZWQgcG9ydCBudW1iZXIgJWRcXFxcblxcXCIsIHBuKTtcXG4xMDMxOlxcdFxcdFxcdFxcdGdvdG8gcHV0X25vZGVzO1xcbjEwMzI6XFx0XFx0XFx0fVxcbjEwMzM6XFx0XFxuMTAzNDpcXHRcXHRcXHRlcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihidXNfZG4sIFxcXCJyZWdcXFwiLCBcXHUwMDI2YnVzKTtcXG4xMDM1OlxcdFxcdFxcdGlmIChlcnIpXFxuMTAzNjpcXHRcXHRcXHRcXHRnb3RvIHB1dF9ub2RlcztcXG4xMDM3OlxcdFxcbjEwMzg6XFx0XFx0XFx0aWYgKGJ1cyBcXHUwMDNlPSBwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2VudW1fYnVzZXMpIHtcXG4xMDM5OlxcdFxcdFxcdFxcdGVyciA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLCBcXFwiaWxsZWdhbCBzbWkgYnVzIG51bWJlciAlZFxcXFxuXFxcIiwgYnVzKTtcXG4xMDQwOlxcdFxcdFxcdFxcdGdvdG8gcHV0X25vZGVzO1xcbjEwNDE6XFx0XFx0XFx0fVxcbjEwNDI6XFx0XFxuMTA0MzpcXHRcXHRcXHRhZGRyID0gb2ZfbWRpb19wYXJzZV9hZGRyKGRldiwgcGh5X2RuKTtcXG4xMDQ0OlxcdFxcdFxcdGlmIChhZGRyIFxcdTAwM2MgMCkge1xcbjEwNDU6XFx0XFx0XFx0XFx0ZXJyID0gYWRkcjtcXG4xMDQ2OlxcdFxcdFxcdFxcdGdvdG8gcHV0X25vZGVzO1xcbjEwNDc6XFx0XFx0XFx0fVxcbjEwNDg6XFx0XFxuMTA0OTpcXHRcXHRcXHQvKlxcbjEwNTA6XFx0XFx0XFx0ICogVGhlIE1ESU8gYWNjZXNzZXMgZnJvbSB0aGUga2VybmVsIHdvcmsgd2l0aCB0aGUgUEhZIHBvbGxpbmcgdW5pdCBpbiB0aGVcXG4xMDUxOlxcdFxcdFxcdCAqIHN3aXRjaC4gVGhlIFBQVSBlaXRoZXIgb3BlcmF0ZXMgaW4gR1BIWSAoaS5lLiBjbGF1c2UgMjIpIG9yIDEwR1BIWSBtb2RlXFxuMTA1MjpcXHRcXHRcXHQgKiAoaS5lLiBjbGF1c2UgNDUpLiBTZWxlY3QgMTBHUEhZIG1vZGUgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIFBIWSB0aGF0XFxuMTA1MzpcXHRcXHRcXHQgKiBkZWNsYXJlcyBjb21wYXRpYmxlID0gXFxcImV0aGVybmV0LXBoeS1pZWVlODAyLjMtYzQ1XFxcIi5cXG4xMDU0OlxcdFxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoyMjozNS4wMjcwMTM2MjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkyODQ5ODMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIFwiTGV0J3Mgc2VlIHRoZSBzdGFydCBvZiBgb3R0b19lbWRpb19wcm9iZWBcIiwgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IERpdmluZyBpbnRvIGBvdHRvX2VtZGlvX3Byb2JlYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGUgcGhyYXNlIFwiTGV0J3Mgc2VlIHRoZSBzdGFydCBvZiBgb3R0b19lbWRpb19wcm9iZWBcIiBpbW1lZGlhdGVseSBzaWduYWxzIGEgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsIGNvbmRpdGlvbnMgb3IgZW50cnkgcG9pbnQgb2YgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBvciBtb2R1bGUsIGBvdHRvX2VtZGlvX3Byb2JlYC4gIE15IG1pbmQncyBhbHJlYWR5IHJhY2luZyB0aHJvdWdoIHBvc3NpYmlsaXRpZXMuIFdoYXQgaXMgdGhpcyBwcm9iZSAqZm9yKj8gSXMgaXQgYSBkcml2ZXIsIGEgaGFyZHdhcmUgaW50ZXJhY3Rpb24gcm91dGluZSwgYSBkZWJ1Z2dpbmcgdXRpbGl0eSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBuYW1lIGl0c2VsZiBnaXZlcyBhIHZhZ3VlIGhpbnQsIHBlcmhhcHMgcmVsYXRpbmcgdG8gJ2VtZGlvJyBhbmQgJ290dG8nLCBidXQgSSdsbCBuZWVkIG1vcmUgY29udGV4dCB0byB0cnVseSBrbm93LiBNeSBwcmltYXJ5IGZvY3VzIGlzIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGJyb2FkZXIgc3lzdGVtLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSBpbml0aWFsIGxpbmVzIG9mIGNvZGUg4oCTIGxpa2VseSBpbml0aWFsaXphdGlvbiwgZGV2aWNlIGlkZW50aWZpY2F0aW9uLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgcGFyYW1ldGVyIHZhbGlkYXRpb24uIFRoZSB3YXkgdGhlIHByb2JlIGlzIGhhbmRsZWQgd2lsbCB0ZWxsIGEgbG90IGFib3V0IHRoZSBhcmNoaXRlY3R1cmUuIEknbSBob3BpbmcgaXQncyB3ZWxsLWNvbW1lbnRlZCwgYnV0IEknbSBwcmVwYXJlZCBmb3IgYSBiaXQgb2YgZGlnZ2luZyB0byBkaXNjZXJuIGl0cyBjb3JlIGZ1bmN0aW9uIGlmIGl0IGlzbid0LiBJJ20ga2VlbiB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiB3aGF0IGl0J3MgcmVzcG9uc2libGUgZm9yLiBMZXQncyBzZWUgaWYgd2UgY2FuIGdldCBhIGhhbmRsZSBvbiB0aGlzIHF1aWNrbHk7IEknbSBlYWdlciB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGlzIHByb2JlIGlzIHJlYWxseSBhYm91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwODMsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjIyOjM3Ljk1NTUxNDMzNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODAsXG4gIFwiTGluZUNvdW50XCI6IDU1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODA6XFx0XFx0XFx0aWYgKGVycilcXG4xMDgxOlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTA4MjpcXHRcXHR9XFxuMTA4MzpcXHRcXG4xMDg0OlxcdFxcdHJldHVybiAwO1xcbjEwODU6XFx0fVxcbjEwODY6XFx0XFxuMTA4NzpcXHRzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4xMDg4OlxcdHtcXG4xMDg5OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuMTA5MDpcXHRcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2O1xcbjEwOTE6XFx0XFx0aW50IGVycjtcXG4xMDkyOlxcdFxcbjEwOTM6XFx0XFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbjEwOTQ6XFx0XFx0aWYgKCFwcml2KVxcbjEwOTU6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTA5NjpcXHRcXG4xMDk3OlxcdFxcdGVyciA9IGRldm1fbXV0ZXhfaW5pdChkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKTtcXG4xMDk4OlxcdFxcdGlmIChlcnIpXFxuMTA5OTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjExMDA6XFx0XFxuMTEwMTpcXHRcXHRwcml2LVxcdTAwM2VpbmZvID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7XFxuMTEwMjpcXHRcXHRwcml2LVxcdTAwM2VyZWdtYXAgPSBzeXNjb25fbm9kZV90b19yZWdtYXAoZGV2LVxcdTAwM2VwYXJlbnQtXFx1MDAzZW9mX25vZGUpO1xcbjExMDM6XFx0XFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VyZWdtYXApKVxcbjExMDQ6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cXHUwMDNlcmVnbWFwKTtcXG4xMTA1OlxcdFxcbjExMDY6XFx0XFx0ZXJyID0gb3R0b19lbWRpb19pbml0X3BvbGxpbmcocHJpdik7XFxuMTEwNzpcXHRcXHRpZiAoZXJyKVxcbjExMDg6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMTA5OlxcdFxcbjExMTA6XFx0XFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7XFxuMTExMTpcXHRcXG4xMTEyOlxcdFxcdGVyciA9IG90dG9fZW1kaW9fbWFwX3BvcnRzKGRldik7XFxuMTExMzpcXHRcXHRpZiAoZXJyKVxcbjExMTQ6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMTE1OlxcdFxcbjExMTY6XFx0XFx0ZXJyID0gb3R0b19lbWRpb19zZXR1cF90b3BvbG9neShwcml2KTtcXG4xMTE3OlxcdFxcdGlmIChlcnIpXFxuMTExODpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjExMTk6XFx0XFxuMTEyMDpcXHRcXHRpZiAocHJpdi1cXHUwMDNlaW5mby1cXHUwMDNlc2V0dXBfY29udHJvbGxlcikge1xcbjExMjE6XFx0XFx0XFx0ZXJyID0gcHJpdi1cXHUwMDNlaW5mby1cXHUwMDNlc2V0dXBfY29udHJvbGxlcihwcml2KTtcXG4xMTIyOlxcdFxcdFxcdGlmIChlcnIpXFxuMTEyMzpcXHRcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXFxcImZhaWxlZCB0byBzZXR1cCBNRElPIGJ1cyBjb250cm9sbGVyXFxcXG5cXFwiKTtcXG4xMTI0OlxcdFxcdH1cXG4xMTI1OlxcdFxcbjExMjY6XFx0XFx0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGVfc2NvcGVkKGRldi1cXHUwMDNlb2Zfbm9kZSwgY2hpbGQpIHtcXG4xMTI3OlxcdFxcdFxcdGVyciA9IG90dG9fZW1kaW9fcHJvYmVfb25lKGRldiwgcHJpdiwgY2hpbGQpO1xcbjExMjg6XFx0XFx0XFx0aWYgKGVycilcXG4xMTI5OlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTEzMDpcXHRcXHR9XFxuMTEzMTpcXHRcXG4xMTMyOlxcdFxcdHJldHVybiAwO1xcbjExMzM6XFx0fVxcbjExMzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjIyOjM3Ljk1NTYzNjA2NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NzE1OTI0OTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBvdHRvX2VtZGlvX3Byb2JlYCBEcml2ZXIncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHdoZXRoZXIgb3Igbm90IGBvdHRvX2VtZGlvX3Byb2JlYCwgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIFJlYWx0ZWsgUlRMODN4eC9SVEw5M3h4IEV0aGVybmV0IHN3aXRjaCBTb0NzIChNSVBTL0FSTSksIGlzIGEgdmlhYmxlIHRhcmdldCBmb3IgZnV6emluZyB3aXRoaW4gdGhlIGNvbnN0cmFpbnRzIG9mIHN0YW5kYXJkIHZpcnR1YWxpemVkIHg4Nl82NC9hbWQ2NCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgc3BlY2lmaWNhbGx5IHdpdGggc3l6a2FsbGVyLlxuXG5GaXJzdCwgSSBzZWUgaXQncyBsaW5rZWQgdG8gYE1BQ0hfUkVBTFRFS19SVExgIG9yIGBDT01QSUxFX1RFU1RgLCB3aGljaCBpc24ndCBkaXJlY3RseSBpbmZvcm1hdGl2ZSwgYnV0IHRlbGxzIG1lIGl0J3MgdGllZCB0byBhIHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24uIEl0J3MgRGV2aWNlIFRyZWUgZGVwZW5kZW50LCB3aGljaCBpcyBzdGFuZGFyZCBmb3IgcGxhdGZvcm0gZGV2aWNlcyB0aGVzZSBkYXlzIChgZGV2LVx1MDAzZW9mX25vZGVgLCBhbmQgdXNlcyBgc3lzY29uX25vZGVfdG9fcmVnbWFwYCkuIENydWNpYWxseSwgbXkgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBgYW1kNjRgLCBub3QgdGhlIG5hdGl2ZSBNSVBTL0FSTSBvZiB0aGUgUlRMIGNoaXBzLlxuXG5Ob3csIGxldCdzIGFwcGx5IHRoZSBXb3J0aEZ1enppbmcgY3JpdGVyaWEuIEknbSBsb29raW5nIGZvciAqbmVnYXRpdmUqIGluZGljYXRvcnMsIHJlYXNvbnMgdG8gZXhjbHVkZSB0aGlzIGRyaXZlciBmcm9tIGZ1enppbmcuIFRoZSBjcml0ZXJpYSBvdXRsaW5lZCBzdGF0ZTpcblxuKiAgICoqTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoqKiBUaGlzIHNlZW1zIHVubGlrZWx5LiBUaGlzIGlzIGEgY29yZSBkcml2ZXIsIHNvIGl0J3MgcHJvYmFibHkgYWN0dWFsIGtlcm5lbCBjb2RlLlxuKiAgICoqU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOioqIEFoLCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIFJlYWx0ZWsgUlRMODN4eC9SVEw5M3h4IEV0aGVybmV0IHN3aXRjaCBTb0NzICphcmUqIHNwZWNpYWxpemVkIGhhcmR3YXJlLiBUaGlzIGZlZWxzIGxpa2UgaXQgbWlnaHQgYXBwbHkuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBwaHlzaWNhbCBBU0lDIG9yIHNwZWNpYWxpemVkIGhhcmR3YXJlLCBwcm9iYWJseSBub3QgZW11bGF0ZWQgZmFpdGhmdWxseSB3aXRoaW4gUUVNVS4gVGhpbmdzIGxpa2UgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUgYXJlIGV4Y2x1ZGVkLCBidXQgaXMgdGhpcyBzaW1pbGFyIGVub3VnaD9cbiogICAqKlVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoqKiAgVGhpcyBpcyBwcm9iYWJseSBub3QgdGhlIGNhc2UsIHNpbmNlIGl0IHVzZXMgYHJlbW92ZWAsIGBzaHV0ZG93bmAsIGV0Yy5cblxuVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIG5vdyBpcywgaXMgYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgIGEgKnBsYXRmb3JtKiBkcml2ZXIgdGhhdCdzIGZ1bmRhbWVudGFsbHkgcmVsaWFudCBvbiBhIHNwZWNpZmljIFJlYWx0ZWsgaGFyZHdhcmUgKmNvbmZpZ3VyYXRpb24qLCBzcGVjaWZpY2FsbHkgYE1BQ0hfUkVBTFRFS19SVExgPyBJZiBzbywgdGhpcyBkcml2ZXIgbGlrZWx5IGRlcGVuZHMgb24gYW4gUlRMODN4eC9SVEw5M3h4IGNoaXAgYW5kIHJlbGF0ZWQgaGFyZHdhcmUgdGhhdCdzICpub3QqIGdlbmVyYWxseSBlbXVsYXRlZCBpbiBhIHN0YW5kYXJkIGZ1enppbmcgc2V0dXAuIEdpdmVuIHRoYXQgaXQgcmVsaWVzIG9uIGBNQUNIX1JFQUxURUtfUlRMYCBJIHRoaW5rIEknbGwgbmVlZCB0byByZXNlYXJjaCBhbmQgY29uZmlybSB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoaXMgcGxhdGZvcm0gaW4gZW11bGF0ZWQgZW52aXJvbm1lbnRzLiBNeSBpbml0aWFsIGluY2xpbmF0aW9uIGlzIHRvIHNheSBpdCdzICpwcm9iYWJseSogbm90IHdvcnRoIGZ1enppbmcgZGlyZWN0bHkgd2l0aCBhIHN0YW5kYXJkIHNldHVwLiBJJ2QgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGVtdWxhdGlvbiBjYXBhYmlsaXRpZXMsIG1heWJlIGV2ZW4gdHJ5aW5nIHRvIGZpbmQgYSBtYXRjaGluZyBRRU1VIGltYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIwOSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE3OjIyOjQyLjY3MTU2MjdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTYxOTgyNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUFDSF9SRUFMVEVLX1JUTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL21pcHMvS2NvbmZpZz02ODE9Y29uZmlnIFJBTElOS1xcbi0tXFxuYXJjaC9taXBzL0tjb25maWctNjk4LVxcbmFyY2gvbWlwcy9LY29uZmlnOjY5OTpjb25maWcgTUFDSF9SRUFMVEVLX1JUTFxcbmFyY2gvbWlwcy9LY29uZmlnLTcwMC1cXHRib29sIFxcXCJSZWFsdGVrIFJUTDgzOHgvUlRMODM5eCBiYXNlZCBtYWNoaW5lc1xcXCJcXG4tLVxcbmFyY2gvbWlwcy9ib290L2R0cy9yZWFsdGVrL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmFyY2gvbWlwcy9ib290L2R0cy9yZWFsdGVrL01ha2VmaWxlOjI6ZHRiLSQoQ09ORklHX01BQ0hfUkVBTFRFS19SVEwpXFx0Kz0gY2lzY29fc2cyMjAtMjYuZHRiXFxuYXJjaC9taXBzL2Jvb3QvZHRzL3JlYWx0ZWsvTWFrZWZpbGU6MzpkdGItJChDT05GSUdfTUFDSF9SRUFMVEVLX1JUTClcXHQrPSBjYW1lby1ydGw5MzAyYy0yeC1ydGw4MjI0LTJ4Z2UuZHRiXFxuLS1cXG5hcmNoL21pcHMvZ2VuZXJpYy9NYWtlZmlsZT0xNT1vYmotJChDT05GSUdfVklSVF9CT0FSRF9SQU5DSFUpXFx0XFx0Kz0gYm9hcmQtcmFuY2h1Lm9cXG5hcmNoL21pcHMvZ2VuZXJpYy9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfTUFDSF9SRUFMVEVLX1JUTClcXHRcXHQrPSBib2FyZC1yZWFsdGVrLm9cXG4tLVxcbmRyaXZlcnMvZ3Bpby9LY29uZmlnPTYyNT1jb25maWcgR1BJT19SRUFMVEVLX09UVE9cXG5kcml2ZXJzL2dwaW8vS2NvbmZpZy02MjYtXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgT3R0byBHUElPIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9ncGlvL0tjb25maWc6NjI3OlxcdGRlcGVuZHMgb24gTUFDSF9SRUFMVEVLX1JUTCB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL2dwaW8vS2NvbmZpZzo2Mjg6XFx0ZGVmYXVsdCBNQUNIX1JFQUxURUtfUlRMXFxuZHJpdmVycy9ncGlvL0tjb25maWctNjI5LVxcdHNlbGVjdCBHUElPX0dFTkVSSUNcXG4tLVxcbmRyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnPTExMDM9Y29uZmlnIEkyQ19SVEw5MzAwXFxuZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWctMTEwNC1cXHR0cmlzdGF0ZSBcXFwiUmVhbHRlayBSVEw5MzAwIEkyQyBjb250cm9sbGVyXFxcIlxcbmRyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnOjExMDU6XFx0ZGVwZW5kcyBvbiBNQUNIX1JFQUxURUtfUlRMIHx8IENPTVBJTEVfVEVTVFxcbmRyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnLTExMDYtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9pcnFjaGlwL01ha2VmaWxlPTEzMD1vYmotJChDT05GSUdfU0wyOENQTERfSU5UQylcXHRcXHQrPSBpcnEtc2wyOGNwbGQub1xcbmRyaXZlcnMvaXJxY2hpcC9NYWtlZmlsZToxMzE6b2JqLSQoQ09ORklHX01BQ0hfUkVBTFRFS19SVEwpXFx0XFx0Kz0gaXJxLXJlYWx0ZWstcnRsLm9cXG5kcml2ZXJzL2lycWNoaXAvTWFrZWZpbGUtMTMyLW9iai0kKENPTkZJR19XUENNNDUwX0FJQylcXHRcXHQrPSBpcnEtd3BjbTQ1MC1haWMub1xcbi0tXFxuZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnPTY0PWNvbmZpZyBNVERfTkFORF9FQ0NfUkVBTFRFS1xcbi0tXFxuZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnLTY2LSAgICAgICAgZGVwZW5kcyBvbiBIQVNfSU9NRU0gXFx1MDAyNlxcdTAwMjYgSEFTX0RNQVxcbmRyaXZlcnMvbXRkL25hbmQvS2NvbmZpZzo2NzogICAgICAgIGRlcGVuZHMgb24gTUFDSF9SRUFMVEVLX1JUTCB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL210ZC9uYW5kL0tjb25maWctNjgtICAgICAgICBzZWxlY3QgTVREX05BTkRfRUNDXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc9MTc0PWNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzUtXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgUlRMODN4eC9SVEw5M3h4IE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE3NjpcXHRkZXBlbmRzIG9uIE1BQ0hfUkVBTFRFS19SVEwgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3Ny1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL3NwaS9LY29uZmlnPTkxNj1jb25maWcgU1BJX1JFQUxURUtfU05BTkRcXG5kcml2ZXJzL3NwaS9LY29uZmlnLTkxNy1cXHR0cmlzdGF0ZSBcXFwiUmVhbHRlayBTUEktTkFORCBGbGFzaCBDb250cm9sbGVyXFxcIlxcbmRyaXZlcnMvc3BpL0tjb25maWc6OTE4OlxcdGRlcGVuZHMgb24gTUFDSF9SRUFMVEVLX1JUTCB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL3NwaS9LY29uZmlnLTkxOS1cXHRzZWxlY3QgUkVHTUFQXFxuLS1cXG5kcml2ZXJzL3NwaS9NYWtlZmlsZT0xMzE9b2JqLSQoQ09ORklHX1NQSV9SQjRYWClcXHRcXHRcXHQrPSBzcGktcmI0eHgub1xcbmRyaXZlcnMvc3BpL01ha2VmaWxlOjEzMjpvYmotJChDT05GSUdfTUFDSF9SRUFMVEVLX1JUTClcXHRcXHQrPSBzcGktcmVhbHRlay1ydGwub1xcbmRyaXZlcnMvc3BpL01ha2VmaWxlLTEzMy1vYmotJChDT05GSUdfU1BJX1JFQUxURUtfU05BTkQpXFx0XFx0Kz0gc3BpLXJlYWx0ZWstcnRsLXNuYW5kLm9cXG4tLVxcbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZz0xMTEzPWNvbmZpZyBSRUFMVEVLX09UVE9fV0RUXFxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnLTExMTQtXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgT3R0byBNSVBTIHdhdGNoZG9nIHN1cHBvcnRcXFwiXFxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnOjExMTU6XFx0ZGVwZW5kcyBvbiBNQUNIX1JFQUxURUtfUlRMIHx8IENPTVBJTEVfVEVTVFxcbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZy0xMTE2LVxcdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xcbi0tXFxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnLTExMTgtXFx0c2VsZWN0IFJFR01BUF9NTUlPXFxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnOjExMTk6XFx0ZGVmYXVsdCBNQUNIX1JFQUxURUtfUlRMXFxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnLTExMjAtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoyMjo0NC40Njc3NjYyNDlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTUzNDg5MDk3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgUmVhbHRlayBSVEw5MzAwIE1ESU8gRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIGRlYWxpbmcgd2l0aCBhIHZlcnkgc3BlY2lmaWMsIGFuZCBsaWtlbHkgaW5hY2Nlc3NpYmxlLCBwaWVjZSBvZiBoYXJkd2FyZS4gSSBzZWUgdGhhdCBgQ09ORklHX01ESU9fUkVBTFRFS19SVEw5MzAwYCBoaW5nZXMgb24gZWl0aGVyIHRoZSBgTUFDSF9SRUFMVEVLX1JUTGAgY29uZmlndXJhdGlvbiAod2hpY2ggaXMgTUlQUy1zcGVjaWZpYykgb3IgYENPTVBJTEVfVEVTVGAuIE9uIG15IGFtZDY0IGFyY2hpdGVjdHVyZSwgaXQncyBvbmx5IGFjY2Vzc2libGUgdGhyb3VnaCBgQ09NUElMRV9URVNUYC4gRXZlbiBpZiBjb21waWxlZCwgdGhlIGRyaXZlciBpdHNlbGYgaXMgZGVzaWduZWQgZm9yIGEgUmVhbHRlayBTb0MtaW50ZWdyYXRlZCBNRElPIGJ1cyBjb250cm9sbGVyLCBzb21ldGhpbmcgbGlrZSBgcmVhbHRlayxydGw4MzgwLW1kaW9gLCBgcmVhbHRlayxydGw4MzkxLW1kaW9gLCBvciBgcmVhbHRlayxydGw5MzAxLW1kaW9gLiBUaGlzIG1lYW5zIGl0IG5lZWRzIGRldmljZSB0cmVlIG5vZGVzIHRoYXQgYXJlIGluc3RhbnRpYXRlZCBieSBhIFJlYWx0ZWsgT3R0byBNSVBTIHBsYXRmb3JtIGFuZCByZXF1aXJlcyBhIHBhcmVudCBzeXNjb24gbm9kZS5cblxuVGhlIGtpY2tlcj8gVGhlcmUncyBubyBzdGFuZGFyZCBlbXVsYXRpb24gb2YgdGhpcyBoYXJkd2FyZSBpbiB0eXBpY2FsIGFtZDY0IGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBUaGlzIGlzIGEgY3J1Y2lhbCBkZXRhaWwuIFRoaXMgZHJpdmVyIHNpbXBseSB3b24ndCBiZSByZWFjaGFibGUuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGlzIGJ5IGV4YW1pbmluZyB0aGUgZmlsZXMgY2hhbmdlZDpcblxuMS4gIGBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxgIC0gVGhpcyBpcyBkb2N1bWVudGF0aW9uL2RldmljZSB0cmVlIHNjaGVtYSwgd2hpY2ggaXNuJ3QgZXhlY3V0YWJsZSBjb2RlLlxuMi4gIGBkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNgIC0gVGhpcyBpcyB0aGUgZHJpdmVyIGl0c2VsZiwgYnV0IGZvciB0aGUgUmVhbHRlayBSVEw4Mzh4L1JUTDgzOXgvUlRMOTN4eCBNRElPIHBsYXRmb3JtIGRldmljZSwgd2hpY2ggaXMgTUlQUyBhcmNoaXRlY3R1cmUgU29DLlxuXG5TbyB0aGUgZW50aXJlIHBhdGNoIGlzIGNlbnRlcmVkIGFyb3VuZDpcblxuKiAgIEFuIHVucmVhY2hhYmxlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBTb0MgcGxhdGZvcm0gZHJpdmVyIChNSVBTIFJlYWx0ZWspLlxuKiAgIE5vbi1leGVjdXRhYmxlIGNoYW5nZXMsIGp1c3QgdGhlIERUIGJpbmRpbmdzLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhIHRvIGJlIGFic29sdXRlbHkgc3VyZTogYW1kNjQgdGFyZ2V0LCBub3Qgd29ydGggZnV6emluZywgbm8gZm9jdXMgc3ltYm9scywgbm8gZW5hYmxlIGNvbmZpZ3VyYXRpb25zLi4uIGV2ZXJ5dGhpbmcgYWxpZ25zLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIGRldmljZSB0cmVlIGJpbmRpbmdzIGFuZCBhIHBsYXRmb3JtIE1ESU8gY29udHJvbGxlciBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciBSZWFsdGVrIFJUTDgzeHgvUlRMOTN4eCBTb0NzIG9uIE1JUFMsIHdoaWNoIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiB0aGUgYW1kNjQgYXJjaGl0ZWN0dXJlLCBhbmQgdGhhdCBpcyBub3QgZW11bGF0ZWQuXG5cbkFscmlnaHQsIEkgYW0gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ2NywiT3V0cHV0VG9rZW5zIjoxMDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTc6MjI6NTAuMDAyNjU5NDU1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgRGV2aWNlVHJlZSBiaW5kaW5ncyBhbmQgdGhlIG1kaW8tcmVhbHRlay1ydGw5MzAwIGRyaXZlciBmb3IgUmVhbHRlayBSVEw4M3h4L1JUTDkzeHggRXRoZXJuZXQgc3dpdGNoIFNvQ3MgKE1JUFMgcGxhdGZvcm0pLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHg4Nl82NC9hbWQ2NCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERldmljZVRyZWUgYmluZGluZ3MgYW5kIHRoZSBtZGlvLXJlYWx0ZWstcnRsOTMwMCBkcml2ZXIgZm9yIFJlYWx0ZWsgUlRMODN4eC9SVEw5M3h4IEV0aGVybmV0IHN3aXRjaCBTb0NzIChNSVBTIHBsYXRmb3JtKS4gVGhpcyBoYXJkd2FyZSBpcyBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCB4ODZfNjQvYW1kNjQgUUVNVSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNzoyMjo1MC4wMDI2OTA0OTVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow4gcvk[1] Phase: Running StartedAt: 2026-09-09 17:23:00 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4gcvk[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-09 17:23:00 +0000 UTC FinishedAt: 2026-09-09 17:23:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}